Skip to content

Bash routing

Members spawn with workspace-scoped auto-approval enabled — claude uses --permission-mode dontAsk, codex uses --ask-for-approval never --sandbox workspace-write, and opencode uses --agent cafleet to bind the cafleet agent's permission ruleset (catch-all-allow + specific-deny — every permission check resolves to allow or deny, never ask). The Bash tool is enabled and routine permission prompts auto-resolve silently, so members run cafleet (and any shell command) directly via the Bash tool. The default spawn-prompt template tells the member explicitly that its harness runs in workspace-scoped auto-approve mode.

The bash-via-Director protocol is the fallback for the harness deny-list: workspace-scoped auto-approval does not auto-resolve everything — destructive operations such as git push and rm -rf are still rejected at the coding agent's harness layer. When a member's Bash invocation is denied, the member auto-routes by sending a plain CAFleet message to its Director, and the Director dispatches the command into the member's pane via cafleet member exec "<cmd>", which keystrokes literal ! <cmd> + Enter and triggers the coding agent's ! CLI shortcut on the receiving side (honored by claude, codex, and opencode).

Members must first reconsider whether the rejected command is correct and necessary — most denials are caused by a wrong command, not a missing privilege. The full convention, including the member-side reconsider step, the Director-side member exec dispatch, the serialization rules, and the cross-fleet boundary, lives in skills/cafleet/reference/exec-routing.md.