Agents

Describe the workflow. It’s running in minutes.

Write down what it should do, what it may touch, where it may publish. Annex runs it and records everything.

A run, end to end.

One question crossing Finance and People.

new-hire-coordinatoracme/cross/people/new-hire-coordinatorinteractive · sample data
YouCan we hire a senior backend engineer in Q3?
get_headcount_planQ3-2026 · engineeringrunning…
get_budget_envelopeengineering · Q3-2026running…
lookup_role_bandL5 / Staff · zone-1running…
Annex

Yes. The Q3 plan has an approved backend slot [1], the engineering envelope covers it with $1.2M remaining [2], and an L5 offer in zone-1 lands in band at $185k–$215k [3]. I need Finance and People before I draft anything.

Sign-off
 
0 tool calls0 sources cited0/2 signed off

It stops when it should

The interesting part is the last step. The agent had the budget, the plan, and the band — everything it needed. It refused, because the offer tool requires named approvals from Finance and People. That precondition lives in the tool, so no amount of confident reasoning gets around it.

Cited, not asserted

Memory arrives with its scope and origin attached, and the agent cites it by index. When it says $1.2M is left, you can see which memory said so and who published it.

Cross-team by default

A new-hire coordinator isn’t an HR agent or a Finance agent. It lives in the seam between them — which is exactly where back-office work breaks, and the part no department’s own tool ever owns.

Templates are data

An agent is a row, not a deploy: namespace, prompt, write scopes, tools.

Real tool-use loop

Calls a tool, reads the result, decides what's next — up to a turn cap.

Allow-listed tools

Only the tools its template names. Injection can't reach for new capability.

Gated actions

The offer drafter refuses without both approvals on the record.

Bring a workflow that keeps breaking.