feat(buzz-acp): --allow-dm-allowlist opt-in for explicit allowlist in DMs - #5013
joe-rodgers wants to merge 1 commit into
Conversation
… DMs The inbound author gate hardens DMs: because clients auto-p-tag every DM participant, every DM message looks like a mention, so inside a DM only the owner and cryptographically verified same-owner siblings can fire a turn. Neither --respond-to=allowlist nor --respond-to=anyone applies there. That default is right, but it silently breaks a legitimate case: an operator puts a real person on --respond-to-allowlist, that person can talk to the agent in a stream channel, and then every DM they send is dropped with no turn and no error. It is indistinguishable from a broken agent. Add --allow-dm-allowlist / BUZZ_ACP_ALLOW_DM_ALLOWLIST (default false). When set AND --respond-to=allowlist, the explicit pubkey list also admits authors inside DMs. Security tradeoff, deliberately scoped: - Only RespondTo::Allowlist is affected. RespondTo::Anyone in a DM stays owner/sibling-only even with the flag on -- allowing it would restore the original transitive-grant hole, where anyone who lands in a DM with the agent (including a DM the agent itself was asked to open with a third party) could prompt it. RespondTo::Nobody still drops everything, including the owner. - Admission remains gated on a list the operator wrote by hand, so merely being in a DM with the agent grants nothing. - What is being accepted: an allowlisted pubkey can now prompt the agent in a 1:1 DM, with no channel membership around it -- no other participants, no shared audit surface. Default-off, so existing deployments are unchanged. Threaded through CliArgs -> Config -> author_allowed and the setup-mode gate. Summary line reports " dm_allowlist=on" when active. Tests: existing DM cases now pin the flag-OFF default explicitly; added coverage for flag-ON admitting an allowlisted pubkey, still rejecting an unlisted stranger, not loosening anyone/nobody/owner-only, and still admitting owner+sibling.
|
Validating the exact scenario this unlocks, from the deployment that motivated it (2026-08-06): Owner created an agent for a family member and put her on Timeline: 19:38Z DM (no p-tag) dropped · 20:02Z DM (p-tag present) dropped · 20:14Z DM (p-tag) dropped · 20:15Z sibling probe DM → session + reply in 9s. An opt-in flag is the right shape — keeps the transitive-grant exploit closed while letting owners who explicitly vetted someone use DMs. The other thing worth pairing with this: raise the drop log from |
|
Adding a second production deployment that hit this, with the evidence, plus two small asks that hold whether or not the flag lands. Setup (all verified from the host, not the UI): Buzz Desktop Symptom: every DM from an allowlisted human is dropped. Presence online, no reaction, no reply, and nothing in the agent log at the default Isolation: with and the same author, same agent, same minute, in a What made it hard to see: the drop is logged at debug level under the desktop's default info filter, the Desktop picker says "Selected people" without mentioning that direct messages stay owner-only, and the buzz-acp README's Modes table says Support for the opt-in shape. Two asks regardless of the flag:
Our workaround until this merges, for anyone landing here: one private stream channel per person and agent, and |
What
The inbound author gate hardens DMs: because clients auto-p-tag every DM participant, every DM message looks like a mention, so inside a DM only the owner and cryptographically verified same-owner siblings can fire a turn. Neither
--respond-to=allowlistnor--respond-to=anyoneapplies there.That default is right, but it silently breaks a legitimate case: an operator puts a real person on
--respond-to-allowlist, that person can talk to the agent in a stream channel, and then every DM they send is dropped with no turn and no error. It is indistinguishable from a broken agent.This adds
--allow-dm-allowlist/BUZZ_ACP_ALLOW_DM_ALLOWLIST(default false). When set and--respond-to=allowlist, the explicit pubkey list also admits authors inside DMs.Security tradeoff, deliberately scoped
RespondTo::Allowlistis affected.RespondTo::Anyonein a DM stays owner/sibling-only even with the flag on — allowing it would restore the original transitive-grant hole, where anyone who lands in a DM with the agent (including a DM the agent itself was asked to open with a third party) could prompt it.RespondTo::Nobodystill drops everything, including the owner.Threaded through
CliArgs→Config→author_allowedand the setup-mode gate. Summary line reportsdm_allowlist=onwhen active.Testing
Existing DM cases now pin the flag-OFF default explicitly. Added coverage for flag-ON admitting an allowlisted pubkey, still rejecting an unlisted stranger, not loosening anyone/nobody/owner-only, and still admitting owner+sibling.
cargo test -p buzz-acp --release: 675 passed, 0 failed.cargo fmt --checkclean.Context
Found while running a small fleet where a second trusted principal is on the allowlist — her DMs to the agents vanished with no error, which reads exactly like a dead agent.