@dtlabs/ai-toolkit 0.1.5 → 0.1.7

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.
@@ -52,7 +52,7 @@ state = {
52
52
 
53
53
  ### 2a. Cross-feature analysis
54
54
 
55
- Compare `feature.md` against each `registry` entry for OVERLAP, DEPENDENCY, or CONFLICT (see `docs/procedures/feature-registry.md`). Show the cross-feature report to the user. If conflicts are found, use `AskUserQuestion` before continuing. If `registry` is empty, output "No prior features — no cross-reference needed."
55
+ Compare `feature.md` against each `registry` entry for OVERLAP, DEPENDENCY, or CONFLICT (see `docs/procedures/feature-registry.md`). Show the cross-feature report to the user. If conflicts are found, output a hard-stop message and wait for a text reply before continuing. Do NOT use `AskUserQuestion` — it cannot be answered through the agent relay chain. If `registry` is empty, output "No prior features — no cross-reference needed."
56
56
 
57
57
  ### 2b. Build execution plan
58
58
 
@@ -75,7 +75,7 @@ feature.md
75
75
  Planning rules:
76
76
  1. Skip agents whose output is fresh — unless `--force`
77
77
  2. Order by dependency — no agent starts until its inputs are fresh
78
- 3. Parallelize independent agents — use `run_in_background: true`
78
+ 3. Parallelize independent agents — invoke multiple Agent tool calls in the same response (do NOT use `run_in_background: true` — background completion notifications are not delivered to sub-agent contexts)
79
79
  4. Re-run downstream agents when an upstream agent ran
80
80
 
81
81
  ### 2c. Show plan to user before executing
@@ -176,7 +176,7 @@ Read `{PREFIX}-Work-Breakdown.md` Section 4 to extract: phase order, tasks per p
176
176
  ### 6d. Execution loop (per phase)
177
177
  1. Identify ready tasks (all dependencies completed)
178
178
  2. Group by domain — batch independent tasks to the same agent
179
- 3. Dispatch in parallel (`run_in_background: true`) where no inter-dependency
179
+ 3. Dispatch in parallel by invoking multiple Agent tool calls in the same response where no inter-dependency — do NOT use `run_in_background: true` from within a sub-agent context
180
180
  4. Wait for all agents in phase
181
181
  5. When ALL tasks of a User Story are done → trigger US review
182
182
  6. Proceed to next phase only when current phase is fully complete and all completed US reviews have passed
@@ -300,8 +300,8 @@ To add a new agent: create `.claude/agents/my-agent.md` with a clear `descriptio
300
300
  - **PR targets `develop`** — never push directly; do NOT auto-merge
301
301
  - **Plan before executing** — always show the plan first
302
302
  - **Never re-run fresh agents** unless `--force`
303
- - **Parallelize where possible** — independent agents run concurrently
304
- - **Gates are hard stops** — use `AskUserQuestion`, wait for the user, write `{PREFIX}-Approvals.md`, verify it on disk. Never auto-approve, never assume, never skip
303
+ - **Parallelize where possible** — invoke multiple Agent tool calls in the same response for independent agents; never use `run_in_background: true` from within a sub-agent (background notifications are not delivered to sub-agent contexts)
304
+ - **Gates are hard stops** — output the hard-stop text and wait for a text reply from the user; write `{PREFIX}-Approvals.md`, verify it on disk. Do NOT use `AskUserQuestion` — it cannot be answered through the agent relay chain. Never auto-approve, never assume, never skip
305
305
  - **Pre-condition check at Phase 6** — read `{PREFIX}-Approvals.md` and verify both gates ✅ before touching the codebase. If missing, return to the gate
306
306
  - **Review at US level** — not per task
307
307
  - **Commit per US** — `feat({PREFIX}): implement US-XX — {title}`
@@ -0,0 +1,152 @@
1
+ ---
2
+ description: "Check Interventions — full reconciliation view of all interventions from an assessment run: document presence, Approvals/Index consistency, and feature-actioning status. Usage: /check-interventions [prefix]"
3
+ argument-hint: "[assessment-prefix]"
4
+ allowed-tools: Read, Glob, Grep
5
+ ---
6
+
7
+ Produce a full reconciliation table for all interventions from a completed assessment run.
8
+
9
+ ## Step 1 — Resolve prefix
10
+
11
+ If `$ARGUMENTS` is empty:
12
+ - Glob `docs/assessments/ASSESS-*/` to list available assessment folders.
13
+ - Output the list and say: "Please specify a prefix from the list above (e.g. `/check-interventions ASSESS-001`)."
14
+ - STOP.
15
+
16
+ Otherwise:
17
+ - If the argument is digits-only (e.g. `001`), prepend `ASSESS-` to form `ASSESS-001`.
18
+ - Strip any trailing slash.
19
+ - Use this as `{PREFIX}` for all subsequent steps.
20
+
21
+ ## Step 2 — Check assessment directory
22
+
23
+ If `docs/assessments/{PREFIX}/` does not exist:
24
+ ```
25
+ ❌ Assessment directory not found: docs/assessments/{PREFIX}/
26
+ Run /assess-codebase to start a new assessment.
27
+ ```
28
+ STOP.
29
+
30
+ ## Step 3 — Read Approvals file
31
+
32
+ File path: `docs/assessments/{PREFIX}/{PREFIX}-Approvals.md`
33
+
34
+ If the file does not exist:
35
+ ```
36
+ ❌ Approvals file not found: docs/assessments/{PREFIX}/{PREFIX}-Approvals.md
37
+ The assessment pipeline's Findings Gate must complete before this command can run.
38
+ ```
39
+ STOP.
40
+
41
+ Read the file. If it does NOT contain `## Interventions Flagged for Feature Delivery`:
42
+ ```
43
+ ❌ This Approvals file uses a pre-FTR-003 format (missing "Interventions Flagged for Feature Delivery" section).
44
+ This command requires the FTR-003 format produced by assessment-manager Phase 5.
45
+ ```
46
+ STOP.
47
+
48
+ Parse the Markdown table under `## Interventions Flagged for Feature Delivery`. Extract all rows (both `Yes` and `No`). Record:
49
+ - `INT-NNN` identifier (normalise by stripping leading zeros for matching)
50
+ - `Flagged` value (`Yes`, `No`, or malformed if any other value)
51
+ - Full `Intervention` column value (e.g. `INT-001 — sql-injection-hardening`) to extract the slug — the slug is the part after ` — `
52
+
53
+ ## Step 4 — Read Interventions Index
54
+
55
+ File path: `docs/assessments/{PREFIX}/{PREFIX}-Interventions-Index.md`
56
+
57
+ If the file does not exist:
58
+ - Set `index_available = false`
59
+ - Note: Title, Criticality, and cross-file consistency checks will be skipped or shown as `—`.
60
+
61
+ If the file exists:
62
+ - Set `index_available = true`
63
+ - Parse the Markdown table: extract columns `ID`, `Title`, `Criticality` for each row.
64
+
65
+ ## Step 5 — Build unified intervention list
66
+
67
+ Collect all INT-NNN identifiers from:
68
+ 1. The Approvals file (all rows)
69
+ 2. The Interventions Index (all rows, if available)
70
+
71
+ Union both sets (deduplicated). This is the full list to reconcile.
72
+
73
+ For each entry, retain the **original padded identifier** from the source file (e.g., `INT-001`) as the canonical form — this is what is used in file-system glob operations. Stripping leading zeros is applied **only when comparing two identifiers from different sources** to determine whether they refer to the same intervention (e.g., `INT-001` and `INT-1` are treated as equal for deduplication only).
74
+
75
+ ## Step 6 — For each intervention, collect data
76
+
77
+ For each INT-NNN in the unified list:
78
+
79
+ **a. Doc file status:**
80
+ - Glob `docs/assessments/{PREFIX}/{PREFIX}-{INT-NNN}-*.md`
81
+ - If one or more files found: `✅ present`
82
+ - If no files found: `❌ missing`
83
+
84
+ **b. In Approvals:**
85
+ - `Yes` if INT-NNN is in the Approvals table, `No` otherwise
86
+
87
+ **c. Flagged value:**
88
+ - From Approvals table: `Yes`, `No`, or `⚠️ malformed ({value})` if not exactly `Yes`/`No`
89
+ - If INT-NNN not in Approvals: `n/a`
90
+
91
+ **d. In Interventions Index:**
92
+ - `Yes` if INT-NNN is in the Index, `No` otherwise (or `—` if index unavailable)
93
+
94
+ **e. Title and Criticality:**
95
+ - From Interventions Index if available; else `—`
96
+
97
+ **f. Actioned status (only for interventions where Flagged = Yes):**
98
+ - Glob `internal_docs/features/FTR-*/` and `docs/features/FTR-*/`
99
+ - For each feature folder, apply the two-step heuristic:
100
+ 1. **Slug match:** folder name contains the INT-NNN slug (case-insensitive substring)
101
+ 2. **Body match (fallback):** read `feature.md`; body contains the INT-NNN identifier string (case-insensitive)
102
+ - If a match is found: `✅ actioned → {matched-folder}`
103
+ - If no match: `⏳ pending`
104
+ - If Flagged is not `Yes`: `n/a`
105
+
106
+ ## Step 7 — Render reconciliation table
107
+
108
+ ```
109
+ 📊 Intervention Reconciliation — {PREFIX}
110
+ ════════════════════════════════════════════════════════════════
111
+
112
+ | INT-NNN | Title | Criticality | Flagged | Doc file | Actioned |
113
+ |---------|----------------|-------------|---------|-------------|------------------|
114
+ | INT-001 | {title} | CRITICAL | Yes | ✅ present | ✅ actioned → FTR-010-... |
115
+ | INT-002 | {title} | HIGH | Yes | ✅ present | ⏳ pending |
116
+ | INT-003 | {title} | MEDIUM | No | ❌ missing | n/a |
117
+ | INT-004 | {title} | LOW | No | ✅ present | n/a |
118
+
119
+ Total: {N} interventions | {K} flagged | {A} actioned | {P} pending
120
+ ```
121
+
122
+ If `index_available = false`, note above the table:
123
+ ```
124
+ ⚠️ Interventions Index not found — Title and Criticality columns not available.
125
+ ```
126
+
127
+ ## Step 8 — Render inconsistency list
128
+
129
+ Collect all inconsistencies:
130
+
131
+ - For each INT-NNN in Approvals that is NOT in the Interventions Index (when index available):
132
+ `INT-NNN: present in Approvals but not in Interventions Index`
133
+ - For each INT-NNN in Interventions Index that is NOT in Approvals (when index available):
134
+ `INT-NNN: present in Interventions Index but missing from Approvals`
135
+ - For each row in Approvals where `Flagged` is not exactly `Yes` or `No`:
136
+ `INT-NNN: malformed Flagged value '{value}' (expected 'Yes' or 'No')`
137
+
138
+ If no inconsistencies:
139
+ ```
140
+ ────────────────────────────────────────
141
+ ✅ No inconsistencies found.
142
+ ════════════════════════════════════════════════════════════════
143
+ ```
144
+
145
+ If inconsistencies exist:
146
+ ```
147
+ ────────────────────────────────────────
148
+ ⚠️ Inconsistencies ({N}):
149
+ • INT-NNN: present in Approvals but not in Interventions Index
150
+ • INT-NNN: malformed Flagged value 'Approved' (expected 'Yes' or 'No')
151
+ ════════════════════════════════════════════════════════════════
152
+ ```
@@ -0,0 +1,113 @@
1
+ ---
2
+ description: "Next Intervention — finds the next un-actioned flagged intervention from an assessment run and suggests the /define-feature invocation to start on it. Usage: /next-intervention [prefix]"
3
+ argument-hint: "[assessment-prefix]"
4
+ allowed-tools: Read, Glob, Grep
5
+ ---
6
+
7
+ Find the next un-actioned flagged intervention from a completed assessment run.
8
+
9
+ ## Step 1 — Resolve prefix
10
+
11
+ If `$ARGUMENTS` is empty:
12
+ - Glob `docs/assessments/ASSESS-*/` to list available assessment folders.
13
+ - Output the list and say: "Please specify a prefix from the list above (e.g. `/next-intervention ASSESS-001`)."
14
+ - STOP.
15
+
16
+ Otherwise:
17
+ - If the argument is digits-only (e.g. `001`), prepend `ASSESS-` to form `ASSESS-001`.
18
+ - Strip any trailing slash.
19
+ - Use this as `{PREFIX}` for all subsequent steps.
20
+
21
+ ## Step 2 — Check assessment directory
22
+
23
+ If `docs/assessments/{PREFIX}/` does not exist:
24
+ ```
25
+ ❌ Assessment directory not found: docs/assessments/{PREFIX}/
26
+ Run /assess-codebase to start a new assessment.
27
+ ```
28
+ STOP.
29
+
30
+ ## Step 3 — Read Approvals file
31
+
32
+ File path: `docs/assessments/{PREFIX}/{PREFIX}-Approvals.md`
33
+
34
+ If the file does not exist:
35
+ ```
36
+ ❌ Approvals file not found: docs/assessments/{PREFIX}/{PREFIX}-Approvals.md
37
+ The assessment pipeline's Findings Gate must complete before this command can run.
38
+ ```
39
+ STOP.
40
+
41
+ Read the file. If it does NOT contain the section heading `## Interventions Flagged for Feature Delivery`:
42
+ ```
43
+ ❌ This Approvals file uses a pre-FTR-003 format (missing "Interventions Flagged for Feature Delivery" section).
44
+ This command requires the FTR-003 format produced by assessment-manager Phase 5.
45
+ ```
46
+ STOP.
47
+
48
+ ## Step 4 — Extract flagged interventions
49
+
50
+ Parse the Markdown table under `## Interventions Flagged for Feature Delivery`.
51
+ - Extract all rows where the `Flagged` column value is exactly `Yes` (case-sensitive).
52
+ - Preserve document order (top-to-bottom).
53
+
54
+ If no rows are flagged:
55
+ ```
56
+ ℹ️ No interventions were flagged for feature delivery in this assessment.
57
+ ```
58
+ STOP.
59
+
60
+ ## Step 5 — Check for matching feature folders
61
+
62
+ Glob both:
63
+ - `internal_docs/features/FTR-*/`
64
+ - `docs/features/FTR-*/`
65
+
66
+ For each flagged intervention, determine whether it is "actioned" using this two-step heuristic (attempt slug match first, then body match as fallback):
67
+
68
+ 1. **Slug match:** Does any feature folder name contain the INT-NNN slug from the `Intervention` column (case-insensitive substring)?
69
+ - The `Intervention` column format is `INT-NNN — {slug}` (e.g. `INT-001 — sql-injection-hardening`). The slug is the part after ` — `.
70
+ 2. **Body match (fallback):** For any folder that did NOT match by slug, read its `feature.md` and check whether the INT-NNN identifier string (e.g. `INT-001`) appears anywhere in the body (case-insensitive).
71
+
72
+ An intervention is "actioned" if either check returns true for at least one feature folder.
73
+
74
+ Normalise INT-NNN identifiers by stripping leading zeros before comparison (e.g. `INT-001` and `INT-1` are the same).
75
+
76
+ ## Step 6 — Find the first un-actioned intervention
77
+
78
+ Scan the flagged interventions in document order and find the first one that is NOT actioned.
79
+
80
+ If all flagged interventions are actioned:
81
+ ```
82
+ ✅ All flagged interventions have been actioned. ({N} of {N} flagged)
83
+
84
+ Actioned interventions:
85
+ • INT-001 — {slug} → {matched-feature-folder}
86
+ • INT-002 — {slug} → {matched-feature-folder}
87
+ ...
88
+ ```
89
+ STOP.
90
+
91
+ ## Step 7 — Output the next un-actioned intervention
92
+
93
+ Construct the document path:
94
+ ```
95
+ docs/assessments/{PREFIX}/{PREFIX}-{INT-NNN}-{slug}.md
96
+ ```
97
+ (Glob `docs/assessments/{PREFIX}/{PREFIX}-{INT-NNN}-*.md` to find the actual filename if the slug in the path differs from the Approvals column.)
98
+
99
+ Output:
100
+
101
+ ```
102
+ 🔖 Next un-actioned intervention: {INT-NNN} — {slug}
103
+
104
+ Document path: docs/assessments/{PREFIX}/{PREFIX}-{INT-NNN}-{slug}.md
105
+ Suggested command: /define-feature docs/assessments/{PREFIX}/{PREFIX}-{INT-NNN}-{slug}.md
106
+ ```
107
+
108
+ If some interventions were already actioned, append:
109
+ ```
110
+ Previously actioned ({K} of {N} flagged):
111
+ • INT-001 — {slug} → {matched-feature-folder}
112
+ ...
113
+ ```
@@ -1,10 +1,18 @@
1
1
  ---
2
- description: "Assess Codebase — starts the full codebase assessment pipeline (parallel assessment → findings consolidation → intervention documents → approval gate → remediation → review → PR). Usage: /assess-codebase [path] [--scope=architecture,security,quality,concurrency,devops] [--force]"
2
+ description: "Assess Codebase — starts the codebase assessment pipeline (parallel assessment → findings consolidation → intervention documents → findings gate). Usage: /assess-codebase [path] [--scope=architecture,security,quality,concurrency,devops] [--force]"
3
3
  argument-hint: "[path] [--scope=architecture,security,quality,concurrency,devops] [--force]"
4
- disable-model-invocation: true
5
4
  ---
6
5
 
7
- Spawn the `assessment-manager` agent with the arguments provided by the user:
6
+ # Assess Codebase
7
+
8
+ Orchestrates the full codebase assessment pipeline by spawning the `assessment-manager` agent
9
+ and, once it completes, recording the real token consumption in a dedicated file.
10
+
11
+ ---
12
+
13
+ ## Step 1 — Spawn the Assessment Manager
14
+
15
+ Spawn the `assessment-manager` agent with the exact arguments the user provided:
8
16
 
9
17
  ```
10
18
  subagent_type: assessment-manager
@@ -13,4 +21,121 @@ prompt: <path> [--scope=...] [--force]
13
21
 
14
22
  If no path is provided, use `.` (current working directory).
15
23
 
16
- Pass the exact arguments the user typed after `/assess-codebase` as the prompt to the agent. Do not add anything else.
24
+ Wait for the agent to complete. Capture its full result, including the `<usage>` block
25
+ that appears at the end of the tool result (format: `subagent_tokens: N`).
26
+
27
+ The assessment-manager handles the full pipeline internally — it presents the Phase 5 Findings Gate
28
+ to the user, records the acknowledgement and flagged interventions, and ends at the summary.
29
+ The skill waits for the agent to complete and proceeds to Step 2 regardless of outcome.
30
+
31
+ ---
32
+
33
+ ## Step 2 — Extract orchestrator token usage
34
+
35
+ From the `<usage>` block of the assessment-manager result, read:
36
+ - `subagent_tokens` — total tokens consumed by the assessment-manager agent itself (input + output)
37
+ - `duration_ms` — wall-clock duration of the assessment-manager run
38
+
39
+ If the `<usage>` block is missing: log warning
40
+ `"assessment-manager produced no <usage> block; orchestrator token data unavailable"`
41
+ and set `actual_tokens = "N/A"`.
42
+
43
+ ---
44
+
45
+ ## Step 3 — Complete Token Estimate file
46
+
47
+ The assessment-manager will have written `{PREFIX}-Token-Estimate.md` at
48
+ `docs/assessments/{PREFIX}/{PREFIX}-Token-Estimate.md` with assessment and
49
+ intervention-documentation rows. Read that file, then **append** the following in order:
50
+
51
+ ### 3a — Orchestrator row
52
+
53
+ The orchestrator row is NOT added to any of the three phase-level tables (Assessment agents, Intervention documentation, Remediation agents). It appears only in the Actuals vs Estimate section (Step 3b below).
54
+
55
+ For use in Step 3b, compute the orchestrator row values as follows:
56
+
57
+ - Estimated tokens: 80,000 (baseline from estimation model)
58
+ - Estimated cost: $0.4320 — computed as `80,000 × $0.005400 / 1,000` using the sonnet blended
59
+ rate from `docs/pricing.md`. If `docs/pricing.md` is missing, use `"N/A"` for est_cost.
60
+ - Actual tokens: value from `subagent_tokens` in the `<usage>` block; `"N/A"` if block was missing
61
+ - Actual cost: `(actual_tokens / 1,000) × blended_rate_per_1k`, formatted to 4 decimal places; `"N/A"` if actual_tokens is `"N/A"` or pricing data is unavailable
62
+
63
+ ### 3b — Actuals vs Estimate section
64
+
65
+ Append a horizontal rule (`---`) followed by an Actuals vs Estimate section. Include one
66
+ row for every agent that ran: all assessment agents, intervention-documentation-standard,
67
+ and the assessment-manager orchestrator.
68
+
69
+ ```markdown
70
+ ## Actuals vs Estimate
71
+
72
+ | Agent | Task/Scope | Model | Est. tokens | Actual tokens | Delta | Est. cost ($) | Actual cost ($) | Duration |
73
+ |-------|------------|-------|-------------|---------------|-------|---------------|-----------------|----------|
74
+ | {agent} | {scope} | {model} | {est} | {actual} | {±delta} | {est_cost} | {actual_cost} | {Xmin Ys} |
75
+ ```
76
+
77
+ Column rules:
78
+ - **Delta**: `actual_tokens − est_tokens`; show as `+N` or `−N`. Show `"N/A"` if either
79
+ value is missing.
80
+ - **Duration**: convert `duration_ms` to `Xmin Ys` where available; use `"—"` where not.
81
+ - Rows with `"N/A"` actual tokens are still shown in the table but excluded from any
82
+ aggregate calculations.
83
+
84
+ ### 3c — Estimation accuracy by agent type (conditional)
85
+
86
+ If 2 or more distinct model tiers appear in the rows that have non-`"N/A"` actual tokens
87
+ (e.g., haiku AND sonnet), append:
88
+
89
+ ```markdown
90
+ ## Estimation accuracy by agent type
91
+
92
+ | Model | Count | Avg est. tokens | Avg actual tokens | Avg delta | Trend |
93
+ |-------|-------|-----------------|-------------------|-----------|-------|
94
+ | {model} | {N} | {avg_est} | {avg_actual} | {avg_delta} | {trend} |
95
+ ```
96
+
97
+ Column rules:
98
+ - One row per model tier (e.g., `haiku`, `sonnet`)
99
+ - Exclude rows with `"N/A"` actual tokens from all averages
100
+ - **Trend**: `"over-target"` if avg delta > +20% of avg est; `"under-target"` if avg delta
101
+ < −20% of avg est; otherwise `"on-target"`
102
+
103
+ ### 3d — Grand Total section
104
+
105
+ Update the Grand Total section already written in the file: replace the
106
+ `"partial — updated at pipeline end"` marker with `"Final"` and fill in the computed values:
107
+
108
+ ```markdown
109
+ ## Grand Total (Final)
110
+
111
+ | Metric | Estimated | Actual | Delta | Delta % |
112
+ |--------|-----------|--------|-------|---------|
113
+ | Total tokens (all agents) | {sum_est} | {sum_actual} | ±{delta} | {delta_pct} |
114
+ | Total cost ($) | ${sum_est_cost} | ${sum_actual_cost} | ±${delta_cost} | {delta_cost_pct} |
115
+ | Total wall-clock | — | {Xmin Ys} | — | — |
116
+ ```
117
+
118
+ Column rules:
119
+ - **Delta %**: `(delta / estimated) × 100` at 1 decimal place; show `"N/A"` if estimated is 0
120
+
121
+ Summation rules:
122
+ - Sum all agents' tokens and costs; exclude `"N/A"` rows from sums
123
+ - Cost values: 2 decimal places for subtotals and totals; 4 decimal places for per-row costs
124
+ - The "Remediation" section in the Token Estimate file contains a static note (not a placeholder); leave it as-is
125
+ - Wall-clock: convert `duration_ms` from the assessment-manager result to minutes/seconds
126
+
127
+ ---
128
+
129
+ ## Step 4 — Report to user
130
+
131
+ After writing to the Token Estimate file, report:
132
+
133
+ ```
134
+ Assessment pipeline complete.
135
+ Token estimate + actuals → {PREFIX}-Token-Estimate.md
136
+ Approvals → docs/assessments/{PREFIX}/{PREFIX}-Approvals.md
137
+ Process log → docs/assessments/{PREFIX}/{PREFIX}-process-log.txt
138
+ ```
139
+
140
+ If the Token Estimate file does not exist (assessment-manager failed before writing it):
141
+ note this in the report but do not halt — the skill has completed its work.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,81 @@
1
- ## 0.1.5 (2026-07-14)
2
- ## 0.1.4 (2026-07-14)
1
+ ## 0.1.4 (2026-07-21)
2
+ ## 0.1.7 (2026-07-23)
3
+
4
+
5
+ ### Features
6
+
7
+ * add effort estimation and actuals tracking to project manager workflow ([0b81915](https://github.com/dtlab-tech/ai-toolkit/commit/0b819154584c725ccca09a825888aee8f3f5f34f))
8
+ * add effort estimation and actuals tracking to project manager workflow ([f9e74ef](https://github.com/dtlab-tech/ai-toolkit/commit/f9e74ef39972e3f0f3b0d3b6e4311d15fa9035cc))
9
+ * add GitHub Actions workflow to auto-publish to npm on merge to main ([f8d89ea](https://github.com/dtlab-tech/ai-toolkit/commit/f8d89ea20364796ce699b8228041f7f436ff3bdd))
10
+ * add GitHub Actions workflow to auto-publish to npm on merge to main ([abe2c45](https://github.com/dtlab-tech/ai-toolkit/commit/abe2c45336586794267d4ac7faf164cb82758fb6))
11
+ * add option to install Matt Pocock's skills during toolkit installation ([441183d](https://github.com/dtlab-tech/ai-toolkit/commit/441183d30214ed6eb570ae41ddf858229276b6d5))
12
+ * add option to install Matt Pocock's skills during toolkit installation ([f0d4fa3](https://github.com/dtlab-tech/ai-toolkit/commit/f0d4fa3ff783498d77e5b399d22d5828c8b157a6))
13
+ * add pricing documentation for cost estimation and blended cost formula ([91f6392](https://github.com/dtlab-tech/ai-toolkit/commit/91f63926ef2eabd20ad09a186f323d00abba9963))
14
+ * add pricing documentation for cost estimation and blended cost formula ([a9361ed](https://github.com/dtlab-tech/ai-toolkit/commit/a9361eda75b2c36d2515df976782af67bba1c4e4))
15
+ * Add SWF AI Toolkit with agents, skills, commands, and procedures for software feature delivery ([327a282](https://github.com/dtlab-tech/ai-toolkit/commit/327a2826bf4a147bcf2f993bc3ea254eaa12b18b))
16
+ * Add SWF AI Toolkit with agents, skills, commands, and procedures for software feature delivery ([97eb589](https://github.com/dtlab-tech/ai-toolkit/commit/97eb589a2b63a9ea45634c71aaae07d08bc1deaf))
17
+ * add version check during toolkit installation and update installed version file ([0e0eeea](https://github.com/dtlab-tech/ai-toolkit/commit/0e0eeea1bafe78e4d5c4214efc1b7acab9799ac8))
18
+ * add version check during toolkit installation and update installed version file ([4681ed4](https://github.com/dtlab-tech/ai-toolkit/commit/4681ed445a83c7f3bee5677bb773deaa7b0f86e2))
19
+ * assessment pipeline enhancements — token/effort estimation, registry, intervention commands, and Gaia assistant ([0cb512c](https://github.com/dtlab-tech/ai-toolkit/commit/0cb512cfd6d18c38216584ca454ab2077e641762))
20
+ * auto-generate CHANGELOG.md on publish via conventional-changelog ([6fdbd69](https://github.com/dtlab-tech/ai-toolkit/commit/6fdbd69c011ad3d568f3070f4c2dcd87092623e9))
21
+ * auto-generate CHANGELOG.md on publish via conventional-changelog ([49df865](https://github.com/dtlab-tech/ai-toolkit/commit/49df865633ebcede49f6c879921e775f1945271b))
22
+ * Enhance agent descriptions and add completion summaries ([a3aa811](https://github.com/dtlab-tech/ai-toolkit/commit/a3aa81169f102a09c95a46a98aa3b4f82bbb3b31))
23
+ * Enhance agent descriptions and add completion summaries ([1b2fe4a](https://github.com/dtlab-tech/ai-toolkit/commit/1b2fe4a2bf1c52107c8605533f2a0cdd85d1afbf))
24
+ * enhance file installation process with detailed status reporting and user prompts ([c12ca72](https://github.com/dtlab-tech/ai-toolkit/commit/c12ca72e111ead2f3c53b8846507f61fb572125b))
25
+ * enhance file installation process with detailed status reporting and user prompts ([10b56a4](https://github.com/dtlab-tech/ai-toolkit/commit/10b56a4d10455366cfec0690b8e9e428399f845a))
26
+ * enhance installation process with version checks and optional Matt Pocock skills installation ([16411e7](https://github.com/dtlab-tech/ai-toolkit/commit/16411e755c6586e8d33bd13b62402b3648e05b9c))
27
+ * enhance installation process with version checks and optional Matt Pocock skills installation ([8c1f0ae](https://github.com/dtlab-tech/ai-toolkit/commit/8c1f0ae92828e27b8a7ffb110eb35e27094b7006))
28
+ * enhance project manager with feature registry checks for cross-feature analysis ([30eb5e5](https://github.com/dtlab-tech/ai-toolkit/commit/30eb5e50fc16501e9cc38a5b4a8264e3eac96e5d))
29
+ * enhance project manager with feature registry checks for cross-feature analysis ([0d44ec3](https://github.com/dtlab-tech/ai-toolkit/commit/0d44ec35caa0460203c7c55d7eacff9320ef681f))
30
+ * enhance SWF AI Toolkit guide with detailed introduction and context awareness ([60bb2b8](https://github.com/dtlab-tech/ai-toolkit/commit/60bb2b86f3915f9844b58e7eeb44e88ce3877a4c))
31
+ * enhance SWF AI Toolkit guide with detailed introduction and context awareness ([f4ca293](https://github.com/dtlab-tech/ai-toolkit/commit/f4ca2938f6b4103785274018376ac2997e28cfc2))
32
+ * enhance token tracking and reporting in project manager and implement feature workflow ([fa873b8](https://github.com/dtlab-tech/ai-toolkit/commit/fa873b82b84bd3b332b44c0e2dd458820defd502))
33
+ * enhance token tracking and reporting in project manager and implement feature workflow ([92336ed](https://github.com/dtlab-tech/ai-toolkit/commit/92336edb3b523a5f5ed40d21b6fe38f7024ba322))
34
+ * **FTR-001:** add token estimation to assessment pipeline ([2f8a630](https://github.com/dtlab-tech/ai-toolkit/commit/2f8a63077e79c09ac25b2d60c74946fc7d229282))
35
+ * **FTR-001:** add token estimation to assessment pipeline ([93879ad](https://github.com/dtlab-tech/ai-toolkit/commit/93879ad00c60e9985424f07c104fa332883a4921))
36
+ * **FTR-002:** Add assessment pipeline effort estimation documentation and process log ([873c28f](https://github.com/dtlab-tech/ai-toolkit/commit/873c28f925a820292a1dc68600b1ebf991336903))
37
+ * **FTR-002:** Add assessment pipeline effort estimation documentation and process log ([30c891b](https://github.com/dtlab-tech/ai-toolkit/commit/30c891be8e337c63064982413570c1c4ade4d08f))
38
+ * **FTR-003:** reduce assessment pipeline to read-only — findings gate replaces remediation gate ([681f6fc](https://github.com/dtlab-tech/ai-toolkit/commit/681f6fc6500514c21f03ae61ee82e788ff65a6c6))
39
+ * **FTR-003:** reduce assessment pipeline to read-only — findings gate replaces remediation gate ([918ca26](https://github.com/dtlab-tech/ai-toolkit/commit/918ca2608e25d0ee2aa91b9047d921b7eaa5c021))
40
+ * **FTR-004:** generate requirements, tech-spec, validation, and work breakdown docs ([5ba2da7](https://github.com/dtlab-tech/ai-toolkit/commit/5ba2da7bee2e7bde5136874f277f19ad83be8464))
41
+ * **FTR-004:** implement INFRA + US-01 through US-03 — assessment registry write logic ([1989e38](https://github.com/dtlab-tech/ai-toolkit/commit/1989e38fc1b0ef5b40ff2e54cc83a2cd49e5c5d3))
42
+ * **FTR-004:** implement US-04 through US-06 — test specification ([baad095](https://github.com/dtlab-tech/ai-toolkit/commit/baad09524d8c352330a024fc7a80e89c635c0fc8))
43
+ * **FTR-004:** update project-manager token estimates to complete status ([959cc99](https://github.com/dtlab-tech/ai-toolkit/commit/959cc9921d470bfa874c5108f320848718d97c9a))
44
+ * **FTR-005:** add /next-intervention and /check-interventions commands ([f744ad2](https://github.com/dtlab-tech/ai-toolkit/commit/f744ad2032abe936feff9ae67ddd863ba86511a1))
45
+ * **FTR-006:** add assessment-aware PR description command to enhance context for intervention branches ([3023729](https://github.com/dtlab-tech/ai-toolkit/commit/302372919a2c07de313175c61f51000fcb2c99bc))
46
+ * refactor Matt Pocock skills installation checks and simplify version handling ([58d3efd](https://github.com/dtlab-tech/ai-toolkit/commit/58d3efddf35b453cf25de701ed5f4b829d0a1a34))
47
+ * refactor Matt Pocock skills installation checks and simplify version handling ([7de059e](https://github.com/dtlab-tech/ai-toolkit/commit/7de059e01fe5d71b75331732a833e00acfbb2a98))
48
+ * rename help skill to hi-gaia and introduce Gaia as toolkit assistant ([4c7c6f4](https://github.com/dtlab-tech/ai-toolkit/commit/4c7c6f422c8f97b9e79361faed4c95ed5001322c))
49
+ * rename help skill to hi-gaia and introduce Gaia as toolkit assistant ([c45fef0](https://github.com/dtlab-tech/ai-toolkit/commit/c45fef09a475dc795dfbbc12485e1ea01f4776d4))
50
+ * update Azure pipeline to dynamically resolve NPM registry URL ([2c6a817](https://github.com/dtlab-tech/ai-toolkit/commit/2c6a81777475f9ed6ad3f9f4b42fe7e7b2ada67e))
51
+ * update Azure pipeline to dynamically resolve NPM registry URL ([0f4601f](https://github.com/dtlab-tech/ai-toolkit/commit/0f4601fabb4b885dadc28e3f868feacdb97e474b))
52
+ * update Matt Pocock skills check to verify 'grilling' skill presence ([47b0592](https://github.com/dtlab-tech/ai-toolkit/commit/47b0592be0438c2d5152030e95674f0d0c23bf9a))
53
+ * update Matt Pocock skills check to verify 'grilling' skill presence ([d92d729](https://github.com/dtlab-tech/ai-toolkit/commit/d92d72946920c1cd9bf29f470a7a95b7bd84a254))
54
+ * update package name and installation instructions to reflect new organization ([b67193a](https://github.com/dtlab-tech/ai-toolkit/commit/b67193a630e3bb95cc5b58e4ead1b914cc74b9dc))
55
+ * update package name and installation instructions to reflect new organization ([0b09994](https://github.com/dtlab-tech/ai-toolkit/commit/0b09994220a563f1d3d12e5286be4a884af34aab))
56
+
57
+
58
+ ### Bug Fixes
59
+
60
+ * add git tag on publish so conventional-changelog can read commit range ([6d4e427](https://github.com/dtlab-tech/ai-toolkit/commit/6d4e427d068da80d607db6e356cc79ea6e6ded9d))
61
+ * add git tag on publish so conventional-changelog can read commit range ([114f558](https://github.com/dtlab-tech/ai-toolkit/commit/114f55871c8e5892b36754cad3ba5d88b082706a))
62
+ * correct shell syntax in version bump commit message ([f988609](https://github.com/dtlab-tech/ai-toolkit/commit/f98860994d1cd3c4ef3d9b86aade6155e0ec6408))
63
+ * correct shell syntax in version bump commit message ([8e25e16](https://github.com/dtlab-tech/ai-toolkit/commit/8e25e160496125387e4a69707b04c24739008c5c))
64
+ * enhance NPM registry resolution by adding ADO_FEED_SCOPE variable ([2ff13e4](https://github.com/dtlab-tech/ai-toolkit/commit/2ff13e44510f507453136b5840d9dfc5c2afc3c5))
65
+ * enhance NPM registry resolution by adding ADO_FEED_SCOPE variable ([77b79c6](https://github.com/dtlab-tech/ai-toolkit/commit/77b79c6f1836b71bf96e1b7457d1c1ca28324253))
66
+ * **FTR-005:** address review warnings + add gate protocol to CLAUDE.md ([2e64780](https://github.com/dtlab-tech/ai-toolkit/commit/2e647809ba5279c492060dde52ab8134490fc59d))
67
+ * pull --rebase before pushing version bump to avoid rejection ([cf751d0](https://github.com/dtlab-tech/ai-toolkit/commit/cf751d0984bdddc683dfc67e378b4f563c6cfbe2))
68
+ * pull --rebase before pushing version bump to avoid rejection ([b70c748](https://github.com/dtlab-tech/ai-toolkit/commit/b70c74832f48e9261fbe894542de5977c3bcafa4))
69
+ * remove project-specific references and fix stale artifact filenames ([c272354](https://github.com/dtlab-tech/ai-toolkit/commit/c2723549f1a3de4f099b85b44c87603b9c601e72))
70
+ * remove project-specific references and fix stale artifact filenames ([1861fb9](https://github.com/dtlab-tech/ai-toolkit/commit/1861fb98708ce8ff8fcae7f5947f4e9dc9ba6937))
71
+ * remove run_in_background from PM and assessment-manager — background notifications not delivered to sub-agent contexts ([29a7b97](https://github.com/dtlab-tech/ai-toolkit/commit/29a7b97649ad5798eaf96c5a1acabb214c0c0c96))
72
+ * update installation instructions in README for clarity and completeness ([293a2dd](https://github.com/dtlab-tech/ai-toolkit/commit/293a2ddf0bebd386ba799ee24f6465b317897495))
73
+ * update installation instructions in README for clarity and completeness ([d682026](https://github.com/dtlab-tech/ai-toolkit/commit/d6820268dc1a60d99e80162e262adaba2974f9f7))
74
+ * update package references from [@denistomada](https://github.com/denistomada) to [@fincantieri](https://github.com/fincantieri) in README and installation documentation ([32ad6ae](https://github.com/dtlab-tech/ai-toolkit/commit/32ad6ae24db1719ad3cb1f4eea02bc11494cacd6))
75
+ * update package references from [@denistomada](https://github.com/denistomada) to [@fincantieri](https://github.com/fincantieri) in README and installation documentation ([5854119](https://github.com/dtlab-tech/ai-toolkit/commit/585411991604acc06a85ecf5b8a9beffe1ef82a2))
76
+ * update package.json to correct author and package name ([53dae47](https://github.com/dtlab-tech/ai-toolkit/commit/53dae47132da53e4fce98fdd683eb7acb4678b5a))
77
+ * update package.json to correct author and package name ([81a6b7c](https://github.com/dtlab-tech/ai-toolkit/commit/81a6b7c1ebfe6fab632eb44ddc48c962efc69997))
78
+ * update repository URL in package.json and remove publishConfig ([7f3dc15](https://github.com/dtlab-tech/ai-toolkit/commit/7f3dc15df57653bed00b139123396d5d2ba24d3e))
79
+ * update repository URL in package.json and remove publishConfig ([b912958](https://github.com/dtlab-tech/ai-toolkit/commit/b9129582804758128f3e9dffdd8cd9302d4e529f))
80
+
3
81
  ## 0.1.3 (2026-07-14)
package/CLAUDE.md CHANGED
@@ -51,6 +51,38 @@ An `AGENTS.md` file in the project root with:
51
51
 
52
52
  Generic procedures live in `docs/procedures/` in this toolkit. Projects can override any procedure by placing a file with the same name at `docs/procedures/` in their own root. Agents check the project first, then fall back to the toolkit.
53
53
 
54
+ ## Gate Protocol — MANDATORY RULES
55
+
56
+ These rules apply in every session, without exception.
57
+
58
+ ### Launching the Project Manager
59
+
60
+ **Always pass `run_in_background: false` when spawning the `project-manager` agent.**
61
+
62
+ Running the PM in the background leaves the main loop free to act independently. This creates two parallel execution paths that will conflict. The PM must block the main loop until it reaches a gate and returns.
63
+
64
+ ### While the PM is running
65
+
66
+ **Do nothing.** No file reads "to prepare", no file writes "to accelerate", no implementation "because it seems stuck". The only permitted actions are:
67
+
68
+ - Receiving gate notifications and presenting them to the user
69
+ - Responding to the user's status questions ("still running")
70
+ - Sending messages to the PM via SendMessage if it is genuinely blocked and the user asks to unblock it
71
+
72
+ If the PM produces relay agents that appear to do nothing useful, that is noise — not a signal that the PM is stuck. Wait.
73
+
74
+ ### Gate notifications are hard stops
75
+
76
+ When any gate notification arrives (Gate 1, Gate 2, Findings Gate, or any **HARD STOP** in any agent output):
77
+
78
+ 1. Stop immediately — even if mid-turn
79
+ 2. Present the full gate content to the user
80
+ 3. Wait for explicit written approval before touching any file or spawning any agent
81
+
82
+ This applies even if the PM appears stuck, in a relay loop, or the gate arrives while another tool call is in progress.
83
+
84
+ ---
85
+
54
86
  ## Skills (user-invocable, in `.claude/skills/`)
55
87
 
56
88
  ### Feature Delivery
@@ -90,6 +122,8 @@ Generic procedures live in `docs/procedures/` in this toolkit. Projects can over
90
122
  | Command | Purpose |
91
123
  |---------|---------|
92
124
  | `/assessment-status <prefix>` | Reports presence/state of all assessment artifacts (assessments, interventions, approvals, issues register) |
125
+ | `/next-intervention [prefix]` | Finds the next un-actioned flagged intervention and suggests the `/define-feature` invocation to start on it |
126
+ | `/check-interventions [prefix]` | Full reconciliation table: every intervention cross-referenced against the Index, on-disk files, and existing feature folders |
93
127
 
94
128
  ## Agents (spawnable subagents, in `.claude/agents/`)
95
129
 
@@ -114,7 +148,7 @@ Generic procedures live in `docs/procedures/` in this toolkit. Projects can over
114
148
 
115
149
  | Agent | subagent_type | Purpose |
116
150
  |-------|---------------|---------|
117
- | Assessment Manager | `assessment-manager` | Orchestrates the full assessment + remediation pipeline |
151
+ | Assessment Manager | `assessment-manager` | Orchestrates the assessment pipeline: parallel assessment → intervention docs → approval gate → effort/token estimates → summary |
118
152
  | Generic Software Assessment | `generic-software-assessment` | Broad quality analysis across architecture, security, testability, observability, DevOps |
119
153
  | Intervention Documentation Standard | `intervention-documentation-standard` | Generates structured, self-contained intervention documents from assessment findings |
120
154
  | God Class Decomposition | `god-class-decomposition` | Safe incremental decomposition of oversized classes and methods |
@@ -16,15 +16,19 @@ Show the user a summary of the generated documents:
16
16
 
17
17
  ### Step 2 — Request explicit sign-off
18
18
 
19
- Use `AskUserQuestion` with this exact phrasing:
19
+ Output the following hard-stop message and **wait for a text reply from the user**. Do NOT use `AskUserQuestion` — it cannot be answered through the agent relay chain.
20
20
 
21
- > **"Please review the documents above and choose one of the options below.
22
- > The pipeline CANNOT continue until you make a selection."**
21
+ ```
22
+ ⛔ GATE 1 — DOCS APPROVAL — HARD STOP
23
+
24
+ Please review the documents above and reply with one of:
23
25
 
24
- Options:
25
- - **"Approve — proceed to Work Breakdown"**
26
- - **"Request changes"** — describe what to change; the pipeline re-runs affected agents, re-validates, and returns here (max 2 revision cycles)
27
- - **"Approve with notes"** — accepted with comments recorded in the approval file
26
+ "Approve — proceed to Work Breakdown"
27
+ "Request changes: <describe what to change>"
28
+ "Approve with notes: <your comments>"
29
+
30
+ The pipeline CANNOT continue until you reply directly.
31
+ ```
28
32
 
29
33
  ### Step 3 — Write approval record BEFORE continuing
30
34
 
@@ -81,15 +85,19 @@ Show key metrics:
81
85
 
82
86
  ### Step 3 — Request explicit sign-off
83
87
 
84
- Use `AskUserQuestion`:
88
+ Output the following hard-stop message and **wait for a text reply from the user**. Do NOT use `AskUserQuestion` — it cannot be answered through the agent relay chain.
85
89
 
86
- > **"Please review the Work Breakdown above and choose one of the options below.
87
- > Implementation CANNOT start until you approve."**
90
+ ```
91
+ ⛔ GATE 2 — WORK BREAKDOWN APPROVAL — HARD STOP
92
+
93
+ Please review the Work Breakdown above and reply with one of:
88
94
 
89
- Options:
90
- - **"Approve — start implementation"**
91
- - **"Request changes"** — re-run `generate-work-breakdown` with feedback (max 2 cycles)
92
- - **"Approve with notes"** — accepted with comments recorded
95
+ "Approve — start implementation"
96
+ "Request changes: <describe what to change>"
97
+ "Approve with notes: <your comments>"
98
+
99
+ Implementation CANNOT start until you reply directly.
100
+ ```
93
101
 
94
102
  ### Step 4 — Update approval record BEFORE starting implementation
95
103