{"id":"a9c31fe3-091e-4161-b963-eeea73f1741b","shortId":"zWYpZq","kind":"skill","title":"tracer","tagline":"Use when tracing execution paths, mapping dependencies, understanding unfamiliar code, following data flow, investigating end-to-end behavior, debugging call chains, or deciding which files to read next.","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-05-18T19:07:40.255Z","embedding":null,"createdAt":"2026-04-23T13:04:02.495Z","updatedAt":"2026-05-18T19:07:40.255Z","lastSeenAt":"2026-05-18T19:07:40.255Z","tsv":"'/api/auth/login':99 '/api/users':508,549 '1':68,516 '14':518 '2':104,524 '28':535 '3':119,533 '4':148,541 '42':526 '5':165 '6':212 '7':240 'action':89 'add':160,430 'analysi':324 'answer':145,236,263,287,485 'api':79,275 'ask':302 'auth':93 'b':174,334 'backtrack':219 'base':297 'behavior':20,317 'best':305 'boundari':279,442 'brainstorm':568 'branch':122,141,217,224,229,409 'breadth':412 'breadth-first':411 'bug':455 'build':36,61,415 'c':175 'call':22,83,116,159,201,276,313,510,514 'chain':23,151 'chang':574 'checkpoint':459 'choos':120,139,408 'code':11,33,571 'codebas':579 'coher':260 'combin':610 'come':210 'complement':555 'complex':339 'compon':354 'condit':490 'config':85 'connect':59,128,255 'core':585 'cover':290 'creat':527 'createus':519,550 'critic':231,288,359 'cross':280,441 'd':176 'data':13,204,326,329,335,356,515,607 'db':272 'db.query':537 'debug':21,337,558 'decid':25,213 'deeper':214,234 'deliber':410 'depend':8,45,118,318,320,350,605 'describ':251 'descript':366 'design':573 'detail':364 'didn':493 'differ':223 'earlier':227 'edg':203 'email':523,531 'end':17,19 'end-to-end':16 'endpoint':80 'enough':245 'entri':55,71,102,107 'everi':114,375,465 'everyth':136,405 'exampl':502 'execut':5,41,307,343,603 'exist':570 'explor':34,414 'extern':274 'featur':316 'file':27,50,86,178,189,371,376,382,426,466,472,479,512 'file/function':155 'first':413 'flow':14,254,315,576 'flow-research':575 'follow':12,58,130,149,221 'format':567 'function':82,278,513 'function/class':192 'get':330 'go':66,233 'goe':207 'guardrail':367 'guess':401 'happen':309,505 'happi':347 'hypothesi':566 'identifi':69 'impact':323 'imports/calls':397 'includ':177 'incomplet':438 'increment':38 'insert':536,540,544,554 'intern':285,448 'investig':15,340,580 'keep':232 'key':353 'know':373 'known':54 'leaf':270,542 'librari':284,447 'like':143 'line':181,482 'locat':77 'm':392 'maintain':169 'map':7,44,63,163,243,434,484 'mode':292,296,303,365,601,611 'must':377 'name':193,522,530 'narrat':261 'never':368 'next':30,154 'node':188,228,257,511,596 'note':113,156 'number':182,483 'one':197 'origin':265,487 'outgo':115,127,202 'outward':60 'over-trac':495 'overal':253 'parti':283,446 'path':6,42,168,179,190,289,348,476,480,547 'phase':564 'pick':123,294 'pipelin':336 'point':56,72,103,108,383,473 'post':98,507,548 'postgresql':543 'present':461 'previous':381,471 'principl':586 'provid':559 'queri':273 'question':147,235,266,286,300,304,488 'random':48 'rare':450 'rather':46 're':400 'reach':271 'read':29,49,105,152,369,393,424,467 'record':166,185,421,477,593 'refactor':325 'refer':581 'references/trace-modes.md':362,602 'references/tracing-strategy.md':584 'relev':126 'repeat':164 'req.body':521 'request':314 'research':577 'respect':492 'run':171 'say':390 'see':361 'select':293 'sentenc':198 'seven':588 'seven-step':587 'skill' 'skill-tracer' 'skip':420 'source-cofin' 'specif':91 'sql':539,553 'src/repos/user.ts':534 'src/routes/users.ts':517 'src/services/user.ts':525 'start':51,76,341 'stdlib':277 'step':589 'stop':237,269,489,599 'strategi':583 'structur':360,578 'synthes':239,241 'system':94,248,563 'systemat':32,557 'systematic-debug':556 'third':282,445 'third-parti':281,444 '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':4,40,135,172,250,291,344,351,357,404,436,452,463,497,501,503,582,600,604,606,608 'tracer':1,31 'transform':205 'tri':133 'under-trac':499 'understand':9,37,109,417,561,569 'understood':218 'unfamiliar':10 'unless':453 'unnecessarili':443 'use':2 'user':88,546 'userdto':532,538 'userrepo.insert':529,552 'userservice.create':520,551 'vagu':97 'valid':458,528 'verifi':464 'vs':215 'wider':216 'without':372 'workflow':67,590 'worth':451 'x':311,322,396","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-05-18T19:07:40.255Z"}],"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-27T19:07:26Z","description":"Context-Driven Development toolkit for AI agents — spec-first planning, TDD workflow, and Beads integration.","skill_md_sha":"0b544f4a6fda9c220eef2432e66f7a363de37ab8","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":"Use when tracing execution paths, mapping dependencies, understanding unfamiliar code, following data flow, investigating end-to-end behavior, debugging call chains, or deciding which files to read next."},"skills_sh_url":"https://skills.sh/cofin/flow/tracer"},"updatedAt":"2026-05-18T19:07:40.255Z"}}