@cleocode/skills 2026.4.110 → 2026.4.112
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/README.md +1 -1
- package/package.json +1 -1
- package/skills/_shared/manifest-operations.md +16 -19
- package/skills/_shared/placeholders.json +4 -4
- package/skills/_shared/skill-chaining-patterns.md +4 -4
- package/skills/_shared/subagent-protocol-base.cant +3 -3
- package/skills/_shared/subagent-protocol-base.md +8 -9
- package/skills/_shared/task-system-integration.md +1 -1
- package/skills/ct-cleo/references/loom-lifecycle.md +4 -4
- package/skills/ct-cleo/references/session-protocol.md +1 -1
- package/skills/ct-dev-workflow/SKILL.md +1 -1
- package/skills/ct-documentor/SKILL.md +1 -1
- package/skills/ct-epic-architect/SKILL.md +1 -1
- package/skills/ct-epic-architect/references/commands.md +1 -1
- package/skills/ct-epic-architect/references/skill-aware-execution.md +1 -1
- package/skills/ct-master-tac/bundled/protocols/implementation.cant +1 -1
- package/skills/ct-master-tac/bundled/protocols/release.cant +1 -1
- package/skills/ct-master-tac/bundled/protocols/research.cant +2 -2
- package/skills/ct-master-tac/bundled/protocols/testing.cant +1 -1
- package/skills/ct-orchestrator/INSTALL.md +1 -1
- package/skills/ct-orchestrator/SKILL.md +6 -6
- package/skills/ct-orchestrator/orchestrator-prompt.txt +1 -1
- package/skills/ct-orchestrator/references/SUBAGENT-PROTOCOL-BLOCK.md +4 -4
- package/skills/ct-orchestrator/references/orchestrator-compliance.md +5 -5
- package/skills/ct-orchestrator/references/orchestrator-handoffs.md +1 -1
- package/skills/ct-orchestrator/references/orchestrator-patterns.md +1 -1
- package/skills/ct-orchestrator/references/orchestrator-spawning.md +1 -1
- package/skills/ct-orchestrator/references/orchestrator-tokens.md +6 -6
- package/skills/ct-research-agent/SKILL.md +4 -4
- package/skills/ct-spec-writer/SKILL.md +1 -1
- package/skills/ct-task-executor/SKILL.md +4 -4
- package/skills/ct-validator/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -400,7 +400,7 @@ cleo skills apply-profile backend-developer --task T1234
|
|
|
400
400
|
|
|
401
401
|
Common patterns and utilities in `skills/_shared/`:
|
|
402
402
|
|
|
403
|
-
- `manifest-operations.md` - Working with
|
|
403
|
+
- `manifest-operations.md` - Working with pipeline_manifest via cleo manifest CLI
|
|
404
404
|
- `subagent-protocol-base.md` - Base subagent protocols
|
|
405
405
|
- `skill-chaining-patterns.md` - Chaining best practices
|
|
406
406
|
- `testing-framework-config.md` - Test configuration
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
**Status**: ACTIVE
|
|
5
5
|
**Version**: 1.0.0
|
|
6
6
|
|
|
7
|
-
This reference defines all CLI operations for managing the agent outputs manifest (`
|
|
7
|
+
This reference defines all CLI operations for managing the agent outputs manifest (`pipeline_manifest` SQLite table via `cleo manifest` CLI). Skills and protocols SHOULD reference this file instead of duplicating manifest instructions.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -14,8 +14,8 @@ The manifest system provides O(1) append operations and race-condition-free conc
|
|
|
14
14
|
|
|
15
15
|
**Default Paths**:
|
|
16
16
|
- Output directory: `.cleo/agent-outputs/` (configurable via `agentOutputs.directory`)
|
|
17
|
-
- Manifest
|
|
18
|
-
-
|
|
17
|
+
- Manifest store: `pipeline_manifest` SQLite table (canonical per ADR-027)
|
|
18
|
+
- CLI: `cleo manifest append <json>` — the only supported write path
|
|
19
19
|
|
|
20
20
|
**Design Principles**:
|
|
21
21
|
- Append-only writes preserve audit trail
|
|
@@ -72,7 +72,7 @@ cleo research add \
|
|
|
72
72
|
{
|
|
73
73
|
"success": true,
|
|
74
74
|
"entryId": "jwt-authentication-2026-02-07",
|
|
75
|
-
"
|
|
75
|
+
"store": "pipeline_manifest"
|
|
76
76
|
}
|
|
77
77
|
```
|
|
78
78
|
|
|
@@ -455,7 +455,7 @@ When present, the `audit` field provides operational metadata:
|
|
|
455
455
|
| `{{DATE}}` | Current date | `2026-02-07` |
|
|
456
456
|
| `{{TOPIC_SLUG}}` | URL-safe topic name | `jwt-authentication` |
|
|
457
457
|
| `{{OUTPUT_DIR}}` | Output directory | `.cleo/agent-outputs` |
|
|
458
|
-
|
|
458
|
+
|
|
459
459
|
|
|
460
460
|
### Command Tokens (CLEO Defaults)
|
|
461
461
|
|
|
@@ -518,18 +518,15 @@ cleo research add \
|
|
|
518
518
|
### ❌ Pretty-Printed JSON
|
|
519
519
|
|
|
520
520
|
```bash
|
|
521
|
-
# WRONG -
|
|
522
|
-
echo '{
|
|
523
|
-
"id": "test",
|
|
524
|
-
"title": "Test"
|
|
525
|
-
}' >> MANIFEST.jsonl
|
|
521
|
+
# WRONG - Bypasses pipeline_manifest table
|
|
522
|
+
echo '{"id": "test", "title": "Test"}' >> .cleo/agent-outputs/legacy-manifest.jsonl
|
|
526
523
|
```
|
|
527
524
|
|
|
528
|
-
**Problem**:
|
|
525
|
+
**Problem**: Legacy file — migrated to SQLite per ADR-027. Race conditions and no validation.
|
|
529
526
|
|
|
530
|
-
**Solution**: Use `
|
|
527
|
+
**Solution**: Use `cleo manifest append`
|
|
531
528
|
```bash
|
|
532
|
-
|
|
529
|
+
cleo manifest append '{"id":"test","task_id":"T###","type":"research","status":"complete","output":"path/to/output.md","summary":"brief","key_findings":["..."]}'
|
|
533
530
|
```
|
|
534
531
|
|
|
535
532
|
---
|
|
@@ -537,15 +534,15 @@ jq -nc '{id: "test", title: "Test"}' >> MANIFEST.jsonl
|
|
|
537
534
|
### ❌ Direct File Writes
|
|
538
535
|
|
|
539
536
|
```bash
|
|
540
|
-
# WRONG -
|
|
541
|
-
echo "$json" >> .cleo/agent-outputs/
|
|
537
|
+
# WRONG - Legacy file path; SQLite is now the store
|
|
538
|
+
echo "$json" >> .cleo/agent-outputs/legacy-manifest.jsonl
|
|
542
539
|
```
|
|
543
540
|
|
|
544
|
-
**Problem**:
|
|
541
|
+
**Problem**: The legacy flat-file is retired per ADR-027. Use the manifest CLI.
|
|
545
542
|
|
|
546
|
-
**Solution**: Use
|
|
543
|
+
**Solution**: Use `cleo manifest append`
|
|
547
544
|
```bash
|
|
548
|
-
cleo
|
|
545
|
+
cleo manifest append '{"id":"...","task_id":"T####","type":"...","status":"complete","output":"...","summary":"...","key_findings":["..."]}'
|
|
549
546
|
```
|
|
550
547
|
|
|
551
548
|
---
|
|
@@ -582,7 +579,7 @@ Here is my research:
|
|
|
582
579
|
|
|
583
580
|
**Solution**: Return ONLY summary message
|
|
584
581
|
```markdown
|
|
585
|
-
[Type] complete.
|
|
582
|
+
[Type] complete. Manifest appended to pipeline_manifest.
|
|
586
583
|
```
|
|
587
584
|
|
|
588
585
|
---
|
|
@@ -71,9 +71,9 @@
|
|
|
71
71
|
{
|
|
72
72
|
"token": "MANIFEST_PATH",
|
|
73
73
|
"type": "path",
|
|
74
|
-
"example": "
|
|
75
|
-
"description": "
|
|
76
|
-
"default": "
|
|
74
|
+
"example": "pipeline_manifest (use cleo manifest append)",
|
|
75
|
+
"description": "Manifest CLI: use `cleo manifest append`",
|
|
76
|
+
"default": "pipeline_manifest (use cleo manifest append)"
|
|
77
77
|
}
|
|
78
78
|
],
|
|
79
79
|
"taskCommands": {
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
]
|
|
183
183
|
},
|
|
184
184
|
"manifest": {
|
|
185
|
-
"_comment": "Tokens used when constructing
|
|
185
|
+
"_comment": "Tokens used when constructing pipeline_manifest entries (via cleo manifest append)",
|
|
186
186
|
"tokens": [
|
|
187
187
|
{
|
|
188
188
|
"token": "MANIFEST_ID",
|
|
@@ -54,7 +54,7 @@ cleo orchestrator spawn T1234 --json
|
|
|
54
54
|
|
|
55
55
|
- **Input**: Task ID, skill template, previous manifest key_findings
|
|
56
56
|
- **Output**: Manifest entry with key_findings for next agent
|
|
57
|
-
- **Response**: "[Type] complete.
|
|
57
|
+
- **Response**: "[Type] complete. Manifest appended to pipeline_manifest."
|
|
58
58
|
|
|
59
59
|
---
|
|
60
60
|
|
|
@@ -164,7 +164,7 @@ A subagent can itself become an orchestrator, spawning further subagents for com
|
|
|
164
164
|
### Rule 1: Manifest for Handoffs (MUST)
|
|
165
165
|
|
|
166
166
|
```json
|
|
167
|
-
// Subagent appends ONE
|
|
167
|
+
// Subagent appends ONE entry via cleo manifest append
|
|
168
168
|
{"id":"topic-2026-01-20","key_findings":["Finding 1","Finding 2"],"needs_followup":["T1235"]}
|
|
169
169
|
```
|
|
170
170
|
|
|
@@ -173,7 +173,7 @@ Parent reads only key_findings, not full research files.
|
|
|
173
173
|
### Rule 2: Minimal Response (MUST)
|
|
174
174
|
|
|
175
175
|
```
|
|
176
|
-
Subagent MUST return ONLY: "[Type] complete/partial/blocked.
|
|
176
|
+
Subagent MUST return ONLY: "[Type] complete/partial/blocked. Manifest appended to pipeline_manifest."
|
|
177
177
|
Subagent MUST NOT return output content in response.
|
|
178
178
|
```
|
|
179
179
|
|
|
@@ -181,7 +181,7 @@ Subagent MUST NOT return output content in response.
|
|
|
181
181
|
|
|
182
182
|
Detailed findings go to output files, not manifest or response:
|
|
183
183
|
- Full analysis → `{{OUTPUT_DIR}}/YYYY-MM-DD_topic.md`
|
|
184
|
-
- Summary only →
|
|
184
|
+
- Summary only → pipeline_manifest key_findings (via `cleo manifest append`)
|
|
185
185
|
|
|
186
186
|
### Rule 4: Token Injection (SHOULD)
|
|
187
187
|
|
|
@@ -21,7 +21,7 @@ protocol subagent-base:
|
|
|
21
21
|
EPIC_ID: pattern("^T[0-9]+$") = ""
|
|
22
22
|
SESSION_ID: string = ""
|
|
23
23
|
OUTPUT_DIR: path = ".cleo/agent-outputs"
|
|
24
|
-
MANIFEST_PATH
|
|
24
|
+
# MANIFEST_PATH token retired — use pipeline.manifest.append instead (ADR-027)
|
|
25
25
|
computed:
|
|
26
26
|
OUTPUT_PATH: path = "${OUTPUT_DIR}/${DATE}_${TOPIC_SLUG}.md"
|
|
27
27
|
RESEARCH_ID: string = "${TOPIC_SLUG}-${DATE}"
|
|
@@ -55,7 +55,7 @@ protocol subagent-base:
|
|
|
55
55
|
MAN-001: MUST write output file before appending manifest entry
|
|
56
56
|
MAN-002: MUST set manifest status to enum("complete", "partial", "blocked")
|
|
57
57
|
MAN-003: SHOULD include needs_followup array when status is "partial"
|
|
58
|
-
MAN-004: MUST use pipeline.manifest.append —
|
|
58
|
+
MAN-004: MUST use pipeline.manifest.append — flat-file sink retired per ADR-027
|
|
59
59
|
|
|
60
60
|
# --- Lifecycle Phases ---
|
|
61
61
|
|
|
@@ -102,7 +102,7 @@ protocol subagent-base:
|
|
|
102
102
|
- pattern: "Calling tasks.list without filters"
|
|
103
103
|
problem: "Returns all tasks with notes — huge token cost"
|
|
104
104
|
solution: "Use tasks.find for discovery"
|
|
105
|
-
- pattern: "Appending to
|
|
105
|
+
- pattern: "Appending to legacy flat-file directly"
|
|
106
106
|
problem: "Legacy file — migrated to SQLite per ADR-027"
|
|
107
107
|
solution: "Use pipeline.manifest.append operation"
|
|
108
108
|
- pattern: "Loading skills via @ at runtime"
|
|
@@ -16,14 +16,14 @@ All subagents operating under an orchestrator MUST follow this protocol.
|
|
|
16
16
|
| ID | Rule | Compliance |
|
|
17
17
|
|----|------|------------|
|
|
18
18
|
| OUT-001 | MUST write findings to `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md` | Required |
|
|
19
|
-
| OUT-002 | MUST append ONE
|
|
20
|
-
| OUT-003 | MUST return ONLY: "[Type] complete.
|
|
19
|
+
| OUT-002 | MUST append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027/T1093) | Required |
|
|
20
|
+
| OUT-003 | MUST return ONLY: "[Type] complete. Manifest appended to pipeline_manifest." | Required |
|
|
21
21
|
| OUT-004 | MUST NOT return output content in response | Required |
|
|
22
22
|
|
|
23
23
|
Valid return messages:
|
|
24
|
-
- `"[Type] complete.
|
|
25
|
-
- `"[Type] partial.
|
|
26
|
-
- `"[Type] blocked.
|
|
24
|
+
- `"[Type] complete. Manifest appended to pipeline_manifest."`
|
|
25
|
+
- `"[Type] partial. Manifest appended to pipeline_manifest."`
|
|
26
|
+
- `"[Type] blocked. Manifest appended to pipeline_manifest."`
|
|
27
27
|
|
|
28
28
|
### Rationale
|
|
29
29
|
|
|
@@ -110,7 +110,7 @@ Reference: @skills/_shared/task-system-integration.md
|
|
|
110
110
|
4. Write output: {{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md
|
|
111
111
|
5. Create manifest entry: cleo research add [flags]
|
|
112
112
|
6. Complete: {{TASK_COMPLETE_CMD}} {{TASK_ID}}
|
|
113
|
-
7. Return: "[Type] complete.
|
|
113
|
+
7. Return: "[Type] complete. Manifest appended to pipeline_manifest."
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
---
|
|
@@ -178,7 +178,6 @@ Before returning, verify:
|
|
|
178
178
|
| `{{EPIC_ID}}` | `""` | Parent epic ID |
|
|
179
179
|
| `{{SESSION_ID}}` | `""` | Session identifier |
|
|
180
180
|
| `{{OUTPUT_DIR}}` | `.cleo/agent-outputs` | Output directory |
|
|
181
|
-
| `{{MANIFEST_PATH}}` | `{{OUTPUT_DIR}}/MANIFEST.jsonl` | Manifest location |
|
|
182
181
|
|
|
183
182
|
### Task System Tokens (CLEO defaults)
|
|
184
183
|
|
|
@@ -201,7 +200,7 @@ If work cannot complete fully:
|
|
|
201
200
|
2. Set manifest `"status": "partial"`
|
|
202
201
|
3. Add blocking reason to `needs_followup`
|
|
203
202
|
4. Complete task (partial work is still progress)
|
|
204
|
-
5. Return: "[Type] partial.
|
|
203
|
+
5. Return: "[Type] partial. Manifest appended to pipeline_manifest."
|
|
205
204
|
|
|
206
205
|
### Blocked Status
|
|
207
206
|
|
|
@@ -211,7 +210,7 @@ If work cannot proceed:
|
|
|
211
210
|
2. Set manifest `"status": "blocked"`
|
|
212
211
|
3. Add blocker details to `needs_followup`
|
|
213
212
|
4. Do NOT complete task (leave for orchestrator decision)
|
|
214
|
-
5. Return: "[Type] blocked.
|
|
213
|
+
5. Return: "[Type] blocked. Manifest appended to pipeline_manifest."
|
|
215
214
|
|
|
216
215
|
---
|
|
217
216
|
|
|
@@ -169,7 +169,7 @@ When tokens are not explicitly configured, assume CLEO defaults:
|
|
|
169
169
|
| `{{TASK_FIND_CMD}}` | `cleo find` |
|
|
170
170
|
| `{{TASK_ADD_CMD}}` | `cleo add` |
|
|
171
171
|
| `{{OUTPUT_DIR}}` | `.cleo/agent-outputs` |
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
|
|
174
174
|
---
|
|
175
175
|
|
|
@@ -107,7 +107,7 @@ Every spawn combines two layers:
|
|
|
107
107
|
|
|
108
108
|
| ID | Rule | Enforcement |
|
|
109
109
|
|----|------|-------------|
|
|
110
|
-
| BASE-001 | MUST append ONE
|
|
110
|
+
| BASE-001 | MUST append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027/T1093) | Required |
|
|
111
111
|
| BASE-002 | MUST NOT return content in response | Required |
|
|
112
112
|
| BASE-003 | MUST complete task via `cleo complete` | Required |
|
|
113
113
|
| BASE-004 | MUST write output file before manifest | Required |
|
|
@@ -131,6 +131,6 @@ SPAWN -> INJECT -> EXECUTE -> OUTPUT -> RETURN
|
|
|
131
131
|
|
|
132
132
|
| Status | Message |
|
|
133
133
|
|--------|---------|
|
|
134
|
-
| Complete | `[Type] complete.
|
|
135
|
-
| Partial | `[Type] partial.
|
|
136
|
-
| Blocked | `[Type] blocked.
|
|
134
|
+
| Complete | `[Type] complete. Manifest appended to pipeline_manifest.` |
|
|
135
|
+
| Partial | `[Type] partial. Manifest appended to pipeline_manifest.` |
|
|
136
|
+
| Blocked | `[Type] blocked. Manifest appended to pipeline_manifest.` |
|
|
@@ -328,7 +328,7 @@ cleo session end --note "Completed X, Y, Z"
|
|
|
328
328
|
|
|
329
329
|
1. MUST write workflow summary to: `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`
|
|
330
330
|
2. MUST append ONE line to: `{{MANIFEST_PATH}}`
|
|
331
|
-
3. MUST return ONLY: "Workflow complete.
|
|
331
|
+
3. MUST return ONLY: "Workflow complete. Manifest appended to pipeline_manifest."
|
|
332
332
|
4. MUST NOT return full commit/release details in response
|
|
333
333
|
|
|
334
334
|
---
|
|
@@ -172,7 +172,7 @@ cleo research link {TASK_ID} {RESEARCH_ID}
|
|
|
172
172
|
|
|
173
173
|
1. MUST write documentation output to: `{{OUTPUT_DIR}}/`
|
|
174
174
|
2. MUST append ONE line to: `{{MANIFEST_PATH}}`
|
|
175
|
-
3. MUST return ONLY: "Documentation complete.
|
|
175
|
+
3. MUST return ONLY: "Documentation complete. Manifest appended to pipeline_manifest."
|
|
176
176
|
4. MUST NOT return documentation content in response
|
|
177
177
|
|
|
178
178
|
### Output File Format
|
|
@@ -249,7 +249,7 @@ Recommendation: [Your recommendation]
|
|
|
249
249
|
|
|
250
250
|
1. MUST write decomposition to: `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`
|
|
251
251
|
2. MUST append ONE line to: `{{MANIFEST_PATH}}`
|
|
252
|
-
3. MUST return ONLY: "Decomposition complete.
|
|
252
|
+
3. MUST return ONLY: "Decomposition complete. Manifest appended to pipeline_manifest."
|
|
253
253
|
4. MUST NOT return full decomposition in response
|
|
254
254
|
|
|
255
255
|
---
|
|
@@ -119,7 +119,7 @@ When ct-epic-architect creates an epic, it follows the subagent protocol:
|
|
|
119
119
|
|
|
120
120
|
1. **Write output file**: `{{OUTPUT_DIR}}/{{DATE}}_epic-{{FEATURE_SLUG}}.md`
|
|
121
121
|
2. **Append manifest entry**: Single line JSON to `{{MANIFEST_PATH}}`
|
|
122
|
-
3. **Return summary only**: "Epic created.
|
|
122
|
+
3. **Return summary only**: "Epic created. Manifest appended to pipeline_manifest."
|
|
123
123
|
|
|
124
124
|
### Querying Prior Research
|
|
125
125
|
|
|
@@ -19,7 +19,7 @@ input:
|
|
|
19
19
|
output:
|
|
20
20
|
files_changed: "string[] — list of modified/created files"
|
|
21
21
|
tests_added: "string[] — new test files or test names"
|
|
22
|
-
manifest_entry: "object — implementation summary for
|
|
22
|
+
manifest_entry: "object — implementation summary for pipeline_manifest via cleo manifest append"
|
|
23
23
|
---
|
|
24
24
|
|
|
25
25
|
# Implementation Protocol
|
|
@@ -20,7 +20,7 @@ output:
|
|
|
20
20
|
release_tag: "string — git tag created (e.g. v2026.4.5)"
|
|
21
21
|
changelog_path: "string — path to updated CHANGELOG file"
|
|
22
22
|
artifacts_published: "boolean — true when artifact phase ran"
|
|
23
|
-
release_manifest: "object — release summary for
|
|
23
|
+
release_manifest: "object — release summary for pipeline_manifest via cleo manifest append"
|
|
24
24
|
---
|
|
25
25
|
|
|
26
26
|
# Release Protocol
|
|
@@ -18,7 +18,7 @@ input:
|
|
|
18
18
|
output_dir: "string — directory for findings (default: .cleo/agent-outputs/)"
|
|
19
19
|
output:
|
|
20
20
|
findings_path: "string — path to the research output markdown file"
|
|
21
|
-
manifest_entry: "object — 3–7 key findings for
|
|
21
|
+
manifest_entry: "object — 3–7 key findings for pipeline_manifest via cleo manifest append"
|
|
22
22
|
confidence_levels: "object — per-finding confidence 0.0–1.0"
|
|
23
23
|
sources: "string[] — cited URLs or file paths"
|
|
24
24
|
---
|
|
@@ -45,7 +45,7 @@ output:
|
|
|
45
45
|
# RSCH-001: MUST NOT implement code or make changes to codebase
|
|
46
46
|
# RSCH-002: MUST document all sources with citations
|
|
47
47
|
# RSCH-003: MUST write findings to claudedocs/agent-outputs/
|
|
48
|
-
# RSCH-004: MUST append entry
|
|
48
|
+
# RSCH-004: MUST append entry via `cleo manifest append`
|
|
49
49
|
# RSCH-005: MUST return only completion message (no content in response)
|
|
50
50
|
# RSCH-006: MUST include 3-7 key findings in manifest entry
|
|
51
51
|
# RSCH-007: MUST set agent_type: "research" in manifest
|
|
@@ -20,7 +20,7 @@ output:
|
|
|
20
20
|
test_framework: "vitest | jest | mocha | pytest | cargo-test | go-test | rspec | phpunit | bats | other"
|
|
21
21
|
convergence_iterations: "number — IVT loop iterations to convergence"
|
|
22
22
|
test_results: "object — {passed, failed, skipped} counts"
|
|
23
|
-
manifest_entry: "object — convergence metrics for
|
|
23
|
+
manifest_entry: "object — convergence metrics for pipeline_manifest via cleo manifest append"
|
|
24
24
|
---
|
|
25
25
|
|
|
26
26
|
# Testing Protocol - Project-Agnostic IVT Loop
|
|
@@ -26,7 +26,7 @@ You are the **Orchestrator** — a conductor, never a musician. You coordinate c
|
|
|
26
26
|
| ORC-006 | Max 3 files per subagent | Cross-file reasoning degrades beyond this scope |
|
|
27
27
|
| ORC-007 | All work traced to epic | No orphaned tasks — every task has a parent epic |
|
|
28
28
|
| ORC-008 | Zero architectural decisions | Architecture MUST be pre-decided via RCASD consensus or HITL |
|
|
29
|
-
| ORC-009 | Manifest-mediated handoffs | Read only `key_findings` from
|
|
29
|
+
| ORC-009 | Manifest-mediated handoffs | Read only `key_findings` from pipeline_manifest; subagents read full files |
|
|
30
30
|
| ORC-010 | Continuous dispatch | While ready tasks exist, orchestrator MUST be spawning — never idle while work remains |
|
|
31
31
|
| ORC-011 | Pre-release verification gate | NEVER `git push --tags` without full pipeline green: biome ci packages/, build, test, changelog, version |
|
|
32
32
|
| ORC-012 | Honest reporting | "Shipped" ≠ "designed" ≠ "in progress" — distinguish always; never claim CI green without seeing the green |
|
|
@@ -110,14 +110,14 @@ Agent({
|
|
|
110
110
|
})
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
**Other harnesses**: Pass the resolved prompt to whatever "give this prompt to an agent" mechanism the runtime provides. Results flow back through
|
|
113
|
+
**Other harnesses**: Pass the resolved prompt to whatever "give this prompt to an agent" mechanism the runtime provides. Results flow back through pipeline_manifest (via `cleo manifest append`) — the universal handoff medium.
|
|
114
114
|
|
|
115
115
|
### Valid Return Messages
|
|
116
116
|
|
|
117
117
|
Subagents MUST return exactly one of:
|
|
118
|
-
- `"[Type] complete.
|
|
119
|
-
- `"[Type] partial.
|
|
120
|
-
- `"[Type] blocked.
|
|
118
|
+
- `"[Type] complete. Manifest appended to pipeline_manifest."`
|
|
119
|
+
- `"[Type] partial. Manifest appended to pipeline_manifest."`
|
|
120
|
+
- `"[Type] blocked. Manifest appended to pipeline_manifest."`
|
|
121
121
|
|
|
122
122
|
> Detailed spawn workflow, manual protocol injection, skill dispatch matrix: `references/orchestrator-spawning.md`
|
|
123
123
|
|
|
@@ -168,7 +168,7 @@ After each wave or on request: what completed, blockers needing HITL, next actio
|
|
|
168
168
|
Content flows between subagents via **manifest-mediated handoffs**, NOT through orchestrator context:
|
|
169
169
|
|
|
170
170
|
```
|
|
171
|
-
Agent A completes → writes output file +
|
|
171
|
+
Agent A completes → writes output file + pipeline_manifest entry (via `cleo manifest append`)
|
|
172
172
|
↓
|
|
173
173
|
Orchestrator reads manifest key_findings (3-7 items) + file path
|
|
174
174
|
↓
|
|
@@ -17,7 +17,7 @@ of LLM provider or harness. Model assignment (opus/sonnet/haiku) is
|
|
|
17
17
|
preferred when available, never a blocker.
|
|
18
18
|
|
|
19
19
|
Read only manifests, never full subagent outputs. Subagents write
|
|
20
|
-
to
|
|
20
|
+
to pipeline_manifest (via `cleo manifest append`); you read key_findings from manifest entries.
|
|
21
21
|
|
|
22
22
|
Each subagent MUST stay under 185,000 tokens. If approaching that
|
|
23
23
|
limit, the subagent MUST create a handoff and a new agent carries
|
|
@@ -9,8 +9,8 @@ Copy and include this block in EVERY subagent prompt spawned via Task tool.
|
|
|
9
9
|
|
|
10
10
|
OUTPUT REQUIREMENTS:
|
|
11
11
|
1. MUST write findings to: {{OUTPUT_DIR}}/YYYY-MM-DD_{topic}.md
|
|
12
|
-
2. MUST append ONE
|
|
13
|
-
3. MUST return ONLY: "Research complete.
|
|
12
|
+
2. MUST append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027/T1093)
|
|
13
|
+
3. MUST return ONLY: "Research complete. Manifest appended to pipeline_manifest."
|
|
14
14
|
4. MUST NOT return research content in response.
|
|
15
15
|
|
|
16
16
|
MANIFEST ENTRY FORMAT:
|
|
@@ -34,8 +34,8 @@ You are the {ROLE} subagent. Your job is to complete CLEO task {TASK_ID}.
|
|
|
34
34
|
## SUBAGENT PROTOCOL (RFC 2119 - MANDATORY)
|
|
35
35
|
OUTPUT REQUIREMENTS:
|
|
36
36
|
1. MUST write findings to: {{OUTPUT_DIR}}/YYYY-MM-DD_{topic}.md
|
|
37
|
-
2. MUST append ONE
|
|
38
|
-
3. MUST return ONLY: "Research complete.
|
|
37
|
+
2. MUST append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027/T1093)
|
|
38
|
+
3. MUST return ONLY: "Research complete. Manifest appended to pipeline_manifest."
|
|
39
39
|
4. MUST NOT return research content in response.
|
|
40
40
|
|
|
41
41
|
## CONTEXT
|
|
@@ -20,9 +20,9 @@ Only accept these return message formats from subagents:
|
|
|
20
20
|
|
|
21
21
|
| Status | Valid Return Message |
|
|
22
22
|
|--------|---------------------|
|
|
23
|
-
| Complete | "Research complete.
|
|
24
|
-
| Partial | "Research partial.
|
|
25
|
-
| Blocked | "Research blocked.
|
|
23
|
+
| Complete | "Research complete. Manifest appended to pipeline_manifest." |
|
|
24
|
+
| Partial | "Research partial. Manifest appended to pipeline_manifest." |
|
|
25
|
+
| Blocked | "Research blocked. Manifest appended to pipeline_manifest." |
|
|
26
26
|
|
|
27
27
|
Any other return format indicates protocol violation.
|
|
28
28
|
|
|
@@ -241,8 +241,8 @@ if (( $(echo "$compliance_pass_rate < $COMPLIANCE_THRESHOLD" | bc -l) )); then
|
|
|
241
241
|
|
|
242
242
|
## COMPLIANCE CHECKLIST (VERIFY BEFORE RETURNING)
|
|
243
243
|
- [ ] Output file exists at {{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md
|
|
244
|
-
- [ ]
|
|
245
|
-
- [ ] Return message is EXACTLY: 'Research complete.
|
|
244
|
+
- [ ] pipeline_manifest entry appended via `cleo manifest append`
|
|
245
|
+
- [ ] Return message is EXACTLY: 'Research complete. Manifest appended to pipeline_manifest.'
|
|
246
246
|
- [ ] Task linked via: {{TASK_LINK_CMD}} {{TASK_ID}} <research-id>
|
|
247
247
|
- [ ] Task completed via: {{TASK_COMPLETE_CMD}} {{TASK_ID}}
|
|
248
248
|
"
|
|
@@ -15,7 +15,7 @@ Orchestrator (Tier 0)
|
|
|
15
15
|
├─ Spawns Agent A with task instructions
|
|
16
16
|
│ └─ A completes → writes output file + manifest entry
|
|
17
17
|
│
|
|
18
|
-
├─ Reads
|
|
18
|
+
├─ Reads pipeline_manifest → extracts key_findings (3-7 items)
|
|
19
19
|
│ └─ Does NOT read full output file
|
|
20
20
|
│ └─ Does NOT use TaskOutput tool
|
|
21
21
|
│
|
|
@@ -98,7 +98,7 @@ cleo phase advance # Move to testing phase
|
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
# 1. Subagent completes implementation
|
|
101
|
-
# Returns: "Implementation complete.
|
|
101
|
+
# Returns: "Implementation complete. Manifest appended to pipeline_manifest."
|
|
102
102
|
|
|
103
103
|
# 2. Orchestrator verifies output
|
|
104
104
|
cleo research show <research-id>
|
|
@@ -50,7 +50,7 @@ Agent({
|
|
|
50
50
|
})
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
**Other harnesses** (Cursor, OpenCode, Codex, etc.): Pass the resolved prompt to whatever "give this prompt to an agent" mechanism the runtime provides. Results flow back through
|
|
53
|
+
**Other harnesses** (Cursor, OpenCode, Codex, etc.): Pass the resolved prompt to whatever "give this prompt to an agent" mechanism the runtime provides. Results flow back through pipeline_manifest (via `cleo manifest append`).
|
|
54
54
|
|
|
55
55
|
### Fallback Spawn (when CLI spawn unavailable)
|
|
56
56
|
|
|
@@ -71,7 +71,7 @@ template=$(ti_load_template "skills/ct-research-agent/SKILL.md")
|
|
|
71
71
|
| Token | Default Value |
|
|
72
72
|
|-------|---------------|
|
|
73
73
|
| `{{OUTPUT_DIR}}` | `.cleo/agent-outputs` |
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
|
|
76
76
|
### Task Context Tokens (populated from CLEO task data)
|
|
77
77
|
|
|
@@ -83,7 +83,7 @@ template=$(ti_load_template "skills/ct-research-agent/SKILL.md")
|
|
|
83
83
|
| `{{DELIVERABLES_LIST}}` | `task.deliverables` | Expected outputs |
|
|
84
84
|
| `{{ACCEPTANCE_CRITERIA}}` | Extracted | Completion criteria |
|
|
85
85
|
| `{{DEPENDS_LIST}}` | `task.depends` | Completed dependencies |
|
|
86
|
-
| `{{MANIFEST_SUMMARIES}}` |
|
|
86
|
+
| `{{MANIFEST_SUMMARIES}}` | pipeline_manifest | Key findings from previous agents |
|
|
87
87
|
| `{{NEXT_TASK_IDS}}` | Dependency analysis | Tasks unblocked after completion |
|
|
88
88
|
|
|
89
89
|
---
|
|
@@ -115,7 +115,7 @@ For fine-grained control over token injection, use `lib/token-inject.sh` directl
|
|
|
115
115
|
| **Task Commands** | `{{TASK_SHOW_CMD}}`, `{{TASK_START_CMD}}`, `{{TASK_COMPLETE_CMD}}`, etc. | CLEO defaults |
|
|
116
116
|
| **Output Paths** | `{{OUTPUT_DIR}}`, `{{MANIFEST_PATH}}` | CLEO defaults |
|
|
117
117
|
| **Task Context** | `{{TASK_TITLE}}`, `{{TASK_DESCRIPTION}}`, `{{DEPENDS_LIST}}`, etc. | From CLEO task data |
|
|
118
|
-
| **Manifest Context** | `{{MANIFEST_SUMMARIES}}` | From recent
|
|
118
|
+
| **Manifest Context** | `{{MANIFEST_SUMMARIES}}` | From recent pipeline_manifest entries |
|
|
119
119
|
|
|
120
120
|
### Manual Token Injection Example
|
|
121
121
|
|
|
@@ -156,7 +156,7 @@ echo "$template" | grep -c '{{' && echo "WARNING: Uninjected tokens remain"
|
|
|
156
156
|
|
|
157
157
|
Token defaults (from `skills/_shared/placeholders.json`):
|
|
158
158
|
- `{{OUTPUT_DIR}}` -> `.cleo/agent-outputs`
|
|
159
|
-
- `{{MANIFEST_PATH}}` ->
|
|
159
|
+
- `{{MANIFEST_PATH}}` -> retired (ADR-027) — use `cleo manifest append`
|
|
160
160
|
|
|
161
161
|
### Inline Protocol Block (when CLI unavailable)
|
|
162
162
|
|
|
@@ -165,8 +165,8 @@ Token defaults (from `skills/_shared/placeholders.json`):
|
|
|
165
165
|
|
|
166
166
|
OUTPUT REQUIREMENTS:
|
|
167
167
|
1. MUST write findings to: {{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md
|
|
168
|
-
2. MUST append ONE
|
|
169
|
-
3. MUST return ONLY: "Research complete.
|
|
168
|
+
2. MUST append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027/T1093)
|
|
169
|
+
3. MUST return ONLY: "Research complete. Manifest appended to pipeline_manifest."
|
|
170
170
|
4. MUST NOT return research content in response.
|
|
171
171
|
|
|
172
172
|
CLEO INTEGRATION:
|
|
@@ -107,7 +107,7 @@ Context injection for research and investigation tasks spawned via cleo-subagent
|
|
|
107
107
|
|
|
108
108
|
1. MUST write findings to: `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`
|
|
109
109
|
2. MUST append ONE line to: `{{MANIFEST_PATH}}`
|
|
110
|
-
3. MUST return ONLY: "Research complete.
|
|
110
|
+
3. MUST return ONLY: "Research complete. Manifest appended to pipeline_manifest."
|
|
111
111
|
4. MUST NOT return research content in response
|
|
112
112
|
|
|
113
113
|
---
|
|
@@ -155,7 +155,7 @@ Write to `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`:
|
|
|
155
155
|
|
|
156
156
|
## Manifest Entry Format
|
|
157
157
|
|
|
158
|
-
Append ONE
|
|
158
|
+
Append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027):
|
|
159
159
|
|
|
160
160
|
```json
|
|
161
161
|
{"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}}"]}
|
|
@@ -195,7 +195,7 @@ If complete answers cannot be found:
|
|
|
195
195
|
3. Set manifest `"status": "partial"`
|
|
196
196
|
4. Add suggestions for followup to `needs_followup`
|
|
197
197
|
5. Complete task
|
|
198
|
-
6. Return: "Research partial.
|
|
198
|
+
6. Return: "Research partial. Manifest appended to pipeline_manifest."
|
|
199
199
|
|
|
200
200
|
### Blocked Research
|
|
201
201
|
|
|
@@ -205,7 +205,7 @@ If research cannot proceed (access denied, topic too broad, etc.):
|
|
|
205
205
|
2. Set manifest `"status": "blocked"`
|
|
206
206
|
3. Add blocker details to `needs_followup`
|
|
207
207
|
4. Do NOT complete task
|
|
208
|
-
5. Return: "Research blocked.
|
|
208
|
+
5. Return: "Research blocked. Manifest appended to pipeline_manifest."
|
|
209
209
|
|
|
210
210
|
---
|
|
211
211
|
|
|
@@ -165,7 +165,7 @@ Specifications go in: `docs/specs/{{SPEC_NAME}}.md`
|
|
|
165
165
|
|
|
166
166
|
1. MUST write specification to: `docs/specs/{{SPEC_NAME}}.md`
|
|
167
167
|
2. MUST append ONE line to: `{{MANIFEST_PATH}}`
|
|
168
|
-
3. MUST return ONLY: "Specification complete.
|
|
168
|
+
3. MUST return ONLY: "Specification complete. Manifest appended to pipeline_manifest."
|
|
169
169
|
4. MUST NOT return specification content in response
|
|
170
170
|
|
|
171
171
|
### Manifest Entry Format
|
|
@@ -110,7 +110,7 @@ Context injection for implementation tasks spawned via cleo-subagent. Provides d
|
|
|
110
110
|
|
|
111
111
|
1. MUST write findings to: `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`
|
|
112
112
|
2. MUST append ONE line to: `{{MANIFEST_PATH}}`
|
|
113
|
-
3. MUST return ONLY: "Implementation complete.
|
|
113
|
+
3. MUST return ONLY: "Implementation complete. Manifest appended to pipeline_manifest."
|
|
114
114
|
4. MUST NOT return implementation details in response
|
|
115
115
|
|
|
116
116
|
---
|
|
@@ -162,7 +162,7 @@ Write to `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`:
|
|
|
162
162
|
|
|
163
163
|
## Manifest Entry Format
|
|
164
164
|
|
|
165
|
-
Append ONE
|
|
165
|
+
Append ONE entry via `cleo manifest append <json>` (writes to pipeline_manifest table per ADR-027):
|
|
166
166
|
|
|
167
167
|
```json
|
|
168
168
|
{"id":"{{TOPIC_SLUG}}-{{DATE}}","file":"{{DATE}}_{{TOPIC_SLUG}}.md","title":"{{TASK_NAME}}","date":"{{DATE}}","status":"complete","agent_type":"implementation","topics":{{TOPICS_JSON}},"key_findings":["Completed: deliverable 1","Completed: deliverable 2","All acceptance criteria passed"],"actionable":false,"needs_followup":[],"linked_tasks":["{{EPIC_ID}}","{{TASK_ID}}"]}
|
|
@@ -205,7 +205,7 @@ If all deliverables cannot be produced:
|
|
|
205
205
|
3. Set manifest `"status": "partial"`
|
|
206
206
|
4. Add blocking items to `needs_followup`
|
|
207
207
|
5. Complete task (partial work is progress)
|
|
208
|
-
6. Return: "Implementation partial.
|
|
208
|
+
6. Return: "Implementation partial. Manifest appended to pipeline_manifest."
|
|
209
209
|
|
|
210
210
|
### Blocked Execution
|
|
211
211
|
|
|
@@ -215,7 +215,7 @@ If work cannot proceed (missing dependencies, access issues, unclear requirement
|
|
|
215
215
|
2. Set manifest `"status": "blocked"`
|
|
216
216
|
3. Add blocker details to `needs_followup`
|
|
217
217
|
4. Do NOT complete task
|
|
218
|
-
5. Return: "Implementation blocked.
|
|
218
|
+
5. Return: "Implementation blocked. Manifest appended to pipeline_manifest."
|
|
219
219
|
|
|
220
220
|
### Acceptance Criteria Failure
|
|
221
221
|
|
|
@@ -125,7 +125,7 @@ Context injection for compliance validation tasks spawned via cleo-subagent. Pro
|
|
|
125
125
|
|
|
126
126
|
1. MUST write validation report to: `{{OUTPUT_DIR}}/{{DATE}}_{{TOPIC_SLUG}}.md`
|
|
127
127
|
2. MUST append ONE line to: `{{MANIFEST_PATH}}`
|
|
128
|
-
3. MUST return ONLY: "Validation complete.
|
|
128
|
+
3. MUST return ONLY: "Validation complete. Manifest appended to pipeline_manifest."
|
|
129
129
|
4. MUST NOT return validation content in response
|
|
130
130
|
|
|
131
131
|
### Manifest Entry Format
|