@cleocode/skills 2026.9.20 → 2026.9.21
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/package.json +1 -1
- package/skills/_shared/task-system-integration.md +1 -1
- package/skills/ct-adr-recorder/SKILL.md +5 -0
- package/skills/ct-artifact-publisher/SKILL.md +5 -0
- package/skills/ct-cleo/SKILL.md +73 -9
- package/skills/ct-cleo/__tests__/injection-content.test.ts +62 -13
- package/skills/ct-cleo/references/session-protocol.md +6 -1
- package/skills/ct-codebase-mapper/SKILL.md +5 -1
- package/skills/ct-consensus-voter/SKILL.md +5 -0
- package/skills/ct-contribution/SKILL.md +5 -1
- package/skills/ct-council/SKILL.md +5 -0
- package/skills/ct-dev-workflow/SKILL.md +2 -1
- package/skills/ct-docs-lookup/SKILL.md +5 -1
- package/skills/ct-docs-review/SKILL.md +5 -1
- package/skills/ct-docs-write/SKILL.md +5 -1
- package/skills/ct-documentor/SKILL.md +11 -8
- package/skills/ct-epic-architect/SKILL.md +5 -1
- package/skills/ct-grade/SKILL.md +5 -1
- package/skills/ct-ivt-looper/SKILL.md +5 -0
- package/skills/ct-lead/SKILL.md +5 -0
- package/skills/ct-master-tac/SKILL.md +5 -1
- package/skills/ct-master-tac/__tests__/install.test.ts +25 -4
- package/skills/ct-memory/SKILL.md +5 -0
- package/skills/ct-orchestrator/SKILL.md +21 -2
- package/skills/ct-provenance-keeper/SKILL.md +5 -0
- package/skills/ct-release-orchestrator/SKILL.md +2 -0
- package/skills/ct-research-agent/SKILL.md +5 -1
- package/skills/ct-skill-creator/SKILL.md +5 -0
- package/skills/ct-skill-validator/SKILL.md +5 -0
- package/skills/ct-spec-writer/SKILL.md +5 -1
- package/skills/ct-stickynote/SKILL.md +5 -1
- package/skills/ct-task-executor/SKILL.md +4 -7
- package/skills/ct-task-executor/references/common-failures.md +2 -2
- package/skills/ct-task-executor/references/evidence-and-gates.md +1 -0
- package/skills/ct-validator/SKILL.md +5 -1
- package/skills/manifest.json +1258 -442
- package/skills/signaldock-connect/SKILL.md +5 -0
package/package.json
CHANGED
|
@@ -120,7 +120,7 @@ When the task system is CLEO, these additional commands are available:
|
|
|
120
120
|
|---------|---------|
|
|
121
121
|
| `cleo current` | Show current task |
|
|
122
122
|
| `cleo session start` | Begin work session |
|
|
123
|
-
| `cleo session end` | End
|
|
123
|
+
| `cleo session end` | End THIS terminal's session (elsewhere: `--session <id>`; unbound → `E_SESSION_UNBOUND`) |
|
|
124
124
|
| `cleo analyze` | Task triage with scoring |
|
|
125
125
|
| `cleo deps show {{TASK_ID}}` | Check task dependencies |
|
|
126
126
|
| `cleo tree {{EPIC_ID}}` | Visualize hierarchy rooted at epic |
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ct-artifact-publisher
|
|
3
3
|
description: "Builds and publishes artifacts to registries (npm, PyPI, cargo, docker, GitHub releases, generic tarballs) following the validate, then dry-run, then build, then publish, then record-provenance pipeline. Invoked by ct-release-orchestrator as a sub-skill when a release has artifact config. Never stores credentials in output or manifest (ARTP-008), always dry-runs first (ARTP-002), halts and attempts rollback on failure (ARTP-009). Triggers when a release config has at least one enabled artifact handler."
|
|
4
|
+
metadata:
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
tier: on-demand
|
|
7
|
+
install: harness
|
|
8
|
+
stability: stable
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# Artifact Publisher
|
package/skills/ct-cleo/SKILL.md
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
name: ct-cleo
|
|
3
3
|
description: CLEO task management protocol - session, task, and workflow guidance. Use when managing tasks, sessions, or multi-agent workflows with the CLEO CLI protocol.
|
|
4
4
|
metadata:
|
|
5
|
-
version: 2.
|
|
6
|
-
|
|
5
|
+
version: 2.21.0
|
|
6
|
+
tier: core
|
|
7
|
+
install: harness
|
|
8
|
+
lastReviewed: 2026-09-28
|
|
7
9
|
stability: stable
|
|
8
10
|
---
|
|
9
11
|
|
|
@@ -25,6 +27,43 @@ Provider reference delivery must be verified or embedded self-contained; static
|
|
|
25
27
|
instruction checks do not establish live Codex, Claude, or Kimi behavior.
|
|
26
28
|
|
|
27
29
|
|
|
30
|
+
## Asking the owner (HITL ask tool)
|
|
31
|
+
|
|
32
|
+
Whenever you need the owner to answer, decide, approve or choose ANYTHING, use the
|
|
33
|
+
ask tool (`AskUserQuestion` in Claude Code, or the provider equivalent listed in
|
|
34
|
+
CAAMP's `PROVIDER_ASK_TOOLS`) with concrete, detailed, selectable options. Never
|
|
35
|
+
ask inside a response, and never bury a question or decision in prose. Each option
|
|
36
|
+
states what happens and its trade-offs; put the recommended option first. Do not
|
|
37
|
+
send routine status chatter: report only when done or when a decision is needed.
|
|
38
|
+
|
|
39
|
+
- **Subagents never ask the human.** Return the question with its options to your
|
|
40
|
+
orchestrator (`blocked` plus `{question, options[{label, description}], recommended}`
|
|
41
|
+
in the manifest); the orchestrator asks via its ask tool.
|
|
42
|
+
- **No ask tool in the harness:** emit one LAFS `hitl.request` envelope
|
|
43
|
+
`{question, options[{label, description}], recommended}` and stop.
|
|
44
|
+
|
|
45
|
+
## Project identity and moving between devices
|
|
46
|
+
|
|
47
|
+
A project is identified by its portable `project_id` in `.cleo/project-id`
|
|
48
|
+
(tracked, write-once; ADR-094). A path is only a per-device hint, so a moved or
|
|
49
|
+
restored checkout keeps its identity. After a new device, restore or migration,
|
|
50
|
+
or when a known repo reports "Not inside a CLEO project", registry paths are
|
|
51
|
+
unreachable, or nexus hits `ENOENT` on an old path, run and report:
|
|
52
|
+
|
|
53
|
+
1. `cleo doctor projects` — machine-wide: moved, missing, split and temp rows with
|
|
54
|
+
remedies. Dry-run by default; `--apply` rebinds only on nonce proof and writes a
|
|
55
|
+
receipt; `--rollback <id>` restores.
|
|
56
|
+
2. `cleo doctor project-identity` — missing, conflicting or uncommitted id.
|
|
57
|
+
3. `cleo doctor --all-projects` — unreachable registered projects.
|
|
58
|
+
4. `cleo nexus projects clean --orphans --dry-run` — NEVER without `--dry-run`;
|
|
59
|
+
it deletes rows for projects that merely moved.
|
|
60
|
+
5. `cleo doctor credentials` — credentials still keyed by an old path.
|
|
61
|
+
6. `cleo doctor global-delivery` — `~/.cleo`, the global hub reference and every
|
|
62
|
+
harness CLEO skill install must resolve (a `~/.cleo` link carried by dotfiles from
|
|
63
|
+
Linux dangles on macOS and silences all of them). `--repair` relinks with a receipt.
|
|
64
|
+
|
|
65
|
+
Never delete registry rows for projects that may have moved.
|
|
66
|
+
|
|
28
67
|
## Guarded knowledge repair
|
|
29
68
|
|
|
30
69
|
Use `cleo doctor knowledge --dry-run` to inspect findings and sourced proposals.
|
|
@@ -60,13 +99,14 @@ applies reviewed input through the same lifecycle; `--fix --actor AGENT` handles
|
|
|
60
99
|
confirmed stubs. `cleo doctor repair` retains its separate database-recovery semantics.
|
|
61
100
|
|
|
62
101
|
<!-- thin-pointer: full protocol is in CLEO-INJECTION.md (T9148) -->
|
|
63
|
-
|
|
64
|
-
Emit any section with: `cleo briefing inject --section <name>`
|
|
102
|
+
The always-loaded core is `~/.cleo/templates/CLEO-INJECTION.md`; reference sections ship in the
|
|
103
|
+
package's `CLEO-REFERENCE.md` (T12580). Emit any section with: `cleo briefing inject --section <name>`
|
|
65
104
|
|
|
66
|
-
|
|
67
|
-
· `
|
|
68
|
-
· `
|
|
69
|
-
· `
|
|
105
|
+
Core: `session-start` · `work-loop` · `triggers` · `session-commands` · `output-contract`
|
|
106
|
+
· `error-handling` · `pre-complete-gate` · `rules` · `escalation`. On demand: `task-creation`
|
|
107
|
+
· `task-discovery` · `task-relationships` · `memory` · `memory-jit` · `data-location` · `nexus`
|
|
108
|
+
· `orchestration` · `playbooks` · `documents` · `human-render` · `spawn-tiers` · `evidence`
|
|
109
|
+
· `projection` · `knowledge-repair`
|
|
70
110
|
|
|
71
111
|
Task find defaults to lexical query terms. Fuzzy character-subsequence matching requires `--fuzzy`; inspect per-row `match.kind` and `match.fields` before inferring related work. `--in` restricts the source field. Matching mode and fuzzy field explanations survive scalar/human output on stderr. Semantic retrieval remains separately identified.
|
|
72
112
|
|
|
@@ -78,11 +118,35 @@ Use `cleo backup inspect <snapshot> --record-id <id>` for read-only historical e
|
|
|
78
118
|
|
|
79
119
|
Code-graph answers (`cleo nexus impact`, `context`, `full-context`, `why`, `search-code`, `task-symbols`, `clusters`, `flows`) carry `meta._nexus.freshness`: stale file count and sample, whether the queried symbol's own file is stale, and the refresh command with an estimated cost. A query refreshes up to 25 stale files inline within a 60 s budget (`nexus.autoRefresh.maxFiles`/`budgetMs`/`enabled`) and discloses it in `freshness.autoRefresh`; beyond that it answers from the stale index with `W_NEXUS_INDEX_STALE`. `unknown` freshness is never fresh. `cleo nexus analyze` re-parses only changed files, re-resolves every file, and reports `mode`, `reason` and per-phase cost; it falls back to a full parse (and says why) when there is no parse cache, the extractor build changed, or over 30% of files changed. `--full` forces a rebuild.
|
|
80
120
|
|
|
121
|
+
## Sessions are terminal-bound (T12500)
|
|
122
|
+
|
|
123
|
+
`cleo session start` binds the calling agent process (`CLAUDE_CODE_SESSION_ID`,
|
|
124
|
+
`CODEX_THREAD_ID`, …), pane (`TMUX_PANE`, …) or tab (`TERM_SESSION_ID`, …). Session
|
|
125
|
+
mutations from an unbound caller fail with `E_SESSION_UNBOUND` instead of
|
|
126
|
+
guessing the newest session; bind with `cleo session start`, `cleo session resume
|
|
127
|
+
<id>` or `CLEO_SESSION_ID=<id>`, or name the target with `--session <id>`. CI and
|
|
128
|
+
multi-step scripts must export `CLEO_SESSION_ID`. Unattributed mutations warn on
|
|
129
|
+
stderr; `session status` / `briefing` label a guessed session `unbound: true`.
|
|
130
|
+
|
|
131
|
+
- A session a human started in a tab is adopted by Claude Code in that tab
|
|
132
|
+
(also after a Claude restart). An adopter works in it but cannot end it without
|
|
133
|
+
`--session <id>`, and starting its own session never takes over the tab. A
|
|
134
|
+
session Claude started can be ended from the tab.
|
|
135
|
+
- Two Claude instances that each start a session stay isolated; a sibling tmux
|
|
136
|
+
pane never sees another pane's session.
|
|
137
|
+
- Agent-tool subagents inherit the parent's `CLAUDE_CODE_SESSION_ID` and act in
|
|
138
|
+
the parent's session; `cleo orchestrate spawn` gives workers their own.
|
|
139
|
+
|
|
140
|
+
## Typed decisions (`cleo decide`, T12491)
|
|
141
|
+
|
|
142
|
+
`decide` answers typed questions (yes/no, choice, score) through a swappable Jev-wire provider and falls back to local heuristics when unconfigured or failing. It needs two settings, an API URL and a key: `printf %s "$KEY" | cleo decide config --url <u> --key-stdin` (optional `--model`; `--clear` removes them). The key is kept in a 0600 file and never printed. `cleo decide status` probes reachability and `cleo decide ask --state <text> --noul <q>` runs one debug question.
|
|
143
|
+
|
|
81
144
|
## Quick Reference
|
|
82
145
|
|
|
83
146
|
| Need | Command |
|
|
84
147
|
|------|---------|
|
|
85
148
|
| Start session | `cleo session status` → `cleo briefing` |
|
|
149
|
+
| End session (from another terminal) | `cleo session end --session <id>` |
|
|
86
150
|
| Find work | `cleo next` → `cleo focus <id>` |
|
|
87
151
|
| Search tasks | `cleo find "query"` |
|
|
88
152
|
| Complete task | `cleo verify T### --gate ... --evidence "..."` → `cleo complete T###` |
|
|
@@ -161,7 +225,7 @@ This internal budget contract does not add a `--token-budget` flag to add/update
|
|
|
161
225
|
|
|
162
226
|
## Skill-Specific Extensions
|
|
163
227
|
|
|
164
|
-
- Task hierarchy, Saga commands, add-batch decomposition, docs policy, and
|
|
228
|
+
- Task hierarchy, Saga commands, add-batch decomposition, docs policy, and evidence detail live in the on-demand reference; emit `task-creation`, `documents`, and `evidence` when needed.
|
|
165
229
|
- For add-batch input, The top-level JSON MUST be an array of task objects, not an object wrapper like `{ "tasks": [...] }`.
|
|
166
230
|
- Dry-run count semantics: `/data/count` and `/data/wouldCreate` predict writes; `/data/insertedCount` must be `0` for dry-run.
|
|
167
231
|
- Mutation output paths: use `/data/created/0`, `/data/updated/0`, and `/data/deleted/0`; never parse legacy full records. `--output id` emits affected IDs once in created/updated/deleted order from these canonical arrays.
|
|
@@ -41,13 +41,55 @@ const injectionPath = resolve(
|
|
|
41
41
|
/** Read once — all assertions operate on this string */
|
|
42
42
|
const injectionContent = readFileSync(injectionPath, 'utf-8');
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* T12580: CLEO-INJECTION.md is the always-loaded core; reference sections
|
|
46
|
+
* moved to CLEO-REFERENCE.md and are printed on demand with
|
|
47
|
+
* `cleo briefing inject --section <name>`. Content that moved is asserted
|
|
48
|
+
* where it now lives AND through the core's pointer table, so the test still
|
|
49
|
+
* proves an agent can reach it.
|
|
50
|
+
*/
|
|
51
|
+
const referenceContent = readFileSync(
|
|
52
|
+
resolve(thisDir, '../../../../core/templates/CLEO-REFERENCE.md'),
|
|
53
|
+
'utf-8',
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
/** Body of one on-demand section in the reference, or '' when absent. */
|
|
57
|
+
function referenceSection(name: string): string {
|
|
58
|
+
const open = `<!-- CLEO-INJECTION:section=${name} -->`;
|
|
59
|
+
const start = referenceContent.indexOf(open);
|
|
60
|
+
if (start === -1) return '';
|
|
61
|
+
const end = referenceContent.indexOf(`<!-- /CLEO-INJECTION:section=${name} -->`, start);
|
|
62
|
+
return end === -1 ? '' : referenceContent.slice(start + open.length, end);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Section names the core's "On-demand reference" table points at (first column). */
|
|
66
|
+
function corePointers(): Set<string> {
|
|
67
|
+
const table = injectionContent.slice(injectionContent.indexOf('## On-demand reference'));
|
|
68
|
+
const rows = table.slice(0, table.indexOf('\n## ', 5)).split('\n');
|
|
69
|
+
return new Set(
|
|
70
|
+
rows
|
|
71
|
+
.filter((line) => line.startsWith('| `'))
|
|
72
|
+
.flatMap((line) => [...(line.split('|')[1] ?? '').matchAll(/`([a-z][a-z0-9-]+)`/g)])
|
|
73
|
+
.map((m) => m[1] as string),
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Assert `name` is pointed at by the core AND declared in the reference; return its body. */
|
|
78
|
+
function onDemand(name: string): string {
|
|
79
|
+
expect(injectionContent).toContain('cleo briefing inject --section <name>');
|
|
80
|
+
expect(corePointers()).toContain(name);
|
|
81
|
+
const body = referenceSection(name);
|
|
82
|
+
expect(body, `reference section ${name}`).not.toBe('');
|
|
83
|
+
return body;
|
|
84
|
+
}
|
|
85
|
+
|
|
44
86
|
// ---------------------------------------------------------------------------
|
|
45
87
|
// Required section markers
|
|
46
88
|
// ---------------------------------------------------------------------------
|
|
47
89
|
|
|
48
90
|
describe('CLEO-INJECTION.md — required section markers', () => {
|
|
49
|
-
it('
|
|
50
|
-
expect(
|
|
91
|
+
it('delivers "Memory Protocol (JIT)" on demand (core pointer → reference section)', () => {
|
|
92
|
+
expect(onDemand('memory-jit')).toMatch(/^## Memory Protocol \(JIT\)/m);
|
|
51
93
|
});
|
|
52
94
|
|
|
53
95
|
it('contains "Escalation" H2 section', () => {
|
|
@@ -63,8 +105,10 @@ describe('CLEO-INJECTION.md — required section markers', () => {
|
|
|
63
105
|
expect(injectionContent).toMatch(/^## Work Loop/m);
|
|
64
106
|
});
|
|
65
107
|
|
|
66
|
-
it('
|
|
67
|
-
expect(
|
|
108
|
+
it('delivers "Task Discovery" on demand, with the discovery quick form in the core', () => {
|
|
109
|
+
expect(onDemand('task-discovery')).toMatch(/^## Task Discovery/m);
|
|
110
|
+
expect(injectionContent).toContain('cleo find "query"');
|
|
111
|
+
expect(injectionContent).toContain('cleo list --parent <id>');
|
|
68
112
|
});
|
|
69
113
|
});
|
|
70
114
|
|
|
@@ -111,17 +155,22 @@ describe('CLEO-INJECTION.md — command correctness', () => {
|
|
|
111
155
|
expect(injectionContent).toContain('cleo find');
|
|
112
156
|
});
|
|
113
157
|
|
|
114
|
-
it('documents add-batch array input and dry-run count fields', () => {
|
|
115
|
-
|
|
116
|
-
expect(
|
|
117
|
-
expect(
|
|
158
|
+
it('documents add-batch array input and dry-run count fields (task-creation, on demand)', () => {
|
|
159
|
+
const section = onDemand('task-creation');
|
|
160
|
+
expect(section).toContain('top-level JSON array of task objects');
|
|
161
|
+
expect(section).toContain('/data/wouldCreate');
|
|
162
|
+
expect(section).toContain('/data/insertedCount');
|
|
118
163
|
});
|
|
119
164
|
|
|
120
|
-
it('documents docs path policy, strict preflight, and runtime doc kinds', () => {
|
|
121
|
-
|
|
122
|
-
expect(
|
|
123
|
-
expect(
|
|
124
|
-
expect(
|
|
165
|
+
it('documents docs path policy, strict preflight, and runtime doc kinds (documents, on demand)', () => {
|
|
166
|
+
const section = onDemand('documents');
|
|
167
|
+
expect(section).toContain('repo-relative paths');
|
|
168
|
+
expect(section).toContain('arbitrary external absolute paths');
|
|
169
|
+
expect(section).toContain('cleo docs list-types');
|
|
170
|
+
expect(section).toContain('DocKindRegistry');
|
|
171
|
+
// The canonical-doc write/read triggers stay in the core.
|
|
172
|
+
expect(injectionContent).toContain('cleo docs add --type <kind> --slug <kebab-handle>');
|
|
173
|
+
expect(injectionContent).toContain('cleo docs fetch <slug>');
|
|
125
174
|
});
|
|
126
175
|
|
|
127
176
|
it('uses contract-backed mutate field paths', () => {
|
|
@@ -38,9 +38,14 @@ ct start T006 # Start next task
|
|
|
38
38
|
```bash
|
|
39
39
|
ct complete <id> # Complete current
|
|
40
40
|
ct archive # Clean up done tasks
|
|
41
|
-
ct session end --note "Progress"
|
|
41
|
+
ct session end --note "Progress" # this terminal's session; elsewhere: --session <id>
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
+
Sessions are terminal-bound: from a terminal that did not start/resume the
|
|
45
|
+
session, `session end` fails with `E_SESSION_UNBOUND` rather than ending the
|
|
46
|
+
newest session. Bind (`cleo session resume <id>`, `CLEO_SESSION_ID=<id>`) or pass
|
|
47
|
+
`--session <id>`. Scripts and CI must export `CLEO_SESSION_ID`.
|
|
48
|
+
|
|
44
49
|
## Research & Manifest Operations
|
|
45
50
|
|
|
46
51
|
### Output Requirements
|
|
@@ -3,7 +3,6 @@ name: ct-codebase-mapper
|
|
|
3
3
|
version: 1.0.0
|
|
4
4
|
description: Codebase analysis and mapping for autonomous agent understanding. Builds structured maps of project stack, architecture, conventions, testing, integrations, and concerns.
|
|
5
5
|
category: recommended
|
|
6
|
-
tier: 1
|
|
7
6
|
protocol: null
|
|
8
7
|
dependencies: []
|
|
9
8
|
compatibility:
|
|
@@ -17,6 +16,11 @@ triggers:
|
|
|
17
16
|
- understand project
|
|
18
17
|
- brownfield analysis
|
|
19
18
|
- project structure
|
|
19
|
+
metadata:
|
|
20
|
+
version: 1.0.0
|
|
21
|
+
tier: on-demand
|
|
22
|
+
install: harness
|
|
23
|
+
stability: stable
|
|
20
24
|
---
|
|
21
25
|
|
|
22
26
|
# Codebase Mapper
|
|
@@ -7,7 +7,6 @@ description: >-
|
|
|
7
7
|
"contribution start", "contribution submit", "detect conflicts",
|
|
8
8
|
"weighted consensus", "decision tracking", "conflict resolution".
|
|
9
9
|
version: 1.0.0
|
|
10
|
-
tier: 3
|
|
11
10
|
core: false
|
|
12
11
|
category: meta
|
|
13
12
|
protocol: contribution
|
|
@@ -24,6 +23,11 @@ compatibility:
|
|
|
24
23
|
- windsurf
|
|
25
24
|
- gemini-cli
|
|
26
25
|
license: MIT
|
|
26
|
+
metadata:
|
|
27
|
+
version: 1.0.0
|
|
28
|
+
tier: on-demand
|
|
29
|
+
install: harness
|
|
30
|
+
stability: stable
|
|
27
31
|
---
|
|
28
32
|
|
|
29
33
|
# Contribution Protocol Skill
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ct-council
|
|
3
3
|
description: Convene "The Council" — a 5-advisor, shuffled gate-based peer-review, chairman-synthesis workflow for reviewing a plan, decision, architecture, or piece of work inside the current project. Use when the user says "convene the council" (or "counsel"), "get the council on this", "council review", "run the five advisors", "stress-test this", "get multiple perspectives", or asks for a rigorous multi-angle challenge of a proposal (Contrarian, First Principles, Expansionist, Outsider, Executor → shuffled peer review with pass/fail gates → convergence detector → Chairman verdict). Operates on the current codebase — each advisor grounds their analysis in actual files/commits before opining. Output is validated by scripts/validate.py.
|
|
4
|
+
metadata:
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
tier: on-demand
|
|
7
|
+
install: harness
|
|
8
|
+
stability: stable
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# The Council
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ct-dev-workflow
|
|
3
3
|
description: Development workflow orchestration for task-driven development with atomic commits, conventional commit messages, and systematic release processes. Enforces task traceability, branch discipline, smart test scope selection, and GitHub Actions integration. Use when committing code, creating releases, managing branches, or following contribution protocols. Triggers on commit operations, release preparation, or workflow compliance needs.
|
|
4
4
|
version: 3.1.0
|
|
5
|
-
tier: 2
|
|
6
5
|
core: false
|
|
7
6
|
category: specialist
|
|
8
7
|
protocol: contribution
|
|
@@ -18,6 +17,8 @@ compatibility:
|
|
|
18
17
|
license: MIT
|
|
19
18
|
metadata:
|
|
20
19
|
version: 3.1.0
|
|
20
|
+
tier: core
|
|
21
|
+
install: harness
|
|
21
22
|
lastReviewed: 2026-09-18
|
|
22
23
|
stability: stable
|
|
23
24
|
---
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ct-docs-lookup
|
|
3
3
|
description: This skill should be used when the user asks "how do I configure [library]", "write code using [framework]", "what are the [library] methods", "show me [framework] examples", or mentions libraries like React, Vue, Next.js, Prisma, Supabase, Express, Tailwind, Drizzle, Svelte. Triggers for library setup, configuration, API references, framework code examples, or version-specific docs ("React 19", "Next.js 15").
|
|
4
4
|
version: 1.0.0
|
|
5
|
-
tier: 3
|
|
6
5
|
core: false
|
|
7
6
|
category: composition
|
|
8
7
|
protocol: null
|
|
@@ -14,6 +13,11 @@ compatibility:
|
|
|
14
13
|
- windsurf
|
|
15
14
|
- gemini-cli
|
|
16
15
|
license: MIT
|
|
16
|
+
metadata:
|
|
17
|
+
version: 1.0.0
|
|
18
|
+
tier: on-demand
|
|
19
|
+
install: harness
|
|
20
|
+
stability: deprecated
|
|
17
21
|
---
|
|
18
22
|
|
|
19
23
|
When the user asks about libraries, frameworks, or needs code examples, use Context7 to fetch current documentation instead of relying on training data.
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ct-docs-review
|
|
3
3
|
description: This skill should be used when the user asks to "review documentation", "check docs style", "review this markdown file", "check style guide compliance", "review PR documentation", or needs documentation reviewed against the CLEO writing style guide. Supports both local file review and GitHub PR review modes with inline comments.
|
|
4
4
|
version: 1.0.0
|
|
5
|
-
tier: 3
|
|
6
5
|
core: false
|
|
7
6
|
category: composition
|
|
8
7
|
protocol: null
|
|
@@ -14,6 +13,11 @@ compatibility:
|
|
|
14
13
|
- windsurf
|
|
15
14
|
- gemini-cli
|
|
16
15
|
license: MIT
|
|
16
|
+
metadata:
|
|
17
|
+
version: 1.0.0
|
|
18
|
+
tier: on-demand
|
|
19
|
+
install: harness
|
|
20
|
+
stability: deprecated
|
|
17
21
|
---
|
|
18
22
|
|
|
19
23
|
# Documentation Review Skill
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ct-docs-write
|
|
3
3
|
description: This skill should be used when creating, editing, or reviewing documentation files (markdown, MDX, README, guides). Use when the user asks to "write docs", "create documentation", "edit the README", "improve doc clarity", "make docs more readable", "follow the style guide", or "write user-facing content". Applies CLEO's conversational, clear, and user-focused writing style.
|
|
4
4
|
version: 1.2.0
|
|
5
|
-
tier: 3
|
|
6
5
|
core: false
|
|
7
6
|
category: composition
|
|
8
7
|
protocol: null
|
|
@@ -14,6 +13,11 @@ compatibility:
|
|
|
14
13
|
- windsurf
|
|
15
14
|
- gemini-cli
|
|
16
15
|
license: MIT
|
|
16
|
+
metadata:
|
|
17
|
+
version: 1.2.0
|
|
18
|
+
tier: on-demand
|
|
19
|
+
install: harness
|
|
20
|
+
stability: deprecated
|
|
17
21
|
---
|
|
18
22
|
|
|
19
23
|
# Documentation Writing Skill
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ct-documentor
|
|
3
3
|
description: Documentation coordinator with CLEO style guide compliance. Routes every canonical-doc write (spec, adr, research, handoff, note, llm-readme) through the docs SSoT via `cleo docs add` / `cleo docs publish` / `cleo docs fetch` — never raw filesystem writes. Coordinates ct-docs-lookup, ct-docs-write, ct-docs-review, ct-spec-writer, and ct-adr-recorder. Use when creating or updating documentation files, consolidating scattered documentation, or validating documentation against style standards. Triggers on documentation tasks, doc update requests, or style guide compliance checks.
|
|
4
|
-
version: 3.16.
|
|
5
|
-
tier: 3
|
|
4
|
+
version: 3.16.1
|
|
6
5
|
core: false
|
|
7
6
|
category: specialist
|
|
8
7
|
protocol: null
|
|
9
|
-
metadata:
|
|
10
|
-
version: 3.16.0
|
|
11
|
-
lastReviewed: 2026-09-19
|
|
12
|
-
stability: stable
|
|
13
8
|
dependencies:
|
|
14
9
|
- ct-docs-lookup
|
|
15
10
|
- ct-docs-write
|
|
@@ -25,6 +20,12 @@ compatibility:
|
|
|
25
20
|
- windsurf
|
|
26
21
|
- gemini-cli
|
|
27
22
|
license: MIT
|
|
23
|
+
metadata:
|
|
24
|
+
version: 3.16.1
|
|
25
|
+
tier: core
|
|
26
|
+
install: harness
|
|
27
|
+
lastReviewed: 2026-09-27
|
|
28
|
+
stability: stable
|
|
28
29
|
---
|
|
29
30
|
|
|
30
31
|
# Documentation Specialist Context Injection
|
|
@@ -398,8 +399,10 @@ Per-line opt-out (use sparingly): append
|
|
|
398
399
|
the writer-uniqueness lint. Where T10369 prevents *new* raw `.md`
|
|
399
400
|
writers from landing in `packages/core/src/**`, this sweep walks every
|
|
400
401
|
`*.md` file *already* added under `.cleo/canon.yml`'s `rawMdPaths`
|
|
401
|
-
directories since the T9791 docs-import cutoff
|
|
402
|
-
|
|
402
|
+
directories since the T9791 docs-import cutoff — the commit that
|
|
403
|
+
imported the legacy corpus and committed its manifests under
|
|
404
|
+
`.cleo/audit/imports/`, which is how the sweep locates it — and
|
|
405
|
+
classifies each one against the docs SSoT:
|
|
403
406
|
|
|
404
407
|
| Remediation | Meaning | Fix |
|
|
405
408
|
|---|---|---|
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
name: ct-epic-architect
|
|
3
3
|
description: Epic planning and task decomposition for breaking down large initiatives into atomic, executable tasks. Provides dependency analysis, wave-based parallel execution planning, hierarchy management, and research linking. Use when creating epics, decomposing initiatives into task trees, planning parallel workflows, or analyzing task dependencies. Triggers on epic creation, task decomposition requests, or planning phase work.
|
|
4
4
|
version: 3.0.0
|
|
5
|
-
tier: 1
|
|
6
5
|
core: false
|
|
7
6
|
category: recommended
|
|
8
7
|
protocol: decomposition
|
|
@@ -20,6 +19,11 @@ compatibility:
|
|
|
20
19
|
- windsurf
|
|
21
20
|
- gemini-cli
|
|
22
21
|
license: MIT
|
|
22
|
+
metadata:
|
|
23
|
+
version: 3.0.0
|
|
24
|
+
tier: on-demand
|
|
25
|
+
install: harness
|
|
26
|
+
stability: stable
|
|
23
27
|
---
|
|
24
28
|
|
|
25
29
|
# Epic Architect Context Injection
|
package/skills/ct-grade/SKILL.md
CHANGED
|
@@ -16,7 +16,6 @@ description: >-
|
|
|
16
16
|
version: 2.1.0
|
|
17
17
|
argument-hint: "[mode=scenario|ab|blind] [scenario=s1-s5|all] [runs=N] [session-id=<id>]"
|
|
18
18
|
allowed-tools: ["Bash(python *)", "Bash(cleo-dev *)", "Bash(cleo *)", "Bash(kill *)", "Bash(lsof *)", "Agent", "Read", "Write", "Glob"]
|
|
19
|
-
tier: 2
|
|
20
19
|
core: false
|
|
21
20
|
category: quality
|
|
22
21
|
protocol: null
|
|
@@ -28,6 +27,11 @@ compatibility:
|
|
|
28
27
|
- windsurf
|
|
29
28
|
- gemini-cli
|
|
30
29
|
license: MIT
|
|
30
|
+
metadata:
|
|
31
|
+
version: 2.1.0
|
|
32
|
+
tier: internal
|
|
33
|
+
install: internal
|
|
34
|
+
stability: stable
|
|
31
35
|
---
|
|
32
36
|
|
|
33
37
|
# Session Grading Guide
|
package/skills/ct-lead/SKILL.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ct-lead
|
|
3
3
|
description: "Phase Lead orchestration playbook for spawning and supervising a parallel worker swarm in one wave. Use when spawned by ct-orchestrator with role=orchestrator to fan out N leaf workers via delegate_task, drain the epic-<TID>.wave-<n> conduit topic plus pipeline_manifest, await rollupWaveStatus convergence, and return ONE rolled-up contract string to the parent Orchestrator. Triggers: 'phase lead', 'wave lead', 'supervise wave', 'fan out workers', 'aggregate worker results', 'rollup wave', any task with role=orchestrator that is itself a child of another orchestrator. Implements ADR-070 hierarchical orchestration."
|
|
4
|
+
metadata:
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
tier: core
|
|
7
|
+
install: harness
|
|
8
|
+
stability: stable
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# Phase Lead Protocol (ct-lead)
|
|
@@ -11,7 +11,6 @@ description: >-
|
|
|
11
11
|
"install master tac", "bootstrap protocols", "tools.skill.install ct-master-tac",
|
|
12
12
|
"verify protocol bundle", "repair protocol files", "fresh CleoOS install".
|
|
13
13
|
version: 1.0.0
|
|
14
|
-
tier: 1
|
|
15
14
|
core: false
|
|
16
15
|
category: meta
|
|
17
16
|
protocol: null
|
|
@@ -28,6 +27,11 @@ compatibility:
|
|
|
28
27
|
- gemini-cli
|
|
29
28
|
license: MIT
|
|
30
29
|
install-hook: "tools.skill.install ct-master-tac"
|
|
30
|
+
metadata:
|
|
31
|
+
version: 1.0.0
|
|
32
|
+
tier: internal
|
|
33
|
+
install: internal
|
|
34
|
+
stability: deprecated
|
|
31
35
|
---
|
|
32
36
|
|
|
33
37
|
# ct-master-tac — Master Tactical Bundle
|
|
@@ -49,6 +49,23 @@ function parseFrontmatterKeys(fm: string): Record<string, string> {
|
|
|
49
49
|
return result;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Read the nested `metadata:` map the way scripts/skills/lib/skill-frontmatter.mjs
|
|
54
|
+
* does: the indented `key: value` lines directly under a top-level `metadata:`.
|
|
55
|
+
*/
|
|
56
|
+
function parseFrontmatterMetadata(fm: string): Record<string, string> {
|
|
57
|
+
const result: Record<string, string> = {};
|
|
58
|
+
const lines = fm.split('\n');
|
|
59
|
+
const start = lines.findIndex((l) => l.trimEnd() === 'metadata:');
|
|
60
|
+
if (start === -1) return result;
|
|
61
|
+
for (const line of lines.slice(start + 1)) {
|
|
62
|
+
const m = /^\s+([A-Za-z][\w-]*):\s*(.*)$/.exec(line.trimEnd());
|
|
63
|
+
if (!m) break;
|
|
64
|
+
result[m[1]] = m[2].replace(/^["']|["']$/g, '');
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
52
69
|
// ---------------------------------------------------------------------------
|
|
53
70
|
// Mock install helper for idempotency test
|
|
54
71
|
// ---------------------------------------------------------------------------
|
|
@@ -98,15 +115,19 @@ describe('ct-master-tac plugin (T431)', () => {
|
|
|
98
115
|
expect(fm).not.toBeNull();
|
|
99
116
|
});
|
|
100
117
|
|
|
101
|
-
it('frontmatter has required fields: name, description, version, tier', () => {
|
|
118
|
+
it('frontmatter has required fields: name, description, metadata.version, metadata.tier', () => {
|
|
102
119
|
const content = readFileSync(skillMdPath, 'utf-8');
|
|
103
120
|
const fm = extractFrontmatter(content);
|
|
104
121
|
expect(fm).not.toBeNull();
|
|
105
122
|
const keys = parseFrontmatterKeys(fm!);
|
|
106
123
|
expect(keys['name']).toBe('ct-master-tac');
|
|
107
|
-
expect(keys['description']
|
|
108
|
-
|
|
109
|
-
|
|
124
|
+
expect(keys['description']).toBeTruthy();
|
|
125
|
+
// T12648: version and tier live under `metadata:` (skills SSoT, D11157).
|
|
126
|
+
const metadata = parseFrontmatterMetadata(fm!);
|
|
127
|
+
expect(metadata['version']).toMatch(/^\d+\.\d+\.\d+$/);
|
|
128
|
+
expect(['core', 'on-demand', 'internal']).toContain(metadata['tier']);
|
|
129
|
+
expect(keys['tier']).toBeUndefined();
|
|
130
|
+
if (keys['version'] !== undefined) expect(keys['version']).toBe(metadata['version']);
|
|
110
131
|
});
|
|
111
132
|
});
|
|
112
133
|
|