@mrciphersmith/keryx 0.2.97 → 0.2.98

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 (165) hide show
  1. package/dist/cli.js +569 -235
  2. package/dist/core.js +1 -1
  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/code-style-patterns.mdc +1 -0
  6. package/src/gdskills/bundled/rules/core/database-patterns.mdc +1 -0
  7. package/src/gdskills/bundled/rules/core/documentation-management.mdc +33 -38
  8. package/src/gdskills/bundled/rules/core/error-handling.mdc +1 -11
  9. package/src/gdskills/bundled/rules/core/execution-metrics.md +1 -2
  10. package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +1 -0
  11. package/src/gdskills/bundled/rules/core/git-concurrency.mdc +101 -0
  12. package/src/gdskills/bundled/rules/core/implementation-plans.mdc +23 -11
  13. package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +1 -0
  14. package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +1 -0
  15. package/src/gdskills/bundled/rules/core/playwright-testing.mdc +1 -0
  16. package/src/gdskills/bundled/rules/core/requirements-management.mdc +15 -11
  17. package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +29 -14
  18. package/src/gdskills/bundled/rules/core/shared-definitions.mdc +1 -1
  19. package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +9 -5
  20. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +59 -16
  21. package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +1 -0
  22. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +48 -71
  23. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +48 -71
  24. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +48 -71
  25. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +48 -71
  26. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +48 -71
  27. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +4 -4
  28. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +4 -4
  29. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +4 -4
  30. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +4 -4
  31. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +4 -4
  32. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
  33. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +12 -22
  34. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +12 -22
  35. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +12 -22
  36. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +12 -22
  37. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +12 -22
  38. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +12 -22
  39. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +2 -2
  40. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +1 -1
  41. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +4 -4
  42. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +2 -2
  43. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +2 -2
  44. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +2 -2
  45. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +2 -2
  46. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +46 -4
  47. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +2 -2
  48. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +2 -2
  49. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +2 -2
  50. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +2 -2
  51. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +2 -2
  52. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +3 -3
  53. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +3 -3
  54. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +3 -3
  55. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +3 -3
  56. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +3 -3
  57. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +65 -23
  58. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +65 -23
  59. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +65 -23
  60. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +65 -23
  61. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +65 -23
  62. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +19 -10
  63. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +19 -10
  64. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +19 -10
  65. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +19 -10
  66. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +19 -10
  67. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +1 -1
  68. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +1 -1
  69. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +1 -1
  70. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +1 -1
  71. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +1 -1
  72. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +1 -1
  73. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +1 -1
  74. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +1 -1
  75. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +1 -1
  76. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +7 -7
  77. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +7 -7
  78. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +7 -7
  79. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +7 -7
  80. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +7 -7
  81. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +1 -1
  82. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +1 -1
  83. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +1 -1
  84. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +1 -1
  85. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +1 -1
  86. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +1 -1
  87. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +1 -1
  88. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +1 -1
  89. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +1 -1
  90. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +2 -2
  91. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +2 -2
  92. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +2 -2
  93. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +1 -1
  94. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +1 -1
  95. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +1 -1
  96. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +1 -1
  97. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +1 -1
  98. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +1 -1
  99. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +1 -1
  100. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +1 -1
  101. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +1 -1
  102. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +1 -1
  103. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +1 -1
  104. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +1 -1
  105. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +1 -1
  106. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +1 -1
  107. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +1 -1
  108. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +2 -2
  109. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +2 -2
  110. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +2 -2
  111. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +2 -2
  112. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +2 -2
  113. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +1 -1
  114. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +1 -1
  115. package/src/gdskills/bundled/skills/quality/push/SKILL.md +1 -1
  116. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +7 -2
  117. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +7 -2
  118. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +7 -2
  119. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +15 -9
  120. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +15 -9
  121. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +15 -9
  122. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +15 -9
  123. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +15 -9
  124. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +2 -2
  125. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +2 -2
  126. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +2 -2
  127. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +2 -2
  128. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +2 -2
  129. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +2 -2
  130. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +2 -2
  131. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +2 -2
  132. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +2 -2
  133. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +2 -2
  134. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +2 -2
  135. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +2 -2
  136. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +2 -2
  137. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +2 -2
  138. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +2 -2
  139. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +2 -2
  140. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +2 -2
  141. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +2 -2
  142. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +2 -2
  143. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +2 -2
  144. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +2 -2
  145. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +3 -3
  146. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +2 -2
  147. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +1 -1
  148. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +1 -1
  149. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +2 -2
  150. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +1 -1
  151. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +2 -2
  152. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +1 -1
  153. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +2 -2
  154. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +40 -35
  155. package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +1 -2
  156. package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +1 -5
  157. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +53 -9
  158. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +2 -2
  159. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +6 -6
  160. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +2 -2
  161. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +3 -3
  162. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +1 -1
  163. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
  164. package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +0 -49
  165. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +0 -48
@@ -18,7 +18,11 @@ 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
28
  - `SKILL.md` — canonical source of truth
@@ -66,26 +70,41 @@ back toward the spec:
66
70
  to address.
67
71
 
68
72
  ## 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`
73
+ Global sync only ever reaches a **project-local skill**
74
+ (`.metaproject/project-skills/<skill-name>/`) that has first been exported for
75
+ that runtime with `keryx skills export <skill-name> --runtime <runtime>`
76
+ (this writes `.metaproject/runtime/skills/<runtime>/<module>-<skill-name>/`).
77
+ A **shipped** skill (`src/gdskills/bundled/skills/<category>/<skill-name>/`)
78
+ cannot be exported — `keryx skills export` resolves project skills only and
79
+ reports `Project skill not found for: <name>` for a shipped one — so it has no
80
+ global-sync route today. A shipped skill reaches a runtime only through the
81
+ project-local installed mirror (`.metaproject/skills/gdskills/<category>/<skill-name>/`,
82
+ written by `keryx init`/`keryx update`), which stays inside the project.
83
+
84
+ Once a project skill is exported for a runtime, `keryx skills sync --runtime
85
+ <runtime> --global` copies it from `.metaproject/runtime/skills/<runtime>/` to:
86
+ - `cursor` → `~/.cursor/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.cursor.md`, or `SKILL.md` as fallback)
87
+ - `codex` → `${CODEX_HOME:-~/.codex}/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.codex.md`, or `SKILL.md` as fallback)
88
+ - `zed` → `~/.config/zed/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.zed.md`, or `SKILL.md` as fallback)
89
+ - `opencode` → `~/.config/opencode/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.opencode.md`, or `SKILL.md` as fallback)
90
+
91
+ These four global destinations are written only by the explicit, opt-in
92
+ `keryx skills sync --runtime <runtime> --global` command — never as a side
93
+ effect of `keryx update`/`keryx init`. `claude` and `plugin` have no global
94
+ destination; use `keryx skills sync --runtime <runtime> --target <dir>` for
95
+ those instead.
74
96
 
75
97
  ## Mandatory Behavior
76
98
  1. Always create/update `SKILL.md` as the canonical source.
77
99
  2. Create platform variants only when platform-specific adaptations are needed; otherwise `SKILL.md` serves all platforms via fallback.
78
100
  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.
101
+ 4. Validate skills before sync.
102
+ 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`).
103
+ 6. Ensure `agents/openai.yaml` exists where required by the target agent UI.
104
+ 7. For create/update/sync workflows, produce a machine-readable final result for orchestrators.
83
105
 
84
106
  ## Machine-Readable Contract
85
- Use canonical schema:
86
- - `.metaproject/rules/schemas/skill-workflow-result.schema.json`
87
-
88
- Contract requirements:
107
+ No canonical schema file exists for this result yet. Contract requirements:
89
108
  - One top-level JSON object only.
90
109
  - Stable required keys.
91
110
  - Closed objects (`additionalProperties: false`).
@@ -105,12 +124,27 @@ Run before syncing skills:
105
124
  keryx skills verify --all
106
125
  ```
107
126
 
108
- Then run sync:
127
+ Then regenerate the project-local installed mirror
128
+ (`.metaproject/skills/gdskills/<category>/<skill-name>/`) from the bundled
129
+ source:
109
130
 
110
131
  ```bash
111
132
  keryx update
112
133
  ```
113
134
 
135
+ `keryx update` never writes outside the project, and it is the only route a
136
+ **shipped** skill has to reach a runtime — a shipped skill cannot be exported
137
+ and has no global-sync destination.
138
+
139
+ To push a **project-local** skill (`.metaproject/project-skills/<skill-name>/`)
140
+ to a harness's own global directory (opt-in, outside the project), export it
141
+ for that runtime first, then sync:
142
+
143
+ ```bash
144
+ keryx skills export <skill-name> --runtime <runtime>
145
+ keryx skills sync --runtime <runtime> --global
146
+ ```
147
+
114
148
  If validation fails, do not sync.
115
149
 
116
150
  ## Naming
@@ -121,4 +155,13 @@ If validation fails, do not sync.
121
155
  - Do not create skills in `~/.cursor/skills-cursor/`.
122
156
 
123
157
  ## Apply Changes Workflow
124
- Changes under `.metaproject/skills/gdskills/*` should be synced to tool directories using `keryx update`.
158
+ Edit skills under `src/gdskills/bundled/skills/<category>/<skill-name>/`
159
+ (shipped) or `.metaproject/project-skills/<skill-name>/` (project-local).
160
+ `keryx init`/`keryx update` regenerate the installed mirror at
161
+ `.metaproject/skills/gdskills/<category>/<skill-name>/` — this stays inside
162
+ the project, and is the only way a shipped skill reaches a runtime. For a
163
+ project-local skill only, run `keryx skills export <skill-name> --runtime
164
+ <runtime>` then `keryx skills sync --runtime <runtime> --global` separately to
165
+ push it to a harness's own global directory outside the project; shipped
166
+ skills cannot be exported (`keryx skills export` resolves project skills
167
+ 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
@@ -12,9 +12,9 @@ triggers:
12
12
  metadata:
13
13
  author: "MrCipherSmith"
14
14
  version: "1.0.0"
15
- category: "verification"
15
+ category: "orchestration"
16
16
  agent_worthy: true
17
- compatible_harnesses: "cursor,codex,zed,opencode"
17
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
18
18
  license: "MIT"
19
19
  ---
20
20
 
@@ -61,56 +61,43 @@ Code Verifier Progress:
61
61
 
62
62
  ### Phase 1: DETECT
63
63
 
64
- Auto-detect the project stack and available verification tools.
64
+ Determine scope. Stack and tool discovery is delegated to `keryx health run`
65
+ and `keryx test run` — do NOT hand-roll package-manager or
66
+ lint/type-check/test tool detection here.
65
67
 
66
- **1.1 Package manager and runner:**
67
-
68
- ```bash
69
- cd <codebase_path>
70
-
71
- if [ -f bun.lock ] || [ -f bun.lockb ]; then PM=bun; RUNNER="bun run"
72
- elif [ -f pnpm-lock.yaml ]; then PM=pnpm; RUNNER="pnpm run"
73
- elif [ -f yarn.lock ]; then PM=yarn; RUNNER="yarn"
74
- elif [ -f package-lock.json ]; then PM=npm; RUNNER="npm run"
75
- elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then PM=python; RUNNER=""
76
- elif [ -f go.mod ]; then PM=go; RUNNER=""
77
- else PM=unknown; RUNNER=""
78
- fi
79
- ```
80
-
81
- **1.2 Detect available check commands:**
82
-
83
- | Check | How to detect | Command |
84
- |---|---|---|
85
- | Lint | `package.json` has `"lint"` script | `$RUNNER lint` |
86
- | Lint (auto) | `eslint.config.*` or `.eslintrc*` present | `npx eslint . --max-warnings 0` |
87
- | Biome | `biome.json` present | `npx biome check .` |
88
- | Type-check | `package.json` has `"type-check"` or `"typecheck"` script | `$RUNNER type-check` |
89
- | Type-check (auto) | `tsconfig.json` present | `npx tsc --noEmit` |
90
- | Tests | `package.json` has `"test"` script | `$RUNNER test --run` (vitest) or `$RUNNER test` |
91
- | pytest | `pytest` in `pyproject.toml` or `requirements.txt` | `pytest --tb=short -q` |
92
- | Go tests | `go.mod` present | `go test ./...` |
93
- | Circular imports | `madge` in devDependencies | `npx madge --circular src/` |
94
-
95
- **1.3 Determine scope:**
68
+ **1.1 Determine scope:**
96
69
 
97
70
  ```
98
71
  IF scope = "changed" (default when dispatched by orchestrator):
99
72
  FILES = git diff --name-only <base_branch>...HEAD
100
- Run tests only for files related to changed code
101
- Run lint only on changed files: npx eslint <changed_files>
102
- Run type-check on full project (tsc doesn't support file-level scope)
73
+ Pass --changed to keryx health run and keryx test run below.
103
74
 
104
75
  IF scope = "full":
105
- Run all checks on full project
76
+ Run all checks on the full project (omit --changed).
106
77
  ```
107
78
 
79
+ **1.2 Checks used:**
80
+
81
+ | Check | Command |
82
+ |---|---|
83
+ | Lint + type-check | `keryx health run --changed --source eslint,typescript` (drop `--changed` for full scope) |
84
+ | Tests | `keryx test run --changed --strict` (drop `--changed` for full scope) |
85
+ | Circular imports | the project's own package-manager runner + `madge --circular --extensions ts,tsx src/`, if `madge` is a devDependency — optional; not covered by `keryx health run` / `keryx test run` |
86
+
87
+ `src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve
88
+ the real lint/type-check invocation for the project; `src/testing/service.ts`
89
+ detects `bun` / `pnpm` / `yarn` / `npm` from the lockfile and builds the test
90
+ invocation from the project's own test script. Do NOT hard-code a package
91
+ manager, linter, type-checker, or test binary here — that is the if-chain
92
+ these commands already resolve. On a project with no keryx health/testing
93
+ config, fall back to the project's own configured lint/type-check/test
94
+ command (discovered from its `package.json` scripts or equivalent, not a
95
+ hardcoded tool).
96
+
108
97
  **Output of Phase 1:**
109
98
  ```
110
99
  TOOLING:
111
- pm: bun | pnpm | yarn | npm | python | go | unknown
112
- runner: "bun run" | ...
113
- checks_available: [lint, type-check, tests, circular-imports]
100
+ checks_available: [lint+type-check, tests, circular-imports]
114
101
  checks_skipped: [<reason>]
115
102
  scope: changed | full
116
103
  changed_files: [<paths>]
@@ -120,54 +107,44 @@ TOOLING:
120
107
 
121
108
  ### Phase 2: RUN
122
109
 
123
- Execute each available check in order. Capture full output.
110
+ Execute each available check. Capture full output.
124
111
 
125
- **Execution order:** lint → type-check → tests → import-check
112
+ **Execution order:** lint+type-check → tests → import-check
126
113
 
127
114
  **Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
128
115
 
129
- **2.1 Lint:**
116
+ **2.1 Lint + type-check:**
130
117
  ```bash
131
- # Changed files only (faster, more actionable)
132
- npx eslint <changed_files> --format=json --max-warnings 0
133
- # OR if lint script exists:
134
- $RUNNER lint
118
+ keryx health run --changed --source eslint,typescript
119
+ # OR, full scope:
120
+ keryx health run --source eslint,typescript
135
121
  ```
136
122
 
137
- Capture:
138
- - Exit code (0 = pass, non-zero = fail)
123
+ Read the result with `keryx health status` (or the report path the command
124
+ prints). Capture:
125
+ - Gate status (pass/fail) per source
139
126
  - Number of errors and warnings
140
- - Per-file error list (file path, line, column, rule, message)
141
-
142
- **2.2 Type-check:**
143
- ```bash
144
- npx tsc --noEmit 2>&1
145
- # OR:
146
- $RUNNER type-check
147
- ```
127
+ - Per-finding: file, line, column, rule/TS code, message
148
128
 
149
- Capture:
150
- - Exit code
151
- - Number of errors
152
- - Per-error: file, line, column, message, TS error code
153
-
154
- **2.3 Tests:**
129
+ **2.2 Tests:**
155
130
  ```bash
156
- $RUNNER test --run 2>&1 # vitest
157
- # OR: npx jest --ci 2>&1
158
- # OR: pytest --tb=short -q 2>&1
159
- # OR: go test ./... 2>&1
131
+ keryx test run --changed --strict
132
+ # OR, full scope:
133
+ keryx test run --strict
160
134
  ```
161
135
 
162
136
  Capture:
163
- - Exit code
137
+ - Report status / exit code
164
138
  - Tests passed / failed / skipped counts
165
139
  - Per-failure: test name, file, error message, stack (first 5 lines)
166
140
 
167
- **2.4 Circular import check (if madge available):**
141
+ **2.3 Circular import check (if madge available):**
168
142
  ```bash
169
- npx madge --circular --extensions ts,tsx src/ 2>&1
143
+ <pm> exec madge --circular --extensions ts,tsx src/ 2>&1
170
144
  ```
145
+ `<pm>` is the project's own package-manager runner for devDependency
146
+ binaries (`pnpm exec`, `yarn`, or the npm-based equivalent), resolved the
147
+ same way `keryx test run` resolves it from the lockfile — not hardcoded.
171
148
 
172
149
  Capture:
173
150
  - Exit code
@@ -298,7 +275,7 @@ code-verifier:
298
275
  code-verifier:
299
276
  codebase_path: <worktree_path>
300
277
  scope: changed
301
- → If gate still FAIL after 2 iterations → report as BLOCKED, skip to report
278
+ → If gate still FAIL after 3 iterations → report as BLOCKED, skip to report
302
279
  → If gate: PASS → proceed to report
303
280
  ```
304
281
 
@@ -12,9 +12,9 @@ triggers:
12
12
  metadata:
13
13
  author: "MrCipherSmith"
14
14
  version: "1.0.0"
15
- category: "verification"
15
+ category: "orchestration"
16
16
  agent_worthy: true
17
- compatible_harnesses: "cursor,codex,zed,opencode"
17
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
18
18
  license: "MIT"
19
19
  ---
20
20
 
@@ -61,56 +61,43 @@ Code Verifier Progress:
61
61
 
62
62
  ### Phase 1: DETECT
63
63
 
64
- Auto-detect the project stack and available verification tools.
64
+ Determine scope. Stack and tool discovery is delegated to `keryx health run`
65
+ and `keryx test run` — do NOT hand-roll package-manager or
66
+ lint/type-check/test tool detection here.
65
67
 
66
- **1.1 Package manager and runner:**
67
-
68
- ```bash
69
- cd <codebase_path>
70
-
71
- if [ -f bun.lock ] || [ -f bun.lockb ]; then PM=bun; RUNNER="bun run"
72
- elif [ -f pnpm-lock.yaml ]; then PM=pnpm; RUNNER="pnpm run"
73
- elif [ -f yarn.lock ]; then PM=yarn; RUNNER="yarn"
74
- elif [ -f package-lock.json ]; then PM=npm; RUNNER="npm run"
75
- elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then PM=python; RUNNER=""
76
- elif [ -f go.mod ]; then PM=go; RUNNER=""
77
- else PM=unknown; RUNNER=""
78
- fi
79
- ```
80
-
81
- **1.2 Detect available check commands:**
82
-
83
- | Check | How to detect | Command |
84
- |---|---|---|
85
- | Lint | `package.json` has `"lint"` script | `$RUNNER lint` |
86
- | Lint (auto) | `eslint.config.*` or `.eslintrc*` present | `npx eslint . --max-warnings 0` |
87
- | Biome | `biome.json` present | `npx biome check .` |
88
- | Type-check | `package.json` has `"type-check"` or `"typecheck"` script | `$RUNNER type-check` |
89
- | Type-check (auto) | `tsconfig.json` present | `npx tsc --noEmit` |
90
- | Tests | `package.json` has `"test"` script | `$RUNNER test --run` (vitest) or `$RUNNER test` |
91
- | pytest | `pytest` in `pyproject.toml` or `requirements.txt` | `pytest --tb=short -q` |
92
- | Go tests | `go.mod` present | `go test ./...` |
93
- | Circular imports | `madge` in devDependencies | `npx madge --circular src/` |
94
-
95
- **1.3 Determine scope:**
68
+ **1.1 Determine scope:**
96
69
 
97
70
  ```
98
71
  IF scope = "changed" (default when dispatched by orchestrator):
99
72
  FILES = git diff --name-only <base_branch>...HEAD
100
- Run tests only for files related to changed code
101
- Run lint only on changed files: npx eslint <changed_files>
102
- Run type-check on full project (tsc doesn't support file-level scope)
73
+ Pass --changed to keryx health run and keryx test run below.
103
74
 
104
75
  IF scope = "full":
105
- Run all checks on full project
76
+ Run all checks on the full project (omit --changed).
106
77
  ```
107
78
 
79
+ **1.2 Checks used:**
80
+
81
+ | Check | Command |
82
+ |---|---|
83
+ | Lint + type-check | `keryx health run --changed --source eslint,typescript` (drop `--changed` for full scope) |
84
+ | Tests | `keryx test run --changed --strict` (drop `--changed` for full scope) |
85
+ | Circular imports | the project's own package-manager runner + `madge --circular --extensions ts,tsx src/`, if `madge` is a devDependency — optional; not covered by `keryx health run` / `keryx test run` |
86
+
87
+ `src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve
88
+ the real lint/type-check invocation for the project; `src/testing/service.ts`
89
+ detects `bun` / `pnpm` / `yarn` / `npm` from the lockfile and builds the test
90
+ invocation from the project's own test script. Do NOT hard-code a package
91
+ manager, linter, type-checker, or test binary here — that is the if-chain
92
+ these commands already resolve. On a project with no keryx health/testing
93
+ config, fall back to the project's own configured lint/type-check/test
94
+ command (discovered from its `package.json` scripts or equivalent, not a
95
+ hardcoded tool).
96
+
108
97
  **Output of Phase 1:**
109
98
  ```
110
99
  TOOLING:
111
- pm: bun | pnpm | yarn | npm | python | go | unknown
112
- runner: "bun run" | ...
113
- checks_available: [lint, type-check, tests, circular-imports]
100
+ checks_available: [lint+type-check, tests, circular-imports]
114
101
  checks_skipped: [<reason>]
115
102
  scope: changed | full
116
103
  changed_files: [<paths>]
@@ -120,54 +107,44 @@ TOOLING:
120
107
 
121
108
  ### Phase 2: RUN
122
109
 
123
- Execute each available check in order. Capture full output.
110
+ Execute each available check. Capture full output.
124
111
 
125
- **Execution order:** lint → type-check → tests → import-check
112
+ **Execution order:** lint+type-check → tests → import-check
126
113
 
127
114
  **Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
128
115
 
129
- **2.1 Lint:**
116
+ **2.1 Lint + type-check:**
130
117
  ```bash
131
- # Changed files only (faster, more actionable)
132
- npx eslint <changed_files> --format=json --max-warnings 0
133
- # OR if lint script exists:
134
- $RUNNER lint
118
+ keryx health run --changed --source eslint,typescript
119
+ # OR, full scope:
120
+ keryx health run --source eslint,typescript
135
121
  ```
136
122
 
137
- Capture:
138
- - Exit code (0 = pass, non-zero = fail)
123
+ Read the result with `keryx health status` (or the report path the command
124
+ prints). Capture:
125
+ - Gate status (pass/fail) per source
139
126
  - Number of errors and warnings
140
- - Per-file error list (file path, line, column, rule, message)
141
-
142
- **2.2 Type-check:**
143
- ```bash
144
- npx tsc --noEmit 2>&1
145
- # OR:
146
- $RUNNER type-check
147
- ```
127
+ - Per-finding: file, line, column, rule/TS code, message
148
128
 
149
- Capture:
150
- - Exit code
151
- - Number of errors
152
- - Per-error: file, line, column, message, TS error code
153
-
154
- **2.3 Tests:**
129
+ **2.2 Tests:**
155
130
  ```bash
156
- $RUNNER test --run 2>&1 # vitest
157
- # OR: npx jest --ci 2>&1
158
- # OR: pytest --tb=short -q 2>&1
159
- # OR: go test ./... 2>&1
131
+ keryx test run --changed --strict
132
+ # OR, full scope:
133
+ keryx test run --strict
160
134
  ```
161
135
 
162
136
  Capture:
163
- - Exit code
137
+ - Report status / exit code
164
138
  - Tests passed / failed / skipped counts
165
139
  - Per-failure: test name, file, error message, stack (first 5 lines)
166
140
 
167
- **2.4 Circular import check (if madge available):**
141
+ **2.3 Circular import check (if madge available):**
168
142
  ```bash
169
- npx madge --circular --extensions ts,tsx src/ 2>&1
143
+ <pm> exec madge --circular --extensions ts,tsx src/ 2>&1
170
144
  ```
145
+ `<pm>` is the project's own package-manager runner for devDependency
146
+ binaries (`pnpm exec`, `yarn`, or the npm-based equivalent), resolved the
147
+ same way `keryx test run` resolves it from the lockfile — not hardcoded.
171
148
 
172
149
  Capture:
173
150
  - Exit code
@@ -298,7 +275,7 @@ code-verifier:
298
275
  code-verifier:
299
276
  codebase_path: <worktree_path>
300
277
  scope: changed
301
- → If gate still FAIL after 2 iterations → report as BLOCKED, skip to report
278
+ → If gate still FAIL after 3 iterations → report as BLOCKED, skip to report
302
279
  → If gate: PASS → proceed to report
303
280
  ```
304
281
 
@@ -12,9 +12,9 @@ triggers:
12
12
  metadata:
13
13
  author: "MrCipherSmith"
14
14
  version: "1.0.0"
15
- category: "verification"
15
+ category: "orchestration"
16
16
  agent_worthy: true
17
- compatible_harnesses: "cursor,codex,zed,opencode"
17
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
18
18
  license: "MIT"
19
19
  ---
20
20
 
@@ -61,56 +61,43 @@ Code Verifier Progress:
61
61
 
62
62
  ### Phase 1: DETECT
63
63
 
64
- Auto-detect the project stack and available verification tools.
64
+ Determine scope. Stack and tool discovery is delegated to `keryx health run`
65
+ and `keryx test run` — do NOT hand-roll package-manager or
66
+ lint/type-check/test tool detection here.
65
67
 
66
- **1.1 Package manager and runner:**
67
-
68
- ```bash
69
- cd <codebase_path>
70
-
71
- if [ -f bun.lock ] || [ -f bun.lockb ]; then PM=bun; RUNNER="bun run"
72
- elif [ -f pnpm-lock.yaml ]; then PM=pnpm; RUNNER="pnpm run"
73
- elif [ -f yarn.lock ]; then PM=yarn; RUNNER="yarn"
74
- elif [ -f package-lock.json ]; then PM=npm; RUNNER="npm run"
75
- elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then PM=python; RUNNER=""
76
- elif [ -f go.mod ]; then PM=go; RUNNER=""
77
- else PM=unknown; RUNNER=""
78
- fi
79
- ```
80
-
81
- **1.2 Detect available check commands:**
82
-
83
- | Check | How to detect | Command |
84
- |---|---|---|
85
- | Lint | `package.json` has `"lint"` script | `$RUNNER lint` |
86
- | Lint (auto) | `eslint.config.*` or `.eslintrc*` present | `npx eslint . --max-warnings 0` |
87
- | Biome | `biome.json` present | `npx biome check .` |
88
- | Type-check | `package.json` has `"type-check"` or `"typecheck"` script | `$RUNNER type-check` |
89
- | Type-check (auto) | `tsconfig.json` present | `npx tsc --noEmit` |
90
- | Tests | `package.json` has `"test"` script | `$RUNNER test --run` (vitest) or `$RUNNER test` |
91
- | pytest | `pytest` in `pyproject.toml` or `requirements.txt` | `pytest --tb=short -q` |
92
- | Go tests | `go.mod` present | `go test ./...` |
93
- | Circular imports | `madge` in devDependencies | `npx madge --circular src/` |
94
-
95
- **1.3 Determine scope:**
68
+ **1.1 Determine scope:**
96
69
 
97
70
  ```
98
71
  IF scope = "changed" (default when dispatched by orchestrator):
99
72
  FILES = git diff --name-only <base_branch>...HEAD
100
- Run tests only for files related to changed code
101
- Run lint only on changed files: npx eslint <changed_files>
102
- Run type-check on full project (tsc doesn't support file-level scope)
73
+ Pass --changed to keryx health run and keryx test run below.
103
74
 
104
75
  IF scope = "full":
105
- Run all checks on full project
76
+ Run all checks on the full project (omit --changed).
106
77
  ```
107
78
 
79
+ **1.2 Checks used:**
80
+
81
+ | Check | Command |
82
+ |---|---|
83
+ | Lint + type-check | `keryx health run --changed --source eslint,typescript` (drop `--changed` for full scope) |
84
+ | Tests | `keryx test run --changed --strict` (drop `--changed` for full scope) |
85
+ | Circular imports | the project's own package-manager runner + `madge --circular --extensions ts,tsx src/`, if `madge` is a devDependency — optional; not covered by `keryx health run` / `keryx test run` |
86
+
87
+ `src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve
88
+ the real lint/type-check invocation for the project; `src/testing/service.ts`
89
+ detects `bun` / `pnpm` / `yarn` / `npm` from the lockfile and builds the test
90
+ invocation from the project's own test script. Do NOT hard-code a package
91
+ manager, linter, type-checker, or test binary here — that is the if-chain
92
+ these commands already resolve. On a project with no keryx health/testing
93
+ config, fall back to the project's own configured lint/type-check/test
94
+ command (discovered from its `package.json` scripts or equivalent, not a
95
+ hardcoded tool).
96
+
108
97
  **Output of Phase 1:**
109
98
  ```
110
99
  TOOLING:
111
- pm: bun | pnpm | yarn | npm | python | go | unknown
112
- runner: "bun run" | ...
113
- checks_available: [lint, type-check, tests, circular-imports]
100
+ checks_available: [lint+type-check, tests, circular-imports]
114
101
  checks_skipped: [<reason>]
115
102
  scope: changed | full
116
103
  changed_files: [<paths>]
@@ -120,54 +107,44 @@ TOOLING:
120
107
 
121
108
  ### Phase 2: RUN
122
109
 
123
- Execute each available check in order. Capture full output.
110
+ Execute each available check. Capture full output.
124
111
 
125
- **Execution order:** lint → type-check → tests → import-check
112
+ **Execution order:** lint+type-check → tests → import-check
126
113
 
127
114
  **Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
128
115
 
129
- **2.1 Lint:**
116
+ **2.1 Lint + type-check:**
130
117
  ```bash
131
- # Changed files only (faster, more actionable)
132
- npx eslint <changed_files> --format=json --max-warnings 0
133
- # OR if lint script exists:
134
- $RUNNER lint
118
+ keryx health run --changed --source eslint,typescript
119
+ # OR, full scope:
120
+ keryx health run --source eslint,typescript
135
121
  ```
136
122
 
137
- Capture:
138
- - Exit code (0 = pass, non-zero = fail)
123
+ Read the result with `keryx health status` (or the report path the command
124
+ prints). Capture:
125
+ - Gate status (pass/fail) per source
139
126
  - Number of errors and warnings
140
- - Per-file error list (file path, line, column, rule, message)
141
-
142
- **2.2 Type-check:**
143
- ```bash
144
- npx tsc --noEmit 2>&1
145
- # OR:
146
- $RUNNER type-check
147
- ```
127
+ - Per-finding: file, line, column, rule/TS code, message
148
128
 
149
- Capture:
150
- - Exit code
151
- - Number of errors
152
- - Per-error: file, line, column, message, TS error code
153
-
154
- **2.3 Tests:**
129
+ **2.2 Tests:**
155
130
  ```bash
156
- $RUNNER test --run 2>&1 # vitest
157
- # OR: npx jest --ci 2>&1
158
- # OR: pytest --tb=short -q 2>&1
159
- # OR: go test ./... 2>&1
131
+ keryx test run --changed --strict
132
+ # OR, full scope:
133
+ keryx test run --strict
160
134
  ```
161
135
 
162
136
  Capture:
163
- - Exit code
137
+ - Report status / exit code
164
138
  - Tests passed / failed / skipped counts
165
139
  - Per-failure: test name, file, error message, stack (first 5 lines)
166
140
 
167
- **2.4 Circular import check (if madge available):**
141
+ **2.3 Circular import check (if madge available):**
168
142
  ```bash
169
- npx madge --circular --extensions ts,tsx src/ 2>&1
143
+ <pm> exec madge --circular --extensions ts,tsx src/ 2>&1
170
144
  ```
145
+ `<pm>` is the project's own package-manager runner for devDependency
146
+ binaries (`pnpm exec`, `yarn`, or the npm-based equivalent), resolved the
147
+ same way `keryx test run` resolves it from the lockfile — not hardcoded.
171
148
 
172
149
  Capture:
173
150
  - Exit code
@@ -298,7 +275,7 @@ code-verifier:
298
275
  code-verifier:
299
276
  codebase_path: <worktree_path>
300
277
  scope: changed
301
- → If gate still FAIL after 2 iterations → report as BLOCKED, skip to report
278
+ → If gate still FAIL after 3 iterations → report as BLOCKED, skip to report
302
279
  → If gate: PASS → proceed to report
303
280
  ```
304
281