--- name: code-trace description: | Interactive code execution path tracer that explains how code flows from entry point to output. Uses step-by-step navigation with AskUserQuestion to explore conditional branches and function calls. Use when: - User asks "How does X work in this codebase?" - User wants to understand HTTP request/response flow - User asks about middleware execution order - User wants to trace a function call chain - User asks "What happens when..." questions - User wants to learn how code paths connect Keywords: trace, flow, execution, path, call chain, middleware, request handling, what happens, how does, step through, follow the code --- ## How Code Tracing Works This skill traces code execution paths interactively, letting you navigate through the codebase like a debugger stepping through code - but with rich explanations at each step. ### Principle 1: Application Boundary Trace ONLY application code. External dependencies (node_modules, vendor/) receive: - A summary of what they do - Link to official documentation - NOT deep-traced into their internals **Why**: External libraries can be 100K+ lines. Tracing into them wastes context and obscures the actual application logic. The goal is understanding YOUR code, not library internals. ### Principle 2: Interactive Navigation Every conditional branch becomes a user choice: | Code Pattern | Presentation | |--------------|--------------| | `if/else` | "Path A: condition true" vs "Path B: condition false" | | `switch` | One choice per case | | `try/catch` | "Success path" vs "Error path" | | `async/await` | Option to trace into called functions | **Why**: Linear traces miss important paths. Interactive navigation lets users explore exactly what they're interested in. ### Principle 3: Progressive Explanation Each step includes: 1. **Location**: File + line range + function name 2. **Code**: Full source (no abbreviation) 3. **What**: Brief summary of what the code does 4. **Why**: Why this step exists in the flow 5. **Next**: What happens next (or choices if branching) Use thinking markers (🤔🎯⚡📊💡🔐) for clarity. ### Principle 4: State Persistence Trace state is stored in Serena Memory to enable: - Resuming interrupted traces - Backtracking to previous decision points - Saving completed traces for future reference ## What would you like to trace? 1. **Trace a request flow** - Follow HTTP request from receipt to response 2. **Trace a function call** - Follow a specific function through the codebase 3. **Resume previous trace** - Continue from where you left off Please provide additional context: - For request tracing: Which endpoint? (e.g., "POST /api/users") - For function tracing: Which function? (e.g., "validateUser" or "src/utils/auth.ts:checkToken") **Wait for response before proceeding.** | Response | Workflow | |----------|----------| | 1, "request", "HTTP", "route", "API", "endpoint", "POST", "GET" | `workflows/trace-request.md` | | 2, "function", "call", specific function name | `workflows/trace-function.md` | | 3, "resume", "continue", "previous" | Read Serena memory for `trace_session_*` | ## Before Starting Any Workflow 1. **Detect Framework**: Run `scripts/detect-framework.sh` to identify: - Express, Next.js (App/Pages), Fastify, Hono, NestJS, Koa, or generic 2. **Load Framework Patterns**: Read `references/framework-patterns.md` section for detected framework 3. **Prepare Serena**: Ensure Serena MCP is available for: - `find_symbol()` - Locate functions/handlers - `find_referencing_symbols()` - Find callers - `get_symbols_overview()` - Map module structure - `write_memory()` / `read_memory()` - State persistence **After determining intent and framework, read the appropriate workflow and follow it.** ## References All in `references/`: | File | Content | |------|---------| | framework-patterns.md | Entry point detection and request flow for Express, Next.js, Fastify, etc. | | control-flow-types.md | How to present if/switch/try/loops as interactive choices | | explanation-style.md | Thinking markers, step format, summary format | ## Workflows All in `workflows/`: | Workflow | Purpose | |----------|---------| | trace-request.md | Trace HTTP request from entry to response | | trace-function.md | Trace a specific function's call chain | ## Scripts | Script | Purpose | |--------|---------| | detect-framework.sh | Auto-detect project framework from package.json | Usage: ```bash ./scripts/detect-framework.sh /path/to/project # Output: express | nextjs-app | nextjs-pages | fastify | hono | nestjs | koa | generic ``` A successful code trace: - [ ] Entry point correctly identified and explained - [ ] Framework detected and appropriate patterns applied - [ ] At least one branch point presented as interactive choice - [ ] External dependencies summarized (not deep-traced) - [ ] User navigated to terminal point OR chose to stop - [ ] Path history shown in ASCII flowchart format - [ ] Key insights collected and displayed - [ ] Trace state available for resume (if user chose to save) ## Boundaries **Will:** - Trace application code with full source display - Explain each step with thinking markers - Present conditional branches as interactive choices - Summarize external dependencies at the boundary - Persist trace state for resume capability **Will Not:** - Deep-trace into node_modules or external libraries - Execute or run the code (read-only analysis) - Modify any source files - Make assumptions about runtime values (present all branches)