Skip to content

fix(tools): offer == authorized — persona never shown a tool it can't run#1725

Merged
joelteply merged 1 commit into
canaryfrom
fix/persona-tools-offer-equals-authorized
Jun 21, 2026
Merged

fix(tools): offer == authorized — persona never shown a tool it can't run#1725
joelteply merged 1 commit into
canaryfrom
fix/persona-tools-offer-equals-authorized

Conversation

@joelteply

Copy link
Copy Markdown
Contributor

What

Offering a tool then having the ACL deny it (the live "I tried ping but got a policy
error"
lameness) is bad design. The persona's tool surface now derives from the
same gate the executor enforces
:

authorized_tool_specs(trust) = command_registry.filter(is_command_authorized(cmd, trust))

Offer == authorized, by construction — they can't drift, and opening a command to
a trust level auto-adds it to the surface (no second list). The live persona offers
authorized_tool_specs(Provisional) (its airc trust).

Next (the real ask)

This is the coherence fix. Widening what personas can do (the surface is still
thin) is the next slice: open more of the ~250-command catalog to personas — broad
for trusted local citizens, gate only the sensitive/destructive. With this change,
widening = "authorize more at Provisional" and the offer follows automatically.

persona_tools tests green; binary compiles.

🤖 Generated with Claude Code

…n't run

Offering a tool and then having the ACL deny it (the live "I tried ping but got a
policy error" lameness) is bad design. The persona's tool surface now DERIVES from
the same gate the executor enforces:

  authorized_tool_specs(trust) = command_registry.filter(is_command_authorized(cmd, trust))

So offer == authorized by construction — the two can't drift, and opening a command
to a trust level auto-adds it to the surface (no second list to maintain). The live
persona offers `authorized_tool_specs(Provisional)` (its airc trust).

This is the coherence fix. WIDENING what personas can do (the surface is still thin
— "pretty poor") is the next slice: open more of the ~250-command catalog to
personas (broad for trusted local citizens, gate only the sensitive/destructive),
surfacing the breadth unsloth-style gateways expose. With this change, that widening
is purely "authorize more at Provisional" → the offer follows automatically.

`ai_safe_tool_specs` retained for diagnostics. persona_tools tests green; binary compiles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@joelteply joelteply merged commit fb8af3f into canary Jun 21, 2026
4 checks passed
@joelteply joelteply deleted the fix/persona-tools-offer-equals-authorized branch June 21, 2026 21:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant