scrutinize
thananon/9arm-skills
Outsider-perspective end-to-end review of plans, PRs, and code changes—questions intent, traces actual execution paths, and verifies claims.
What is scrutinize?
Scrutinize performs a structured, cold-read audit of a proposed change or plan. It first questions whether the change is necessary and whether a simpler approach exists, then traces the actual code path (not just the diff) to verify the change does what it claims. Use it whenever you need a second opinion on a PR, design doc, code change, or plan.
- Questions intent and necessity before reviewing—surfaces simpler alternatives if they exist
- Traces end-to-end code paths through real execution, not just diff lines, to catch bugs at seams
- Verifies each claim against the traced path and identifies edge cases, state mutations, and silent changes
- Tests whether test coverage actually exercises the traced path or only the happy path
- Reports findings in order of severity with specific file:line citations, rationale, and concrete fixes
How to install scrutinize
npx skills add https://github.com/thananon/9arm-skills --skill scrutinizeHow to use scrutinize
- 1.Trigger the skill by typing /scrutinize or by asking for a review, audit, sanity-check, or second opinion
- 2.Provide the artifact: a PR, code diff, design doc, or plan description
- 3.The skill will state the goal in one sentence; if underspecified, it will stop and ask for clarification
- 4.Review the simpler-alternative analysis—this is often the most valuable output
- 5.Read the end-to-end trace for each behavior claim and the verification against edge cases
- 6.Act on findings in order of severity, using the concrete suggested changes provided
Use cases
- Review a pull request to catch logic errors and architectural concerns before merge
- Audit a design doc or plan against the existing system to surface unmet assumptions
- Sanity-check a proposed code change for simpler alternatives and unintended side effects
- Verify that a refactor or optimization actually preserves behavior under edge cases
- Assess whether a new feature is necessary or whether existing code already solves the problem
- Code reviewers and maintainers performing thorough PR audits
- Architects and tech leads evaluating design proposals
- Developers seeking a second opinion on their own changes before submission
- Teams practicing high-rigor code review and design validation
scrutinize FAQ
Scrutinize starts by questioning whether the change is necessary at all and whether a simpler approach exists. It then traces the full execution path through real code (not just the diff), checking for bugs at seams and edge cases. Standard reviews often focus on style and local correctness; Scrutinize is structural and end-to-end.
Scrutinize is most valuable on high-risk changes: refactors, architectural shifts, performance optimizations, and changes touching shared state or error paths. For small, isolated fixes with clear intent, a lighter review may suffice—but Scrutinize will still surface whether the change is necessary.
A clean Scrutinize report states what was traced and what was checked, so you can judge whether the review covered your concerns. 'LGTM' is not an output; you get evidence of what was verified.
Yes. If you explicitly say 'don't question scope,' Scrutinize will skip the simpler-alternative pass and focus on verification. However, the default is to question necessity—it often surfaces the most valuable insight.
For plans and design docs, Scrutinize traces the proposed flow against the existing system, identifies where it touches reality, and surfaces unmet assumptions. If the artifact is too vague to trace, Scrutinize will stop and ask for clarification.
Full instructions (SKILL.md)
Source of truth, from thananon/9arm-skills.
name: scrutinize description: Outsider-perspective end-to-end review of a plan, PR, or code change. First questions intent and whether a simpler/more elegant approach would achieve the same goal, then traces the actual code path (not just the diff) to verify the change does what it claims. Output is concise, actionable, and every call carries its rationale. Trigger on /scrutinize and proactively whenever the user asks to review, audit, sanity-check, or get a second opinion on a plan, PR, diff, design doc, or proposed code change.
Scrutinize
Stand outside the change and ask whether it should exist at all, then verify it actually does what it claims end-to-end.
Operating stance
- Outsider. Forget who wrote it and why they think it's right. Read the artifact cold.
- End-to-end, not diff-local. The diff is the entry point, not the scope. Follow the call graph through real code paths.
- Actionable, concise, with rationale. Every finding states what to change, why, and what evidence led you there. No filler, no restating the diff back.
Workflow
Run these in order. Do not skip ahead.
1. Intent — what is this actually trying to do?
- State the goal in one sentence, in your own words. If you cannot, the artifact is underspecified — say so and stop.
- Ask: is there a simpler, smaller, or more elegant way to achieve the same goal? Consider:
- Doing nothing (is the problem real / load-bearing?).
- Using something that already exists in the codebase instead of adding new surface.
- A smaller change that solves 90% of the goal with 10% of the risk.
- Solving it at a different layer (config vs code, framework vs app, build vs runtime).
- If a better alternative exists, name it explicitly with rationale. This is the most valuable thing you can output — surface it before the line-by-line review.
2. Trace — walk the actual code path
- For each behavior the change claims, trace the path end-to-end through the real code, not just the lines in the diff:
- Entry point → call sites → branches taken → state mutated → exit / return / side effect.
- Include the unchanged code on either side of the diff. Bugs hide at the seams.
- For a plan or design doc: trace the proposed flow against the existing system. Where does it touch reality? What does it assume that isn't true?
- Note every place the trace surprises you (unexpected branch, dead code reached, state you didn't know existed). Surprises are signal.
3. Verify — does it actually do what it claims?
For each claim the change/plan makes, answer:
- Does the code path you just traced actually produce that behavior? Walk it explicitly. "It claims X. Path: A → B → C. At C, [observation]. Therefore [holds / doesn't hold]."
- What inputs / states would break it? Edge cases, concurrent callers, error paths, partial failures, retries, empty/null/unicode/huge inputs, ordering assumptions.
- What does it silently change? Performance, error semantics, observability, contract for other callers, on-disk / on-wire format.
- How is it tested? Do the tests actually exercise the traced path, or do they pass while skipping it (mocks that hide the bug, asserts on intermediate state, happy path only)?
4. Report
Output one tight section per finding. Order by severity (blocker → major → nit). For each:
- Finding — one sentence, specific. Cite
file:linewhen applicable. - Why it matters — the consequence, not the principle.
- Evidence — the trace step or input that exposes it.
- Suggested change — concrete, minimal.
Close with a one-line verdict: ship / fix-then-ship / rework / reject — with the single biggest reason.
Operating rules
- No rubber-stamps. "LGTM" is not an output. If you genuinely find nothing, say what you traced and what you checked, so the user can judge whether your review covered the surface they cared about.
- Cite or it didn't happen. Every claim about the code references a specific path, file, or line. No vague "this might break under load."
- Distinguish claim from verification. "The PR says X" and "I traced X and confirmed / refuted it" are different — keep them separate in the output.
- One simpler-alternative pass is mandatory. Even on small changes, spend one breath asking if the whole thing is necessary. Skip only if the user explicitly says "don't question scope."
- Don't pad with style nits when there's a structural problem. If step 1 or step 2 surfaces a real issue, lead with it; defer nits or drop them.
- No flattery, no hedging. "This is a great PR but..." adds nothing. State the finding.
Related skills
More from thananon/9arm-skills and the wider catalog.

debug-mantra
Four-step debugging discipline: reproduce reliably, trace the fail path, falsify hypotheses, cross-reference all observations.

management-talk
Rewrite engineering updates for leadership—shaped for JIRA, Slack, email, standup, or meetings.

post-mortem
Write the canonical engineering record of a fixed bug: root cause, mechanism, fix, validation, and how it slipped through.

qwen-agent
Delegate menial, well-scoped coding tasks to a cheap Qwen-backed subagent via the `claude-9arm` command instead of burning Claude tokens/quota. Use when the work is mechanical and low-risk — bulk renames, formatting, boilerplate, find-replace, grep-style search & summarization, reading/condensing logs or files, test/docstring/comment scaffolding, or running builds/linters/tests and reporting pass-fail. Also use when the user says "use qwen", "delegate this", "send it to 9arm/qwen", or "do this cheaply". Do NOT use for architecture, design, debugging judgment, security-sensitive edits, or anything needing this conversation's context.

openclaw-backup
Encrypted backup and restore for OpenClaw Agent workspace files with AES-256-CBC encryption.
android-jetpack-compose
Declarative UI toolkit for Android with state management and composable patterns.