thachvd-kit 1.0.26 → 1.0.28

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/bin/cli.js CHANGED
@@ -144,23 +144,34 @@ ${pc.bold('What gets generated:')}
144
144
  ~/.codex/skills/ Selected Codex skills copied to global user dir (shows in $ menu)
145
145
  .claude/skills/ Selected Claude Code project skills copied from .agent/skills
146
146
 
147
- ${pc.bold('Workflow guide:')}
148
- Idea is fuzzy /brainstorm Explore options, tradeoffs, and recommended direction
149
- New app from scratch /create Turn an app idea into plan + implementation flow
150
- Feature is clear /plan Create docs/PLAN-*.md first, no code yet
151
- Existing app update /enhance Add or change a feature in an existing codebase
152
- Bug or failing behavior /debug Investigate symptoms, hypotheses, root cause, fix
147
+ ${pc.bold('Workflow guide:')}
148
+ Every task /prompts:task Classify request and select workflow, skill, and agent
149
+ Small obvious fix /prompts:simple Fast path; skips spec/plan/review but still verifies
150
+ Idea is fuzzy /brainstorm Explore options, tradeoffs, and recommended direction
151
+ Scope needs a contract /prompts:spec Define requirements and acceptance criteria; no code yet
152
+ New app from scratch /create Turn an app idea into plan + implementation flow
153
+ Feature is clear /plan Create docs/PLAN-*.md first, no code yet
154
+ Existing app update /enhance Add or change a feature in an existing codebase
155
+ Bug or failing behavior /prompts:debug Investigate symptoms, root cause, fix
153
156
  UI / UX work ui-ux-pro-max, frontend-specialist, $frontend-design, $webapp-testing
154
157
  Run or add tests /test Generate tests, run tests, check coverage
155
158
  Preview locally /preview Start, stop, restart, or health-check dev server
156
- Deploy / infra /deploy Release, hosting, Docker, cloud, environment setup
157
- Project state /status Summarize stack, progress, preview, pending work
158
- Multi-domain work /orchestrate Coordinate frontend, backend, data, security, QA
159
-
160
- ${pc.bold('Common explicit skill prompts:')}
161
- Use /brainstorm for this feature idea before planning.
162
- Use /plan for this feature; do not write code yet.
163
- Use /enhance to implement this planned feature.
159
+ Deploy / infra /deploy Release, hosting, Docker, cloud, environment setup
160
+ Pre-merge review /review Run the five-axis review before calling work complete
161
+ Npm package release /prompts:release Verify, version, tag, publish, and verify the package
162
+ Project state /status Summarize stack, progress, preview, pending work
163
+ Multi-domain work /orchestrate Coordinate frontend, backend, data, security, QA
164
+
165
+ ${pc.bold('Common explicit skill prompts:')}
166
+ In Codex, use /prompts:task to route this request before editing.
167
+ In Codex, use /prompts:simple for a one-file fix with no behavior or contract change.
168
+ Use /brainstorm for this feature idea before planning.
169
+ In Codex, use /prompts:spec when requirements or scope need an explicit contract.
170
+ Use /plan for this feature; do not write code yet.
171
+ Use /enhance to implement this planned feature.
172
+ In Codex, use /prompts:debug for this failing behavior and find the root cause before editing.
173
+ Use /review before claiming this feature/refactor complete.
174
+ In Codex, use /prompts:release for npm versioning and publishing.
164
175
  Use $clean-code before editing this module.
165
176
  Use $systematic-debugging to investigate this bug.
166
177
  Use $webapp-testing to verify the UI with Playwright.
@@ -906,14 +917,40 @@ Shared operating instructions for Codex, Antigravity, Claude Code, and Cursor.
906
917
 
907
918
  If any \`.agent/docs/*.md\` file still contains \`TODO: refine\`, update the docs by scanning the project before making product code changes.
908
919
 
909
- ## Task Flow
910
-
911
- - Questions and analysis: answer directly, cite relevant files when useful, and do not edit code.
912
- - Simple fix: inspect dependencies, make the smallest change, run focused verification.
913
- - Feature or refactor: define success criteria, make a short plan, implement, then verify.
914
- - Multi-domain work: use \`.agent/workflows/orchestrate.md\` and route to the relevant specialist docs.
915
- - UI work: read \`.agent/agents/frontend-specialist.md\` and applicable design skills before editing.
916
-
920
+ ## Task Flow
921
+
922
+ Route every task before editing. In Codex, use \`/prompts:task <request>\`; other clients can read the matching file under \`.agent/workflows/\`.
923
+
924
+ - Questions and analysis: answer directly, cite relevant files when useful, and do not edit code.
925
+ - Simple fix: use Codex \`/prompts:simple <request>\` only for one-file, unambiguous changes with no behavior or contract change.
926
+ - Bug or failing behavior: use Codex \`/prompts:debug <symptom>\` and follow the evidence-first root-cause flow.
927
+ - Feature or refactor: use \`/brainstorm\` for discovery, Codex \`/prompts:spec\` for ambiguous or multi-file scope, then \`/plan\`, wait for approval, implement, test, and \`/review\`.
928
+ - Pre-merge review: use \`/review\` even when the implementation itself was done by another client or member.
929
+ - Release or npm publish: use Codex \`/prompts:release\`; release work never uses the simple fast path.
930
+ - Multi-domain work: use \`.agent/workflows/orchestrate.md\` and route to the relevant specialist docs.
931
+ - UI work: read \`.agent/agents/frontend-specialist.md\` and applicable design skills before editing.
932
+
933
+ ### Fast Path (Codex \`/prompts:simple\`)
934
+
935
+ The fast path intentionally bypasses only Spec, Plan, and the feature/refactor Review gate for a trivial change. It never bypasses inspection, focused verification, or reporting evidence. The agent must state this protocol before editing:
936
+
937
+ \`\`\`text
938
+ FAST_PATH: simple-fix
939
+ REASON: [why the change is one-file and unambiguous]
940
+ SCOPE: [file or narrow area]
941
+ \`\`\`
942
+
943
+ If the scope expands, stop and re-route with Codex \`/prompts:task\`. Do not silently skip gates for work that changes behavior, APIs, schemas, security, CI, dependencies, workflows, or release state.
944
+
945
+ ### Gated Flow (feature or refactor)
946
+
947
+ 1. **Spec** — run \`.agent/workflows/spec.md\` when scope is ambiguous, touches multiple files, or would take more than ~30 minutes. Skip only for single-line/self-contained fixes. Stop at its exit criteria and wait for human confirmation before moving on.
948
+ 2. **Plan** — run \`.agent/workflows/plan.md\` (project-planner agent, no code writing). Wait for explicit user approval of the plan file before implementing.
949
+ 3. **Implement** — smallest coherent change per the approved plan, with focused tests for changed behavior.
950
+ 4. **Review** — run \`.agent/workflows/review.md\` (five-axis review) before the change is considered done. All 🔴 BLOCKING items must be resolved or explicitly accepted with rationale.
951
+
952
+ A feature/refactor task is not "done" until step 4's exit criteria are met — passing tests alone does not satisfy the gate. Simple fixes use the explicit Codex \`/prompts:simple\` fast path above. See \`.agent/docs/getting-started.md\` for the complete route guide.
953
+
917
954
  ## Skill Loading
918
955
 
919
956
  - Treat \`.agent/skills/\` as the shared source of truth for all kit skills.
@@ -968,7 +1005,7 @@ Read AGENTS.md first, then follow the shared docs under .agent/docs/.
968
1005
  }
969
1006
 
970
1007
  function generateSharedCursorrules(data) {
971
- return `# Cursor Rules
1008
+ return `# Cursor Rules
972
1009
 
973
1010
  This repository uses AGENTS.md as the shared cross-agent entry file. Follow the instructions in AGENTS.md and keep Cursor-specific notes here only when they cannot apply to Codex, Antigravity, or Claude Code.
974
1011
 
@@ -976,8 +1013,8 @@ Read AGENTS.md first, then follow the shared docs under .agent/docs/.
976
1013
 
977
1014
  ---
978
1015
 
979
- ${generateSharedAgentsMd(data)}
980
- `;
1016
+ ${generateSharedAgentsMd(data).trimEnd()}
1017
+ `;
981
1018
  }
982
1019
 
983
1020
  function resolveCommands(data) {
@@ -1148,9 +1185,23 @@ function generateWorkflowDoc() {
1148
1185
 
1149
1186
  1. Read AGENTS.md.
1150
1187
  2. Read .agent/docs/project.md.
1151
- 3. Classify the request: question, survey, simple fix, feature, refactor, debug, UI, security, or deploy.
1152
- 4. Read only the relevant docs under .agent/agents, .agent/skills, .claude/skills, and .agent/workflows.
1153
- 5. Check if MCP servers (like \`codegraph\`) are active/available and prioritize using them as the primary entry point to search and locate files, symbols, and code blocks.
1188
+ 3. Route the request with Codex \`/prompts:task <request>\` when the path is not obvious; otherwise read \`.agent/workflows/task.md\` directly.
1189
+ 4. Read only the relevant docs under .agent/agents, .agent/skills, .claude/skills, and .agent/workflows.
1190
+ 5. Check if MCP servers (like \`codegraph\`) are active/available and prioritize using them as the primary entry point to search and locate files, symbols, and code blocks.
1191
+
1192
+ ## Route Matrix
1193
+
1194
+ | Situation | Command | Workflow / gate |
1195
+ |---|---|---|
1196
+ | Question or analysis only | direct answer | no edits |
1197
+ | One obvious local fix | Codex \`/prompts:simple\` | \`.agent/workflows/simple.md\`, fast-path |
1198
+ | Bug, regression, failing test, or unknown error | Codex \`/prompts:debug\` | \`.agent/workflows/debug.md\`, evidence-first |
1199
+ | New behavior, multi-file change, or unclear scope | \`/brainstorm\` -> Codex \`/prompts:spec\` when needed -> \`/plan\` | spec/plan approval -> implement -> review |
1200
+ | Pre-merge review | \`/review\` | \`.agent/workflows/review.md\`, five-axis |
1201
+ | npm version, tag, publish, or deployment | Codex \`/prompts:release\` | \`.agent/workflows/release.md\`, release gate |
1202
+ | Several specialist domains | \`/orchestrate\` | plan -> approval -> parallel work -> integration verify |
1203
+
1204
+ If a task is not clearly simple, use the standard flow. Never use the fast path for behavior, API, schema, security, CI, dependency, workflow, or release changes.
1154
1205
 
1155
1206
  ## Skill Selection
1156
1207
 
@@ -1165,6 +1216,16 @@ function generateWorkflowDoc() {
1165
1216
 
1166
1217
  ## Implementation Flow
1167
1218
 
1219
+ For Codex \`/prompts:simple\` fixes, state the fast-path decision before editing:
1220
+
1221
+ \`\`\`text
1222
+ FAST_PATH: simple-fix
1223
+ REASON: [why Spec/Plan/Review are not needed]
1224
+ SCOPE: [file or narrow area]
1225
+ \`\`\`
1226
+
1227
+ Then:
1228
+
1168
1229
  1. State assumptions and success criteria when the task is not trivial.
1169
1230
  2. Inspect dependent files before editing.
1170
1231
  3. Make the smallest coherent change.
@@ -1172,6 +1233,24 @@ function generateWorkflowDoc() {
1172
1233
  5. Run verification (prioritize using Playwright MCP for web/UI changes to automate verification and capture screenshots).
1173
1234
  6. Summarize changed files and verification evidence.
1174
1235
 
1236
+ For bugs, use Codex \`/prompts:debug\` with \`$systematic-debugging\`, the \`debugger\` agent, and \`testing-patterns\`: reproduce, isolate the root cause, add regression protection, make the smallest fix, and verify.
1237
+
1238
+ For features or refactors, this flow runs *inside* the gated flow defined in AGENTS.md (spec -> plan -> implement -> review) — steps 3-5 above are the "Implement" phase, and step 6 is not a substitute for the mandatory \`.agent/workflows/review.md\` gate.
1239
+
1240
+ ## Definition of Done (feature or refactor)
1241
+
1242
+ A feature/refactor task is only complete when all of the following hold — not when code compiles or tests pass:
1243
+
1244
+ The Spec checkbox may be skipped only when the documented Codex \`/prompts:simple\` fast-path protocol is stated and its criteria are met.
1245
+
1246
+ - [ ] \`.agent/workflows/spec.md\` exit criteria met (or explicitly skipped as a trivial/self-contained change)
1247
+ - [ ] \`.agent/workflows/plan.md\` produced a plan file, approved by the user
1248
+ - [ ] Tests added/updated for the changed behavior and passing
1249
+ - [ ] \`.agent/workflows/review.md\` five-axis review completed with all 🔴 BLOCKING items resolved or accepted with rationale
1250
+ - [ ] Changed files and verification evidence summarized to the user
1251
+
1252
+ Do not report a feature/refactor task as done if any box above is unchecked — say explicitly which gate is still open.
1253
+
1175
1254
  ## When To Update Docs
1176
1255
 
1177
1256
  - Update .agent/docs/architecture.md when structure, boundaries, or entry points change.
@@ -1181,6 +1260,102 @@ function generateWorkflowDoc() {
1181
1260
  `;
1182
1261
  }
1183
1262
 
1263
+ function generateGettingStartedDoc() {
1264
+ return `# Getting Started With This Kit
1265
+
1266
+ Read this after \`thachvd-kit init\`. The kit gives every member one entry point, then selects only the process and expertise the task needs.
1267
+
1268
+ ## Client Command Map
1269
+
1270
+ | Client | Task router | Simple fix | Bug fix | Feature spec | Release |
1271
+ |---|---|---|---|---|---|
1272
+ | Codex | \`/prompts:task\` | \`/prompts:simple\` | \`/prompts:debug\` | \`/prompts:spec\` | \`/prompts:release\` |
1273
+ | Antigravity | \`/task\` | \`/simple\` | \`/debug\` | \`/spec\` | \`/release\` |
1274
+ | Claude Code | \`/task\` | \`/simple\` | \`/debug\` | \`/spec\` | \`/release\` |
1275
+ | Cursor | \`/task\` | \`/simple\` | \`/debug\` | \`/spec\` | \`/release\` |
1276
+
1277
+ Codex reads custom prompts from \`~/.codex/prompts\`. Antigravity reads workspace workflows from \`.agent/workflows\`. Claude Code reads project skills from \`.claude/skills/<name>/SKILL.md\`. Cursor reads commands from \`.cursor/commands\`.
1278
+
1279
+ ## Start Every Task With The Router
1280
+
1281
+ In Codex, use \`/prompts:task <request>\` before editing whenever the route is not already obvious. Other clients can read \`.agent/workflows/task.md\` directly. It must produce:
1282
+
1283
+ \`\`\`text
1284
+ ROUTE: question | simple | feature | bug | review | release | multi-domain
1285
+ WORKFLOW: [exact .agent/workflows/<name>.md file]
1286
+ SKILLS: [matching skills, or none]
1287
+ AGENTS: [matching specialist agents, or none]
1288
+ GATE: fast-path | standard
1289
+ NEXT: [the next command or action]
1290
+ \`\`\`
1291
+
1292
+ A workflow is the process and its gates. A skill is the method or checklist. An agent is the specialist role. Chat alone is not a route: the member must select the route and invoke the matching workflow or explicitly choose the question path.
1293
+
1294
+ ## Route Matrix
1295
+
1296
+ | Situation | Command | Gate | Required next step |
1297
+ |---|---|---|---|
1298
+ | Explain, inspect, or brainstorm only | direct answer or \`/brainstorm\` | none | no code until the request becomes actionable |
1299
+ | One obvious local fix | \`/prompts:simple <request>\` in Codex | fast-path | inspect -> edit -> focused verify |
1300
+ | New behavior, multi-file change, unclear scope, or >~30 min | \`/prompts:task\` -> \`/brainstorm\` -> \`/prompts:spec\` when needed -> \`/plan\` | standard | wait for approval before implementation |
1301
+ | Bug, regression, failing test, or unknown error | \`/prompts:debug <symptom>\` in Codex | bug | reproduce -> isolate -> regression test -> fix -> verify |
1302
+ | Pre-merge or independent review | \`/review\` | review | five-axis review; resolve blocking findings |
1303
+ | Version, tag, npm publish, or deployment | \`/prompts:release\` in Codex | release | release checklist; never fast-path |
1304
+ | Frontend + backend + data/security together | \`/orchestrate\` | standard | plan -> approval -> specialist work -> integration verify |
1305
+
1306
+ ## Standard Feature Flow
1307
+
1308
+ The gated sequence is Spec -> Plan -> Implement -> Review: \`/prompts:task\` -> \`/brainstorm\` -> \`/prompts:spec\` when scope is ambiguous or multi-file -> \`/plan\` -> user approves the plan -> implementation -> \`/test\` -> \`/review\` -> final verification -> commit/push.
1309
+
1310
+ The plan is a gate, not a suggestion. Do not start product-code implementation before explicit approval. Load only the relevant specialist agent and skills, such as \`$frontend-design\`, \`$api-design\`, or \`$webapp-testing\`.
1311
+
1312
+ ## Bug Fix Flow
1313
+
1314
+ Use Codex \`/prompts:debug <symptom>\`, not the feature flow, when something is failing or the root cause is unknown:
1315
+
1316
+ 1. Capture the exact symptom, environment, reproduction, and expected result.
1317
+ 2. Inspect the relevant code path with MCP/codegraph when available.
1318
+ 3. Form and test a small number of hypotheses; do not patch by guesswork.
1319
+ 4. Add or update a regression test that fails before the fix when practical.
1320
+ 5. Make the smallest root-cause fix.
1321
+ 6. Run focused tests, then broader verification when the blast radius is shared.
1322
+ 7. Use \`/review\` when the fix touches multiple files, contracts, security, or release behavior.
1323
+
1324
+ Load \`$systematic-debugging\`, the \`debugger\` agent, and \`testing-patterns\` for this route.
1325
+
1326
+ ## Simple Fast Path
1327
+
1328
+ Use Codex \`/prompts:simple <request>\` only when the change is one obvious file, the result is unambiguous, and it changes no behavior, API, schema, security, CI, dependency, workflow, or release contract. Before editing, state:
1329
+
1330
+ \`\`\`text
1331
+ FAST_PATH: simple-fix
1332
+ REASON: [why Spec/Plan/Review are not needed]
1333
+ SCOPE: [file or narrow area]
1334
+ \`\`\`
1335
+
1336
+ This bypasses only Spec, Plan, and the feature/refactor Review gate. It never bypasses inspection, focused verification, or reporting evidence. If the scope expands, stop and re-route with Codex \`/prompts:task\`.
1337
+
1338
+ ## Command And Skill Map
1339
+
1340
+ - \`/brainstorm\`: clarify intent and tradeoffs; no code.
1341
+ - Codex \`/prompts:spec\`: define requirements and acceptance criteria; no code.
1342
+ - \`/plan\`: create an approved implementation plan; no code before approval.
1343
+ - \`/enhance\` or \`/create\`: implement an approved feature with the relevant specialist agent.
1344
+ - Codex \`/prompts:debug\`: systematic root-cause investigation and regression protection.
1345
+ - \`/test\`: add or run tests and assess coverage.
1346
+ - \`/review\`: five-axis review before completion or merge.
1347
+ - Codex \`/prompts:release\`: verify, version, tag, publish, and verify npm output.
1348
+ - \`$clean-code\` and \`$verification-before-completion\`: default implementation hygiene.
1349
+ - \`$webapp-testing\`: browser/UI verification; use Playwright when available.
1350
+
1351
+ ## Enforcement
1352
+
1353
+ Claude Code has a project Stop hook in \`.claude/settings.json\` for standard feature/refactor work. An explicit \`FAST_PATH: simple-fix\` is accepted only when the simple criteria are met; it still requires verification. Codex, Antigravity, and Cursor use the same written rules through \`AGENTS.md\`, \`.cursorrules\`, and \`.agent/rules/GEMINI.md\`.
1354
+
1355
+ Full details live in \`AGENTS.md\`, \`.agent/docs/workflow.md\`, and the matching file under \`.agent/workflows/\`.
1356
+ `;
1357
+ }
1358
+
1184
1359
  function resolveToolingSetup(data) {
1185
1360
  const primaryLang = data.primary_language || 'javascript';
1186
1361
  const packageManager = data.package_manager || 'npm';
@@ -1372,7 +1547,7 @@ function copyAgentFolder() {
1372
1547
  return { copied, skipped: 0 };
1373
1548
  }
1374
1549
 
1375
- function copySelectedSkillFolders(data, assumeYes) {
1550
+ function copySelectedSkillFolders(data, assumeYes) {
1376
1551
  const srcSkills = path.join(sourceDir, '.agent', 'skills');
1377
1552
  if (!fs.existsSync(srcSkills)) return { copied: 0, skipped: 0, missing: 0, skills: [] };
1378
1553
 
@@ -1415,8 +1590,55 @@ function copySelectedSkillFolders(data, assumeYes) {
1415
1590
  }
1416
1591
  }
1417
1592
 
1418
- return { copied, skipped: 0, missing, skills: selectedSkills };
1419
- }
1593
+ return { copied, skipped: 0, missing, skills: selectedSkills };
1594
+ }
1595
+
1596
+ function copyCodexPrompts() {
1597
+ const srcPrompts = path.join(sourceDir, 'prompts');
1598
+ const codexPromptsDir = homePath('.codex', 'prompts');
1599
+ if (!fs.existsSync(srcPrompts) || !codexPromptsDir) {
1600
+ return { copied: 0, prompts: [] };
1601
+ }
1602
+
1603
+ let copied = 0;
1604
+ const prompts = [];
1605
+ fs.mkdirSync(codexPromptsDir, { recursive: true });
1606
+ for (const entry of fs.readdirSync(srcPrompts, { withFileTypes: true })) {
1607
+ if (!entry.isFile() || !entry.name.endsWith('.md')) continue;
1608
+ fs.copyFileSync(path.join(srcPrompts, entry.name), path.join(codexPromptsDir, entry.name));
1609
+ copied++;
1610
+ prompts.push(path.basename(entry.name, '.md'));
1611
+ }
1612
+ return { copied, prompts };
1613
+ }
1614
+
1615
+ function copyClientWorkflowCommands() {
1616
+ const srcPrompts = path.join(sourceDir, 'prompts');
1617
+ const claudeSkillsDir = path.join(targetDir, '.claude', 'skills');
1618
+ const cursorCommandsDir = path.join(targetDir, '.cursor', 'commands');
1619
+ if (!fs.existsSync(srcPrompts)) {
1620
+ return { claude: 0, cursor: 0, prompts: [] };
1621
+ }
1622
+
1623
+ let claude = 0;
1624
+ let cursor = 0;
1625
+ const prompts = [];
1626
+ for (const entry of fs.readdirSync(srcPrompts, { withFileTypes: true })) {
1627
+ if (!entry.isFile() || !entry.name.endsWith('.md')) continue;
1628
+ const name = path.basename(entry.name, '.md');
1629
+ const sourcePath = path.join(srcPrompts, entry.name);
1630
+ const sourceContent = fs.readFileSync(sourcePath, 'utf8');
1631
+ const cursorContent = sourceContent.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n/, '');
1632
+ fs.mkdirSync(path.join(claudeSkillsDir, name), { recursive: true });
1633
+ fs.copyFileSync(sourcePath, path.join(claudeSkillsDir, name, 'SKILL.md'));
1634
+ fs.mkdirSync(cursorCommandsDir, { recursive: true });
1635
+ fs.writeFileSync(path.join(cursorCommandsDir, entry.name), cursorContent, 'utf8');
1636
+ claude++;
1637
+ cursor++;
1638
+ prompts.push(name);
1639
+ }
1640
+ return { claude, cursor, prompts };
1641
+ }
1420
1642
 
1421
1643
  async function writeGeneratedFile(relativePath, content, assumeYes) {
1422
1644
  const outputPath = path.join(targetDir, relativePath);
@@ -1560,6 +1782,78 @@ tool_timeout_sec = 120
1560
1782
  return { ok: true, message: `configured context7, codegraph, playwright MCP in ${filePath}` };
1561
1783
  }
1562
1784
 
1785
+ const DOD_HOOK_MARKER = 'feature/refactor Definition-of-Done gate';
1786
+
1787
+ function generateDodStopHookPrompt() {
1788
+ return `Input JSON (Stop hook payload): $ARGUMENTS\n\nCheck this project's ${DOD_HOOK_MARKER} (defined in AGENTS.md "Gated Flow" and .agent/docs/workflow.md "Definition of Done"). Use the \`last_assistant_message\` field as the authoritative final response. Use \`transcript_path\` only for additional context because the transcript may not contain the final response yet.\n\nFor a feature or refactor (multi-file change, new behavior, or non-trivial refactor), the work must go through spec -> plan -> implement -> review before being reported as complete:\n- spec: \`.agent/workflows/spec.md\` (skip allowed for trivial/self-contained changes)\n- plan: \`.agent/workflows/plan.md\`, with a plan artifact such as \`docs/PLAN-*.md\` and explicit user approval\n- review: \`.agent/workflows/review.md\` five-axis review, with blocking issues resolved\n\nSimple/self-contained fixes (single-line, typo, or unambiguous one-file change) may use /simple and are explicitly exempt from spec+plan+review only when the final response states FAST_PATH: simple-fix, its reason, and its narrow scope. They should never be blocked when those criteria are met. Verification is still mandatory.\n\nSteps:\n1. If the input JSON has \`stop_hook_active: true\`, allow stopping immediately (already checked once this cycle; never block twice in a row).\n2. Inspect the changed files and the \`last_assistant_message\` field.\n3. If no source files changed, the final response does not claim the task is done/complete, or the final response explicitly contains FAST_PATH: simple-fix and the changed scope is clearly a simple/self-contained fix, allow stopping.\n4. If it is a feature/refactor-scale change and the final response claims completion, verify that a plan artifact exists with evidence of user approval and that a review pass was completed. If either gate is missing, block; a generic statement that the task was simple is not enough.\n5. Return exactly JSON: {"ok": true} to allow stopping, or {"ok": false, "reason": "..."} to block.\n\nWhen blocking, name exactly which gate is missing and instruct the assistant to run the relevant workflow or explicitly state why the task qualifies as a simple fix.`;
1789
+ }
1790
+
1791
+ function isDefinitionOfDoneHook(hook) {
1792
+ const prompt = hook && typeof hook.prompt === 'string' ? hook.prompt : '';
1793
+ return prompt.includes(DOD_HOOK_MARKER) || (
1794
+ prompt.includes('Input JSON (Stop hook payload)') &&
1795
+ prompt.includes('.agent/workflows/spec.md') &&
1796
+ prompt.includes('.agent/workflows/review.md')
1797
+ );
1798
+ }
1799
+
1800
+ function mergeClaudeProjectHooks(filePath) {
1801
+ const data = readJsonFile(filePath);
1802
+ if (data === null) {
1803
+ return { ok: false, message: `${filePath} is not valid JSON; skipped hook setup` };
1804
+ }
1805
+ if (!data.hooks || typeof data.hooks !== 'object') data.hooks = {};
1806
+ if (!Array.isArray(data.hooks.Stop)) data.hooks.Stop = [];
1807
+
1808
+ let primaryHook = null;
1809
+ let definitionHookCount = 0;
1810
+ for (const entry of data.hooks.Stop) {
1811
+ for (const hook of Array.isArray(entry?.hooks) ? entry.hooks : []) {
1812
+ if (isDefinitionOfDoneHook(hook)) {
1813
+ definitionHookCount++;
1814
+ if (!primaryHook) primaryHook = hook;
1815
+ }
1816
+ }
1817
+ }
1818
+
1819
+ if (primaryHook) {
1820
+ primaryHook.prompt = generateDodStopHookPrompt();
1821
+ primaryHook.timeout = 60;
1822
+ primaryHook.statusMessage = 'Checking feature/refactor Definition-of-Done gate...';
1823
+
1824
+ if (definitionHookCount > 1) {
1825
+ data.hooks.Stop = data.hooks.Stop
1826
+ .map(entry => ({
1827
+ ...entry,
1828
+ hooks: (Array.isArray(entry?.hooks) ? entry.hooks : [])
1829
+ .filter(hook => !isDefinitionOfDoneHook(hook) || hook === primaryHook)
1830
+ }))
1831
+ .filter(entry => entry.hooks.length > 0);
1832
+ }
1833
+
1834
+ writeJsonFile(filePath, data);
1835
+ return {
1836
+ ok: true,
1837
+ message: definitionHookCount > 1
1838
+ ? `consolidated Definition-of-Done Stop hooks in ${filePath}`
1839
+ : `updated Definition-of-Done Stop hook in ${filePath}`
1840
+ };
1841
+ }
1842
+
1843
+ data.hooks.Stop.push({
1844
+ hooks: [
1845
+ {
1846
+ type: 'agent',
1847
+ prompt: generateDodStopHookPrompt(),
1848
+ timeout: 60,
1849
+ statusMessage: 'Checking feature/refactor Definition-of-Done gate...'
1850
+ }
1851
+ ]
1852
+ });
1853
+ writeJsonFile(filePath, data);
1854
+ return { ok: true, message: `configured Definition-of-Done Stop hook in ${filePath}` };
1855
+ }
1856
+
1563
1857
  function setupMcpServers() {
1564
1858
  const results = [];
1565
1859
  results.push(ensureCodegraphCli());
@@ -1677,12 +1971,22 @@ async function main() {
1677
1971
  console.log(` ${pc.yellow('~')} ${pc.bold('.agent/')} already exists - ${skipped} file${skipped !== 1 ? 's' : ''} skipped (no overwrite)`);
1678
1972
  }
1679
1973
 
1680
- const nativeSkills = copySelectedSkillFolders(data, assumeYes);
1974
+ const nativeSkills = copySelectedSkillFolders(data, assumeYes);
1681
1975
  if (nativeSkills.copied > 0) {
1682
1976
  console.log(` ${pc.green('OK')} Copied native skills to ${pc.bold('~/.codex/skills/')} and ${pc.bold('.claude/skills/')} (${nativeSkills.skills.join(', ')})`);
1683
1977
  } else if (nativeSkills.skipped > 0) {
1684
1978
  console.log(` ${pc.yellow('~')} Native skills already exist - ${nativeSkills.skipped} file${nativeSkills.skipped !== 1 ? 's' : ''} skipped`);
1685
- }
1979
+ }
1980
+
1981
+ const codexPrompts = copyCodexPrompts();
1982
+ if (codexPrompts.copied > 0) {
1983
+ console.log(` ${pc.green('OK')} Installed Codex custom prompts in ${pc.bold('~/.codex/prompts/')} (${codexPrompts.prompts.map(name => `/prompts:${name}`).join(', ')})`);
1984
+ }
1985
+
1986
+ const clientCommands = copyClientWorkflowCommands();
1987
+ if (clientCommands.claude > 0 || clientCommands.cursor > 0) {
1988
+ console.log(` ${pc.green('OK')} Installed workflow commands for Claude Code (${clientCommands.claude}) and Cursor (${clientCommands.cursor})`);
1989
+ }
1686
1990
 
1687
1991
 
1688
1992
  const generatedFiles = [
@@ -1694,7 +1998,8 @@ async function main() {
1694
1998
  [path.join('.agent', 'docs', 'architecture.md'), generateArchitectureDoc(data)],
1695
1999
  [path.join('.agent', 'docs', 'conventions.md'), generateConventionsDoc(data)],
1696
2000
  [path.join('.agent', 'docs', 'workflow.md'), generateWorkflowDoc()],
1697
- [path.join('.agent', 'docs', 'tooling.md'), generateToolingDoc(data)]
2001
+ [path.join('.agent', 'docs', 'tooling.md'), generateToolingDoc(data)],
2002
+ [path.join('.agent', 'docs', 'getting-started.md'), generateGettingStartedDoc()]
1698
2003
  ];
1699
2004
 
1700
2005
  for (const [relativePath, content] of generatedFiles) {
@@ -1703,6 +2008,10 @@ async function main() {
1703
2008
  else console.log(` ${pc.yellow('~')} Skipped ${pc.bold(relativePath)}`);
1704
2009
  }
1705
2010
 
2011
+ console.log(`\n${pc.bold(pc.cyan('Configuring Claude Code hooks'))}`);
2012
+ const hookResult = mergeClaudeProjectHooks(path.join(targetDir, '.claude', 'settings.json'));
2013
+ console.log(` ${hookResult.ok ? pc.green('OK') : pc.yellow('~')} ${hookResult.message}`);
2014
+
1706
2015
  if (shouldSetupMcp) {
1707
2016
  console.log(`\n${pc.bold(pc.cyan('Configuring MCP'))}`);
1708
2017
  for (const result of setupMcpServers()) {
@@ -1721,10 +2030,14 @@ async function main() {
1721
2030
  - ${pc.bold('CLAUDE.md')} Claude Code entry that imports AGENTS.md
1722
2031
  - ${pc.bold('GEMINI.md')} Antigravity entry
1723
2032
  - ${pc.bold('.cursorrules')} Cursor entry
1724
- - ${pc.bold('.agent/docs/')} scan-based project rules
2033
+ - ${pc.bold('.agent/docs/')} scan-based project rules, including ${pc.bold('getting-started.md')} (standard flow vs fast path)
1725
2034
  - ${pc.bold('.agent/')} skills, workflows, agents, and rules
1726
- - ${pc.bold('~/.codex/skills/')} selected Codex skills installed globally (visible in $ menu)
1727
- - ${pc.bold('.claude/skills/')} selected Claude Code native skills
2035
+ - ${pc.bold('~/.codex/skills/')} selected Codex skills installed globally (visible in $ menu)
2036
+ - ${pc.bold('~/.codex/prompts/')} Codex custom prompts (visible as /prompts:<name> after restart)
2037
+ - ${pc.bold('.claude/skills/')} selected Claude Code native skills
2038
+ - ${pc.bold('.claude/skills/{task,simple,debug,spec,release}/')} workflow skills (visible as /task, /simple, /debug, /spec, /release)
2039
+ - ${pc.bold('.cursor/commands/')} Cursor workflow commands (visible as /task, /simple, /debug, /spec, /release)
2040
+ - ${pc.bold('.claude/settings.json')} Definition-of-Done Stop hook (Claude Code only — blocks reporting a feature/refactor "done" without a plan + review pass)
1728
2041
 
1729
2042
  ${pc.bold('MCP/tooling setup:')}
1730
2043
  - Codegraph CLI checked or installed; MCP configured for Codex, Gemini/Antigravity, and Claude Code
@@ -1734,9 +2047,10 @@ async function main() {
1734
2047
  - Codegraph index hint: run ${pc.bold('codegraph init -i')} when a project index is missing, then keep ${pc.bold('.codegraph/')} uncommitted
1735
2048
 
1736
2049
  ${pc.bold('Next steps:')}
1737
- 1. Copy the prompt below into your AI editor and describe what the project does
1738
- 2. Commit ${pc.bold('AGENTS.md')}, ${pc.bold('CLAUDE.md')}, ${pc.bold('GEMINI.md')}, ${pc.bold('.cursorrules')}, and ${pc.bold('.agent/')}
1739
- 3. Open the project in Codex, Antigravity, Claude Code, or Cursor
2050
+ 1. Read ${pc.bold('.agent/docs/getting-started.md')} for the standard flow vs fast path
2051
+ 2. Copy the prompt below into your AI editor and describe what the project does
2052
+ 3. Commit ${pc.bold('AGENTS.md')}, ${pc.bold('CLAUDE.md')}, ${pc.bold('GEMINI.md')}, ${pc.bold('.cursorrules')}, ${pc.bold('.agent/')}, and ${pc.bold('.claude/settings.json')}
2053
+ 4. Open the project in Codex, Antigravity, Claude Code, or Cursor
1740
2054
 
1741
2055
  ${pc.bold('Copy this prompt into your AI editor:')}
1742
2056
  ${pc.dim('---')}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thachvd-kit",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "Cross-agent project rules bootstrap kit for Codex, Antigravity, and Claude Code",
5
5
  "bin": {
6
6
  "thachvd-kit": "./bin/cli.js"
@@ -13,6 +13,7 @@
13
13
  "rules",
14
14
  "scripts",
15
15
  "skills",
16
+ "prompts",
16
17
  "workflows",
17
18
  "README.md",
18
19
  "LICENSE"
@@ -23,6 +24,8 @@
23
24
  },
24
25
  "scripts": {
25
26
  "test": "node test/cli.test.js",
27
+ "release:verify": "npm test && node --check bin/cli.js && npm pack --dry-run",
28
+ "preversion": "npm run release:verify",
26
29
  "release:patch": "npm version patch",
27
30
  "release:dry-run": "npm pack --dry-run",
28
31
  "release:publish": "npm publish"
@@ -0,0 +1,11 @@
1
+ ---
2
+ description: Investigate a bug with evidence, root-cause analysis, regression protection, and verification.
3
+ argument-hint: [SYMPTOM]
4
+ ---
5
+
6
+ Read and follow `.agent/workflows/debug.md` in the current repository.
7
+
8
+ Bug or symptom:
9
+ $ARGUMENTS
10
+
11
+ Use `$systematic-debugging`, the `debugger` agent, and `testing-patterns` when available. Reproduce and isolate the root cause before editing.
@@ -0,0 +1,11 @@
1
+ ---
2
+ description: Run the npm release workflow with verification, versioning, tagging, publishing, and registry checks.
3
+ argument-hint: [RELEASE_REQUEST]
4
+ ---
5
+
6
+ Read and follow `.agent/workflows/release.md` in the current repository.
7
+
8
+ Release request:
9
+ $ARGUMENTS
10
+
11
+ Do not publish until the release gate and `npm run release:verify` pass.
@@ -0,0 +1,11 @@
1
+ ---
2
+ description: Run the fast path for one-file, unambiguous fixes with verification.
3
+ argument-hint: [TASK]
4
+ ---
5
+
6
+ Read and follow `.agent/workflows/simple.md` in the current repository.
7
+
8
+ Request:
9
+ $ARGUMENTS
10
+
11
+ Use the fast path only when its criteria are met. State `FAST_PATH: simple-fix`, `REASON`, and `SCOPE` before editing. Never skip verification.
@@ -0,0 +1,11 @@
1
+ ---
2
+ description: Define requirements and acceptance criteria before planning or implementation.
3
+ argument-hint: [REQUEST]
4
+ ---
5
+
6
+ Read and follow `.agent/workflows/spec.md` in the current repository.
7
+
8
+ Request:
9
+ $ARGUMENTS
10
+
11
+ Do not write product code. Stop at the spec gate and wait for human confirmation.
@@ -0,0 +1,12 @@
1
+ ---
2
+ description: Route the current request to the smallest safe workflow before editing.
3
+ argument-hint: [TASK]
4
+ ---
5
+
6
+ Read and follow `.agent/workflows/task.md` in the current repository.
7
+
8
+ Route this request before editing:
9
+
10
+ $ARGUMENTS
11
+
12
+ Return the required ROUTE, WORKFLOW, SKILLS, AGENTS, GATE, and NEXT fields. Do not edit code while routing.
@@ -0,0 +1,42 @@
1
+ ---
2
+ description: Release the thachvd-kit npm package with verification, versioning, tagging, publishing, and registry checks.
3
+ ---
4
+
5
+ # /release - Npm Release
6
+
7
+ Use this workflow only after the implementation workflow is complete and the release commit is the only intended change.
8
+
9
+ ## Release Gate
10
+
11
+ - [ ] Working tree is clean before starting.
12
+ - [ ] Change is already reviewed and pushed to `main`.
13
+ - [ ] `npm run release:verify` passes.
14
+ - [ ] The next version is correct and has not been published.
15
+ - [ ] npm authentication is available with `npm whoami`.
16
+ - [ ] Rollback/response plan is known: npm versions cannot be overwritten or reused.
17
+
18
+ ## Commands
19
+
20
+ ```bash
21
+ git status --short --branch
22
+ npm run release:verify
23
+ npm run release:patch
24
+ git push origin main --follow-tags
25
+ npm whoami
26
+ npm run release:publish
27
+ npm view thachvd-kit version
28
+ npx thachvd-kit@<published-version> --help
29
+ ```
30
+
31
+ `npm run release:patch` runs `preversion`, which executes the release verification, then `npm version patch` updates the package metadata and creates the version commit/tag. Do not run `npm publish` until the version and dry-run contents are correct.
32
+
33
+ ## Version Rules
34
+
35
+ - Patch: backward-compatible fixes, docs, tests, and internal workflow improvements.
36
+ - Minor: backward-compatible new CLI behavior or user-facing capability.
37
+ - Major: breaking CLI, configuration, package, or generated-artifact contract.
38
+ - Beta/prerelease: publish with a non-`latest` dist-tag, for example `npm publish --tag beta`.
39
+
40
+ ## Bypass Rules
41
+
42
+ Questions and simple fixes bypass Spec/Plan/Review only when they do not change behavior or a shared contract. Publishing never bypasses `release:verify`, versioning, tagging, authentication, or registry verification.