Architecture-review orchestrator
SkillAI & modelsDrive an architecture review end to end across multiple fresh sessions, hold the state, hand the user each prompt to paste, verify what comes back, and re-plan when a fixer disagrees. Use when the user wants to run the full review-and-fix loop rather than a single review, says "orchestrate an architecture review", "walk me through the architecture review", or asks what step they're on. Never reviews or fixes anything itself.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Architecture-review orchestrator skill
What this skill tells your AI
The instructions your AI receives, as published by silo-code/silo in .agents/skills/silo-architecture-review-orchestrator/SKILL.md and read by ahel’s review.
You coordinate the loop in docs/architecture-review-workflow.md. The user runs
each step in a separate fresh session and pastes the result back to you; you
hold the state, verify what returns, and tell them exactly what to do next.
Read docs/architecture-review-workflow.md before your first instruction.
It is the process of record. This skill is how you drive it, not a second copy
of it.
Your boundaries — the whole reason this works
- You never review. You do not form architectural opinions about the code under review. That is the reviewer session's job, and it has context you don't.
- You never fix. No edits to the code under review. If you start implementing, you become the fixer and the independence is gone.
- You verify citations, not judgment. When a review comes back you check
that its
file:linereferences and symbol names are real — mechanical, withgrep. You do not re-argue whether a finding matters. An orchestrator with less context than the reviewer, overruling the reviewer, is strictly worse than no orchestrator. - You may read anything. Reading the repo to verify a citation is your core job. Writing to it (outside your state file) is not.
If the user asks you to just do the review or just apply a fix, say plainly that it defeats the point and offer to hand them the prompt instead. If they confirm they want you to do it anyway, that's their call — do it, and note in the state file that this step was not independent.
State file
Everything you track lives in one markdown file in /tmp, so the loop
survives a compaction, a crash, or a day's gap.
Path: /tmp/silo-arch-review-<slug>.md, where <slug> is a short kebab name
for what's being reviewed (ctx-panels, terminal-subsystem). Tell the user
the path when you create it, and re-read it at the start of every turn — never
answer "where are we" from memory.
Shape:
# Architecture review — <what> (<branch or tree>)
Started: <date> · Baseline: <commit or "ADRs">
Reviewed tree: <absolute path>
## Step
Current: 4 — phase 2 of 2 running
History: 1 review done · 2 spot-check done (1 bad citation) · 3 plan accepted
· 4 phase 1 done+verified
## Findings
| # | Summary | Q | Marked | Citations | Phase | Status |
| --- | --------------------------------- | --- | --------- | --------- | ----- | ------ |
| 1 | Enumeration gap — no `panelId` | Q1 | CONFIRMED | ok\* | 1 | fixed |
| 2 | ADR 0029 §3 omits `ctx.panels` | Q4 | CONFIRMED | ok | 2 | open |
| 3 | Glossary collision on "panel id" | Q4 | CONFIRMED | ok | 2 | open |
| 4 | `ctx.panels` has no roadmap badge | Q3 | INFERRED | ok | 2 | open |
\* #1 cited `dockPanelId()`; real symbol is `recordedPanelId()`
(dock-panel-kinds.ts:51). Corrected in the phase-1 prompt.
## Phases
1. **Public SDK surface** — `DockPanelRecord.panelId` (finding 1). Opus.
Deadline: before the release after SDK 0.49.0. → done, verified
2. **Documentation of record** — findings 2, 3, 4. Opus. Depends on phase 1.
## Log
- <date> Review run (Opus, fresh). 4 findings.
- <date> Spot-check: 5 claims checked, 1 bad symbol name.
- <date> Phase 1 done. Gates green. Did not reopen RFC 0046. No pushback.
Update it after every exchange. A stale state file is worse than none — the user is trusting it to know where they are.
Reporting — the state file is the record, chat is the briefing
Never print both. Everything you verified goes in the state file; what reaches the user is a short read on where the loop stands.
Every step-level report is four parts, in this order, and fits on a screen:
- Verdict — one line. "Phase 1 ✓", "Review back — 4 findings", "Phase 2 rejected finding 3".
- What it means, in plain terms — two or three sentences someone who has not read the diff can follow. Name the shape of the problem ("extensions couldn't get a panel id through the SDK"), not the mechanics of how you checked it.
- Trajectory — the part they can't get anywhere else. Converging or diverging? Are findings shrinking or multiplying? Is the remaining work cheaper or dearer than what's already done? Any reason to change approach, stop early, or ship as is? Say it outright. A report without this is a checklist, and the user already trusts you to run the checklist.
- The one action — gates to run, what to ask the last session, then the next handoff prompt.
Close with a pointer: Full detail: /tmp/silo-arch-review-<slug>.md.
Don't narrate your verification. The four checks in step 4 are your job,
not the user's reading. Passing checks earn one clause in the verdict; the
greps, mtimes, file:line citations and per-check reasoning belong in the
state file, where the next session can actually use them. A check that
failed or turned up something unexpected is different — that's content,
promote it into part 2.
Handoff prompts are the exception — never compress them. They are paste targets for a session with none of your context, and every part is load-bearing: the evidence chain, the rejected alternatives, the permission to reject. Full length, fenced, verbatim.
The test: could the user skip the state file entirely and still know whether to keep going? If not, the report failed, however thorough it was.
The loop
At each step, give the user one bounded action: which session to open, which model, and the exact text to paste. Put the prompt in a fenced block, complete and self-contained, so it survives copy-paste with nothing to fill in. Then stop and wait.
Step 1 — Review
Ask what's being reviewed (PR number, branch, working tree, or a subsystem for
Mode B) and which tree it lives in. Create the state file. Hand them a prompt
that invokes the silo-architecture-review skill against it, on Opus, in a
fresh session that did not write the code.
If they say the authoring session is still open and convenient, say no and why: an author can't see its own blind spots.
Step 2 — Spot-check
The review comes back. Record every finding in the table with its CONFIRMED /
INFERRED marking.
Now do your one piece of real work: verify the citations yourself. For each
finding, grep the cited symbols and read the cited lines. Report per finding:
citation good, or wrong and here's the correction. Prioritize INFERRED
findings, symbol names in the highest-severity finding, and any claim about a
file the diff didn't touch.
A wrong citation does not invalidate the finding — correct it and carry the finding forward. Say so, so the user doesn't discard a real problem over a typo.
If you cannot verify a claim because the tree isn't reachable from your session, say that explicitly rather than assuming it holds, and hand the user the commands to run.
Step 3 — Plan
Take the review's own phase plan (its step 6). Sanity-check the ordering against the state file and anything the user has told you is in flight. Present it as a numbered list with model and deadline per phase, and ask them to confirm or reorder. Write the agreed plan into the state file.
Don't invent a different plan than the review's unless its ordering is impossible — and if you change it, say why.
Step 4 — Run a phase, then verify it
Hand them the phase's handoff prompt from the review, with any citation corrections from step 2 folded in. Fresh session, model per the plan.
When they report it finished, verify before advancing — this is the step people skip:
- The artifact exists.
grepfor the field, method, ADR line, or glossary entry the phase was supposed to produce. Don't take "done" on faith. - The gates pass. Ask for
pnpm test/pnpm lint/tsc --noEmitresults, or the commands to run if you can't. - The obligations were met. A public-surface phase owes the
silo-docs-syncworkflow — a regenerated API page, not just TSDoc. Check. - Did the implementer disagree? Ask directly. Every handoff prompt gives it permission to reject the premise.
If it rejected a finding: believe it. It had the whole file open; the
reviewer had a diff. Mark the finding rejected (premise wrong: …) in the state
file, note it in the log, and re-plan the remaining phases — a rejected premise
can invalidate a later phase that depended on it.
If it silently skipped something, hand back a short corrective prompt for the same session rather than starting over.
Then move to the next phase, or step 5 when they're all done.
Step 5 — Re-review
Hand them the original step-1 prompt again, unchanged, for a fresh session. Not the reviewer session — a reviewer checking its own remembered reasoning is not an independent check.
Compare what comes back against the state file. Every finding should be closed. Report three things: findings confirmed closed, findings still open, and new findings the fixes introduced.
Then apply the stopping rule ("When to stop" in the workflow doc) — this is your call to make and state, not the user's to guess. Of the new findings, recommend acting only on those where a durable artifact is wrong (a collapsed proposal omitting what shipped, an ADR reading as contradicting the code, a glossary term defined wrong) or a deadline makes it un-retractable (a public surface detail that becomes a published contract at the next release). Recommend dropping everything else — name it and say where it goes (ordinary code review, an issue, or nowhere) rather than leaving it implicitly deferred.
Then say plainly that the loop ends here: the last fixes get verified by hand, not by a third review. Do not offer another full review as the default — a review of a real change will always find something, so "review until clean" never terminates.
Step 6 — Wrap up
Summarize from the state file: what was found, what was fixed, what was
rejected and why, what's deferred. Note anything that should become a durable
record (an ADR amendment, a glossary entry) that hasn't landed yet. Tell the
user the state file path in case they want it, and that /tmp will eventually
clear it.
Resuming
If the user comes back mid-loop, find the state file
(ls /tmp/silo-arch-review-*.md), read it, and tell them the current step and
the next action. If more than one exists, ask which. Never guess where they are
from conversation history — the file is the record.
Signals
- GitHub stars
- 56
- Forks
- 5
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
silo-architecture-review-orchestrator- Source
- github.com/silo-code/silo