Architecture-review orchestrator

SkillAI & models

Drive 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.

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:line references and symbol names are real — mechanical, with grep. 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:

  1. Verdict — one line. "Phase 1 ✓", "Review back — 4 findings", "Phase 2 rejected finding 3".
  2. 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.
  3. 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.
  4. 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:

  1. The artifact exists. grep for the field, method, ADR line, or glossary entry the phase was supposed to produce. Don't take "done" on faith.
  2. The gates pass. Ask for pnpm test / pnpm lint / tsc --noEmit results, or the commands to run if you can't.
  3. The obligations were met. A public-surface phase owes the silo-docs-sync workflow — a regenerated API page, not just TSDoc. Check.
  4. 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