A tool is an application-controlled capability offered to a model through a name, description, argument schema, and handler. Good tools are narrow, typed, tenant-scoped, observable, cancellable, and explicit about side effects. Tool access is delegated authority; adding a tool changes the system’s threat model, not merely its feature list.
You will replace broad capabilities with domain tools, classify risk, and specify the controls required before a tool can execute.
A tool schema is a door label. The handler and policy are the lock. A label that says “employees only” does not stop entry; a prompt that says “use carefully” does not enforce authorization.
Compare two designs:
The first lets the model invent query text and scope. The second exposes one business capability and obtains tenant identity from authenticated runtime context.
Define every tool with:
The model supplies ticket_id. Trusted host code supplies tenant_id. The result excludes internal notes and customer secrets.
A mutating tool needs a stronger contract:
Separating proposal from commit makes review and replay explicit.
Failure injection: Make the external update succeed, then drop the network response. On retry, the same idempotency key must return the prior outcome or reconcile it; it must not apply the change twice.
Test that unauthorized tenants, invalid schemas, denied permissions, expired approvals, timeouts, duplicate idempotency keys, redaction, and result-size limits behave correctly without invoking a model. Then run agent-level tests for correct selection and arguments.
Write a policy matrix for five SupportOps tools. Include risk, data class, auto-allow conditions, approval role, timeout, idempotency, and audit fields.