@cleocode/cleo 2026.3.20 → 2026.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +46156 -42192
- package/dist/cli/index.js.map +4 -4
- package/dist/mcp/index.js +37601 -36260
- package/dist/mcp/index.js.map +4 -4
- package/drizzle-brain.config.ts +7 -0
- package/drizzle-nexus.config.ts +7 -0
- package/drizzle-tasks.config.ts +7 -0
- package/migrations/drizzle-brain/20260301230215_workable_spitfire/migration.sql +68 -0
- package/migrations/drizzle-brain/20260301230215_workable_spitfire/snapshot.json +651 -0
- package/migrations/drizzle-brain/20260302050325_unknown_justin_hammer/migration.sql +23 -0
- package/migrations/drizzle-brain/20260302050325_unknown_justin_hammer/snapshot.json +884 -0
- package/migrations/drizzle-brain/20260302061755_unusual_jamie_braddock/migration.sql +2 -0
- package/migrations/drizzle-brain/20260302061755_unusual_jamie_braddock/snapshot.json +908 -0
- package/migrations/drizzle-brain/20260302193548_luxuriant_glorian/migration.sql +20 -0
- package/migrations/drizzle-brain/20260302193548_luxuriant_glorian/snapshot.json +1078 -0
- package/migrations/drizzle-brain/20260304045002_white_thunderbolt_ross/migration.sql +16 -0
- package/migrations/drizzle-brain/20260304045002_white_thunderbolt_ross/snapshot.json +1233 -0
- package/migrations/drizzle-nexus/20260305070805_quick_ted_forrester/migration.sql +46 -0
- package/migrations/drizzle-nexus/20260305070805_quick_ted_forrester/snapshot.json +461 -0
- package/migrations/drizzle-tasks/20260308024513_oval_king_bedlam/migration.sql +32 -0
- package/migrations/drizzle-tasks/20260308024513_oval_king_bedlam/snapshot.json +3727 -0
- package/package.json +22 -5
- package/packages/ct-skills/skills/ct-cleo/SKILL.md +344 -81
- package/packages/ct-skills/skills/ct-grade/SKILL.md +20 -4
- package/packages/ct-skills/skills/ct-grade/agents/analysis-reporter.md +203 -0
- package/packages/ct-skills/skills/ct-grade/agents/blind-comparator.md +157 -0
- package/packages/ct-skills/skills/ct-grade/agents/scenario-runner.md +134 -0
- package/packages/ct-skills/skills/ct-grade/eval-viewer/generate_grade_review.py +1138 -0
- package/packages/ct-skills/skills/ct-grade/eval-viewer/generate_grade_viewer.py +544 -0
- package/packages/ct-skills/skills/ct-grade/eval-viewer/generate_review.py +283 -0
- package/packages/ct-skills/skills/ct-grade/eval-viewer/grade-review.html +1574 -0
- package/packages/ct-skills/skills/ct-grade/eval-viewer/viewer.html +219 -0
- package/packages/ct-skills/skills/ct-grade/evals/evals.json +94 -0
- package/packages/ct-skills/skills/ct-grade/references/ab-test-methodology.md +150 -0
- package/packages/ct-skills/skills/ct-grade/references/domains.md +137 -0
- package/packages/ct-skills/skills/ct-grade/references/grade-spec.md +236 -0
- package/packages/ct-skills/skills/ct-grade/references/scenario-playbook.md +234 -0
- package/packages/ct-skills/skills/ct-grade/references/token-tracking.md +120 -0
- package/packages/ct-skills/skills/ct-grade/scripts/audit_analyzer.py +279 -0
- package/packages/ct-skills/skills/ct-grade/scripts/generate_report.py +283 -0
- package/packages/ct-skills/skills/ct-grade/scripts/run_ab_test.py +504 -0
- package/packages/ct-skills/skills/ct-grade/scripts/run_all.py +287 -0
- package/packages/ct-skills/skills/ct-grade/scripts/setup_run.py +183 -0
- package/packages/ct-skills/skills/ct-grade/scripts/token_tracker.py +630 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/SKILL.md +237 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/agents/analysis-reporter.md +203 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/agents/blind-comparator.md +157 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/agents/scenario-runner.md +179 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/evals/evals.json +74 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/build_op_stats.py +174 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/eval-analysis.json +41 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/eval-report.md +34 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/generate_grade_review.py +1023 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/generate_grade_viewer.py +548 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/grade-review-eval.html +613 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/grade-review.html +1532 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/viewer.html +620 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/manifest-entry.json +31 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/references/ab-testing.md +233 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/references/domains-ssot.md +156 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/references/grade-spec-v2.md +167 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/references/playbook-v2.md +393 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/references/token-tracking.md +202 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/scripts/generate_report.py +419 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/scripts/run_ab_test.py +493 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/scripts/run_scenario.py +396 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/scripts/setup_run.py +207 -0
- package/packages/ct-skills/skills/ct-grade-v2-1/scripts/token_tracker.py +175 -0
- package/packages/ct-skills/skills/ct-orchestrator/SKILL.md +1 -29
- package/packages/ct-skills/skills/ct-orchestrator/manifest-entry.json +19 -0
- package/packages/ct-skills/skills/ct-skill-creator/.cleo/.context-state.json +13 -0
- package/packages/ct-skills/skills/ct-skill-creator/.cleo/tasks.db +0 -0
- package/packages/ct-skills/skills/ct-skill-creator/SKILL.md +0 -12
- package/packages/ct-skills/skills/ct-skill-creator/agents/analyzer.md +276 -0
- package/packages/ct-skills/skills/ct-skill-creator/agents/comparator.md +204 -0
- package/packages/ct-skills/skills/ct-skill-creator/agents/grader.md +225 -0
- package/packages/ct-skills/skills/ct-skill-creator/assets/eval_review.html +146 -0
- package/packages/ct-skills/skills/ct-skill-creator/eval-viewer/generate_review.py +471 -0
- package/packages/ct-skills/skills/ct-skill-creator/eval-viewer/viewer.html +1325 -0
- package/packages/ct-skills/skills/ct-skill-creator/manifest-entry.json +17 -0
- package/packages/ct-skills/skills/ct-skill-creator/references/dynamic-context.md +228 -0
- package/packages/ct-skills/skills/ct-skill-creator/references/frontmatter.md +83 -0
- package/packages/ct-skills/skills/ct-skill-creator/references/invocation-control.md +165 -0
- package/packages/ct-skills/skills/ct-skill-creator/references/provider-deployment.md +175 -0
- package/packages/ct-skills/skills/ct-skill-creator/references/schemas.md +430 -0
- package/packages/ct-skills/skills/ct-skill-creator/scripts/__init__.py +1 -0
- package/packages/ct-skills/skills/ct-skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/packages/ct-skills/skills/ct-skill-creator/scripts/generate_report.py +326 -0
- package/packages/ct-skills/skills/ct-skill-creator/scripts/improve_description.py +247 -0
- package/packages/ct-skills/skills/ct-skill-creator/scripts/run_eval.py +310 -0
- package/packages/ct-skills/skills/ct-skill-creator/scripts/run_loop.py +328 -0
- package/packages/ct-skills/skills/ct-skill-creator/scripts/utils.py +47 -0
- package/packages/ct-skills/skills/ct-skill-validator/SKILL.md +178 -0
- package/packages/ct-skills/skills/ct-skill-validator/agents/ecosystem-checker.md +151 -0
- package/packages/ct-skills/skills/ct-skill-validator/assets/valid-skill-example.md +13 -0
- package/packages/ct-skills/skills/ct-skill-validator/evals/eval_set.json +14 -0
- package/packages/ct-skills/skills/ct-skill-validator/evals/evals.json +52 -0
- package/packages/ct-skills/skills/ct-skill-validator/manifest-entry.json +20 -0
- package/packages/ct-skills/skills/ct-skill-validator/references/cleo-ecosystem-rules.md +163 -0
- package/packages/ct-skills/skills/ct-skill-validator/references/validation-rules.md +168 -0
- package/packages/ct-skills/skills/ct-skill-validator/scripts/__init__.py +0 -0
- package/packages/ct-skills/skills/ct-skill-validator/scripts/audit_body.py +242 -0
- package/packages/ct-skills/skills/ct-skill-validator/scripts/check_ecosystem.py +169 -0
- package/packages/ct-skills/skills/ct-skill-validator/scripts/check_manifest.py +172 -0
- package/packages/ct-skills/skills/ct-skill-validator/scripts/generate_validation_report.py +442 -0
- package/packages/ct-skills/skills/ct-skill-validator/scripts/validate.py +422 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260224040019_baseline/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260224040019_baseline/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260224040238_add-audit-log/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260224040238_add-audit-log/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260224144602_closed_grim_reaper/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260224144602_closed_grim_reaper/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260225024442_sync-lifecycle-enums-and-arch-decisions/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260225024442_sync-lifecycle-enums-and-arch-decisions/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227014821_adr-system-and-status-registry/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227014821_adr-system-and-status-registry/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227021231_add-cancelled-pipeline-status/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227021231_add-cancelled-pipeline-status/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227022417_adr-cognitive-search-fields/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227022417_adr-cognitive-search-fields/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227172236_freezing_grey_gargoyle/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227172236_freezing_grey_gargoyle/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227183444_fix-orphaned-parent-ids/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227183444_fix-orphaned-parent-ids/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227183521_parent-id-on-delete-set-null/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227183521_parent-id-on-delete-set-null/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227200430_numerous_mysterio/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227200430_numerous_mysterio/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227235745_add-audit-log-dispatch-columns/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260227235745_add-audit-log-dispatch-columns/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260301053344_careless_changeling/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260301053344_careless_changeling/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260301175940_futuristic_eternity/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260301175940_futuristic_eternity/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260301180528_update-task-relations-check-constraint/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260301180528_update-task-relations-check-constraint/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260302163443_free_silk_fever/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260302163443_free_silk_fever/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260302163457_robust_johnny_storm/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260302163457_robust_johnny_storm/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260302163511_late_sphinx/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260302163511_late_sphinx/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260305011924_cheerful_mongu/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260305011924_cheerful_mongu/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260305203927_demonic_storm/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260305203927_demonic_storm/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260306001243_spooky_rage/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260306001243_spooky_rage/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260306193138_young_morbius/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260306193138_young_morbius/snapshot.json +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260306194959_sticky_captain_flint/migration.sql +0 -0
- /package/{drizzle → migrations/drizzle-tasks}/20260306194959_sticky_captain_flint/snapshot.json +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cleocode/cleo",
|
|
3
|
-
"version": "2026.3.
|
|
3
|
+
"version": "2026.3.23",
|
|
4
4
|
"description": "CLEO V2 - TypeScript task management CLI for AI coding agents",
|
|
5
5
|
"mcpName": "io.github.kryptobaseddev/cleo-mcp-server",
|
|
6
6
|
"type": "module",
|
|
@@ -25,9 +25,15 @@
|
|
|
25
25
|
"dev:setup": "bash dev/setup-ts-dev.sh",
|
|
26
26
|
"dev:watch": "node build.mjs --watch",
|
|
27
27
|
"test": "LOG_LEVEL=silent NODE_NO_WARNINGS=1 vitest run",
|
|
28
|
+
"test:unit": "LOG_LEVEL=silent NODE_NO_WARNINGS=1 vitest run --project unit",
|
|
29
|
+
"test:integration": "LOG_LEVEL=silent NODE_NO_WARNINGS=1 vitest run --project integration",
|
|
30
|
+
"test:e2e": "LOG_LEVEL=silent NODE_NO_WARNINGS=1 vitest run --project e2e",
|
|
28
31
|
"test:watch": "LOG_LEVEL=silent NODE_NO_WARNINGS=1 vitest",
|
|
29
32
|
"test:coverage": "LOG_LEVEL=silent NODE_NO_WARNINGS=1 vitest run --coverage",
|
|
30
|
-
"lint": "
|
|
33
|
+
"lint": "biome check .",
|
|
34
|
+
"lint:fix": "biome check --write .",
|
|
35
|
+
"lint:types": "tsc --noEmit",
|
|
36
|
+
"format": "biome format --write .",
|
|
31
37
|
"prepare": "npm run build",
|
|
32
38
|
"prepack": "npm run build",
|
|
33
39
|
"postinstall": "node bin/postinstall.js",
|
|
@@ -35,7 +41,14 @@
|
|
|
35
41
|
"adr:validate": "tsx dev/validate-adrs.ts",
|
|
36
42
|
"adr:manifest": "tsx dev/generate-adr-manifest.ts",
|
|
37
43
|
"features:generate": "tsx dev/generate-features.ts",
|
|
38
|
-
"version:sync": "tsx dev/version-sync.ts"
|
|
44
|
+
"version:sync": "tsx dev/version-sync.ts",
|
|
45
|
+
"db:generate": "drizzle-kit generate --config drizzle-tasks.config.ts",
|
|
46
|
+
"db:generate:brain": "drizzle-kit generate --config drizzle-brain.config.ts",
|
|
47
|
+
"db:generate:nexus": "drizzle-kit generate --config drizzle-nexus.config.ts",
|
|
48
|
+
"db:generate:custom": "drizzle-kit generate --custom --config drizzle-tasks.config.ts",
|
|
49
|
+
"db:studio": "drizzle-kit studio --config drizzle-tasks.config.ts",
|
|
50
|
+
"db:studio:brain": "drizzle-kit studio --config drizzle-brain.config.ts",
|
|
51
|
+
"db:studio:nexus": "drizzle-kit studio --config drizzle-nexus.config.ts"
|
|
39
52
|
},
|
|
40
53
|
"engines": {
|
|
41
54
|
"node": ">=24.13.1"
|
|
@@ -54,8 +67,10 @@
|
|
|
54
67
|
"license": "MIT",
|
|
55
68
|
"files": [
|
|
56
69
|
"dist",
|
|
57
|
-
"
|
|
58
|
-
"drizzle-
|
|
70
|
+
"migrations",
|
|
71
|
+
"drizzle-tasks.config.ts",
|
|
72
|
+
"drizzle-brain.config.ts",
|
|
73
|
+
"drizzle-nexus.config.ts",
|
|
59
74
|
"packages/ct-skills",
|
|
60
75
|
"schemas",
|
|
61
76
|
"templates",
|
|
@@ -73,6 +88,7 @@
|
|
|
73
88
|
"commander": "^12.1.0",
|
|
74
89
|
"drizzle-orm": "1.0.0-beta.15-859cf75",
|
|
75
90
|
"env-paths": "^4.0.0",
|
|
91
|
+
"js-tiktoken": "^1.0.21",
|
|
76
92
|
"pino": "^10.3.1",
|
|
77
93
|
"pino-roll": "^4.0.0",
|
|
78
94
|
"proper-lockfile": "^4.1.2",
|
|
@@ -86,6 +102,7 @@
|
|
|
86
102
|
"registry": "https://registry.npmjs.org/"
|
|
87
103
|
},
|
|
88
104
|
"devDependencies": {
|
|
105
|
+
"@biomejs/biome": "^2.4.6",
|
|
89
106
|
"@types/node": "^22.19.11",
|
|
90
107
|
"@types/proper-lockfile": "^4.1.4",
|
|
91
108
|
"@types/write-file-atomic": "^4.0.3",
|
|
@@ -1,68 +1,307 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ct-cleo
|
|
3
|
-
description: CLEO task management protocol - session, task, and workflow guidance
|
|
4
|
-
version: 2.0.0
|
|
5
|
-
category: core
|
|
6
|
-
tier: 0
|
|
7
|
-
protocol: null
|
|
8
|
-
tags: [cleo, protocol, mcp, session, task-management]
|
|
9
|
-
triggers: [cleo, session, task, start, mcp]
|
|
10
|
-
compatibility: [claude-code, gemini-cli, codex-cli]
|
|
11
|
-
dependencies: []
|
|
12
|
-
sharedResources: [task-system-integration]
|
|
13
|
-
license: MIT
|
|
3
|
+
description: CLEO task management protocol - session, task, and workflow guidance. Use when managing tasks, sessions, or multi-agent workflows with the CLEO MCP protocol.
|
|
14
4
|
---
|
|
15
5
|
|
|
16
6
|
# CLEO Protocol Guide
|
|
17
7
|
|
|
18
8
|
CLEO is the task management protocol for AI coding agents. It provides structured task tracking, session management, and multi-agent coordination with anti-hallucination validation.
|
|
19
9
|
|
|
10
|
+
**Operation set**: 164 operations (97 query + 67 mutate) across 10 canonical domains.
|
|
11
|
+
|
|
20
12
|
## MCP-First Workflow
|
|
21
13
|
|
|
22
14
|
MCP is the **primary** entry point. Use `query` for reads and `mutate` for writes.
|
|
23
15
|
|
|
24
|
-
###
|
|
16
|
+
### Tier-0 Read Operations (`query`) — Always Available
|
|
25
17
|
|
|
26
18
|
| Domain | Operation | Description |
|
|
27
19
|
|--------|-----------|-------------|
|
|
28
20
|
| `tasks` | `show` | Get task details (`params: { taskId }`) |
|
|
29
21
|
| `tasks` | `find` | Search tasks (`params: { query }` or `{ id }`) |
|
|
30
|
-
| `tasks` | `
|
|
31
|
-
| `
|
|
32
|
-
| `
|
|
22
|
+
| `tasks` | `next` | Auto-select highest-priority next task |
|
|
23
|
+
| `tasks` | `plan` | Composite planning view: upcoming tasks, blockers, dependencies |
|
|
24
|
+
| `tasks` | `current` | Show currently active (started) task |
|
|
25
|
+
| `session` | `status` | Current session state — **mandatory first call** |
|
|
26
|
+
| `session` | `handoff.show` | Resume prior context from last session |
|
|
27
|
+
| `session` | `briefing.show` | Composite cold-start briefing (status + handoff combined) |
|
|
28
|
+
| `memory` | `find` | Search brain for past observations, decisions, patterns (`params: { query }`) |
|
|
29
|
+
| `admin` | `version` | CLEO version number |
|
|
30
|
+
| `admin` | `health` | Installation health check |
|
|
31
|
+
| `admin` | `dash` | Project dashboard — mandatory efficiency sequence step 2 |
|
|
32
|
+
| `admin` | `help` | Discover available operations; use `{tier:2}` to reveal advanced ops |
|
|
33
|
+
| `tools` | `skill.list` | List all installed agent skills |
|
|
34
|
+
| `tools` | `provider.list` | List all known LLM/agent providers |
|
|
35
|
+
| `tools` | `provider.detect` | Detect currently active provider |
|
|
36
|
+
|
|
37
|
+
### Tier-1 Read Operations (`query`) — After Session Init
|
|
38
|
+
|
|
39
|
+
| Domain | Operation | Description |
|
|
40
|
+
|--------|-----------|-------------|
|
|
41
|
+
| `tasks` | `list` | List direct children (`params: { parentId }`) — **requires parentId filter; prefer tasks.find for discovery** |
|
|
42
|
+
| `tasks` | `tree` | Full subtask hierarchy (`params: { taskId }`) |
|
|
43
|
+
| `tasks` | `analyze` | Leverage-sorted task discovery |
|
|
44
|
+
| `tasks` | `blockers` | Tasks blocking a specific task (`params: { taskId }`) |
|
|
45
|
+
| `tasks` | `depends` | Full dependency graph for a task (`params: { taskId }`) |
|
|
46
|
+
| `session` | `list` | List sessions (prefer `session.find` for discovery) |
|
|
47
|
+
| `session` | `decision.log` | Recorded decisions for the current session |
|
|
48
|
+
| `session` | `find` | Search sessions (`params: { query }`) |
|
|
49
|
+
| `session` | `show` | Full session record (`params: { sessionId }`) |
|
|
50
|
+
| `session` | `context.drift` | Inspect context drift during long sessions |
|
|
51
|
+
| `memory` | `timeline` | Context around an anchor entry (`params: { anchorId }`) |
|
|
52
|
+
| `memory` | `fetch` | Batch-fetch brain entries (`params: { ids: [...] }`) |
|
|
53
|
+
| `memory` | `decision.find` | Search stored decisions (`params: { query, taskId? }`) |
|
|
54
|
+
| `memory` | `pattern.find` | Search stored patterns (`params: { query, type? }`) |
|
|
55
|
+
| `memory` | `learning.find` | Search stored learnings (`params: { query, minConfidence? }`) |
|
|
33
56
|
| `orchestrate` | `analyze` | Dependency wave analysis (`params: { epicId }`) |
|
|
34
57
|
| `orchestrate` | `ready` | Tasks ready to spawn (`params: { epicId }`) |
|
|
35
58
|
| `orchestrate` | `next` | Next task suggestion (`params: { epicId }`) |
|
|
36
|
-
| `
|
|
37
|
-
| `research` | `show` | Research entry details (`params: { entryId }`) |
|
|
59
|
+
| `orchestrate` | `status` | Current orchestration state |
|
|
38
60
|
| `check` | `schema` | Validate task data schema integrity |
|
|
39
|
-
| `
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
61
|
+
| `check` | `protocol` | Protocol compliance for a task (`params: { taskId, protocolType? }`) |
|
|
62
|
+
| `check` | `task` | Validate task fields (`params: { taskId }`) |
|
|
63
|
+
| `check` | `compliance.summary` | Overall compliance summary |
|
|
64
|
+
| `check` | `test` | Test status or coverage (`params: { format: "status" | "coverage" }`) |
|
|
65
|
+
| `check` | `gate.status` | Lifecycle gate status |
|
|
43
66
|
| `pipeline` | `stage.status` | Pipeline stage for epic (`params: { epicId }`) |
|
|
44
|
-
| `pipeline` | `stage.validate` | Validate gate before advancing
|
|
67
|
+
| `pipeline` | `stage.validate` | Validate gate before advancing |
|
|
68
|
+
| `pipeline` | `manifest.show` | Read manifest entry (`params: { id }`) |
|
|
69
|
+
| `pipeline` | `manifest.list` | List manifest entries (`params: { filter?: "pending" }`) |
|
|
70
|
+
| `pipeline` | `manifest.find` | Search manifest entries (`params: { query }`) |
|
|
71
|
+
| `nexus` | `status` | Check if nexus is initialized |
|
|
72
|
+
| `nexus` | `list` | List registered projects |
|
|
73
|
+
| `admin` | `config.show` | Inspect current configuration |
|
|
74
|
+
| `admin` | `adr.find` | Search architecture decision records |
|
|
75
|
+
| `tools` | `skill.show` | Skill details (`params: { skillId }`) |
|
|
45
76
|
| `sticky` | `list` | List sticky notes (`params: { status?, tag? }`) |
|
|
46
77
|
| `sticky` | `show` | Show sticky details (`params: { stickyId }`) |
|
|
47
78
|
|
|
48
|
-
###
|
|
79
|
+
### Tier-0 Write Operations (`mutate`) — Always Available
|
|
49
80
|
|
|
50
81
|
| Domain | Operation | Description |
|
|
51
82
|
|--------|-----------|-------------|
|
|
52
|
-
| `tasks` | `add` | Create task (`params: { title, description
|
|
83
|
+
| `tasks` | `add` | Create task (`params: { title, description, parentId?, status? }`) |
|
|
53
84
|
| `tasks` | `update` | Update task (`params: { taskId, title?, status?, notes? }`) |
|
|
54
|
-
| `tasks` | `complete` |
|
|
55
|
-
| `session` | `start` | Start session (`params: { scope, name, autoStart? }`) |
|
|
56
|
-
| `session` | `end` | End session (`params: { note? }`) |
|
|
57
|
-
| `session` | `resume` | Resume session (`params: { sessionId }`) |
|
|
85
|
+
| `tasks` | `complete` | Mark task done (`params: { taskId }`) |
|
|
58
86
|
| `tasks` | `start` | Start working on a task (`params: { taskId }`) |
|
|
59
|
-
| `
|
|
60
|
-
| `
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
87
|
+
| `tasks` | `stop` | Stop working on current task |
|
|
88
|
+
| `session` | `start` | Start session (`params: { scope }`) — scope is **required** |
|
|
89
|
+
| `session` | `end` | End session (`params: { note? }`) |
|
|
90
|
+
| `memory` | `observe` | Save observation to brain (`params: { text, title? }`) |
|
|
91
|
+
|
|
92
|
+
### Tier-1 Write Operations (`mutate`) — After Session Init
|
|
93
|
+
|
|
94
|
+
| Domain | Operation | Description |
|
|
95
|
+
|--------|-----------|-------------|
|
|
96
|
+
| `tasks` | `cancel` | Cancel task (`params: { taskId }`) |
|
|
97
|
+
| `tasks` | `archive` | Archive completed task (`params: { taskId }`) |
|
|
98
|
+
| `tasks` | `restore` | Restore from done/archive (`params: { taskId, from: "done" \| "archive" }`) |
|
|
99
|
+
| `tasks` | `delete` | Hard delete — irreversible (`params: { taskId }`) |
|
|
100
|
+
| `tasks` | `reparent` | Move to different parent (`params: { taskId, newParentId }`) |
|
|
101
|
+
| `tasks` | `reorder` | Reorder tasks within their parent (`params: { taskId, position }`) |
|
|
102
|
+
| `session` | `resume` | Resume a prior session (`params: { sessionId }`) |
|
|
103
|
+
| `session` | `suspend` | Pause session without ending it |
|
|
104
|
+
| `session` | `record.decision` | Record a session decision (`params: { text, rationale }`) |
|
|
105
|
+
| `session` | `record.assumption` | Record a session assumption (`params: { text }`) |
|
|
106
|
+
| `admin` | `context.inject` | Inject protocol content into context (`params: { protocolType }`) — **moved from session domain** |
|
|
107
|
+
| `memory` | `link` | Link memory entry to task (`params: { memoryId, taskId }`) |
|
|
108
|
+
| `memory` | `decision.store` | Store structured decision (`params: { decision, rationale, taskId, alternatives? }`) |
|
|
109
|
+
| `memory` | `pattern.store` | Store recurring pattern (`params: { name, type, impact, success, antiPattern? }`) |
|
|
110
|
+
| `memory` | `learning.store` | Store a learning (`params: { text, confidence, taskId? }`) |
|
|
111
|
+
| `orchestrate` | `start` | Start orchestrating an epic (`params: { epicId }`) |
|
|
112
|
+
| `orchestrate` | `spawn` | Spawn prep for a task (`params: { taskId, skillIds? }`) |
|
|
113
|
+
| `orchestrate` | `spawn.execute` | Execute spawn via adapter registry (`params: { taskId }`) |
|
|
114
|
+
| `orchestrate` | `handoff` | Hand off context to subagent (`params: { taskId, context }`) |
|
|
115
|
+
| `orchestrate` | `validate` | Pre-spawn gate check (`params: { taskId }`) |
|
|
116
|
+
| `orchestrate` | `parallel` | Run parallel agent wave (`params: { action: "start" \| "end", waveId? }`) |
|
|
117
|
+
| `check` | `test.run` | Run tests |
|
|
118
|
+
| `check` | `gate.set` | Set or reset a lifecycle gate |
|
|
119
|
+
| `pipeline` | `stage.record` | Record pipeline stage progress |
|
|
120
|
+
| `pipeline` | `stage.gate.pass` | Pass a pipeline gate (`params: { stageId, gateId }`) |
|
|
121
|
+
| `pipeline` | `stage.gate.fail` | Fail a gate with reason (`params: { stageId, gateId, reason }`) |
|
|
122
|
+
| `pipeline` | `manifest.append` | Append manifest entry (`params: { entry }`) — **MANDATORY per BASE protocol** |
|
|
123
|
+
| `pipeline` | `phase.set` | Set pipeline phase (`params: { phaseId, action: "start" \| "complete" }`) |
|
|
124
|
+
| `pipeline` | `release.ship` | Ship a release (`params: { step? }`) |
|
|
125
|
+
| `admin` | `config.set` | Update configuration (`params: { key, value }`) |
|
|
126
|
+
| `tools` | `skill.install` | Install a skill (`params: { skillId }`) |
|
|
127
|
+
| `tools` | `skill.uninstall` | Uninstall a skill (`params: { skillId }`) |
|
|
128
|
+
| `tools` | `skill.refresh` | Bulk update all installed skills |
|
|
63
129
|
| `sticky` | `add` | Create sticky note (`params: { content, tags?, color?, priority? }`) |
|
|
64
130
|
| `sticky` | `convert` | Convert to task/memory (`params: { stickyId, targetType }`) |
|
|
65
131
|
| `sticky` | `archive` | Archive sticky (`params: { stickyId }`) |
|
|
132
|
+
| `sticky` | `purge` | Permanently delete sticky notes (`params: { stickyId }`) |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Canonical Decision Tree
|
|
137
|
+
|
|
138
|
+
Every agent MUST use this tree to select the minimum-cost operation path.
|
|
139
|
+
|
|
140
|
+
### Entry Point: Session Start (MANDATORY)
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
Agent starts work
|
|
144
|
+
│
|
|
145
|
+
├── STEP 1: query session.status
|
|
146
|
+
│ ├── Active session exists
|
|
147
|
+
│ │ └── query session.handoff.show → resume prior context, then STEP 2
|
|
148
|
+
│ └── No active session
|
|
149
|
+
│ └── mutate session.start {scope: "task:TXXX" | "epic:TXXX"}
|
|
150
|
+
│
|
|
151
|
+
├── STEP 2: query admin.dash → project overview, active epic, blockers
|
|
152
|
+
│
|
|
153
|
+
├── STEP 3: query tasks.current → is a task already in progress?
|
|
154
|
+
│ ├── Yes → continue that task (skip STEP 4)
|
|
155
|
+
│ └── No → STEP 4
|
|
156
|
+
│
|
|
157
|
+
└── STEP 4: query tasks.next → what to work on next
|
|
158
|
+
└── query tasks.show {taskId} → full task requirements
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Anti-pattern blocked**: Never skip `session.status`. Resuming without `handoff.show` loses prior context and causes duplicate work.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
### Goal: Discover Work
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
I need to find what to work on
|
|
169
|
+
│
|
|
170
|
+
├── What should I do next (auto-selected)?
|
|
171
|
+
│ └── query tasks.next [tier 0]
|
|
172
|
+
│ └── query tasks.show {taskId} [tier 0] → full details
|
|
173
|
+
│
|
|
174
|
+
├── I know keywords — search for a specific task
|
|
175
|
+
│ └── query tasks.find {query: "..."} [tier 0]
|
|
176
|
+
│ ├── Found one match → query tasks.show {taskId}
|
|
177
|
+
│ └── Need to browse children of a known parent
|
|
178
|
+
│ └── query tasks.list {parentId: "TXXX"} [tier 1] ← ONLY with parentId filter
|
|
179
|
+
│ ANTI-PATTERN: tasks.list with no parentId = full dump, never do this
|
|
180
|
+
│
|
|
181
|
+
├── I need a prioritized planning view (upcoming tasks, blockers, dependencies)
|
|
182
|
+
│ └── query tasks.plan [tier 0]
|
|
183
|
+
│
|
|
184
|
+
├── I need the full task hierarchy under a parent
|
|
185
|
+
│ └── (discover via tasks.find first, then)
|
|
186
|
+
│ └── query tasks.tree {taskId} [tier 1] → subtask hierarchy
|
|
187
|
+
│
|
|
188
|
+
├── I need to see what's blocking a task
|
|
189
|
+
│ └── query tasks.blockers {taskId} [tier 1]
|
|
190
|
+
│
|
|
191
|
+
└── I need leverage-sorted discovery (highest-impact tasks first)
|
|
192
|
+
└── query tasks.analyze [tier 1]
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### Goal: Memory Operations
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
I need to save or recall information across sessions
|
|
201
|
+
│
|
|
202
|
+
├── Save an observation right now (free-form)
|
|
203
|
+
│ └── mutate memory.observe {text, title?} [tier 0]
|
|
204
|
+
│
|
|
205
|
+
├── Search for something I or a prior agent observed
|
|
206
|
+
│ └── query memory.find {query: "..."} [tier 0] ← ALWAYS start here (cheap)
|
|
207
|
+
│ └── Found interesting IDs → query memory.timeline {anchorId} [tier 1]
|
|
208
|
+
│ └── Need full content → query memory.fetch {ids: [...]} [tier 1]
|
|
209
|
+
│ 3-LAYER PATTERN: find → timeline → fetch (never skip to fetch directly)
|
|
210
|
+
│
|
|
211
|
+
├── Save a structured decision (with rationale, alternatives, taskId)
|
|
212
|
+
│ └── mutate memory.decision.store {decision, rationale, taskId, alternatives?} [tier 1]
|
|
213
|
+
│ └── Recall: query memory.decision.find {query, taskId?} [tier 1]
|
|
214
|
+
│
|
|
215
|
+
└── Associate a memory entry with a task (research linking protocol)
|
|
216
|
+
└── mutate memory.link {memoryId, taskId} [tier 1]
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Anti-pattern blocked**: Never call `memory.fetch` without first calling `memory.find`. Fetching without filtering returns all entries (expensive).
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
### Goal: Multi-Agent Coordination
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
I need to coordinate agent work (orchestrator role)
|
|
227
|
+
│
|
|
228
|
+
├── I am the orchestrator — start coordinating an epic
|
|
229
|
+
│ └── mutate orchestrate.start {epicId} [tier 1]
|
|
230
|
+
│ └── query orchestrate.status [tier 1] → current orchestration state
|
|
231
|
+
│
|
|
232
|
+
├── Spawn a subagent for a task
|
|
233
|
+
│ └── (1) mutate orchestrate.validate {taskId} [tier 1] → pre-spawn gate check
|
|
234
|
+
│ (2) mutate orchestrate.spawn {taskId, skillIds?} [tier 1] → spawn prep
|
|
235
|
+
│
|
|
236
|
+
└── I am a subagent — complete my work and report
|
|
237
|
+
└── mutate pipeline.manifest.append {entry} [tier 1] ← MANDATORY per BASE protocol
|
|
238
|
+
mutate tasks.complete {taskId} [tier 0]
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Subagent BASE protocol**: Every subagent MUST append one entry to MANIFEST.jsonl via `pipeline.manifest.append` BEFORE calling `tasks.complete`. Omitting this is a protocol violation (exit code 62).
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### Goal: Track Session Context
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
I need to manage session lifecycle or read session state
|
|
249
|
+
│
|
|
250
|
+
├── Check whether a session is active
|
|
251
|
+
│ └── query session.status [tier 0] ← FIRST, always
|
|
252
|
+
│
|
|
253
|
+
├── Resume prior context after a restart
|
|
254
|
+
│ └── query session.handoff.show [tier 0]
|
|
255
|
+
│
|
|
256
|
+
├── Get a composite cold-start briefing (combines status + handoff)
|
|
257
|
+
│ └── query session.briefing.show [tier 0]
|
|
258
|
+
│
|
|
259
|
+
├── Start a new session
|
|
260
|
+
│ └── mutate session.start {scope: "task:TXXX" | "epic:TXXX"} [tier 0]
|
|
261
|
+
│ RULE: scope is required — no unscoped sessions
|
|
262
|
+
│
|
|
263
|
+
├── End the current session (triggers debrief + handoff generation)
|
|
264
|
+
│ └── mutate session.end [tier 0]
|
|
265
|
+
│
|
|
266
|
+
└── Browse past sessions
|
|
267
|
+
└── query session.find {query: "..."} [tier 1] ← NOT session.list unfiltered
|
|
268
|
+
└── Full session record: query session.show {sessionId} [tier 1]
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### Goal: Discover Available Skills
|
|
274
|
+
|
|
275
|
+
```
|
|
276
|
+
I need to know what skills or providers are available
|
|
277
|
+
│
|
|
278
|
+
├── List all installed skills (cold-start safe)
|
|
279
|
+
│ └── query tools.skill.list [tier 0]
|
|
280
|
+
│ └── Detail on a specific skill: query tools.skill.show {skillId} [tier 1]
|
|
281
|
+
│
|
|
282
|
+
└── Detect active provider
|
|
283
|
+
└── query tools.provider.detect [tier 0]
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
### Goal: System Information
|
|
289
|
+
|
|
290
|
+
```
|
|
291
|
+
I need system or configuration info
|
|
292
|
+
│
|
|
293
|
+
├── What is the overall project state?
|
|
294
|
+
│ └── query admin.dash [tier 0] ← mandatory efficiency sequence step 2
|
|
295
|
+
│
|
|
296
|
+
├── What operations are available at this tier?
|
|
297
|
+
│ └── query admin.help [tier 0] → tier 0 + tier 1 ops
|
|
298
|
+
│ └── query admin.help {tier:2} → reveals tier-2 ops + escalation hints
|
|
299
|
+
│
|
|
300
|
+
└── Inspect configuration
|
|
301
|
+
└── query admin.config.show [tier 1]
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
---
|
|
66
305
|
|
|
67
306
|
## CLI Fallback
|
|
68
307
|
|
|
@@ -70,73 +309,87 @@ When MCP tools are unavailable, use `ct` (alias for `cleo`).
|
|
|
70
309
|
|
|
71
310
|
```bash
|
|
72
311
|
ct find "query" # Search (99% less context than list)
|
|
73
|
-
ct find --id
|
|
312
|
+
ct find --id T1234 # Search by ID
|
|
74
313
|
ct show T1234 # Full task details
|
|
75
314
|
ct add "Task title" # Create task
|
|
76
315
|
ct complete T1234 # Complete task
|
|
77
316
|
ct start T1234 # Start working on task
|
|
78
|
-
ct dash # Project overview
|
|
317
|
+
ct dash # Project overview (admin.dash equivalent)
|
|
79
318
|
|
|
80
319
|
ct sticky add "Quick note" # Create sticky note
|
|
81
320
|
ct sticky list # List active stickies
|
|
82
321
|
ct sticky show SN-001 # Show sticky details
|
|
83
322
|
```
|
|
84
323
|
|
|
324
|
+
---
|
|
325
|
+
|
|
85
326
|
## Task Discovery (Context Efficiency)
|
|
86
327
|
|
|
87
|
-
**MUST** use efficient commands
|
|
328
|
+
**MUST** use efficient commands — `find` for discovery, `show` for details:
|
|
88
329
|
|
|
89
330
|
- `list` includes full notes arrays (huge context cost)
|
|
90
331
|
- `find` returns minimal fields only (99% less context)
|
|
91
332
|
- Use `show` only when you need full details for a specific task
|
|
92
333
|
|
|
93
|
-
### Work Selection Decision Tree
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
START
|
|
97
|
-
├─ Has active session? → `session status`
|
|
98
|
-
│ ├─ YES → Has active task? → `tasks current`
|
|
99
|
-
│ │ ├─ YES → Continue working on it
|
|
100
|
-
│ │ └─ NO → `tasks next` → pick suggestion → `tasks start {id}`
|
|
101
|
-
│ └─ NO → `session list` → resume or start new
|
|
102
|
-
│ └─ `session start --scope epic:{id} --auto-focus`
|
|
103
|
-
├─ Know what to work on?
|
|
104
|
-
│ ├─ YES → `tasks find "query"` → `tasks show {id}` → `tasks start {id}`
|
|
105
|
-
│ └─ NO → `admin dash` → identify priority → `tasks next`
|
|
106
|
-
└─ Epic-level work?
|
|
107
|
-
└─ `tasks tree {epicId}` → find actionable leaf → `tasks start {id}`
|
|
108
|
-
```
|
|
109
|
-
|
|
110
334
|
### Context Bloat Anti-Patterns
|
|
111
335
|
|
|
112
336
|
| Anti-Pattern | Token Cost | Efficient Alternative | Savings |
|
|
113
337
|
|-------------|-----------|----------------------|---------|
|
|
114
|
-
| `tasks
|
|
115
|
-
| `admin
|
|
116
|
-
| `tasks
|
|
117
|
-
|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
338
|
+
| `tasks.list` (no parentId filter) | 2000-5000 | `tasks.find {query: "..."}` | 80-90% |
|
|
339
|
+
| `admin.help {tier:2}` first call | 2000+ | `admin.help` (tier 0 default) | 60-75% |
|
|
340
|
+
| `tasks.show` for every task | 400 x N | `tasks.find` then `show` for 1-2 | 70-90% |
|
|
341
|
+
| `memory.fetch` without `memory.find` | large | `memory.find` → filter → `memory.fetch` | 80% |
|
|
342
|
+
| `session.list` unfiltered | 300 x N | `session.status` first, then `session.find` if needed | 90% |
|
|
343
|
+
| Reading full epic tree | 1000-3000 | `tasks.next` for suggestions | 80% |
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Anti-Pattern Reference
|
|
348
|
+
|
|
349
|
+
| Bad Pattern | Correct Pattern | Why |
|
|
350
|
+
|-------------|----------------|-----|
|
|
351
|
+
| `research.list` | `pipeline.manifest.list` | research domain is defunct |
|
|
352
|
+
| `research.show` | `pipeline.manifest.show` | research domain is defunct |
|
|
353
|
+
| `research.link` / `cleo research link` | `memory.link` (MCP) | research domain is defunct |
|
|
354
|
+
| `system.dash` | `admin.dash` | system domain is defunct |
|
|
355
|
+
| `system.context` | `admin.context` | system domain is defunct |
|
|
356
|
+
| `skills.list` | `tools.skill.list` | skills domain is defunct |
|
|
357
|
+
| `skills.show` | `tools.skill.show` | skills domain is defunct |
|
|
358
|
+
| `tasks.list` (no filter) | `tasks.find {query: "..."}` | list returns ALL tasks + notes |
|
|
359
|
+
| `tasks.reopen` | `tasks.restore {from: "done"}` | reopen is deprecated verb |
|
|
360
|
+
| `tasks.unarchive` | `tasks.restore {from: "archive"}` | unarchive is deprecated verb |
|
|
361
|
+
| `tasks.promote` | `tasks.reparent {newParentId: null}` | promote is deprecated verb |
|
|
362
|
+
| `memory.brain.search` | `memory.find` | old operation name (cutover T5241) |
|
|
363
|
+
| `memory.brain.observe` | `memory.observe` | old operation name (cutover T5241) |
|
|
364
|
+
| `session.context.inject` | `admin.context.inject` | operation moved domains (reads filesystem, is an admin/bootstrap op) |
|
|
365
|
+
| `memory.fetch` without `memory.find` | `memory.find` → filter → `memory.fetch` | fetch without filter returns everything |
|
|
366
|
+
| Completing task without manifest append | `pipeline.manifest.append` then `tasks.complete` | BASE protocol violation (exit 62) |
|
|
367
|
+
| Skipping `session.status` at start | Always check `session.status` first | loses prior context, causes duplicate work |
|
|
368
|
+
|
|
369
|
+
---
|
|
120
370
|
|
|
121
|
-
|
|
371
|
+
## Progressive Disclosure
|
|
122
372
|
|
|
123
373
|
Load only what you need. Escalate tiers when the task demands it:
|
|
124
374
|
|
|
125
|
-
**Stay at Tier 0** (default
|
|
375
|
+
**Stay at Tier 0** (default — 80% of work):
|
|
126
376
|
- Single task execution (implement, fix, test)
|
|
127
377
|
- Task discovery and status updates
|
|
128
378
|
- Session start/end
|
|
129
379
|
|
|
130
380
|
**Escalate to Tier 1** when:
|
|
131
|
-
- Managing
|
|
381
|
+
- Managing pipeline stages or manifest entries
|
|
132
382
|
- Running validation/compliance checks
|
|
133
|
-
- Working with memory
|
|
134
|
-
|
|
135
|
-
**Escalate to Tier 2** when:
|
|
383
|
+
- Working with memory (timeline, fetch, decisions, patterns)
|
|
136
384
|
- Orchestrating multi-agent workflows
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
-
|
|
385
|
+
|
|
386
|
+
**Escalate to Tier 2** when (via `admin.help {tier:2}` first):
|
|
387
|
+
- WarpChain pipeline operations (`pipeline.chain.*`)
|
|
388
|
+
- Behavioral grading (`check.grade`)
|
|
389
|
+
- Cross-project nexus deep queries (`nexus.resolve`, `nexus.graph`)
|
|
390
|
+
- Data export/import (`admin.export`, `admin.import`)
|
|
391
|
+
|
|
392
|
+
---
|
|
140
393
|
|
|
141
394
|
## Session Protocol
|
|
142
395
|
|
|
@@ -144,34 +397,34 @@ Sessions track work context across agent interactions.
|
|
|
144
397
|
|
|
145
398
|
### Quick Start
|
|
146
399
|
|
|
147
|
-
```
|
|
148
|
-
# 1. CHECK
|
|
149
|
-
ct session list
|
|
400
|
+
```bash
|
|
401
|
+
# 1. CHECK session state first (always)
|
|
150
402
|
ct session status
|
|
151
403
|
|
|
152
404
|
# 2. RESUME or START
|
|
153
405
|
ct session resume <id>
|
|
154
406
|
# OR (only if no suitable session):
|
|
155
|
-
ct session start --scope epic:T001
|
|
156
|
-
# ^^^^^^^^^^^^^^^^^ REQUIRED ^^^^^^^^^^^^^ REQUIRED
|
|
407
|
+
ct session start --scope epic:T001
|
|
157
408
|
|
|
158
409
|
# 3. WORK
|
|
159
410
|
ct current / ct next / ct complete T005 / ct start T006
|
|
160
411
|
|
|
161
412
|
# 4. END (ALWAYS when stopping)
|
|
162
413
|
ct complete <id>
|
|
163
|
-
ct session end
|
|
414
|
+
ct session end
|
|
164
415
|
```
|
|
165
416
|
|
|
166
417
|
### MCP Session Operations
|
|
167
418
|
|
|
168
|
-
```
|
|
169
|
-
mutate({ domain: "session", operation: "start",
|
|
170
|
-
params: { scope: "epic:T001", name: "Work", autoStart: true }})
|
|
419
|
+
```javascript
|
|
171
420
|
query({ domain: "session", operation: "status" })
|
|
421
|
+
query({ domain: "session", operation: "handoff.show" })
|
|
422
|
+
mutate({ domain: "session", operation: "start", params: { scope: "epic:T001" }})
|
|
172
423
|
mutate({ domain: "session", operation: "end", params: { note: "Progress" }})
|
|
173
424
|
```
|
|
174
425
|
|
|
426
|
+
---
|
|
427
|
+
|
|
175
428
|
## Error Handling
|
|
176
429
|
|
|
177
430
|
**CRITICAL: NEVER ignore exit codes. Failed commands = tasks NOT created/updated.**
|
|
@@ -179,21 +432,24 @@ mutate({ domain: "session", operation: "end", params: { note: "Progress" }})
|
|
|
179
432
|
After EVERY command:
|
|
180
433
|
1. Exit code `0` = success, `1-22` = error, `100+` = special (not error)
|
|
181
434
|
2. JSON `"success": false` = operation failed
|
|
182
|
-
3. Execute `error.fix`
|
|
435
|
+
3. Execute `error.fix` — copy-paste-ready fix command
|
|
183
436
|
|
|
184
437
|
| Exit | Code | Fix |
|
|
185
438
|
|:----:|------|-----|
|
|
186
|
-
| 4 | `E_NOT_FOUND` | Use `ct find`
|
|
439
|
+
| 4 | `E_NOT_FOUND` | Use `ct find` to verify |
|
|
187
440
|
| 6 | `E_VALIDATION_*` | Check field lengths, escape `$` as `\$` |
|
|
188
|
-
| 10 | `E_PARENT_NOT_FOUND` | Verify with `ct
|
|
441
|
+
| 10 | `E_PARENT_NOT_FOUND` | Verify with `ct find <parent-id>` |
|
|
189
442
|
| 11 | `E_DEPTH_EXCEEDED` | Max depth 3 (epic->task->subtask) |
|
|
190
443
|
| 12 | `E_SIBLING_LIMIT` | Max 7 siblings per parent |
|
|
444
|
+
| 62 | `MANIFEST_ENTRY_MISSING` | Subagent must call `pipeline.manifest.append` before `tasks.complete` |
|
|
445
|
+
|
|
446
|
+
---
|
|
191
447
|
|
|
192
448
|
## RCSD-IVTR Lifecycle (LOOM)
|
|
193
449
|
|
|
194
|
-
**LOOM** (Logical Order of Operations Methodology) is the systematic framework for how CLEO processes project threads through the RCASD-IVTR+C pipeline. See `docs/concepts/CLEO-VISION.md` for the complete LOOM framework
|
|
450
|
+
**LOOM** (Logical Order of Operations Methodology) is the systematic framework for how CLEO processes project threads through the RCASD-IVTR+C pipeline. See `docs/concepts/CLEO-VISION.md` for the complete LOOM framework.
|
|
195
451
|
|
|
196
|
-
**Lifecycle**: See
|
|
452
|
+
**Lifecycle**: See `references/loom-lifecycle.md` for gate enforcement and subagent architecture.
|
|
197
453
|
|
|
198
454
|
## Pipeline Awareness
|
|
199
455
|
|
|
@@ -212,12 +468,16 @@ Epics follow the RCASD-IVTR+C lifecycle managed through pipeline stages. Use `pi
|
|
|
212
468
|
| `release` | Version and publish |
|
|
213
469
|
| `contribution` | Multi-agent consensus tracking |
|
|
214
470
|
|
|
471
|
+
---
|
|
472
|
+
|
|
215
473
|
## Time Estimates Prohibited
|
|
216
474
|
|
|
217
475
|
- **MUST NOT** estimate hours, days, weeks, or temporal duration
|
|
218
476
|
- **MUST** use relative sizing: `small` / `medium` / `large`
|
|
219
477
|
- **SHOULD** describe scope, complexity, dependencies when asked
|
|
220
478
|
|
|
479
|
+
---
|
|
480
|
+
|
|
221
481
|
## References
|
|
222
482
|
|
|
223
483
|
For detailed guidance on specific topics, see:
|
|
@@ -225,3 +485,6 @@ For detailed guidance on specific topics, see:
|
|
|
225
485
|
- **Session Protocol**: `references/session-protocol.md`
|
|
226
486
|
- **LOOM Lifecycle**: `references/loom-lifecycle.md`
|
|
227
487
|
- **Anti-Patterns**: `references/anti-patterns.md`
|
|
488
|
+
- **Operation Constitution**: `docs/specs/CLEO-OPERATION-CONSTITUTION.md`
|
|
489
|
+
- **Verb Standards**: `docs/specs/VERB-STANDARDS.md`
|
|
490
|
+
- **Decision Tree source**: `.cleo/agent-outputs/T5610-decision-tree.md`
|
|
@@ -84,11 +84,16 @@ ct grade --list
|
|
|
84
84
|
|
|
85
85
|
```
|
|
86
86
|
# Grade a session
|
|
87
|
-
|
|
87
|
+
# Canonical registry surface (preferred)
|
|
88
|
+
query({ domain: "check", operation: "grade",
|
|
88
89
|
params: { sessionId: "abc-123" }})
|
|
89
90
|
|
|
90
91
|
# List past grades
|
|
91
|
-
query({ domain: "
|
|
92
|
+
query({ domain: "check", operation: "grade.list" })
|
|
93
|
+
|
|
94
|
+
# Compatibility aliases still work at runtime
|
|
95
|
+
query({ domain: "admin", operation: "grade",
|
|
96
|
+
params: { sessionId: "abc-123" }})
|
|
92
97
|
```
|
|
93
98
|
|
|
94
99
|
## Understanding the 5 Dimensions
|
|
@@ -210,5 +215,16 @@ Grade results are stored in `.cleo/metrics/GRADES.jsonl` as append-only JSONL. E
|
|
|
210
215
|
|
|
211
216
|
| Gateway | Domain | Operation | Description |
|
|
212
217
|
|---------|--------|-----------|-------------|
|
|
213
|
-
| `query` | `
|
|
214
|
-
| `query` | `
|
|
218
|
+
| `query` | `check` | `grade` | Canonical grade read (`params: { sessionId }`) |
|
|
219
|
+
| `query` | `check` | `grade.list` | Canonical grade history read |
|
|
220
|
+
| `query` | `admin` | `grade` | Compatibility alias for runtime handlers |
|
|
221
|
+
| `query` | `admin` | `grade.list` | Compatibility alias for runtime handlers |
|
|
222
|
+
| `query` | `admin` | `token` | Canonical token telemetry read (`action=summary|list|show`) |
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
## API Update Notes
|
|
226
|
+
|
|
227
|
+
- Prefer the canonical registry surface from `docs/specs/CLEO-API.md`: `check.grade`, `check.grade.list`, and `admin.token` with an `action` param.
|
|
228
|
+
- `admin.grade*` and split `admin.token.*` paths remain compatibility handlers and may still appear in existing automation.
|
|
229
|
+
- Browser clients should target `POST /api/query` and `POST /api/mutate`; LAFS metadata is carried in `X-Cleo-*` headers by default.
|
|
230
|
+
- Treat persisted token transport values `api` and `http` as equivalent during the compatibility window described in `docs/specs/CLEO-WEB-API.md`.
|