{"id":"a9c31fe3-091e-4161-b963-eeea73f1741b","shortId":"zWYpZq","kind":"skill","title":"tracer","tagline":"Auto-activate when tracing execution paths, mapping dependencies, understanding unfamiliar code, following data flow through a system, investigating how a feature works end-to-end, or when debugging requires understanding call chains. Produces an execution map showing the path fr","description":"# Tracer\n\nSystematic code exploration that builds understanding incrementally by tracing execution paths and mapping dependencies, rather than randomly reading files. Start at a known entry point and follow connections outward, building a map as you go.\n\n<workflow>\n\n## Workflow\n\n### 1. Identify the Entry Point\n\nWhat's the starting location? An API endpoint, a function call, a config file, a user action. Be specific — \"the auth system\" is too vague; `POST /api/auth/login` is an entry point.\n\n### 2. Read the Entry Point\n\nUnderstand what it does. Note every outgoing call or dependency.\n\n### 3. Choose a Branch\n\nPick the most relevant outgoing connection to follow. Don't try to trace everything at once — choose the branch most likely to answer the question.\n\n### 4. Follow the Chain\n\nRead the next file/function. Note what it calls. Add to the map. Repeat.\n\n### 5. Record the Path\n\nMaintain a running trace: `A → B → C → D`. Include file paths and line numbers.\n\n**What to record at each node:**\n\n- File path and function/class name\n- What it does (one sentence)\n- What it calls (outgoing edges)\n- Data transformations (what goes in, what comes out)\n\n### 6. Decide: Deeper vs Wider\n\n- **Branch understood** → backtrack and follow a different branch from an earlier node\n- **Branch is critical** → keep going deeper\n- **Question answered** → stop and synthesize\n\n### 7. Synthesize the Map\n\nWhen enough of the system is traced, describe the overall flow. Connect the nodes into a coherent narrative that answers the original question.\n\n**When to stop:**\n\n- Leaf reached (DB query, external API call, stdlib function)\n- Boundary crossed (third-party library internals)\n- Question answered\n- Critical path covered\n\n</workflow>\n\n### Trace Mode Selection\n\nPick the mode based on the question being asked:\n\n| Mode | Question | Best for |\n|------|----------|----------|\n| **Execution** | \"What happens when X is called?\" | Request flows, feature behavior |\n| **Dependency** | \"What depends on X?\" | Impact analysis, refactoring |\n| **Data** | \"How does data get from A to B?\" | Data pipeline debugging |\n\nFor complex investigations, start with execution trace for the happy path, then dependency trace on key components, then data trace on critical structures. See `references/trace-modes.md` for detailed mode descriptions.\n\n<guardrails>\n\n### Guardrails\n\n- **Never read a file without knowing WHY.** Every file must be because the previous file pointed you there. If you can't say \"I'm reading this because X imports/calls it,\" you're guessing.\n- **Don't trace everything at once.** Choose branches deliberately. Breadth-first exploration builds no understanding.\n- **Don't skip recording.** If you read a file and don't add it to the map, the trace is incomplete.\n- **Don't cross boundaries unnecessarily.** Third-party library internals are rarely worth tracing unless the bug is there.\n\n</guardrails>\n\n<validation>\n\n### Validation Checkpoint\n\nBefore presenting the trace, verify:\n\n- [ ] Every file read was because a previous file pointed to it\n- [ ] Path recorded with file paths and line numbers\n- [ ] Map answers the original question\n- [ ] Stop conditions were respected (didn't over-trace or under-trace)\n\n</validation>\n\n<example>\n\n## Example\n\n**Trace:** \"What happens when `POST /api/users` is called?\"\n\n| Node | File | Function | Calls | Data |\n|------|------|----------|-------|------|\n| 1 | `src/routes/users.ts:14` | `createUser` | `UserService.create()` | `req.body → {name, email}` |\n| 2 | `src/services/user.ts:42` | `create()` | `validate()`, `UserRepo.insert()` | `{name, email} → UserDTO` |\n| 3 | `src/repos/user.ts:28` | `insert()` | `db.query()` | `UserDTO → SQL INSERT` |\n| 4 | *(leaf)* | PostgreSQL | — | `INSERT INTO users...` |\n\n**Path:** `POST /api/users` → `createUser` → `UserService.create` → `UserRepo.insert` → SQL INSERT.\n\n</example>\n\n## Complements\n\n- **systematic-debugging** — provides the \"understand the system\" phase before hypothesis formation\n- **brainstorming** — understanding existing code before designing changes\n- **flow-research** — structured codebase investigation\n\n## References\n\n- **[Tracing Strategy](references/tracing-strategy.md)** — Core principle, seven-step workflow, what to record at each node, when to stop\n- **[Trace Modes](references/trace-modes.md)** — Execution trace, dependency trace, data trace, and combining modes","tags":["tracer","flow","cofin","agent-skills","ai-agents","beads","claude-code","codex","cursor","developer-tools","gemini-cli","opencode"],"capabilities":["skill","source-cofin","skill-tracer","topic-agent-skills","topic-ai-agents","topic-beads","topic-claude-code","topic-codex","topic-cursor","topic-developer-tools","topic-gemini-cli","topic-opencode","topic-plugin","topic-slash-commands","topic-spec-driven-development"],"categories":["flow"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cofin/flow/tracer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cofin/flow","source_repo":"https://github.com/cofin/flow","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (4,381 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T07:03:20.817Z","embedding":null,"createdAt":"2026-04-23T13:04:02.495Z","updatedAt":"2026-04-24T07:03:20.817Z","lastSeenAt":"2026-04-24T07:03:20.817Z","tsv":"'/api/auth/login':112 '/api/users':521,562 '1':81,529 '14':531 '2':117,537 '28':548 '3':132,546 '4':161,554 '42':539 '5':178 '6':225 '7':253 'action':102 'activ':4 'add':173,443 'analysi':337 'answer':158,249,276,300,498 'api':92,288 'ask':315 'auth':106 'auto':3 'auto-activ':2 'b':187,347 'backtrack':232 'base':310 'behavior':330 'best':318 'boundari':292,455 'brainstorm':581 'branch':135,154,230,237,242,422 'breadth':425 'breadth-first':424 'bug':468 'build':49,74,428 'c':188 'call':34,96,129,172,214,289,326,523,527 'chain':35,164 'chang':587 'checkpoint':472 'choos':133,152,421 'code':13,46,584 'codebas':592 'coher':273 'combin':623 'come':223 'complement':568 'complex':352 'compon':367 'condit':503 'config':98 'connect':72,141,268 'core':598 'cover':303 'creat':540 'createus':532,563 'critic':244,301,372 'cross':293,454 'd':189 'data':15,217,339,342,348,369,528,620 'db':285 'db.query':550 'debug':31,350,571 'decid':226 'deeper':227,247 'deliber':423 'depend':10,58,131,331,333,363,618 'describ':264 'descript':379 'design':586 'detail':377 'didn':506 'differ':236 'earlier':240 'edg':216 'email':536,544 'end':26,28 'end-to-end':25 'endpoint':93 'enough':258 'entri':68,84,115,120 'everi':127,388,478 'everyth':149,418 'exampl':515 'execut':7,38,54,320,356,616 'exist':583 'explor':47,427 'extern':287 'featur':23,329 'file':63,99,191,202,384,389,395,439,479,485,492,525 'file/function':168 'first':426 'flow':16,267,328,589 'flow-research':588 'follow':14,71,143,162,234 'format':580 'fr':43 'function':95,291,526 'function/class':205 'get':343 'go':79,246 'goe':220 'guardrail':380 'guess':414 'happen':322,518 'happi':360 'hypothesi':579 'identifi':82 'impact':336 'imports/calls':410 'includ':190 'incomplet':451 'increment':51 'insert':549,553,557,567 'intern':298,461 'investig':20,353,593 'keep':245 'key':366 'know':386 'known':67 'leaf':283,555 'librari':297,460 'like':156 'line':194,495 'locat':90 'm':405 'maintain':182 'map':9,39,57,76,176,256,447,497 'mode':305,309,316,378,614,624 'must':390 'name':206,535,543 'narrat':274 'never':381 'next':167 'node':201,241,270,524,609 'note':126,169 'number':195,496 'one':210 'origin':278,500 'outgo':128,140,215 'outward':73 'over-trac':508 'overal':266 'parti':296,459 'path':8,42,55,181,192,203,302,361,489,493,560 'phase':577 'pick':136,307 'pipelin':349 'point':69,85,116,121,396,486 'post':111,520,561 'postgresql':556 'present':474 'previous':394,484 'principl':599 'produc':36 'provid':572 'queri':286 'question':160,248,279,299,313,317,501 'random':61 'rare':463 'rather':59 're':413 'reach':284 'read':62,118,165,382,406,437,480 'record':179,198,434,490,606 'refactor':338 'refer':594 'references/trace-modes.md':375,615 'references/tracing-strategy.md':597 'relev':139 'repeat':177 'req.body':534 'request':327 'requir':32 'research':590 'respect':505 'run':184 'say':403 'see':374 'select':306 'sentenc':211 'seven':601 'seven-step':600 'show':40 'skill' 'skill-tracer' 'skip':433 'source-cofin' 'specif':104 'sql':552,566 'src/repos/user.ts':547 'src/routes/users.ts':530 'src/services/user.ts':538 'start':64,89,354 'stdlib':290 'step':602 'stop':250,282,502,612 'strategi':596 'structur':373,591 'synthes':252,254 'system':19,107,261,576 'systemat':45,570 'systematic-debug':569 'third':295,458 'third-parti':294,457 'topic-agent-skills' 'topic-ai-agents' 'topic-beads' 'topic-claude-code' 'topic-codex' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'topic-opencode' 'topic-plugin' 'topic-slash-commands' 'topic-spec-driven-development' 'trace':6,53,148,185,263,304,357,364,370,417,449,465,476,510,514,516,595,613,617,619,621 'tracer':1,44 'transform':218 'tri':146 'under-trac':512 'understand':11,33,50,122,430,574,582 'understood':231 'unfamiliar':12 'unless':466 'unnecessarili':456 'user':101,559 'userdto':545,551 'userrepo.insert':542,565 'userservice.create':533,564 'vagu':110 'valid':471,541 'verifi':477 'vs':228 'wider':229 'without':385 'work':24 'workflow':80,603 'worth':464 'x':324,335,409","prices":[{"id":"fc93bc85-c56a-458f-a9fe-b267d4a140b8","listingId":"a9c31fe3-091e-4161-b963-eeea73f1741b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cofin","category":"flow","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:02.495Z"}],"sources":[{"listingId":"a9c31fe3-091e-4161-b963-eeea73f1741b","source":"github","sourceId":"cofin/flow/tracer","sourceUrl":"https://github.com/cofin/flow/tree/main/skills/tracer","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:02.495Z","lastSeenAt":"2026-04-24T07:03:20.817Z"}],"details":{"listingId":"a9c31fe3-091e-4161-b963-eeea73f1741b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cofin","slug":"tracer","github":{"repo":"cofin/flow","stars":11,"topics":["agent-skills","ai-agents","beads","claude-code","codex","context-driven-development","cursor","developer-tools","gemini-cli","opencode","plugin","slash-commands","spec-driven-development","subagents","tdd","workflow"],"license":"apache-2.0","html_url":"https://github.com/cofin/flow","pushed_at":"2026-04-19T23:22:27Z","description":"Context-Driven Development toolkit for AI agents — spec-first planning, TDD workflow, and Beads integration.","skill_md_sha":"93b77f6606f994c59807b3059d1045142a0c3971","skill_md_path":"skills/tracer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cofin/flow/tree/main/skills/tracer"},"layout":"multi","source":"github","category":"flow","frontmatter":{"name":"tracer","description":"Auto-activate when tracing execution paths, mapping dependencies, understanding unfamiliar code, following data flow through a system, investigating how a feature works end-to-end, or when debugging requires understanding call chains. Produces an execution map showing the path from entry point to result — with file paths, function names, data transformations, and dependency relationships at each node. Use when: need to understand how code flows from entry point to result, mapping what depends on what, exploring unfamiliar codebases systematically, or when reading random files isn't building understanding. Not for reading random files hoping to build understanding — every file opened must be because the previous file pointed you there."},"skills_sh_url":"https://skills.sh/cofin/flow/tracer"},"updatedAt":"2026-04-24T07:03:20.817Z"}}