@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.
- package/dist/cli.js +4583 -2702
- package/dist/core.js +40 -2
- package/package.json +1 -1
- package/src/gdskills/bundled/rules/core/api-contracts.mdc +1 -0
- package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
- package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +1 -0
- package/src/gdskills/bundled/rules/core/database-patterns.mdc +1 -0
- package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
- package/src/gdskills/bundled/rules/core/documentation-management.mdc +33 -38
- package/src/gdskills/bundled/rules/core/error-handling.mdc +1 -11
- package/src/gdskills/bundled/rules/core/execution-metrics.md +1 -2
- package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +1 -0
- package/src/gdskills/bundled/rules/core/git-concurrency.mdc +101 -0
- package/src/gdskills/bundled/rules/core/implementation-plans.mdc +23 -11
- package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +1 -0
- package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +1 -0
- package/src/gdskills/bundled/rules/core/playwright-testing.mdc +1 -0
- package/src/gdskills/bundled/rules/core/requirements-management.mdc +15 -11
- package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +29 -14
- package/src/gdskills/bundled/rules/core/shared-definitions.mdc +1 -1
- package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +9 -5
- package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +156 -23
- package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +1 -0
- package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
- package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +67 -74
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +24 -8
- package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +44 -31
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +4 -4
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +20 -6
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +67 -9
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +6 -6
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +45 -5
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +88 -32
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +52 -41
- package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
- package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +29 -4
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
- package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
- package/src/gdskills/bundled/skills/planning/interview/SKILL.md +30 -8
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +33 -7
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +27 -10
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
- package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +27 -3
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +29 -4
- package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +25 -5
- package/src/gdskills/bundled/skills/quality/commit/SKILL.md +26 -5
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +26 -5
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +27 -4
- package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
- package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
- package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +30 -9
- package/src/gdskills/bundled/skills/quality/pr/SKILL.md +25 -5
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +27 -4
- package/src/gdskills/bundled/skills/quality/push/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +31 -5
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +32 -11
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +42 -7
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +43 -3
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +46 -4
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +46 -6
- package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +5 -5
- package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +5 -6
- package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +6 -6
- package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +37 -3
- package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +38 -4
- package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +4 -6
- package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +37 -3
- package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +5 -7
- package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +5 -5
- package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +49 -64
- package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +1 -2
- package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +1 -5
- package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +53 -9
- package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +11 -11
- package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +9 -8
- package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
- package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +6 -4
- package/src/gdskills/bundled/skills/review/review-style/SKILL.md +5 -5
- package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +41 -3
- package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +2 -2
- package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +0 -49
- package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +0 -48
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -659
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -659
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -659
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -659
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
- package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
- package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
- package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
- package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
- package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
- package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
- package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
- package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -75
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -75
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -339
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -339
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -339
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -339
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
- 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
|
|
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
|
|
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
|
-
|
|
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
|
|
20
|
-
3.
|
|
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
|
|
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
|
|
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:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Rules for creating and updating requirement documents
|
|
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
|
-
|
|
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.
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
33
|
-
4.
|
|
34
|
-
5.
|
|
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.
|
|
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
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
55
|
+
keryx rules sync
|
|
39
56
|
```
|
|
40
57
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
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
|
|
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`
|
|
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
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
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 (
|
|
26
|
-
- `SKILL.codex.md` — Codex-specific variant (
|
|
27
|
-
- `SKILL.zed.md` — Zed-specific variant (
|
|
28
|
-
- `SKILL.opencode.md` — OpenCode-specific variant (
|
|
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.
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
@@ -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
|
|
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.
|