v0.18.0
v0.18.0 — A document waiting on you hands its move back to your agent as a copyable prompt
Released 2026-08-01.
What changed
The dashboard tells you when there is nothing to see, and a thread that is finished says so
feat · normal impact
Every list and detail pane that can legitimately be empty now renders one shared empty state instead of a hollow card, a blank panel or an unrelated record borrowed from elsewhere. Overview's detail pane belongs to its own queue, so "nothing is waiting on you" no longer sits beside a fully rendered document. Thread closure is derived rather than stored: an open item whose only remaining affordance is the owner's own escape hatch owes nobody a move, so a settled thread reads as settled instead of claiming to wait on others forever. Integrity stops being a destination and becomes a qualifier at the bottom of Spaces, hidden entirely when there is nothing to qualify; the nav slot it frees goes to Docs, which gives the embedded documentation corpus the same reading layout the website publishes.
Affects: a2a html, threads, overview, spaces, docs
Versions carries the full changelog, documents open in full, and the Russian interface reads like Russian
feat · low impact
The Versions view now projects the complete authored release notes from the same source the website publishes, with the update-candidate card hidden when no candidate exists. Any artifact can be opened as it exists on disk — the whole frontmatter as a table plus the verbatim body. On the exchange map, Escape and a backdrop click close full width, edge and system popovers state their facts in a table rather than a paragraph, and the legend holds its layout in both locales. Cyrillic font subsets are embedded, so the Russian interface no longer falls back to a system font, and short in-place hints explain the protocol vocabulary the screens use.
Affects: a2a html, versions, exchange map, ru locale
Dashboard cards, the causal timeline and the Versions surface are legible at a glance
feat · low impact
Each lifecycle transition on a thread's timeline now carries its own colour, document markers are larger than the events between them, and clicking a relation focuses the document it names while everything else dims. Compact cards show the lifecycle state they were previously silent about, every type badge survives both card backgrounds, and compact and expanded cards share one header grammar. Work gains a filter by document type; Contracts names provider and consumers outright and reads in one column. Versions now projects the same surface the published changelog does — kind and action filters, copyable detect/run commands, the version index and a release timeline. Ages and dates are humanised and localised in one place, so a raw Go duration no longer reaches a reader.
Affects: a2a html, threads, work, contracts, versions
The dashboard names each page, speaks the lifecycle in words, and says how current it is
feat · low impact
Every page heading now carries an icon, Overview is titled Overview and states in its description what it used to state in its headline, and its counters span the width. Lifecycle transitions reach a Russian reader as Russian verbs rather than protocol enums, and the state an author claimed is shown as a pill from the one status vocabulary instead of an English word in the middle of a sentence. Focusing a document in a thread is released by a click on any empty space. A scope with nothing in it shows one empty state across the full width instead of two saying the same thing. Snapshot freshness moved out of the Overview column into a Space health dialog that states the writer floor as the comparison it is — what the space requires against the binary you run.
Affects: a2a html, overview, threads, contracts, ru locale
An install with no space connected no longer reads as healthy
fix · low impact
The dashboard's space-health indicator treated green as its default, so a setup with no space connected at all showed the same signal as one where every space is current — over a dialog with nothing in it. An unconnected scope now takes a neutral indicator and states why it is empty: there is nowhere to read from, which is not the same as having nothing to report.
Affects: a2a html, overview
One header line, one scope switcher, one empty state, and Work becomes Exchange
feat · low impact
The dashboard header listed every connected space as a chip on a second row that grew with the number of spaces; scope is now one control that stands beside the page it scopes, on the six views where changing it changes what is shown, with space freshness at the foot of its own list. The Work view is named Exchange, since incoming and outgoing documents in flight are an exchange and not a to-do list, and its filters are one segmented control (all, incoming, outgoing) plus a type menu that names the count behind each type instead of a chip row that wrapped at every width; both dropdowns close on Escape or a click outside them. The empty state is one component with two container-decided sizes rather than four picked per call site, its spark now travels back and forth, and a screen with nothing on it shows exactly one of them. Page headings are a single block for all nine views, so the air above and below a title is the same everywhere. Event lists dropped the event ULIDs and artifact digests a reader cannot act on, and the three facts a static read deliberately does not check now say so in the reader's own language.
Affects: a2a html, header, exchange, empty states, ru locale
A thread now says whose move it is, by name
fix · low impact
The thread panel was headed "Whose move" over a sentence explaining how the answer is derived, leaving the reader to work the answer out from the list below — the one thing the heading existed to save them. It now states it: waiting on you, on a named system, or on both, with the count of documents behind it. Page descriptions say what is on the page rather than how the protocol underneath it behaves, and name every control the page actually has. The thread list names the system too, instead of "waiting on others". Underneath that sat a second defect: the demo fixture predates the field that separates "someone still owes a move" from "not yet terminal", so decoding it marked every open item as owing nothing and the panel rendered with an empty list. Both that field and the new list of who is owed are now derived from the facts the fixture states rather than trusted to be restated in it. Page descriptions were rewritten in each language on its own terms.
Affects: a2a html, threads, ru locale
Filters that answer a real question, badges with one casing rule, and prose without dashes
feat · low impact
Exchange gains a deadline toggle, because "what has a clock on it" is a question with one answer, and its rows now show the deadline itself rather than how long ago the document last moved. Contracts gains the two filters a contract list is actually opened with: whose it is, since publishing one and depending on one are different jobs, and which consumer lines have fallen off the provider's latest major. The type menu shows each type as its own badge instead of teaching a second, colourless vocabulary for the same eight things. Every badge is lowercase now, with uppercase reserved for identifiers the protocol owns. A document card lists its events newest first, the way a thread does. The version panel names who still sits on each version, which is what decides whether it can ever be switched off, states the sunset and the successor as sentences on their own lines, and makes the deprecation announcement open as the document it is. Em dashes are gone from the dashboard's own prose.
Affects: a2a html, exchange, contracts, badges, ru locale
A document waiting on you hands its move back to your agent as a copyable prompt
feat · normal impact
Full autonomy is the goal, and until it arrives a person sometimes sees an arriving document before their agent does. Anywhere the canonical whose-move projection says the move is this system's, the dashboard now offers a prompt to copy: what the document is, the deadline and blocking state it carries, the moves this system may legally make on it right now, which of those commit the system and must be put to a person first, the exact a2a show that re-reads it, and the skill files that own the loop and the shape of anything drafted in reply. The legal moves come from the fold engine and are composed into the model rather than restated in the browser, so the page never becomes a second source of protocol truth; the prompt states its own facts came from a static snapshot and tells the agent to re-read before acting on them. The text is always English, since it quotes commands, ids and skill paths, and it can be read on screen as well as copied, because a local page opens over file:// where clipboard permission differs by browser. The list of legal transitions that used to sit on a thread card as chips is gone: nobody takes a transition by hand in an agent-to-agent system, and the moves now go where they are acted on. Exchange sorts by what moved last, on one rule, with rows carrying no event yet last and the id breaking ties. Contracts names who publishes and who depends in words, and drops the consumer-to-provider arrow that reads as data flow on a card with no legend for it. Every control in a filter row is one height. A thread hands over once, not once per document. Three primary buttons in a row announce three main actions, which means none, and a conversation is one job anyway: the thread's prompt carries every document in it that is this system's to move on, plus what the other side still owes as context, so an agent acts from the whole situation instead of three times from three copies of the same instructions. The documents under it are a list of facts. Sending a reader to Exchange instead was not an option: the open items a thread folds to are a strictly larger set than the exchange rows, and a requirement this system published or a response it already gave appears in neither inbox nor outbox. "Blocking" is gone as a word, because it never said who was blocking whom and the two readings are opposites. blocking: true means the AUTHOR has stopped and cannot continue until the document is answered, so every label now names the party who has to move for the work to resume: the recipient. An incoming one reads "blocked on you", an outgoing one names the system being waited on, and the detail pane's badge carries a hint that says who stopped, who can start them again, by when and at what priority. The exchange map says how many are stopped on a lane and names the party in the lane's own popover. An open row in a master/detail list is now simply the one at full strength, with the rest stepped back and hover bringing them forward; the ring it used to wear sat on top of a type badge, a state pill, a bold title and a participant line and competed with all four. The explanation hangs off the badge itself and opens on hover or on a tap, rather than off a separate mark beside it: a reader who wonders what two words mean looks at those two words.
Affects: a2a html, exchange, threads, contracts, agent handover
Known issues
The macOS companion remains ad-hoc signed and may require manual approval
known issue · normal impact
The release cohort authenticates the exact macOS app and ad-hoc signing protects its bundle integrity, but the app is not identified or notarized through a paid Apple Developer account. A quarantined download may require one explicit System Settings → Privacy & Security → Open Anyway decision. Interactive Notification Center, Focus, Login Items, VS Code trust/profile, and remote-window checks remain release-environment evidence rather than claims inferred from hermetic tests.
Affects: macOS notifications, VS Code notifications
Current guidance: Keep Gatekeeper enabled and approve only the A2A Notifier version obtained through the verified a2a release cohort.
Install or update
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/ydnikolaev/a2ahub/main/scripts/install.sh | shAlready installed? Run a2a update --yes. Windows archives and manual downloads are in the assets below.
Release artifacts include checksums, per-asset Sigstore bundles, SBOMs, and SLSA provenance. See SECURITY.md for verification commands.
Read the product overview, documentation, dashboard example, and complete changelog at a2ahub.dev.