tracerkit 1.4.1 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,15 +8,15 @@
8
8
  [![npm version](https://img.shields.io/npm/v/tracerkit)](https://www.npmjs.com/package/tracerkit)
9
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
10
 
11
- Replace ad-hoc AI prompts with a repeatable three-step spec process from idea to verified, archived code.
11
+ Replace ad-hoc AI prompts with a repeatable three-step spec process: from idea to verified, archived code.
12
12
 
13
- **Zero runtime dependencies** pure Markdown skills, no build step.
13
+ **Zero runtime dependencies.** Pure Markdown skills, no build step.
14
14
 
15
15
  </div>
16
16
 
17
17
  ## Why TracerKit?
18
18
 
19
- AI coding without specs means vague prompts and lost context between sessions. Most planning tools produce horizontal task lists nothing works until everything is done.
19
+ AI coding without specs means vague prompts and lost context between sessions. Most planning tools produce horizontal task lists. Nothing works until everything is done.
20
20
 
21
21
  TracerKit uses **tracer-bullet vertical slices** instead: each phase cuts through every layer (schema → service → API → UI → tests), so every phase is demoable on its own. Integration problems surface early, context stays focused, and AI assistants get small, well-scoped phases instead of sprawling layers.
22
22
 
@@ -30,15 +30,25 @@ The term comes from [The Pragmatic Programmer](https://pragprog.com/titles/tpp20
30
30
  npx tracerkit init
31
31
  ```
32
32
 
33
- Skills are installed globally to `~/.claude/skills/` available in every project, no per-project setup needed.
33
+ Skills are installed globally to `~/.claude/skills/`, available in every project. No per-project setup needed.
34
34
 
35
35
  ### 2. Use the workflow
36
36
 
37
- ```bash
38
- /tk:prd add dark mode support # define the feature
39
- /tk:plan dark-mode-support # break into vertical slices
40
- /tk:verify dark-mode-support # verify and archive
41
37
  ```
38
+ You: /tk:prd add dark mode support
39
+ AI: ✓ Written .tracerkit/prds/dark-mode-support.md
40
+
41
+ You: /tk:plan dark-mode-support
42
+ AI: ✓ Phase 1 — CSS variables + ThemeProvider
43
+ ✓ Phase 2 — Toggle component + localStorage
44
+ ✓ Written .tracerkit/plans/dark-mode-support.md
45
+
46
+ You: /tk:verify dark-mode-support
47
+ AI: ✓ All done-when conditions met
48
+ ✅ PASS — archived to .tracerkit/archives/dark-mode-support/
49
+ ```
50
+
51
+ See [Examples](docs/examples.md) for full walkthroughs.
42
52
 
43
53
  <details>
44
54
  <summary>Per-project usage</summary>
@@ -59,224 +69,41 @@ npx tracerkit uninstall . # remove project-scoped skills
59
69
 
60
70
  The three-step workflow that takes a feature from idea to verified archive.
61
71
 
62
- #### `/tk:prd <idea>` Write a PRD
72
+ #### `/tk:prd <idea>`: Write a PRD
63
73
 
64
74
  Interactive interview to define a feature. Explores the codebase, asks scoping questions one at a time, designs deep modules, and writes a structured PRD.
65
75
 
66
76
  **Output:** `.tracerkit/prds/<slug>.md`
67
77
 
68
- #### `/tk:plan <slug>` Create an implementation plan
78
+ #### `/tk:plan <slug>`: Create an implementation plan
69
79
 
70
- Reads a PRD and breaks it into phased **tracer-bullet vertical slices** each phase is a thin but complete path through every layer (schema, service, API, UI, tests), demoable on its own.
80
+ Reads a PRD and breaks it into phased **tracer-bullet vertical slices**. Each phase is a thin but complete path through every layer (schema, service, API, UI, tests), demoable on its own.
71
81
 
72
82
  **Output:** `.tracerkit/plans/<slug>.md`
73
83
 
74
- #### `/tk:verify <slug>` Verify and archive
84
+ #### `/tk:verify <slug>`: Verify and archive
75
85
 
76
- Read-only review that compares the codebase against the plan's done-when conditions. Runs tests, checks user stories, and stamps a **PASS** or **NEEDS_WORK** verdict. On PASS, automatically archives the PRD and plan to `.tracerkit/archives/<slug>/`.
86
+ Read-only review that compares the codebase against the plan's done-when conditions. Runs tests, checks user stories, and stamps a **✅ PASS** or **🚧 NEEDS_WORK** verdict. On PASS, automatically archives the PRD and plan to `.tracerkit/archives/<slug>/`.
77
87
 
78
- **Output:** Verdict block in `.tracerkit/plans/<slug>.md` on PASS: `.tracerkit/archives/<slug>/prd.md` + `.tracerkit/archives/<slug>/plan.md`
88
+ **Output:** Verdict block in `.tracerkit/plans/<slug>.md`. On PASS: `.tracerkit/archives/<slug>/prd.md` + `.tracerkit/archives/<slug>/plan.md`
79
89
 
80
90
  ### Helper skills
81
91
 
82
- Useful but optional this category will grow over time.
83
-
84
- #### `/tk:status` — Workflow dashboard
85
-
86
- Scans `.tracerkit/prds/` and prints a table of all features grouped by status (`in_progress`, `created`, `done`), with age, latest verdict, and blocker/suggestion counts. Read-only — no files are modified.
87
-
88
- ## Examples
89
-
90
- <details>
91
- <summary>New feature from scratch</summary>
92
-
93
- ```
94
- You: /tk:prd add dark mode support
95
- AI: Starting PRD interview...
96
- ? What problem does this solve for users?
97
- ? Should it detect system preference or manual toggle only?
98
- ? Which components need theming?
99
- ...
100
- ✓ Written .tracerkit/prds/dark-mode-support.md
101
-
102
- You: /tk:plan dark-mode-support
103
- AI: Reading PRD...
104
- ✓ Phase 1 — CSS variables + ThemeProvider (schema → context → tests)
105
- ✓ Phase 2 — Toggle component + localStorage (UI → persistence → tests)
106
- ✓ Phase 3 — System preference detection (media query → sync → tests)
107
- Written .tracerkit/plans/dark-mode-support.md
108
-
109
- You: # implement each phase with Claude...
110
-
111
- You: /tk:verify dark-mode-support
112
- AI: Verifying against plan...
113
- ✓ All done-when conditions met
114
- ✓ Tests passing
115
- PASS — archived to .tracerkit/archives/dark-mode-support/
116
- ```
117
-
118
- </details>
92
+ Useful but optional. This category will grow over time.
119
93
 
120
- <details>
121
- <summary>Iterating on an accepted PRD</summary>
94
+ #### `/tk:status`: Workflow dashboard
122
95
 
123
- ```
124
- You: /tk:prd update dark mode to detect system preference
125
- AI: Found existing .tracerkit/prds/dark-mode-support.md
126
- ? Start fresh or revise the existing PRD?
127
- ...
128
- ✓ Updated .tracerkit/prds/dark-mode-support.md
96
+ Scans `.tracerkit/prds/` and prints a table of all features grouped by status (`in_progress`, `created`, `done`), with age, latest verdict, and blocker/suggestion counts. Read-only. No files are modified.
129
97
 
130
- You: /tk:plan dark-mode-support
131
- AI: Reading updated PRD...
132
- ✓ Regenerated .tracerkit/plans/dark-mode-support.md with new scope
133
- ```
134
-
135
- </details>
136
-
137
- <details>
138
- <summary>Verify → fix → re-verify loop</summary>
98
+ ## Docs
139
99
 
140
- ```
141
- You: /tk:verify dark-mode-support
142
- AI: Verifying against plan...
143
- Missing toggle persistence in localStorage
144
- 2 failing tests in ThemeProvider.test.ts
145
- NEEDS_WORK 2 blockers found
146
-
147
- You: # fix the blockers...
148
-
149
- You: /tk:verify dark-mode-support
150
- AI: Verifying against plan...
151
- ✓ All done-when conditions met
152
- ✓ Tests passing
153
- PASS — archived to .tracerkit/archives/dark-mode-support/
154
- ```
155
-
156
- </details>
157
-
158
- <details>
159
- <summary>Check workflow status</summary>
160
-
161
- ```
162
- You: /tk:status
163
- AI: Feature Status Dashboard
164
- ┌──────────────────────┬─────────────┬─────┐
165
- │ Feature │ Status │ Age │
166
- ├──────────────────────┼─────────────┼─────┤
167
- │ dark-mode-support │ in_progress │ 3d │
168
- │ api-rate-limiting │ created │ 1d │
169
- │ user-avatars │ done │ 7d │
170
- └──────────────────────┴─────────────┴─────┘
171
- ```
172
-
173
- </details>
174
-
175
- ## CLI Reference
176
-
177
- | Command | Description |
178
- | -------------------------- | ---------------------------------------------- |
179
- | `tracerkit init` | Install skills to `~/.claude/skills/` |
180
- | `tracerkit init <path>` | Install skills to a specific project directory |
181
- | `tracerkit update` | Refresh to latest version, skip modified files |
182
- | `tracerkit update --force` | Replace modified files with latest versions |
183
- | `tracerkit uninstall` | Remove TracerKit skills, keep user artifacts |
184
- | `tracerkit --version` | Print version |
185
- | `tracerkit --help` | Show help message |
186
-
187
- All commands default to the home directory. Pass a path to target a specific project.
188
-
189
- ## Configuration
190
-
191
- Artifacts are stored under `.tracerkit/` by default. To customize paths, create `.tracerkit/config.json`:
192
-
193
- ```json
194
- {
195
- "paths": {
196
- "prds": ".tracerkit/prds",
197
- "plans": ".tracerkit/plans",
198
- "archives": ".tracerkit/archives"
199
- }
200
- }
201
- ```
202
-
203
- Any missing key falls back to its default. The file is optional — without it, all defaults apply. After changing config, run `tracerkit update` to regenerate skills with the new paths.
204
-
205
- ## Metadata Lifecycle
206
-
207
- Each PRD carries YAML frontmatter that tracks its position in the workflow. The skills update it automatically — you never need to edit it by hand.
208
-
209
- **Fields:**
210
-
211
- - `created` — ISO 8601 UTC timestamp, set when the PRD is written
212
- - `status` — `created` | `in_progress` | `done`
213
- - `completed` — ISO 8601 UTC timestamp, set when verification passes
214
-
215
- **How it changes:**
216
-
217
- | Stage | Skill | Frontmatter |
218
- | -------- | ------------------- | ---------------------------------------------------- |
219
- | Defined | `/tk:prd` | `created: 2025-06-15T14:30:00Z`<br>`status: created` |
220
- | Planning | `/tk:plan` | `status: in_progress` |
221
- | Verified | `/tk:verify` (PASS) | `status: done`<br>`completed: 2025-06-20T09:00:00Z` |
222
-
223
- <details>
224
- <summary>Example frontmatter at each stage</summary>
225
-
226
- After `/tk:prd`:
227
-
228
- ```yaml
229
- ---
230
- created: 2025-06-15T14:30:00Z
231
- status: created
232
- ---
233
- ```
234
-
235
- After `/tk:plan`:
236
-
237
- ```yaml
238
- ---
239
- created: 2025-06-15T14:30:00Z
240
- status: in_progress
241
- ---
242
- ```
243
-
244
- After `/tk:verify` (PASS):
245
-
246
- ```yaml
247
- ---
248
- created: 2025-06-15T14:30:00Z
249
- status: done
250
- completed: 2025-06-20T09:00:00Z
251
- ---
252
- ```
253
-
254
- </details>
255
-
256
- ## Compared to
257
-
258
- **vs. [Spec Kit](https://github.com/github/spec-kit)** (GitHub) — Thorough but heavyweight. 5 phases, Python setup, rigid phase gates. TracerKit is 3 phases, zero deps, automated verification.
259
-
260
- **vs. [Kiro](https://kiro.dev/)** (AWS) — Powerful but locked to a dedicated IDE. TracerKit works inside Claude Code with pure Markdown skills.
261
-
262
- **vs. [OpenSpec](https://github.com/Fission-AI/OpenSpec)** — Similar philosophy, broader tool support. TracerKit trades breadth (Claude Code only) for depth — native skill discovery, subagents for verification, and fewer artifacts.
263
-
264
- **vs. nothing** — AI coding without specs means vague prompts and lost context between sessions. TracerKit adds structure without ceremony.
265
-
266
- <details>
267
- <summary>Full comparison table</summary>
268
-
269
- | | Spec Kit | Kiro | OpenSpec | TracerKit |
270
- | ---------------- | ---------------- | -------------------------- | ----------------------- | ---------------------------------- |
271
- | **What it is** | CLI + extensions | Agentic IDE (VS Code fork) | Slash-command framework | Claude Code skills (pure Markdown) |
272
- | **Setup** | Python + uv | Dedicated IDE | npm + init | `npx tracerkit init` |
273
- | **Phases** | 5 | 3 | 3 | 3 (prd, plan, verify) |
274
- | **Artifacts** | 4 files | 3+ files | 4+ files | 2 files (PRD, plan) |
275
- | **Verification** | Manual gates | Diff approval | Manual | Automated PASS/NEEDS_WORK |
276
- | **Tool lock-in** | Any AI assistant | Kiro IDE only | Any AI assistant | Claude Code only |
277
- | **Runtime deps** | Python + uv | Proprietary IDE | None | None |
278
-
279
- </details>
100
+ | Document | Description |
101
+ | ------------------------------------------------ | --------------------------------------------------- |
102
+ | [Examples](docs/examples.md) | End-to-end usage walkthroughs |
103
+ | [CLI Reference](docs/cli-reference.md) | All CLI commands and flags |
104
+ | [Configuration](docs/configuration.md) | Custom artifact paths via `config.json` |
105
+ | [Metadata Lifecycle](docs/metadata-lifecycle.md) | YAML frontmatter states and transitions |
106
+ | [Compared to](docs/compared-to.md) | How TracerKit differs from Spec Kit, Kiro, OpenSpec |
280
107
 
281
108
  ## Contributing
282
109
 
package/dist/bin.js CHANGED
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { n as e, r as t, t as n } from "./uninstall-C6vhDv_T.js";
3
- import { resolve as r } from "node:path";
4
- import { homedir as i } from "node:os";
3
+ import { readFileSync as r } from "node:fs";
4
+ import { dirname as i, resolve as a } from "node:path";
5
+ import { fileURLToPath as o } from "node:url";
6
+ import { homedir as s } from "node:os";
5
7
  //#region src/cli.ts
6
- var a = [
8
+ var { version: c } = JSON.parse(r(a(i(o(import.meta.url)), "..", "package.json"), "utf8")), l = [
7
9
  "Usage: tracerkit <command> [path]",
8
10
  "",
9
11
  "Commands:",
@@ -18,26 +20,26 @@ var a = [
18
20
  "",
19
21
  "All commands default to the home directory when no path is given."
20
22
  ];
21
- function o(e) {
23
+ function u(e) {
22
24
  let t = e.find((e) => !e.startsWith("-"));
23
- return t ? r(t) : i();
25
+ return t ? a(t) : s();
24
26
  }
25
- function s(r) {
26
- if (r.includes("--help") || r.includes("-h")) return a;
27
- if (r.includes("--version") || r.includes("-v")) return ["tracerkit/1.4.1"];
28
- let i = r[0], s = r.slice(1);
27
+ function d(r) {
28
+ if (r.includes("--help") || r.includes("-h")) return l;
29
+ if (r.includes("--version") || r.includes("-v")) return [`tracerkit/${c}`];
30
+ let i = r[0], a = r.slice(1);
29
31
  switch (i) {
30
- case "init": return t(o(s));
32
+ case "init": return t(u(a));
31
33
  case "update": {
32
- let t = s.includes("--force"), n = e(o(s.filter((e) => e !== "--force")), { force: t });
34
+ let t = a.includes("--force"), n = e(u(a.filter((e) => e !== "--force")), { force: t });
33
35
  return n.push("", "Updated to the latest TracerKit."), n.push("If using Claude Code, restart your session to load changes."), n;
34
36
  }
35
- case "uninstall": return n(o(s));
36
- default: return a;
37
+ case "uninstall": return n(u(a));
38
+ default: return l;
37
39
  }
38
40
  }
39
41
  //#endregion
40
42
  //#region src/bin.ts
41
- var c = s(process.argv.slice(2));
42
- for (let e of c) console.log(e);
43
+ var f = d(process.argv.slice(2));
44
+ for (let e of f) console.log(e);
43
45
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tracerkit",
3
- "version": "1.4.1",
3
+ "version": "1.4.3",
4
4
  "description": "Spec-driven workflow for Claude Code: replace ad-hoc prompts with PRD → plan → verify.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -24,7 +24,7 @@ For each file `{{paths.prds}}/<slug>.md`:
24
24
 
25
25
  For each slug, check if `{{paths.plans}}/<slug>.md` exists. If it does, find the last `## Verdict` block and extract:
26
26
 
27
- - **Result**: PASS or NEEDS_WORK
27
+ - **Result**: PASS or 🚧 NEEDS_WORK
28
28
  - **BLOCKERS**: count
29
29
  - **SUGGESTIONS**: count
30
30
 
@@ -1,11 +1,11 @@
1
1
  ---
2
- description: Compare implementation against plan, emit BLOCKERS/SUGGESTIONS and a PASS or NEEDS_WORK verdict. Auto-archives on PASS. Use after implementing a plan.
2
+ description: Compare implementation against plan, emit BLOCKERS/SUGGESTIONS and a PASS or 🚧 NEEDS_WORK verdict. Auto-archives on PASS. Use after implementing a plan.
3
3
  argument-hint: '[slug]'
4
4
  ---
5
5
 
6
6
  # Verify Implementation
7
7
 
8
- Compare current implementation against a plan, stamp a verdict, and archive on PASS.
8
+ Compare current implementation against a plan, stamp a verdict, and archive on PASS.
9
9
 
10
10
  ## Pre-loaded context
11
11
 
@@ -38,13 +38,13 @@ Use a **read-only subagent** (no file writes, no edits) to:
38
38
 
39
39
  Collect findings into two categories:
40
40
 
41
- - **BLOCKERS** — done-when conditions not met, missing functionality, failing tests, broken contracts. These prevent a PASS.
42
- - **SUGGESTIONS** — improvements, minor gaps, style issues. These do not prevent a PASS.
41
+ - **BLOCKERS** — done-when conditions not met, missing functionality, failing tests, broken contracts. These prevent a PASS.
42
+ - **SUGGESTIONS** — improvements, minor gaps, style issues. These do not prevent a PASS.
43
43
 
44
44
  ### 4. Determine verdict
45
45
 
46
- - **PASS** — zero BLOCKERS
47
- - **NEEDS_WORK** — one or more BLOCKERS
46
+ - **✅ PASS** — zero BLOCKERS
47
+ - **🚧 NEEDS_WORK** — one or more BLOCKERS
48
48
 
49
49
  ### 5. Report to user
50
50
 
@@ -53,7 +53,7 @@ Print the verdict report:
53
53
  ```
54
54
  ## Verification: <slug>
55
55
 
56
- ### Verdict: PASS | NEEDS_WORK
56
+ ### Verdict: PASS | 🚧 NEEDS_WORK
57
57
 
58
58
  ### BLOCKERS
59
59
  - (list or "None")
@@ -71,7 +71,7 @@ Append a verdict block at the bottom of `{{paths.plans}}/<slug>.md`:
71
71
 
72
72
  ## Verdict
73
73
 
74
- - **Result**: PASS | NEEDS_WORK
74
+ - **Result**: PASS | 🚧 NEEDS_WORK
75
75
  - **Date**: YYYY-MM-DD
76
76
  - **BLOCKERS**: (count)
77
77
  - **SUGGESTIONS**: (count)
@@ -79,9 +79,9 @@ Append a verdict block at the bottom of `{{paths.plans}}/<slug>.md`:
79
79
 
80
80
  If a previous verdict block exists, replace it with the new one.
81
81
 
82
- ### 7. On PASS — update PRD status and archive
82
+ ### 7. On PASS — update PRD status and archive
83
83
 
84
- If the verdict is **PASS**:
84
+ If the verdict is **✅ PASS**:
85
85
 
86
86
  **First**, update the YAML frontmatter in `{{paths.prds}}/<slug>.md`:
87
87
 
@@ -110,17 +110,17 @@ If the verdict is **PASS**:
110
110
 
111
111
  If `{{paths.archives}}/<slug>/` already exists, warn and ask whether to overwrite.
112
112
 
113
- ### 8. On NEEDS_WORK
113
+ ### 8. On 🚧 NEEDS_WORK
114
114
 
115
115
  Tell the user: fix the listed blockers, then re-run `/tk:verify <slug>`.
116
116
 
117
117
  ## Rules
118
118
 
119
119
  - The review subagent must be **read-only** — it must not create, edit, or delete any files
120
- - The only file writes this skill makes are: the verdict block in the plan, and the archive move on PASS
120
+ - The only file writes this skill makes are: the verdict block in the plan, and the archive move on PASS
121
121
  - Never modify the source PRD (except moving it to archive)
122
122
  - Never modify implementation code — only observe and report
123
- - If the PRD file is missing but the plan has a PASS verdict, warn but proceed with archiving the plan only
123
+ - If the PRD file is missing but the plan has a PASS verdict, warn but proceed with archiving the plan only
124
124
 
125
125
  ## Error Handling
126
126