Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Before modifying shared code (utilities, types, configs, base classes), traces all callers and dependents first. Prevents "fixed one thing, broke three others." Use when editing files in shared/, utils/, lib/, or anything imported by 3+ files.
.claude/skills/adityapeshave-sophos-trace-it/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 36% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -8% | 0% |
Shared code is high-leverage but high-risk. Change a utility function and you might break 10 callers. Change a type definition and you invalidate assumptions across the codebase. This skill forces you to trace impact before editing.
utils/, lib/, shared/, common/, core/bash# Find imports/requires of this file grep -r "from.*['\"].*filename" src/ grep -r "import.*filename" src/ grep -r "require.*filename" src/ # Find usages of specific function/class grep -r "functionName" src/ --include="*.ts"
Document what you find:
markdown## Dependency Trace: [file or function name] **Direct callers:** [count] - `src/api/handler.ts:23` - uses for validation - `src/services/user.ts:45` - uses for formatting - `src/utils/helpers.ts:12` - re-exports it **Indirect dependents:** [count] - Files that import the direct callers
For each caller, determine:
| Caller | How it uses this | Will change break it? | |--------|------------------|----------------------| | handler.ts | Calls validate(input) | Yes - signature changes | | user.ts | Uses return value | No - return type same |
Impact level:
For Low impact: Proceed, update callers inline.
For Medium impact:
For High impact:
When changing function signatures:
markdown## Signature Change **Before:** `function process(data: string): Result` **After:** `function process(data: string, options?: Options): Result` **Breaking:** No (new param is optional) **Callers to update:** 0 required, 5 could benefit ## OR **Before:** `function process(data: string): Result` **After:** `function process(data: ProcessInput): Result` **Breaking:** Yes **Callers to update:** 8 files **Migration:** [list each file and required change]
markdown## Trace: [what you're changing] **Callers found:** [count] **Impact level:** [Low/Medium/High] **Changes required:** - [ ] `file1.ts:line` - [what needs updating] - [ ] `file2.ts:line` - [what needs updating] **Verified after change:** - [ ] All callers updated - [ ] No new type errors - [ ] Tests pass
User: "Rename the formatDate function to formatDateTime"
Trace:
bashgrep -r "formatDate" src/
Found:
src/utils/date.ts:15 - definition
src/components/Header.tsx:8 - import
src/components/EventCard.tsx:12 - import
src/pages/Dashboard.tsx:45 - import
src/api/events.ts:23 - import
src/utils/index.ts:5 - re-exportImpact: 6 files reference this. High impact.
Plan:
date.tsutils/index.tsgrep -r "formatDate" src/ returns nothingAfter completion: > Renamed formatDate to formatDateTime across 6 files. > Verified: no remaining references to old name.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 11,536 | 3,556 | -69% | 1 | 1 | 0% | 2,372 | 1,571 | -34% | 0 | 0 | — |
case-02 | fail→fail | 21,238 | 7,914 | -63% | 1 | 1 | 0% | 4,057 | 2,689 | -34% | 0 | 0 | — |
case-03 | pass→pass | 16,450 | 10,401 | -37% | 1 | 1 | 0% | 2,939 | 3,101 | +6% | 0 | 0 | — |
case-04 | fail→pass | 12,934 | 6,053 | -53% | 1 | 1 | 0% | 2,164 | 2,216 | +2% | 0 | 0 | — |
case-05 | fail→pass | 7,849 | 3,854 | -51% | 1 | 1 | 0% | 1,379 | 1,834 | +33% | 0 | 0 | — |
case-06 | fail→pass | 10,574 | 6,687 | -37% | 1 | 1 | 0% | 1,693 | 2,306 | +36% | 0 | 0 | — |
case-07 | pass→pass | 13,662 | 7,910 | -42% | 1 | 1 | 0% | 2,408 | 2,538 | +5% | 0 | 0 | — |
case-08 | fail→pass | 9,201 | 7,453 | -19% | 1 | 1 | 0% | 1,638 | 2,305 | +41% | 0 | 0 | — |
case-09 | pass→pass | 15,235 | 9,637 | -37% | 1 | 1 | 0% | 2,584 | 2,796 | +8% | 0 | 0 | — |
case-10 | pass→fail | 4,047 | 4,067 | +0% | 1 | 1 | 0% | 684 | 1,837 | +169% | 0 | 0 | — |
case-11 | pass→pass | 9,533 | 5,928 | -38% | 1 | 1 | 0% | 1,863 | 2,208 | +19% | 0 | 0 | — |
case-12 | pass→pass | 8,792 | 9,614 | +9% | 1 | 1 | 0% | 1,774 | 2,761 | +56% | 0 | 0 | — |
case-13 | pass→pass | 9,122 | 3,690 | -60% | 1 | 1 | 0% | 1,740 | 1,753 | +1% | 0 | 0 | — |
case-14 | fail→pass | 11,207 | 3,007 | -73% | 1 | 1 | 0% | 1,807 | 1,655 | -8% | 0 | 0 | — |
case-15 | pass→pass | 7,607 | 3,738 | -51% | 1 | 1 | 0% | 1,243 | 1,788 | +44% | 0 | 0 | — |
case-16 | pass→pass | 9,637 | 2,167 | -78% | 1 | 1 | 0% | 1,513 | 1,528 | +1% | 0 | 0 | — |
case-17 | pass→pass | 9,594 | 4,744 | -51% | 1 | 1 | 0% | 1,532 | 1,955 | +28% | 0 | 0 | — |
case-18 | fail→pass | 15,140 | 7,341 | -52% | 1 | 1 | 0% | 2,613 | 2,267 | -13% | 0 | 0 | — |
case-19 | pass→pass | 10,111 | 5,263 | -48% | 1 | 1 | 0% | 1,879 | 2,081 | +11% | 0 | 0 | — |
case-20 | pass→pass | 8,136 | 4,039 | -50% | 1 | 1 | 0% | 1,405 | 1,721 | +22% | 0 | 0 | — |
case-21 | fail→pass | 8,579 | 6,958 | -19% | 1 | 1 | 0% | 1,546 | 2,398 | +55% | 0 | 0 | — |
case-22 | pass→pass | 4,509 | 1,780 | -61% | 1 | 1 | 0% | 799 | 1,416 | +77% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.