with one click
investigate
// [Fix & Debug] Use when you need investigate and explain how existing features or logic work.
// [Fix & Debug] Use when you need investigate and explain how existing features or logic work.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | investigate |
| description | [Fix & Debug] Use when you need investigate and explain how existing features or logic work. |
| version | 2.2.0 |
Goal: READ-ONLY exploration โ understand how code works, zero changes.
Workflow:
.ai/workspace/analysis/[feature]-investigation.mdKey Rules:
file:line proof โ mark unverified as "inferred"project-structure-reference.md (if not found, search: project documentation, coding standards, architecture docs)Classify before acting โ route to correct depth:
| Scope | Signals | Depth |
|---|---|---|
| Quick | Single feature/function, clear entry point | grep โ trace โ answer (no analysis file needed) |
| Deep | Multi-service, cross-boundary, ambiguous scope | Full workflow + knowledge graph template + analysis file |
| Debug | Error/crash/unexpected behavior | Root-cause-debugging protocol above |
| Recommendation | Code change suggested (removal, refactor) | Validation chain protocol below โ MANDATORY |
Quick scope: Skip knowledge graph template + analysis file. Grep โ graph trace โ present findings.
Deep scope: MUST ATTENTION write to .ai/workspace/analysis/[feature]-investigation.md.
Skeptical. Every claim needs file:line traced proof. Confidence >80% to act.
file:line for every finding; unproven claims MUST ATTENTION be marked "inferred"Discovery โ Search for all related files. Priority: Entities > Commands/Queries > EventHandlers > Controllers > Consumers > Components.
Graph Expand (MANDATORY โ DO NOT SKIP) โ YOU (main agent) MUST ATTENTION run graph queries YOURSELF on key files from Step 1. Sub-agents CANNOT use graph โ only you can. Pick 2-3 key files (entities, commands, bus messages):
python .claude/scripts/code_graph connections <key_file> --json
python .claude/scripts/code_graph query callers_of <FunctionName> --json
python .claude/scripts/code_graph query importers_of <file_path> --json
# "ambiguous" โ search to disambiguate, retry with qualified name
python .claude/scripts/code_graph search <keyword> --kind Function --json
# Trace how two nodes connect
python .claude/scripts/code_graph find-path <source> <target> --json
# Filter by service, limit results
python .claude/scripts/code_graph query callers_of <name> --limit 5 --filter "ServiceName" --json
Graph reveals complete dependency network (callers, importers, tests, inheritance) grep alone misses. Also run /graph-connect-api for frontend-to-backend API mapping.
Knowledge Graph โ Read + analyze each file (from grep + graph results). Document purpose, symbols, dependencies, data flow. Batch in groups of 10; update progress after each batch. Per-file template:
Flow Mapping โ Trace entry points through processing pipeline to exit points. Map data transformations, persistence, side effects, cross-service boundaries.
Analysis โ Extract business rules, validation, authorization, error handling. Document happy path AND edge cases.
Synthesis โ Executive summary answering original question. Key files, patterns used, text-based flow diagrams.
Present โ Structured output (see Output Format). Offer deeper dives on subtopics.
If preceded by /scout: Use Scout's numbered file list as analysis targets. Skip redundant discovery. Prioritize HIGH PRIORITY files.
Grep {FeatureName} combined with: EventHandler, BackgroundJob, Consumer, Service, Component.
Priority order: (1) Entities โ (2) Commands/Queries (UseCaseCommands/) โ (3) Event Handlers (UseCaseEvents/) โ (4) Controllers โ (5) Consumers (*BusMessage.cs) โ (6) Background Jobs โ (7) Components/Stores โ (8) Services/Helpers
Backend: method callers (grep *.cs), service injectors (grep interface in constructors), entity events (EntityEvent<Name>), cross-service (*BusMessage across services), repository usage (IRepository<Name>).
Frontend: component users (grep selector in *.html), service importers (grep class in *.ts), store chains (effectSimple โ API โ tapResponse โ state), routes (grep component in *routing*.ts).
Document as: [Entry] โ [Validation] โ [Processing] โ [Persistence] โ [Side Effects]
MUST ATTENTION trace: (1) Entry points, (2) Processing pipeline, (3) Data transformations, (4) Persistence points, (5) Exit points/responses, (6) Cross-service message bus boundaries.
| Question Type | Steps |
|---|---|
| "How does X work?" | Entry points โ command/query handlers โ entity changes โ side effects |
| "Where is logic for Y?" | Keywords in commands/queries/entities โ event handlers โ helpers โ frontend stores |
| "What happens when Z?" | Identify trigger โ trace handler chain โ document side effects + error handling |
| "Why does A behave like B?" | Find code path โ identify decision points โ check config/feature flags โ document rules |
Backend (search for backend-patterns-reference in docs/): CQRS commands/queries, entity event handlers, message bus consumers, repository extensions, validation fluent API, authorization attributes.
Frontend (search for frontend-patterns-reference in docs/): store component base, store base, effectSimple/tapResponse, observerLoadingErrorState, API service base class.
MUST ATTENTION orchestrate grep โ graph โ grep dynamically: (1) Grep key terms to find entry files, (2) Use connections/batch-query/trace --direction both to expand dependency network, (3) Grep again to verify content. trace follows ALL edge types including MESSAGE_BUS and TRIGGERS_EVENT.
python .claude/scripts/code_graph connections <file> --json # Full picture
python .claude/scripts/code_graph query callers_of <name> --json
python .claude/scripts/code_graph query importers_of <file> --json
python .claude/scripts/code_graph query tests_for <name> --json
python .claude/scripts/code_graph batch-query <f1> <f2> --json
Deep scope โ MANDATORY: Write analysis to .ai/workspace/analysis/[feature-name]-investigation.md. MUST ATTENTION re-read ENTIRE file before presenting findings.
Structure: Metadata (original question) โ Progress โ File List โ Knowledge Graph (per-file entries per SYNC:knowledge-graph-template) โ Data Flow โ Findings.
Rule: Every 10 files โ MUST ATTENTION update progress, re-check alignment with original question.
Comprehensive: (1) Happy path, (2) Error paths, (3) Edge cases, (4) Authorization checks, (5) Validation per layer. Extract: core business rules, state transitions, side effects.
Synthesis: Executive summary (1-para answer, top 5-10 key files, patterns used) + step-by-step walkthrough with file:line references + flow diagrams.
MUST ATTENTION include: (1) Direct answer (1-2 paragraphs), (2) Step-by-step "How It Works" with file:line refs, (3) Key Files table, (4) Data Flow diagram, (5) "Want to Know More?" subtopics.
scout (pre-discovery) | feature (implementation) | debug-investigate (debugging) | graph-query (natural language queries)
Applies when recommending code changes (removal, refactoring, replacement). MUST ATTENTION complete full validation chain.
NEVER recommend code changes without completing ALL steps:
If ANY step incomplete โ STOP. State "Insufficient evidence to recommend."
| Risk | Criteria | Required Evidence |
|---|---|---|
| HIGH | Removing registrations, deleting classes, changing interfaces | Full usage trace + impact + cross-service check (all services) |
| MEDIUM | Refactoring methods, changing signatures | Usage trace + test verification + cross-service check |
| LOW | Renaming variables, formatting, comments | Code review only |
grep -r "ClassName" --include="*.cs" = 0)services.Add*<ClassName>)Incomplete checklist โ state: Confidence: <90% โ did not verify [missing items]
(1) Code evidence (grep/read) โ (2) Test evidence โ (3) Documentation โ (4) Inference. Recommendations based on inference alone FORBIDDEN โ MUST ATTENTION upgrade to code evidence.
95-100% full trace + all services | 80-94% main paths verified | 60-79% partially traced | <60% DO NOT RECOMMEND
Format: Confidence: 85% โ Verified main usage in ServiceC, did not check ServiceA/ServiceB
Find working reference โ compare implementations โ identify differences โ verify WHY each difference exists โ recommend based on proven pattern, NEVER assumptions.
[IMPORTANT] Use
TaskCreateto break ALL work into small tasks BEFORE starting โ including tasks for each file read. This prevents context loss from long files. For simple tasks, AI MUST ATTENTION ask user whether to skip.
docs/project-reference/domain-entities-reference.md โ domain entity catalog, relationships, cross-service sync (when task involves business entities/models). (read directly when relevant; do not rely on hook-injected conversation text)> **Knowledge Graph Template** โ For each analyzed file, document: filePath, type (Entity/Command/Query/EventHandler/Controller/Consumer/Component/Store/Service), architecturalPattern, content summary, symbols, dependencies, businessContext, referenceFiles, relevanceScore (1-10), evidenceLevel (verified/inferred), frameworkAbstractions, serviceContext. Investigation fields: entryPoints, outputPoints, dataTransformations, errorScenarios. Consumer/bus fields: messageBusMessage, messageBusProducers, crossServiceIntegration. Frontend fields: componentHierarchy, stateManagementStores, dataBindingPatterns, validationStrategies.
Root Cause Debugging โ Systematic approach, never guess-and-check.
- Reproduce โ Confirm issue exists with evidence (error message, stack trace, screenshot)
- Isolate โ Narrow to specific file/function/line using binary search + graph trace
- Trace โ Follow data flow from input to failure point. Read actual code, don't infer.
- Hypothesize โ Form theory with confidence %. State what evidence supports/contradicts it
- Verify โ Test hypothesis with targeted grep/read. One variable at a time.
- Fix โ Address root cause, not symptoms. Verify fix doesn't break callers via graph
connectionsNEVER: Guess without evidence. Fix symptoms instead of cause. Skip reproduction step.
Nested Task Expansion Contract โ For workflow-step invocation, the
[Workflow] ...row is only a parent container; the child skill still creates visible phase tasks.
- Call
TaskListfirst. If a matching active parent workflow row exists, setnested=trueand recordparentTaskId; otherwise run standalone.- Create one task per declared phase before phase work. When nested, prefix subjects
[N.M] $skill-name โ phase.- When nested, link the parent with
TaskUpdate(parentTaskId, addBlockedBy: [childIds]).- Orchestrators must pre-expand a child skill's phase list and link the workflow row before invoking that child skill or sub-agent.
- Mark exactly one child
in_progressbefore work andcompletedimmediately after evidence is written.- Complete the parent only after all child tasks are completed or explicitly cancelled with reason.
Blocked until:
TaskListdone, child phases created, parent linked when nested, first child markedin_progress.
Project Reference Docs Gate โ Run after task-tracking bootstrap and before target/source file reads, grep, edits, or analysis. Project docs override generic framework assumptions.
- Identify scope: file types, domain area, and operation.
- Required docs by trigger: always
docs/project-reference/lessons.md; doc lookupdocs-index-reference.md; reviewcode-review-rules.md; backend/CQRS/APIbackend-patterns-reference.md; domain/entitydomain-entities-reference.md; frontend/UIfrontend-patterns-reference.md; styles/designscss-styling-guide.md+design-system/README.md; integration testsintegration-test-reference.md; E2Ee2e-test-reference.md; feature docs/specsfeature-docs-reference.md; architecture/new areaproject-structure-reference.md.- Read every required doc that exists; skip absent docs as not applicable. Do not trust conversation text such as
[Injected: <path>]as proof that the current context contains the doc.- Before target work, state:
Reference docs read: ... | Missing/not applicable: ....Blocked until: scope evaluated, required docs checked/read,
lessons.mdconfirmed, citation emitted.
Task Tracking & External Report Persistence โ Bootstrap this before execution; then run project-reference doc prefetch before target/source work.
- Create a small task breakdown before target file reads, grep, edits, or analysis. On context loss, inspect the current task list first.
- Mark one task
in_progressbefore work andcompletedimmediately after evidence; never batch transitions.- For plan/review work, create
plans/reports/{skill}-{YYMMDD}-{HHmm}-{slug}.mdbefore first finding.- Append findings after each file/section/decision and synthesize from the report file at the end.
- Final output cites
Full report: plans/reports/{filename}.Blocked until: task breakdown exists, report path declared for plan/review work, first finding persisted before the next finding.
Critical Thinking Mindset โ Apply critical thinking, sequential thinking. Every claim needs traced proof, confidence >80% to act. Anti-hallucination: Never present guess as fact โ cite sources for every claim, admit uncertainty freely, self-check output for errors, cross-reference independently, stay skeptical of own confidence โ certainty without evidence root of all hallucination.
Sequential Thinking Protocol โ Structured multi-step reasoning for complex/ambiguous work. Use when planning, reviewing, debugging, or refining ideas where one-shot reasoning is unsafe.
Trigger when: complex problem decomposition ยท adaptive plans needing revision ยท analysis with course correction ยท unclear/emerging scope ยท multi-step solutions ยท hypothesis-driven debugging ยท cross-cutting trade-off evaluation.
Format (explicit mode โ visible thought trail):
Thought N/M: [aspect]โ one aspect per thought, state assumptions/uncertaintyThought N/M [REVISION of Thought K]: ...โ when prior reasoning invalidated; state Original / Why revised / ImpactThought N/M [BRANCH A from Thought K]: ...โ explore alternative; converge with decision rationaleThought N/M [HYPOTHESIS]: ...then[VERIFICATION]: ...โ test before actingThought N/N [FINAL]โ only when verified, all critical aspects addressed, confidence >80%Mandatory closers: Confidence % stated ยท Assumptions listed ยท Open questions surfaced ยท Next action concrete.
Stop conditions: confidence <80% on any critical decision โ escalate via AskUserQuestion ยท โฅ3 revisions on same thought โ re-frame the problem ยท branch count >3 โ split into sub-task.
Implicit mode: apply methodology internally without visible markers when adding markers would clutter the response (routine work where reasoning aids accuracy).
Deep-dive: see
/sequential-thinkingskill (.claude/skills/sequential-thinking/SKILL.md) for worked examples (api-design, debug, architecture), advanced techniques (spiral refinement, hypothesis testing, convergence), and meta-strategies (uncertainty handling, revision cascades).
Understand Code First โ HARD-GATE: Do NOT write, plan, or fix until you READ existing code.
- Search 3+ similar patterns (
grep/glob) โ citefile:lineevidence- Read existing files in target area โ understand structure, base classes, conventions
- Run
python .claude/scripts/code_graph trace <file> --direction both --jsonwhen.code-graph/graph.dbexists- Map dependencies via
connectionsorcallers_ofโ know what depends on your target- Write investigation to
.ai/workspace/analysis/for non-trivial tasks (3+ files)- Re-read analysis file before implementing โ never work from memory alone
- NEVER invent new patterns when existing ones work โ match exactly or document deviation
BLOCKED until:
- [ ]Read target files- [ ]Grep 3+ patterns- [ ]Graph trace (if graph.db exists)- [ ]Assumptions verified with evidence
Graph-Assisted Investigation โ MANDATORY when
.code-graph/graph.dbexists.HARD-GATE: MUST ATTENTION run at least ONE graph command on key files before concluding any investigation.
Pattern: Grep finds files โ
trace --direction bothreveals full system flow โ Grep verifies details
Task Minimum Graph Action Investigation/Scout trace --direction bothon 2-3 entry filesFix/Debug callers_ofon buggy function +tests_forFeature/Enhancement connectionson files to be modifiedCode Review tests_foron changed functionsBlast Radius trace --direction downstreamCLI:
python .claude/scripts/code_graph {command} --json. Use--node-mode filefirst (10-30x less noise), then--node-mode functionfor detail.
Cross-Service Check โ Microservices/event-driven: MANDATORY before concluding investigation, plan, spec, or feature doc. Missing downstream consumer = silent regression.
Boundary Grep terms Event producers Publish,Dispatch,Send,emit,EventBus,outbox,IntegrationEventEvent consumers Consumer,EventHandler,Subscribe,@EventListener,inboxSagas/orchestration Saga,ProcessManager,Choreography,Workflow,OrchestratorSync service calls HTTP/gRPC calls to/from other services Shared contracts OpenAPI spec, proto, shared DTO โ flag breaking changes Data ownership Other service reads/writes same table/collection โ Shared-DB anti-pattern Per touchpoint: owner service ยท message name ยท consumers ยท risk (NONE / ADDITIVE / BREAKING).
BLOCKED until: Producers scanned ยท Consumers scanned ยท Sagas checked ยท Contracts reviewed ยท Breaking-change risk flagged
Fix-Layer Accountability โ NEVER fix at the crash site. Trace the full flow, fix at the owning layer.
AI default behavior: see error at Place A โ fix Place A. This is WRONG. The crash site is a SYMPTOM, not the cause.
MANDATORY before ANY fix:
- Trace full data flow โ Map the complete path from data origin to crash site across ALL layers (storage โ backend โ API โ frontend โ UI). Identify where the bad state ENTERS, not where it CRASHES.
- Identify the invariant owner โ Which layer's contract guarantees this value is valid? That layer is responsible. Fix at the LOWEST layer that owns the invariant โ not the highest layer that consumes it.
- One fix, maximum protection โ Ask: "If I fix here, does it protect ALL downstream consumers with ONE change?" If fix requires touching 3+ files with defensive checks, you are at the wrong layer โ go lower.
- Verify no bypass paths โ Confirm all data flows through the fix point. Check for: direct construction skipping factories, clone/spread without re-validation, raw data not wrapped in domain models, mutations outside the model layer.
BLOCKED until:
- [ ]Full data flow traced (origin โ crash)- [ ]Invariant owner identified withfile:lineevidence- [ ]All access sites audited (grep count)- [ ]Fix layer justified (lowest layer that protects most consumers)Anti-patterns (REJECT these):
- "Fix it where it crashes" โ Crash site โ cause site. Trace upstream.
- "Add defensive checks at every consumer" โ Scattered defense = wrong layer. One authoritative fix > many scattered guards.
- "Both fix is safer" โ Pick ONE authoritative layer. Redundant checks across layers send mixed signals about who owns the invariant.
AI Mistake Prevention โ Failure modes to avoid on every task:
Check downstream references before deleting. Deleting components causes documentation and code staleness cascades. Map all referencing files before removal. Verify AI-generated content against actual code. AI hallucinates APIs, class names, and method signatures. Always grep to confirm existence before documenting or referencing. Trace full dependency chain after edits. Changing a definition misses downstream variables and consumers derived from it. Always trace the full chain. Trace ALL code paths when verifying correctness. Confirming code exists is not confirming it executes. Always trace early exits, error branches, and conditional skips โ not just happy path. When debugging, ask "whose responsibility?" before fixing. Trace whether bug is in caller (wrong data) or callee (wrong handling). Fix at responsible layer โ never patch symptom site. Assume existing values are intentional โ ask WHY before changing. Before changing any constant, limit, flag, or pattern: read comments, check git blame, examine surrounding code. Verify ALL affected outputs, not just the first. Changes touching multiple stacks require verifying EVERY output. One green check is not all green checks. Holistic-first debugging โ resist nearest-attention trap. When investigating any failure, list EVERY precondition first (config, env vars, DB names, endpoints, DI registrations, data preconditions), then verify each against evidence before forming any code-layer hypothesis. Surgical changes โ apply the diff test. Bug fix: every changed line must trace directly to the bug. Don't restyle or improve adjacent code. Enhancement task: implement improvements AND announce them explicitly. Surface ambiguity before coding โ don't pick silently. If request has multiple interpretations, present each with effort estimate and ask. Never assume all-records, file-based, or more complex path.
file:line evidence for every claim. Confidence >80% to act, <60% = do NOT recommend.
IMPORTANT MUST ATTENTION trace full data flow and fix at the owning layer, not the crash site. Audit all access sites before adding ?..
MUST ATTENTION apply critical thinking โ every claim needs traced proof, confidence >80% to act. Anti-hallucination: never present guess as fact.
MUST ATTENTION apply sequential-thinking โ multi-step Thought N/M, REVISION/BRANCH/HYPOTHESIS markers, confidence % closer; see /sequential-thinking skill.
MUST ATTENTION apply AI mistake prevention โ holistic-first debugging, fix at responsible layer, surface ambiguity before coding, re-read files after compaction.
plans/reports/ incrementally and synthesize from disk.Reference docs read: ....lessons.md; project conventions override generic defaults.[N.M] $skill-name โ phase prefixes and one-in_progress discipline.TaskCreate BEFORE startingfile:line evidence for every claim (confidence >80% to act, <60% DO NOT recommend).ai/workspace/analysis/[feature]-investigation.md; re-read ENTIRE file before presentingAnti-Rationalization:
| Evasion | Rebuttal |
|---|---|
| "Simple investigation, skip graph" | Graph reveals callers + bus consumers grep misses. Run it anyway. |
| "Already grepped, enough evidence" | Show file:line proof. No citation = no evidence. |
| "Quick task, skip TaskCreate" | Still need tracking. Create tasks, mark done immediately. |
| "Recommendation is obvious, skip validation chain" | Risk matrix applies regardless of confidence. Complete ALL steps. |
| "Deep scope wastes time for this" | Classify first. If quick, fine โ but DECLARE scope before skipping steps. |
[TASK-PLANNING] Before acting, analyze task scope and systematically break it into small todo tasks and sub-tasks using TaskCreate.