feat(acp): allow host policy to decide permission requests - #4066
feat(acp): allow host policy to decide permission requests#4066Silentpartnercoding wants to merge 1 commit into
Conversation
|
@BradGroux I implemented the narrow permission-decision callback experiment you outlined and kept the guarantee limited to cooperative |
Signed-off-by: James <james@Jamess-MBP-2.lan>
a08cf54 to
e9159e4
Compare
|
Quick relevance check now that Buzz’s ACP surface has continued moving: #4066 is still mergeable against current Since this PR opened, #4155 and its DCO-clean replacement #4333 have added a broader Guardian proposal that also changes The distinction I see is that #4333 derives an allow/reject choice from Buzz’s fixed permission modes, while #4066 exposes a generic asynchronous host-policy callback, preserves the agent’s exact offered option IDs and kinds, and handles timeout, cancellation, policy errors, and invalid selections explicitly. One boundary I would appreciate maintainer direction on: #4066 currently fails closed when no callback is installed, changing the historical automatic Is the generic injectable seam still useful alongside #4333, or would you prefer that this PR be revised or closed in favor of the Guardian implementation? |
|
Revisiting my own default here after watching #4609 land and then get reverted. As written, this PR fails closed when no policy is available — so a Buzz with nothing installed denies where it previously selected Two shapes, whichever you prefer:
Both keep the fail-closed machinery and the focused tests as they are — the only thing that moves is which branch handles "no policy at all". Option 1 is a small change and I am happy to push it on request; say which you would rather have and I will do the work. |
|
Closing as superseded by #5712, which has now landed Buzz-native permission gating at the actual LLM tool-call boundary, including fail-closed handling for malformed or invalid permission responses. With that implementation on main, maintaining this older generic ACP callback as a conflicting parallel path no longer looks useful. The upstream solution is the better integration point. Thanks to everyone who moved the permission boundary forward. |
Follow-up to the permission-boundary analysis in #2931.
Buzz’s generic ACP client currently selects
allow_oncewhenever that option is offered. This change adds an injectable asynchronous permission-decision callback so the host can choose among the exact options supplied by the agent.The callback receives the permission request and offered options. A policy decision may select only an option that was actually offered. If the policy is unavailable, times out, is cancelled, returns an error, or selects an invalid option, the client fails closed through an offered rejection option.
The focused tests cover:
Trust boundary
This governs cooperative operations that cross
session/request_permission. It does not provide general filesystem, subprocess, network, MCP, runtime, or operating-system containment. Runtimes that perform work without issuing a permission request remain outside this policy boundary.Verification
cargo test -p buzz-acpcargo build -p buzz-acpcargo fmt --checkcargo clippy -p buzz-acp --all-targets -- -D warningsgit diff --check