Skip to content

fix(desktop): explain open agent access - #2561

Merged
delkc merged 8 commits into
block:mainfrom
daveh-beep:bumble/respond-to-access-warning
Jul 30, 2026
Merged

fix(desktop): explain open agent access#2561
delkc merged 8 commits into
block:mainfrom
daveh-beep:bumble/respond-to-access-warning

Conversation

@daveh-beep

@daveh-beep daveh-beep commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Why

Hack-day feedback exposed a dangerous mismatch between the UI and the underlying access model. The Anyone respond-to mode appeared as a neutral dropdown choice, while a Buzz agent may act with the files, accounts, and tools available on the machine where it runs.

People reasonably read this as sharing a bot in a channel. The current UI did not explain that it can also share the agent's available access.

What

  • Reframes respond-to as agent access in user-facing UI.

  • Uses plain audience labels: Only me, Anyone, and Selected people.

  • Warns for both sharing modes, not just AnyoneSelected people also hands host access to someone other than the owner, so only the audience phrase differs:

    Anyone can use this agent to access your computer, including files, accounts, and connected tools.

    Selected people can use this agent to access your computer, including files, accounts, and connected tools.

  • Names the machine the agent actually runs on. A provider-backed (remote) agent reads:

    Anyone can use this agent to access the server it runs on, including any accounts and tools available there.

    The remote wording deliberately omits the owner's files — those aren't theirs to describe on a host they don't own.

  • Places the warning below the selector for Anyone, but after the people picker for Selected people, so it never sits between the user and the selection they came to make.

  • Removes Nostr, harness, pubkey, and !shutdown jargon from the primary decision copy. Direct pubkey entry remains available as an advanced path.

  • Replaces the green open-access avatar dot with an amber warning marker and accessible text. Selected access uses a separate blue status.

  • Aligns the sidebar action and profile field with the same language.

  • Records the shared-field disclosure contract in desktop/src/features/agents/AGENTS.md so future surfaces do not silently omit it.

Design decisions

Persistent inline warning, not a confirmation modal. The setting does not autosave; the consequence remains visible beside the selection until the person chooses Save access. This gives the information before commitment without adding a dismiss-and-confirm ritual that would repeat in every create/edit surface.

An unknown run location falls back to the local wording. It does not hedge with "computer or server". A remote host requires an installed buzz-backend-* provider, and without one WhereToRunSection never renders — so "server" would name a concept the owner has never been shown. When it is remote, they picked that host from the selector themselves. Surfaces never synthesize a run location they don't have.

One resolution site, published through context. AgentDialog resolves the run location (runLocationForBackend from ManagedAgent.backend, runLocationForRunOn from the create flow's WhereToRunDraft) and publishes it via AgentRunLocationContext. It is not threaded as a prop through AgentDefinitionDialog (1047 lines) or AgentInstanceEditDialog (1228 lines) — neither uses the value, and both are already over the file-size ceiling. Surfaces outside that tree (EditRespondToDialog) pass the prop directly.

The copy follows the writing system's guidance for high-sensitivity decisions: lead with the material consequence, use plain actor/action language, keep helper text adjacent and persistent, and never rely on color alone.

Scope

Desktop only. The web and mobile clients do not currently expose this setting. No protocol, gate, runtime, persistence, or backend behavior changes.

This does not add team-scoped remote agents. It makes the current local-or-remote access model honest while that product work remains separate.

Validation

  • pnpm exec biome check and pnpm exec tsc --noEmit — clean
  • lib/agentAccessWarning.test.mjs (8/8) — every mode × run-location copy variant, both resolvers, unknown-reads-as-local, blank runOn is not a provider
  • ui/respondToFieldContract.test.mjs (8/8) — plain labels, both warning positions, source-order guard that the allowlist warning follows the picker, helper-not-inline-copy guard
  • agent-access-warning.spec.ts (3/3) — native local, provider-backed remote (asserts the server sentence and not "your computer"), persona-backed edit; includes a bounding-box check that the Selected people warning renders below the picker

@daveh-beep
daveh-beep marked this pull request as ready for review July 23, 2026 17:18
@daveh-beep
daveh-beep requested a review from a team as a code owner July 23, 2026 17:18
@delkc
delkc self-requested a review July 23, 2026 17:18
@delkc

delkc commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Good to me from a content/UX perspective.

@klopez4212

Copy link
Copy Markdown
Contributor

Wonder if the language should be even more of a warning that this allows people to access your computer..I know if says it but in relation to tools which softens the warning a bit in my eyes

@daveh-beep
daveh-beep force-pushed the bumble/respond-to-access-warning branch from fa114c6 to 280ff48 Compare July 28, 2026 15:10
daveh-beep added a commit to daveh-beep/buzz that referenced this pull request Jul 28, 2026
@daveh-beep

Copy link
Copy Markdown
Contributor Author

🤖 Addressed in 280ff48. The warning now leads with the direct consequence: “Anyone can send instructions to this agent and use it to access the computer or server where it runs.” I kept “computer or server” because agents may run remotely.

daveh-beep added a commit to daveh-beep/buzz that referenced this pull request Jul 28, 2026
daveh-beep added a commit to daveh-beep/buzz that referenced this pull request Jul 28, 2026
@daveh-beep

Copy link
Copy Markdown
Contributor Author

🤖 @klopez4212 Here’s the final, one-sentence version for review.

Open access warning

Anyone will be able to access the computer or server running this agent.

open-access-warning

@klopez4212

Copy link
Copy Markdown
Contributor

@delkc to review again

@delkc delkc self-assigned this Jul 29, 2026
daveh-beep and others added 6 commits July 29, 2026 10:35
Signed-off-by: David Hamilton <daveh@squareup.com>
Signed-off-by: David Hamilton <daveh@squareup.com>
Signed-off-by: David Hamilton <daveh@squareup.com>
Signed-off-by: David Hamilton <daveh@squareup.com>
Signed-off-by: David Hamilton <daveh@squareup.com>
Signed-off-by: Clay Delk <clay.delk@gmail.com>
@delkc
delkc force-pushed the bumble/respond-to-access-warning branch from 6a18861 to dcd1998 Compare July 29, 2026 14:50
Warn whenever a shared agent's respond-to mode hands host access to
someone other than the owner — "Anyone" and "Selected people" both do,
so both disclose it and only the audience phrase differs. The warning
renders below the selector for "Anyone" but after the people picker for
"Selected people", so it never sits between the user and the selection
they came to make.

Copy names the machine the agent actually runs on: a local agent reaches
"your computer, including files, accounts, and connected tools"; a
provider-backed one reaches "the server it runs on, including any
accounts and tools available there" — deliberately not the owner's files,
which aren't theirs to describe on a host they don't own. An unknown
location falls back to the local wording rather than hedging with
"computer or server", a concept an owner with no backend provider
installed has never been shown.

AgentDialog resolves the run location once and publishes it through
AgentRunLocationContext, so the value doesn't have to be threaded through
AgentDefinitionDialog and AgentInstanceEditDialog, which neither use it
and are both already over the file-size ceiling.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Clay Delk <clay.delk@gmail.com>
@delkc

delkc commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Made some tweaks to the content so it recognizes whether the agent is running on your computer or a server, then just references the correct one. I also added the warning to the "Select people" option, since it's also true for the people you add there.

Screenshot 2026-07-29 at 2 08 50 PM Screenshot 2026-07-29 at 2 08 58 PM Screenshot 2026-07-29 at 2 09 22 PM

The instance-edit arm now wraps AgentInstanceEditDialog in
AgentRunLocationProvider, so the routing test reads the form through the
provider's children instead of asserting on the root element type. Adds
coverage that the arm publishes the location resolved from the agent's
backend record — local, remote, and unknown when there is no record.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Clay Delk <clay.delk@gmail.com>
@delkc
delkc enabled auto-merge (squash) July 29, 2026 18:41
@tellaho

tellaho commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

lgtm

@delkc
delkc merged commit 7fb008f into block:main Jul 30, 2026
47 of 49 checks passed
wpfleger96 added a commit that referenced this pull request Jul 30, 2026
…chive

* origin/main: (22 commits)
  feat(catalog): resolve publisher display name in catalog detail pane (#3640)
  feat(mesh): upgrade embedded mesh to v0.74 and harden shared compute (split 1/2 of #3467) (#3741)
  docs(nips): specify kind:30621 multi-repo projects (NIP-MP) (#3163)
  Refine agent sharing dialog (#3699)
  desktop: enable getUserMedia in the Linux WebKitGTK webview (#3607)
  fix: align responsive agent views (#3688)
  Add macOS agent menu-bar menu (#3565)
  Fix pending message feedback (#3543)
  fix(desktop): remove remaining Projects panel fills (#3742)
  feat(mobile): desktop-parity emoji and thread experience (#3485)
  desktop: restore direct community member adds (#3634)
  fix(desktop): explain open agent access (#2561)
  fix(cli): resolve agents from owner records (#3178)
  fix(desktop): remove Projects overview card fills (#3416)
  feat(replica): portable heartbeat-token fence with snapshot-local reader routing (#3268)
  fix(git): channel binding tooling + author remediation for unbound repos (#3626)
  feat: configure S3 URL addressing style (#3400)
  feat: add first-class OpenRouter provider support (#1975)
  feat(agent,acp): wire provider total_tokens through NIP-AM publish chain (#3593)
  chore(release): release Buzz Desktop version 0.5.2 (#3624)
  ...

Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
wpfleger96 pushed a commit that referenced this pull request Jul 30, 2026
…g-pipeline

* origin/main: (25 commits)
  Refine agent sharing dialog (#3699)
  desktop: enable getUserMedia in the Linux WebKitGTK webview (#3607)
  fix: align responsive agent views (#3688)
  Add macOS agent menu-bar menu (#3565)
  Fix pending message feedback (#3543)
  fix(desktop): remove remaining Projects panel fills (#3742)
  feat(mobile): desktop-parity emoji and thread experience (#3485)
  desktop: restore direct community member adds (#3634)
  fix(desktop): explain open agent access (#2561)
  fix(cli): resolve agents from owner records (#3178)
  fix(desktop): remove Projects overview card fills (#3416)
  feat(replica): portable heartbeat-token fence with snapshot-local reader routing (#3268)
  fix(git): channel binding tooling + author remediation for unbound repos (#3626)
  feat: configure S3 URL addressing style (#3400)
  feat: add first-class OpenRouter provider support (#1975)
  feat(agent,acp): wire provider total_tokens through NIP-AM publish chain (#3593)
  chore(release): release Buzz Desktop version 0.5.2 (#3624)
  docs: add Linux rendering troubleshooting guide (#3573)
  fix(desktop): discover bun-installed agent CLIs in ~/.bun/bin (#3343)
  feat(tracing): correlate trace IDs in relay logs (#3608)
  ...

Signed-off-by: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 <dcfd242e557282d7a1e2cf2e6877522682f1e5c6156dc92ca7d90eaedd3b0f95@buzz.block.builderlab.xyz>
joahg added a commit to joahg/buzz-dev-mode that referenced this pull request Jul 30, 2026
…-style

* origin/main:
  fix(acp): preserve truncated thread context (block#3340)
  feat(catalog): resolve publisher display name in catalog detail pane (block#3640)
  feat(mesh): upgrade embedded mesh to v0.74 and harden shared compute (split 1/2 of block#3467) (block#3741)
  docs(nips): specify kind:30621 multi-repo projects (NIP-MP) (block#3163)
  Refine agent sharing dialog (block#3699)
  desktop: enable getUserMedia in the Linux WebKitGTK webview (block#3607)
  fix: align responsive agent views (block#3688)
  Add macOS agent menu-bar menu (block#3565)
  Fix pending message feedback (block#3543)
  fix(desktop): remove remaining Projects panel fills (block#3742)
  feat(mobile): desktop-parity emoji and thread experience (block#3485)
  desktop: restore direct community member adds (block#3634)
  fix(desktop): explain open agent access (block#2561)
  fix(cli): resolve agents from owner records (block#3178)
  fix(desktop): remove Projects overview card fills (block#3416)
  feat(replica): portable heartbeat-token fence with snapshot-local reader routing (block#3268)

Signed-off-by: Joah Gerstenberg <joah@squareup.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants