Waiting for you
An agent stopped and asked. Nothing runs until you answer.
Each request below is a call an agent was about to make that waits for a person. Approve and the same call runs once when the agent presents it again. Deny, or leave it, and it does not run: an unanswered request is refused at its deadline.
01 / Start
Three steps. Then the record answers for itself.
An agent acts at 03:12 and six weeks later someone asks who allowed it. These three steps put a key on one machine, one signed record behind it, and a check you can run on the order of what it wrote.
A key is how one machine signs in. Request only the capabilities that machine needs. A super-admin reviews the application; approval does not email or create a credential. After approval, sign in here to issue it and reveal the token once.
Some calls cannot be taken back by running the agent again. The ones ticked below wait for a person before they run. They start ticked; untick only what you are content to let your own grants run without asking. You can change this later under Access.
Send one record with the key. The first record has sequence 0 and no previous hash. Every later one names the hash of the record before it, which is what makes the order checkable. The snippets above are ready to paste once a key exists.
The fields, explained: Quickstart
A signature says the bytes did not change. The order check asks a different question: does each sealed block still follow the one before it. Run it here, and again whenever someone asks.
02 / Activity
What ran, and how much of it.
Counts for this account over the recent window: what the action was, which tool it reached, and what the check decided before it ran.
A repeat call is one the gate recognised as already answered. This counts how often that happened, not what it saved.
03 / Records
See what changed. See what came first.
The signed record for this account, newest first. Open a row to read one record, walk its ancestry, and check its signature here in your browser.
A signature says the bytes did not change. It does not say the record is still in the place it was written. That is a separate question, and this is where it gets asked.
A local harness exports two kinds of record: an intent envelope, and a checkpoint from a human pause. Paste one here with the signer's public key. The service runs the same signature arithmetic you can run offline, so the two answers can be compared. Nothing pasted here is stored.
What this shows
- Whether the recorded bytes changed after signing
- Whether each record still follows the one before it
- What the check decided before a supported action ran
What this does not show
- Whether the action was correct, useful, or a good idea
- Anything a host never sent to the gate
- The prompt, the source, or a model's private reasoning
04 / Delegation
Split the work. Keep the limits.
Which child agent started under which parent, what each one was allowed to reach, and when its grant ends.
This is the same question an orchestrator asks before it starts a child agent. Ask it here to see the answer the gate would give.
A grant lets one named agent use named tools until it ends. Give it a parent when one agent is handing work to another: the child can never hold more than its parent, and the service refuses a grant that tries.
Revoke withdraws one grant. What is reported below is the state the grant list carries when it is read back after the call, not the answer the call gave.
A refused sub-agent can park in a recorded wait while its delegation chain is asked in order, parent first, ending with you. Resolve a wait here or leave it: silence is not approval, and an unanswered wait resolves as a refusal when its deadline passes.
A PIC continuation token is evidence that one agent's authority descends from its delegator without widening. Paste a settled token: the gate answers first, then the pic engine checks it against the realm key configured on this service. The mode below is the mode of the check being run, not a stored setting -- advisory warns and leaves the decision alone, required turns an unevaluable token into an ask that waits on a person. Nothing pasted here is stored by this panel.
Operator view, shown to admin sessions only: the decision path of each check run in this page's session -- what was asked, what answered, what was decided. Nothing was recorded server-side, so the table starts empty on every reload.
Every check your integrations ran against a grant, oldest first, each signed by the service key named beside it. Fetch the published key from /v1/delegations/service-pubkeys and you can verify any of them without asking us.
For each capability (or tool), the share of refused calls in the last complete week against the week before. A change is listed only when it is larger than chance explains, and a week with fewer than 100 decisions is never compared. It is a reading of recorded decisions, not a verdict about any agent; check the policy versions first.
One machine hands another a scoped, time-bound right to record one task. The grant and each use are written into the chain, so the hand-off can be shown in order to a third party.
Every delegation token carries a signature from this identity. Verification runs on your machine with this key; nothing here has to be online for it. Pin the value when an evaluation starts. A changed key is a changed service identity.
A change to what agents may do is proposed, ratified, then enacted, and each step is a record with its own author. Nothing takes effect at the proposal.
05 / Access
Two ways to connect. One account chain.
A key is how a machine signs in. A machine appears below after its first accepted record. Each row is an activity and provenance view into the account's one shared hash chain, not a separate machine chain.
The ticked actions wait for a person before they run. Changing this list needs a signed-in person; an API key cannot change it. Every change is recorded on later decisions and sends a notice in the app and by email.
One key per machine, so revoking one does not stop the others. Submit a scoped application first. A super-admin may narrow it. Once approved, issue it here; the token is revealed once in this authenticated console and is never sent by email.
When outbound webhooks are enabled, one URL per account can receive warnings marked for the webhook channel as signed JSON. Only HTTPS destinations that resolve entirely to public address space are accepted. The endpoint signing secret is revealed once when you save it. A disabled deployment queues and sends nothing.
Checking a delivery
- Read the raw request body before parsing it.
- Read X-AFA-Timestamp, X-AFA-Delivery-ID, and X-AFA-Signature.
- Recompute HMAC-SHA256 over timestamp.delivery-id.raw-body with the one-time secret.
- Compare the two values in constant time.
- Reject on mismatch. Treat a missing header as a failed check.
The recipe with code: Webhooks
Accepting a live invitation grants the role but does not create an administrator session. Return through the separate step-up page for short-lived access.
06 / Notices
What AFA raised.
Warnings about keys, limits and record breaks, and where each kind should reach you.
A row marked mandatory cannot be turned off. Email dispatch state is reported independently. Webhook dispatch runs only when the deployment's outbound gate is enabled; each configured endpoint receives its own one-time signing secret so the receiver can verify raw-body authenticity.
07 / Walkthrough
Learn AFA, one step at a time.
Nine short chapters, each a few sentences, each with a "Show me" that takes you to the part of the console it describes. Your place is saved to your account, so you can stop and carry on later, on any device. Start again whenever you like.
Simulation
Try a grant's whole life, with nothing at stake.
A browser-only model creates a fictional grant, spends it, asks about it, exhausts it, revokes it, and simulates the order check. Each step explains the expected contract. No step calls the API or writes to this account.
This walkthrough is simulation-only. It uses canned answers in the browser, sends nothing, and cannot create, spend, or revoke a real grant. Run again starts a fresh simulation. Stop finishes the current simulated step and discards its local state.