@cleocode/cleo 2026.3.20 → 2026.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/cli/index.js +39394 -38817
  2. package/dist/cli/index.js.map +4 -4
  3. package/dist/mcp/index.js +35841 -36702
  4. package/dist/mcp/index.js.map +4 -4
  5. package/drizzle-brain.config.ts +7 -0
  6. package/drizzle-nexus.config.ts +7 -0
  7. package/drizzle-tasks.config.ts +7 -0
  8. package/migrations/drizzle-brain/20260301230215_workable_spitfire/migration.sql +68 -0
  9. package/migrations/drizzle-brain/20260301230215_workable_spitfire/snapshot.json +651 -0
  10. package/migrations/drizzle-brain/20260302050325_unknown_justin_hammer/migration.sql +23 -0
  11. package/migrations/drizzle-brain/20260302050325_unknown_justin_hammer/snapshot.json +884 -0
  12. package/migrations/drizzle-brain/20260302061755_unusual_jamie_braddock/migration.sql +2 -0
  13. package/migrations/drizzle-brain/20260302061755_unusual_jamie_braddock/snapshot.json +908 -0
  14. package/migrations/drizzle-brain/20260302193548_luxuriant_glorian/migration.sql +20 -0
  15. package/migrations/drizzle-brain/20260302193548_luxuriant_glorian/snapshot.json +1078 -0
  16. package/migrations/drizzle-brain/20260304045002_white_thunderbolt_ross/migration.sql +16 -0
  17. package/migrations/drizzle-brain/20260304045002_white_thunderbolt_ross/snapshot.json +1233 -0
  18. package/migrations/drizzle-nexus/20260305070805_quick_ted_forrester/migration.sql +46 -0
  19. package/migrations/drizzle-nexus/20260305070805_quick_ted_forrester/snapshot.json +461 -0
  20. package/migrations/drizzle-tasks/20260308024513_oval_king_bedlam/migration.sql +32 -0
  21. package/migrations/drizzle-tasks/20260308024513_oval_king_bedlam/snapshot.json +3727 -0
  22. package/package.json +14 -4
  23. package/packages/ct-skills/skills/ct-cleo/SKILL.md +344 -81
  24. package/packages/ct-skills/skills/ct-grade/SKILL.md +20 -4
  25. package/packages/ct-skills/skills/ct-grade/agents/analysis-reporter.md +203 -0
  26. package/packages/ct-skills/skills/ct-grade/agents/blind-comparator.md +157 -0
  27. package/packages/ct-skills/skills/ct-grade/agents/scenario-runner.md +134 -0
  28. package/packages/ct-skills/skills/ct-grade/eval-viewer/generate_grade_review.py +1138 -0
  29. package/packages/ct-skills/skills/ct-grade/eval-viewer/generate_grade_viewer.py +544 -0
  30. package/packages/ct-skills/skills/ct-grade/eval-viewer/generate_review.py +283 -0
  31. package/packages/ct-skills/skills/ct-grade/eval-viewer/grade-review.html +1574 -0
  32. package/packages/ct-skills/skills/ct-grade/eval-viewer/viewer.html +219 -0
  33. package/packages/ct-skills/skills/ct-grade/evals/evals.json +94 -0
  34. package/packages/ct-skills/skills/ct-grade/references/ab-test-methodology.md +150 -0
  35. package/packages/ct-skills/skills/ct-grade/references/domains.md +137 -0
  36. package/packages/ct-skills/skills/ct-grade/references/grade-spec.md +236 -0
  37. package/packages/ct-skills/skills/ct-grade/references/scenario-playbook.md +234 -0
  38. package/packages/ct-skills/skills/ct-grade/references/token-tracking.md +120 -0
  39. package/packages/ct-skills/skills/ct-grade/scripts/audit_analyzer.py +279 -0
  40. package/packages/ct-skills/skills/ct-grade/scripts/generate_report.py +283 -0
  41. package/packages/ct-skills/skills/ct-grade/scripts/run_ab_test.py +504 -0
  42. package/packages/ct-skills/skills/ct-grade/scripts/run_all.py +287 -0
  43. package/packages/ct-skills/skills/ct-grade/scripts/setup_run.py +183 -0
  44. package/packages/ct-skills/skills/ct-grade/scripts/token_tracker.py +630 -0
  45. package/packages/ct-skills/skills/ct-grade-v2-1/SKILL.md +237 -0
  46. package/packages/ct-skills/skills/ct-grade-v2-1/agents/analysis-reporter.md +203 -0
  47. package/packages/ct-skills/skills/ct-grade-v2-1/agents/blind-comparator.md +157 -0
  48. package/packages/ct-skills/skills/ct-grade-v2-1/agents/scenario-runner.md +179 -0
  49. package/packages/ct-skills/skills/ct-grade-v2-1/evals/evals.json +74 -0
  50. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/build_op_stats.py +174 -0
  51. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/eval-analysis.json +41 -0
  52. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/eval-report.md +34 -0
  53. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/generate_grade_review.py +1023 -0
  54. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/generate_grade_viewer.py +548 -0
  55. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/grade-review-eval.html +613 -0
  56. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/grade-review.html +1532 -0
  57. package/packages/ct-skills/skills/ct-grade-v2-1/grade-viewer/viewer.html +620 -0
  58. package/packages/ct-skills/skills/ct-grade-v2-1/manifest-entry.json +31 -0
  59. package/packages/ct-skills/skills/ct-grade-v2-1/references/ab-testing.md +233 -0
  60. package/packages/ct-skills/skills/ct-grade-v2-1/references/domains-ssot.md +156 -0
  61. package/packages/ct-skills/skills/ct-grade-v2-1/references/grade-spec-v2.md +167 -0
  62. package/packages/ct-skills/skills/ct-grade-v2-1/references/playbook-v2.md +393 -0
  63. package/packages/ct-skills/skills/ct-grade-v2-1/references/token-tracking.md +202 -0
  64. package/packages/ct-skills/skills/ct-grade-v2-1/scripts/generate_report.py +419 -0
  65. package/packages/ct-skills/skills/ct-grade-v2-1/scripts/run_ab_test.py +493 -0
  66. package/packages/ct-skills/skills/ct-grade-v2-1/scripts/run_scenario.py +396 -0
  67. package/packages/ct-skills/skills/ct-grade-v2-1/scripts/setup_run.py +207 -0
  68. package/packages/ct-skills/skills/ct-grade-v2-1/scripts/token_tracker.py +175 -0
  69. package/packages/ct-skills/skills/ct-orchestrator/SKILL.md +1 -29
  70. package/packages/ct-skills/skills/ct-orchestrator/manifest-entry.json +19 -0
  71. package/packages/ct-skills/skills/ct-skill-creator/SKILL.md +0 -12
  72. package/packages/ct-skills/skills/ct-skill-creator/agents/analyzer.md +276 -0
  73. package/packages/ct-skills/skills/ct-skill-creator/agents/comparator.md +204 -0
  74. package/packages/ct-skills/skills/ct-skill-creator/agents/grader.md +225 -0
  75. package/packages/ct-skills/skills/ct-skill-creator/assets/eval_review.html +146 -0
  76. package/packages/ct-skills/skills/ct-skill-creator/eval-viewer/generate_review.py +471 -0
  77. package/packages/ct-skills/skills/ct-skill-creator/eval-viewer/viewer.html +1325 -0
  78. package/packages/ct-skills/skills/ct-skill-creator/manifest-entry.json +17 -0
  79. package/packages/ct-skills/skills/ct-skill-creator/references/dynamic-context.md +228 -0
  80. package/packages/ct-skills/skills/ct-skill-creator/references/frontmatter.md +83 -0
  81. package/packages/ct-skills/skills/ct-skill-creator/references/invocation-control.md +165 -0
  82. package/packages/ct-skills/skills/ct-skill-creator/references/provider-deployment.md +175 -0
  83. package/packages/ct-skills/skills/ct-skill-creator/references/schemas.md +430 -0
  84. package/packages/ct-skills/skills/ct-skill-creator/scripts/__init__.py +1 -0
  85. package/packages/ct-skills/skills/ct-skill-creator/scripts/aggregate_benchmark.py +401 -0
  86. package/packages/ct-skills/skills/ct-skill-creator/scripts/generate_report.py +326 -0
  87. package/packages/ct-skills/skills/ct-skill-creator/scripts/improve_description.py +247 -0
  88. package/packages/ct-skills/skills/ct-skill-creator/scripts/run_eval.py +310 -0
  89. package/packages/ct-skills/skills/ct-skill-creator/scripts/run_loop.py +328 -0
  90. package/packages/ct-skills/skills/ct-skill-creator/scripts/utils.py +47 -0
  91. package/packages/ct-skills/skills/ct-skill-validator/SKILL.md +178 -0
  92. package/packages/ct-skills/skills/ct-skill-validator/agents/ecosystem-checker.md +151 -0
  93. package/packages/ct-skills/skills/ct-skill-validator/assets/valid-skill-example.md +13 -0
  94. package/packages/ct-skills/skills/ct-skill-validator/evals/eval_set.json +14 -0
  95. package/packages/ct-skills/skills/ct-skill-validator/evals/evals.json +52 -0
  96. package/packages/ct-skills/skills/ct-skill-validator/manifest-entry.json +20 -0
  97. package/packages/ct-skills/skills/ct-skill-validator/references/cleo-ecosystem-rules.md +163 -0
  98. package/packages/ct-skills/skills/ct-skill-validator/references/validation-rules.md +168 -0
  99. package/packages/ct-skills/skills/ct-skill-validator/scripts/__init__.py +0 -0
  100. package/packages/ct-skills/skills/ct-skill-validator/scripts/audit_body.py +242 -0
  101. package/packages/ct-skills/skills/ct-skill-validator/scripts/check_ecosystem.py +169 -0
  102. package/packages/ct-skills/skills/ct-skill-validator/scripts/check_manifest.py +172 -0
  103. package/packages/ct-skills/skills/ct-skill-validator/scripts/generate_validation_report.py +442 -0
  104. package/packages/ct-skills/skills/ct-skill-validator/scripts/validate.py +422 -0
  105. /package/{drizzle → migrations/drizzle-tasks}/20260224040019_baseline/migration.sql +0 -0
  106. /package/{drizzle → migrations/drizzle-tasks}/20260224040019_baseline/snapshot.json +0 -0
  107. /package/{drizzle → migrations/drizzle-tasks}/20260224040238_add-audit-log/migration.sql +0 -0
  108. /package/{drizzle → migrations/drizzle-tasks}/20260224040238_add-audit-log/snapshot.json +0 -0
  109. /package/{drizzle → migrations/drizzle-tasks}/20260224144602_closed_grim_reaper/migration.sql +0 -0
  110. /package/{drizzle → migrations/drizzle-tasks}/20260224144602_closed_grim_reaper/snapshot.json +0 -0
  111. /package/{drizzle → migrations/drizzle-tasks}/20260225024442_sync-lifecycle-enums-and-arch-decisions/migration.sql +0 -0
  112. /package/{drizzle → migrations/drizzle-tasks}/20260225024442_sync-lifecycle-enums-and-arch-decisions/snapshot.json +0 -0
  113. /package/{drizzle → migrations/drizzle-tasks}/20260227014821_adr-system-and-status-registry/migration.sql +0 -0
  114. /package/{drizzle → migrations/drizzle-tasks}/20260227014821_adr-system-and-status-registry/snapshot.json +0 -0
  115. /package/{drizzle → migrations/drizzle-tasks}/20260227021231_add-cancelled-pipeline-status/migration.sql +0 -0
  116. /package/{drizzle → migrations/drizzle-tasks}/20260227021231_add-cancelled-pipeline-status/snapshot.json +0 -0
  117. /package/{drizzle → migrations/drizzle-tasks}/20260227022417_adr-cognitive-search-fields/migration.sql +0 -0
  118. /package/{drizzle → migrations/drizzle-tasks}/20260227022417_adr-cognitive-search-fields/snapshot.json +0 -0
  119. /package/{drizzle → migrations/drizzle-tasks}/20260227172236_freezing_grey_gargoyle/migration.sql +0 -0
  120. /package/{drizzle → migrations/drizzle-tasks}/20260227172236_freezing_grey_gargoyle/snapshot.json +0 -0
  121. /package/{drizzle → migrations/drizzle-tasks}/20260227183444_fix-orphaned-parent-ids/migration.sql +0 -0
  122. /package/{drizzle → migrations/drizzle-tasks}/20260227183444_fix-orphaned-parent-ids/snapshot.json +0 -0
  123. /package/{drizzle → migrations/drizzle-tasks}/20260227183521_parent-id-on-delete-set-null/migration.sql +0 -0
  124. /package/{drizzle → migrations/drizzle-tasks}/20260227183521_parent-id-on-delete-set-null/snapshot.json +0 -0
  125. /package/{drizzle → migrations/drizzle-tasks}/20260227200430_numerous_mysterio/migration.sql +0 -0
  126. /package/{drizzle → migrations/drizzle-tasks}/20260227200430_numerous_mysterio/snapshot.json +0 -0
  127. /package/{drizzle → migrations/drizzle-tasks}/20260227235745_add-audit-log-dispatch-columns/migration.sql +0 -0
  128. /package/{drizzle → migrations/drizzle-tasks}/20260227235745_add-audit-log-dispatch-columns/snapshot.json +0 -0
  129. /package/{drizzle → migrations/drizzle-tasks}/20260301053344_careless_changeling/migration.sql +0 -0
  130. /package/{drizzle → migrations/drizzle-tasks}/20260301053344_careless_changeling/snapshot.json +0 -0
  131. /package/{drizzle → migrations/drizzle-tasks}/20260301175940_futuristic_eternity/migration.sql +0 -0
  132. /package/{drizzle → migrations/drizzle-tasks}/20260301175940_futuristic_eternity/snapshot.json +0 -0
  133. /package/{drizzle → migrations/drizzle-tasks}/20260301180528_update-task-relations-check-constraint/migration.sql +0 -0
  134. /package/{drizzle → migrations/drizzle-tasks}/20260301180528_update-task-relations-check-constraint/snapshot.json +0 -0
  135. /package/{drizzle → migrations/drizzle-tasks}/20260302163443_free_silk_fever/migration.sql +0 -0
  136. /package/{drizzle → migrations/drizzle-tasks}/20260302163443_free_silk_fever/snapshot.json +0 -0
  137. /package/{drizzle → migrations/drizzle-tasks}/20260302163457_robust_johnny_storm/migration.sql +0 -0
  138. /package/{drizzle → migrations/drizzle-tasks}/20260302163457_robust_johnny_storm/snapshot.json +0 -0
  139. /package/{drizzle → migrations/drizzle-tasks}/20260302163511_late_sphinx/migration.sql +0 -0
  140. /package/{drizzle → migrations/drizzle-tasks}/20260302163511_late_sphinx/snapshot.json +0 -0
  141. /package/{drizzle → migrations/drizzle-tasks}/20260305011924_cheerful_mongu/migration.sql +0 -0
  142. /package/{drizzle → migrations/drizzle-tasks}/20260305011924_cheerful_mongu/snapshot.json +0 -0
  143. /package/{drizzle → migrations/drizzle-tasks}/20260305203927_demonic_storm/migration.sql +0 -0
  144. /package/{drizzle → migrations/drizzle-tasks}/20260305203927_demonic_storm/snapshot.json +0 -0
  145. /package/{drizzle → migrations/drizzle-tasks}/20260306001243_spooky_rage/migration.sql +0 -0
  146. /package/{drizzle → migrations/drizzle-tasks}/20260306001243_spooky_rage/snapshot.json +0 -0
  147. /package/{drizzle → migrations/drizzle-tasks}/20260306193138_young_morbius/migration.sql +0 -0
  148. /package/{drizzle → migrations/drizzle-tasks}/20260306193138_young_morbius/snapshot.json +0 -0
  149. /package/{drizzle → migrations/drizzle-tasks}/20260306194959_sticky_captain_flint/migration.sql +0 -0
  150. /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.20",
3
+ "version": "2026.3.22",
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",
@@ -35,7 +35,14 @@
35
35
  "adr:validate": "tsx dev/validate-adrs.ts",
36
36
  "adr:manifest": "tsx dev/generate-adr-manifest.ts",
37
37
  "features:generate": "tsx dev/generate-features.ts",
38
- "version:sync": "tsx dev/version-sync.ts"
38
+ "version:sync": "tsx dev/version-sync.ts",
39
+ "db:generate": "drizzle-kit generate --config drizzle-tasks.config.ts",
40
+ "db:generate:brain": "drizzle-kit generate --config drizzle-brain.config.ts",
41
+ "db:generate:nexus": "drizzle-kit generate --config drizzle-nexus.config.ts",
42
+ "db:generate:custom": "drizzle-kit generate --custom --config drizzle-tasks.config.ts",
43
+ "db:studio": "drizzle-kit studio --config drizzle-tasks.config.ts",
44
+ "db:studio:brain": "drizzle-kit studio --config drizzle-brain.config.ts",
45
+ "db:studio:nexus": "drizzle-kit studio --config drizzle-nexus.config.ts"
39
46
  },
40
47
  "engines": {
41
48
  "node": ">=24.13.1"
@@ -54,8 +61,10 @@
54
61
  "license": "MIT",
55
62
  "files": [
56
63
  "dist",
57
- "drizzle",
58
- "drizzle-brain",
64
+ "migrations",
65
+ "drizzle-tasks.config.ts",
66
+ "drizzle-brain.config.ts",
67
+ "drizzle-nexus.config.ts",
59
68
  "packages/ct-skills",
60
69
  "schemas",
61
70
  "templates",
@@ -73,6 +82,7 @@
73
82
  "commander": "^12.1.0",
74
83
  "drizzle-orm": "1.0.0-beta.15-859cf75",
75
84
  "env-paths": "^4.0.0",
85
+ "js-tiktoken": "^1.0.21",
76
86
  "pino": "^10.3.1",
77
87
  "pino-roll": "^4.0.0",
78
88
  "proper-lockfile": "^4.1.2",
@@ -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
- ### Key Read Operations (`query`)
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` | `list` | List tasks (`params: { parent?, status? }`) |
31
- | `session` | `status` | Current session state |
32
- | `session` | `list` | All sessions |
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
- | `research` | `list` | Research manifest entries |
37
- | `research` | `show` | Research entry details (`params: { entryId }`) |
59
+ | `orchestrate` | `status` | Current orchestration state |
38
60
  | `check` | `schema` | Validate task data schema integrity |
39
- | `system` | `dash` | Project overview dashboard |
40
- | `system` | `context` | Context window usage |
41
- | `skills` | `list` | Available skills |
42
- | `skills` | `show` | Skill details (`params: { name }`) |
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 (`params: { epicId, stage }`) |
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
- ### Key Write Operations (`mutate`)
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?, parent?, depends? }`) |
83
+ | `tasks` | `add` | Create task (`params: { title, description, parentId?, status? }`) |
53
84
  | `tasks` | `update` | Update task (`params: { taskId, title?, status?, notes? }`) |
54
- | `tasks` | `complete` | Complete task (`params: { taskId }`) |
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
- | `research` | `link` | Link research to task (`params: { taskId, entryId }`) |
60
- | `orchestrate` | `spawn` | Generate spawn prompt for subagent (`params: { taskId }`) |
61
- | `pipeline` | `stage.record` | Record pipeline stage progress (`params: { epicId, stage, status }`) |
62
- | `pipeline` | `stage.gate.pass` | Advance pipeline to next stage (`params: { epicId, stage }`) |
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 142 # Search by 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 -- `find` for discovery, `show` for details:
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 list` (no filters) | 2000-5000 | `tasks find "query"` | 80-90% |
115
- | `admin help --tier 2` first | 2000+ | `admin help` (tier 0 default) | 60-75% |
116
- | `tasks show` for every task | 400 x N | `tasks find` then `show` for 1-2 | 70-90% |
117
- | Reading full epic tree | 1000-3000 | `tasks next` for suggestions | 80% |
118
- | Repeated `session list` | 300 x N | Once at startup, cache result | 90% |
119
- | `tasks analyze` before starting | 800-1500 | `tasks next --explain` | 50% |
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
- ### Progressive Disclosure Triggers
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 -- 80% of work):
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 research artifacts or consensus docs
381
+ - Managing pipeline stages or manifest entries
132
382
  - Running validation/compliance checks
133
- - Working with memory or check domains
134
-
135
- **Escalate to Tier 2** when:
383
+ - Working with memory (timeline, fetch, decisions, patterns)
136
384
  - Orchestrating multi-agent workflows
137
- - Managing release pipelines
138
- - Working with nexus cross-project operations
139
- - Spawning subagents with protocol injection
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 existing sessions first
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 --auto-focus --name "Work"
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 --note "Progress"
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` -- copy-paste-ready fix command
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` or `ct list` to verify |
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 exists <parent-id>` |
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, neural hierarchy model, and brain metaphor mapping.
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 CLEO-INJECTION.md standard tier for full RCASD-IVTR+C pipeline details, or `references/loom-lifecycle.md` for gate enforcement and subagent architecture.
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
- query({ domain: "admin", operation: "grade",
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: "admin", operation: "grade.list" })
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` | `admin` | `grade` | Grade a session (`params: { sessionId }`) |
214
- | `query` | `admin` | `grade.list` | List all past grade results |
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`.