The one-line version
AgentWorth does not become a coding harness. Archie reaches people as an extension inside the harnesses, shells, editors and pipelines they already run — and this is the ranked list of those doorways, with what each one needs from the core.
Why a surface and not a product
AGENTS.md says AgentWorth is a cockpit above harnesses. mcp-server.md said
the same thing about screens: "the consumer of an answer is an agent over MCP,
or a person in a chat app — neither of them opens a pane." Both sentences point
the same way. The reach of this product is not how good its dashboard is; it is
how many places its answer can appear without anyone deciding to go and look.
So the ranking below is reach per token: how many people meet Archie for every token spent building the doorway. That is a different order from what is interesting to build, and it is deliberately not the order the panes were built in.
The table
| # | Extension | Reach | What it needs from the core | Exists today |
|---|---|---|---|---|
| L1 | The done gate (done-gate.md) |
every stop, in every session, in two harnesses | one new tool, session_gate |
nothing; the tool is new, the plugins are new |
| L2 | A GitHub Action on a pull request | every reviewer of every PR, including people with no AgentWorth installed | repo_suspect and session_list --repo over a checkout, plus a receipt format a developer can attach |
both tools ship; the Action and the receipt format do not |
| L3 | A shell prompt segment | every prompt, all day, one line | archie window show --plain under 50 ms |
the command ships and is fast enough — measured below. --plain exists; the one-line form does not |
| L4 | An editor extension | every file save, in the status bar | the local HTTP API | ships: archie serve and ten routes |
| L5 | Declarative adapters | every harness nobody has written Rust for | the adapter trait accepting a data-driven implementation | the trait ships; a manifest loader does not |
| L6 | Detector plugins | every session, as labels rather than as a surface | a detector interface and a sandbox | four detectors ship, none of them pluggable |
| L7 | Discovery | everyone who has not heard of it | a topic, a registry entry, and later archie plugin add |
the MCP registries exist; the topic does not |
Each one, and what it can honestly do
L1 — the done gate
Its own spec, measured: done-gate.md. On this machine it would fire on 12.6%
of the sessions that claimed done, holding 2.5% of the corpus's tokens. Small
in spend, and at the exact moment a person is about to believe something.
The first extension because it is the only one that changes what an agent does, rather than what a person can look at.
L2 — a GitHub Action on a pull request
Post the rung and the sessions that produced a change, as a PR comment or a check.
Say plainly what it cannot know. The Action runs on a runner. The transcripts are on the developer's laptop and, by the product's own rule, they never leave it. So the Action sees the diff, the commits, the branch — and any receipt the developer chose to commit or attach. It does not see the local index, cannot compute a rung from transcripts it has no access to, and must never be built in a way that tempts someone to upload one.
Which leaves one honest design: the receipt travels in the pull request
body. The developer runs archie repo suspect and archie session list --repo over their own checkout, gets a redacted receipt through the existing
select → redact → preview → explicit approval → export pipeline that
AGENTS.md requires, and pastes or commits it. The Action then does the small,
verifiable part: parse the receipt, check that the commits it names are the
commits in this PR, and render it as a check. An Action that reports "no
receipt attached" is doing its job; an Action that phones a laptop is not a
thing this product will ever ship.
repo_suspect already takes an absolute path to a checkout and resolves the
repository root with git rev-parse --show-toplevel, so the local half needs
no new query. The new work is a receipt format stable enough to parse, and the
Action itself.
L3 — a shell prompt segment
The one-line Archie already exists in the brand kit
(packages/ui/brand/archie/archie-tui.txt), designed for exactly this slot:
(*) archie scanning ──────────────────······· 68% 1,204 sessions
with (*) on, ( o ) sweeping, (-) nothing, ( ) error. The kit is
explicit that this is "the only form that fits a status bar, a spinner slot,
or the right edge of a prompt".
A prompt segment runs on every command, so the budget is a hard one: under
50 ms, or it does not ship. Measured 2026-09-03 on this machine's real index
(263 MB, 4,887 sessions), five runs each, agentworth 0.1.15 — the shipped
binary predates the 0.1.16 rename, so these are the old spellings of what is
now archie window show and archie stats:
| command | wall time, 5 runs |
|---|---|
agentworth usage --json |
30, 10, 10, 10, 20 ms |
agentworth stats --json |
30, 40, 30, 30, 30 ms |
Both clear the budget with room. The gap between them is the shape of the
query, not the size of the index, so the prompt segment should call the
cheaper one and never the aggregate. What is missing is only the rendering: a
--plain one-liner in the shape above, and the four state glyphs.
The kit also sets the constraint that matters most here: "In a terminal that cannot repaint in place — a piped log, a CI transcript — print frame 1 once and nothing after it. A loop that scrolls is a loop that lies."
L4 — an editor extension
The ladder in the status bar, and the sessions that touched the open file.
This needs the least. archie serve already binds a local port and serves
fourteen routes, ten of them GET, including /api/stats, /api/traces,
/api/traces/:id, /api/traces/:id/events and /api/blame — the whole
surface an editor extension wants. The work is entirely on the editor side.
Two facts from AGENTS.md's hard-won list apply before anyone starts.
/api/traces returns 50 rows by default and excludes stubs, so an extension
that filters client-side is filtering a slice while looking normal. And Rust
and TypeScript drift here: types/index.ts is a claim, not a contract — curl
the endpoint.
L5 — declarative adapters
A manifest of paths and field mappings, loaded at runtime, instead of a Rust file per harness.
capability-matrix.md is the argument. Twenty adapters, nine have ever
produced a row, two produce tokens, two produce outcomes. Most of that gap is
not hard parsing — it is that nobody has written the file. A manifest turns a
new harness into a data change.
The invariant it must not break: AGENTS.md says source-specific logic
stays inside adapters, and core code must not contain Claude-, Codex-,
Gemini-, or OpenCode-specific field handling. A manifest is an adapter. The
loader is core and knows nothing about any harness; every path, field name and
quirk lives in the manifest, which is the adapter in data form. The moment the
loader grows a branch for one harness's oddity, this has failed and the right
answer is a Rust adapter for that harness.
Two more rules carry over unchanged. A manifest declares its own
PARSER_VERSION, and bumping it re-parses files an incremental scan would
otherwise skip. And malformed records degrade gracefully rather than
invalidating a session — which is harder in a manifest than in code, and is the
main reason this sits at L5 and not higher.
L6 — detector plugins
Loop, blunder and suspect rules as data or as sandboxed modules.
Four detectors ship inside the binary today: the loop sentinel
(crates/outcomes/src/loops.rs), demoted claims, recoveries, and suspect
commits. They are useful and they are opinionated — convergence.md measured
the loop detector firing on 25.0% of sessions and pointing at busy sessions
rather than wasteful ones, which is a fine thing to detect and not the thing
that spec needed. That is the case for letting someone write their own.
A detector reads and labels. It never calls a model. AGENTS.md's
invariant is not relaxed for third-party code — if anything it tightens, since
a plugin that made a model call would do it with the user's key inside a tool
that promises not to. Rules as data first; sandboxed modules only if data
turns out to be too weak, and with the sandbox designed before the first
plugin exists rather than after.
L7 — discovery
Three doorways, in the order they can be opened.
MCP registries, now. AgentWorth already ships a stdio MCP server, so it is listable today with no new code. Verified reachable 2026-09-03 (HTTP 200):
| registry | URL |
|---|---|
| the official MCP registry | https://registry.modelcontextprotocol.io/v0/servers, source at https://github.com/modelcontextprotocol/registry |
| Smithery | https://smithery.ai |
| mcp.so | https://mcp.so |
| Glama | https://glama.ai/mcp/servers |
Listed as reachable, not as vetted — a 200 says the site answered, nothing more. PulseMCP returned 403 to a plain request, which is a bot block and not evidence either way, so it is left out.
A GitHub topic, next. agentworth-plugin has 0 repositories today
(checked 2026-09-03 via the GitHub search API). For scale: dsh-plugin has
13,309 and mcp-server has 27,072. A topic costs nothing and is the cheapest
place for a third-party plugin to be findable.
archie plugin add <repo>, later. Only once L5 or L6 gives it something
to install. A plugin command with no plugin format is a promise.
Why this order
L1 first because it is the only one that changes an outcome. Everything below it makes an answer visible to someone who already wanted it. The gate puts the answer in front of an agent that was about to stop without it, which is the one moment where a number changes what happens next. It is also measured, which nothing else on this page is.
L2 second because it is the only one that reaches people who do not have
AgentWorth installed. Every other row on this table requires the reader to
have run archie scan on their own machine. A PR check is read by reviewers,
by the author's team, by anyone who opens the pull request. That is the widest
audience per token here by a large margin — and it is second rather than first
because half of it is a receipt format that does not exist yet, and because
getting the privacy story wrong here is the way this product becomes something
it promised not to be.
L3 third because it is nearly free and it is the highest-frequency surface there is. The one-line Archie is already designed. The command is already under budget, measured above. What is left is a formatter. Nothing else on this page has a better ratio of remaining work to appearances per day.
L4 fourth because it needs nothing from this repo at all. The API ships,
the routes are documented in REFERENCE.md, and the work is in someone else's
editor. It sits below L3 only because an editor extension is a bigger build
than a prompt formatter, not because it is worth less.
L5 and L6 are platform work and they are correctly last. They multiply
everything above them — a declarative adapter makes the gate work for a
harness nobody wrote Rust for — but they multiply by zero until something
above them is worth extending. capability-matrix.md is the honest reason to
be careful: twenty adapters exist and two of them produce outcomes, so the
constraint has never been how easy it is to add an adapter. Build these when
somebody outside this repo has asked for one, and not before.
L7 sits at the bottom and should be started at the top. Listing an MCP server that already ships and claiming a GitHub topic that has zero repos are both an afternoon and neither blocks anything. They are last in the table because they are not extensions; they are how the extensions get found. Do the registry entries alongside L1, not after L6.
What none of these change
Local-only, forever. No accounts, no telemetry, no sync, no hosted dashboard —
the same line docs/specs/README.md ends on, and none of these is the excuse.
Three of them look like the excuse and are not, so each gets a sentence:
- The PR Action never sees a transcript. It reads a receipt a person chose to attach, through the export pipeline that already requires explicit approval. It has no path to the local index and must never be given one.
- A third-party plugin does not get a network. Detector plugins read and label. An extension surface is not a reason to relax the invariant that AgentWorth never sends a prompt to a model on its own.
- Discovery is a listing, not a callback. A registry entry is a row in somebody else's catalogue. Nothing in this product learns that it was installed, and nothing phones anywhere on first run.