@mrciphersmith/keryx 0.2.97 → 0.2.99

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.
Files changed (210) hide show
  1. package/dist/cli.js +4583 -2702
  2. package/dist/core.js +40 -2
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/rules/core/api-contracts.mdc +1 -0
  5. package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
  6. package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +1 -0
  7. package/src/gdskills/bundled/rules/core/database-patterns.mdc +1 -0
  8. package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
  9. package/src/gdskills/bundled/rules/core/documentation-management.mdc +33 -38
  10. package/src/gdskills/bundled/rules/core/error-handling.mdc +1 -11
  11. package/src/gdskills/bundled/rules/core/execution-metrics.md +1 -2
  12. package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +1 -0
  13. package/src/gdskills/bundled/rules/core/git-concurrency.mdc +101 -0
  14. package/src/gdskills/bundled/rules/core/implementation-plans.mdc +23 -11
  15. package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +1 -0
  16. package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +1 -0
  17. package/src/gdskills/bundled/rules/core/playwright-testing.mdc +1 -0
  18. package/src/gdskills/bundled/rules/core/requirements-management.mdc +15 -11
  19. package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +29 -14
  20. package/src/gdskills/bundled/rules/core/shared-definitions.mdc +1 -1
  21. package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +9 -5
  22. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +156 -23
  23. package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +1 -0
  24. package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
  25. package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
  26. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +67 -74
  27. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +24 -8
  28. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
  29. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +12 -22
  30. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +44 -31
  31. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +2 -2
  32. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +1 -1
  33. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +4 -4
  34. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +2 -2
  35. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +20 -6
  36. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +67 -9
  37. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +6 -6
  38. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  39. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +45 -5
  40. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +88 -32
  41. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +52 -41
  42. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
  43. package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
  44. package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
  45. package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
  46. package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
  47. package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
  48. package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
  49. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +29 -4
  50. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
  51. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
  52. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
  53. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
  54. package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
  55. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +30 -8
  56. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +33 -7
  57. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
  58. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
  59. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
  60. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
  61. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
  62. package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
  63. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +27 -10
  64. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
  65. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
  66. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
  67. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
  68. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
  69. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
  70. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
  71. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
  72. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
  73. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
  74. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
  75. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
  76. package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
  77. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +27 -3
  78. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +29 -4
  79. package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
  80. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +25 -5
  81. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +26 -5
  82. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +25 -4
  83. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +26 -5
  84. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +27 -4
  85. package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
  86. package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
  87. package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
  88. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +30 -9
  89. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +25 -5
  90. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +27 -4
  91. package/src/gdskills/bundled/skills/quality/push/SKILL.md +25 -4
  92. package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
  93. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
  94. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +31 -5
  95. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +32 -11
  96. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +42 -7
  97. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +43 -3
  98. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +46 -4
  99. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +46 -6
  100. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +5 -5
  101. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +5 -6
  102. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +6 -6
  103. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +37 -3
  104. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +38 -4
  105. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +4 -6
  106. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +37 -3
  107. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +5 -7
  108. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +24 -3
  109. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +5 -5
  110. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +49 -64
  111. package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +1 -2
  112. package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +1 -5
  113. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +53 -9
  114. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +11 -11
  115. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +9 -8
  116. package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
  117. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +6 -4
  118. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +5 -5
  119. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +41 -3
  120. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +2 -2
  121. package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +0 -49
  122. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +0 -48
  123. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -353
  124. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -353
  125. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -353
  126. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -353
  127. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
  128. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
  129. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
  130. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
  131. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -434
  132. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -434
  133. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -434
  134. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -434
  135. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
  136. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
  137. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
  138. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
  139. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
  140. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
  141. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
  142. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
  143. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
  144. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
  145. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2190
  146. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2190
  147. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2190
  148. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2190
  149. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -659
  150. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -659
  151. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -659
  152. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -659
  153. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
  154. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
  155. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
  156. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
  157. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
  158. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
  159. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
  160. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
  161. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
  162. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
  163. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
  164. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
  165. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
  166. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
  167. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
  168. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
  169. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
  170. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
  171. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
  172. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
  173. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
  174. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
  175. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
  176. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
  177. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
  178. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
  179. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
  180. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
  181. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
  182. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
  183. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
  184. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
  185. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
  186. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
  187. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
  188. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
  189. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -75
  190. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -75
  191. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -339
  192. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -339
  193. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -339
  194. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -339
  195. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
  196. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
  197. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
  198. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
  199. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
  200. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
  201. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
  202. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
  203. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
  204. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
  205. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
  206. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
  207. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
  208. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
  209. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
  210. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +0 -168
@@ -0,0 +1,101 @@
1
+ ---
2
+ description: "Git concurrency rules: no git stash in a shared tree, explicit pathspecs instead of git add -A, git -C <absolute path> in worktrees, commit at task boundaries. Use when multiple agents or sessions share one checkout or work in parallel git worktrees."
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Git Concurrency
7
+
8
+ ## Purpose
9
+ Prevent one agent's git operation from destroying or corrupting another agent's or session's in-flight work when multiple sessions or subagents share a checkout, a stash stack, or run in parallel git worktrees.
10
+
11
+ ## When To Apply
12
+ Apply whenever more than one agent session or subagent may be active against the same repository — parallel `task-implementer` waves, concurrent flow workers, or any dispatch that runs inside a worktree cut for a specific task. Cited by `flow-orchestrator`, `job-orchestrator`, and `task-implementer`.
13
+
14
+ ---
15
+
16
+ ## Rules
17
+
18
+ ### 1. Never `git stash`, in any form, in a shared tree
19
+ The stash stack is a single list shared by the main checkout and every worktree cut from it. A "scoped" `git stash push -- <file>` still resets that file to its last commit and pushes the diff onto the shared stack — another lane's `git stash pop` can then restore your entry over its own uncommitted work, or vice versa. This happened here: a worker's scoped `git stash push -- <file>` reset the file and briefly wiped another task's uncommitted work.
20
+
21
+ BAD:
22
+ ```bash
23
+ git stash push -- src/foo.ts # resets the file now; the diff joins a stack every worktree can pop
24
+ ```
25
+
26
+ GOOD — need a temporary revert to test a hypothesis:
27
+ ```bash
28
+ # Make the change with the Edit tool; to undo it, edit it back the same way.
29
+ # If you need to keep a copy while you experiment, copy the file out instead:
30
+ cp src/foo.ts /path/to/scratch/foo.ts.bak
31
+ ```
32
+ Never reach for `git stash` — scoped or not — to get there and back.
33
+
34
+ ### 2. Explicit pathspecs, never `git add -A` / `--all` / `.`
35
+ An unscoped add stages every changed file in the tree, including another lane's in-flight edits, into a commit that has nothing to do with them. This happened here: `git add -A` staged another lane's in-flight files into an unrelated commit.
36
+
37
+ BAD:
38
+ ```bash
39
+ git add -A && git commit -m "..."
40
+ ```
41
+
42
+ GOOD:
43
+ ```bash
44
+ git add src/foo.ts src/foo.test.ts
45
+ git commit -m "..."
46
+ ```
47
+
48
+ ### 3. `git -C <absolute-worktree-path>` for every git command in a worktree
49
+ A bare `git` command runs against whatever the shell's cwd happens to be. Across a session's tool calls that cwd can silently persist from a previous command or reset out of the worktree — a bare `git restore` or `git add -A && git commit && git push` then hits the wrong tree. This happened here: it once pushed another session's work to `main`.
50
+
51
+ BAD:
52
+ ```bash
53
+ cd /path/to/worktree
54
+ # ...several tool calls later, the cwd assumption has drifted...
55
+ git commit -am "fix"
56
+ ```
57
+
58
+ GOOD:
59
+ ```bash
60
+ git -C /absolute/path/to/worktree status
61
+ git -C /absolute/path/to/worktree add src/foo.ts
62
+ git -C /absolute/path/to/worktree commit -m "fix(foo): ..."
63
+ ```
64
+
65
+ ### 4. Commit at every task boundary
66
+ Uncommitted work handed between workers — "the next task can build on my uncommitted edit" — has been destroyed here by a concurrent checkout running in another lane. A task is not done until its diff is committed; leaving it uncommitted is leaving it deletable by someone else's git command.
67
+
68
+ This holds whether or not the worker itself commits. When auto-commit is enabled, the worker commits its own diff before reporting. When it is disabled, the worker does not commit — but the task is still not done until the diff is committed, so it reports its exact changed-file list (see "Reporting Back" below) and the orchestrator stages and commits those paths at the task boundary. Either way, the task's diff is committed at the boundary by whoever owns commits — never left uncommitted for a later step to inherit.
69
+
70
+ ---
71
+
72
+ ## Pinning A Dispatch To Its Worktree
73
+
74
+ Every dispatch into a multi-task or multi-agent run MUST pin the exact worktree before its first write:
75
+
76
+ 1. State the absolute worktree root in the dispatch prompt — never a relative path or "the current directory".
77
+ 2. The dispatched agent's first action is:
78
+ ```bash
79
+ cd <absolute-worktree-root> && pwd && git branch --show-current
80
+ ```
81
+ and confirms the printed path and branch match what the dispatch specified.
82
+ 3. Re-run that check immediately before the first write, not only at the start — a long-running dispatch can have its cwd reset by an unrelated tool call in between.
83
+ 4. Every git command after that uses `git -C <absolute-worktree-root>`, never a bare `git`.
84
+
85
+ ## Reporting Back
86
+
87
+ A worker reports its **exact file list** — the paths it actually changed, nothing inferred — so "the orchestrator stages those paths only". An orchestrator that runs `git add -A` on the strength of a worker's prose summary has recreated Rule 2 at one level up; the reported file list is what makes an explicit-pathspec `git add` possible at the orchestrator level too.
88
+
89
+ ---
90
+
91
+ ## Red Flags — Stop and re-read this rule if you are thinking:
92
+
93
+ | Rationalization | Why it's wrong |
94
+ |---|---|
95
+ | "It's a scoped stash, I'll pop it right away" | The stash stack is shared by every worktree; "right away" does not stop another lane's `pop` from landing between your push and your pop |
96
+ | "`git add -A` is fine, I only touched my files" | `git add -A` stages whatever is dirty in the tree, not what you touched — another lane's dirty files get staged too, silently |
97
+ | "cwd is still the worktree" | Confirm it, don't assume it — `pwd` costs nothing, and a wrong assumption here ships to the wrong branch |
98
+ | "I'll commit everything at the end in one big commit" | Uncommitted work is exactly what a concurrent stash, add, or checkout destroys; commit at each boundary, not at the end |
99
+ | "This repo isn't shared right now, so it's fine just this once" | The failure mode is a race: correct 99 times and destructive the 100th is still destructive, and nothing here can tell you which run you're on |
100
+
101
+ **IRON LAW: NEVER `git stash` OR `git add -A`/`--all`/`.` IN A TREE ANOTHER SESSION MIGHT BE TOUCHING, AND NEVER RUN A GIT COMMAND WITHOUT PINNING IT TO AN ABSOLUTE WORKTREE PATH FIRST.**
@@ -1,24 +1,34 @@
1
1
  ---
2
- description: "Rules for creating implementation plans in date-stamped requirement folders."
2
+ description: "Rules for creating implementation plans as part of a requirements package. Layout follows requirements-package-standard.mdc."
3
3
  alwaysApply: false
4
4
  ---
5
5
 
6
6
  # Implementation Plans Rules
7
7
 
8
8
  ## Purpose
9
- Define structure and storage for implementation plans.
9
+ Define structure and storage for an implementation plan that belongs to a
10
+ requirements package.
10
11
 
11
12
  ## When To Apply
12
- Apply when creating or updating an implementation plan document.
13
+ Apply when creating or updating an implementation plan document that lives
14
+ inside a requirements package (`docs/requirements/<name>/`). Two other
15
+ locations are outside this rule's scope and are governed by
16
+ `documentation-management.mdc` instead:
17
+ - A standalone plan not tied to a requirements package: `docs/plans/<name>/`.
18
+ - A feature/branch analysis plan written by the `feature-analyzer` skill:
19
+ `docs/analysis/<feature>/implementation-plan.md`.
13
20
 
14
21
  ## Location
15
- `<DOCS_ROOT>/requirements/<requirement-name>/<YYYY-MM-DD>/`
22
+ `implementation-plan.md` for a requirements-package plan lives inside that
23
+ package, per `requirements-package-standard.mdc`:
24
+ `docs/requirements/<requirement-name>/implementation-plan.md`. No date
25
+ folder — the plan is versioned in place alongside README/prd/specification.
26
+ For the standalone and analysis locations, see `documentation-management.mdc`.
16
27
 
17
28
  ## Mandatory Behavior
18
- 1. Ask for target location and folder name before creation.
19
- 2. If requirement folder does not exist, create requirements first.
20
- 3. Use a new date folder for every new plan iteration.
21
- 4. Generate and keep synchronized language variants: `ru`, `en`, `ai`.
29
+ 1. Ask for target location and folder name before creation, if not already established.
30
+ 2. If the plan belongs inside a requirements package and that package does not exist yet, create it first (README, prd, specification) before adding the plan.
31
+ 3. Update `implementation-plan.md` in place for each new iteration and bump its `Version` field instead of forking a new folder.
22
32
 
23
33
  ## Required Plan Structure
24
34
  1. High-level plan
@@ -28,22 +38,24 @@ Apply when creating or updating an implementation plan document.
28
38
  ## Output Contract
29
39
  - Plan files MUST be Markdown (`.md`).
30
40
  - Code or command examples MUST be fenced code blocks.
41
+ - Include the `Version: x.y.z` field directly under the H1, per `requirements-package-standard.mdc`.
31
42
 
32
43
  ## Red Flags — Stop and re-read this rule if you are thinking:
33
44
 
34
45
  | Rationalization | Why it's wrong |
35
46
  |---|---|
36
47
  | "The plan is in my head, I don't need to write it down" | An unwritten plan cannot be reviewed, versioned, or handed to another agent |
37
- | "I'll use the existing folder instead of creating a new date folder" | Date folders are the audit trail — overwriting one erases the iteration history |
48
+ | "I'll start a new folder instead of updating the package in place" | The package is the single source of truth; forking a parallel copy is exactly what `requirements-package-standard.mdc` forbids |
38
49
  | "The user knows what we discussed, I'll skip asking for the folder name" | The location question is a confirmation gate, not a convenience; skipping it causes misplaced files |
39
- | "I'll write the plan in English only since that's what the user spoke" | All three variants (ru/en/ai) are required — omitting one breaks downstream tooling |
40
50
 
41
- **IRON LAW: ALWAYS ASK FOR TARGET LOCATION AND FOLDER NAME BEFORE CREATING ANY PLAN FILE, AND GENERATE ALL THREE LANGUAGE VARIANTS.**
51
+ **IRON LAW: ALWAYS ASK FOR TARGET LOCATION AND FOLDER NAME BEFORE CREATING A REQUIREMENTS-PACKAGE PLAN FILE, AND KEEP IT INSIDE ITS REQUIREMENTS PACKAGE. FOR A STANDALONE OR FEATURE-ANALYSIS PLAN, USE `documentation-management.mdc` INSTEAD.**
42
52
 
43
53
  ## Template
44
54
  ```markdown
45
55
  # <Plan Name>
46
56
 
57
+ Version: 0.1.0
58
+
47
59
  ## 1. High-Level Plan
48
60
  - Objective:
49
61
  - Scope:
@@ -3,6 +3,7 @@ description: "Reference template and checklist for MobX store structure and asyn
3
3
  alwaysApply: false
4
4
  globs:
5
5
  - "**/*store*.ts"
6
+ stack_requires: "mobx"
6
7
  ---
7
8
 
8
9
  # MobX Store Template
@@ -4,6 +4,7 @@ alwaysApply: false
4
4
  globs:
5
5
  - "**/*dto*.ts"
6
6
  - "**/dto/**/*.ts"
7
+ stack_requires: "nestjs"
7
8
  ---
8
9
 
9
10
  # NestJS DTO Rules
@@ -5,6 +5,7 @@ globs:
5
5
  - "e2e/**"
6
6
  - "**/*.spec.ts"
7
7
  - "playwright.config.ts"
8
+ stack_requires: "playwright"
8
9
  ---
9
10
 
10
11
  # Playwright E2E Testing Guidelines
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "Rules for creating and updating requirement documents with multilingual outputs."
2
+ description: "Rules for creating and updating requirement documents. Layout and versioning follow requirements-package-standard.mdc."
3
3
  alwaysApply: false
4
4
  ---
5
5
 
@@ -11,15 +11,20 @@ Standardize how requirement sets are created and maintained.
11
11
  ## When To Apply
12
12
  Apply when creating or updating requirement documents.
13
13
 
14
- ## Location
15
- `<DOCS_ROOT>/requirements/<requirement-name>/<YYYY-MM-DD>/`
14
+ ## Location & Layout
15
+ Follow `requirements-package-standard.mdc` for the package layout
16
+ (`docs/requirements/<name>/{README,prd,specification}.md` plus optional
17
+ files), the `Version: x.y.z` field, and the verification/review contracts. Do
18
+ not restate that layout here, and do not date-stamp the folder or fork
19
+ `ru`/`en`/`ai` copies — one set of documents, versioned in place, is the
20
+ standard.
16
21
 
17
22
  ## Mandatory Behavior
18
23
  1. Ask for target location and requirement folder name before writing.
19
24
  2. Confirm naming convention before creation.
20
- 3. Always create a new date-stamped subfolder; do not overwrite old sets.
21
- 4. Generate synchronized `ru`, `en`, and `ai` versions.
22
- 5. Document assumptions and open questions explicitly.
25
+ 3. Reuse the existing package folder for the topic; update documents in place
26
+ and bump their `Version` field rather than creating a parallel copy.
27
+ 4. Document assumptions and open questions explicitly.
23
28
 
24
29
  ## Output Contract
25
30
  - Use Markdown (`.md`) only.
@@ -28,8 +33,7 @@ Apply when creating or updating requirement documents.
28
33
 
29
34
  ## Workflow
30
35
  1. Capture request.
31
- 2. Clarify folder/location.
32
- 3. Create folder structure.
33
- 4. Create all required language files.
34
- 5. Validate synchronization.
35
- 6. Ask whether to apply changes.
36
+ 2. Clarify folder/location under `docs/requirements/<name>/`.
37
+ 3. Create or update the package per `requirements-package-standard.mdc`.
38
+ 4. Document assumptions and open questions.
39
+ 5. Ask whether to apply changes.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "Workflow for adding or editing rules in the AGENTS.mdc + rules/core structure."
2
+ description: "Workflow for adding or editing rules in the AGENTS.md + rules/core structure."
3
3
  alwaysApply: false
4
4
  ---
5
5
 
@@ -12,10 +12,19 @@ Define a deterministic workflow for adding, editing, and syncing rules.
12
12
  Apply when user asks to create, update, move, reorganize, or sync rules.
13
13
 
14
14
  ## Source of Truth
15
- - Repository source: `.metaproject/rules`
16
- - Root always-on file (plain): `AGENTS.md`
17
- - Root always-on file (Cursor): `AGENTS.mdc` (frontmatter wrapper around AGENTS.md)
18
- - Thematic files: `.metaproject/rules/core/*.mdc`
15
+ - Keryx's own shipped rules: `src/gdskills/bundled/rules/core/*.mdc` in the
16
+ keryx repository — installed into `.metaproject/rules/core/*.mdc` by `keryx
17
+ init`/`keryx update` (the installed copy is regenerated wholesale on every
18
+ run; edit the source, not the installed copy). There is no `keryx install`
19
+ command.
20
+ - A project's own instructions: the project's root `AGENTS.md`/`CLAUDE.md`.
21
+ Edit those files directly, then run `keryx rules sync` (or `keryx rules
22
+ distill` for a large entrypoint) to import them into
23
+ `.metaproject/rules/<name>.md` (e.g. `agents-md.md`, `claude-md.md`) and
24
+ refresh the routing index. A project-owned rule never lives under
25
+ `.metaproject/rules/core/` — that tree mirrors only keryx's own shipped
26
+ rules and is overwritten wholesale by `keryx init`/`keryx update`.
27
+ - Root always-on file: `AGENTS.md`
19
28
 
20
29
  ## Mandatory Clarification Step
21
30
  Before creating or editing any rule, the agent MUST ask and confirm:
@@ -25,24 +34,30 @@ Before creating or editing any rule, the agent MUST ask and confirm:
25
34
  4. Rule scope and trigger conditions
26
35
 
27
36
  ## Mandatory Behavior
28
- 1. Update or create thematic rule files only under `rules/core`.
37
+ 1. Update or create keryx's shipped thematic rule files only under
38
+ `src/gdskills/bundled/rules/core/` (installed to `.metaproject/rules/core/`).
39
+ A project's own instructions belong in its root `AGENTS.md`/`CLAUDE.md`,
40
+ imported via `keryx rules sync`/`keryx rules distill`.
29
41
  2. Keep all rule files in English.
30
42
  3. Keep frontmatter valid YAML.
31
- 4. If core files changed, update `AGENTS.md` catalog (and keep AGENTS.mdc in sync).
43
+ 4. If core files changed, keep `AGENTS.md` consistent and re-run synchronization.
32
44
  5. Run synchronization only after source files are updated.
33
45
 
34
46
  ## How to Run Synchronization
35
- After editing rules under `.metaproject/rules/` or `AGENTS.md`, sync to all targets:
47
+ After editing rules under `src/gdskills/bundled/rules/`, run `keryx update`
48
+ (or `keryx init` on a fresh project) to regenerate the installed copy at
49
+ `.metaproject/rules/`. This stays inside the project — it never writes to a
50
+ home-directory (`~`) location.
51
+
52
+ After editing the project's own root `AGENTS.md`/`CLAUDE.md`, run:
36
53
 
37
54
  ```bash
38
- keryx update
55
+ keryx rules sync
39
56
  ```
40
57
 
41
- ### Sync Targets
42
- - `~/.cursor/rules/AGENTS.md` — Cursor global rules
43
- - `~/.codex/AGENTS.md` — Codex global rules
44
- - `~/.config/zed/AGENTS.md` — Zed global rules
45
- - `~/.config/opencode/AGENTS.md` — OpenCode global rules
58
+ This imports the root `AGENTS.md`/`CLAUDE.md` into `.metaproject/rules/` and
59
+ refreshes the routing index. It is also project-local and writes no
60
+ home-directory (`~`) path.
46
61
 
47
62
  ## Rule File Standard
48
63
  Every core rule MUST include:
@@ -69,7 +69,7 @@ Two modules must recognise the same terminal prompt.
69
69
  ```ts
70
70
  // Wrong — a claim, unchecked. Four attempts to restate this rule from a
71
71
  // reading of the other module each got it wrong in a different way.
72
- /** Same signals scripts/watchdog.ts uses. */
72
+ /** Same signals the watchdog script uses. */
73
73
  const SIGNAL = /do you want to proceed\?/i;
74
74
  ```
75
75
 
@@ -20,7 +20,9 @@ Whoever is about to rely on a project-skill verifies it first:
20
20
  - Find it: `keryx skills route <target>`.
21
21
  - Check freshness: `keryx skills verify <module>/<skill>` (or
22
22
  `skill-verify-skill`). It classifies the skill `fresh | stale | needs-review |
23
- blocked` against current code, graph, wiki, health, memory, and tests.
23
+ blocked` from its required files, metadata, manifest registration, target
24
+ path, and evidence artifacts (graph, ctx, wiki, health, memory). It does not
25
+ read the skill's claims or compare them with the code.
24
26
  - If not `fresh`: do NOT follow it blindly — verify each claim against the code
25
27
  and record the drift so it feeds the learn step below.
26
28
 
@@ -43,10 +45,12 @@ Flow:
43
45
  (version bump + `skill-changelog.md` with provenance, respects manual
44
46
  sections, file-locked).
45
47
 
46
- `learn` is bounded, mechanical synthesis. **Dispatch it as a subagent; if a
47
- cheaper / non-flagship model is available in this environment, use it
48
- (see `model-selection.mdc`), otherwise use the session model.** The flagship's
49
- only job here is to review the proposal before apply.
48
+ `learn` is bounded, mechanical synthesis. **Dispatch it as a subagent at
49
+ `model_tier: light`, resolved via `keryx review tier --findings 1 --diff-lines 0`
50
+ per `model-selection.mdc` — do not pick a model by hand, and do not substitute
51
+ a different `review tier` invocation (e.g. `--scope narrow`, which resolves
52
+ heavier than `light`).** The flagship's only job here is to review the
53
+ proposal before apply.
50
54
 
51
55
  ## Never
52
56
 
@@ -18,16 +18,49 @@ Before creating or editing a skill, ask and confirm:
18
18
  3. Agent profile scope (`Cursor`, `Codex`, `Zed`, `OpenCode`, or all)
19
19
 
20
20
  ## Source of Truth
21
- `.metaproject/skills/gdskills/<skill-name>/`
21
+ - Shipped skill: `src/gdskills/bundled/skills/<category>/<skill-name>/` in the
22
+ keryx repository. `.metaproject/skills/gdskills/<category>/<skill-name>/`
23
+ is an installed mirror, regenerated by `keryx init`/`keryx update` — never
24
+ edit it directly, edits there are overwritten on the next run.
25
+ - Project-local skill: `.metaproject/project-skills/<skill-name>/`.
22
26
 
23
27
  ## Required Source Layout
24
- - `SKILL.md` — canonical source of truth
25
- - `SKILL.cursor.md` — Cursor-specific variant (optional; falls back to SKILL.md)
26
- - `SKILL.codex.md` — Codex-specific variant (optional; falls back to SKILL.md)
27
- - `SKILL.zed.md` — Zed-specific variant (optional; falls back to SKILL.md)
28
- - `SKILL.opencode.md` — OpenCode-specific variant (optional; falls back to SKILL.md)
28
+ - `SKILL.md` — canonical source of truth, the shared build used by every runtime
29
+ - `SKILL.cursor.md` — Cursor-specific variant, present only where Cursor's build genuinely differs from `SKILL.md` (falls back to `SKILL.md` otherwise)
30
+ - `SKILL.codex.md` — Codex-specific variant, present only where Codex's build genuinely differs from `SKILL.md` (falls back to `SKILL.md` otherwise)
31
+ - `SKILL.zed.md` — Zed-specific variant, present only where Zed's build genuinely differs from `SKILL.md` (falls back to `SKILL.md` otherwise)
32
+ - `SKILL.opencode.md` — OpenCode-specific variant, present only where OpenCode's build genuinely differs from `SKILL.md` (falls back to `SKILL.md` otherwise)
29
33
 
30
- `SKILL.md` is always required. Platform variants are optional — if absent, `keryx update` installs `SKILL.md` as fallback.
34
+ `SKILL.md` is always required. A `SKILL.<runtime>.md` variant is the
35
+ exception, not the norm: create one only when that runtime's build genuinely
36
+ differs from `SKILL.md`, and never add one as an identical copy. Falling
37
+ back to `SKILL.md` is the normal case for every runtime without a variant —
38
+ for `keryx update`/`keryx init` (installed mirror) and for `keryx skills
39
+ export`/`keryx skills sync` (global destinations) alike — not a degraded
40
+ path.
41
+
42
+ "Genuinely differs" covers two cases, and only two:
43
+
44
+ 1. **Different instructions.** The runtime needs prose `SKILL.md` does not
45
+ carry, or must not carry.
46
+ 2. **A different `metadata.compatible_harnesses`.** That field is the
47
+ machine-readable CSV of supported harnesses, so its correct value is
48
+ per-build by construction — a build cannot share a harness list that
49
+ excludes the harness reading it. This is the only field in the tree of
50
+ which that is true.
51
+
52
+ Case 2 is why fourteen shipped builds differ from their `SKILL.md` by exactly
53
+ one line: the seven `gproject-*` subagent skills under `planning/`
54
+ (`project-discovery`, `problem-definer`, `patterns-researcher`, `planner`,
55
+ `consistency-checker`, `spec-writer`, `stack-advisor`) each ship a
56
+ `SKILL.codex.md` and a `SKILL.cursor.md` that add
57
+ `compatible_harnesses: "cursor,codex,zed,opencode"`. Their `SKILL.md` declares
58
+ no harness list, because it is the Claude build and cannot carry one that
59
+ excludes Claude. These builds are NOT identical copies and must not be deleted
60
+ as such; `src/gdskills/build-parity.test.ts` exempts this one hunk, by name,
61
+ for these seven skills only, and its allow-list is where any widening has to be
62
+ argued. Every other difference between a build and its `SKILL.md` is drift and
63
+ gets reconciled.
31
64
 
32
65
  ## Frontmatter Fields (Agent Skills spec alignment)
33
66
 
@@ -65,27 +98,86 @@ back toward the spec:
65
98
  typed payloads to subagent workers instead, which the spec does not attempt
66
99
  to address.
67
100
 
101
+ ## Length Ceilings
102
+
103
+ Every shipped skill has a line-count ceiling recorded in
104
+ `src/gdskills/skill-length-ceilings.ts`, set to the skill's length on the day
105
+ the file was introduced; a skill with no entry is bounded by the default (500
106
+ lines, the point at which a skill should be split). `keryx skills verify
107
+ --bundled` reports `anatomy:length` when a skill passes its ceiling.
108
+
109
+ A ceiling **moves down**, never up:
110
+
111
+ - trimming a skill — moving reference material into a sibling document, cutting
112
+ a section that no longer changes behaviour — lowers the ceiling to the new
113
+ count in the same change;
114
+ - a skill that needs more room than its ceiling allows is split, or its
115
+ reference material moves out. Raising the number to clear the finding is the
116
+ one edit this rule forbids: it converts a measured limit into a record of
117
+ whatever the file grew to.
118
+
119
+ `keryx skills verify --bundled` states the same remedy in the same words, and
120
+ cites this section by name, so the finding and the rule cannot drift apart. The
121
+ `anatomy:length` message reads, after the count:
122
+
123
+ > Split the skill, or move reference material into a sibling document, and lower
124
+ > the ceiling to the new count in the same change. A ceiling only ever moves
125
+ > DOWN: raising it is the one edit rules/core/skills-storage-workflow.mdc
126
+ > ("Length Ceilings") forbids, because it converts a measured limit into a record
127
+ > of whatever the file grew to.
128
+
129
+ Changing either text without the other is the drift this quotation exists to
130
+ prevent; `src/gdskills/bundled-eval.ts` is where the message lives.
131
+
132
+ A ceiling is not a statement that the skill's current size is right — several
133
+ shipped skills are far past the default and were recorded as they stood. It
134
+ bounds unnoticed growth, which is the part no other check can see.
135
+
136
+ Editing a skill is therefore a two-file change. Every recorded ceiling equals
137
+ that skill's current count today, so adding a sentence needs a compensating
138
+ deletion or a split: recount the file (`wc -l SKILL.md`) and write that number
139
+ to the skill's key in `src/gdskills/skill-length-ceilings.ts` in the SAME
140
+ commit. A new skill needs a new entry; a deleted skill needs its entry removed.
141
+ `keryx skills verify --bundled` only reports `lines > ceiling`, so a TRIM that
142
+ leaves the old, higher number behind passes locally and fails the
143
+ ceiling-equals-count check in CI.
144
+
68
145
  ## Global Sync Mapping
69
- - `SKILL.cursor.md` (or `SKILL.md`) → `~/.cursor/skills/<skill-name>/SKILL.md`
70
- - `SKILL.codex.md` (or `SKILL.md`) → `${CODEX_HOME:-~/.codex}/skills/<skill-name>/SKILL.md`
71
- - `SKILL.antigravity.md` (or `SKILL.md`) → `~/.antigravity/skills/<skill-name>/SKILL.md`
72
- - `SKILL.zed.md` (or `SKILL.md`) → `~/.config/zed/skills/<skill-name>/SKILL.md`
73
- - `SKILL.opencode.md` (or `SKILL.md`) → `~/.config/opencode/skills/<skill-name>/SKILL.md`
146
+ Global sync only ever reaches a **project-local skill**
147
+ (`.metaproject/project-skills/<skill-name>/`) that has first been exported for
148
+ that runtime with `keryx skills export <skill-name> --runtime <runtime>`
149
+ (this writes `.metaproject/runtime/skills/<runtime>/<module>-<skill-name>/`).
150
+ A **shipped** skill (`src/gdskills/bundled/skills/<category>/<skill-name>/`)
151
+ cannot be exported — `keryx skills export` resolves project skills only and
152
+ reports `Project skill not found for: <name>` for a shipped one — so it has no
153
+ global-sync route today. A shipped skill reaches a runtime only through the
154
+ project-local installed mirror (`.metaproject/skills/gdskills/<category>/<skill-name>/`,
155
+ written by `keryx init`/`keryx update`), which stays inside the project.
156
+
157
+ Once a project skill is exported for a runtime, `keryx skills sync --runtime
158
+ <runtime> --global` copies it from `.metaproject/runtime/skills/<runtime>/` to:
159
+ - `cursor` → `~/.cursor/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.cursor.md` when the skill ships one, otherwise `SKILL.md`)
160
+ - `codex` → `${CODEX_HOME:-~/.codex}/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.codex.md` when the skill ships one, otherwise `SKILL.md`)
161
+ - `zed` → `~/.config/zed/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.zed.md` when the skill ships one, otherwise `SKILL.md`)
162
+ - `opencode` → `~/.config/opencode/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.opencode.md` when the skill ships one, otherwise `SKILL.md`)
163
+
164
+ These four global destinations are written only by the explicit, opt-in
165
+ `keryx skills sync --runtime <runtime> --global` command — never as a side
166
+ effect of `keryx update`/`keryx init`. `claude` and `plugin` have no global
167
+ destination; use `keryx skills sync --runtime <runtime> --target <dir>` for
168
+ those instead.
74
169
 
75
170
  ## Mandatory Behavior
76
171
  1. Always create/update `SKILL.md` as the canonical source.
77
- 2. Create platform variants only when platform-specific adaptations are needed; otherwise `SKILL.md` serves all platforms via fallback.
172
+ 2. Create a `SKILL.<runtime>.md` only when that runtime's build genuinely differs from `SKILL.md` — either in its instructions or in its `metadata.compatible_harnesses`, the two cases named under Required Source Layout — never as an identical copy. Otherwise `SKILL.md` serves that runtime via fallback; that fallback is the normal case, not an exception.
78
173
  3. Keep all profiles aligned in structure and intent.
79
- 3. Validate skills before sync.
80
- 4. Sync both global destinations after source update.
81
- 5. Ensure `agents/openai.yaml` exists where required by the target agent UI.
82
- 6. For create/update/sync workflows, produce a machine-readable final result for orchestrators.
174
+ 4. Validate skills before sync.
175
+ 5. For a **project-local** skill only: export it per runtime first (`keryx skills export <skill-name> --runtime <runtime>`), then sync every global destination that applies (`cursor`, `codex`, `zed`, `opencode` — four in total) with `keryx skills sync --runtime <runtime> --global`, run once per runtime that needs it. A shipped skill cannot be exported and has no global-sync route — it reaches a runtime only via the project-local installed mirror (`keryx update`/`keryx init`).
176
+ 6. Ensure `agents/openai.yaml` exists where required by the target agent UI.
177
+ 7. For create/update/sync workflows, produce a machine-readable final result for orchestrators.
83
178
 
84
179
  ## Machine-Readable Contract
85
- Use canonical schema:
86
- - `.metaproject/rules/schemas/skill-workflow-result.schema.json`
87
-
88
- Contract requirements:
180
+ No canonical schema file exists for this result yet. Contract requirements:
89
181
  - One top-level JSON object only.
90
182
  - Stable required keys.
91
183
  - Closed objects (`additionalProperties: false`).
@@ -105,12 +197,27 @@ Run before syncing skills:
105
197
  keryx skills verify --all
106
198
  ```
107
199
 
108
- Then run sync:
200
+ Then regenerate the project-local installed mirror
201
+ (`.metaproject/skills/gdskills/<category>/<skill-name>/`) from the bundled
202
+ source:
109
203
 
110
204
  ```bash
111
205
  keryx update
112
206
  ```
113
207
 
208
+ `keryx update` never writes outside the project, and it is the only route a
209
+ **shipped** skill has to reach a runtime — a shipped skill cannot be exported
210
+ and has no global-sync destination.
211
+
212
+ To push a **project-local** skill (`.metaproject/project-skills/<skill-name>/`)
213
+ to a harness's own global directory (opt-in, outside the project), export it
214
+ for that runtime first, then sync:
215
+
216
+ ```bash
217
+ keryx skills export <skill-name> --runtime <runtime>
218
+ keryx skills sync --runtime <runtime> --global
219
+ ```
220
+
114
221
  If validation fails, do not sync.
115
222
 
116
223
  ## Naming
@@ -120,5 +227,31 @@ If validation fails, do not sync.
120
227
  ## Forbidden
121
228
  - Do not create skills in `~/.cursor/skills-cursor/`.
122
229
 
230
+ ## Rejected Changes
231
+ Scope: keryx's own bundled skills and rules
232
+ (`src/gdskills/bundled/**` in the keryx repository) only. This rule ships to
233
+ every project via `keryx init`/`keryx update`, but the ledger below exists
234
+ only in the keryx source repo — this section does not apply to
235
+ project-local skills (`.metaproject/project-skills/<skill-name>/`).
236
+
237
+ - Before proposing a change to a shipped skill or rule, search
238
+ `docs/skills/rejected-skill-changes.md` in the keryx repository for that
239
+ skill and that idea.
240
+ - When a change to a shipped skill or rule is rejected (review, a
241
+ routing/behaviour-eval regression, or a user/maintainer decision), append a
242
+ row to that ledger — in the same change, on the default branch (`main`) —
243
+ recording what was tried, why it was rejected, and the evidence (e.g. a
244
+ routing-eval rank or behaviour-eval number, before → after). Never edit or
245
+ delete an existing row.
246
+
123
247
  ## Apply Changes Workflow
124
- Changes under `.metaproject/skills/gdskills/*` should be synced to tool directories using `keryx update`.
248
+ Edit skills under `src/gdskills/bundled/skills/<category>/<skill-name>/`
249
+ (shipped) or `.metaproject/project-skills/<skill-name>/` (project-local).
250
+ `keryx init`/`keryx update` regenerate the installed mirror at
251
+ `.metaproject/skills/gdskills/<category>/<skill-name>/` — this stays inside
252
+ the project, and is the only way a shipped skill reaches a runtime. For a
253
+ project-local skill only, run `keryx skills export <skill-name> --runtime
254
+ <runtime>` then `keryx skills sync --runtime <runtime> --global` separately to
255
+ push it to a harness's own global directory outside the project; shipped
256
+ skills cannot be exported (`keryx skills export` resolves project skills
257
+ only) and have no global-sync route.
@@ -4,6 +4,7 @@ alwaysApply: false
4
4
  globs:
5
5
  - ".storybook/**"
6
6
  - "**/*.stories.tsx"
7
+ stack_requires: "react"
7
8
  ---
8
9
 
9
10
  # Storybook Guidelines
@@ -44,6 +44,12 @@ Task fully complete. All acceptance criteria met. Orchestrator can continue the
44
44
  ### `DONE_WITH_CONCERNS`
45
45
  Task complete, but the orchestrator should know something before continuing. This is NOT a failure — it is a completed task that carries information the orchestrator needs to make a good decision.
46
46
 
47
+ "Complete" here means the bar in `rules/core/definition-of-done.mdc`, which owns
48
+ what `DONE` costs and is not restated here. `DONE_WITH_CONCERNS` reports
49
+ information *about work that cleared that bar*; it is never a lower bar. If a
50
+ clause of the bar fails — an unmet acceptance criterion, a gate that did not
51
+ run, an uncommitted diff — the status is `BLOCKED`, not this one.
52
+
47
53
  Use when:
48
54
  - Implementation required a meaningful interpretation of ambiguous criteria
49
55
  - A workaround was used for a non-blocking issue
@@ -58,6 +64,7 @@ Use when:
58
64
  - Two valid approaches exist with significantly different tradeoffs and the subagent cannot choose alone
59
65
  - A command failed in a way that requires orchestrator-level intervention (not a self-fixable error)
60
66
  - The task scope needs to be clarified before proceeding
67
+ - An acceptance criterion is unmet, or another clause of `rules/core/definition-of-done.mdc` fails, and you cannot close it yourself
61
68
 
62
69
  Do NOT use `BLOCKED` for errors you can fix yourself. Self-fix first (up to your retry limit), then report `BLOCKED` if still stuck.
63
70
 
@@ -186,10 +193,10 @@ The following thoughts indicate a subagent is about to violate the protocol. Rej
186
193
 
187
194
  - **"I'll add a note at the end instead of BLOCKED"** — Notes at the end are invisible to automated orchestrators. If you are blocked, the status must be `BLOCKED`. The note goes in the `## Reason` field.
188
195
 
189
- - **"It's mostly done, DONE_WITH_CONCERNS feels like admitting failure"** — `DONE_WITH_CONCERNS` is not a failure status. It is a success status with an attached signal. Use it freely when something is worth the orchestrator knowing.
196
+ - **"It's mostly done, DONE_WITH_CONCERNS feels like admitting failure"** — `DONE_WITH_CONCERNS` is not a failure status. It is a success status with an attached signal, for work that already cleared the bar in `rules/core/definition-of-done.mdc`. Use it freely when something is worth the orchestrator knowing — and not at all when the bar was not cleared.
190
197
 
191
198
  - **"NEEDS_CONTEXT would slow things down, I'll just guess"** — Guessing propagates errors downstream. One `NEEDS_CONTEXT` and a re-dispatch is cheaper than four tasks built on a wrong assumption.
192
199
 
193
- - **"I didn't meet one criterion but I'll say DONE and mention it in notes"** — If an acceptance criterion is not met, the status is not `DONE`. Use `DONE_WITH_CONCERNS` and name the unmet criterion in the concerns section.
200
+ - **"I didn't meet one criterion but I'll say DONE and mention it in notes"** — If an acceptance criterion is not met, the status is not `DONE` — and it is not `DONE_WITH_CONCERNS` either. An unmet criterion is incomplete work, not information about complete work: report `BLOCKED`, name the criterion in `## Reason`, and say in `## What I need from orchestrator` what would let you meet it. Per `rules/core/definition-of-done.mdc`, which owns that ruling.
194
201
 
195
202
  - **"The orchestrator will figure it out from my explanation"** — The orchestrator reads `STATUS:` on line 1. Everything else is secondary. Do not make the orchestrator parse free text to determine the outcome.