Skip to content
ImpactMCPPro

Your editor can see this.
Your AI agent can’t.

Twira gives your AI agent the same code intelligence developers already rely on, find-all references, dependency mapping, and blast radius. Three deterministic queries against the indexed call graph, in milliseconds, across 26 languages.

AI alone

  • Greps the codebase, misses value-passes, type annotations, macro tokens
  • Re-reads the same files turn after turn (no memory)
  • Invents function names when it cannot find the real one
  • No language server, no call-hierarchy keystroke
  • Cannot estimate blast radius before suggesting a change
  • “Done. No other files touched.”, six callers later, the bill arrives

Twira Impact powertool

  • Indexed call graph, every value-pass, type annotation, macro token
  • Deterministic reads in milliseconds, no LLM call in the query path
  • `refs` · `deps` · `blast_radius`, three queries, one tool
  • Risk-scored answer before any change (0–100 · low / medium / high / critical)
  • RED · YELLOW · GREEN sensitivity tags on dependent files
  • Same call-graph data your editor uses, exposed over MCP across 26 languages

You see what calls what. Your agent doesn’t. Twira gives your agent eyes.

refs

Every symbol usage.

deps

Who imports what.

blast_radius

Who depends on this file.

Sensitivity scale

REDauth · credentials · keys · crypto · CI / containers · lockfiles
YELLOWAPI · config · payments · migrations
GREENtests · docs · styles

You ask

Rename handleLogin to handleSignIn

Twira instantly

  • finds every caller
  • finds type references
  • finds imports
  • maps downstream impact
  • risk-scores the change

Agent has the full picture before changing anything.

Without Twira
With Twira
grep
call graph
rereads files
indexed queries
guesses
deterministic answers
hallucinations
grounded context

How the agent uses this

Agent calls `impact` via MCP. `action: "refs" / "deps" / "blast_radius"`. The aliases `refs`, `deps`, and `blast_radius` route to the same tool. All three actions are Pro.

When you reach for it

  • Before any non-trivial rename or signature change, refs finds every caller plus the type annotations and function-pointer references that grep would miss.
  • Before moving or deleting a file, deps shows everything that imports it (the CLI returns both sides; over MCP set direction: "imported_by" to narrow to incoming only).
  • Before agreeing to a refactor the agent suggested, blast_radius (Pro) gives a risk-scored map of which dependent files would feel the change.
  • When you want a one-line answer to "is this change safe to ship", the risk.level from blast_radius lands somewhere in low / medium / high / critical.

See it work

$ twira blast-radius src/auth/login.ts
✓ 5 dependents · 4 exported symbols · risk: high (62/100)↳ src/api/routes.ts, RED · entry point, high fan-out↳ src/middleware/session.ts, YELLOW · downstream consumer↳ src/tests/auth.test.ts, GREEN · test file only
Technical depth, for engineers who want it

In your editor

In your editor, you press `Shift+F12` to find every caller of a function. `Shift+Alt+H` for the full call hierarchy. Right-click → Find All References to see every place a symbol is used, including the type annotations and function-pointer references a grep would miss. The language server answers in milliseconds. This is how you plan a refactor without breaking things downstream.

What Impact does

Think of Impact as the agent’s eyes on your call graph. Three queries against the same graph your editor reads from. `refs`, every place a symbol is used, including the value-passes, type annotations, and macro tokens grep misses. `deps`, what a file imports, and what imports it, one hop each way. `blast_radius`, direct importers of a file, each tagged by sensitivity, plus the symbols it exports with caller counts, plus a 0–100 risk score that blends fan-out and caller count. Same insight your editor gives you. Available to the agent over MCP. Across 26 languages. The sensitivity tagging and risk score are on top of editor parity, your editor does not give you those either.

How it actually works

Impact answers the question every developer and every agent asks before a non-trivial change: "if I touch this, what else uses it?" Three related queries, refs, deps, and blast_radius, sit under one tool name. The agent picks the right query for the question being asked; you do not have to think about which is which. All three are deterministic reads against the index, milliseconds, no LLM call.

The refs action finds every place a symbol is used. It combines two slices of the graph: the call_graph table for actual call sites (with call_type and argument_count per call) and the symbol_refs table for non-call mentions. Each result is tagged with a ref_kind so you know what you are looking at, "call" for invocations, "value" when the symbol is passed by value (.and_then(my_fn), let x = my_fn), "type_annotation" for type positions (let x: MyType), "path" for path expressions (MyMod::MyFn not invoked), and "macro_token" for identifier mentions inside macro bodies. The distinction matters for refactor safety, a function passed as a value is not a call site, but it is a reference, and a rename has to update it too. An optional file_path filter scopes results to one file. Default limit is 20, configurable up to 5000.

The deps action analyses a file's import graph in either direction. direction: "imports" walks outgoing imports (what this file uses). direction: "imported_by" walks incoming (what uses this file). direction: "both" returns both sides in one response, the default. Each result carries the file path, the line number, and a dependency_type of either "import" for runtime imports or "type_import" for type-only imports. Self-references are filtered out so you only see real cross-file edges. (Note: the direction parameter is MCP-only; the twira deps CLI command returns both sides unconditionally.)

The blast_radius action is the file-level impact answer. Pass a file path and get three things back. First, every file that directly imports the target, each tagged with a risk severity, RED, YELLOW, or GREEN, based on a content heuristic that recognises entry points, tests, configs, auth/crypto code, and shared infrastructure. Second, every symbol the file exports, with a caller_count for each. Third, an overall risk score from 0 to 100 with a level of low (0–20), medium (21–50), high (51–75), or critical (76+). The score blends the number of dependent files with the total caller count across the exported symbols, so a file used by many places carries a higher risk than one used by few. The agent runs this before suggesting a refactor; you get a clean "this change touches N files, M exported symbols, risk: high" answer instead of a guess.

A note on scope. blast_radius is one hop, it returns the files that directly import the target, not a transitive cascade through the dependency tree. The risk score and RED/YELLOW/GREEN tagging both operate on the direct importers. If you need the next hop, deps with direction: "imports" walks it manually.

Tiering: all three actions, refs, deps, and blast_radius, are Pro. The include_risk_score parameter on blast_radius still works as before (set it to false to skip the risk number and level), but the action itself is Pro either way. Impact is positioned as a single product: your editor can see this; your agent cannot; Twira gives the agent eyes, one Pro purchase, not a Free teaser plus a Pro upsell.

Setup is one step. Run twira index once on install, and the post-commit hook keeps the call graph and dependencies current. All three actions are then ready, over MCP for the agent, and at the CLI as the individual subcommands twira refs, twira deps, and twira blast-radius.

What it isn’t

  • `blast_radius` is one hop, it shows the files that directly import a target, not a transitive cascade through the dependency tree.
  • The call graph contains what the language can resolve statically. Calls through `eval`, reflection, or dynamic dispatch are not in it.
  • RED, YELLOW and GREEN classify the *kind* of file that depends on your target, by path keywords (auth, crypto, api, test, docs, etc.) and content patterns (private keys, passwords, tokens). It is a "what could I break?" signal, not a likelihood-of-breakage rating.
  • All three actions, refs, deps, and blast_radius, are Pro-tier.

One install. Your agent will know the difference in the first session.

$ curl -fsSL twira.com/install.sh | sh
Impact, Tools · Twira