Skip to main content

Your first request

Local runbook

This page assumes you already know why the fabric exists. If you do not, start at how it hangs together.

The stack is up from Start the fabric. You will send two calls through the Agent Front Door. Nothing else is public. Set FRONT_DOOR to that ingress URL (stack README).

Local identity is stubbed. Every channel call needs both headers from stub auth:

Authorization: Bearer stub
X-Stub-Claims: {"sub":"jane","emts":{"accounts:read":true}}

jane is entitled to account-read routes, including fee_explain.

1. Start a job​

A job names the route. Front Door still entitles the caller. It skips classification, freezes fee_explain, and starts Runtime.

curl -sS "$FRONT_DOOR/v1/jobs" \
-H 'Authorization: Bearer stub' \
-H 'Content-Type: application/json' \
-H 'X-Stub-Claims: {"sub":"jane","emts":{"accounts:read":true}}' \
-d '{
"route_id": "fee_explain",
"idempotency_key": "job-fee-explain:docs",
"payload": { "account_id": "acc-42" }
}'

You should get 202 and a correlation_id. Front Door does not mint that id — Runtime does.

{ "correlation_id": "corr-…" }

Poll until the run completes:

curl -sS "$FRONT_DOOR/v1/jobs/corr-…" \
-H 'Authorization: Bearer stub' \
-H 'X-Stub-Claims: {"sub":"jane","emts":{"accounts:read":true}}'

Bodies for this call: jobs-start.json and jobs-accepted.json.

2. Send a chat turn​

Chat does not name a route. Front Door asks the Agent Data Plane to classify the utterance. Only outcome=route starts Runtime. clarify and abstain talk back and never pin.

curl -sS "$FRONT_DOOR/v1/assistant/turns" \
-H 'Authorization: Bearer stub' \
-H 'Content-Type: application/json' \
-H 'X-Stub-Claims: {"sub":"jane","emts":{"accounts:read":true}}' \
-d '{ "message": "Why was I charged $42?" }'

Accepted turns return a session_id. Follow-ups reuse that session and skip classify — the frozen route stays pinned.

{ "session_id": "chat-…", "status": "accepted" }

Request body: assistant-turn-request.json.

Or open the local chat scratchpad and type the same sentence.

What just happened​

Caller → Front Door → Data Plane (entitle / classify)
→ freeze route_id@version
→ Runtime (hydrate + run)
→ 202 + correlation_id
StepWhoWhat you can prove
EntitleFront Door + Data Planejane may use this route
ClassifyData Plane, chat onlyWhy fee_explain, not another agent
FreezeFront DoorThe version that will run, before the first LLM call
HydrateRuntimeEvery capability id@version on the pin
RunRuntimeThe graph for that route's autonomy mode

The same correlation_id is the handle for audit and observability.

If something fails​

SymptomLikely cause
Connection refusedStack is not up — start the fabric
401Missing Authorization or X-Stub-Claims
403Claims do not entitle the route
202 then a failed runSeed or mocks — reload seed

Next​