thachvd-kit 1.0.35 → 1.0.37

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
@@ -162,4 +162,14 @@ npm test
162
162
  npm run release:verify
163
163
  ```
164
164
 
165
- Release only from a clean, verified, pushed `main` branch. `npm publish` requires valid npm authentication and any configured 2FA code.
165
+ Release only from a clean, verified, pushed `main` branch. `npm publish` requires valid npm authentication and any configured 2FA code.
166
+
167
+ ## Native Workflow Skills
168
+
169
+ The workflow layer combines Matt Pocock's planning and implementation skills with thachvd-kit's bundled native skills. `thachvd-kit setup` and `thachvd-kit skills install` install the native set to both `.agents/skills/` and `.claude/skills/`.
170
+
171
+ - `/using-git-worktrees` is opt-in workspace isolation; an explicit choice to work on the current branch always wins.
172
+ - `/subagent-driven-development` is an alternative executor to `/implement` for plans with multiple relatively independent tasks. It uses bundled cross-platform Node entrypoints on Windows and falls back to `/implement` when subagent dispatch is unavailable.
173
+ - `/finishing-a-development-branch` verifies and hands off a branch, cleaning only manually managed project-local worktrees safely.
174
+
175
+ `thachvd-kit skills update` refreshes native skills from bundled repository copies and never fetches Superpowers at runtime. See `THIRD_PARTY_NOTICES.md` for recorded upstream provenance.
@@ -0,0 +1,49 @@
1
+ # Third-Party Notices
2
+
3
+ ## Superpowers
4
+
5
+ Repository: https://github.com/obra/superpowers
6
+ Upstream commit: `5bf4e78011075bcfc0dc295f0724994cd123ee71`
7
+
8
+ Portions of the worktree and subagent-driven development workflows are derived from:
9
+
10
+ - `skills/using-git-worktrees/SKILL.md`
11
+ - `skills/subagent-driven-development/`
12
+ - `skills/requesting-code-review/code-reviewer.md`
13
+ - `skills/finishing-a-development-branch/SKILL.md`
14
+
15
+ The vendored source is retained for comparison with the recorded upstream commit. Adapted Windows/runtime entrypoints are documented in the native skill directory and do not replace the upstream source scripts.
16
+
17
+ Copyright (c) 2025 Jesse Vincent
18
+
19
+ MIT License
20
+
21
+ Permission is hereby granted, free of charge, to any person obtaining a copy
22
+ of this software and associated documentation files (the "Software"), to deal
23
+ in the Software without restriction, including without limitation the rights
24
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25
+ copies of the Software, and to permit persons to whom the Software is
26
+ furnished to do so, subject to the following conditions:
27
+
28
+ The above copyright notice and this permission notice shall be included in all
29
+ copies or substantial portions of the Software.
30
+
31
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
37
+ SOFTWARE.
38
+
39
+ ### Vendoring maintenance
40
+
41
+ To refresh these files deliberately:
42
+
43
+ 1. Fetch the latest `obra/superpowers` repository.
44
+ 2. Inspect changes to the recorded upstream files and compare them with the recorded SHA.
45
+ 3. Port relevant upstream changes and reapply only the minimal thachvd-kit adaptations.
46
+ 4. Update `skills/upstream.json` and this notice with the new SHA.
47
+ 5. Run the native-skill regression tests and the full release verification.
48
+
49
+ `thachvd-kit skills update` never fetches Superpowers. Runtime updates use the repository-owned vendored copies.
package/bin/cli.js CHANGED
@@ -7,6 +7,7 @@ const prompts = require('prompts');
7
7
  const pc = require('picocolors');
8
8
  const packageJson = require('../package.json');
9
9
  const mattSkills = require('./matt-skills');
10
+ const nativeSkills = require('./native-skills');
10
11
  const {
11
12
  QUALITY_FLOOR_SECTION,
12
13
  AGENT_RULES_SECTION,
@@ -71,7 +72,7 @@ ${pc.bold('Options:')}
71
72
  --no-setup-hook Skip the Claude Code Definition-of-Done Stop hook during setup
72
73
  --no-install-rtk Skip auto-installing rtk via cargo during setup
73
74
  --no-index Skip auto-indexing the repository with codebase-memory-mcp during setup
74
- --no-install-skills Skip installing Matt Pocock skills during setup
75
+ --no-install-skills Skip installing Matt Pocock and thachvd-kit native skills during setup
75
76
  --dry-run Preview a change without writing it (upgrade/global/skills install/skills update)
76
77
  --antigravity-only Limit global to the Antigravity global instructions
77
78
  --codex-only Limit global to the Codex global instructions
@@ -86,10 +87,12 @@ ${pc.bold('What gets generated:')}
86
87
  .agent/docs/ Project context, architecture, workflow, tooling, and durable onboarding prompt
87
88
 
88
89
  ${pc.bold('Workflow:')}
89
- Matt Pocock's promoted skills (installed under .agents/skills/) are the
90
- workflow layer. Use the matching skill when a specialized workflow is
91
- useful; if unsure which one, use /ask-matt. Do not invoke a heavyweight
92
- skill for a localized, obvious change.
90
+ Matt Pocock's promoted skills plus thachvd-kit's native worktree/SDD skills
91
+ form the workflow layer. Use /using-git-worktrees only when isolation is
92
+ intended; choose /implement or /subagent-driven-development as alternative
93
+ executors for a plan, then finish with /code-review and
94
+ /finishing-a-development-branch.
95
+ Unsure which planning or implementation skill fits? Use /ask-matt.
93
96
 
94
97
  ${pc.bold('Tip:')}
95
98
  Run thachvd-kit setup to install the promoted skill set and configure
@@ -1018,7 +1021,7 @@ ${QUALITY_FLOOR_SECTION}
1018
1021
  function generateWorkflowDoc() {
1019
1022
  return `# Agent Workflow
1020
1023
 
1021
- This project uses Matt Pocock's promoted skills (installed under .agents/skills/ by \`thachvd-kit setup\`) as the workflow layer. thachvd-kit only provides project context, the skill manifest, and integration setup; it is not a second workflow engine.
1024
+ This project uses Matt Pocock's promoted skills plus thachvd-kit's native workflow skills (installed under .agents/skills/ and .claude/skills/ by \`thachvd-kit setup\`) as the workflow layer. Native skills add opt-in workspace isolation, subagent-driven execution, and branch finishing; they do not replace Matt's planning, implementation, testing, or review skills.
1022
1025
 
1023
1026
  ## Before Every Task
1024
1027
 
@@ -1035,8 +1038,8 @@ This project uses Matt Pocock's promoted skills (installed under .agents/skills/
1035
1038
  | Question or research only | direct answer or research | no product-code edits |
1036
1039
  | Clear, localized change | fast path (no skill) | inspect -> edit -> focused verify |
1037
1040
  | Ambiguous feature or design | /grill-with-docs, then optionally /to-spec | durable contract before implementation when useful |
1038
- | Normal feature | /grill-with-docs -> /to-spec -> /implement | spec agreed before implementation |
1039
- | Large feature needing decomposition | /grill-with-docs -> /to-spec -> /to-tickets -> /implement | tickets agreed before implementation |
1041
+ | Normal feature | /grill-with-docs -> /to-spec -> choose workspace -> /implement | spec agreed before implementation |
1042
+ | Large feature needing decomposition | /grill-with-docs -> /to-spec -> /to-tickets -> choose workspace -> executor | tickets agreed before implementation |
1040
1043
  | Huge, multi-session uncertainty | /wayfinder | shared decision map before implementation |
1041
1044
  | Bug or failing behavior | /diagnosing-bugs | reproduce -> root cause -> regression protection -> fix -> verify |
1042
1045
  | Test-driven implementation | /tdd | red -> green -> refactor per slice |
@@ -1047,7 +1050,9 @@ Not sure which row applies? Run /ask-matt instead of guessing.
1047
1050
 
1048
1051
  ## Standard Feature Flow
1049
1052
 
1050
- /grill-with-docs -> /to-spec -> (/to-tickets for large work) -> /implement (with /tdd where it helps) -> /code-review.
1053
+ /grill-with-docs -> /to-spec -> (/to-tickets for large work) -> choose workspace -> choose executor (/implement or /subagent-driven-development) -> /code-review -> /finishing-a-development-branch.
1054
+
1055
+ Choose the current branch/workspace when the user explicitly wants to work there. Use /using-git-worktrees only when isolation is requested or appropriate workspace isolation already exists. SDD is for plans with multiple relatively independent tasks and falls back to /implement when subagent dispatch is unavailable; it never forces a worktree.
1051
1056
 
1052
1057
  ${FAST_PATH_SECTION}
1053
1058
 
@@ -1063,13 +1068,13 @@ ${FAST_PATH_SECTION}
1063
1068
  function generateGettingStartedDoc() {
1064
1069
  return `# Getting Started
1065
1070
 
1066
- thachvd-kit creates project context. Matt Pocock's promoted skills own the development workflow.
1071
+ thachvd-kit creates project context. Matt Pocock's promoted and thachvd-kit native skills own the development workflow.
1067
1072
 
1068
1073
  ## Setup
1069
1074
 
1070
1075
  1. Run \`thachvd-kit init\` in the repository.
1071
1076
  2. Open or print \`.agent/docs/index-project-prompt.md\` with \`thachvd-kit prompt\`.
1072
- 3. Run \`thachvd-kit setup\` (installs the promoted skill set by default; add \`--no-install-skills\` to skip) and RTK.
1077
+ 3. Run \`thachvd-kit setup\` (installs promoted and native skill sets by default; add \`--no-install-skills\` to skip) and RTK.
1073
1078
  4. Inside the AI client, run \`/setup-matt-pocock-skills\` once to configure the issue tracker, triage labels, and doc layout.
1074
1079
  5. Run \`thachvd-kit doctor\` and restart the AI client.
1075
1080
 
@@ -1116,9 +1121,9 @@ function generateToolingDoc(data) {
1116
1121
 
1117
1122
  Run \`thachvd-kit doctor\` to check the current machine.
1118
1123
 
1119
- ## Matt Pocock Skills
1124
+ ## Matt Pocock Skills + Native Workflow Skills
1120
1125
 
1121
- Matt Pocock's promoted engineering and productivity skills are the workflow layer for this project, installed project-locally under \`.agents/skills/\` (never globally):
1126
+ Matt Pocock's promoted engineering and productivity skills are installed project-locally under \`.agents/skills/\` (never globally). thachvd-kit also bundles native workflow skills to both \`.agents/skills/\` and \`.claude/skills/\`:
1122
1127
 
1123
1128
  - Install the promoted set: \`thachvd-kit skills install\` (\`--dry-run\` to preview the command without running it)
1124
1129
  - Check what is installed: \`thachvd-kit skills check\` (read-only)
@@ -1126,6 +1131,8 @@ Matt Pocock's promoted engineering and productivity skills are the workflow laye
1126
1131
  - The full manifest lives in \`bin/matt-skills.js\` (\`PROMOTED_SKILLS\`); it mirrors upstream's \`skills/engineering/\` + \`skills/productivity/\` catalog and never includes \`in-progress\`, \`misc\`, or \`deprecated\` skills.
1127
1132
  - After the first install, run \`/setup-matt-pocock-skills\` once inside the AI client to configure the issue tracker, triage labels, and generated docs location. thachvd-kit does not simulate that skill.
1128
1133
  - Unsure which skill fits a task? Run \`/ask-matt\`.
1134
+ - Native skills: \`/using-git-worktrees\` (opt-in isolation), \`/subagent-driven-development\` (alternative executor for multi-task plans), and \`/finishing-a-development-branch\`.
1135
+ - SDD's upstream shell scripts are retained for provenance; cross-platform Node entrypoints are used by the adapted workflow on Windows.
1129
1136
 
1130
1137
  ${TOOL_ROUTING_SECTION}
1131
1138
 
@@ -1213,6 +1220,17 @@ function runDoctor() {
1213
1220
  }
1214
1221
  const setupSkillOk = mattSkills.isSkillInstalled(targetDir, mattSkills.SETUP_SKILL_NAME);
1215
1222
  console.log(` ${setupSkillOk ? pc.green('OK') : pc.yellow('WARN')} ${mattSkills.SETUP_SKILL_NAME} available`);
1223
+ console.log(`\n${pc.bold('thachvd-kit native skills')}`);
1224
+ const nativeStatus = nativeSkills.checkNativeSkills(targetDir);
1225
+ for (const name of nativeSkills.NATIVE_SKILLS) {
1226
+ const status = nativeStatus.skills[name];
1227
+ console.log(` ${status.agents && status.claude ? pc.green('OK') : pc.yellow('WARN')} ${name} (.agents: ${status.agents ? 'installed' : 'missing'}, .claude: ${status.claude ? 'installed' : 'missing'})`);
1228
+ }
1229
+ for (const surface of nativeSkills.NATIVE_SKILL_SURFACES) {
1230
+ const support = nativeStatus.surfaces[surface.id].support;
1231
+ const status = support.missing.length === 0 ? pc.green('OK') : pc.yellow('WARN');
1232
+ console.log(` ${status} support files (${surface.relativeDir}: ${support.missing.length === 0 ? 'installed' : 'missing'})`);
1233
+ }
1216
1234
  const contextMdExists = fs.existsSync(path.join(targetDir, 'CONTEXT.md'));
1217
1235
  const docsAdrExists = fs.existsSync(path.join(targetDir, 'docs', 'adr'));
1218
1236
  console.log(` ${pc.dim('-')} CONTEXT.md ${contextMdExists ? 'detected' : 'not created yet (informational only)'}`);
@@ -1243,8 +1261,18 @@ async function runSetup(args) {
1243
1261
  console.log(` ${skillsMarker} ${skillsResult.message}`);
1244
1262
  }
1245
1263
  printMattSkillsSetupReminder();
1264
+ console.log(`\n${pc.bold('thachvd-kit native skills')}`);
1265
+ const nativeStatus = nativeSkills.checkNativeSkills(targetDir);
1266
+ if (nativeStatus.allInstalled) {
1267
+ console.log(` ${pc.green('OK')} native skill set already installed (${nativeStatus.total}/${nativeStatus.total})`);
1268
+ } else {
1269
+ const nativeResult = nativeSkills.installNativeSkills(targetDir);
1270
+ const nativeMarker = nativeResult.ok ? pc.green('OK') : pc.yellow('WARN');
1271
+ console.log(` ${nativeMarker} ${nativeResult.message}`);
1272
+ }
1246
1273
  } else {
1247
1274
  console.log(`${pc.bold('Matt Pocock skills')}\n ${pc.dim('skipped (--no-install-skills)')}`);
1275
+ console.log(`${pc.bold('thachvd-kit native skills')}\n ${pc.dim('skipped (--no-install-skills)')}`);
1248
1276
  }
1249
1277
  if (!skipMcpSetup) {
1250
1278
  console.log(pc.bold('MCP setup'));
@@ -1527,37 +1555,60 @@ function runSkillsCommand(args) {
1527
1555
 
1528
1556
  if (subcommand === 'install') {
1529
1557
  console.log(pc.bold(pc.cyan('thachvd-kit skills install')));
1530
- const result = mattSkills.installSkills(targetDir, { dryRun });
1531
- console.log(` ${result.ok ? pc.green('OK') : pc.yellow('WARN')} ${result.message}`);
1532
- if (!dryRun && result.ok) printMattSkillsSetupReminder();
1533
- if (!result.ok) process.exitCode = 1;
1558
+ const mattResult = mattSkills.installSkills(targetDir, { dryRun });
1559
+ console.log(`\n${pc.bold('Matt Pocock skills')}`);
1560
+ console.log(` ${mattResult.ok ? pc.green('OK') : pc.yellow('WARN')} ${mattResult.message}`);
1561
+ const nativeResult = nativeSkills.installNativeSkills(targetDir, { dryRun });
1562
+ console.log(`\n${pc.bold('thachvd-kit native skills')}`);
1563
+ if (dryRun) for (const item of nativeResult.operations) console.log(` ${pc.dim('would copy')} ${item.relativePath} -> ${item.surface}`);
1564
+ console.log(` ${nativeResult.ok ? pc.green('OK') : pc.yellow('WARN')} ${nativeResult.message}`);
1565
+ if (!dryRun && mattResult.ok) printMattSkillsSetupReminder();
1566
+ if (!mattResult.ok || !nativeResult.ok) process.exitCode = 1;
1534
1567
  return;
1535
1568
  }
1536
1569
 
1537
1570
  if (subcommand === 'check') {
1538
1571
  console.log(pc.bold(pc.cyan('thachvd-kit skills check')));
1539
1572
  const status = mattSkills.checkSkills(targetDir);
1573
+ console.log(`\n${pc.bold('Matt Pocock skills')}`);
1540
1574
  for (const name of mattSkills.PROMOTED_SKILLS) {
1541
1575
  const installed = status.installed.includes(name);
1542
1576
  console.log(` ${installed ? pc.green('OK') : pc.yellow('WARN')} ${name}`);
1543
1577
  }
1544
1578
  console.log(`\n ${status.installed.length}/${status.total} promoted skills installed in ${mattSkills.SKILLS_RELATIVE_DIR}`);
1545
- if (status.missing.length > 0) {
1546
- console.log(` Run: ${pc.bold('thachvd-kit skills install')}`);
1579
+ if (status.missing.length > 0) console.log(` Run: ${pc.bold('thachvd-kit skills install')}`);
1580
+ console.log(`\n${pc.bold('thachvd-kit native skills')}`);
1581
+ const nativeStatus = nativeSkills.checkNativeSkills(targetDir);
1582
+ for (const name of nativeSkills.NATIVE_SKILLS) {
1583
+ const item = nativeStatus.skills[name];
1584
+ console.log(` ${item.agents && item.claude ? pc.green('OK') : pc.yellow('WARN')} ${name}`);
1585
+ console.log(` .agents: ${item.agents ? 'installed' : 'missing'}`);
1586
+ console.log(` .claude: ${item.claude ? 'installed' : 'missing'}`);
1587
+ }
1588
+ for (const surface of nativeSkills.NATIVE_SKILL_SURFACES) {
1589
+ const support = nativeStatus.surfaces[surface.id].support;
1590
+ const status = support.missing.length === 0 ? pc.green('OK') : pc.yellow('WARN');
1591
+ console.log(` ${status} support files (${surface.relativeDir}: ${support.missing.length === 0 ? 'installed' : 'missing'})`);
1547
1592
  }
1593
+ if (!nativeStatus.allInstalled) console.log(` Run: ${pc.bold('thachvd-kit skills install')}`);
1548
1594
  return;
1549
1595
  }
1550
1596
 
1551
1597
  if (subcommand === 'update') {
1552
1598
  console.log(pc.bold(pc.cyan('thachvd-kit skills update')));
1553
1599
  const result = mattSkills.updateSkills(targetDir, { dryRun });
1600
+ console.log(`\n${pc.bold('Matt Pocock skills')}`);
1554
1601
  if (dryRun) {
1555
1602
  for (const item of result.results) console.log(` ${pc.dim('would run')} ${item.command}`);
1556
1603
  } else {
1557
1604
  for (const item of result.results) console.log(` ${item.ok ? pc.green('OK') : pc.yellow('WARN')} ${item.name}`);
1558
1605
  }
1559
1606
  console.log(`\n ${result.ok ? pc.green('OK') : pc.yellow('WARN')} ${result.message}`);
1560
- if (!result.ok) process.exitCode = 1;
1607
+ const nativeResult = nativeSkills.updateNativeSkills(targetDir, { dryRun });
1608
+ console.log(`\n${pc.bold('thachvd-kit native skills')}`);
1609
+ if (dryRun) for (const item of nativeResult.operations) console.log(` ${pc.dim('would copy')} ${item.relativePath} -> ${item.surface}`);
1610
+ console.log(` ${nativeResult.ok ? pc.green('OK') : pc.yellow('WARN')} ${nativeResult.message}`);
1611
+ if (!result.ok || !nativeResult.ok) process.exitCode = 1;
1561
1612
  return;
1562
1613
  }
1563
1614
 
@@ -1712,12 +1763,12 @@ async function main() {
1712
1763
  - ${pc.bold('.agent/docs/index-project-prompt.md')} durable onboarding prompt
1713
1764
 
1714
1765
  ${pc.bold('MCP/tooling setup:')}
1715
- - Matt Pocock's promoted skills (.agents/skills/) are the workflow layer
1716
- - Run ${pc.bold('thachvd-kit setup')} to install them and configure codebase-memory MCP and recommended RTK
1766
+ - Matt Pocock's promoted and thachvd-kit native skills are the workflow layer
1767
+ - Run ${pc.bold('thachvd-kit setup')} to install both groups and configure codebase-memory MCP and recommended RTK
1717
1768
 
1718
1769
  ${pc.bold('Next steps:')}
1719
1770
  1. Run ${pc.bold('thachvd-kit prompt')} and paste the saved prompt into your AI editor
1720
- 2. Run ${pc.bold('thachvd-kit setup')} to install the promoted skill set and RTK
1771
+ 2. Run ${pc.bold('thachvd-kit setup')} to install promoted and native skill sets and RTK
1721
1772
  3. Run ${pc.bold('thachvd-kit doctor')} to verify the machine
1722
1773
  4. Re-run ${pc.bold('thachvd-kit prompt')} whenever you need the onboarding prompt again
1723
1774
 
@@ -1732,4 +1783,3 @@ main().catch(err => {
1732
1783
  console.error(pc.red('\nError during init:'), err);
1733
1784
  process.exit(1);
1734
1785
  });
1735
-