Why this matters
Tool permissions are where most production incidents happen:- agents can call more tools than intended
- broad permissions can hide prompt mistakes
- late permission validation can break deployments
Use one of these playbooks
Playbook A: safest default (recommended)
Use this when you’re introducing agents into an existing system..hyperterse
app/agents/refunds/config.terse
- no accidental broad access
- explicit change review when a new tool is added
- easy audit trail of agent capabilities
Playbook B: shared baseline for many agents
Use this when multiple agents need the same small capability set..hyperterse
tool_access can be omitted entirely):
app/agents/support/config.terse
tool_access.mode: inherit.
Override only when needed:
app/agents/disputes/config.terse
Playbook C: broad access for internal-only agents
Use this only for controlled internal workflows.app/agents/internal-ops/config.terse
Rollout checklist
Before enabling an agent in production:- Start from
allow_noneat root or a minimal shared allowlist. - Grant only task-specific tools per agent.
- Verify no hidden dependency on undeclared tools.
- Test one successful and one denied tool path.
- Review changes to allowlists in code review.
Common mistakes
Mistake: using allow_all early
This often hides prompt/tool routing problems until late.
Mistake: setting allow_list but forgetting one tool
Compilation catches unknown tools and missing lists, but runtime behavior can still
be confusing without tests.
Mistake: treating this page as schema docs
This is intentionally guide-oriented. Use Agent configuration reference for field-level specification.Quick troubleshooting
If a tool call is blocked unexpectedly:- check effective policy in the agent config (
inheritvs override) - check root defaults in
.hyperterse - confirm tool name matches discovered tool folder/name