AgentStack
SKILL verified MIT Self-run

Code Impact Radius

skill-faris-alanazi-code-impact-radius-code-impact-radius · by Faris-Alanazi

Use BEFORE any rename, refactor, type-shape change, deletion, or "what depends on X" question in a TypeScript / TSX codebase. Returns every place a symbol is defined, read, written, called, instantiated, imported, re-exported, plus its transitive callers up to a configurable depth. Far cheaper than grep+read because it queries a typed reference index built from the TypeScript Compiler — no false…

No reviews yet
0 installs
7 views
0.0% view→install

Install

$ agentstack add skill-faris-alanazi-code-impact-radius-code-impact-radius

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Code Impact Radius? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Code Impact Radius

The structured replacement for grep -r followed by reading every match.

When to invoke

Whenever you (or the user) is about to:

  • Rename a function, variable, class, type, interface, or enum
  • Change the shape of a type or function signature
  • Move or delete a file / module / barrel export
  • Audit who depends on a particular symbol (security review, deprecation, refactor planning)
  • Decide whether a change is "safe to do alone" or "needs coordinated rollout"
  • Answer "what calls X", "where is X used", "who imports X", "blast radius of X"

This is the right tool whenever the question is "what connects to this symbol?"

How to invoke

node ~/.claude/skills/code-impact-radius/src/cli.js  --project  --json

Or — if you want pretty terminal output instead of JSON:

node ~/.claude/skills/code-impact-radius/src/cli.js  --project  --pretty

JSON is the default when stdout is not a TTY (so AI agents always get JSON).

Options

| Flag | What it does | |---|---| | --project | Project root containing tsconfig.json (default: cwd) | | --depth | Transitive caller depth (default 2, max 10) | | --kind | Filter declaration kind: variable function class method interface type enum | | --at : | Disambiguate when the name has multiple declarations | | --include-tests | Include *.test.ts / *.spec.ts in references (default: skip) | | --max-sites | Truncate references.sites to first N entries | | --json / --pretty | Force output mode | | --mermaid | Emit a Mermaid flowchart diagram (paste into a Markdown `mermaid block — GitHub, GitLab, VS Code, Obsidian, Notion render natively). |

Exit codes

| Code | Meaning | |---|---| | 0 | Success — exactly one match, OR ambiguous list with N candidates | | 1 | CLI usage error / runtime error | | 2 | Symbol name not found |

Reading the JSON output

{
  "query":             // what was asked
  "matched":           // how many declarations matched the name
  "candidates":        // disambiguation list (only when matched > 1 or 0)
  "symbol": {
    "name":            // canonical name
    "kind":            // function | class | variable | ...
    "definition": {
      "file": "...", "line": 42, "column": 17,
      "snippet": "export function formatPrice..."
    }
  },
  "references": {
    "totalCount": 14,
    "byKind": {
      "definition": 1,
      "call": 8,
      "import": 3,
      "reExport": 1,
      "read": 1,
      "instantiation": 0,
      "jsx": 0,
      "type": 0,
      "write": 0
    },
    "sites": [
      { "file": "...", "line": 18, "kind": "call", "snippet": "formatPrice(price, locale)", "parentKind": "CallExpression" }
    ],
    "truncated": 0
  },
  "imports": {
    "exportedFrom": "src/lib/utils.ts",
    "importedBy":     // every file that imports this symbol
    "reExportedFrom": // every barrel that re-exports it
  },
  "transitiveCallers": {
    "depth": 2,
    "callers": [
      { "depth": 1, "file": "...", "line": 18, "function": "PriceTag",     "functionKind": "FunctionDeclaration" },
      { "depth": 2, "file": "...", "line": 87, "function": "CheckoutPage", "functionKind": "FunctionDeclaration" }
    ]
  },
  "warnings": []
}

Disambiguation flow

If matched > 1, the tool returns candidates and asks for a --at : to pick one:

$ code-impact-radius id --project ./app --json
# matched: 3, symbol: null, candidates: [{file, line, kind} × 3]

$ code-impact-radius id --project ./app --at src/ambig.ts:11 --json
# matched: 1, symbol: { ... }

Decision-flow guidance for blast-radius checks

Use this output to drive a structured impact table:

  1. Definition — read the file at symbol.definition.file:line to see the contract you're about to change.
  2. References by kind — every call, instantiation, jsx, read, write site is a potential breakage.
  3. Imports — every imports.importedBy entry needs updating if you rename the symbol.
  4. Re-exports — barrels in imports.reExportedFrom need updating too.
  5. Transitive callers — depth 2-3 catches most "indirect callers" that grep would miss.

Then build the impact table (file:line | usage | status: todo/done/verified-unaffected) and tick each row off as you go.

What this tool does NOT cover

  • String literals — i18n keys (t('home.title')), SQL fragments, env-var names, URL paths. Use grep for those.
  • Dynamic importsimport('./mod') calls aren't traced.
  • Cross-language — TypeScript / TSX only. Python / Rust / Go / SQL stay grep territory.

For string-literal scans, run grep alongside this tool. The two together cover the full surface.

Performance

Cold-load on a ~200 TS/TSX file project: ~1.5s per query. ~700-file projects: ~5-8s. The TypeScript compiler initializes once per CLI invocation, so repeated queries in one session each pay that cost.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.