@cleocode/skills 2026.9.21 → 2026.9.22

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 (151) hide show
  1. package/README.md +46 -63
  2. package/frontmatter.d.mts +60 -0
  3. package/frontmatter.mjs +277 -0
  4. package/index.d.ts +3 -3
  5. package/index.js +34 -9
  6. package/package.json +4 -2
  7. package/profiles/core.json +10 -3
  8. package/profiles/full.json +10 -6
  9. package/profiles/recommended.json +29 -3
  10. package/skills/_shared/manifest-operations.md +19 -40
  11. package/skills/_shared/skill-chaining-patterns.md +5 -9
  12. package/skills/_shared/subagent-protocol-base.md +6 -6
  13. package/skills/_shared/task-system-integration.md +5 -5
  14. package/skills/ct-adr-recorder/SKILL.md +18 -17
  15. package/skills/ct-artifact-publisher/SKILL.md +10 -7
  16. package/skills/ct-cleo/SKILL.md +25 -8
  17. package/skills/ct-cleo/references/loom-lifecycle.md +1 -1
  18. package/skills/{ct-memory/SKILL.md → ct-cleo/references/memory.md} +10 -23
  19. package/skills/ct-cleo/references/orchestrator-constraints.md +5 -5
  20. package/skills/ct-cleo/references/session-protocol.md +11 -8
  21. package/skills/{ct-stickynote/SKILL.md → ct-cleo/references/sticky-notes.md} +7 -29
  22. package/skills/ct-codebase-mapper/SKILL.md +62 -38
  23. package/skills/ct-consensus-voter/SKILL.md +10 -7
  24. package/skills/ct-contribution/SKILL.md +7 -5
  25. package/skills/ct-dev-workflow/SKILL.md +7 -7
  26. package/skills/ct-documentor/SKILL.md +29 -29
  27. package/skills/{ct-docs-review/__tests__/skill-docs-review.test.ts → ct-documentor/__tests__/reviewing-reference.test.ts} +4 -3
  28. package/skills/{ct-docs-write/__tests__/skill-docs-write.test.ts → ct-documentor/__tests__/writing-reference.test.ts} +4 -3
  29. package/skills/ct-documentor/references/anti-patterns.md +8 -8
  30. package/skills/{ct-docs-write → ct-documentor}/references/audience-targeting.md +5 -5
  31. package/skills/ct-documentor/references/chain-orchestration.md +19 -19
  32. package/skills/{ct-docs-write → ct-documentor}/references/cleo-style-guide.md +1 -1
  33. package/skills/ct-documentor/references/doc-types-and-templates.md +1 -1
  34. package/skills/{ct-docs-review → ct-documentor}/references/pr-review-mode.md +1 -1
  35. package/skills/{ct-docs-review/SKILL.md → ct-documentor/references/reviewing.md} +6 -26
  36. package/skills/ct-documentor/references/style-coordination.md +5 -5
  37. package/skills/{ct-docs-review → ct-documentor}/references/style-violations.md +1 -1
  38. package/skills/{ct-docs-write/SKILL.md → ct-documentor/references/writing.md} +5 -25
  39. package/skills/ct-epic-architect/SKILL.md +12 -9
  40. package/skills/ct-epic-architect/references/commands.md +5 -5
  41. package/skills/ct-epic-architect/references/output-format.md +2 -2
  42. package/skills/ct-epic-architect/references/patterns.md +2 -2
  43. package/skills/ct-epic-architect/references/skill-aware-execution.md +3 -3
  44. package/skills/ct-grade/SKILL.md +3 -4
  45. package/skills/ct-grade/agents/scenario-runner.md +1 -1
  46. package/skills/ct-ivt-looper/SKILL.md +23 -22
  47. package/skills/ct-lead/SKILL.md +45 -13
  48. package/skills/ct-lead/references/aggregation-protocol.md +44 -21
  49. package/skills/ct-lead/references/spawn-pattern.md +12 -11
  50. package/skills/ct-orchestrator/README.md +2 -2
  51. package/skills/ct-orchestrator/SKILL.md +14 -10
  52. package/skills/ct-orchestrator/references/SUBAGENT-PROTOCOL-BLOCK.md +4 -4
  53. package/skills/ct-orchestrator/references/autonomous-operation.md +4 -4
  54. package/skills/ct-orchestrator/references/orchestrator-compliance.md +3 -3
  55. package/skills/ct-orchestrator/references/orchestrator-patterns.md +20 -19
  56. package/skills/ct-orchestrator/references/orchestrator-recovery.md +13 -23
  57. package/skills/ct-orchestrator/references/orchestrator-spawning.md +9 -10
  58. package/skills/ct-orchestrator/references/orchestrator-tokens.md +9 -9
  59. package/skills/ct-provenance-keeper/SKILL.md +10 -7
  60. package/skills/ct-release-orchestrator/SKILL.md +21 -13
  61. package/skills/ct-release-orchestrator/references/composition.md +1 -1
  62. package/skills/ct-release-orchestrator/references/release-types.md +33 -15
  63. package/skills/ct-research-agent/SKILL.md +14 -12
  64. package/skills/ct-research-agent/references/triggers-and-routing.md +4 -4
  65. package/skills/{ct-skill-creator → ct-skill-author}/SKILL.md +9 -6
  66. package/skills/{ct-skill-validator → ct-skill-author}/agents/ecosystem-checker.md +1 -1
  67. package/skills/{ct-skill-validator → ct-skill-author}/evals/quality_evals.json +10 -10
  68. package/skills/{ct-skill-validator → ct-skill-author}/evals/trigger_queries.json +1 -1
  69. package/skills/{ct-skill-validator → ct-skill-author}/references/cleo-ecosystem-rules.md +8 -4
  70. package/skills/{ct-skill-creator → ct-skill-author}/references/provider-deployment.md +10 -6
  71. package/skills/{ct-skill-validator/SKILL.md → ct-skill-author/references/validating.md} +14 -21
  72. package/skills/{ct-skill-validator → ct-skill-author}/references/validation-rules.md +2 -2
  73. package/skills/{ct-skill-validator → ct-skill-author}/scripts/_skill_finder.py +2 -2
  74. package/skills/{ct-skill-validator → ct-skill-author}/scripts/check_depth.py +2 -5
  75. package/skills/{ct-skill-validator → ct-skill-author}/scripts/generate_validation_report.py +1 -1
  76. package/skills/{ct-skill-validator → ct-skill-author}/scripts/run_quality_eval.py +2 -2
  77. package/skills/ct-spec-writer/SKILL.md +9 -7
  78. package/skills/ct-task-executor/SKILL.md +19 -16
  79. package/skills/ct-task-executor/references/common-failures.md +1 -1
  80. package/skills/ct-validator/SKILL.md +11 -9
  81. package/skills/ct-validator/references/compliance-reports.md +1 -1
  82. package/skills/ct-validator/references/validation-modes.md +3 -3
  83. package/skills/manifest.json +381 -365
  84. package/dispatch-config.json +0 -983
  85. package/provider-skills-map.json +0 -97
  86. package/skills/ct-docs-lookup/SKILL.md +0 -185
  87. package/skills/ct-docs-lookup/references/ctx7-workflow.md +0 -198
  88. package/skills/ct-docs-lookup/references/library-id-resolution.md +0 -217
  89. package/skills/ct-docs-lookup/references/version-specific-docs.md +0 -220
  90. package/skills/ct-master-tac/SKILL.md +0 -120
  91. package/skills/ct-master-tac/__tests__/install.test.ts +0 -304
  92. package/skills/ct-master-tac/bundled/README.md +0 -40
  93. package/skills/ct-master-tac/bundled/protocols/architecture-decision.cant +0 -90
  94. package/skills/ct-master-tac/bundled/protocols/artifact-publish.cant +0 -105
  95. package/skills/ct-master-tac/bundled/protocols/consensus.cant +0 -85
  96. package/skills/ct-master-tac/bundled/protocols/contribution.cant +0 -92
  97. package/skills/ct-master-tac/bundled/protocols/decomposition.cant +0 -102
  98. package/skills/ct-master-tac/bundled/protocols/implementation.cant +0 -77
  99. package/skills/ct-master-tac/bundled/protocols/provenance.cant +0 -100
  100. package/skills/ct-master-tac/bundled/protocols/release.cant +0 -107
  101. package/skills/ct-master-tac/bundled/protocols/research.cant +0 -77
  102. package/skills/ct-master-tac/bundled/protocols/specification.cant +0 -77
  103. package/skills/ct-master-tac/bundled/protocols/testing.cant +0 -99
  104. package/skills/ct-master-tac/bundled/protocols/validation.cant +0 -75
  105. package/skills/ct-master-tac/bundled/teams/platform.cant +0 -115
  106. package/skills/ct-master-tac/manifest.json +0 -55
  107. package/skills/ct-skill-creator/eval-viewer/__pycache__/generate_review.cpython-314.pyc +0 -0
  108. package/skills/ct-skill-creator/manifest-entry.json +0 -17
  109. package/skills/ct-skill-creator/scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  110. package/skills/ct-skill-creator/scripts/__pycache__/aggregate_benchmark.cpython-314.pyc +0 -0
  111. package/skills/ct-skill-creator/scripts/__pycache__/generate_report.cpython-314.pyc +0 -0
  112. package/skills/ct-skill-creator/scripts/__pycache__/improve_description.cpython-314.pyc +0 -0
  113. package/skills/ct-skill-creator/scripts/__pycache__/init_skill.cpython-314.pyc +0 -0
  114. package/skills/ct-skill-creator/scripts/__pycache__/quick_validate.cpython-314.pyc +0 -0
  115. package/skills/ct-skill-creator/scripts/__pycache__/run_eval.cpython-314.pyc +0 -0
  116. package/skills/ct-skill-creator/scripts/__pycache__/run_loop.cpython-314.pyc +0 -0
  117. package/skills/ct-skill-creator/scripts/__pycache__/utils.cpython-314.pyc +0 -0
  118. package/skills/ct-skill-validator/manifest-entry.json +0 -20
  119. package/skills/ct-stickynote/README.md +0 -14
  120. package/skills/signaldock-connect/SKILL.md +0 -137
  121. package/skills/signaldock-connect/assets/agent-card.json +0 -48
  122. package/skills/signaldock-connect/references/api-endpoints.md +0 -131
  123. package/skills.json +0 -495
  124. /package/skills/{ct-docs-review → ct-documentor}/references/inline-comment-patterns.md +0 -0
  125. /package/skills/{ct-docs-write → ct-documentor}/references/markdown-patterns.md +0 -0
  126. /package/skills/{ct-skill-creator → ct-skill-author}/agents/analyzer.md +0 -0
  127. /package/skills/{ct-skill-creator → ct-skill-author}/agents/comparator.md +0 -0
  128. /package/skills/{ct-skill-creator → ct-skill-author}/agents/grader.md +0 -0
  129. /package/skills/{ct-skill-creator → ct-skill-author}/assets/eval_review.html +0 -0
  130. /package/skills/{ct-skill-validator → ct-skill-author}/assets/valid-skill-example.md +0 -0
  131. /package/skills/{ct-skill-creator → ct-skill-author}/eval-viewer/generate_review.py +0 -0
  132. /package/skills/{ct-skill-creator → ct-skill-author}/eval-viewer/viewer.html +0 -0
  133. /package/skills/{ct-skill-creator → ct-skill-author}/references/dynamic-context.md +0 -0
  134. /package/skills/{ct-skill-creator → ct-skill-author}/references/frontmatter.md +0 -0
  135. /package/skills/{ct-skill-creator → ct-skill-author}/references/invocation-control.md +0 -0
  136. /package/skills/{ct-skill-creator → ct-skill-author}/references/output-patterns.md +0 -0
  137. /package/skills/{ct-skill-creator → ct-skill-author}/references/schemas.md +0 -0
  138. /package/skills/{ct-skill-creator → ct-skill-author}/references/workflows.md +0 -0
  139. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/__init__.py +0 -0
  140. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/aggregate_benchmark.py +0 -0
  141. /package/skills/{ct-skill-validator → ct-skill-author}/scripts/audit_body.py +0 -0
  142. /package/skills/{ct-skill-validator → ct-skill-author}/scripts/check_ecosystem.py +0 -0
  143. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/generate_report.py +0 -0
  144. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/improve_description.py +0 -0
  145. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/init_skill.py +0 -0
  146. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/package_skill.py +0 -0
  147. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/quick_validate.py +0 -0
  148. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/run_eval.py +0 -0
  149. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/run_loop.py +0 -0
  150. /package/skills/{ct-skill-creator → ct-skill-author}/scripts/utils.py +0 -0
  151. /package/skills/{ct-skill-validator → ct-skill-author}/scripts/validate.py +0 -0
@@ -16,7 +16,7 @@ The `spawn` command handles token injection automatically. For manual injection,
16
16
  # 3. Gets task context from CLEO
17
17
  # 4. Extracts manifest summaries
18
18
  # 5. Injects all tokens
19
- cleo orchestrate spawn T1586 --template ct-research-agent
19
+ cleo orchestrate spawn T1586 --protocol research
20
20
  ```
21
21
 
22
22
  ### Manual Token Injection
@@ -33,7 +33,7 @@ export TI_TOPIC_SLUG="my-research-topic"
33
33
  ti_set_defaults
34
34
 
35
35
  # 3. Optional: Get task context from CLEO
36
- task_json=$(cleo show T1234 --format json)
36
+ task_json=$(cleo show T1234)
37
37
  ti_set_task_context "$task_json"
38
38
 
39
39
  # 4. Load and inject skill template
@@ -70,7 +70,7 @@ template=$(ti_load_template "skills/ct-research-agent/SKILL.md")
70
70
 
71
71
  | Token | Default Value |
72
72
  |-------|---------------|
73
- | `{{OUTPUT_DIR}}` | `.cleo/agent-outputs` |
73
+ | `{{OUTPUT_DIR}}` | `.cleo/agent-outputs` (legacy token — do not write there; record output with `cleo docs add`) |
74
74
 
75
75
 
76
76
  ### Task Context Tokens (populated from CLEO task data)
@@ -113,7 +113,7 @@ For fine-grained control over token injection, use `lib/token-inject.sh` directl
113
113
  |----------|--------|--------|
114
114
  | **Required** | `{{TASK_ID}}`, `{{DATE}}`, `{{TOPIC_SLUG}}` | Must be set before injection |
115
115
  | **Task Commands** | `{{TASK_SHOW_CMD}}`, `{{TASK_START_CMD}}`, `{{TASK_COMPLETE_CMD}}`, etc. | CLEO defaults |
116
- | **Output Paths** | `{{OUTPUT_DIR}}`, `{{MANIFEST_PATH}}` | CLEO defaults |
116
+ | **Output Paths** | `{{OUTPUT_DIR}}` | Legacy CLEO default — record output with `cleo docs add` and manifest entries with `cleo manifest append` |
117
117
  | **Task Context** | `{{TASK_TITLE}}`, `{{TASK_DESCRIPTION}}`, `{{DEPENDS_LIST}}`, etc. | From CLEO task data |
118
118
  | **Manifest Context** | `{{MANIFEST_SUMMARIES}}` | From recent pipeline_manifest entries |
119
119
 
@@ -129,7 +129,7 @@ ti_set_context "T1234" "2026-01-20" "auth-research"
129
129
  ti_set_defaults
130
130
 
131
131
  # 3. Get task context from CLEO
132
- task_json=$(cleo show T1234 --format json)
132
+ task_json=$(cleo show T1234)
133
133
  ti_set_task_context "$task_json"
134
134
 
135
135
  # 4. Load and inject skill template
@@ -155,8 +155,8 @@ echo "$template" | grep -c '{{' && echo "WARNING: Uninjected tokens remain"
155
155
  ## Subagent Protocol Tokens
156
156
 
157
157
  Token defaults (from `skills/_shared/placeholders.json`):
158
- - `{{OUTPUT_DIR}}` -> `.cleo/agent-outputs`
159
- - `{{MANIFEST_PATH}}` -> retired (ADR-027) — use `cleo manifest append`
158
+ - `{{OUTPUT_DIR}}` -> `.cleo/agent-outputs` (legacy token — record output with `cleo docs add`, never raw writes there)
159
+ - The flat manifest path token is retired (ADR-027) — use `cleo manifest append`
160
160
 
161
161
  ### Inline Protocol Block (when CLI unavailable)
162
162
 
@@ -164,8 +164,8 @@ Token defaults (from `skills/_shared/placeholders.json`):
164
164
  ## SUBAGENT PROTOCOL (RFC 2119 - MANDATORY)
165
165
 
166
166
  OUTPUT REQUIREMENTS:
167
- 1. MUST write findings to: {{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md
168
- 2. MUST append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027/T1093)
167
+ 1. MUST record findings with `cleo docs add {{TASK_ID}} --content - --type <kind> --slug {{TOPIC_SLUG}}` (never a raw file under `.cleo/agent-outputs/`)
168
+ 2. MUST append ONE entry via `cleo manifest append --entry '<json>'` (writes to pipeline_manifest table per ADR-027/T1093)
169
169
  3. MUST return ONLY: "Research complete. Manifest appended to pipeline_manifest."
170
170
  4. MUST NOT return research content in response.
171
171
 
@@ -2,9 +2,13 @@
2
2
  name: ct-provenance-keeper
3
3
  description: "Generates in-toto v1 attestations, SLSA-level provenance records, SBOMs (CycloneDX or SPDX), and sigstore/cosign signatures for published artifacts. Invoked by ct-artifact-publisher as a delegation for signing and attestation. Records the full commit, then build, then artifact, then attestation, then registry chain in .cleo/releases.json and rejects publishes whose digest does not match the attestation. Triggers when artifact-publish reaches the provenance step or when a release needs SLSA L2+ attestation."
4
4
  metadata:
5
- version: 1.0.0
5
+ version: 1.0.2
6
6
  tier: on-demand
7
7
  install: harness
8
+ covers:
9
+ - packages/core/src/validation/protocols/cant/provenance.cant
10
+ - packages/core/src/validation/protocols/protocols-markdown/provenance.md
11
+ lastReviewed: 2026-09-28
8
12
  stability: stable
9
13
  ---
10
14
 
@@ -132,11 +136,10 @@ Each release appends a record in the following shape. The skill MUST populate ev
132
136
  Validate the provenance entry through `cleo check protocol`:
133
137
 
134
138
  ```bash
135
- cleo check protocol \
136
- --protocolType provenance \
137
- --taskId T4902 \
138
- --hasAttestation true \
139
- --hasSbom true
139
+ cleo check protocol provenance \
140
+ --task-id T4902 \
141
+ --has-attestation true \
142
+ --has-sbom true
140
143
  ```
141
144
 
142
145
  Exit code 0 = provenance record is complete and verified. Exit code 90 = invalid config. Exit code 91 = signing key missing. Exit code 92 = signature invalid. Exit code 93 = digest mismatch (refuse to bind attestation). Exit code 94 = attestation format or subject is invalid.
@@ -163,4 +166,4 @@ Exit code 0 = provenance record is complete and verified. Exit code 90 = invalid
163
166
  5. Default to sigstore keyless signing via OIDC in CI; fall back to gpg only when configured.
164
167
  6. Generate CycloneDX SBOMs for every artifact with runtime dependencies.
165
168
  7. `.cleo/releases.json` is append-only; never mutate past entries.
166
- 8. Validate every run via `cleo check protocol --protocolType provenance`.
169
+ 8. Validate every run via `cleo check protocol provenance`.
@@ -2,16 +2,20 @@
2
2
  name: ct-release-orchestrator
3
3
  description: "Orchestrates the canonical 4-verb release pipeline introduced by SPEC-T9345: cleo release plan, then cleo release open, then PR + GHA tag workflow, then cleo release reconcile. The deprecated cleo release ship monolith was deleted in T10103 — do not invoke it. Use ship-e2e-smoke to validate the full pipeline end-to-end (dry-run by default). The full verb-to-state map is in docs/release/verb-matrix.md. Use when shipping a new version, validating the release pipeline end-to-end, or promoting a completed epic to released status."
4
4
  protocol: release
5
- loomStage: release
6
5
  adrRefs:
7
6
  - ADR-053
8
7
  - ADR-063
9
8
  - ADR-065
10
9
  metadata:
11
- version: 3.0.0
10
+ version: 3.0.2
12
11
  tier: on-demand
13
12
  install: harness
14
- lastReviewed: 2026-05-22
13
+ covers:
14
+ - packages/core/src/validation/protocols/cant/release.cant
15
+ - packages/core/src/validation/protocols/protocols-markdown/release.md
16
+ - packages/cleo/src/cli/commands/release.ts
17
+ loomStage: release
18
+ lastReviewed: 2026-09-28
15
19
  stability: stable
16
20
  ---
17
21
 
@@ -32,7 +36,7 @@ Owns the canonical 4-verb release pipeline established by SPEC-T9345 and finalis
32
36
  | 1 | `cleo release plan <ver> --epic <id>` | _(none)_ → `planned` | Builds the Release Plan envelope; auto-writes `CHANGELOG.md` (T10105 closes the silent-skip gap) |
33
37
  | 2 | `cleo release open <ver>` | `planned` → `pr-opened` | Dispatches `release-prepare.yml`; the workflow cuts the branch + opens the PR |
34
38
  | 3 | _(GHA)_ `release-prepare.yml` → PR merge | `pr-opened` → `pr-merged` | Owned by CI; verify via `cleo release pr-status <ver>` |
35
- | 4 | _(GHA)_ `auto-tag-on-release-merge.yml` (T10104) | `pr-merged` → `tag-pushed` | Auto-tag on merge — no manual `git tag` needed |
39
+ | 4 | `git tag -a v<ver> -m "Release v<ver>" && git push origin v<ver>` | `pr-merged` → `tag-pushed` | Explicit tag after the release PR merges — `auto-tag-on-release-merge.yml` is retired (T10434, ADR-087); the tag push triggers `release.yml` |
36
40
  | 5 | `cleo release reconcile <ver>` | `tag-pushed` → `published` | Backfills 11 provenance tables; idempotent |
37
41
 
38
42
  Optional validators (read-only / dry-run):
@@ -49,15 +53,15 @@ Optional validators (read-only / dry-run):
49
53
  |----|------|-------------|
50
54
  | RLSE-001 | Version MUST be CalVer (`YYYY.MM.patch`) per ADR-065 — never SemVer. | `cleo release plan` rejects non-CalVer; exit 53. |
51
55
  | RLSE-002 | `CHANGELOG.md` MUST be updated before the tag — always-write is the default behaviour of `cleo release plan` (T9784 deleted the manual changelog verb). | Plan envelope refuses to advance to `pr-opened` if the changeset directory is unparseable (T10105). |
52
- | RLSE-003 | All per-task evidence gates MUST be recorded via `cleo verify <task> --gate <g> --evidence …` BEFORE `cleo complete`. The legacy `cleo release verify` batch verb was deleted in T9540. | ADR-051 per-task evidence ritual. |
53
- | RLSE-004 | The release MUST be tagged via the auto-tag GHA workflow — not a manual `git tag`. | T10104 closes the auto-tag gap. |
56
+ | RLSE-003 | All per-task evidence gates MUST be recorded via `cleo verify <task> --gate <g> --evidence …` BEFORE `cleo complete`. The legacy `cleo release verify` batch verb was deleted in T9540. | ADR-051 per-task evidence ritual. | <!-- cleo-cmd: negative-example: release verify -->
57
+ | RLSE-004 | The release MUST be tagged explicitly (`git tag -a v<ver>` + `git push origin v<ver>`) after the release PR merges. | Auto-tag was retired in T10434 / ADR-087: `GITHUB_TOKEN` tag pushes did not reliably trigger `release.yml`. |
54
58
  | RLSE-005 | Direct pushes to `main` are prohibited. Every release ships via a PR cut by `release-prepare.yml`. | ADR-065 + branch protection (see `docs/release/branch-protection-setup.md`). |
55
59
  | RLSE-006 | Version MUST be consistent across all workspace targets resolved by `resolveVersionBumpTargets` (root package.json + every workspace package + Cargo workspace). | Version-bump preflight in `release-prepare.yml`. |
56
60
  | RLSE-007 | Provenance reconcile MUST run within the release-publish workflow — never as a manual followup. | Invoked by `release-publish.yml`. |
57
61
 
58
62
  ## Integration
59
63
 
60
- Use the explicit two-verb invocation. **Do not** invoke `cleo release ship` — it was deleted in T10103.
64
+ Use the explicit verbs. **Do not** invoke `cleo release ship` — it was deleted in T10103. <!-- cleo-cmd: negative-example: release ship -->
61
65
 
62
66
  ```bash
63
67
  # 1. Plan — build the canonical Release Plan envelope.
@@ -69,7 +73,11 @@ cleo release open v2026.6.0
69
73
  # 3. (Optional) Poll PR + CI status while the workflow runs.
70
74
  cleo release pr-status v2026.6.0
71
75
 
72
- # 4. Reconcile — runs automatically inside release-publish.yml.
76
+ # 4. After the release PR merges, tag explicitly (auto-tag is retired).
77
+ git tag -a v2026.6.0 -m "Release v2026.6.0"
78
+ git push origin v2026.6.0
79
+
80
+ # 5. Reconcile — runs automatically inside release-publish.yml.
73
81
  # Run manually only if backfilling a historical release.
74
82
  cleo release reconcile v2026.6.0
75
83
  ```
@@ -90,7 +98,7 @@ Exit codes (canonical):
90
98
  - `0` — success.
91
99
  - `53` — version validation failed (e.g. not CalVer).
92
100
  - `54` — release-prepare workflow gate failed.
93
- - `56` — tag creation failed (auto-tag workflow).
101
+ - `56` — tag creation failed.
94
102
  - `82` — `E_PLAN_NOT_FOUND` (plan envelope missing for the requested version).
95
103
  - `83` — `E_IVTR_INCOMPLETE` (per-task IVTR loops not released).
96
104
  - `88` — artifact publish failed.
@@ -99,9 +107,9 @@ Exit codes (canonical):
99
107
 
100
108
  | Pattern | Problem | Solution |
101
109
  |---------|---------|----------|
102
- | Running `cleo release ship` | The verb was deleted in T10103 — the command will exit with `Unknown command`. | Use `cleo release plan` + `cleo release open`. |
110
+ | Running `cleo release ship` | The verb was deleted in T10103 — the command will exit with `Unknown command`. | Use `cleo release plan` + `cleo release open`. | <!-- cleo-cmd: negative-example: release ship -->
103
111
  | Manually invoking `gh workflow run release-prepare.yml` | Bypasses the plan envelope; `releases.status` stays at `planned`. | Always go through `cleo release open <ver>` — it tracks state in the `releases` table. |
104
- | Manually `git tag v<ver> && git push --tags` | Bypasses the auto-tag workflow (T10104) and skips provenance backfill. | Let `auto-tag-on-release-merge.yml` create the tag on PR merge. |
112
+ | Tagging before the release PR merges, or `git push --tags` | Tags an unmerged commit, or pushes every local tag. | Tag the merged release commit and push that one tag: `git push origin v<ver>`. |
105
113
  | Hand-editing `CHANGELOG.md` for the new version | Drift between the changeset directory and the changelog. | `cleo release plan` always auto-writes the section (T10105). Use `cleo changeset add` to author entries. |
106
114
  | Pasting one verb into another's workflow file | Multi-step orchestration belongs in `ship-e2e-smoke`. | Use `cleo release ship-e2e-smoke … --execute` for end-to-end validation. |
107
115
  | Running the pipeline on a dirty worktree | Release commit scoops up unrelated changes. | The clean-tree gate refuses to advance. |
@@ -110,10 +118,10 @@ Exit codes (canonical):
110
118
  ## Critical Rules Summary
111
119
 
112
120
  1. The 4-verb pipeline — `plan`, `open`, `reconcile`, `rollback` — is the ONLY way to ship.
113
- 2. The deprecated `cleo release ship` shim was DELETED in T10103. Do not invoke it.
121
+ 2. The deprecated `cleo release ship` shim was DELETED in T10103. Do not invoke it. <!-- cleo-cmd: negative-example: release ship -->
114
122
  3. CalVer (`YYYY.MM.patch`) is the only valid version scheme.
115
123
  4. `cleo release plan` always writes the CHANGELOG section unless `--no-changelog`.
116
- 5. The tag is created by `auto-tag-on-release-merge.yml`, not by hand.
124
+ 5. The tag is created explicitly after the release PR merges; `auto-tag-on-release-merge.yml` is retired (T10434, ADR-087).
117
125
  6. Provenance reconcile is invoked by `release-publish.yml`, not manually (unless backfilling).
118
126
  7. Per-task evidence gates use `cleo verify --gate --evidence` per ADR-051 — not the deleted batch verb.
119
127
  8. Use `cleo release ship-e2e-smoke` to validate the full pipeline before a real ship.
@@ -31,7 +31,7 @@ release → artifact-publish → provenance
31
31
  | 93 | provenance | `E_DIGEST_MISMATCH` |
32
32
  | 94 | provenance | `E_ATTESTATION_INVALID` |
33
33
 
34
- The parent MUST NOT remap sub-protocol exit codes. A caller reading `cleo release ship` output needs to know exactly which step failed.
34
+ The parent MUST NOT remap sub-protocol exit codes. A caller reading `cleo release open` / `cleo release pr-status` output needs to know exactly which step failed.
35
35
 
36
36
  ## Rollback Semantics
37
37
 
@@ -18,8 +18,11 @@ No package is produced. Used for docs, spec updates, and internal code changes t
18
18
  ### Commands
19
19
 
20
20
  ```bash
21
- cleo release ship v2026.4.5 --bump-version --create-tag --push --no-artifacts
22
- cleo check protocol --protocolType release --version v2026.4.5 --hasChangelog true
21
+ cleo release plan v2026.4.5 --epic T####
22
+ cleo release open v2026.4.5
23
+ # after the release PR merges:
24
+ git tag -a v2026.4.5 -m "Release v2026.4.5" && git push origin v2026.4.5
25
+ cleo check protocol release --version v2026.4.5 --has-changelog true
23
26
  ```
24
27
 
25
28
  ## npm-Package Release
@@ -38,11 +41,14 @@ Publishes one or more npm packages from the monorepo. Uses `npm publish --proven
38
41
  ### Commands
39
42
 
40
43
  ```bash
41
- cleo release ship v2026.4.5 --bump-version --create-tag --push
44
+ cleo release plan v2026.4.5 --epic T####
45
+ cleo release open v2026.4.5
46
+ # after the release PR merges:
47
+ git tag -a v2026.4.5 -m "Release v2026.4.5" && git push origin v2026.4.5
42
48
  # CI handles the publish + attestation; the skill records the result.
43
- cleo check protocol --protocolType release --version v2026.4.5 --hasChangelog true
44
- cleo check protocol --protocolType artifact-publish --artifactType npm-package --buildPassed true
45
- cleo check protocol --protocolType provenance --hasAttestation true --hasSbom true
49
+ cleo check protocol release --version v2026.4.5 --has-changelog true
50
+ cleo check protocol artifact-publish --artifact-type npm-package --build-passed true
51
+ cleo check protocol provenance --has-attestation true --has-sbom true
46
52
  ```
47
53
 
48
54
  ## docker-image Release
@@ -61,10 +67,13 @@ Builds and pushes a container image to GHCR or another OCI registry, signs with
61
67
  ### Commands
62
68
 
63
69
  ```bash
64
- cleo release ship v2026.4.5 --bump-version --create-tag --push
70
+ cleo release plan v2026.4.5 --epic T####
71
+ cleo release open v2026.4.5
72
+ # after the release PR merges:
73
+ git tag -a v2026.4.5 -m "Release v2026.4.5" && git push origin v2026.4.5
65
74
  # CI runs: docker build → cosign sign → cosign attest → syft sbom → push
66
- cleo check protocol --protocolType artifact-publish --artifactType docker-image --buildPassed true
67
- cleo check protocol --protocolType provenance --hasAttestation true --hasSbom true
75
+ cleo check protocol artifact-publish --artifact-type docker-image --build-passed true
76
+ cleo check protocol provenance --has-attestation true --has-sbom true
68
77
  ```
69
78
 
70
79
  ## cargo-crate Release
@@ -82,9 +91,12 @@ Publishes one or more crates from the Rust workspace to crates.io.
82
91
  ### Commands
83
92
 
84
93
  ```bash
85
- cleo release ship v2026.4.5 --bump-version --create-tag --push
94
+ cleo release plan v2026.4.5 --epic T####
95
+ cleo release open v2026.4.5
96
+ # after the release PR merges:
97
+ git tag -a v2026.4.5 -m "Release v2026.4.5" && git push origin v2026.4.5
86
98
  # CI runs: cargo test → cargo publish --dry-run → cargo publish
87
- cleo check protocol --protocolType artifact-publish --artifactType cargo-crate --buildPassed true
99
+ cleo check protocol artifact-publish --artifact-type cargo-crate --build-passed true
88
100
  ```
89
101
 
90
102
  ## github-tarball Release
@@ -101,9 +113,12 @@ Creates a source tarball and attaches it to a GitHub Release. Optional cosign si
101
113
  ### Commands
102
114
 
103
115
  ```bash
104
- cleo release ship v2026.4.5 --bump-version --create-tag --push
116
+ cleo release plan v2026.4.5 --epic T####
117
+ cleo release open v2026.4.5
118
+ # after the release PR merges:
119
+ git tag -a v2026.4.5 -m "Release v2026.4.5" && git push origin v2026.4.5
105
120
  # gh release create runs in CI with the tarball attached
106
- cleo check protocol --protocolType artifact-publish --artifactType github-release --buildPassed true
121
+ cleo check protocol artifact-publish --artifact-type github-release --build-passed true
107
122
  ```
108
123
 
109
124
  ## Multi-Artifact Release
@@ -120,9 +135,12 @@ A release with more than one artifact type — typical for a major version that
120
135
  ### Commands
121
136
 
122
137
  ```bash
123
- cleo release ship v2026.4.5 --bump-version --create-tag --push
138
+ cleo release plan v2026.4.5 --epic T####
139
+ cleo release open v2026.4.5
140
+ # after the release PR merges:
141
+ git tag -a v2026.4.5 -m "Release v2026.4.5" && git push origin v2026.4.5
124
142
  # CI orchestrates all publishes; skill records the unified chain
125
- cleo check protocol --protocolType release --version v2026.4.5 --hasChangelog true
143
+ cleo check protocol release --version v2026.4.5 --has-changelog true
126
144
  ```
127
145
 
128
146
  ## Which Checklist Wins?
@@ -1,11 +1,8 @@
1
1
  ---
2
2
  name: ct-research-agent
3
3
  description: Multi-source research and investigation combining web search, documentation lookup via Context7, and codebase analysis. Synthesizes findings into actionable recommendations with proper citation and task traceability. Use when conducting research, investigating best practices, gathering technical information, or analyzing existing implementations. Triggers on research tasks, investigation needs, or information discovery requests.
4
- version: 2.0.0
5
- core: false
6
- category: recommended
4
+ version: 2.0.4
7
5
  protocol: research
8
- loomStage: research
9
6
  adrRefs:
10
7
  - ADR-023
11
8
  - ADR-070
@@ -20,9 +17,14 @@ compatibility:
20
17
  - gemini-cli
21
18
  license: MIT
22
19
  metadata:
23
- version: 2.0.0
20
+ version: 2.0.4
24
21
  tier: on-demand
25
22
  install: harness
23
+ covers:
24
+ - packages/core/src/validation/protocols/cant/research.cant
25
+ - packages/core/src/validation/protocols/protocols-markdown/research.md
26
+ loomStage: research
27
+ lastReviewed: 2026-09-28
26
28
  stability: stable
27
29
  ---
28
30
 
@@ -74,8 +76,8 @@ Context injection for research and investigation tasks spawned via cleo-subagent
74
76
  1. Read task: `{{TASK_SHOW_CMD}} {{TASK_ID}}`
75
77
  2. Focus already set by orchestrator (skip if working standalone, set if needed)
76
78
  3. Conduct research (see Methodology below)
77
- 4. Write output: `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`
78
- 5. Append manifest: `{{MANIFEST_PATH}}`
79
+ 4. Record output: `cleo docs add {{TASK_ID}} --content - --type research --slug {{TOPIC_SLUG}}`
80
+ 5. Record the manifest entry: `cleo manifest append --task {{TASK_ID}} --type research --content "<one-paragraph summary>"`
79
81
  6. Complete task: `{{TASK_COMPLETE_CMD}} {{TASK_ID}}`
80
82
  7. Return summary message
81
83
 
@@ -113,8 +115,8 @@ Context injection for research and investigation tasks spawned via cleo-subagent
113
115
 
114
116
  ### Output Requirements
115
117
 
116
- 1. MUST write findings to: `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`
117
- 2. MUST append ONE line to: `{{MANIFEST_PATH}}`
118
+ 1. MUST record findings with `cleo docs add {{TASK_ID}} --content - --type research --slug {{TOPIC_SLUG}}` (never a raw file under `.cleo/agent-outputs/`)
119
+ 2. MUST record ONE manifest entry: `cleo manifest append --entry '<entry JSON>'` (the flat manifest file is retired, ADR-027)
118
120
  3. MUST return ONLY: "Research complete. Manifest appended to pipeline_manifest."
119
121
  4. MUST NOT return research content in response
120
122
 
@@ -122,7 +124,7 @@ Context injection for research and investigation tasks spawned via cleo-subagent
122
124
 
123
125
  ## Output File Format
124
126
 
125
- Write to `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`:
127
+ Record it with `cleo docs add {{TASK_ID}} --content - --type research --slug {{TOPIC_SLUG}}`, using this body:
126
128
 
127
129
  ```markdown
128
130
  # {{RESEARCH_TITLE}}
@@ -163,7 +165,7 @@ Write to `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`:
163
165
 
164
166
  ## Manifest Entry Format
165
167
 
166
- Append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027):
168
+ Append ONE entry via `cleo manifest append --entry '<json>'` (writes to pipeline_manifest table per ADR-027):
167
169
 
168
170
  ```json
169
171
  {"id":"{{TOPIC_SLUG}}-{{DATE}}","file":"{{DATE}}_{{TOPIC_SLUG}}.md","title":"{{RESEARCH_TITLE}}","date":"{{DATE}}","status":"complete","agent_type":"research","topics":{{TOPICS_JSON}},"key_findings":["Finding 1","Finding 2","Finding 3"],"actionable":true,"needs_followup":[],"linked_tasks":["{{EPIC_ID}}","{{TASK_ID}}"]}
@@ -185,7 +187,7 @@ Append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest
185
187
  - [ ] Task details read via `{{TASK_SHOW_CMD}}`
186
188
  - [ ] Research conducted across multiple sources
187
189
  - [ ] Findings synthesized with recommendations
188
- - [ ] Output file written to `{{OUTPUT_DIR}}/`
190
+ - [ ] Output recorded with `cleo docs add` (slug in the return message)
189
191
  - [ ] Manifest entry appended (single line, valid JSON)
190
192
  - [ ] Task completed via `{{TASK_COMPLETE_CMD}}`
191
193
  - [ ] Response is ONLY the summary message
@@ -38,12 +38,12 @@ to sibling skills that have narrower context budgets and stricter contracts.
38
38
  | "write the spec for X" | `ct-spec-writer` |
39
39
  | "validate this implementation against the spec" | `ct-validator` |
40
40
  | "decompose this epic into tasks" | `ct-epic-architect` |
41
- | "look up Next.js 15 middleware API" | `ct-docs-lookup` (single-library fetch) |
41
+ | "look up Next.js 15 middleware API" | the Context7 MCP (single-library fetch) |
42
42
  | "decide between A and B" (no investigation needed) | `ct-consensus-voter` |
43
43
  | "explain this function" | (no skill — direct read suffices) |
44
44
 
45
45
  A useful heuristic: if the user already knows the answer and just wants it
46
- written down, route to `ct-spec-writer` or `ct-docs-write`. Research is for
46
+ written down, route to `ct-spec-writer` or `ct-documentor` (`references/writing.md`). Research is for
47
47
  when the answer is not yet known.
48
48
 
49
49
  ## Routing to Downstream Skills
@@ -68,11 +68,11 @@ Research outputs typically feed one of these next stages. The manifest
68
68
 
69
69
  ```
70
70
  Is the answer already known and just needs documentation?
71
- ├── YES → ct-docs-write
71
+ ├── YES → the writing guide (`ct-documentor/references/writing.md`)
72
72
  └── NO → continue
73
73
  │
74
74
  Is this a single-library API question?
75
- ├── YES → ct-docs-lookup
75
+ ├── YES → the Context7 MCP
76
76
  └── NO → ct-research-agent (this skill)
77
77
  │
78
78
  After research, do findings produce requirements?
@@ -1,17 +1,20 @@
1
1
  ---
2
- name: ct-skill-creator
3
- description: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
2
+ name: ct-skill-author
3
+ description: Create, improve and validate CLEO skills. Use when writing a new skill or updating an existing one (structure, frontmatter, progressive disclosure, trigger descriptions, evals), and when auditing a skill folder against the CLEO standard before it ships (structural, ecosystem-fit and quality validation with an HTML report). Internal to CLEO development — not installed to harnesses.
4
4
  license: MIT
5
5
  metadata:
6
- version: 1.0.0
6
+ version: 2.0.1
7
7
  tier: internal
8
8
  install: internal
9
- stability: deprecated
9
+ lastReviewed: 2026-09-28
10
+ stability: stable
10
11
  ---
11
12
 
12
- # Skill Creator
13
+ # Skill Author
13
14
 
14
- This skill provides guidance for creating effective skills.
15
+ Guidance for creating effective skills, and the validation loop that checks them.
16
+ This skill merges the former ct-skill-creator and ct-skill-validator (T12649, D11157).
17
+ For validation, load `references/validating.md`; its scripts live in `scripts/`.
15
18
 
16
19
  ## About Skills
17
20
 
@@ -93,7 +93,7 @@ Save to the path specified in your prompt (default: `ecosystem-check.json` in th
93
93
 
94
94
  ```json
95
95
  {
96
- "skill_name": "ct-skill-validator",
96
+ "skill_name": "ct-skill-author",
97
97
  "verdict": "PASS|PASS_WITH_WARNINGS|FAIL",
98
98
  "rules": [
99
99
  {
@@ -1,12 +1,12 @@
1
1
  {
2
- "skill_name": "ct-skill-validator",
2
+ "skill_name": "ct-skill-author",
3
3
  "evals": [
4
4
  {
5
5
  "id": 1,
6
- "prompt": "Validate the ct-skill-creator skill against the v2 standard and show me a full report",
7
- "expected_output": "A complete tier-by-tier validation report showing pass/fail/warn status for ct-skill-creator, with an HTML report opened in the browser",
6
+ "prompt": "Validate the ct-skill-author skill against the v2 standard and show me a full report",
7
+ "expected_output": "A complete tier-by-tier validation report showing pass/fail/warn status for ct-skill-author, with an HTML report opened in the browser",
8
8
  "expectations": [
9
- "Claude runs validate.py against ct-skill-creator",
9
+ "Claude runs validate.py against ct-skill-author",
10
10
  "The output shows results for all 5 tiers",
11
11
  "Claude runs generate_validation_report.py to produce an HTML report",
12
12
  "Claude tells the user the report path or opens it in the browser",
@@ -27,20 +27,20 @@
27
27
  },
28
28
  {
29
29
  "id": 3,
30
- "prompt": "Audit the ct-skill-validator skill itself — run all checks and give me a full findings report",
31
- "expected_output": "Full self-audit of ct-skill-validator including validate gauntlet and audit_body, with HTML report",
30
+ "prompt": "Audit the ct-skill-author skill itself — run all checks and give me a full findings report",
31
+ "expected_output": "Full self-audit of ct-skill-author including validate gauntlet and audit_body, with HTML report",
32
32
  "expectations": [
33
- "Claude runs validate.py against ct-skill-validator",
33
+ "Claude runs validate.py against ct-skill-author",
34
34
  "Claude runs audit_body.py for the deep body quality audit",
35
35
  "An HTML report combining all findings is generated",
36
36
  "Claude opens or links the HTML report for the user",
37
- "The result correctly reflects ct-skill-validator's actual compliance status"
37
+ "The result correctly reflects ct-skill-author's actual compliance status"
38
38
  ]
39
39
  },
40
40
  {
41
41
  "id": 4,
42
- "prompt": "Run the manifest alignment check for ct-skill-validator against the CLEO manifest",
43
- "expected_output": "Manifest alignment results showing whether ct-skill-validator is registered correctly in manifest.json and dispatch-config.json",
42
+ "prompt": "Run the manifest alignment check for ct-skill-author against the CLEO manifest",
43
+ "expected_output": "Manifest alignment results showing whether ct-skill-author is registered correctly in manifest.json",
44
44
  "expectations": [
45
45
  "Claude passes --manifest to validate.py (Tier 4 check)",
46
46
  "The manifest.json path is correctly resolved",
@@ -2,7 +2,7 @@
2
2
  {"query": "validate my skill against v2 standard", "should_trigger": true},
3
3
  {"query": "check if this skill folder is v2 compliant", "should_trigger": true},
4
4
  {"query": "audit the skill structure and frontmatter", "should_trigger": true},
5
- {"query": "run v2 compliance check on ct-skill-creator", "should_trigger": true},
5
+ {"query": "run v2 compliance check on ct-skill-author", "should_trigger": true},
6
6
  {"query": "is my SKILL.md missing required fields", "should_trigger": true},
7
7
  {"query": "verify skill passes all CLEO validation tiers", "should_trigger": true},
8
8
  {"query": "prepare skill for distribution, check for issues", "should_trigger": true},
@@ -45,10 +45,14 @@ Or the domain.operation shorthand when describing operations abstractly: `tasks.
45
45
  - `cleo add`, `cleo update`, `cleo complete`
46
46
  - `cleo session status`, `cleo session start`, `cleo session end`
47
47
  - `cleo memory find`, `cleo memory timeline`, `cleo memory fetch`, `cleo memory observe`
48
- - `cleo dash`, `cleo health`, `cleo help`
49
- - `cleo pipeline stage.status`, `cleo manifest append`
50
- - `cleo skill list`, `cleo skill show`
51
- - `cleo orchestrator status`, `cleo orchestrator spawn`
48
+ - `cleo dash`, `cleo doctor`, `cleo <command> --help` (there is no `help` verb)
49
+ - `cleo manifest append`
50
+ - `cleo skills list`, `cleo skills info`
51
+ - `cleo orchestrate status`, `cleo orchestrate spawn`
52
+
53
+ Gate 31 (`scripts/lint-skill-commands.mjs`) checks every `cleo` invocation in a
54
+ canonical skill against the live command manifest; run it rather than relying
55
+ on this list.
52
56
 
53
57
  **Fail condition**: Skill references a domain.operation that does not exist in the constitution.
54
58
 
@@ -10,7 +10,7 @@ Skills follow a single-source-of-truth model:
10
10
  packages/skills/skills/ <-- canonical location
11
11
  ct-cleo/SKILL.md
12
12
  ct-orchestrator/SKILL.md
13
- ct-skill-creator/SKILL.md
13
+ ct-skill-author/SKILL.md
14
14
  ...
15
15
  manifest.json <-- CLEO-only metadata
16
16
  ```
@@ -57,7 +57,7 @@ CLEO-aware providers read both SKILL.md and manifest.json. The manifest provides
57
57
 
58
58
  ### CLEO Package Skills
59
59
 
60
- Skills in `packages/skills/skills/` are managed by CLEO infrastructure. They are deployed via the CLEO skill system and do not need manual symlink setup. The manifest.json, dispatch-config.json, and provider-skills-map.json coordinate deployment automatically.
60
+ Skills in `packages/skills/skills/` are managed by CLEO infrastructure. They are deployed via the CLEO skill system and do not need manual symlink setup. `manifest.json` (generated from SKILL.md frontmatter) drives installation: every skill with `metadata.install: harness` is installed.
61
61
 
62
62
  ### User Global Skills
63
63
 
@@ -164,12 +164,16 @@ To add a new skill to the CLEO package (`packages/skills/`):
164
164
  }
165
165
  ```
166
166
 
167
- 4. **Add entry to dispatch-config.json** (`packages/skills/dispatch-config.json`):
168
- Add the skill to relevant `by_task_type`, `by_keyword`, and/or `by_protocol` mappings if it should participate in dispatch routing.
167
+ 4. **Add dispatch routing** if the skill should participate: add it to the
168
+ `dispatch_matrix` (`by_task_type`, `by_keyword`, `by_protocol`) in
169
+ `packages/skills/skills/manifest.json`. (`dispatch-config.json` was removed
170
+ in T12649; nothing read it.)
169
171
 
170
- 5. **Update totalSkills** in manifest.json `_meta.totalSkills` to reflect the new count.
172
+ 5. **Regenerate the manifest**: `node scripts/skills/generate-manifest.mjs`.
173
+ It writes the identity fields and `_meta.totalSkills` from SKILL.md
174
+ frontmatter; gate 29 fails if you hand-edit them.
171
175
 
172
176
  6. **Validate**: Run the skill validator to confirm the new skill passes all checks:
173
177
  ```bash
174
- python3 packages/skills/skills/ct-skill-creator/scripts/quick_validate.py packages/skills/skills/my-new-skill
178
+ python3 packages/skills/skills/ct-skill-author/scripts/quick_validate.py packages/skills/skills/my-new-skill
175
179
  ```