From julie
Analyze what would break if a symbol changes: finds callers, groups by risk level, assesses impact. Use when the user asks about blast radius, who uses a symbol, or is planning a refactor.
How this skill is triggered — by the user, by Claude, or both
Slash command
/julie:impact-analysis<symbol,filepath,orchangetarget>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Analyze the impact of changing a symbol by finding all references and assessing risk. Use this BEFORE modifying widely-used symbols.
Analyze the impact of changing a symbol by finding all references and assessing risk. Use this BEFORE modifying widely-used symbols.
If the user gives you a symbol name, resolve the definition first so you know which file or symbol they mean:
fast_search(query="<symbol_name>")
deep_dive(symbol="<symbol_name>", context_file="<partial_file_path>", depth="overview")
Use context_file when the name is ambiguous. If the target is described conceptually rather than named exactly, try fast_search(query="<concept>", backend="semantic") or backend="hybrid" to find candidate symbols. Semantic/hybrid fast_search results are symbol-only; use explicit lexical for file paths and pure lexical comparison. Default fast_search may show labeled semantic fallback candidates only after an identifier-like unscoped lexical zero-hit. blast_radius(symbol_ids=[...]) is the tightest seed mode, but only use it when another Julie result already gave you concrete symbol IDs. If all you have is a definition file, use file_paths=[...].
blast_radius(file_paths=["<definition_file>"], max_depth=2, include_tests=true)
blast_radius is the primary entry point for impact analysis. One call returns ranked impacted symbols with why-reasons, likely tests, and (for revision-range seeds) deleted files. It walks the reference graph deterministically, so you don't have to chain get_context → fast_refs → deep_dive to build the same picture.
You can seed it three ways:
file_paths=["src/foo.rs"] — default when you know the changed file but not a symbol IDsymbol_ids=["<id>"] — tighter impact when another Julie result already gave you concrete symbol IDsfrom_revision=<number>, to_revision=<number> — advanced mode using Julie's canonical revision numbers, not Git refs or SHAsIf the impact list is large, the first page includes spillover_handle=br_xxx. Hold onto it for Step 4.
For any impacted symbol you need to understand in depth (unfamiliar caller, ambiguous usage, high centrality), use the targeted tools:
fast_refs(symbol="<caller>", include_definition=true, limit=100)
deep_dive(symbol="<caller>", depth="context")
If deep_dive returns the wrong symbol (common names like new, result, config), use context_file to disambiguate:
deep_dive(symbol="<caller>", context_file="<partial_file_path>")
If Step 2 returned spillover_handle=br_xxx, fetch the rest without rerunning the walk:
spillover_get(spillover_handle="br_xxx")
Keep paging until the handle stops appearing.
For "what's the blast radius of everything that changed in a recorded Julie revision range?" use revision-range seeds:
blast_radius(from_revision=101, to_revision=108, include_tests=true)
This walks from every symbol touched in that range. Deleted files get reported in a separate section of the output because they have no symbols left to walk from. Do not pass branch names, SHAs, or tags here, the tool only accepts canonical numeric revisions.
For each high-risk file surfaced by blast_radius, deep_dive on the calling function to understand HOW the symbol is used:
If you need the shortest route from one surfaced caller into a downstream sink or shared dependency, use call_path after blast_radius:
call_path(from="<impacted_symbol>", to="<downstream_symbol>")
blast_radius gives you ranked impact with why-reasons, but you still want to sort callers into tiers for the final report:
High Risk — Changes here could cause cascading failures:
Medium Risk — Changes need careful testing:
Low Risk — Changes are isolated:
test, tests, spec, __tests__, or test annotations)Impact Analysis: <change_target>
Definition: <file>:<line> (<kind>)
Centrality: <high/medium/low>
Total: <N> references across <M> files
High Risk (<count> files):
src/handler.rs — 15 refs
Callers: process_request, handle_error, validate_input
Usage: Core request pipeline, changes here affect all tool calls
src/database/queries.rs — 12 refs
Callers: fetch_symbols, update_index
Usage: Database layer, type changes would require migration
Medium Risk (<count> files):
src/tools/search.rs — 5 refs
src/tools/navigation.rs — 3 refs
Low Risk (<count> files):
src/tests/search_tests.rs — 8 refs (test code)
src/tests/handler_tests.rs — 2 refs (test code)
Likely Tests:
src/tests/handler_tests.rs::test_process_request
src/tests/integration/pipeline.rs::test_end_to_end
Recommendation:
<1-2 sentences on how to approach this change safely>
blast_radius surfaces likely tests via the include_tests=true flag, so use it.manage_workspace(operation="open", path="<path>") first, then pass the returned workspace_id to all tool callsnpx claudepluginhub anortham/julie-plugin --plugin julieCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.