Tools
The action surface — first-party connectors and your own endpoints, all behind scopes.
Tools are how runs touch the world, and the tools pillar is the catalog and the contract. First-party tools cover the lanes the platform serves: calendar read/write, document read/write, mail send, finance read, file storage, webhook dispatch. Each is a typed interface — declared inputs, declared outputs, a declared scope — and the trust kernel checks that scope on every single invocation, which is what makes handing a model a tool different from handing it your password. Custom tools extend the surface to anything you run: register an HTTPS endpoint with a JSON-schema contract and a scope name, and your internal pricing service or deployment API becomes invocable by runs exactly like a first-party tool, with the same kernel checks, the same trace entries, and mutual TLS or signed requests on the wire. The catalog is honest about consequence: every tool is classified read, write, or consequential, and consequential tools (payments, external sends, deletions) default to approval-gated in new projects — you opt out of safety deliberately, never into it accidentally. Tool calls are fully traced with inputs, outputs, latency, and the authorizing scope, and the observability pillar breaks down cost and failure rate per tool, so a flaky connector shows up as data instead of as mystery agent failures.
[ 01 ]Key features
Typed, scoped interfaces
Every tool declares inputs, outputs, and the scope it requires; the kernel checks that scope on each invocation, not at setup.
Custom tools as equals
Register an HTTPS endpoint with a schema and it behaves exactly like a first-party tool — same checks, same traces.
Consequence classification
read / write / consequential is explicit per tool, and consequential defaults to approval-gated in every new project.
Per-tool observability
Latency, failure rate, and cost per tool — a flaky connector is a chart, not a haunted agent.
[ 02 ][ custom tool ]
{
"name": "pricing.quote",
"endpoint": "https://internal.acme.dev/quote",
"auth": "mtls",
"scope": "tools:pricing",
"class": "read",
"input_schema": { "sku": "string", "qty": "integer" },
"output_schema": { "unit_price": "number" }
}