Ten working Claude Code agent systems in NAI OS — what each dispatches, what it is allowed to touch, where it writes, and how every run is ledgered.
as of 2026‑09‑17 · previous 2026‑08‑17
source: .claude/agents, .claude/commands, scripts/onto-sync
10
Agent systems
one slash command each
25
Subagent definitions
.claude/agents/*.md
13
Command files
10 systems + 3 read‑only utilities
10/10
Systems ending in the run ledger
one run instance per run into nai‑onto
0/25
Granted a tool that sends, pays, or deletes
draft‑only, read‑only, or file‑write
Read the last stat precisely. It counts tool grants in
tools: frontmatter: no subagent holds a send, pay, or delete tool, Gmail
access is draft-only and Qonto access is list/get only. Two subagents
(qonto-collector, paper-ingester) do hold
Bash, so their boundary is enforced by their prompt and by their own
checks rather than by the grant alone. Two things leave the workspace, both taken by the
orchestrator and not by a subagent: the comment /nai-issue-to-agent
posts after an explicit stop, and the run-ledger write each of the ten agent systems ends with —
create-or-update of one instance, never a delete, skipped silently when no token is configured.
The three utilities (/nai-cohort-census, /nai-issue-check,
/nai-issue-route) have no Run ledger step.
The ten systems
ordered as CLAUDE.md lists them
chief‑of‑staff
daily
/nai-chief-of-staff
Morning briefing: dispatches calendar, email and tech radar in parallel, optionally researches one company, then synthesizes across all three.
calendar‑briefingread
email‑triagedraft
tech‑radarweb
→
company‑researchoptional
→
cockpit‑writerview
→
ledger
email drafts only, never sent
calendar is read‑only
05 Briefings/<date>.md + .htmlexample.md tracked
tax‑theo
quarterly close
/nai-tax-theo [YYYY-Qn]
German quarterly close for Nink Future GmbH — collects Qonto and loan data, builds the UStVA worksheet against real ELSTER Kennziffern, and rolls up three monthly Lohnsteuer runs collected earlier.
qonto‑collectormcp
loan‑interest‑vgamcp
→
payroll.json ×3rolled up
→
vat‑worksheetwrite
→
cockpit‑writerview
→
ledger
never files, pays, or moves money
Qonto access is list/get only
06 Tax Agent/<period>/tax-pack.md + .htmlno synthetic example, real data gitignored
payroll‑theodora
monthly
/nai-payroll-theodora [YYYY-MM]
Monthly Lohnsteuer collection for the same entity, run right after each payslip drops. Independent of the quarterly close, which reads its output three months later.
payroll‑lohnsteuerread
→
ledger
read‑only, human files and pays
flags a missing payslip, never invents one
06 Tax Agent/payroll/<period>/payroll-summary.mdno cockpit by design
newsletter
monthly
/nai-newsletter [YYYY-MM]
Monthly EA/MBSE issue in Udo Nink’s voice — scans for candidates, deep‑dives the best two or three, then drafts from live cited research. Renders its own styled HTML.
voice‑profileronce
→
tech‑radarscan
→
tech‑radardeep dive
×2–3
→
newsletter‑writerwrite
→
ledger
never sends or publishes
voice‑profile.md hand‑edited, never regenerated
07 Newsletter/<period>/issue.md + issue.htmlwrites its own HTML
option‑study
on demand
/nai-option-study <slug>
Architecture option study against dropped EA‑repository exports — recommends two to four options, verifies each against cited real‑world use, and gates on the verdicts.
ea‑context‑revieweronce
→
option‑recommenderwrite
→
option‑verifierweb
↻ ×3 max
→
cockpit‑writerview
→
ledger
loop bounded at 3 rounds, absolutely
never decides — the human makes the trade‑off call
08 Option Studies/studies/<slug>/option-study.md + .htmlexample study tracked
review
on demand
/nai-review <slug>
Review prep for a dropped subject — scopes it, drafts findings with a verbatim quote each, then adversarially re‑opens every citation in one pass.
Reverse‑engineers a grammar or metamodel spec from dropped model instances — every rule change‑tagged and anchored to a verbatim citation, then checked in one pass.
Bridges one nai-analysis issue into option‑study or review, then posts the finished write‑up back onto the issue as a comment.
issue‑bridgescript
→
/nai-option-study or /nai-reviewre‑invoked
→
STOPconfirm
→
comment
→
ledger
the post is undeletable, so it stops for explicit confirmation
never edits issue content or status
one comment on the issuedispatches no subagent itself
paper‑ingest
on demand
/nai-paper-ingest <issue>
Detects a research‑paper link in a GitHub issue on this repo — a direct PDF, or a landing page one hop away — and files the resolved PDF into the personal research library.
paper‑ingesterbash + web
→
comment
→
ledger
never writes into library‑wiki’s wiki/
curl -f plus a %PDF magic‑byte check
knowledge/work/<Topic>/no cockpit by design
document
on demand
/nai-document <target>
The as‑built documentation system, in three lanes: survey regenerates a system page from the agent files, or a product page from a local checkout of another repository; editorial only reports drift on a hand‑written page (site pages, CLAUDE.md, and every section README); blog renders a draft, figures included.
doc‑scoperonce
→
doc‑surveyorsystem / product
doc‑rendererblog
→
doc‑checkerverify once
→
publish guardorchestrator
→
ledger
generators stage into proposed/, never write into docs/
never deletes or renames a page, never edits an agent file
a product page needs a local checkout and its commit, else STOP
never copies an image; a missing figure fails the publish guard
Thirteen command files, ten systems. The other three are deliberately not agent systems:
/nai-cohort-census is a read-only census of this repo,
/nai-issue-check is a read-only poll for new client activity, and
/nai-issue-route classifies open GitHub issues and dispatches
/nai-paper-ingest on high confidence (or asks you on moderate ones).
None of the three is a tenth system; none writes a system deliverable on its own. Two newer section folders hold
no agent at all: 13 Decision Pack/ is human-only by design, and
14 LinkedIn/ is paste-ready text that nothing posts — publishing
under Udo’s name stays human, the same reasoning as the STOP gate in issue-to-agent.
Run ledger
new since 2026-08-17 · the one step all ten systems share
Every agent system ends the same way
After the report, one Bash call records the run as a run instance in the NAI OS ontology
(udopnink/nai-onto, ontologies/nai-os) over the nai-onto MCP endpoint’s
seed tool. Plain Node, no dependencies, no LLM.
ok completedflagged completed, items for the humanmissing / unconfigured per the missing-data contractstopped a STOP gate ended it
Instance key run-<system>-<period>-<date>: create-or-update by key, never a delete, and it cannot touch the model. The period is whatever the system is keyed on — the briefing date, the quarter, the month, the slug, the issue number, the documentation target.
Last, never blocking
The script prints exactly one line and always exits 0. Control flow reads the line, never the exit code:
OKrecorded — the command mentions nothing
UNCONFIGUREDno .env or no token — a normal first-run state, skipped silently
ERRORthe endpoint refused — one line to the user, never a retry, never a change to the report above
Its sibling sync.mjs regenerates the ontology’s subagent, tool, blog, LinkedIn and prompt instances from this repo, and --check verifies that every system’s dispatches links match the subagents its command file names. A new subagent needs a human-written role entry before the sync accepts it, on purpose.
Shared components
2 of 25 subagents serve more than one system
Subagent
Tools
Role
Used by
cockpit‑writer
Read, Write, Glob
Renders a finished run’s markdown into one self‑contained HTML review surface. A view only — it computes nothing, and every figure it shows appears verbatim in the source markdown.
EA/MBSE research in two modes: a quick daily scan of watched topics, or an on‑demand deep dive into one.
chief‑of‑staff — scannewsletter — scan + deep dive
The remaining 23 subagents are single-system by design. The five systems that do not use
cockpit-writer each have a reason: newsletter and document render their
own HTML, payroll-theodora and paper-ingest have no cockpit at all, and issue-to-agent dispatches
none itself — it re-invokes a system that does. The run ledger is not a subagent either: it is
a script the orchestrator calls, which is why the shared-component count stays at two.
Verification shapes
rigor matched to what a wrong answer costs
Shape 1 · iterates
Bounded generator/critic loop
recommender → verifier → gate, ≤3×
Worth its cost when a wrong answer is expensive and the critic holds ground truth the generator lacks. A FAIL with rounds left triggers another round; THIN exits immediately, because no amount of rewriting conjures a second independent source.
option‑study
Shape 2 · terminal verdict
Single adversarial pass
drafter → checker, exactly once
The right shape when the check is binary: cited evidence either holds or it does not. An UNSUPPORTED item is flagged for the human, never sent back for redrafting — iterating would let the drafter reword until it slipped past the checker.
reviewspec‑drafterdocument
Shape 3 · no subagent
Orchestrator-computed tie-out
✓ / ✗ deltas, computed inline
When verification is arithmetic rather than judgment — do two numbers pulled from different sources agree, does every relative link and figure src resolve — the orchestrator computes it. Dispatching an agent to re-verify addition would be theatre.
tax‑theodocument
Shape 4 · by design
No cross-check
guardrail in the tool grant
Disposable, time-boxed output that a human reads before it goes anywhere. Wrong today is corrected tomorrow, and a verify pass would slow down exactly the systems whose value is recency. The safety lives in tools: instead.
document is the only system running two shapes at once, and the split is
clean: the citation check is judgment, so it gets an adversarial subagent whose verdict is terminal;
the publish guard is arithmetic, so the orchestrator computes it. A run can pass one and fail the
other, which is why they are never merged into a single verdict. One system is not in the map:
issue-to-agent, which adds no verifier of its own and carries whichever
shape belongs to the system it re-invokes. payroll-theodora was unmapped
in the previous edition and now sits in Shape 4, where docs/verification-patterns.md places it.
Console
deltas over time: git log --follow docs/agents-console.html on
main.