blast-radius
Skill1 starsChanged 34 days agoMITView on GitHub
Map what UNCHANGED code depends on what the diff changed, and whether it still holds, in the same repo AND sibling repos. Enumerates changed contract surfaces (signatures, DB columns, GraphQL fields, config/flags, props, new kinds of rows a new writer inserts) and hunts silent behavior changes the compiler will not catch. Fire before shipping a change to a shared contract surface, especially prod hotfixes on old code. Chain-safe. NOT /code-review (diff correctness).
111 other projects use a version of this.
Adopted by
Most recently taken up by
- marmot-protocol/mdktheir own version, first seen Nov 9, 2026
- Yeachan-Heo/oh-my-claude-sisyphustheir own version, first seen Nov 8, 2026
- Loner1024/skillstheir own version, first seen Nov 8, 2026
- imranbarbhuiya/skillstheir own version, first seen Nov 8, 2026
- caidanw/skillstheir own version, first seen Nov 8, 2026
- pedrohcgs/claude-code-my-workflowtheir own version, first seen Nov 8, 2026
Used with
Projects with it also use ketchup-video, principle-never-block-on-the-human and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
tristanphvnSkillketchup-video
Catch the user up like /keel:ketchup, with a short silent video of slides for what happened and the waiting calls as text under it. Use for /keel:ketchup-video.
Also in 14 projects that use this
jaydubya818Skillprinciple-never-block-on-the-human
Apply when safe reversible implementation details can proceed inside scope.
Also in 44 projects that use this
ianclearySkillprinciple-explain-the-number
Apply before you trust, report, or act on a number you measured: a speedup, a regression, a throughput, a latency, or an eval result. Find what limits it, and rule out that it measured something other than the work you think.
Also in 29 projects that use this
eryzerzSkillmake-bot-ui
Use when building a custom UI (page, dashboard, buttons) that should wake a Grok Bot over a webhook, when the user must provide a webhook sender key, or when exposing that UI on Tailscale.
Also in 20 projects that use this
bnemaSkillsetup-pstack
Configure which Pi models pstack uses per role. Detects available provider/model specs and writes pstack's user configuration. Use for /setup-pstack, "configure pstack models", or changing pstack model choices.
Also in 25 projects that use this
jaydubya818Skillprinciple-make-operations-idempotent
Apply when an operation must tolerate retries after partial completion.
Also in 46 projects that use this
- +6 more from jaydubya818
Other versions111 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 111
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
- Yeachan-Heo/oh-my-claudecode★ 41ksame name
- backnotprop/pstack★ 3.8ksame name
- pedrohcgs/claude-code-my-workflow★ 1.7ksame name
- pixeltable/pixeltable★ 1.7ksame name
- moeru-ai/xsai★ 667same name
- savannahfeder/agentbox★ 376same name
- jtaroreh/agystack★ 128same name
- uzairansaruzi/p3-stack★ 126same name
- Dimon94/dverity★ 107same name
101 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository56 other files it gives its agents.
- autopilotSkill
- before-afterSkill
- bigpictureSkill
- brainstormSkill
- compoundSkill
- confidence-checkSkill
- contextualizeSkill
- create-ship-skillSkill
- create-skillSkill
- curateSkill
- debugSkill
- deep-researchSkill
- devtoolsSkill
- distillSkill
- done-checkSkill
- doneSkill
- double-checkSkill
- envsetSkill
- explainSkill
- fortifySkill
- goSkill
- handoffSkill
- harness-auditSkill
- interviewSkill
- matrixSkill
- mockupSkill
- mutateSkill
- notesSkill
- postmortemSkill
- presentSkill
- qaSkill
- readableSkill
- recommendSkill
- reportSkill
- retireSkill
- review-planSkill
- scoutSkill
- sec-reviewSkill
- setup-ticketingSkill
- setup-worktreesSkill
- spec-checkSkill
- specSkill
- stepsSkill
- successionSkill
- super-reviewSkill
- tangentSkill
- tddSkill
- tend-memorySkill
- testSkill
- ticketSkill
- tldrSkill
- triageSkill
- waitSkill
- workSkill
- worth-itSkill
- wrap-upSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 1 is distinctive, and 1 is very specific to this project.
0
Common
Most of the 106 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 90
If a surface has many consumers, don't truncate silently — if you cap the trace, say what you didn't follow.
- Very specific: line 132
Don't touch data files: Never open or quote the contents of customer-data files (*.csv, *.xlsx, dumps, *.sql data scripts, exported …
“Common” is measured: kept by at least 6 in 10 of the 106 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
You are mapping the blast radius of an in-flight change, in this isolated fork. The other review skills point the telescope inward — "is the changed code correct?" You point it outward: what unchanged code depends on what this change touched, and does it still hold? The danger you exist to catch is the consumer that the author never opened — a caller in another file, a resolver in another repo, a report that read the column you just narrowed.
The highest-value find is the silent behavior change: a function whose signature is unchanged but whose behavior shifted (returns active-only rows now; a validator that warned now throws; a default flipped). The compiler won't flag it, /code-review reading the diff won't see the consumer, and tests pass — but a caller three files (or one repo) away quietly breaks. That class is the priority hunt.
Why this runs isolated
The Blast Radius Report at the end is a satisfying terminal block. Run inline in the main loop, it tempts the model to end the turn — abandoning a caller's chain (/super-review's mandatory recap, or /work's pipeline). The fork contains that terminal cue: the report returns to the caller as a result, and the caller keeps control. Same structural fix /sec-review, /review-plan, and /mutate use.
This skill is read-only — it greps, reads, and traces; it never edits. So unlike /mutate, the fork here isolates context only; there's nothing to restore.
Arguments
$ARGUMENTS may contain:
- Nothing → analyze the current branch's uncommitted/in-flight changes against the integration branch.
- A branch name → analyze that branch against integration.
- A PR number / URL → analyze the PR's source branch against its target branch.
- A commit range (e.g.
abc123..def456) → analyze exactly that range.
Resolve this at the top of Phase 0. If ambiguous, ask once before starting.
Repo topology — discover the seams, don't assume them
Cross-repo consumers only exist where the project has siblings. Establish the topology before you trace:
- Read the root
CLAUDE.mdand the current repo's ownCLAUDE.mdfor the layout — a multi-repo workspace or monorepo vs a single standalone repo — and for any section naming which repos or packages consume which, over what contract (generated OpenAPI or protobuf clients, a shared DB, message-queue payloads). - Multi-repo workspace or monorepo (sibling git repos side by side, or packages in one repo): a diff lives in one repo or package; its cross-repo consumers live in siblings. Locate the workspace root and list the siblings so cross-repo greps can run. (Typical seams: generated API clients, a database two services read, a message a queue carries between services.)
- Single standalone repo: say so plainly — the fan-out is in-repo only. That's a legitimate, smaller pass, not a skipped step.
When siblings exist, a blast-radius pass that stops at the current repo's boundary has missed the exact class of failure this skill exists for.
The workflow
Phase 0 — Survey & scope
In parallel where possible:
- State:
git rev-parse --show-toplevel(current repo root),git branch --show-current,git status,git remote get-url origin. Identify which repo or package the diff is in. - Base branch: from the repo's
CLAUDE.md, if it names the branch new work is based on. Fall back to the remote default branch. If neither resolves, ask. - Diff:
git diff <base>...HEAD(committed) plus the working-tree diff (if dirty). Capture the changed-file list withgit diff --stat <base>. - Topology: resolve the layout per the section above — workspace root + sibling list, or confirm the repo is standalone.
Phase 1 — Enumerate changed contract surfaces
Walk the diff hunk by hunk and extract every surface other code can depend on. For each, classify the risk shape — this drives how hard you hunt in Phase 2:
- Additive (new optional param with a default, new field, new export) → low risk; a quick existence check usually suffices.
- Signature-breaking (param added/removed/reordered/retyped, export renamed or removed, required field dropped, return shape changed) → the compiler/typechecker will catch most in-repo consumers; cross-repo consumers over GraphQL or raw SQL will NOT be caught at compile time — those are the residual risk.
- New row shape — a new writer inserts rows an existing table never held before (a new mutation or job writing rows, or an existing writer producing a new combination: a refund dated today, an item on a still-pending order, a row linked to its counterpart only by a text field) → a silent behavior change for every reader of that table. The schema and every read query are unchanged, so nothing flags it.
- Silent behavior change — same signature, different behavior → the priority hunt. No compiler help, no diff-read help. Examples: a query now filters
WHERE active = true; a validator switched from warn to throw (fail-closed); a default value flipped; a function that returned all rows now returns a page; rounding/timezone/null handling changed.
Surfaces to enumerate:
- Exported functions / classes / consts / hooks / types — both signature changes and behavior changes.
- DB schema — migrations, added/dropped/renamed columns, changed nullability/defaults/types (an ORM schema file, plus raw SQL). Who SELECTs or writes that column, including other repos and report queries?
- New row shapes — any insert/create path the diff adds, or any row whose field combination is new (dates, statuses, sign, link columns left null). Write down the shape: "rows like X, with properties A, B, C". Skip this surface when the diff only reads, or when it writes rows exactly like the ones the table already holds.
- GraphQL schema — added/changed/removed types, fields, args, enum values, nullability. Trace into the generated/consuming clients and app queries.
- Shared config / env vars / feature flags / constants consumed elsewhere.
- API routes / endpoints, queue or event message shapes.
- Shared React component props (for components used in more than one place).
Output of this phase: a list of <surface> — <risk shape> lines. If the diff touches no shared surface (purely-internal change, test-only, copy/styling), say so plainly and short-circuit to a 🟢 report — do not manufacture surfaces.
Phase 2 — Fan out to consumers (in-repo AND cross-repo)
For each surface, find every consumer:
- In-repo:
rg/grepfor the symbol; trace imports and call sites; for DB columns, grep the column name across queries and ORM models. - Cross-repo: for any surface on a known seam (API schema field, shared DB column, queue message shape), grep the sibling repos too — generated client dirs, resolvers, the consuming app's query files. This is the step that catches the schema-coupling class.
- For silent behavior changes, grep finds the call sites but won't tell you they're broken — the call still compiles. For each consumer, reason explicitly: does this caller rely on the old behavior? (e.g., a report that assumed "all rows" now silently drops the inactive ones.) State the invariant the consumer assumed, then check whether the change preserves it.
- For a new row shape, the consumers are the table's readers, not the writer's callers. List every reader of the table: ORM queries on the model, raw SQL, SQL functions, views and materialized views, batch jobs, reports and exports, generated documents such as invoices, and cross-repo integrations. For each one, name the assumption it makes about rows (every order has exactly one shipping row, the parent is active, a status only moves forward, a quantity is never zero, rows can be deleted or edited independently), then check it against the new shape. Include the write paths that act on existing rows too (delete, edit, clone), because a new row shape can make an existing write path unsafe. With many readers, split the sweep across parallel searches and report which ones you covered.
If a surface has many consumers, don't truncate silently — if you cap the trace, say what you didn't follow.
Phase 3 — Verify each consumer holds
Tag every consumer found:
- ✅ Safe — additive change, or the consumer doesn't touch the changed aspect.
- ⚠️ At-risk — the consumer may depend on old behavior; needs a human eye or a test. Default here when you can't prove safe.
- 🔴 Broken — definitely breaks: signature mismatch, removed field still referenced, behavior change the consumer demonstrably relies on.
Note where a typechecker would catch it (lower residual risk) versus where it won't — cross-repo GraphQL/SQL contracts and same-signature behavior changes are the won't-catch zone. Do not run cross-repo builds — they're heavy, deps may be uninstalled, and the value here is the reasoning, not the build. Point at where the compiler would/wouldn't help instead.
Phase 4 — Blast Radius Report
Return this block as your result to the caller. It fires on every outcome, including "contained — no shared surface touched."
### Blast Radius Report
**Status:** <🟢 contained / 🟡 review needed / 🔴 breaks consumers>
**Scope:** <repo · base branch · N files>
**Changed contract surfaces:**
- <surface> — <additive / signature-break / SILENT behavior change>
**Consumer map:**
- <surface> → <consumer file:line> — <✅ safe / ⚠️ at-risk: why / 🔴 broken: why>
(one line per consumer; group under the surface)
**Cross-repo crossings:** <each seam the change reaches into a sibling repo, file:line — or "none">
**Silent behavior changes (compiler won't catch):** <each same-signature behavior shift + the consumer assumption it violates — or "none">
**Recommended verifications:** <a test to add, a consumer to eyeball, a cross-repo deploy-lockstep note — or "none"; when a changed surface is a shared UI component, name the adjacent screens that render it as browser-QA targets>
**At-risk (⚠️):** <one bullet each, or "none">
**Broken (🔴):** <one bullet each, or "none">Guardrails
- Read-only. Surface findings; never edit code or fix consumers — that's the caller's decision.
- Cross-repo is mandatory when the diff touches a seam. An API schema field or shared DB column change is not fully analyzed until you've grepped the sibling repos. Stopping at the current repo's boundary is the failure mode this skill exists to prevent.
- Hunt the silent class hardest. Signature breaks are mostly compiler-caught; same-signature behavior changes are not. Weight your effort accordingly.
- Don't manufacture blast radius. A purely-internal or additive change gets a short 🟢 report. Mirror the no-manufactured-nits rule — an honest "contained" is a valid, valuable result.
- Don't touch data files. Never open or quote the contents of customer-data files (
*.csv,*.xlsx, dumps,*.sqldata scripts, exported reports) — trace code and schema, not data. - Don't run cross-repo builds or migrations. Reason about where the compiler would catch a break; don't spend the time (or risk the side effects) running it.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

