architecture-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited architecture-review (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Find architectural friction in a codebase and propose refactors that make it more testable and easier to navigate. The unifying idea: turn shallow modules into deep ones.
This skill is design-only. It ends at a settled design the user has agreed to — recognizing candidates, choosing one, and grilling its shape. It does not edit the modules or migrate callers; that is a separate task the user runs afterward.
A module is anything with an interface and an implementation — a function, a class, a package, a slice of a system. The size doesn't matter; the shape does.
The interface is everything a caller has to know to use the module correctly. Not just the type signature — also the invariants it assumes, the order calls must happen in, the errors it can throw, the config it needs. If a caller has to know it, it's part of the interface.
A module is deep when a lot of behaviour sits behind a small interface — callers learn a little and get a lot. It's shallow when the interface is nearly as complex as the implementation: the caller has to learn almost everything the module does just to use it, so the module is barely earning its place.
Two payoffs come from depth, and they are how you should justify every suggestion:
A seam is a place where behaviour can be swapped without editing code in place — it's where an interface lives. Seams are how a deep module stays testable: you test through the seam, the same way callers cross it.
This is the sharpest tool for telling deep from shallow. For any module you suspect is shallow, imagine deleting it and inlining its body into every caller.
Run this test out loud in your reasoning before proposing anything. It stops you from suggesting refactors that just move complexity around.
You're hunting for friction, not pattern-matching names. Concrete tells:
Manager / Helper / Utils whose interface basically enumerates its implementation — to use it you must already know what's inside.First, do a deliberate check for project context. These files are opt-in for projects (they may or may not exist), but if they do exist, you MUST read them before presenting candidates — skipping them produces vocabulary drift, re-litigated ADRs, and refactors that contradict stated principles. All three waste the user's time when you present.
Check well-known locations:
CONTEXT.md, GLOSSARY.md, DOMAIN.md, then docs/ for the same names. If those miss, glob once for *glossary* / *domain-model* (case-insensitive). Use canonical terms in your candidates; don't invent synonyms.docs/adr/, docs/architecture/decisions/, adr/. If those miss, glob once for *adr*. Read the ones relevant to the area you're reviewing; they record decisions you should not blindly re-litigate.ARCHITECTURE.md, docs/ARCHITECTURE.md. Tells you what the project considers settled before you propose to move things around.CONSTITUTION.md, docs/CONSTITUTION.md. Any refactor you propose must respect the listed principles.Stop after one glob per input. If nothing turns up for a given input, proceed without it — don't hunt exhaustively.
Empty-context case: if none of these files exist (greenfield project, or one that doesn't capture conventions explicitly), that's a valid state — the review runs against the code itself. Do not halt; do not ask the user to produce convention files. You just won't have anchors for canonical names or stated principles; flag the gap in your candidates if it becomes load-bearing.
Then dispatch an exploration subagent to walk the codebase. Don't run a rigid checklist — explore organically and note where you feel friction, using the tells above. Apply the deletion test to anything that smells shallow.
Give the user a numbered list of refactoring opportunities. For each:
Use the project's own domain vocabulary for the what (if a glossary defines "Order", say "the Order intake module", not "the FooHandler"). The architecture words — deep, shallow, seam, leverage, locality — are this skill's; use them so suggestions stay comparable, but don't lecture the user about terminology.
If a candidate contradicts an existing ADR, only raise it when the friction genuinely warrants reopening that decision, and say so plainly: "this cuts against ADR-0007, but it's worth reopening because…". Don't enumerate every refactor an ADR forbids.
Don't design interfaces yet. Ask: "Which of these would you like to dig into?"
Once the user picks one, drop into a working conversation about the design. Walk the design tree together — constraints, dependencies, the shape of the deepened module, what sits behind the seam, which tests survive and which become dead weight. See references/deepening.md for how a module's dependency types dictate its testing strategy across the seam — read it before discussing dependencies.
If the user wants to compare several genuinely different interfaces for the deepened module, see references/interface-design.md for a parallel-exploration pattern.
Side effects, handled inline as decisions firm up — all opt-in, all lazy:
End when the design is settled and the user agrees. Implementation is theirs to run next.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.