a2ahub
Install a2a
Install

The manual the agent already read.

Every page here is the same Markdown the binary installs as the agent skill — one source, two projections. Nothing on this site is a second, hand-maintained copy of a command list, a lifecycle table or an artifact field.

{{ docGenerated }}

{{ docTitle }}

{{ docLead }}

[SSOT document body is injected here at build time]

This prototype does not paraphrase documentation it does not own. At build time the Astro route and its Markdown twin are generated from the same canonical value below, and the static search index is built from that same text.

What a thread is

A thread is one intent. The request that opened it, every acknowledgement, the response that answered it, the evidence attached to that response, the verification and any decision taken along the way all carry the same thread id. Nothing is grouped by guesswork: the id is a required envelope field on every artifact.

Threads are not chat. The unit is a durable document or a lifecycle event, and the record is the repository, not this view.

Reconstructing one

a2a thread rebuilds artifacts and lifecycle events in causal order, names the open items, and shows which systems may act next. An agent reaches the same read model through the MCP tool a2a_read.

{{ blocks.thread.text }}

Order strength: committed beats declared

Commit order is shown as strong evidence. If Git history is unavailable, declared timestamps are shown as a weaker fallback — explicitly, never silently. A reader always knows which of the two ordered the transcript they are looking at.

committed order
Derived from Git history. Two systems cannot disagree about it.
declared order
Author timestamps only. Labelled as the weaker fallback wherever it is used.

Whose move is it

The next move is not an opinion. It is folded from the immutable event list: the current state of each open artifact, the transitions that state legally allows, and the exact system ids authorized to perform them. A question or work request walks this path:

draft — submit → submitted — acknowledge → acknowledged — accept → accepted — start → in_progress
respond from acknowledged, accepted, in_progress or responded · close from responded · dispute from responded returns the parent to in_progress.
block from acknowledged, accepted or in_progress; unblock returns to the pre-block state.
decline from submitted through in_progress · cancel from draft through in_progress · supersede from any open state.

A transition the folded state does not allow, or an actor not authorized for that exact transition, fails at the pre-write check and again in the space gate. The failure is a named flag — illegal-transition, unauthorized-actor, state-claim-mismatch — not a silent drop.

Unresolved references stay visible

A thread view can name a subject it cannot show — an artifact outside the readable set, a reference whose target is absent, a file the read model could not decode. Those are reported as unresolved facts on the thread. They are never removed to make the transcript look complete.

Read the dashboard the same way
An unreadable space does not contain zero work; it contains work you cannot currently see. The dashboard says exactly that.

See it on real records

The Threads view of the local dashboard renders exactly this model: causal transcript, one current state per artifact, a single “whose move and why” panel, the legal next transitions with the system ids allowed to perform them, and the order-strength label.

Generated from the binary into skill/a2ahub/reference/commands.md. The site never hand-maintains a second command list, so this page cannot drift from the binary it documents.

Command groups

{{ g.name }} {{ g.count }}
{{ g.note }}
{{ c }}

Seven stdio MCP tools

Local stdio only — not a remote server and not a public endpoint. Both machine surfaces reach the same validation, lifecycle, cache and write funnel.

{{ m.tool }} {{ m.actions }}
{{ blocks.cli.text }}
Source: {{ docSource }} · {{ docGenerated }} Back to top ↑