@cleocode/contracts 2026.8.2 → 2026.8.4

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.
@@ -1,3 +1,3 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`operations-registry > OPERATIONS snapshot — zero behavior change across relocation 1`] = `"[{"gateway":"query","domain":"tasks","operation":"show","description":"tasks.show (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"ID of the task to retrieve","cli":{"positional":true}},{"name":"history","type":"boolean","required":false,"description":"Include lifecycle stage history in the response"},{"name":"ivtr-history","type":"boolean","required":false,"description":"Include IVTR phase chain history in the response"},{"name":"relations","type":"boolean","required":false,"description":"Expand relation/doc lists while preserving compact MVI counts"}]},{"gateway":"query","domain":"tasks","operation":"traverse","description":"tasks.traverse (query) — WorkGraph traversal from a task root","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId","direction"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the traversal","cli":{"positional":true}},{"name":"direction","type":"string","required":true,"description":"Traversal direction to project from the root task","enum":["ancestors","descendants","upstream","downstream"]},{"name":"maxDepth","type":"number","required":false,"description":"Maximum traversal depth to include"},{"name":"includeRelations","type":"boolean","required":false,"description":"Include non-containment relation edges"},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor"},{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return"}]},{"gateway":"query","domain":"tasks","operation":"tree","description":"tasks.tree (query) — WorkGraph containment tree projection","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the tree projection","cli":{"positional":true}},{"name":"maxDepth","type":"number","required":false,"description":"Maximum containment depth to include"},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor"},{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return"}]},{"gateway":"query","domain":"tasks","operation":"rollup","description":"tasks.rollup (query) — WorkGraph direct and subtree status/type summary","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the rollup","cli":{"positional":true}},{"name":"expectedDirectRollup","type":"string","required":false,"description":"Optional serialized expected direct rollup for stale-projection diagnostics"}]},{"gateway":"query","domain":"tasks","operation":"frontier","description":"tasks.frontier (query) — WorkGraph ready and blocked frontier under a root","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the frontier","cli":{"positional":true}},{"name":"role","type":"string","required":false,"description":"Optional assignee/role lane filter"}]},{"gateway":"query","domain":"tasks","operation":"workgraph.audit","description":"tasks.workgraph.audit (query) — aggregate WorkGraph hierarchy/traversal/frontier/rollup diagnostics","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the WorkGraph audit","cli":{"positional":true}},{"name":"maxDepth","type":"number","required":false,"description":"Maximum descendant depth to include in audit projections"},{"name":"includeRelations","type":"boolean","required":false,"description":"Include relation-edge diagnostics in the audit result"},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor"},{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return in paginated audit projections"}]},{"gateway":"query","domain":"tasks","operation":"subscribe","description":"tasks.subscribe (query, streaming) — SSE stream of task/board lifecycle events (created/updated/deleted), optionally scoped to a saga/parent root","tier":2,"idempotent":true,"sessionRequired":false,"streaming":true,"requiredParams":[],"params":[{"name":"root","type":"string","required":false,"description":"Optional saga/parent task ID to scope the event stream to (omit for the whole board)"},{"name":"ticks","type":"number","required":false,"description":"Maximum number of event frames to emit before the terminal \`done\` frame (default: open-ended until client disconnect)"}]},{"gateway":"query","domain":"tasks","operation":"list","description":"tasks.list (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"parent","type":"string","required":false,"description":"Filter by parent task ID"},{"name":"status","type":"string","required":false,"description":"Filter by task status"},{"name":"priority","type":"string","required":false,"description":"Filter by task priority"},{"name":"type","type":"string","required":false,"description":"Filter by task type"},{"name":"phase","type":"string","required":false,"description":"Filter by task phase"},{"name":"label","type":"string","required":false,"description":"Filter by task label"},{"name":"children","type":"boolean","required":false,"description":"Limit parent queries to direct children"},{"name":"limit","type":"number","required":false,"description":"Maximum number of tasks to return"},{"name":"offset","type":"number","required":false,"description":"Number of filtered tasks to skip"},{"name":"compact","type":"boolean","required":false,"description":"Deprecated: request compact task rows for compatibility"}]},{"gateway":"query","domain":"tasks","operation":"find","description":"tasks.find (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"tree","description":"tasks.tree (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"blockers","description":"tasks.blockers (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"depends","description":"tasks.depends (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"deps.validate","description":"tasks.deps.validate (query) — validate dependency graph integrity for an epic or all tasks","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"epicId","type":"string","required":false,"description":"Scope validation to direct children of this epic (optional)"},{"name":"scope","type":"string","required":false,"description":"Which tasks to include: 'all', 'open', or 'critical' (default: 'all')"}]},{"gateway":"query","domain":"tasks","operation":"deps.tree","description":"tasks.deps.tree (query) — render dependency tree for an epic in text, mermaid, or json format","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID to visualize (required)"},{"name":"format","type":"string","required":false,"description":"Output format: 'text', 'mermaid', or 'json' (default: 'text')"}]},{"gateway":"query","domain":"tasks","operation":"analyze","description":"tasks.analyze (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"impact","description":"tasks.impact (query) — predict downstream effects of a free-text change description using keyword matching and reverse dependency graph traversal","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["change"],"params":[{"name":"change","type":"string","required":true,"description":"Free-text description of the proposed change (e.g. \\"Modify authentication flow\\")"},{"name":"matchLimit","type":"number","required":false,"description":"Maximum number of seed tasks to match by keyword (default: 5)"}]},{"gateway":"query","domain":"tasks","operation":"next","description":"tasks.next (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"plan","description":"Composite planning view with in-progress epics, ready tasks, blocked tasks, and open bugs (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"completion.list","description":"tasks.completion.list (query) — list typed completion criteria results","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to list completion criteria for","cli":{"positional":true}},{"name":"status","type":"string","required":false,"description":"Optional criterion status filter","enum":["satisfied","unsatisfied","waived","replaced"]},{"name":"kind","type":"string","required":false,"description":"Optional criterion kind filter","enum":["text","evidence_bound","child_task"]}]},{"gateway":"query","domain":"tasks","operation":"completion.evaluate","description":"tasks.completion.evaluate (query) — evaluate completion readiness with typed AC results","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to evaluate completion readiness for","cli":{"positional":true}},{"name":"includeContext","type":"boolean","required":false,"description":"Include bounded audit context pack"},{"name":"limit","type":"number","required":false,"description":"Maximum audit context events when context is included"},{"name":"since","type":"string","required":false,"description":"Lower ISO timestamp bound for audit context"},{"name":"relationDepth","type":"number","required":false,"description":"Related-task audit context depth"}]},{"gateway":"query","domain":"tasks","operation":"completion.explain","description":"tasks.completion.explain (query) — explain completion blockers and stale state","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to explain completion readiness for","cli":{"positional":true}},{"name":"includeContext","type":"boolean","required":false,"description":"Include bounded audit context pack"},{"name":"limit","type":"number","required":false,"description":"Maximum audit context events when context is included"},{"name":"since","type":"string","required":false,"description":"Lower ISO timestamp bound for audit context"},{"name":"relationDepth","type":"number","required":false,"description":"Related-task audit context depth"}]},{"gateway":"mutate","domain":"tasks","operation":"projection.repair","description":"tasks.projection.repair (mutate) — repair stale completion projection state with typed errors","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose completion projection should be repaired","cli":{"positional":true}},{"name":"dryRun","type":"boolean","required":false,"description":"Preview repair actions without writing projection state"}]},{"gateway":"query","domain":"tasks","operation":"relates","description":"tasks.relates (query) — absorbs relates.find via mode param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"tasks","operation":"complexity.estimate","description":"tasks.complexity.estimate (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"tasks","operation":"history","description":"Show task work history (time tracked per task)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"current","description":"tasks.current (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"label.list","description":"List all labels with task counts","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"status","description":"session.status (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"list","description":"session.list (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"status","type":"string","required":false,"description":"Filter by session status"},{"name":"active","type":"boolean","required":false,"description":"Legacy active-session filter"},{"name":"limit","type":"number","required":false,"description":"Maximum sessions to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many sessions before returning results"}]},{"gateway":"query","domain":"session","operation":"show","description":"session.show (query) — absorbs debrief.show via include param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"decision.log","description":"session.decision.log (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"context.drift","description":"session.context.drift (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"handoff.show","description":"session.handoff.show - Show handoff data from the most recent ended session (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"briefing.show","description":"session.briefing.show - Composite session-start context (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"find","description":"session.find (query) — lightweight session discovery","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"lint","description":"session.lint (query) — agent-accountability harness: flag raw-md writes to canonical doc paths in a transcript (T9797)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["transcript"],"params":[{"name":"transcript","type":"string","required":true,"description":"Absolute path to the *.jsonl session transcript to lint"}]},{"gateway":"query","domain":"orchestrate","operation":"status","description":"orchestrate.status (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"events","description":"orchestrate.events (query, streaming) — SSE stream of agent/worker/board lifecycle events","tier":2,"idempotent":true,"sessionRequired":false,"streaming":true,"requiredParams":[],"params":[{"name":"ticks","type":"number","required":false,"description":"Maximum number of event frames to emit before the terminal \`done\` frame (default: open-ended until client disconnect)"}]},{"gateway":"query","domain":"orchestrate","operation":"ivtr.status","description":"orchestrate.ivtr.status (query) — current IVTR phase + history","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.start","description":"orchestrate.ivtr.start (mutate) — begin Implement phase","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.next","description":"orchestrate.ivtr.next (mutate) — advance to next phase (requires prior evidence)","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.release","description":"orchestrate.ivtr.release (mutate) — final gate, requires I+V+T evidence","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.loop-back","description":"orchestrate.ivtr.loop-back (mutate) — rewind to phase on failure","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId","phase","reason"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"phase","type":"string","required":true,"description":"phase parameter"},{"name":"reason","type":"string","required":true,"description":"reason parameter"}]},{"gateway":"query","domain":"orchestrate","operation":"next","description":"orchestrate.next (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"ready","description":"orchestrate.ready (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"analyze","description":"orchestrate.analyze (query) — absorbs critical.path via mode param; Wave 7a adds mode=\\"parallel-safety\\"","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"epicId","type":"string","required":false,"description":"Epic ID for standard analysis (required unless mode=critical-path or parallel-safety)"},{"name":"mode","type":"string","required":false,"description":"Analysis mode: omit for standard analysis, \\"critical-path\\" for CPM, \\"parallel-safety\\" for dep-graph grouping"},{"name":"taskIds","type":"array","required":false,"description":"Task ID list for mode=\\"parallel-safety\\" — returns {parallelSafe, groups} dep-graph analysis"}]},{"gateway":"query","domain":"orchestrate","operation":"context","description":"orchestrate.context (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"waves","description":"orchestrate.waves (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"report","description":"orchestrate.report (query) — grouped readiness report: ready, blocked, blockedBy, gate-blocked, invalid (T10631)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID to generate the report for","cli":{"positional":true}},{"name":"page","type":"number","required":false,"description":"Page number for paginated output (1-indexed, default 1)"},{"name":"pageSize","type":"number","required":false,"description":"Page size for paginated output (default 50, max 200)"}]},{"gateway":"query","domain":"orchestrate","operation":"plan","description":"orchestrate.plan (query) — deterministic wave+worker plan (T889)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID to emit a plan for","cli":{"positional":true}},{"name":"preferTier","type":"number","required":false,"description":"Preferred resolver tier (0=project, 1=global, 2=packaged)"}]},{"gateway":"query","domain":"orchestrate","operation":"bootstrap","description":"orchestrate.bootstrap (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"unblock.opportunities","description":"orchestrate.unblock.opportunities (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"find","description":"memory.find (query) — cross-table brain.db FTS5 search","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"agent","type":"string","required":false,"description":"Filter results to observations produced by the named agent (T418 mental models)","cli":{"flag":"--agent <name>"}}]},{"gateway":"query","domain":"memory","operation":"timeline","description":"memory.timeline (query) — chronological context around anchor","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["anchor"],"params":[{"name":"anchor","type":"string","required":true,"description":"anchor parameter"}]},{"gateway":"query","domain":"memory","operation":"fetch","description":"memory.fetch (query) — batch fetch brain entries by IDs","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["ids"],"params":[{"name":"ids","type":"string","required":true,"description":"ids parameter"}]},{"gateway":"query","domain":"memory","operation":"decision.find","description":"memory.decision.find (query) — search decisions in brain.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"pattern.find","description":"memory.pattern.find (query) — search BRAIN pattern memory by type, impact, or keyword","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"learning.find","description":"memory.learning.find (query) — search BRAIN learning memory by confidence, actionability, or keyword","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"graph.show","description":"memory.graph.show (query) — get a PageIndex graph node and its edges","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.neighbors","description":"memory.graph.neighbors (query) — get neighbor nodes from the PageIndex graph","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.trace","description":"memory.graph.trace (query) — BFS traversal from a seed node via recursive CTE (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.related","description":"memory.graph.related (query) — 1-hop typed neighbours of a brain graph node (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.context","description":"memory.graph.context (query) — 360-degree context view: node + all edges + neighbours (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.stats","description":"memory.graph.stats (query) — aggregate node and edge counts by type (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"reason.why","description":"memory.reason.why (query) — causal trace through task dependency chains","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"reason.similar","description":"memory.reason.similar (query) — find semantically similar brain entries","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["entryId"],"params":[{"name":"entryId","type":"string","required":true,"description":"entryId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"search.hybrid","description":"memory.search.hybrid (query) — hybrid search across FTS5, vector, and graph","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"stage.validate","description":"pipeline.stage.validate (query) — absorbs stage.prerequisites in response","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"stage.status","description":"pipeline.stage.status (query) — absorbs stage.gates via include param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"stage.history","description":"pipeline.stage.history (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"stage.guidance","description":"pipeline.stage.guidance (query) — stage-aware LLM prompt guidance (Phase 2). Pi extensions shell out to this on before_agent_start.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"phase.show","description":"Show phase details by slug or current phase (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"phaseId","type":"string","required":false,"description":"Phase slug (omit for current phase)"}]},{"gateway":"query","domain":"pipeline","operation":"phase.list","description":"List all phases with status and task counts (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"manifest.show","description":"pipeline.manifest.show (query) — get manifest entry by ID","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["entryId"],"params":[{"name":"entryId","type":"string","required":true,"description":"entryId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"manifest.list","description":"pipeline.manifest.list (query) — list manifest entries with filters","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"manifest.find","description":"pipeline.manifest.find (query) — search manifest entries by text","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"manifest.stats","description":"pipeline.manifest.stats (query) — manifest statistics","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"schema","description":"check.schema (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["type"],"params":[{"name":"type","type":"string","required":true,"description":"Schema type to validate (todo, config, archive, log, sessions)","cli":{"positional":true}}]},{"gateway":"query","domain":"check","operation":"protocol","description":"check.protocol (query) — absorbs all protocol.* ops via protocolType param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"task","description":"check.task (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"manifest","description":"check.manifest (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"output","description":"check.output (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"compliance.summary","description":"check.compliance.summary (query) — absorbs compliance.violations via detail param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"test","description":"check.test (query) — combined test status and coverage via format param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"test.coverage","description":"check.test.coverage (query) — dedicated test coverage sub-op (T1434)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"coherence","description":"check.coherence (query) — renamed from coherence.check (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"gate.status","description":"check.gate.status (query) — read-only gate state; split from gate.verify (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"check","operation":"archive.stats","description":"check.archive.stats (query) — archive analytics; moved from admin (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"grade","description":"check.grade (query) — grade agent behavioral session; moved from admin (T5615)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["sessionId"],"params":[{"name":"sessionId","type":"string","required":true,"description":"sessionId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"check","operation":"grade.list","description":"check.grade.list (query) — list past session grade results; moved from admin (T5615)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sessionId","type":"string","required":false,"description":"Filter grades by session ID"},{"name":"limit","type":"number","required":false,"description":"Maximum grade entries to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many grade entries before returning results"}]},{"gateway":"query","domain":"check","operation":"canon","description":"check.canon (query) — CI gate: detects canon drift between docs and live code (CANONICAL_DOMAINS count, forbidden phrases, required assertions)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"canon.docs","description":"check.canon.docs (query) — CI gate: rejects new *.md files that bypass the docs SSoT (.cleo/canon.yml routing). Scans git diff additions against rawMdPaths whose owning DocKind has rawMdAllowed:false.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"baseRef","type":"string","required":false,"description":"Git revision to diff against (default: origin/main)"}]},{"gateway":"query","domain":"check","operation":"workflow.compliance","description":"check.workflow.compliance (query) — WF-001..WF-005 compliance dashboard; AC rate, session rate, gate rate","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"since","type":"string","required":false,"description":"ISO 8601 date; only include tasks/events on or after this date"}]},{"gateway":"query","domain":"admin","operation":"version","description":"admin.version (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"health","description":"admin.health (query) — absorbs doctor via mode param","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"config.show","description":"admin.config.show (query) — show config value","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"config.presets","description":"admin.config.presets (query) — list all strictness presets with descriptions and values","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"config.get","description":"admin.config.get (query) — resolve a single config value via the ConfigManifest cascade (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["key"],"params":[{"name":"key","type":"string","required":true,"description":"Dot-notation config key to read (e.g. \\"release.branchModel\\")","cli":{"positional":true}},{"name":"scope","type":"string","required":false,"description":"Cascade slice to read from. Defaults to merged.","enum":["global","project","merged"]}]},{"gateway":"query","domain":"admin","operation":"config.list","description":"admin.config.list (query) — resolve the full config cascade and its flattened keys (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Cascade slice to project. Defaults to merged.","enum":["global","project","merged"]}]},{"gateway":"query","domain":"admin","operation":"config.validate","description":"admin.config.validate (query) — schema-validate a scoped config file via its manifest entry (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Scope to validate (global or project). Defaults to project.","enum":["global","project"]}]},{"gateway":"query","domain":"admin","operation":"stats","description":"admin.stats (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"context","description":"admin.context (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"context.pull","description":"admin.context.pull (query) — JIT bundle: task details + brain memories + last handoff","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"admin","operation":"runtime","description":"admin.runtime (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"paths","description":"admin.paths (query) — report all CleoOS paths (project + global hub) and scaffolding status","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"job","description":"admin.job (query) — absorbs job.status and job.list via action param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: status (default) or list"},{"name":"status","type":"string","required":false,"description":"Filter jobs by status (for list action)"},{"name":"limit","type":"number","required":false,"description":"Maximum jobs to return (for list action)"},{"name":"offset","type":"number","required":false,"description":"Skip this many jobs before returning results"}]},{"gateway":"query","domain":"admin","operation":"dash","description":"admin.dash (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"roadmap","description":"admin.roadmap (query) — project roadmap from task provenance, epics grouped by status with progress","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"includeHistory","type":"boolean","required":false,"description":"Include release history from CHANGELOG.md"},{"name":"upcomingOnly","type":"boolean","required":false,"description":"Only show pending/upcoming epics (exclude completed)"}]},{"gateway":"query","domain":"admin","operation":"log","description":"admin.log (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"sequence","description":"admin.sequence (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"help","description":"Get operations list and guidance filtered to specified disclosure tier","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"tier","type":"number","required":false,"description":"Progressive disclosure tier: 0=basic (default), 1=+memory/check, 2=all operations","cli":{"flag":"tier","short":"-t"}},{"name":"verbose","type":"boolean","required":false,"description":"Return full operation objects instead of compact domain-grouped format","cli":{"flag":"verbose"}}]},{"gateway":"query","domain":"tools","operation":"issue.diagnostics","description":"tools.issue.diagnostics (query) — CLEO install integrity check","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.list","description":"tools.skill.list (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.show","description":"tools.skill.show (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.find","description":"tools.skill.find (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.federated.find","description":"tools.skill.federated.find (T9731 federation-aware multi-source query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.dispatch","description":"tools.skill.dispatch (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.verify","description":"tools.skill.verify (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.dependencies","description":"tools.skill.dependencies (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.spawn.providers","description":"List spawn-capable providers by capability (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.catalog","description":"tools.skill.catalog (query) — CAAMP catalog; absorbs catalog.protocols/profiles/resources/info via type param","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"type","type":"string","required":false,"description":"Catalog type: protocols, profiles, resources, or info (default)"}]},{"gateway":"query","domain":"tools","operation":"skill.precedence","description":"tools.skill.precedence (query) — absorbs precedence.show and precedence.resolve via action param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: show (default) or resolve"},{"name":"providerId","type":"string","required":false,"description":"Provider ID for resolve action"}]},{"gateway":"query","domain":"tools","operation":"skill.doctor.diagnose","description":"tools.skill.doctor.diagnose (query) — read-only health report on skill storage layout, db drift, orphans, and bridge symlinks","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"verbose","type":"boolean","required":false,"description":"Include per-skill detail in the rendered human-readable summary"}]},{"gateway":"mutate","domain":"tools","operation":"skill.prune.telemetry","description":"tools.skill.prune.telemetry (mutate) — delete skill_usage rows older than --older-than DAYS (default 180)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"olderThanDays","type":"number","required":false,"description":"Age threshold in days (default 180)"},{"name":"dryRun","type":"boolean","required":false,"description":"Return the plan without touching the DB"},{"name":"vacuum","type":"boolean","required":false,"description":"Run VACUUM after the delete to reclaim disk space"}]},{"gateway":"mutate","domain":"tools","operation":"skill.import.hermes","description":"tools.skill.import.hermes (mutate) — migrate ~/.hermes/skills/.usage.json sidecars into CLEO skills.db","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"hermesHome","type":"string","required":false,"description":"Override Hermes home directory (default: $HERMES_HOME or ~/.hermes)"},{"name":"dryRun","type":"boolean","required":false,"description":"Print planned writes without mutating skills.db"}]},{"gateway":"mutate","domain":"tools","operation":"skill.migrate","description":"tools.skill.migrate (mutate) — migrate ~/.local/share/agents/skills into ~/.cleo/skills (SSoT); supports --dry-run preview + --rollback restore","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dryRun","type":"boolean","required":false,"description":"Preview the plan without writing anything"},{"name":"rollback","type":"boolean","required":false,"description":"Restore the legacy tree from the most recent backup tarball"}]},{"gateway":"query","domain":"tools","operation":"skill.stats","description":"tools.skill.stats (query) — Sphere B telemetry rollup; top-N usage, lifecycle / source-type breakdowns, agent-created list","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"top","type":"number","required":false,"description":"Top-N usage rollup limit (default 10)"},{"name":"sinceDays","type":"number","required":false,"description":"Restrict top-N rollup to the last N days (default: all-time)"},{"name":"bySource","type":"boolean","required":false,"description":"Include source-type breakdown facet"},{"name":"byLifecycle","type":"boolean","required":false,"description":"Include lifecycle-state breakdown facet"},{"name":"agentCreated","type":"boolean","required":false,"description":"Include agent-created skill list facet"}]},{"gateway":"query","domain":"tools","operation":"provider.list","description":"tools.provider.list (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"provider.detect","description":"tools.provider.detect (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"provider.inject.status","description":"tools.provider.inject.status (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"provider.supports","description":"tools.provider.supports (query) - check if provider supports capability","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["providerId","capability"],"params":[{"name":"providerId","type":"string","required":true,"description":"Provider ID (e.g., claude-code)"},{"name":"capability","type":"string","required":true,"description":"Capability path in dot notation (e.g., spawn.supportsSubagents)"}]},{"gateway":"query","domain":"tools","operation":"provider.hooks","description":"tools.provider.hooks (query) - list providers by hook event support","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["event"],"params":[{"name":"event","type":"string","required":true,"description":"Hook event to query (e.g., onSessionStart, onToolComplete)"}]},{"gateway":"mutate","domain":"tasks","operation":"add","description":"tasks.add (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["title"],"params":[{"name":"title","type":"string","required":true,"description":"Task title (3–500 characters)","cli":{"positional":true}},{"name":"parent","type":"string","required":false,"description":"Parent task ID (makes this task a subtask)","cli":{"flag":"parent"}},{"name":"priority","type":"string","required":false,"description":"Task priority","enum":["low","medium","high","critical"],"cli":{"flag":"priority","short":"-p"}},{"name":"type","type":"string","required":false,"description":"Task type","enum":["epic","task","subtask"],"cli":{"flag":"type","short":"-t"}},{"name":"size","type":"string","required":false,"description":"Scope size estimate","enum":["small","medium","large"],"cli":{"flag":"size"}},{"name":"description","type":"string","required":false,"description":"Detailed task description (must differ meaningfully from title)","cli":{"flag":"description","short":"-d"}},{"name":"acceptance","type":"array","required":false,"description":"Pipe-separated acceptance criteria (e.g. \\"AC1|AC2|AC3\\")","cli":{"flag":"acceptance"}},{"name":"labels","type":"array","required":false,"description":"Comma-separated labels","cli":{"flag":"labels","short":"-l"}},{"name":"depends","type":"array","required":false,"description":"Comma-separated dependency task IDs","cli":{"flag":"depends","short":"-D"}},{"name":"phase","type":"string","required":false,"description":"Phase slug to assign the task to","cli":{"flag":"phase","short":"-P"}},{"name":"notes","type":"string","required":false,"description":"Initial note entry for the task","cli":{"flag":"notes"}}]},{"gateway":"mutate","domain":"tasks","operation":"add-batch","description":"tasks.add-batch (mutate) — bulk-create N tasks atomically in a single transaction (epic decomposition: 1 call instead of N)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["tasks"],"params":[{"name":"tasks","type":"array","required":true,"description":"Array of task specs to insert atomically (each must have a title)"},{"name":"defaultParent","type":"string","required":false,"description":"Optional default parent task ID applied when a task spec omits parent"},{"name":"dryRun","type":"boolean","required":false,"description":"Validate and predict IDs without writing to the database"}]},{"gateway":"mutate","domain":"tasks","operation":"update","description":"tasks.update (mutate) — partial update; only supplied fields are mutated","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to update","cli":{"positional":true}},{"name":"title","type":"string","required":false,"description":"New title (3–500 chars)"},{"name":"description","type":"string","required":false,"description":"New description","cli":{"flag":"description","short":"-d"}},{"name":"status","type":"string","required":false,"description":"New status","enum":["pending","active","blocked","done","cancelled"],"cli":{"flag":"status","short":"-s"}},{"name":"priority","type":"string","required":false,"description":"New priority (orthogonal to severity)","enum":["low","medium","high","critical"],"cli":{"flag":"priority","short":"-p"}},{"name":"notes","type":"string","required":false,"description":"Append a note entry"},{"name":"labels","type":"array","required":false,"description":"Replace labels (comma-separated)","cli":{"flag":"labels","short":"-l"}},{"name":"addLabels","type":"array","required":false,"description":"Add labels incrementally"},{"name":"removeLabels","type":"array","required":false,"description":"Remove labels incrementally"},{"name":"depends","type":"array","required":false,"description":"Replace dependency task IDs","cli":{"flag":"depends","short":"-D"}},{"name":"addDepends","type":"array","required":false,"description":"Add dependency task IDs incrementally"},{"name":"removeDepends","type":"array","required":false,"description":"Remove dependency task IDs incrementally"},{"name":"acceptance","type":"array","required":false,"description":"Replace acceptance criteria (pipe-separated)"},{"name":"parent","type":"string","required":false,"description":"Set parent task ID (null/empty promotes to root)"},{"name":"type","type":"string","required":false,"description":"New hierarchy type","enum":["saga","epic","task","subtask"],"cli":{"flag":"type","short":"-t"}},{"name":"size","type":"string","required":false,"description":"New scope-size estimate","enum":["small","medium","large"]},{"name":"files","type":"array","required":false,"description":"Replace associated file paths"},{"name":"addFiles","type":"array","required":false,"description":"Add file paths incrementally"},{"name":"removeFiles","type":"array","required":false,"description":"Remove file paths incrementally"},{"name":"pipelineStage","type":"string","required":false,"description":"Set pipeline stage (forward-only)"},{"name":"kind","type":"string","required":false,"description":"Task kind / intent axis (orthogonal to type)","enum":["work","research","experiment","bug","spike","release"]},{"name":"scope","type":"string","required":false,"description":"Task scope / granularity axis","enum":["project","feature","unit"]},{"name":"severity","type":"string","required":false,"description":"Severity level (orthogonal to priority)","enum":["P0","P1","P2","P3"]},{"name":"reason","type":"string","required":false,"description":"Operator override reason for the AC-immutability guard"},{"name":"dependsWaiver","type":"string","required":false,"description":"Justification to waive the critical-priority --depends requirement"},{"name":"blockedBy","type":"string","required":false,"description":"Set the free-text blockedBy reason (gh#1106)"},{"name":"clearBlockedBy","type":"boolean","required":false,"description":"Clear the free-text blockedBy reason"},{"name":"relates","type":"array","required":false,"description":"Replace related-task edges ({taskId, type, reason?})"},{"name":"addRelates","type":"array","required":false,"description":"Add related-task edges without overwriting existing"},{"name":"removeRelates","type":"array","required":false,"description":"Remove related-task edges by taskId"}],"inputSchema":{"operation":"tasks.update","schema":{"type":"object","required":["taskId"],"additionalProperties":false,"properties":{"taskId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1,"maxLength":500},"description":{"type":"string"},"status":{"type":"string","enum":["pending","active","blocked","done","cancelled"]},"priority":{"type":"string","enum":["low","medium","high","critical"]},"notes":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}},"addLabels":{"type":"array","items":{"type":"string"}},"removeLabels":{"type":"array","items":{"type":"string"}},"depends":{"type":"array","items":{"type":"string"}},"addDepends":{"type":"array","items":{"type":"string"}},"removeDepends":{"type":"array","items":{"type":"string"}},"acceptance":{"type":"array","items":{"type":"string"}},"parent":{"type":["string","null"]},"type":{"type":"string","enum":["saga","epic","task","subtask"]},"size":{"type":"string","enum":["small","medium","large"]},"files":{"type":"array","items":{"type":"string"}},"addFiles":{"type":"array","items":{"type":"string"}},"removeFiles":{"type":"array","items":{"type":"string"}},"pipelineStage":{"type":"string"},"kind":{"type":"string","enum":["work","research","experiment","bug","spike","release"]},"scope":{"type":"string","enum":["project","feature","unit"]},"severity":{"type":"string","enum":["P0","P1","P2","P3"]},"reason":{"type":"string"},"dependsWaiver":{"type":"string"},"blockedBy":{"type":"string"},"clearBlockedBy":{"type":"boolean"},"relates":{"type":"array","items":{"type":"object","required":["taskId","type"],"additionalProperties":false,"properties":{"taskId":{"type":"string","minLength":1},"type":{"type":"string","minLength":1},"reason":{"type":"string"}}}},"addRelates":{"type":"array","items":{"type":"object","required":["taskId","type"],"additionalProperties":false,"properties":{"taskId":{"type":"string","minLength":1},"type":{"type":"string","minLength":1},"reason":{"type":"string"}}}},"removeRelates":{"type":"array","items":{"type":"string"}}}},"examples":[{"name":"set-status","value":{"taskId":"T9917","status":"active"},"description":"Transition status to active."},{"name":"add-labels-incrementally","value":{"taskId":"T9917","addLabels":["saga.t9855","epic.t9903"]}}]},"outputSchema":{"operation":"tasks.update","shapeNote":"The updated task ID (bare string) is at /data/updated/0 — NOT /data/updated/0/id. Use /data/status for the post-mutation status.","dataSchema":{"type":"object","required":["count","created","updated","deleted"],"additionalProperties":true,"properties":{"count":{"type":"number","description":"Number of records the mutation affected."},"created":{"type":"array","description":"Task IDs created by the mutation (bare strings, e.g. \\"T11692\\"). Empty for update/delete-only mutations.","items":{"type":"string"}},"updated":{"type":"array","description":"Task IDs updated by the mutation (bare strings). Empty for create/delete-only mutations.","items":{"type":"string"}},"deleted":{"type":"array","description":"Task IDs deleted by the mutation (bare strings). Empty for create/update-only mutations.","items":{"type":"string"}},"ids":{"type":"array","description":"Deprecated alias for the non-empty bucket. Prefer created/updated/deleted.","items":{"type":"string"}},"dryRun":{"type":"boolean","description":"True when this was a preview-only mutation."},"status":{"type":"string","description":"Post-mutation task status (add/update/complete)."}}},"fieldPointers":["/data/updated/0","/data/status","/data/count"]}},{"gateway":"mutate","domain":"tasks","operation":"complete","description":"tasks.complete (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"cancel","description":"tasks.cancel (mutate) — cancel task (soft terminal state; reversible via tasks.restore)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Optional human-readable cancellation reason stored on the task"}]},{"gateway":"mutate","domain":"tasks","operation":"delete","description":"tasks.delete (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"archive","description":"tasks.archive (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tasks","operation":"restore","description":"tasks.restore (mutate) — absorbs reopen and unarchive via from param","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"reparent","description":"tasks.reparent (mutate) — absorbs promote via newParentId:null","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"reorder","description":"tasks.reorder (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","position"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"position","type":"string","required":true,"description":"position parameter"}]},{"gateway":"mutate","domain":"tasks","operation":"reorder-rank","description":"tasks.reorder-rank (mutate) — within-column positional re-rank from an explicit top-to-bottom task-ID order (Kanban drag-reorder)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["orderedIds"],"params":[{"name":"orderedIds","type":"array","required":true,"description":"Ordered task IDs describing the desired top-to-bottom column order; each task position is set to its 1-based index"}],"outputSchema":{"operation":"tasks.reorder-rank","shapeNote":"Re-ranked IDs (new order) at /data/ranked; unresolved request IDs at /data/skipped; count at /data/count.","dataSchema":{"type":"object","required":["ranked","skipped","count"],"additionalProperties":true,"properties":{"ranked":{"type":"array","description":"Task IDs whose position was written, in the new top-to-bottom order.","items":{"type":"string"}},"skipped":{"type":"array","description":"Request IDs that did not resolve to a task (no-op for these).","items":{"type":"string"}},"count":{"type":"number","description":"Number of tasks re-ranked."}}},"fieldPointers":["/data/ranked/0","/data/skipped/0","/data/count"]}},{"gateway":"mutate","domain":"tasks","operation":"bulk-move","description":"tasks.bulk-move (mutate) — atomically move N tasks to a new status and/or pipeline stage in a single transaction (Kanban multi-card column move)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskIds"],"params":[{"name":"taskIds","type":"array","required":true,"description":"Task IDs to move (all-or-nothing; any failure rolls back every move)"},{"name":"status","type":"string","required":false,"description":"Target lifecycle status applied to every task","enum":["pending","active","blocked","done","cancelled","archived","proposed"]},{"name":"pipelineStage","type":"string","required":false,"description":"Target pipeline stage applied to every task (forward-only)"}],"outputSchema":{"operation":"tasks.bulk-move","shapeNote":"Moved task IDs at /data/moved (all-or-nothing); applied status/stage at /data/status and /data/pipelineStage; count at /data/count.","dataSchema":{"type":"object","required":["moved","count"],"additionalProperties":true,"properties":{"moved":{"type":"array","description":"Task IDs successfully moved (atomic — empty only when count is 0).","items":{"type":"string"}},"status":{"type":"string","description":"The status applied, when supplied."},"pipelineStage":{"type":"string","description":"The pipeline stage applied, when supplied."},"count":{"type":"number","description":"Number of tasks moved."}}},"fieldPointers":["/data/moved/0","/data/status","/data/pipelineStage","/data/count"]}},{"gateway":"mutate","domain":"tasks","operation":"assignee","description":"tasks.assignee (mutate) — set/clear a first-class human assignee (DISTINCT from the agent claim/unclaim lock; pass assignee:null to clear)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose assignee is being set or cleared","cli":{"positional":true}},{"name":"assignee","type":"string","required":false,"description":"Assignee to set; omit / empty / null clears the assignee"}],"outputSchema":{"operation":"tasks.assignee","shapeNote":"The new assignee is at /data/assignee (null when cleared); /data/assigned is true on set, false on clear.","dataSchema":{"type":"object","required":["taskId","assignee","assigned"],"additionalProperties":true,"properties":{"taskId":{"type":"string","description":"The task ID whose assignee changed."},"assignee":{"type":["string","null"],"description":"The new assignee value (null when cleared)."},"assigned":{"type":"boolean","description":"True when an assignee was set; false on clear."}}},"fieldPointers":["/data/taskId","/data/assignee","/data/assigned"]}},{"gateway":"mutate","domain":"tasks","operation":"relates.add","description":"tasks.relates.add (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","type"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"type","type":"string","required":true,"description":"type parameter"}]},{"gateway":"mutate","domain":"tasks","operation":"relates.add-batch","description":"tasks.relates.add-batch (mutate) — bulk-add advisory relation edges from a JSON payload ({relations:[...]} or {edges:[...]}); use dryRun to preview without writing.","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"relations","type":"array","required":false,"description":"Array of relation edges ({from|taskId, to|relatedId, type, reason})"},{"name":"edges","type":"array","required":false,"description":"Alias for \`relations\` — array of relation edges"},{"name":"dryRun","type":"boolean","required":false,"description":"Validate and report what would be created without writing"},{"name":"reasonWaiver","type":"string","required":false,"description":"Explicit audit waiver text for edges without per-edge reasons"}]},{"gateway":"mutate","domain":"tasks","operation":"relates.remove","description":"tasks.relates.remove (mutate) — delete a relation between two tasks. Pass \`type\` to scope deletion to a single relation kind; omit to remove any type.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId","relatedId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Source task ID","cli":{"positional":true}},{"name":"relatedId","type":"string","required":true,"description":"Target task ID to remove the relation to","cli":{"positional":true}},{"name":"type","type":"string","required":false,"description":"Optional relation type (blocks|related|duplicates|absorbs|fixes|extends|supersedes). Omit to remove any type.","cli":{"flag":"type"}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.create","description":"tasks.saga.create (mutate) — create a Saga as a first-class TaskType (type=saga) per ADR-083","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["title"],"params":[{"name":"title","type":"string","required":true,"description":"Saga title (3–500 characters)","cli":{"flag":"title"}},{"name":"description","type":"string","required":false,"description":"Saga description","cli":{"flag":"description","short":"-d"}},{"name":"acceptance","type":"array","required":false,"description":"Pipe-separated acceptance criteria","cli":{"flag":"acceptance"}},{"name":"dryRun","type":"boolean","required":false,"description":"Validate and preview without writing task, relation, or doc rows","cli":{"flag":"dry-run"}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.add","description":"tasks.saga.add (mutate) — link an Epic to a Saga via task_relations type=groups","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["sagaId","epicId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID (must have type=saga)","cli":{"positional":true}},{"name":"epicId","type":"string","required":true,"description":"Epic task ID to link as member","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.detach","description":"tasks.saga.detach (mutate) — remove a Saga member relation (task_relations type=groups); idempotent; appends to .cleo/audit/saga-detach.jsonl (T10118)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId","memberId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID","cli":{"positional":true}},{"name":"memberId","type":"string","required":true,"description":"Member task ID to detach from the Saga","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Human-readable reason recorded in the audit log entry"}]},{"gateway":"query","domain":"tasks","operation":"saga.list","description":"tasks.saga.list (query) — list all Sagas (labeled top-level Epics)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"saga.members","description":"tasks.saga.members (query) — list member Epics linked to a Saga","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID","cli":{"positional":true}}]},{"gateway":"query","domain":"tasks","operation":"saga.rollup","description":"tasks.saga.rollup (query) — aggregate member Epic statuses (total/done/active/blocked/pending + completionPct)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.repair","description":"tasks.saga.repair (mutate) — detach I5-violating parentId and re-attach via task_relations type=groups; idempotent","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID (must have type=saga)","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.reconcile","description":"tasks.saga.reconcile (mutate) — idempotent cron-safe saga auto-close repair; per-saga advisory lock + audit log; supersedes T10098","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sagaId","type":"string","required":false,"description":"Optional saga task ID. Omit to walk every saga.","cli":{"positional":true}},{"name":"dryRun","type":"boolean","required":false,"description":"Report what would happen without mutating rows or writing audit log"}]},{"gateway":"mutate","domain":"tasks","operation":"saga.migrate-containment","description":"tasks.saga.migrate-containment (mutate) — convert parent_id-based Saga membership to groups relations; idempotent; audits to saga-contain-migration.jsonl","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sagaId","type":"string","required":false,"description":"Optional saga task ID. Omit to migrate all sagas.","cli":{"positional":true}},{"name":"dryRun","type":"boolean","required":false,"description":"Report what would happen without mutating rows or writing audit log"}]},{"gateway":"mutate","domain":"tasks","operation":"start","description":"tasks.start (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"stop","description":"tasks.stop (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tasks","operation":"sync.reconcile","description":"tasks.sync.reconcile (mutate) — reconcile external tasks with CLEO as SSoT","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["providerId","externalTasks"],"params":[{"name":"providerId","type":"string","required":true,"description":"Provider identifier (e.g. linear, jira, github)"},{"name":"externalTasks","type":"array","required":true,"description":"Array of normalized ExternalTask objects"},{"name":"dryRun","type":"boolean","required":false,"description":"Compute actions without applying them"},{"name":"conflictPolicy","type":"string","required":false,"description":"Conflict resolution: cleo-wins, provider-wins, latest-wins, report-only"},{"name":"defaultPhase","type":"string","required":false,"description":"Default phase for newly created tasks"},{"name":"defaultLabels","type":"array","required":false,"description":"Default labels for newly created tasks"}]},{"gateway":"query","domain":"tasks","operation":"sync.links","description":"tasks.sync.links (query) — list external task links by provider or task ID","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"providerId","type":"string","required":false,"description":"Filter links by provider"},{"name":"taskId","type":"string","required":false,"description":"Filter links by CLEO task ID"}]},{"gateway":"mutate","domain":"tasks","operation":"sync.links.remove","description":"tasks.sync.links.remove (mutate) — remove all external task links for a provider","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["providerId"],"params":[{"name":"providerId","type":"string","required":true,"description":"Provider whose links should be removed"}]},{"gateway":"mutate","domain":"tasks","operation":"claim","description":"tasks.claim (mutate) — claim a task by assigning it to the current session","tier":0,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId","agentId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to claim"},{"name":"agentId","type":"string","required":true,"description":"Agent ID to assign the task to"}]},{"gateway":"mutate","domain":"tasks","operation":"unclaim","description":"tasks.unclaim (mutate) — unclaim a task by removing the current assignee","tier":0,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to unclaim"}]},{"gateway":"mutate","domain":"session","operation":"start","description":"session.start (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"end","description":"session.end (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"resume","description":"session.resume (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"suspend","description":"session.suspend (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"gc","description":"session.gc (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"record.decision","description":"session.record.decision (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"record.assumption","description":"session.record.assumption (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"adopt","description":"session.adopt — rebind env to a specific session for multi-agent isolation (T9975)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sessionId","type":"string","required":true,"description":"Session ID to adopt"}]},{"gateway":"mutate","domain":"orchestrate","operation":"start","description":"orchestrate.start (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"spawn","description":"orchestrate.spawn (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"handoff","description":"orchestrate.handoff (mutate) — composite handoff (context.inject -> session.end -> spawn)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","protocolType"],"params":[{"name":"taskId","type":"string","required":true,"description":"Successor task ID for spawn context"},{"name":"protocolType","type":"string","required":true,"description":"Protocol name for handoff context injection"},{"name":"note","type":"string","required":false,"description":"Optional handoff note persisted through session.end"},{"name":"nextAction","type":"string","required":false,"description":"Optional next action metadata for the handoff payload"},{"name":"variant","type":"string","required":false,"description":"Optional context injection variant"},{"name":"tier","type":"number","required":false,"description":"Progressive disclosure tier (0-2)"},{"name":"idempotencyKey","type":"string","required":false,"description":"Caller-provided retry correlation key (reported in metadata)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"spawn.execute","description":"orchestrate.spawn.execute (mutate) — execute spawn for a task using adapter registry","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to spawn"},{"name":"adapterId","type":"string","required":false,"description":"Adapter ID (auto-select if omitted)"},{"name":"protocolType","type":"string","required":false,"description":"Protocol type override"},{"name":"tier","type":"number","required":false,"description":"Progressive disclosure tier (0-2)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"validate","description":"orchestrate.validate (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"pivot","description":"orchestrate.pivot (mutate) — record an audited context switch from one task to another (replaces silent reframes)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["fromTaskId","toTaskId","reason"],"params":[{"name":"fromTaskId","type":"string","required":true,"description":"Currently-active task ID being paused","cli":{"positional":true}},{"name":"toTaskId","type":"string","required":true,"description":"Task ID becoming active in the current session","cli":{"positional":true}},{"name":"reason","type":"string","required":true,"description":"Free-form rationale for the pivot — REQUIRED, no silent pivots"},{"name":"blocksFrom","type":"boolean","required":false,"description":"When true (default), adds toTaskId as a dependency on fromTaskId so it cannot complete before the pivot resolves"}]},{"gateway":"mutate","domain":"orchestrate","operation":"parallel","description":"orchestrate.parallel (mutate) — absorbs parallel.start and parallel.end via action param","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["action"],"params":[{"name":"action","type":"string","required":true,"description":"Action: start or end"}]},{"gateway":"mutate","domain":"memory","operation":"observe","description":"memory.observe (mutate) — save observation to brain.db","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["text"],"params":[{"name":"text","type":"string","required":true,"description":"text parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"memory","operation":"decision.store","description":"memory.decision.store (mutate) — store decision to brain.db","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["decision","rationale"],"params":[{"name":"decision","type":"string","required":true,"description":"decision parameter","cli":{"positional":true}},{"name":"rationale","type":"string","required":true,"description":"rationale parameter"}]},{"gateway":"mutate","domain":"memory","operation":"pattern.store","description":"memory.pattern.store (mutate) — store a reusable workflow or anti-pattern in BRAIN pattern memory","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["pattern","context"],"params":[{"name":"pattern","type":"string","required":true,"description":"pattern parameter","cli":{"positional":true}},{"name":"context","type":"string","required":true,"description":"context parameter"}]},{"gateway":"mutate","domain":"memory","operation":"learning.store","description":"memory.learning.store (mutate) — store an insight or lesson learned in BRAIN learning memory","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["insight","source"],"params":[{"name":"insight","type":"string","required":true,"description":"insight parameter","cli":{"positional":true}},{"name":"source","type":"string","required":true,"description":"source parameter"}]},{"gateway":"mutate","domain":"memory","operation":"link","description":"memory.link (mutate) — link brain entry to task","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","entryId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"entryId","type":"string","required":true,"description":"entryId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"memory","operation":"graph.add","description":"memory.graph.add (mutate) — add a node or edge to the PageIndex graph","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"memory","operation":"graph.remove","description":"memory.graph.remove (mutate) — remove a node or edge from the PageIndex graph","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"quality","description":"Memory quality report: retrieval stats, noise ratio, tier distribution","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"code.links","description":"List code_reference edges connecting memories to nexus code symbols","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"code.memories-for-code","description":"Find memories linked to a code symbol via code_reference edges","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"symbol parameter"}]},{"gateway":"query","domain":"memory","operation":"code.for-memory","description":"Find code symbols linked to a memory entry via code_reference edges","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["memoryId"],"params":[{"name":"memoryId","type":"string","required":true,"description":"memoryId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"memory","operation":"code.link","description":"Create code_reference edge from memory to nexus symbol","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["memoryId","codeSymbol"],"params":[{"name":"memoryId","type":"string","required":true,"description":"memoryId parameter","cli":{"positional":true}},{"name":"codeSymbol","type":"string","required":true,"description":"codeSymbol parameter"}]},{"gateway":"mutate","domain":"memory","operation":"code.auto-link","description":"Scan memories for entity references and auto-link to nexus nodes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"doctor","description":"memory.doctor (query) — read-only brain noise scan: detects duplicate-content, missing-type, missing-provenance, orphan-edge, low-confidence, stale-unverified patterns. Used as M7 assert-clean gate for Sentient v1 activation.","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"assert-clean","type":"boolean","required":false,"description":"If true, exit non-zero when any noise patterns are detected (M7 gate for Sentient v1)."}]},{"gateway":"query","domain":"memory","operation":"sweep","description":"memory.sweep (query/mutate) — T1147 W7 BRAIN noise sweep. dry-run: detect noise candidates and write sample JSON to agent-outputs. approve <runId>: apply sweep to live brain tables (sets killSwitch during tx). status: list all noise-sweep-2440 runs. rollback <runId>: discard a staged run without applying changes.","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dry-run","type":"boolean","required":false,"description":"Detect noise candidates without staging DB writes."},{"name":"approve","type":"string","required":false,"description":"Run ID to approve and apply to live tables."},{"name":"status","type":"boolean","required":false,"description":"List recent noise-sweep-2440 runs."},{"name":"rollback","type":"string","required":false,"description":"Run ID to roll back without applying changes."}]},{"gateway":"mutate","domain":"memory","operation":"sweep","description":"memory.sweep (mutate) — T1147 W7 BRAIN noise sweep approve/rollback. approve <runId>: apply sweep to live brain tables. rollback <runId>: discard a staged run without applying changes.","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"approve","type":"string","required":false,"description":"Run ID to approve and apply to live tables."},{"name":"rollback","type":"string","required":false,"description":"Run ID to roll back without applying changes."}]},{"gateway":"query","domain":"memory","operation":"llm-status","description":"memory.llm-status (query) — report LLM backend resolution status and extraction readiness","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"pending-verify","description":"memory.pending-verify (query) — list unverified brain entries with citation_count >= threshold","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"minCitations","type":"number","required":false,"description":"Minimum citation count threshold (default: 5)"},{"name":"limit","type":"number","required":false,"description":"Maximum entries to return (default: 50)"}]},{"gateway":"query","domain":"memory","operation":"bridge","description":"memory.bridge (query) — stream brain.db memory-bridge content directly (cli mode default)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"promote-explain","description":"memory.promote-explain (query) — read-only view over STDP weights, retrieval log, and citation_count for a brain entry; returns tier decision and score breakdown","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Brain entry id (e.g. O-abc123, D-def456, P-ghi789, L-jkl012)"}]},{"gateway":"query","domain":"memory","operation":"digest","description":"memory.digest (query) — summarized top-N observations by citation_count for session briefings","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Max observations to include in digest (default: 10)"}]},{"gateway":"query","domain":"memory","operation":"recent","description":"memory.recent (query) — tail recent brain_observations with optional filters (since, type, session, tier)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Max entries to return (default: 20)"},{"name":"since","type":"string","required":false,"description":"ISO timestamp or duration (e.g. '24h', '7d') to filter from"},{"name":"type","type":"string","required":false,"description":"Filter by observation type (e.g. diary, observation, pattern)"},{"name":"session","type":"string","required":false,"description":"Filter by source_session_id"},{"name":"tier","type":"string","required":false,"description":"Filter by memory_tier (short, medium, long)"}]},{"gateway":"query","domain":"memory","operation":"diary","description":"memory.diary (query) — list observations with type='diary' in reverse chronological order","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Max diary entries to return (default: 20)"}]},{"gateway":"query","domain":"memory","operation":"watch","description":"memory.watch (query) — poll for new brain_observations since a cursor; returns nextCursor for chained polling","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"cursor","type":"string","required":false,"description":"ISO datetime cursor; only observations after this time are returned"},{"name":"limit","type":"number","required":false,"description":"Max events per poll (default: 10)"}]},{"gateway":"mutate","domain":"memory","operation":"diary.write","description":"memory.diary.write (mutate) — store an observation with type='diary' (thin wrapper over observe)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["text"],"params":[{"name":"text","type":"string","required":true,"description":"Diary entry text"},{"name":"title","type":"string","required":false,"description":"Optional title"},{"name":"sourceSessionId","type":"string","required":false,"description":"Session that produced this entry"},{"name":"agent","type":"string","required":false,"description":"Agent provenance"}]},{"gateway":"mutate","domain":"memory","operation":"verify","description":"memory.verify (mutate) — flip verified=1 on a brain entry; requires project-orchestrator or owner identity","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Brain entry ID to verify"},{"name":"agent","type":"string","required":false,"description":"Caller identity ('project-orchestrator' or 'owner'). Legacy alias 'cleo-prime' accepted per T1258 E1 migration shim. Omit for terminal invocation."}]},{"gateway":"mutate","domain":"memory","operation":"precompact-flush","description":"memory.precompact-flush (mutate) — flush in-flight brain observations and issue a WAL checkpoint before context window compaction","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"backfill.list","description":"memory.backfill.list (query) — list staged backfill runs with status (pending/approved/rolled-back)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"memory","operation":"backfill.run","description":"memory.backfill.run (mutate) — stage a new graph backfill run (rows held pending approval)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"memory","operation":"backfill.approve","description":"memory.backfill.approve (mutate) — approve a staged backfill run (commits rows to live tables)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Backfill run ID to approve"}]},{"gateway":"mutate","domain":"memory","operation":"backfill.rollback","description":"memory.backfill.rollback (mutate) — rollback a backfill run (removes staged/committed rows)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Backfill run ID to rollback"}]},{"gateway":"mutate","domain":"pipeline","operation":"stage.record","description":"pipeline.stage.record (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.skip","description":"pipeline.stage.skip (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.reset","description":"pipeline.stage.reset (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.gate.pass","description":"pipeline.stage.gate.pass (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.gate.fail","description":"pipeline.stage.gate.fail (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"manifest.append","description":"pipeline.manifest.append (mutate) — append entry to pipeline_manifest (SQLite table per ADR-027)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["entry"],"params":[{"name":"entry","type":"string","required":true,"description":"entry parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"pipeline","operation":"manifest.archive","description":"pipeline.manifest.archive (mutate) — archive old manifest entries","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["beforeDate"],"params":[{"name":"beforeDate","type":"string","required":true,"description":"beforeDate parameter"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.set","description":"Set the active phase","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["phaseId"],"params":[{"name":"phaseId","type":"string","required":true,"description":"Phase slug to set as current"},{"name":"rollback","type":"boolean","required":false,"description":"Allow backward phase movement"},{"name":"force","type":"boolean","required":false,"description":"Skip confirmation prompt"},{"name":"dryRun","type":"boolean","required":false,"description":"Preview changes without modifying files"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.advance","description":"Complete current phase and start next","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"force","type":"boolean","required":false,"description":"Skip validation and interactive prompt"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.rename","description":"Rename a phase and update all task references","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["oldName","newName"],"params":[{"name":"oldName","type":"string","required":true,"description":"oldName parameter"},{"name":"newName","type":"string","required":true,"description":"newName parameter"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.delete","description":"Delete a phase with task reassignment protection","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["phaseId"],"params":[{"name":"phaseId","type":"string","required":true,"description":"Phase slug to delete"},{"name":"reassignTo","type":"string","required":false,"description":"Reassign tasks to another phase"},{"name":"force","type":"boolean","required":false,"description":"Required safety flag"}]},{"gateway":"mutate","domain":"check","operation":"compliance.record","description":"check.compliance.record (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"check","operation":"test.run","description":"check.test.run (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"check","operation":"compliance.sync","description":"check.compliance.sync (mutate) — sync project compliance metrics to global","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"check","operation":"gate.set","description":"check.gate.set (mutate) — write path of former gate.verify; set/reset gates (T5615)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"verify.explain","description":"check.verify.explain (query) — show evidence atoms + gate state for a task in human-readable format (read-only)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to explain verification state for (e.g. T1006)"}]},{"gateway":"query","domain":"pipeline","operation":"release.list","description":"List all releases from release_manifests table","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"release.show","description":"Show details for a specific release version","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"version parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"release.channel.show","description":"Show the current release channel based on git branch (latest/beta/alpha)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"release.pr-status","description":"Poll GitHub CI check statuses for the open release PR matching release/v<version> (T9095)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Release version (e.g. 2026.5.43 or v2026.5.43)","cli":{"positional":true}}]},{"gateway":"mutate","domain":"pipeline","operation":"release.cancel","description":"pipeline.release.cancel (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"version parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"pipeline","operation":"release.rollback","description":"pipeline.release.rollback (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"release.rollback.full","description":"Full rollback: delete git tag (local + remote), revert release commit, remove manifest record (T820 RELEASE-05)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"version parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"init","description":"admin.init (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"scaffold-hub","description":"admin.scaffold-hub (mutate) — create CleoOS Hub dirs (global-recipes, pi-extensions, cant-workflows, agents) and seed starter justfile","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"config.set","description":"admin.config.set (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"config.set-preset","description":"admin.config.set-preset (mutate) — apply a strictness preset (strict, standard, minimal)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["preset"],"params":[{"name":"preset","type":"string","required":true,"description":"Preset name: strict | standard | minimal"}]},{"gateway":"mutate","domain":"admin","operation":"config.unset","description":"admin.config.unset (mutate) — remove a key from a scoped config file (idempotent) (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["key"],"params":[{"name":"key","type":"string","required":true,"description":"Dot-notation config key to remove","cli":{"positional":true}},{"name":"global","type":"boolean","required":false,"description":"Remove from the global file instead of the project file"}]},{"gateway":"query","domain":"admin","operation":"backup","description":"admin.backup (query) — list available backups (read-only)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"backup","description":"admin.backup (mutate) — absorbs restore and backup.restore via action param","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"migrate","description":"admin.migrate (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"cleanup","description":"admin.cleanup (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"job.cancel","description":"admin.job.cancel (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"safestop","description":"admin.safestop (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"inject.generate","description":"admin.inject.generate (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"skill.install","description":"tools.skill.install (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"skill.uninstall","description":"tools.skill.uninstall (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"skill.refresh","description":"tools.skill.refresh (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"provider.inject","description":"tools.provider.inject (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"adapter.list","description":"tools.adapter.list (query) — list all discovered provider adapters","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"adapter.show","description":"tools.adapter.show (query) — show details for a specific adapter","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Adapter ID"}]},{"gateway":"query","domain":"tools","operation":"adapter.detect","description":"tools.adapter.detect (query) — detect active providers in current environment","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"adapter.health","description":"tools.adapter.health (query) — health status for adapters","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"id","type":"string","required":false,"description":"Specific adapter ID (omit for all)"}]},{"gateway":"mutate","domain":"tools","operation":"adapter.activate","description":"tools.adapter.activate (mutate) — load and activate a provider adapter","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Adapter ID to activate"}]},{"gateway":"mutate","domain":"tools","operation":"adapter.dispose","description":"tools.adapter.dispose (mutate) — dispose one or all adapters","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"id","type":"string","required":false,"description":"Adapter ID (omit to dispose all)"}]},{"gateway":"mutate","domain":"admin","operation":"install.global","description":"Refresh global CLEO setup: provider files, configs, ~/.agents/AGENTS.md","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"token","description":"admin.token (query) — summarize/list/show token telemetry; absorbs token.summary, token.list, token.show via action param","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: summary (default), list, or show"},{"name":"tokenId","type":"string","required":false,"description":"Token ID for show action"},{"name":"provider","type":"string","required":false,"description":"Filter by provider"},{"name":"transport","type":"string","required":false,"description":"Filter by transport"},{"name":"domain","type":"string","required":false,"description":"Filter by domain"},{"name":"operationName","type":"string","required":false,"description":"Filter by operation name"},{"name":"sessionId","type":"string","required":false,"description":"Filter by session ID"},{"name":"taskId","type":"string","required":false,"description":"Filter by task ID"},{"name":"limit","type":"number","required":false,"description":"Maximum records to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many records before returning results"}]},{"gateway":"mutate","domain":"admin","operation":"token","description":"admin.token (mutate) — record/delete/clear token telemetry; absorbs token.record, token.delete, token.clear via action param","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: record (default), delete, or clear"},{"name":"tokenId","type":"string","required":false,"description":"Token ID for delete action"}]},{"gateway":"query","domain":"admin","operation":"adr.show","description":"admin.adr.show (query) — retrieve single ADR by ID with frontmatter","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["adrId"],"params":[{"name":"adrId","type":"string","required":true,"description":"adrId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"adr.sync","description":"admin.adr.sync (mutate) — sync .cleo/adrs/ markdown files into architecture_decisions DB table; absorbs adr.validate via validate flag","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"adr.find","description":"admin.adr.find (query) — fuzzy search ADRs; absorbs adr.list when query absent","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"query","type":"string","required":false,"description":"Search query (omit to list all ADRs)"},{"name":"status","type":"string","required":false,"description":"Filter ADRs by status"},{"name":"since","type":"string","required":false,"description":"Filter ADRs created on or after this date"},{"name":"limit","type":"number","required":false,"description":"Maximum ADRs to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many ADRs before returning results"}]},{"gateway":"mutate","domain":"admin","operation":"health","description":"admin.health (mutate) — auto-fix failed health/doctor checks; mode:\\"repair\\" form of admin.health query (T5615)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"context.inject","description":"admin.context.inject (mutate) — inject protocol content into session context; moved from session domain (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["protocolType"],"params":[{"name":"protocolType","type":"string","required":true,"description":"protocolType parameter"}]},{"gateway":"query","domain":"admin","operation":"export","description":"admin.export (query) — export tasks; absorbs snapshot.export and export.tasks via scope param","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"import","description":"admin.import (mutate) — import tasks; absorbs snapshot.import and import.tasks via scope param","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["file"],"params":[{"name":"file","type":"string","required":true,"description":"file parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"detect","description":"Refresh project-context.json — re-detect project type, framework, and LLM hints","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"smoke","description":"admin.smoke (query) — operational smoke test: one read-only query per domain","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"smoke.provider","description":"admin.smoke.provider (query) — ADR-049 harness sovereignty probe: verify adapter shape, DB locality, hooks, spawn, and agent folder for a named provider","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider ID to probe (claude-code | claude-sdk | codex | cursor | gemini-cli | kimi | openai-sdk | opencode | pi)"}]},{"gateway":"query","domain":"admin","operation":"hooks.matrix","description":"admin.hooks.matrix (query) — cross-provider hook support matrix using CAAMP canonical taxonomy","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"providerIds","type":"string","required":false,"description":"Limit matrix to specific provider IDs (default: all mapped providers)"},{"name":"detectProvider","type":"boolean","required":false,"description":"Detect current runtime provider (default: true)"}]},{"gateway":"query","domain":"admin","operation":"map","description":"admin.map (query) — analyze codebase structure, return structured mapping","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"focus","type":"string","required":false,"description":"Focus analysis on one area: stack, architecture, structure, conventions, testing, integrations, concerns"}]},{"gateway":"mutate","domain":"admin","operation":"map","description":"admin.map (mutate) — analyze codebase and store findings to brain.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"focus","type":"string","required":false,"description":"Focus analysis on one area: stack, architecture, structure, conventions, testing, integrations, concerns"}]},{"gateway":"query","domain":"nexus","operation":"augment","description":"nexus.augment (query) — BM25 symbol context for PreToolUse hooks and search-code","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pattern"],"params":[{"name":"pattern","type":"string","required":true,"description":"Symbol name or pattern"},{"name":"limit","type":"number","required":false,"description":"Max results (default 5)"}]},{"gateway":"query","domain":"nexus","operation":"share.status","description":"nexus.share.status (query) — sharing status","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"share.snapshot.export","description":"nexus.share.snapshot.export (mutate) — export project snapshot","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"share.snapshot.import","description":"nexus.share.snapshot.import (mutate) — import project snapshot","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"status","description":"nexus.status (query) — overall NEXUS health status","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"list","description":"nexus.list (query) — list all registered NEXUS projects","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"show","description":"nexus.show (query) — show a specific project by name or hash","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"name parameter"}]},{"gateway":"query","domain":"nexus","operation":"resolve","description":"nexus.resolve (query) — resolve a cross-project project:taskId reference; renamed from nexus.query (T5615)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"deps","description":"nexus.deps (query) — cross-project dependency analysis","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"graph","description":"nexus.graph (query) — global dependency graph across all projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"path.show","description":"nexus.path.show (query) — show critical dependency path across projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"blockers.show","description":"nexus.blockers.show (query) — show blocking impact for a task query","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"orphans.list","description":"nexus.orphans.list (query) — list orphaned cross-project dependencies","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"discover","description":"nexus.discover (query) — discover related tasks across registered projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"search","description":"nexus.search (query) — search for patterns across registered projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pattern"],"params":[{"name":"pattern","type":"string","required":true,"description":"pattern parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"init","description":"nexus.init (mutate) — initialize NEXUS (creates registry and directories)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"register","description":"nexus.register (mutate) — register a project in NEXUS","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["path"],"params":[{"name":"path","type":"string","required":true,"description":"path parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"unregister","description":"nexus.unregister (mutate) — remove a project from NEXUS","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"name parameter"}]},{"gateway":"mutate","domain":"nexus","operation":"sync","description":"nexus.sync (mutate) — sync project(s) metadata; absorbs sync.all when name omitted","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"name","type":"string","required":false,"description":"Project name to sync (omit to sync all)"}]},{"gateway":"mutate","domain":"nexus","operation":"permission.set","description":"nexus.permission.set (mutate) — update project permissions","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name","level"],"params":[{"name":"name","type":"string","required":true,"description":"name parameter"},{"name":"level","type":"string","required":true,"description":"level parameter"}]},{"gateway":"mutate","domain":"nexus","operation":"reconcile","description":"nexus.reconcile (mutate) — reconcile project identity with global nexus registry","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"transfer.preview","description":"nexus.transfer.preview (query) — preview a cross-project task transfer","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskIds","sourceProject","targetProject"],"params":[{"name":"taskIds","type":"array","required":true,"description":"Task IDs to transfer"},{"name":"sourceProject","type":"string","required":true,"description":"Source project name or hash"},{"name":"targetProject","type":"string","required":true,"description":"Target project name or hash"},{"name":"mode","type":"string","required":false,"description":"Transfer mode: 'copy' (default) or 'move'"},{"name":"scope","type":"string","required":false,"description":"Transfer scope: 'subtree' (default) or 'single'"}]},{"gateway":"mutate","domain":"nexus","operation":"transfer","description":"nexus.transfer (mutate) — transfer tasks between NEXUS projects","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["taskIds","sourceProject","targetProject"],"params":[{"name":"taskIds","type":"array","required":true,"description":"Task IDs to transfer"},{"name":"sourceProject","type":"string","required":true,"description":"Source project name or hash"},{"name":"targetProject","type":"string","required":true,"description":"Target project name or hash"},{"name":"mode","type":"string","required":false,"description":"Transfer mode: 'copy' (default) or 'move'"},{"name":"scope","type":"string","required":false,"description":"Transfer scope: 'subtree' (default) or 'single'"},{"name":"onConflict","type":"string","required":false,"description":"Conflict strategy: 'rename' (default), 'skip', 'duplicate', 'fail'"},{"name":"transferBrain","type":"boolean","required":false,"description":"Whether to transfer brain observations (default: false)"}]},{"gateway":"query","domain":"nexus","operation":"top-entries","description":"nexus.top-entries (query) — top-weighted symbols from nexus_relations by weight DESC (Hebbian plasticity aggregate)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum entries to return (default: 20)"},{"name":"kind","type":"string","required":false,"description":"Filter by nexus_nodes.kind (e.g. function, method, class, interface)"}]},{"gateway":"query","domain":"nexus","operation":"impact","description":"nexus.impact (query) — BFS blast radius for a symbol with optional reasons[] path-strings when why=true","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name to analyze (case-insensitive substring match)"},{"name":"why","type":"boolean","required":false,"description":"Append reasons[] per affected symbol (caller count, edge strength, hop depth). Default false"},{"name":"depth","type":"number","required":false,"description":"Maximum BFS depth (default 3, capped at 5)"},{"name":"projectId","type":"string","required":false,"description":"Override project ID (default: auto-detected from cwd)"}]},{"gateway":"query","domain":"nexus","operation":"full-context","description":"nexus.full-context (query) — full 5-substrate Living Brain context for a code symbol (NEXUS callers/callees, BRAIN memories, TASKS, sentient proposals, conduit threads)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name or nexus node ID"}]},{"gateway":"query","domain":"nexus","operation":"task-footprint","description":"nexus.task-footprint (query) — full code impact for a task: files, symbols, blast radius, brain observations, decisions, risk tier","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID (e.g., T001)"}]},{"gateway":"query","domain":"nexus","operation":"brain-anchors","description":"nexus.brain-anchors (query) — code anchors for a brain memory entry: linked nexus nodes, tasks that touched them, plasticity signal","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["entryId"],"params":[{"name":"entryId","type":"string","required":true,"description":"Brain entry node ID (e.g., observation:abc123)"}]},{"gateway":"query","domain":"nexus","operation":"why","description":"nexus.why (query) — causal trace: why is a code symbol structured this way? walks BRAIN decisions, observations, and tasks","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name or nexus node ID to trace"}]},{"gateway":"query","domain":"nexus","operation":"impact-full","description":"nexus.impact-full (query) — merged structural + task + brain impact report for a code symbol","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name or nexus node ID to analyze"}]},{"gateway":"query","domain":"nexus","operation":"route-map","description":"nexus.route-map (query) — display all routes with their handlers and dependencies for a project (route ID, handler name, HTTP method/path, dep count, caller count)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectId","type":"string","required":false,"description":"Project identifier (auto-derived from project root if omitted)"}]},{"gateway":"query","domain":"nexus","operation":"shape-check","description":"nexus.shape-check (query) — check response shape compatibility between a route handler and its callers; returns per-caller compatibility status and recommendations","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["routeSymbol"],"params":[{"name":"routeSymbol","type":"string","required":true,"description":"Route symbol ID (format: <filePath>::<routeName>)"},{"name":"projectId","type":"string","required":false,"description":"Project identifier (auto-derived from project root if omitted)"}]},{"gateway":"query","domain":"nexus","operation":"search-code","description":"nexus.search-code (query) — BM25 search of code symbols in nexus.db; returns symbol names, kinds, file paths, and relevance scores","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pattern"],"params":[{"name":"pattern","type":"string","required":true,"description":"Search query (symbol name, file pattern, or keyword)"},{"name":"limit","type":"number","required":false,"description":"Max results (default: 10)"}]},{"gateway":"query","domain":"nexus","operation":"wiki","description":"nexus.wiki (query) — generate community-grouped wiki index from the nexus code graph; scaffold mode when LOOM provider unavailable","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"outputDir","type":"string","required":false,"description":"Output directory for wiki files (default: <projectRoot>/.cleo/wiki)"},{"name":"communityFilter","type":"string","required":false,"description":"Filter generation to a single community ID (e.g. \\"community:3\\")"},{"name":"incremental","type":"boolean","required":false,"description":"Only regenerate communities whose symbols changed since last wiki run (uses .cleo/wiki-state.json)"}]},{"gateway":"query","domain":"nexus","operation":"contracts-show","description":"nexus.contracts-show (query) — show contract compatibility matrix between two registered projects; matches HTTP/gRPC/topic contracts and returns per-match compatibility scores","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["projectA","projectB"],"params":[{"name":"projectA","type":"string","required":true,"description":"First project name or ID"},{"name":"projectB","type":"string","required":true,"description":"Second project name or ID"}]},{"gateway":"query","domain":"nexus","operation":"task-symbols","description":"nexus.task-symbols (query) — show code symbols touched by a task via task_touches_symbol forward-lookup; returns symbol label, kind, filePath, weight, matchStrategy","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to look up (e.g. T001)"}]},{"gateway":"mutate","domain":"nexus","operation":"contracts-sync","description":"nexus.contracts-sync (mutate) — extract HTTP, gRPC, and topic contracts from a project and store them in nexus.db; idempotent upsert","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd / projectRoot)"},{"name":"projectId","type":"string","required":false,"description":"Override the project ID (default: auto-detected from repoPath)"}]},{"gateway":"mutate","domain":"nexus","operation":"contracts-link-tasks","description":"nexus.contracts-link-tasks (mutate) — link extracted contracts to tasks that touch their source symbols via task_touches_symbol edges; runs git-log task linker","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd / projectRoot)"},{"name":"projectId","type":"string","required":false,"description":"Override the project ID (default: auto-detected from repoPath)"}]},{"gateway":"mutate","domain":"nexus","operation":"conduit-scan","description":"nexus.conduit-scan (mutate) — scan conduit messages for symbol mentions and write conduit_mentions_symbol edges to brain_page_edges; gracefully no-ops when conduit.db or nexus.db is absent","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"profile.view","description":"nexus.profile.view (query) — list all user-profile traits, optionally filtered by minimum confidence","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"minConfidence","type":"number","required":false,"description":"Minimum confidence threshold in [0.0, 1.0]. Defaults to 0.0."},{"name":"includeSuperseded","type":"boolean","required":false,"description":"Include superseded (deprecated) traits. Defaults to false."}]},{"gateway":"query","domain":"nexus","operation":"profile.get","description":"nexus.profile.get (query) — fetch a single user-profile trait by key","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["traitKey"],"params":[{"name":"traitKey","type":"string","required":true,"description":"Trait key to retrieve (e.g. \\"prefers-zero-deps\\")","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"profile.import","description":"nexus.profile.import (mutate) — import user-profile traits from a portable JSON file (default: ~/.cleo/user_profile.json)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"path","type":"string","required":false,"description":"Absolute path to the JSON file. Defaults to ~/.cleo/user_profile.json."}]},{"gateway":"mutate","domain":"nexus","operation":"profile.export","description":"nexus.profile.export (mutate) — export user-profile traits to a portable JSON file (default: ~/.cleo/user_profile.json)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"path","type":"string","required":false,"description":"Absolute output path. Defaults to ~/.cleo/user_profile.json."}]},{"gateway":"mutate","domain":"nexus","operation":"profile.reinforce","description":"nexus.profile.reinforce (mutate) — increment reinforcement count and boost confidence for a user-profile trait","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["traitKey"],"params":[{"name":"traitKey","type":"string","required":true,"description":"Key of the trait to reinforce","cli":{"positional":true}},{"name":"source","type":"string","required":false,"description":"Source identifier for this reinforcement event. Defaults to \\"manual\\"."}]},{"gateway":"mutate","domain":"nexus","operation":"profile.upsert","description":"nexus.profile.upsert (mutate) — create or update a user-profile trait in nexus.db","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["trait"],"params":[{"name":"trait","type":"string","required":true,"description":"UserProfileTrait JSON object with traitKey, traitValue, confidence, source (accepted as JSON string at CLI boundary; parsed in dispatch handler)"}]},{"gateway":"mutate","domain":"nexus","operation":"profile.supersede","description":"nexus.profile.supersede (mutate) — mark a user-profile trait as superseded by another (T1139 supersession prep)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["oldKey","newKey"],"params":[{"name":"oldKey","type":"string","required":true,"description":"Trait key being deprecated"},{"name":"newKey","type":"string","required":true,"description":"Trait key that replaces the old one"}]},{"gateway":"query","domain":"nexus","operation":"sigil.list","description":"nexus.sigil.list (query) — list every sigil currently stored in nexus.db, optionally filtered by role","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"role","type":"string","required":false,"description":"Filter by role (e.g. \\"orchestrator\\", \\"lead\\", \\"worker\\", \\"specialist\\", \\"subagent\\")"}]},{"gateway":"mutate","domain":"nexus","operation":"sigil.sync","description":"nexus.sigil.sync (mutate) — populate the sigils table with one row per canonical CANT agent (cleo-subagent + 5 seed roles + 2 meta agents). Idempotent.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"clusters","description":"nexus.clusters (query) — list all detected Louvain community clusters for a project from nexus.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectId","type":"string","required":false,"description":"Override project ID"},{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd)"}]},{"gateway":"query","domain":"nexus","operation":"flows","description":"nexus.flows (query) — list all detected execution flow nodes for a project from nexus.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectId","type":"string","required":false,"description":"Override project ID"},{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd)"}]},{"gateway":"query","domain":"nexus","operation":"context","description":"nexus.context (query) — show callers, callees, community membership, and process participation for a code symbol","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name to look up","cli":{"positional":true}},{"name":"projectId","type":"string","required":false,"description":"Override project ID"},{"name":"limit","type":"number","required":false,"description":"Max callers/callees per side (default: 20)"},{"name":"content","type":"boolean","required":false,"description":"Append source code content"}]},{"gateway":"query","domain":"nexus","operation":"projects.list","description":"nexus.projects.list (query) — list all projects registered in the global nexus registry","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"projects.register","description":"nexus.projects.register (mutate) — register a project in the global nexus registry","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["path"],"params":[{"name":"path","type":"string","required":true,"description":"Path to the project directory","cli":{"positional":true}},{"name":"name","type":"string","required":false,"description":"Custom project name"}]},{"gateway":"mutate","domain":"nexus","operation":"projects.remove","description":"nexus.projects.remove (mutate) — remove a project from the global nexus registry","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["nameOrHash"],"params":[{"name":"nameOrHash","type":"string","required":true,"description":"Project name or hash to remove","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"projects.scan","description":"nexus.projects.scan (mutate) — walk filesystem roots to discover unregistered .cleo/ project directories","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"roots","type":"string","required":false,"description":"Comma-separated search roots"},{"name":"maxDepth","type":"number","required":false,"description":"Maximum traversal depth (default: 4)"},{"name":"autoRegister","type":"boolean","required":false,"description":"Auto-register discovered projects"},{"name":"includeExisting","type":"boolean","required":false,"description":"Also report already-registered projects"}]},{"gateway":"mutate","domain":"nexus","operation":"projects.clean","description":"nexus.projects.clean (mutate) — bulk-purge project registry rows matching configurable criteria","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dryRun","type":"boolean","required":false,"description":"Dry-run only (no deletions)"},{"name":"pattern","type":"string","required":false,"description":"JS regex matched against project_path"},{"name":"includeTemp","type":"boolean","required":false,"description":"Match .temp/ paths"},{"name":"includeTests","type":"boolean","required":false,"description":"Match test/tmp/fixture paths"},{"name":"matchUnhealthy","type":"boolean","required":false,"description":"Match unhealthy rows"},{"name":"matchNeverIndexed","type":"boolean","required":false,"description":"Match never-indexed rows"},{"name":"matchOrphaned","type":"boolean","required":false,"description":"Match rows whose project_path no longer exists on disk (T9117)"},{"name":"removeFs","type":"boolean","required":false,"description":"After DB delete, rm -rf each matched on-disk directory (T9117)"},{"name":"vacuum","type":"boolean","required":false,"description":"After delete, run sqlite VACUUM on nexus.db to reclaim space (T9117)"}]},{"gateway":"mutate","domain":"nexus","operation":"refresh-bridge","description":"nexus.refresh-bridge (mutate) — regenerate .cleo/nexus-bridge.md from the existing nexus.db index","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd)"},{"name":"projectId","type":"string","required":false,"description":"Override project ID"}]},{"gateway":"query","domain":"nexus","operation":"diff","description":"nexus.diff (query) — compare NEXUS index state between two git commits; shows new/removed relations and broken call chains","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"beforeRef","type":"string","required":false,"description":"Git ref for \\"before\\" snapshot (default: HEAD~1)"},{"name":"afterRef","type":"string","required":false,"description":"Git ref for \\"after\\" snapshot (default: HEAD)"},{"name":"repoPath","type":"string","required":false,"description":"Repository path (default: cwd)"},{"name":"projectId","type":"string","required":false,"description":"Override project ID"}]},{"gateway":"query","domain":"nexus","operation":"query-cte","description":"nexus.query-cte (query) — execute a recursive CTE query against nexus.db; supports template aliases (callers-of, callees-of, co-changed, co-cited, path-between, community-members)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["cte"],"params":[{"name":"cte","type":"string","required":true,"description":"CTE SQL or template alias","cli":{"positional":true}},{"name":"params","type":"string","required":false,"description":"Comma-separated CTE parameters"}]},{"gateway":"query","domain":"nexus","operation":"hot-paths","description":"nexus.hot-paths (query) — list highest-weight relation edges by Hebbian plasticity weight","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum edges to return (default: 20)"}]},{"gateway":"query","domain":"nexus","operation":"hot-nodes","description":"nexus.hot-nodes (query) — list symbols with highest aggregate Hebbian weight","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return (default: 20)"}]},{"gateway":"query","domain":"nexus","operation":"cold-symbols","description":"nexus.cold-symbols (query) — list cold symbols (stale access + low weight) as pruning candidates","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"days","type":"number","required":false,"description":"Age threshold in days (default: 30)"}]},{"gateway":"query","domain":"sticky","operation":"list","description":"sticky.list (query) — list sticky notes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"sticky","operation":"show","description":"sticky.show (query) — show a specific sticky note","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["stickyId"],"params":[{"name":"stickyId","type":"string","required":true,"description":"stickyId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sticky","operation":"add","description":"sticky.add (mutate) — create a new sticky note","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["content"],"params":[{"name":"content","type":"string","required":true,"description":"content parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sticky","operation":"convert","description":"sticky.convert (mutate) — convert sticky to task, memory, task_note, or session_note","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["stickyId","targetType"],"params":[{"name":"stickyId","type":"string","required":true,"description":"ID of the sticky note"},{"name":"targetType","type":"string","required":true,"description":"Target type: task, memory, task_note, or session_note"},{"name":"title","type":"string","required":false,"description":"Optional task title (for task conversion)"},{"name":"memoryType","type":"string","required":false,"description":"Optional memory type (for memory conversion)"},{"name":"taskId","type":"string","required":false,"description":"Target task ID (required for task_note conversion)"},{"name":"sessionId","type":"string","required":false,"description":"Target session ID (optional for session_note conversion, defaults to active session)"}]},{"gateway":"mutate","domain":"sticky","operation":"archive","description":"sticky.archive (mutate) — archive sticky notes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["stickyId"],"params":[{"name":"stickyId","type":"string","required":true,"description":"stickyId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sticky","operation":"purge","description":"sticky.purge (mutate) — permanently delete sticky notes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["stickyId"],"params":[{"name":"stickyId","type":"string","required":true,"description":"stickyId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"orchestrate","operation":"classify","description":"orchestrate.classify (query) — classify a request against CANT team registry to route to correct team/lead/protocol","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["request"],"params":[{"name":"request","type":"string","required":true,"description":"The request or task description to classify against team consult-when hints"},{"name":"context","type":"string","required":false,"description":"Optional additional context to improve classification accuracy"}]},{"gateway":"query","domain":"orchestrate","operation":"fanout.status","description":"orchestrate.fanout.status (query) — get status of a running fanout by its manifest entry ID","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["manifestEntryId"],"params":[{"name":"manifestEntryId","type":"string","required":true,"description":"Manifest entry ID returned by orchestrate.fanout"}]},{"gateway":"mutate","domain":"orchestrate","operation":"fanout","description":"orchestrate.fanout (mutate) — fan out N spawn requests in parallel via Promise.allSettled","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["items"],"params":[{"name":"items","type":"array","required":true,"description":"Array of {team, taskId, skill?} objects to fan out"}]},{"gateway":"query","domain":"conduit","operation":"status","description":"conduit.status (query) — check agent connection status and unread count","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"agentId","type":"string","required":false,"description":"Agent ID to check (defaults to active agent)"}]},{"gateway":"query","domain":"conduit","operation":"peek","description":"conduit.peek (query) — one-shot poll for new messages without acking","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"agentId","type":"string","required":false,"description":"Agent ID to poll as (defaults to active agent)"},{"name":"limit","type":"number","required":false,"description":"Max messages to fetch (default: 20)"}]},{"gateway":"mutate","domain":"conduit","operation":"start","description":"conduit.start (mutate) — start continuous message polling for the active agent","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"agentId","type":"string","required":false,"description":"Agent ID to poll as (defaults to active agent)"},{"name":"pollIntervalMs","type":"number","required":false,"description":"Poll interval in milliseconds (default: 5000)"},{"name":"groupConversationIds","type":"array","required":false,"description":"Group conversation IDs to monitor for @mentions"}]},{"gateway":"mutate","domain":"conduit","operation":"stop","description":"conduit.stop (mutate) — stop the active polling loop","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"conduit","operation":"send","description":"conduit.send (mutate) — send a message to an agent or conversation","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["content"],"params":[{"name":"to","type":"string","required":false,"description":"Target agent ID (required if no conversationId)"},{"name":"conversationId","type":"string","required":false,"description":"Target conversation ID (required if no to)"},{"name":"content","type":"string","required":true,"description":"Message content to send"},{"name":"agentId","type":"string","required":false,"description":"Send as this agent (defaults to active agent)"}]},{"gateway":"mutate","domain":"conduit","operation":"publish","description":"conduit.publish (mutate) — publish message to a topic (A2A, T1252)","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["topicName","payload"],"params":[{"name":"topicName","type":"string","required":true,"description":"Topic to publish to"},{"name":"payload","type":"string","required":true,"description":"Message payload (JSON-stringified object)"},{"name":"agentId","type":"string","required":false,"description":"Publish as this agent (defaults to active agent)"}]},{"gateway":"mutate","domain":"conduit","operation":"subscribe","description":"conduit.subscribe (mutate) — subscribe agent to a topic (A2A, T1252)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["topicName"],"params":[{"name":"topicName","type":"string","required":true,"description":"Topic to subscribe to"},{"name":"agentId","type":"string","required":false,"description":"Agent to subscribe (defaults to active agent)"},{"name":"filter","type":"string","required":false,"description":"Optional filter expression (JSON-stringified) for subscription"}]},{"gateway":"query","domain":"conduit","operation":"listen","description":"conduit.listen (query) — one-shot poll for topic messages (A2A, T1252)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["topicName"],"params":[{"name":"topicName","type":"string","required":true,"description":"Topic to poll"},{"name":"agentId","type":"string","required":false,"description":"Agent to poll as (defaults to active agent)"},{"name":"max","type":"number","required":false,"description":"Max messages to return (default: 20)"}]},{"gateway":"query","domain":"intelligence","operation":"predict","description":"Calculate risk score for a task, or predict validation outcome for a stage","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to assess"},{"name":"stage","type":"string","required":false,"description":"Lifecycle stage for validation outcome prediction"}]},{"gateway":"query","domain":"intelligence","operation":"suggest","description":"Suggest verification gate focus for a task","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to analyze"}]},{"gateway":"query","domain":"intelligence","operation":"learn-errors","description":"Extract recurring failure patterns from task and brain history","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum number of patterns to return"}]},{"gateway":"query","domain":"intelligence","operation":"confidence","description":"Score verification confidence for a task based on current gate state","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to score"}]},{"gateway":"query","domain":"intelligence","operation":"match","description":"Match known brain patterns against a task","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to match patterns against"}]},{"gateway":"query","domain":"diagnostics","operation":"status","description":"diagnostics.status (query) — show telemetry opt-in state and DB path","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"diagnostics","operation":"analyze","description":"diagnostics.analyze (query) — aggregate telemetry patterns; surface failing/slow commands and generate BRAIN observations","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"days","type":"number","required":false,"description":"Analysis window in days (default: 30)","cli":{"flag":"days","short":"-d"}},{"name":"noBrain","type":"boolean","required":false,"description":"Skip pushing observations to BRAIN","cli":{"flag":"no-brain"}}]},{"gateway":"query","domain":"diagnostics","operation":"export","description":"diagnostics.export (query) — JSON dump of all telemetry events","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"days","type":"number","required":false,"description":"Limit export to last N days (default: all)","cli":{"flag":"days","short":"-d"}}]},{"gateway":"mutate","domain":"diagnostics","operation":"enable","description":"diagnostics.enable (mutate) — opt in to anonymous command telemetry; generates stable anonymousId","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"diagnostics","operation":"disable","description":"diagnostics.disable (mutate) — opt out of telemetry collection","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"docs","operation":"add","description":"docs.add (mutate) — attach a local file, URL, or inline content to a CLEO owner entity (task, session, observation)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["ownerId"],"params":[{"name":"ownerId","type":"string","required":true,"description":"Owner entity ID (e.g. T123, ses_*, O-abc)"},{"name":"file","type":"string","required":false,"description":"Path to local file to attach"},{"name":"url","type":"string","required":false,"description":"Remote URL to attach"},{"name":"content","type":"string","required":false,"description":"Inline document body (T10965); mutually exclusive with file/url"},{"name":"desc","type":"string","required":false,"description":"Free-text description"},{"name":"labels","type":"string","required":false,"description":"Comma-separated labels"},{"name":"attachedBy","type":"string","required":false,"description":"Agent identity (defaults to \\"human\\")"}]},{"gateway":"query","domain":"docs","operation":"list","description":"docs.list (query) — list attachments associated with a CLEO owner entity","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"task","type":"string","required":false,"description":"Filter by task ID (e.g. T123)"},{"name":"session","type":"string","required":false,"description":"Filter by session ID (e.g. ses_*)"},{"name":"observation","type":"string","required":false,"description":"Filter by observation ID (e.g. O-abc)"}]},{"gateway":"query","domain":"docs","operation":"fetch","description":"docs.fetch (query) — retrieve attachment bytes and metadata by attachment ID or SHA-256","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["attachmentRef"],"params":[{"name":"attachmentRef","type":"string","required":true,"description":"Attachment ID (att_*) or SHA-256 hex"}]},{"gateway":"mutate","domain":"docs","operation":"remove","description":"docs.remove (mutate) — remove an attachment ref from an owner; purges blob when refCount reaches zero","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["attachmentRef","from"],"params":[{"name":"attachmentRef","type":"string","required":true,"description":"Attachment ID (att_*) or SHA-256 hex"},{"name":"from","type":"string","required":true,"description":"Owner entity ID to remove the ref from"}]},{"gateway":"mutate","domain":"docs","operation":"supersede","description":"docs.supersede (mutate) — atomically flip an older doc to \`superseded\` and link both rows via the supersedes/superseded_by self-FK pointers (T10162 · Saga T9855)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["oldSlug","newSlug"],"params":[{"name":"oldSlug","type":"string","required":true,"description":"Slug of the doc being replaced","cli":{"positional":true}},{"name":"newSlug","type":"string","required":true,"description":"Slug of the doc that replaces oldSlug","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Optional human-readable reason carried back on the response"}]},{"gateway":"query","domain":"docs","operation":"generate","description":"docs.generate (query) — generate llms.txt-format doc summarising all attachments on a CLEO entity","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["for"],"params":[{"name":"for","type":"string","required":true,"description":"Target entity ID (e.g. T798, ses_*, O-abc)"},{"name":"attach","type":"boolean","required":false,"description":"Save the generated output as an llms-txt attachment on the target entity"}]},{"gateway":"query","domain":"docs","operation":"llm-output","description":"docs.llm-output (query) — unified LLM output: task export (rich Markdown) or attachment-bundle (llms.txt). Replaces \`docs export\` and \`docs generate\`.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["for"],"params":[{"name":"for","type":"string","required":true,"description":"Target entity ID"},{"name":"mode","type":"string","required":false,"description":"Output mode: task-export|attachment-bundle (auto-detected)"},{"name":"out","type":"string","required":false,"description":"Output file path"},{"name":"includeAttachments","type":"boolean","required":false,"description":"Include attachment manifest (task-export)"},{"name":"includeMemoryRefs","type":"boolean","required":false,"description":"Include memory refs (task-export)"},{"name":"attach","type":"boolean","required":false,"description":"Save as llms-txt attachment (attachment-bundle)"}]},{"gateway":"mutate","domain":"docs","operation":"update","description":"docs.update (mutate) — replace blob content for an existing slug while preserving the slug. New sha256 + new attachment row; the old row stays reachable by ID for history. NO supersession edge (use \`cleo docs supersede\` for that). Audit log entry appended to .cleo/audit/docs-versioning.jsonl (squashed within a 5-min window).","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["slug"],"params":[{"name":"slug","type":"string","required":true,"description":"Slug of the existing attachment to update","cli":{"positional":true}},{"name":"file","type":"string","required":false,"description":"Path to a local file containing the new content"},{"name":"allowExternal","type":"boolean","required":false,"description":"Permit --file to resolve outside the canonical project root; required for explicit external/worktree update ingestion.","cli":{"flag":"allow-external"}},{"name":"content","type":"string","required":false,"description":"Inline UTF-8 content (mutually exclusive with file)"},{"name":"message","type":"string","required":false,"description":"One-line summary describing the change (recorded in the audit log)"},{"name":"status","type":"string","required":false,"enum":["draft","proposed","accepted","superseded","archived","deprecated"],"description":"Override the new lifecycle status. Defaults to \\"draft\\" on every update. Valid: draft|proposed|accepted|superseded|archived|deprecated."},{"name":"dryRun","type":"boolean","required":false,"description":"Preview validation and resulting envelope without mutating attachment rows, blob storage, or audit logs.","cli":{"flag":"dry-run"}},{"name":"strict","type":"boolean","required":false,"description":"Fail body-schema diagnostics instead of surfacing advisory warnings before the write."},{"name":"attachedBy","type":"string","required":false,"description":"Agent identity that performed the update (defaults to \\"human\\")","cli":{"flag":"attached-by"}}]},{"gateway":"mutate","domain":"playbook","operation":"run","description":"playbook.run (mutate) — load a .cantbook by name and execute it via the playbook runtime state machine","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"Playbook name (looks up <name>.cantbook in the configured search path)","cli":{"positional":true}},{"name":"context","type":"string","required":false,"description":"JSON object string seeding the initial run context (e.g. {\\"epicId\\":\\"T999\\"})"}]},{"gateway":"query","domain":"playbook","operation":"status","description":"playbook.status (query) — return the current state of a playbook run from playbook_runs","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Playbook run identifier (FK into playbook_runs.run_id)","cli":{"positional":true}}]},{"gateway":"mutate","domain":"playbook","operation":"resume","description":"playbook.resume (mutate) — resume a paused playbook run once its HITL gate is approved","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Playbook run identifier to resume","cli":{"positional":true}}]},{"gateway":"query","domain":"playbook","operation":"list","description":"playbook.list (query) — enumerate playbook runs with optional status filter (active|completed|pending)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"status","type":"string","required":false,"description":"Filter on status (active|running|pending|paused|completed|failed|cancelled)"},{"name":"epicId","type":"string","required":false,"description":"Filter runs by the epic they belong to"},{"name":"limit","type":"number","required":false,"description":"Maximum number of runs to return"},{"name":"offset","type":"number","required":false,"description":"Skip the first N runs (applied after limit)"}]},{"gateway":"query","domain":"playbook","operation":"validate","description":"playbook.validate (query) — parse and validate a .cantbook file without executing it; exit 0 on success, exit 70 on parse error","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"file","type":"string","required":false,"description":"Absolute or relative path to the .cantbook file","cli":{"positional":true}},{"name":"name","type":"string","required":false,"description":"Playbook name (resolved through the standard search path)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"approve","description":"orchestrate.approve (mutate) — approve a pending playbook approval gate to unblock the run","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["resumeToken"],"params":[{"name":"resumeToken","type":"string","required":true,"description":"HMAC-signed resume token returned when the gate was created","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Optional justification note recorded on the approval row"},{"name":"approver","type":"string","required":false,"description":"Identity of the approver (defaults to cli-user)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"reject","description":"orchestrate.reject (mutate) — reject a pending playbook approval gate with a mandatory reason","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["resumeToken","reason"],"params":[{"name":"resumeToken","type":"string","required":true,"description":"HMAC-signed resume token returned when the gate was created","cli":{"positional":true}},{"name":"reason","type":"string","required":true,"description":"Justification for the rejection (recorded on the audit row)"},{"name":"approver","type":"string","required":false,"description":"Identity of the rejector (defaults to cli-user)"}]},{"gateway":"query","domain":"orchestrate","operation":"pending","description":"orchestrate.pending (query) — list all approval gates awaiting a decision across every run","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"worktree.complete","description":"orchestrate.worktree.complete (mutate) — merge (--no-ff) a task worktree branch into the project default branch (preserves agent commit SHAs per ADR-062) and clean up the worktree. T9548: idempotent (re-run on completed worktree = no-op).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose worktree should be merged and cleaned up"},{"name":"resolve","type":"string","required":false,"description":"T9548 conflict-recovery mode: \\"auto\\" (default — attempt git merge --no-ff) or \\"manual\\" (skip merge, mark worktree as manually-handled in audit log)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"worktree.cleanup","description":"orchestrate.worktree.cleanup (mutate) — prune orphaned agent worktrees (e.g. after agent crash or session end)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"olderThanHours","type":"number","required":false,"description":"Remove worktrees idle for longer than this many hours (default: 24)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"worktree.prune","description":"orchestrate.worktree.prune (mutate) — prune the worktree for a single completed task, or all orphaned worktrees when no taskId is supplied","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"taskId","type":"string","required":false,"description":"Task ID whose worktree should be pruned (omit for bulk prune)"}]},{"gateway":"query","domain":"sentient","operation":"status","description":"sentient.status (query) — daemon state, kill-switch status, Tier-2 enabled flag, and proposal statistics","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[],"mcpExposed":true},{"gateway":"query","domain":"sentient","operation":"propose.list","description":"sentient.propose.list (query) — list all pending Tier-2 proposals (status=proposed)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum number of proposals to return (default: 50)"}],"mcpExposed":true},{"gateway":"query","domain":"sentient","operation":"propose.diff","description":"sentient.propose.diff (query) — show what a proposal would change (Tier-3 stub)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Proposal task ID","cli":{"positional":true}}]},{"gateway":"query","domain":"sentient","operation":"allowlist.list","description":"sentient.allowlist.list (query) — list owner pubkeys in the sentient allowlist","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"sentient","operation":"propose.accept","description":"sentient.propose.accept (mutate) — accept a Tier-2 proposal, transitioning proposed → pending","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Proposal task ID to accept","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sentient","operation":"propose.reject","description":"sentient.propose.reject (mutate) — reject a Tier-2 proposal, transitioning proposed → cancelled","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Proposal task ID to reject","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Human-readable reason for rejection"}]},{"gateway":"mutate","domain":"sentient","operation":"propose.run","description":"sentient.propose.run (mutate) — manually trigger a single Tier-2 propose tick in-process","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"sentient","operation":"propose.enable","description":"sentient.propose.enable (mutate) — enable Tier-2 autonomous proposal generation (M7 gate)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[],"mcpExposed":true},{"gateway":"mutate","domain":"sentient","operation":"propose.disable","description":"sentient.propose.disable (mutate) — disable Tier-2 autonomous proposal generation","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"sentient","operation":"allowlist.add","description":"sentient.allowlist.add (mutate) — add a base64-encoded owner pubkey to the sentient allowlist","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pubkey"],"params":[{"name":"pubkey","type":"string","required":true,"description":"Base64-encoded public key to add"}]},{"gateway":"mutate","domain":"sentient","operation":"allowlist.remove","description":"sentient.allowlist.remove (mutate) — remove a base64-encoded owner pubkey from the sentient allowlist","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pubkey"],"params":[{"name":"pubkey","type":"string","required":true,"description":"Base64-encoded public key to remove"}]},{"gateway":"query","domain":"release","operation":"gate","description":"release.gate (query) — check all IVTR loops in a release epic have reached the released phase before allowing release.ship (T820 RELEASE-03)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID whose child tasks should be inspected"},{"name":"force","type":"boolean","required":false,"description":"Bypass the IVTR gate — requires explicit owner confirmation"}]},{"gateway":"mutate","domain":"release","operation":"gate","description":"release.gate (mutate) — same IVTR gate check as query.gate; safe in both gateways (no DB writes)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID whose child tasks should be inspected"},{"name":"force","type":"boolean","required":false,"description":"Bypass the IVTR gate — requires explicit owner confirmation"}]},{"gateway":"query","domain":"release","operation":"ivtr-suggest","description":"release.ivtr-suggest (query) — check if all epic tasks are released and suggest cleo release ship (T820 RELEASE-07)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID that just reached the released phase"}]},{"gateway":"mutate","domain":"release","operation":"ivtr-suggest","description":"release.ivtr-suggest (mutate) — same auto-suggest as query.ivtr-suggest; safe in both gateways (no DB writes)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID that just reached the released phase"}]},{"gateway":"mutate","domain":"release","operation":"plan","description":"release.plan (mutate) — build canonical Release Plan envelope, write .cleo/release/<version>.plan.json, INSERT/UPDATE releases row status=planned (T9525 / SPEC-T9345 §4.2).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Candidate version (e.g. v2026.5.80)"},{"name":"epicId","type":"string","required":false,"description":"Epic task ID whose children scope the release (R-303); mutually exclusive with sagaId/taskIds"},{"name":"sagaId","type":"string","required":false,"description":"Saga task ID whose grouped member Epics scope the release; mutually exclusive with epicId/taskIds"},{"name":"taskIds","type":"array","required":false,"description":"Explicit task-list release scope; mutually exclusive with epicId/sagaId (T10088)"},{"name":"scheme","type":"string","required":false,"description":"Versioning scheme: calver | semver | calver-suffix"},{"name":"channel","type":"string","required":false,"description":"Release channel: latest | beta | alpha | rc"},{"name":"hotfix","type":"boolean","required":false,"description":"Mark plan as release_kind=hotfix"},{"name":"dryRun","type":"boolean","required":false,"description":"Compute the plan without writing file or DB row"}]},{"gateway":"mutate","domain":"release","operation":"open","description":"release.open (mutate) — dispatch release-prepare.yml via gh workflow run, UPDATE releases.status to pr-opened (T9530 / SPEC-T9345 §4.3).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Release version whose plan file lives at .cleo/release/<version>.plan.json"},{"name":"workflow","type":"string","required":false,"description":"Workflow file name (default: release-prepare.yml)"},{"name":"watch","type":"boolean","required":false,"description":"Poll gh run watch until terminal state"},{"name":"commitPlan","type":"boolean","required":false,"description":"Commit plan file before dispatching"}]},{"gateway":"mutate","domain":"release","operation":"reconcile","description":"release.reconcile (mutate) — v2 reconcile verb: backfill the 11 provenance tables from git log + gh api. Single SQLite TX, UPSERT-everywhere, idempotent (T9526 / SPEC-T9345 §4.4).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Version string whose tag has landed on main (e.g. v2026.6.0)"},{"name":"fromWorkflow","type":"boolean","required":false,"description":"Indicates invocation from release-publish.yml (affects logging only)"},{"name":"rollback","type":"boolean","required":false,"description":"Reconcile a rollback rather than a publish (deferred to T9528)"}]},{"gateway":"query","domain":"release","operation":"validate-changelog","description":"release.validate-changelog (query) — validate that CHANGELOG.md contains the canonical \`## [VERSION]\` header per ADR-028 §2.5. Replaces the brittle inline grep in .github/workflows/release.yml (T9937 / Saga T9862).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Release version (accepts v2026.5.94 or 2026.5.94)","cli":{"positional":true}},{"name":"changelogPath","type":"string","required":false,"description":"Override the CHANGELOG file path (default: <projectRoot>/CHANGELOG.md)"}]},{"gateway":"mutate","domain":"provenance","operation":"backfill","description":"provenance.backfill (mutate) — walk historical git tags from --since forward and populate the 11 provenance tables. UPSERT-everywhere, idempotent, restartable via .cleo/release/backfill-state.json (T9528 / SPEC-T9345 §8.3).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["since"],"params":[{"name":"since","type":"string","required":true,"allowEmpty":true,"description":"Lower-bound version (exclusive). Empty string = walk every reachable tag from the beginning of history."},{"name":"forceOverwrite","type":"boolean","required":false,"description":"UPDATE existing rows on conflict (audit-logged). Default: UPSERT only."},{"name":"dryRun","type":"boolean","required":false,"description":"Enumerate the tag set and return the plan without writing to the DB"},{"name":"resetCheckpoint","type":"boolean","required":false,"description":"Clear .cleo/release/backfill-state.json before starting (do NOT resume)"}]},{"gateway":"query","domain":"provenance","operation":"verify","description":"provenance.verify (query) — READ-ONLY audit of the 11 provenance tables for a release. Checks FK integrity (release_commits, task_commits, pr_commits, pr_tasks, release_changes, release_artifacts), orphan rows, and ADR-051 evidence-atom staleness. Exit code 0 on pass, non-zero on any fail (T9529 / SPEC-T9345 §4.6).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"version","type":"string","required":false,"description":"Release version to verify (e.g. v2026.6.0). Required unless --all is set."},{"name":"all","type":"boolean","required":false,"description":"Verify the most-recent N releases instead of a single version"},{"name":"limit","type":"number","required":false,"description":"How many releases to verify in --all mode (default 5)"}]},{"gateway":"query","domain":"llm","operation":"list","description":"llm.list (query) — list redacted credentials from the multi-credential pool, optionally filtered by provider","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Filter to a single provider transport"}]},{"gateway":"query","domain":"llm","operation":"test","description":"llm.test (query) — round-trip ping against the resolved provider; returns latency + response id (tokens never surfaced)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport to probe","cli":{"positional":true}},{"name":"label","type":"string","required":false,"description":"Credential label to pin the test to a specific store entry"},{"name":"model","type":"string","required":false,"description":"Model override (defaults to the provider's implicit fallback)"}]},{"gateway":"query","domain":"llm","operation":"whoami","description":"llm.whoami (query) — resolve every role and report which provider / model / credential would be picked","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"role","type":"string","required":false,"description":"Optional role filter (extraction | consolidation | derivation | hygiene | judgement)"}]},{"gateway":"query","domain":"llm","operation":"auxiliary-status","description":"llm.auxiliary-status (query) — show the active multi-provider auxiliary fallback chain and how to configure it (T9319)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectRoot","type":"string","required":false,"description":"Optional project root for config resolution"}]},{"gateway":"mutate","domain":"llm","operation":"add","description":"llm.add (mutate) — upsert a credential into the multi-credential pool; auto-detects authType from token prefix","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","apiKey"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport","cli":{"positional":true}},{"name":"apiKey","type":"string","required":true,"description":"API key or OAuth bearer token to persist"},{"name":"label","type":"string","required":false,"description":"Human-readable label, unique within provider (default: 'default')"},{"name":"baseUrl","type":"string","required":false,"description":"Optional override for the provider base URL"},{"name":"authType","type":"string","required":false,"description":"Explicit auth type override ('api_key' | 'oauth' | 'aws_sdk')"},{"name":"priority","type":"number","required":false,"description":"Optional priority override (lower wins)"}]},{"gateway":"mutate","domain":"llm","operation":"remove","description":"llm.remove (mutate) — delete a (provider, label) credential pair from the pool","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider","label"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport","cli":{"positional":true}},{"name":"label","type":"string","required":true,"description":"Label of the credential to remove"}]},{"gateway":"mutate","domain":"llm","operation":"use","description":"llm.use (mutate) — set llm.default.{provider,model} in the global config","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport to mark as default","cli":{"positional":true}},{"name":"model","type":"string","required":false,"description":"Optional default model identifier"}]},{"gateway":"mutate","domain":"llm","operation":"profile","description":"llm.profile (mutate) — pin a role to a specific provider / model / credential label","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["role","provider"],"params":[{"name":"role","type":"string","required":true,"description":"Role name (extraction | consolidation | derivation | hygiene | judgement)","cli":{"positional":true}},{"name":"provider","type":"string","required":true,"description":"Provider transport for this role","cli":{"positional":true}},{"name":"model","type":"string","required":false,"description":"Optional model identifier for this role"},{"name":"credentialLabel","type":"string","required":false,"description":"Optional credential label to pin this role to a specific store entry"}]},{"gateway":"query","domain":"upgrade","operation":"workflows","description":"upgrade.workflows (query) — re-render the four release-pipeline workflow templates and report drift against .github/workflows/release-*.yml. Read-only (forces dryRun). Honours .workflow-overrides.yml for operator-declared customizations (T9536).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"includeRendered","type":"boolean","required":false,"description":"Include the freshly rendered YAML in the response (for diff display)"}]},{"gateway":"mutate","domain":"upgrade","operation":"workflows","description":"upgrade.workflows (mutate) — re-render the four release-pipeline workflow templates; with force=true, overwrite drifted files and audit-log to .cleo/audit/upgrade-workflows.jsonl. .workflow-overrides.yml entries are preserved (operator-declared customization). hasDrift flag in the response drives the --check exit-code contract (T9536).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"force","type":"boolean","required":false,"description":"Overwrite drifted files (excluding .workflow-overrides.yml keys)"},{"name":"dryRun","type":"boolean","required":false,"description":"Print the per-template diff without writing"},{"name":"includeRendered","type":"boolean","required":false,"description":"Include the freshly rendered YAML in the response (for diff display)"}]},{"gateway":"query","domain":"worktree","operation":"list","description":"worktree.list (query) — enumerate git worktrees with 5 status categories (active|stale|merged|orphan|locked). Reads tasks.db for owning-task status. 60s git timeout (T9546).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"statusFilter","type":"string","required":false,"description":"Filter to one or more status categories (comma-separated)"},{"name":"staleDays","type":"number","required":false,"description":"Days of inactivity before flagging stale (default 7)"}]},{"gateway":"mutate","domain":"worktree","operation":"prune","description":"worktree.prune (mutate) — remove orphaned worktrees with per-orphan confirmation. Audit-logs to .cleo/audit/worktree-lifecycle.jsonl (T9547).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"paths","type":"array","required":false,"description":"Pre-confirmed paths to remove"},{"name":"dryRun","type":"boolean","required":false,"description":"Enumerate orphans without acting"}]},{"gateway":"mutate","domain":"worktree","operation":"forceUnlock","description":"worktree.forceUnlock (mutate) — remove .git/index.lock and run git worktree unlock for a task. Warns on uncommitted changes (T9547).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose worktree (branch task/T<id>) to unlock"}]},{"gateway":"mutate","domain":"worktree","operation":"adopt","description":"worktree.adopt (mutate) — register an externally-created worktree (e.g. Claude Code Agent isolation:worktree) in the CLEO SSoT. Writes to .cleo/worktrees.json sentinel index and appends audit entry (T9804).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["worktreePath"],"params":[{"name":"worktreePath","type":"string","required":true,"description":"Absolute or relative path to the worktree directory to adopt"},{"name":"source","type":"string","required":false,"description":"Source classification (claude-agent | manual | adopted). Inferred from path when omitted."},{"name":"taskId","type":"string","required":false,"description":"Task ID to associate with this worktree. Extracted from branch name when omitted."},{"name":"actor","type":"string","required":false,"description":"Override actor name written to the audit log."}]},{"gateway":"mutate","domain":"worktree","operation":"destroy","description":"worktree.destroy (mutate) — explicitly destroy the XDG worktree for a task, remove its sentinel index entry, and append an audit-log row to .cleo/audit/worktree-lifecycle.jsonl (T9805 AC1).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose XDG worktree should be destroyed (e.g. T9805).","cli":{"positional":true}},{"name":"force","type":"boolean","required":false,"description":"Force removal even when the worktree has uncommitted changes. Default: false."},{"name":"deleteBranch","type":"boolean","required":false,"description":"Delete the task branch (task/T<id>) after removing the worktree. Default: true."},{"name":"reason","type":"string","required":false,"description":"Free-form reason recorded in the audit log (e.g. pr-merged, manual, idle-timeout). Default: manual."}]},{"gateway":"query","domain":"focus","operation":"show","description":"focus.show (query) — single-envelope orientation for a task, epic, or saga. Aggregates identity + scope + members + blockers + readyWave + attachedDocs + recentActivity + brainContext into ≤ 1 500 tokens.","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Task, Epic, or Saga ID to orient on (e.g. T9973, T9831)"}]},{"gateway":"mutate","domain":"attention","operation":"add","description":"attention.add (mutate · alias jot) — record a scope-keyed working-memory jot. Session/agent identity + current task are auto-resolved from the environment (E0); the item keys to the narrowest scope (agent>task>epic>saga>session>global). No session/agent/task flags by default.","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["content"],"params":[{"name":"content","type":"string","required":true,"description":"The jot content","cli":{"positional":true}},{"name":"tags","type":"array","required":false,"description":"Tags to attach (comma-separated on the CLI)"},{"name":"scope","type":"string","required":false,"description":"Explicit scope escalation: agent|task|epic|saga|session|global (default: narrowest)"},{"name":"ttlSeconds","type":"number","required":false,"description":"Optional time-to-live in seconds (sets expires_at)"}]},{"gateway":"query","domain":"attention","operation":"list","description":"attention.list (query) — list open working-memory jots visible to the calling agent across its resolved scope chain. Optional --scope / --tag filters.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Restrict to one scope kind: agent|task|epic|saga|session|global"},{"name":"tags","type":"array","required":false,"description":"Filter by tags (contains-ALL; comma-separated on the CLI)"},{"name":"includeAll","type":"boolean","required":false,"description":"Include non-open (consolidated/discarded) items too. Default: false"},{"name":"limit","type":"number","required":false,"description":"Maximum rows. Default: 50"}]},{"gateway":"query","domain":"attention","operation":"show","description":"attention.show (query) — synonym for attention.list; emits the open working-memory jots for the calling agent within token budget.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Restrict to one scope kind: agent|task|epic|saga|session|global"},{"name":"tags","type":"array","required":false,"description":"Filter by tags (contains-ALL; comma-separated on the CLI)"},{"name":"includeAll","type":"boolean","required":false,"description":"Include non-open items too. Default: false"},{"name":"limit","type":"number","required":false,"description":"Maximum rows. Default: 50"}]},{"gateway":"query","domain":"tasks","operation":"context","description":"tasks.context (query) — bounded context pack for a single task. Combines identity + acceptance criteria + blockers + attached docs + graph edges (from tasks.slice) + recent activity within a configurable token budget, with explicit omission tracking and expansion hints.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to build context for (e.g. T10629)","cli":{"positional":true}},{"name":"budgetTokens","type":"number","required":false,"description":"Maximum token budget for the returned pack. Default: 1500"},{"name":"includeAcceptance","type":"boolean","required":false,"description":"Include acceptance criteria in the pack. Default: true"},{"name":"includeBlockers","type":"boolean","required":false,"description":"Include blocker summary in the pack. Default: true"},{"name":"includeDocs","type":"boolean","required":false,"description":"Include attached docs in the pack. Default: true"},{"name":"includeEdges","type":"boolean","required":false,"description":"Include graph edges (upstream/downstream/siblings/related) in the pack. Default: true"},{"name":"includeActivity","type":"boolean","required":false,"description":"Include recent activity (audit log) in the pack. Default: true"},{"name":"activityLimit","type":"number","required":false,"description":"Maximum number of recent activity events. Default: 10"},{"name":"edgeDepth","type":"number","required":false,"description":"Maximum depth for graph edges when includeEdges is true. Default: 1"}]},{"gateway":"query","domain":"selfimprove","operation":"probe","description":"selfimprove.probe (query) — returns { probe: \\"ok\\", version: 1 } (health/version probe). Used by the seeded-code-regression scenario to validate the fix-gen pipeline (T11988).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"selfimprove","operation":"run","description":"selfimprove.run (mutate) — boot ONE sandbox, replay a canned dogfood scenario, diff vs golden; on regression emit ONE leased selfimprove_dhq row + ONE DRAFT PR. Default OFF — requires --execute (else DRY-RUN). Budget-capped + circuit-broken (T11889 / T11889-D).","tier":2,"idempotent":false,"sessionRequired":true,"requiredParams":["scenario"],"params":[{"name":"scenario","type":"string","required":true,"description":"Canned dogfood scenario name to replay (e.g. dhq-replay-find)"},{"name":"execute","type":"boolean","required":false,"description":"Permit mutation (leased DHQ UPSERT) + egress (draft PR). DEFAULT false ⇒ DRY-RUN (replay + diff + report only — no DB write, no PR)."},{"name":"dryRun","type":"boolean","required":false,"description":"Force DRY-RUN explicitly (no DB write, no PR). Equivalent to omitting --execute; the loop is default-OFF."},{"name":"backend","type":"string","required":false,"description":"Confinement backend preference: 'gondolin' (micro-VM; degrades to the in-process guarded env when VM infra is absent — the CI path) | 'guarded'. Default: gondolin."}]},{"gateway":"query","domain":"service","operation":"auth-url","description":"service.auth-url (query) — build a PKCE OAuth authorization URL for a service provider; returns the URL + the code verifier + state to round-trip into service.exchange.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key (e.g. github, google, notion) — must be in SERVICE_PROVIDERS."},{"name":"state","type":"string","required":false,"description":"Opaque CSRF state to embed; a random value is generated when omitted."},{"name":"scope","type":"string","required":false,"description":"Scope override (e.g. a BYOC custom scope). Defaults to the provider scope."},{"name":"redirectUri","type":"string","required":false,"description":"Redirect URI override. Defaults to the provider loopback redirect."}]},{"gateway":"mutate","domain":"service","operation":"exchange","description":"service.exchange (mutate) — exchange an OAuth authorization code (+ PKCE verifier) for tokens and PERSIST them encryptGlobal-encrypted into service_connections. Returns the non-secret connection identity.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","code","codeVerifier","redirectUri"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"code","type":"string","required":true,"description":"Authorization code from the redirect callback."},{"name":"codeVerifier","type":"string","required":true,"description":"PKCE code verifier from service.auth-url (round-tripped)."},{"name":"redirectUri","type":"string","required":true,"description":"Redirect URI used in service.auth-url (must match)."},{"name":"label","type":"string","required":false,"description":"Connection label, unique within the provider. Defaults to \\"default\\"."}]},{"gateway":"mutate","domain":"service","operation":"refresh","description":"service.refresh (mutate) — refresh a service connection access token honoring the per-provider RefreshConfig (Form/Json × Body/BasicAuth, plus github-app / service-account-jwt / client-credentials variants); re-encrypts + persists the new blob.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["agentId","provider","label"],"params":[{"name":"agentId","type":"string","required":true,"description":"Agent requesting the refresh (trust-gated)."},{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"label","type":"string","required":true,"description":"Connection label."},{"name":"approved","type":"boolean","required":false,"description":"Out-of-band manual-approval flag forwarded to the trust gate."}]},{"gateway":"mutate","domain":"service","operation":"self-heal","description":"service.self-heal (mutate) — resolve a service connection and, when its expires_at is past, transparently refresh + re-encrypt + persist; returns a fresh sealed-credential reference (agents never see a stale token).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["agentId","provider","label"],"params":[{"name":"agentId","type":"string","required":true,"description":"Agent requesting the connection (trust-gated)."},{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"label","type":"string","required":true,"description":"Connection label."},{"name":"approved","type":"boolean","required":false,"description":"Out-of-band manual-approval flag forwarded to the trust gate."}]},{"gateway":"mutate","domain":"service","operation":"connect","description":"service.connect (mutate) — connect a service credential: store an already-obtained token (--token) OR exchange an OAuth authorization code (--paste-code + --code-verifier + --redirect-uri). Persists the token blob encryptGlobal-encrypted; returns the NON-SECRET connection identity (never the token).","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key (e.g. github, google, notion)."},{"name":"label","type":"string","required":false,"description":"Connection label, unique within the provider. Defaults to 'default'."},{"name":"token","type":"string","required":false,"description":"Direct access token to store (token-direct mode). SECRET — never echoed."},{"name":"refreshToken","type":"string","required":false,"description":"Optional refresh token paired with --token. SECRET."},{"name":"expiresAt","type":"string","required":false,"description":"ISO-8601 access-token expiry (token-direct mode)."},{"name":"code","type":"string","required":false,"description":"OAuth authorization code from the redirect callback (paste-code mode)."},{"name":"codeVerifier","type":"string","required":false,"description":"PKCE code verifier from service.auth-url, round-tripped (paste-code mode)."},{"name":"redirectUri","type":"string","required":false,"description":"Redirect URI used in service.auth-url; must match (paste-code mode)."}]},{"gateway":"query","domain":"service","operation":"list","description":"service.list (query) — list service connections as NON-SECRET views (provider/label/status/scopes/expiresAt/hasCredentials). The decrypted token is NEVER surfaced.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter; lists all providers when omitted."}]},{"gateway":"mutate","domain":"service","operation":"revoke","description":"service.revoke (mutate) — DELETE a service connection and CASCADE its agent_service_grants. Returns the {count, deleted, grantsRemoved} envelope (count=0 when no such connection).","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","label"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"label","type":"string","required":true,"description":"Connection label to revoke."}]},{"gateway":"query","domain":"service","operation":"status","description":"service.status (query) — report connection health: each connection adds \`expired\` + \`needsRefresh\` booleans computed from expires_at. NON-SECRET; never surfaces a token.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter; reports all connections when omitted."}]},{"gateway":"mutate","domain":"account","operation":"add","description":"account.add (mutate) — store a pooled provider credential. SECRET-BEARING (cli-only): accepts an API key / OAuth token and persists it encrypted; returns the NON-SECRET redacted view (tokenPreview last-4 ONLY — never the raw secret).","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","token"],"params":[{"name":"provider","type":"string","required":true,"description":"LLM provider transport key (e.g. anthropic, openai).","cli":{"positional":true}},{"name":"token","type":"string","required":true,"description":"API key or OAuth bearer token to persist. SECRET — never echoed."},{"name":"label","type":"string","required":false,"description":"Account label, unique within the provider (default: 'default')."},{"name":"baseUrl","type":"string","required":false,"description":"Optional override for the provider base URL."},{"name":"authType","type":"string","required":false,"description":"Explicit auth-type override ('api_key' | 'oauth' | 'aws_sdk')."},{"name":"priority","type":"number","required":false,"description":"Optional priority override (lower wins)."}]},{"gateway":"query","domain":"account","operation":"list","description":"account.list (query) — list pooled accounts as NON-SECRET redacted views (provider/label/authType/tokenPreview). The decrypted secret is NEVER surfaced.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter; lists all providers when omitted."}]},{"gateway":"mutate","domain":"account","operation":"remove","description":"account.remove (mutate) — delete a (provider, label) account from the pool. Returns the {count, deleted} envelope (count=0 when absent — idempotent).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider","label"],"params":[{"name":"provider","type":"string","required":true,"description":"LLM provider transport key.","cli":{"positional":true}},{"name":"label","type":"string","required":true,"description":"Account label to remove."}]},{"gateway":"query","domain":"provider","operation":"list","description":"provider.list (query) — list every declarative provider as a NON-SECRET view (id/displayName/aliases/authMethods/modelsDevId) from the providers table.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"provider","operation":"show","description":"provider.show (query) — resolve ONE provider by id OR case-insensitive alias against the declarative alias index; returns the provider view + the id/alias matched.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider id OR a case-insensitive alias.","cli":{"positional":true}}]},{"gateway":"mutate","domain":"provider","operation":"connect","description":"provider.connect (mutate) — connect a provider by storing a token as one of its accounts (token-direct). SECRET-BEARING (cli-only): resolves the provider (id/alias) then delegates to the secret-bearing account write; returns the NON-SECRET account identity (never the raw token). OAuth flows route through \`cleo service\`.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider id or alias to connect.","cli":{"positional":true}},{"name":"token","type":"string","required":false,"description":"Direct API key / bearer token to store (token-direct mode). SECRET."},{"name":"label","type":"string","required":false,"description":"Account label to create (default: 'default')."},{"name":"authType","type":"string","required":false,"description":"Explicit auth-type override ('api_key' | 'oauth' | 'aws_sdk')."}]},{"gateway":"query","domain":"model","operation":"query","description":"model.query (query) — read the models.dev catalog (models_catalog table) newest-first by release date; optionally filtered by provider (models.dev id) and capped by --limit. Returns NON-SECRET catalog views.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter (models.dev id); queries all providers when omitted."},{"name":"limit","type":"number","required":false,"description":"Optional cap on the number of rows returned (newest-first)."}]},{"gateway":"query","domain":"model","operation":"show","description":"model.show (query) — resolve ONE catalog model by id; returns {found, model} (found=false when the id is absent — not an error).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["model"],"params":[{"name":"model","type":"string","required":true,"description":"Model id (catalog key) to resolve.","cli":{"positional":true}}]},{"gateway":"mutate","domain":"profile","operation":"create","description":"profile.create (mutate) — bind an account + model into a named, addressable profile. Validates the binding (the pinned account must exist; the model must be in the catalog) then persists into llm.profiles[name]. Returns {count, created, profile}.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["name","provider","model"],"params":[{"name":"name","type":"string","required":true,"description":"Profile name (the addressable handle).","cli":{"positional":true}},{"name":"provider","type":"string","required":true,"description":"Provider transport the bound account belongs to."},{"name":"model","type":"string","required":true,"description":"Model id to bind (validated against the catalog)."},{"name":"label","type":"string","required":false,"description":"Account label to pin (the credential binding). Validated to exist."},{"name":"role","type":"string","required":false,"description":"Optional role this profile occupies (extraction | consolidation | …)."}]},{"gateway":"query","domain":"profile","operation":"list","description":"profile.list (query) — list every named profile from llm.profiles (name + provider + model + optional credentialLabel).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"profile","operation":"pin","description":"profile.pin (mutate) — pin a role to a named profile (llm.roles[role].profile). The role must be a valid background role and the profile must already exist.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name","role"],"params":[{"name":"name","type":"string","required":true,"description":"Profile name to pin (must exist).","cli":{"positional":true}},{"name":"role","type":"string","required":true,"description":"Role to pin to this profile (extraction | consolidation | derivation | …)."}]},{"gateway":"mutate","domain":"profile","operation":"use","description":"profile.use (mutate) — set a named profile as the global default binding (llm.defaultProfile). The profile must already exist.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"Profile name to mark as default (must exist).","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"janitor.run","description":"admin.janitor.run (mutate) — run the janitor sweep: reap orphan processes, stop dead cleo-owned scopes, reclaim stale locks, prune tmp debris","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dryRun","type":"boolean","required":false,"description":"Report planned actions without mutating anything."},{"name":"gracePeriodMs","type":"number","required":false,"description":"Minimum age (ms) of an unregistered process before reap eligibility (default: 600000)."}]}]"`;
3
+ exports[`operations-registry > OPERATIONS snapshot — zero behavior change across relocation 1`] = `"[{"gateway":"query","domain":"tasks","operation":"show","description":"tasks.show (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"ID of the task to retrieve","cli":{"positional":true}},{"name":"history","type":"boolean","required":false,"description":"Include lifecycle stage history in the response"},{"name":"ivtr-history","type":"boolean","required":false,"description":"Include IVTR phase chain history in the response"},{"name":"relations","type":"boolean","required":false,"description":"Expand relation/doc lists while preserving compact MVI counts"}]},{"gateway":"query","domain":"tasks","operation":"traverse","description":"tasks.traverse (query) — WorkGraph traversal from a task root","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId","direction"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the traversal","cli":{"positional":true}},{"name":"direction","type":"string","required":true,"description":"Traversal direction to project from the root task","enum":["ancestors","descendants","upstream","downstream"]},{"name":"maxDepth","type":"number","required":false,"description":"Maximum traversal depth to include"},{"name":"includeRelations","type":"boolean","required":false,"description":"Include non-containment relation edges"},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor"},{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return"}]},{"gateway":"query","domain":"tasks","operation":"tree","description":"tasks.tree (query) — WorkGraph containment tree projection","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the tree projection","cli":{"positional":true}},{"name":"maxDepth","type":"number","required":false,"description":"Maximum containment depth to include"},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor"},{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return"}]},{"gateway":"query","domain":"tasks","operation":"rollup","description":"tasks.rollup (query) — WorkGraph direct and subtree status/type summary","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the rollup","cli":{"positional":true}},{"name":"expectedDirectRollup","type":"string","required":false,"description":"Optional serialized expected direct rollup for stale-projection diagnostics"}]},{"gateway":"query","domain":"tasks","operation":"frontier","description":"tasks.frontier (query) — WorkGraph ready and blocked frontier under a root","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the frontier","cli":{"positional":true}},{"name":"role","type":"string","required":false,"description":"Optional assignee/role lane filter"}]},{"gateway":"query","domain":"tasks","operation":"workgraph.audit","description":"tasks.workgraph.audit (query) — aggregate WorkGraph hierarchy/traversal/frontier/rollup diagnostics","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["rootId"],"params":[{"name":"rootId","type":"string","required":true,"description":"Root task ID for the WorkGraph audit","cli":{"positional":true}},{"name":"maxDepth","type":"number","required":false,"description":"Maximum descendant depth to include in audit projections"},{"name":"includeRelations","type":"boolean","required":false,"description":"Include relation-edge diagnostics in the audit result"},{"name":"cursor","type":"string","required":false,"description":"Opaque pagination cursor"},{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return in paginated audit projections"}]},{"gateway":"query","domain":"tasks","operation":"subscribe","description":"tasks.subscribe (query, streaming) — SSE stream of task/board lifecycle events (created/updated/deleted), optionally scoped to a saga/parent root","tier":2,"idempotent":true,"sessionRequired":false,"streaming":true,"requiredParams":[],"params":[{"name":"root","type":"string","required":false,"description":"Optional saga/parent task ID to scope the event stream to (omit for the whole board)"},{"name":"ticks","type":"number","required":false,"description":"Maximum number of event frames to emit before the terminal \`done\` frame (default: open-ended until client disconnect)"}]},{"gateway":"query","domain":"tasks","operation":"list","description":"tasks.list (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"parent","type":"string","required":false,"description":"Filter by parent task ID"},{"name":"status","type":"string","required":false,"description":"Filter by task status"},{"name":"priority","type":"string","required":false,"description":"Filter by task priority"},{"name":"type","type":"string","required":false,"description":"Filter by task type"},{"name":"phase","type":"string","required":false,"description":"Filter by task phase"},{"name":"label","type":"string","required":false,"description":"Filter by task label"},{"name":"children","type":"boolean","required":false,"description":"Limit parent queries to direct children"},{"name":"limit","type":"number","required":false,"description":"Maximum number of tasks to return"},{"name":"offset","type":"number","required":false,"description":"Number of filtered tasks to skip"},{"name":"compact","type":"boolean","required":false,"description":"Deprecated: request compact task rows for compatibility"}]},{"gateway":"query","domain":"tasks","operation":"find","description":"tasks.find (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"tree","description":"tasks.tree (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"blockers","description":"tasks.blockers (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"depends","description":"tasks.depends (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"deps.validate","description":"tasks.deps.validate (query) — validate dependency graph integrity for an epic or all tasks","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"epicId","type":"string","required":false,"description":"Scope validation to direct children of this epic (optional)"},{"name":"scope","type":"string","required":false,"description":"Which tasks to include: 'all', 'open', or 'critical' (default: 'all')"}]},{"gateway":"query","domain":"tasks","operation":"deps.tree","description":"tasks.deps.tree (query) — render dependency tree for an epic in text, mermaid, or json format","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID to visualize (required)"},{"name":"format","type":"string","required":false,"description":"Output format: 'text', 'mermaid', or 'json' (default: 'text')"}]},{"gateway":"query","domain":"tasks","operation":"analyze","description":"tasks.analyze (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"impact","description":"tasks.impact (query) — predict downstream effects of a free-text change description using keyword matching and reverse dependency graph traversal","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["change"],"params":[{"name":"change","type":"string","required":true,"description":"Free-text description of the proposed change (e.g. \\"Modify authentication flow\\")"},{"name":"matchLimit","type":"number","required":false,"description":"Maximum number of seed tasks to match by keyword (default: 5)"}]},{"gateway":"query","domain":"tasks","operation":"next","description":"tasks.next (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"plan","description":"Composite planning view with in-progress epics, ready tasks, blocked tasks, and open bugs (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"completion.list","description":"tasks.completion.list (query) — list typed completion criteria results","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to list completion criteria for","cli":{"positional":true}},{"name":"status","type":"string","required":false,"description":"Optional criterion status filter","enum":["satisfied","unsatisfied","waived","replaced"]},{"name":"kind","type":"string","required":false,"description":"Optional criterion kind filter","enum":["text","evidence_bound","child_task"]}]},{"gateway":"query","domain":"tasks","operation":"completion.evaluate","description":"tasks.completion.evaluate (query) — evaluate completion readiness with typed AC results","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to evaluate completion readiness for","cli":{"positional":true}},{"name":"includeContext","type":"boolean","required":false,"description":"Include bounded audit context pack"},{"name":"limit","type":"number","required":false,"description":"Maximum audit context events when context is included"},{"name":"since","type":"string","required":false,"description":"Lower ISO timestamp bound for audit context"},{"name":"relationDepth","type":"number","required":false,"description":"Related-task audit context depth"}]},{"gateway":"query","domain":"tasks","operation":"completion.explain","description":"tasks.completion.explain (query) — explain completion blockers and stale state","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to explain completion readiness for","cli":{"positional":true}},{"name":"includeContext","type":"boolean","required":false,"description":"Include bounded audit context pack"},{"name":"limit","type":"number","required":false,"description":"Maximum audit context events when context is included"},{"name":"since","type":"string","required":false,"description":"Lower ISO timestamp bound for audit context"},{"name":"relationDepth","type":"number","required":false,"description":"Related-task audit context depth"}]},{"gateway":"mutate","domain":"tasks","operation":"projection.repair","description":"tasks.projection.repair (mutate) — repair stale completion projection state with typed errors","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose completion projection should be repaired","cli":{"positional":true}},{"name":"dryRun","type":"boolean","required":false,"description":"Preview repair actions without writing projection state"}]},{"gateway":"query","domain":"tasks","operation":"relates","description":"tasks.relates (query) — absorbs relates.find via mode param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"tasks","operation":"complexity.estimate","description":"tasks.complexity.estimate (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"tasks","operation":"history","description":"Show task work history (time tracked per task)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"current","description":"tasks.current (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"label.list","description":"List all labels with task counts","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"status","description":"session.status (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"list","description":"session.list (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"status","type":"string","required":false,"description":"Filter by session status"},{"name":"active","type":"boolean","required":false,"description":"Legacy active-session filter"},{"name":"limit","type":"number","required":false,"description":"Maximum sessions to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many sessions before returning results"}]},{"gateway":"query","domain":"session","operation":"show","description":"session.show (query) — absorbs debrief.show via include param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"decision.log","description":"session.decision.log (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"context.drift","description":"session.context.drift (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"handoff.show","description":"session.handoff.show - Show handoff data from the most recent ended session (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"briefing.show","description":"session.briefing.show - Composite session-start context (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"find","description":"session.find (query) — lightweight session discovery","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"session","operation":"lint","description":"session.lint (query) — agent-accountability harness: flag raw-md writes to canonical doc paths in a transcript (T9797)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["transcript"],"params":[{"name":"transcript","type":"string","required":true,"description":"Absolute path to the *.jsonl session transcript to lint"}]},{"gateway":"query","domain":"orchestrate","operation":"status","description":"orchestrate.status (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"events","description":"orchestrate.events (query, streaming) — SSE stream of agent/worker/board lifecycle events","tier":2,"idempotent":true,"sessionRequired":false,"streaming":true,"requiredParams":[],"params":[{"name":"ticks","type":"number","required":false,"description":"Maximum number of event frames to emit before the terminal \`done\` frame (default: open-ended until client disconnect)"}]},{"gateway":"query","domain":"orchestrate","operation":"ivtr.status","description":"orchestrate.ivtr.status (query) — current IVTR phase + history","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.start","description":"orchestrate.ivtr.start (mutate) — begin Implement phase","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.next","description":"orchestrate.ivtr.next (mutate) — advance to next phase (requires prior evidence)","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.release","description":"orchestrate.ivtr.release (mutate) — final gate, requires I+V+T evidence","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"orchestrate","operation":"ivtr.loop-back","description":"orchestrate.ivtr.loop-back (mutate) — rewind to phase on failure","tier":1,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId","phase","reason"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"phase","type":"string","required":true,"description":"phase parameter"},{"name":"reason","type":"string","required":true,"description":"reason parameter"}]},{"gateway":"query","domain":"orchestrate","operation":"next","description":"orchestrate.next (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"ready","description":"orchestrate.ready (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"analyze","description":"orchestrate.analyze (query) — absorbs critical.path via mode param; Wave 7a adds mode=\\"parallel-safety\\"","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"epicId","type":"string","required":false,"description":"Epic ID for standard analysis (required unless mode=critical-path or parallel-safety)"},{"name":"mode","type":"string","required":false,"description":"Analysis mode: omit for standard analysis, \\"critical-path\\" for CPM, \\"parallel-safety\\" for dep-graph grouping"},{"name":"taskIds","type":"array","required":false,"description":"Task ID list for mode=\\"parallel-safety\\" — returns {parallelSafe, groups} dep-graph analysis"}]},{"gateway":"query","domain":"orchestrate","operation":"context","description":"orchestrate.context (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"waves","description":"orchestrate.waves (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"report","description":"orchestrate.report (query) — grouped readiness report: ready, blocked, blockedBy, gate-blocked, invalid (T10631)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID to generate the report for","cli":{"positional":true}},{"name":"page","type":"number","required":false,"description":"Page number for paginated output (1-indexed, default 1)"},{"name":"pageSize","type":"number","required":false,"description":"Page size for paginated output (default 50, max 200)"}]},{"gateway":"query","domain":"orchestrate","operation":"plan","description":"orchestrate.plan (query) — deterministic wave+worker plan (T889)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID to emit a plan for","cli":{"positional":true}},{"name":"preferTier","type":"number","required":false,"description":"Preferred resolver tier (0=project, 1=global, 2=packaged)"}]},{"gateway":"query","domain":"orchestrate","operation":"bootstrap","description":"orchestrate.bootstrap (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"orchestrate","operation":"unblock.opportunities","description":"orchestrate.unblock.opportunities (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"find","description":"memory.find (query) — cross-table brain.db FTS5 search","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"agent","type":"string","required":false,"description":"Filter results to observations produced by the named agent (T418 mental models)","cli":{"flag":"--agent <name>"}}]},{"gateway":"query","domain":"memory","operation":"timeline","description":"memory.timeline (query) — chronological context around anchor","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["anchor"],"params":[{"name":"anchor","type":"string","required":true,"description":"anchor parameter"}]},{"gateway":"query","domain":"memory","operation":"fetch","description":"memory.fetch (query) — batch fetch brain entries by IDs","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["ids"],"params":[{"name":"ids","type":"string","required":true,"description":"ids parameter"}]},{"gateway":"query","domain":"memory","operation":"decision.find","description":"memory.decision.find (query) — search decisions in brain.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"pattern.find","description":"memory.pattern.find (query) — search BRAIN pattern memory by type, impact, or keyword","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"learning.find","description":"memory.learning.find (query) — search BRAIN learning memory by confidence, actionability, or keyword","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"graph.show","description":"memory.graph.show (query) — get a PageIndex graph node and its edges","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.neighbors","description":"memory.graph.neighbors (query) — get neighbor nodes from the PageIndex graph","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.trace","description":"memory.graph.trace (query) — BFS traversal from a seed node via recursive CTE (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.related","description":"memory.graph.related (query) — 1-hop typed neighbours of a brain graph node (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.context","description":"memory.graph.context (query) — 360-degree context view: node + all edges + neighbours (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["nodeId"],"params":[{"name":"nodeId","type":"string","required":true,"description":"nodeId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"graph.stats","description":"memory.graph.stats (query) — aggregate node and edge counts by type (T535)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"reason.why","description":"memory.reason.why (query) — causal trace through task dependency chains","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"reason.similar","description":"memory.reason.similar (query) — find semantically similar brain entries","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["entryId"],"params":[{"name":"entryId","type":"string","required":true,"description":"entryId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"memory","operation":"search.hybrid","description":"memory.search.hybrid (query) — hybrid search across FTS5, vector, and graph","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"stage.validate","description":"pipeline.stage.validate (query) — absorbs stage.prerequisites in response","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"stage.status","description":"pipeline.stage.status (query) — absorbs stage.gates via include param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"stage.history","description":"pipeline.stage.history (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"stage.guidance","description":"pipeline.stage.guidance (query) — stage-aware LLM prompt guidance (Phase 2). Pi extensions shell out to this on before_agent_start.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"phase.show","description":"Show phase details by slug or current phase (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"phaseId","type":"string","required":false,"description":"Phase slug (omit for current phase)"}]},{"gateway":"query","domain":"pipeline","operation":"phase.list","description":"List all phases with status and task counts (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"manifest.show","description":"pipeline.manifest.show (query) — get manifest entry by ID","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["entryId"],"params":[{"name":"entryId","type":"string","required":true,"description":"entryId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"manifest.list","description":"pipeline.manifest.list (query) — list manifest entries with filters","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"manifest.find","description":"pipeline.manifest.find (query) — search manifest entries by text","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"manifest.stats","description":"pipeline.manifest.stats (query) — manifest statistics","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"schema","description":"check.schema (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["type"],"params":[{"name":"type","type":"string","required":true,"description":"Schema type to validate (todo, config, archive, log, sessions)","cli":{"positional":true}}]},{"gateway":"query","domain":"check","operation":"protocol","description":"check.protocol (query) — absorbs all protocol.* ops via protocolType param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"task","description":"check.task (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"manifest","description":"check.manifest (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"output","description":"check.output (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"compliance.summary","description":"check.compliance.summary (query) — absorbs compliance.violations via detail param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"test","description":"check.test (query) — combined test status and coverage via format param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"test.coverage","description":"check.test.coverage (query) — dedicated test coverage sub-op (T1434)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"coherence","description":"check.coherence (query) — renamed from coherence.check (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"gate.status","description":"check.gate.status (query) — read-only gate state; split from gate.verify (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"check","operation":"archive.stats","description":"check.archive.stats (query) — archive analytics; moved from admin (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"grade","description":"check.grade (query) — grade agent behavioral session; moved from admin (T5615)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["sessionId"],"params":[{"name":"sessionId","type":"string","required":true,"description":"sessionId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"check","operation":"grade.list","description":"check.grade.list (query) — list past session grade results; moved from admin (T5615)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sessionId","type":"string","required":false,"description":"Filter grades by session ID"},{"name":"limit","type":"number","required":false,"description":"Maximum grade entries to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many grade entries before returning results"}]},{"gateway":"query","domain":"check","operation":"canon","description":"check.canon (query) — CI gate: detects canon drift between docs and live code (CANONICAL_DOMAINS count, forbidden phrases, required assertions)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"canon.docs","description":"check.canon.docs (query) — CI gate: rejects new *.md files that bypass the docs SSoT (.cleo/canon.yml routing). Scans git diff additions against rawMdPaths whose owning DocKind has rawMdAllowed:false.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"baseRef","type":"string","required":false,"description":"Git revision to diff against (default: origin/main)"}]},{"gateway":"query","domain":"check","operation":"workflow.compliance","description":"check.workflow.compliance (query) — WF-001..WF-005 compliance dashboard; AC rate, session rate, gate rate","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"since","type":"string","required":false,"description":"ISO 8601 date; only include tasks/events on or after this date"}]},{"gateway":"query","domain":"admin","operation":"version","description":"admin.version (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"health","description":"admin.health (query) — absorbs doctor via mode param","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"config.show","description":"admin.config.show (query) — show config value","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"config.presets","description":"admin.config.presets (query) — list all strictness presets with descriptions and values","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"config.get","description":"admin.config.get (query) — resolve a single config value via the ConfigManifest cascade (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["key"],"params":[{"name":"key","type":"string","required":true,"description":"Dot-notation config key to read (e.g. \\"release.branchModel\\")","cli":{"positional":true}},{"name":"scope","type":"string","required":false,"description":"Cascade slice to read from. Defaults to merged.","enum":["global","project","merged"]}]},{"gateway":"query","domain":"admin","operation":"config.list","description":"admin.config.list (query) — resolve the full config cascade and its flattened keys (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Cascade slice to project. Defaults to merged.","enum":["global","project","merged"]}]},{"gateway":"query","domain":"admin","operation":"config.validate","description":"admin.config.validate (query) — schema-validate a scoped config file via its manifest entry (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Scope to validate (global or project). Defaults to project.","enum":["global","project"]}]},{"gateway":"query","domain":"admin","operation":"stats","description":"admin.stats (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"context","description":"admin.context (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"context.pull","description":"admin.context.pull (query) — JIT bundle: task details + brain memories + last handoff","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"admin","operation":"runtime","description":"admin.runtime (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"paths","description":"admin.paths (query) — report all CleoOS paths (project + global hub) and scaffolding status","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"job","description":"admin.job (query) — absorbs job.status and job.list via action param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: status (default) or list"},{"name":"status","type":"string","required":false,"description":"Filter jobs by status (for list action)"},{"name":"limit","type":"number","required":false,"description":"Maximum jobs to return (for list action)"},{"name":"offset","type":"number","required":false,"description":"Skip this many jobs before returning results"}]},{"gateway":"query","domain":"admin","operation":"dash","description":"admin.dash (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"roadmap","description":"admin.roadmap (query) — project roadmap from task provenance, epics grouped by status with progress","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"includeHistory","type":"boolean","required":false,"description":"Include release history from CHANGELOG.md"},{"name":"upcomingOnly","type":"boolean","required":false,"description":"Only show pending/upcoming epics (exclude completed)"}]},{"gateway":"query","domain":"admin","operation":"log","description":"admin.log (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"sequence","description":"admin.sequence (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"help","description":"Get operations list and guidance filtered to specified disclosure tier","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"tier","type":"number","required":false,"description":"Progressive disclosure tier: 0=basic (default), 1=+memory/check, 2=all operations","cli":{"flag":"tier","short":"-t"}},{"name":"verbose","type":"boolean","required":false,"description":"Return full operation objects instead of compact domain-grouped format","cli":{"flag":"verbose"}}]},{"gateway":"query","domain":"tools","operation":"issue.diagnostics","description":"tools.issue.diagnostics (query) — CLEO install integrity check","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.list","description":"tools.skill.list (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.show","description":"tools.skill.show (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.find","description":"tools.skill.find (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.federated.find","description":"tools.skill.federated.find (T9731 federation-aware multi-source query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.dispatch","description":"tools.skill.dispatch (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.verify","description":"tools.skill.verify (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.dependencies","description":"tools.skill.dependencies (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.spawn.providers","description":"List spawn-capable providers by capability (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"skill.catalog","description":"tools.skill.catalog (query) — CAAMP catalog; absorbs catalog.protocols/profiles/resources/info via type param","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"type","type":"string","required":false,"description":"Catalog type: protocols, profiles, resources, or info (default)"}]},{"gateway":"query","domain":"tools","operation":"skill.precedence","description":"tools.skill.precedence (query) — absorbs precedence.show and precedence.resolve via action param","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: show (default) or resolve"},{"name":"providerId","type":"string","required":false,"description":"Provider ID for resolve action"}]},{"gateway":"query","domain":"tools","operation":"skill.doctor.diagnose","description":"tools.skill.doctor.diagnose (query) — read-only health report on skill storage layout, db drift, orphans, and bridge symlinks","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"verbose","type":"boolean","required":false,"description":"Include per-skill detail in the rendered human-readable summary"}]},{"gateway":"mutate","domain":"tools","operation":"skill.prune.telemetry","description":"tools.skill.prune.telemetry (mutate) — delete skill_usage rows older than --older-than DAYS (default 180)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"olderThanDays","type":"number","required":false,"description":"Age threshold in days (default 180)"},{"name":"dryRun","type":"boolean","required":false,"description":"Return the plan without touching the DB"},{"name":"vacuum","type":"boolean","required":false,"description":"Run VACUUM after the delete to reclaim disk space"}]},{"gateway":"mutate","domain":"tools","operation":"skill.import.hermes","description":"tools.skill.import.hermes (mutate) — migrate ~/.hermes/skills/.usage.json sidecars into CLEO skills.db","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"hermesHome","type":"string","required":false,"description":"Override Hermes home directory (default: $HERMES_HOME or ~/.hermes)"},{"name":"dryRun","type":"boolean","required":false,"description":"Print planned writes without mutating skills.db"}]},{"gateway":"mutate","domain":"tools","operation":"skill.migrate","description":"tools.skill.migrate (mutate) — migrate ~/.local/share/agents/skills into ~/.cleo/skills (SSoT); supports --dry-run preview + --rollback restore","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dryRun","type":"boolean","required":false,"description":"Preview the plan without writing anything"},{"name":"rollback","type":"boolean","required":false,"description":"Restore the legacy tree from the most recent backup tarball"}]},{"gateway":"query","domain":"tools","operation":"skill.stats","description":"tools.skill.stats (query) — Sphere B telemetry rollup; top-N usage, lifecycle / source-type breakdowns, agent-created list","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"top","type":"number","required":false,"description":"Top-N usage rollup limit (default 10)"},{"name":"sinceDays","type":"number","required":false,"description":"Restrict top-N rollup to the last N days (default: all-time)"},{"name":"bySource","type":"boolean","required":false,"description":"Include source-type breakdown facet"},{"name":"byLifecycle","type":"boolean","required":false,"description":"Include lifecycle-state breakdown facet"},{"name":"agentCreated","type":"boolean","required":false,"description":"Include agent-created skill list facet"}]},{"gateway":"query","domain":"tools","operation":"provider.list","description":"tools.provider.list (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"provider.detect","description":"tools.provider.detect (query)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"provider.inject.status","description":"tools.provider.inject.status (query)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"provider.supports","description":"tools.provider.supports (query) - check if provider supports capability","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["providerId","capability"],"params":[{"name":"providerId","type":"string","required":true,"description":"Provider ID (e.g., claude-code)"},{"name":"capability","type":"string","required":true,"description":"Capability path in dot notation (e.g., spawn.supportsSubagents)"}]},{"gateway":"query","domain":"tools","operation":"provider.hooks","description":"tools.provider.hooks (query) - list providers by hook event support","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["event"],"params":[{"name":"event","type":"string","required":true,"description":"Hook event to query (e.g., onSessionStart, onToolComplete)"}]},{"gateway":"mutate","domain":"tasks","operation":"add","description":"tasks.add (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["title"],"params":[{"name":"title","type":"string","required":true,"description":"Task title (3–500 characters)","cli":{"positional":true}},{"name":"parent","type":"string","required":false,"description":"Parent task ID (makes this task a subtask)","cli":{"flag":"parent"}},{"name":"priority","type":"string","required":false,"description":"Task priority","enum":["low","medium","high","critical"],"cli":{"flag":"priority","short":"-p"}},{"name":"type","type":"string","required":false,"description":"Task type","enum":["epic","task","subtask"],"cli":{"flag":"type","short":"-t"}},{"name":"size","type":"string","required":false,"description":"Scope size estimate","enum":["small","medium","large"],"cli":{"flag":"size"}},{"name":"description","type":"string","required":false,"description":"Detailed task description (must differ meaningfully from title)","cli":{"flag":"description","short":"-d"}},{"name":"acceptance","type":"array","required":false,"description":"Pipe-separated acceptance criteria (e.g. \\"AC1|AC2|AC3\\")","cli":{"flag":"acceptance"}},{"name":"labels","type":"array","required":false,"description":"Comma-separated labels","cli":{"flag":"labels","short":"-l"}},{"name":"depends","type":"array","required":false,"description":"Comma-separated dependency task IDs","cli":{"flag":"depends","short":"-D"}},{"name":"phase","type":"string","required":false,"description":"Phase slug to assign the task to","cli":{"flag":"phase","short":"-P"}},{"name":"notes","type":"string","required":false,"description":"Initial note entry for the task","cli":{"flag":"notes"}}]},{"gateway":"mutate","domain":"tasks","operation":"add-batch","description":"tasks.add-batch (mutate) — bulk-create N tasks atomically in a single transaction (epic decomposition: 1 call instead of N)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["tasks"],"params":[{"name":"tasks","type":"array","required":true,"description":"Array of task specs to insert atomically (each must have a title)"},{"name":"defaultParent","type":"string","required":false,"description":"Optional default parent task ID applied when a task spec omits parent"},{"name":"dryRun","type":"boolean","required":false,"description":"Validate and predict IDs without writing to the database"}]},{"gateway":"mutate","domain":"tasks","operation":"update","description":"tasks.update (mutate) — partial update; only supplied fields are mutated","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to update","cli":{"positional":true}},{"name":"title","type":"string","required":false,"description":"New title (3–500 chars)"},{"name":"description","type":"string","required":false,"description":"New description","cli":{"flag":"description","short":"-d"}},{"name":"status","type":"string","required":false,"description":"New status","enum":["pending","active","blocked","done","cancelled"],"cli":{"flag":"status","short":"-s"}},{"name":"priority","type":"string","required":false,"description":"New priority (orthogonal to severity)","enum":["low","medium","high","critical"],"cli":{"flag":"priority","short":"-p"}},{"name":"notes","type":"string","required":false,"description":"Append a note entry"},{"name":"labels","type":"array","required":false,"description":"Replace labels (comma-separated)","cli":{"flag":"labels","short":"-l"}},{"name":"addLabels","type":"array","required":false,"description":"Add labels incrementally"},{"name":"removeLabels","type":"array","required":false,"description":"Remove labels incrementally"},{"name":"depends","type":"array","required":false,"description":"Replace dependency task IDs","cli":{"flag":"depends","short":"-D"}},{"name":"addDepends","type":"array","required":false,"description":"Add dependency task IDs incrementally"},{"name":"removeDepends","type":"array","required":false,"description":"Remove dependency task IDs incrementally"},{"name":"acceptance","type":"array","required":false,"description":"Replace acceptance criteria (pipe-separated)"},{"name":"parent","type":"string","required":false,"description":"Set parent task ID (null/empty promotes to root)"},{"name":"type","type":"string","required":false,"description":"New hierarchy type","enum":["saga","epic","task","subtask"],"cli":{"flag":"type","short":"-t"}},{"name":"size","type":"string","required":false,"description":"New scope-size estimate","enum":["small","medium","large"]},{"name":"files","type":"array","required":false,"description":"Replace associated file paths"},{"name":"addFiles","type":"array","required":false,"description":"Add file paths incrementally"},{"name":"removeFiles","type":"array","required":false,"description":"Remove file paths incrementally"},{"name":"pipelineStage","type":"string","required":false,"description":"Set pipeline stage (forward-only)"},{"name":"kind","type":"string","required":false,"description":"Task kind / intent axis (orthogonal to type)","enum":["work","research","experiment","bug","spike","release"]},{"name":"scope","type":"string","required":false,"description":"Task scope / granularity axis","enum":["project","feature","unit"]},{"name":"severity","type":"string","required":false,"description":"Severity level (orthogonal to priority)","enum":["P0","P1","P2","P3"]},{"name":"reason","type":"string","required":false,"description":"Operator override reason for the AC-immutability guard"},{"name":"dependsWaiver","type":"string","required":false,"description":"Justification to waive the critical-priority --depends requirement"},{"name":"blockedBy","type":"string","required":false,"description":"Set the free-text blockedBy reason (gh#1106)"},{"name":"clearBlockedBy","type":"boolean","required":false,"description":"Clear the free-text blockedBy reason"},{"name":"relates","type":"array","required":false,"description":"Replace related-task edges ({taskId, type, reason?})"},{"name":"addRelates","type":"array","required":false,"description":"Add related-task edges without overwriting existing"},{"name":"removeRelates","type":"array","required":false,"description":"Remove related-task edges by taskId"}],"inputSchema":{"operation":"tasks.update","schema":{"type":"object","required":["taskId"],"additionalProperties":false,"properties":{"taskId":{"type":"string","minLength":1},"title":{"type":"string","minLength":1,"maxLength":500},"description":{"type":"string"},"status":{"type":"string","enum":["pending","active","blocked","done","cancelled"]},"priority":{"type":"string","enum":["low","medium","high","critical"]},"notes":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}},"addLabels":{"type":"array","items":{"type":"string"}},"removeLabels":{"type":"array","items":{"type":"string"}},"depends":{"type":"array","items":{"type":"string"}},"addDepends":{"type":"array","items":{"type":"string"}},"removeDepends":{"type":"array","items":{"type":"string"}},"acceptance":{"type":"array","items":{"type":"string"}},"parent":{"type":["string","null"]},"type":{"type":"string","enum":["saga","epic","task","subtask"]},"size":{"type":"string","enum":["small","medium","large"]},"files":{"type":"array","items":{"type":"string"}},"addFiles":{"type":"array","items":{"type":"string"}},"removeFiles":{"type":"array","items":{"type":"string"}},"pipelineStage":{"type":"string"},"kind":{"type":"string","enum":["work","research","experiment","bug","spike","release"]},"scope":{"type":"string","enum":["project","feature","unit"]},"severity":{"type":"string","enum":["P0","P1","P2","P3"]},"reason":{"type":"string"},"dependsWaiver":{"type":"string"},"blockedBy":{"type":"string"},"clearBlockedBy":{"type":"boolean"},"relates":{"type":"array","items":{"type":"object","required":["taskId","type"],"additionalProperties":false,"properties":{"taskId":{"type":"string","minLength":1},"type":{"type":"string","minLength":1},"reason":{"type":"string"}}}},"addRelates":{"type":"array","items":{"type":"object","required":["taskId","type"],"additionalProperties":false,"properties":{"taskId":{"type":"string","minLength":1},"type":{"type":"string","minLength":1},"reason":{"type":"string"}}}},"removeRelates":{"type":"array","items":{"type":"string"}}}},"examples":[{"name":"set-status","value":{"taskId":"T9917","status":"active"},"description":"Transition status to active."},{"name":"add-labels-incrementally","value":{"taskId":"T9917","addLabels":["saga.t9855","epic.t9903"]}}]},"outputSchema":{"operation":"tasks.update","shapeNote":"The updated task ID (bare string) is at /data/updated/0 — NOT /data/updated/0/id. Use /data/status for the post-mutation status.","dataSchema":{"type":"object","required":["count","created","updated","deleted"],"additionalProperties":true,"properties":{"count":{"type":"number","description":"Number of records the mutation affected."},"created":{"type":"array","description":"Task IDs created by the mutation (bare strings, e.g. \\"T11692\\"). Empty for update/delete-only mutations.","items":{"type":"string"}},"updated":{"type":"array","description":"Task IDs updated by the mutation (bare strings). Empty for create/delete-only mutations.","items":{"type":"string"}},"deleted":{"type":"array","description":"Task IDs deleted by the mutation (bare strings). Empty for create/update-only mutations.","items":{"type":"string"}},"ids":{"type":"array","description":"Deprecated alias for the non-empty bucket. Prefer created/updated/deleted.","items":{"type":"string"}},"dryRun":{"type":"boolean","description":"True when this was a preview-only mutation."},"status":{"type":"string","description":"Post-mutation task status (add/update/complete)."}}},"fieldPointers":["/data/updated/0","/data/status","/data/count"]}},{"gateway":"mutate","domain":"tasks","operation":"complete","description":"tasks.complete (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"cancel","description":"tasks.cancel (mutate) — cancel task (soft terminal state; reversible via tasks.restore)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Optional human-readable cancellation reason stored on the task"}]},{"gateway":"mutate","domain":"tasks","operation":"delete","description":"tasks.delete (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"archive","description":"tasks.archive (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tasks","operation":"restore","description":"tasks.restore (mutate) — absorbs reopen and unarchive via from param","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"reparent","description":"tasks.reparent (mutate) — absorbs promote via newParentId:null","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"reorder","description":"tasks.reorder (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","position"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"position","type":"string","required":true,"description":"position parameter"}]},{"gateway":"mutate","domain":"tasks","operation":"reorder-rank","description":"tasks.reorder-rank (mutate) — within-column positional re-rank from an explicit top-to-bottom task-ID order (Kanban drag-reorder)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["orderedIds"],"params":[{"name":"orderedIds","type":"array","required":true,"description":"Ordered task IDs describing the desired top-to-bottom column order; each task position is set to its 1-based index"}],"outputSchema":{"operation":"tasks.reorder-rank","shapeNote":"Re-ranked IDs (new order) at /data/ranked; unresolved request IDs at /data/skipped; count at /data/count.","dataSchema":{"type":"object","required":["ranked","skipped","count"],"additionalProperties":true,"properties":{"ranked":{"type":"array","description":"Task IDs whose position was written, in the new top-to-bottom order.","items":{"type":"string"}},"skipped":{"type":"array","description":"Request IDs that did not resolve to a task (no-op for these).","items":{"type":"string"}},"count":{"type":"number","description":"Number of tasks re-ranked."}}},"fieldPointers":["/data/ranked/0","/data/skipped/0","/data/count"]}},{"gateway":"mutate","domain":"tasks","operation":"bulk-move","description":"tasks.bulk-move (mutate) — atomically move N tasks to a new status and/or pipeline stage in a single transaction (Kanban multi-card column move)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskIds"],"params":[{"name":"taskIds","type":"array","required":true,"description":"Task IDs to move (all-or-nothing; any failure rolls back every move)"},{"name":"status","type":"string","required":false,"description":"Target lifecycle status applied to every task","enum":["pending","active","blocked","done","cancelled","archived","proposed"]},{"name":"pipelineStage","type":"string","required":false,"description":"Target pipeline stage applied to every task (forward-only)"}],"outputSchema":{"operation":"tasks.bulk-move","shapeNote":"Moved task IDs at /data/moved (all-or-nothing); applied status/stage at /data/status and /data/pipelineStage; count at /data/count.","dataSchema":{"type":"object","required":["moved","count"],"additionalProperties":true,"properties":{"moved":{"type":"array","description":"Task IDs successfully moved (atomic — empty only when count is 0).","items":{"type":"string"}},"status":{"type":"string","description":"The status applied, when supplied."},"pipelineStage":{"type":"string","description":"The pipeline stage applied, when supplied."},"count":{"type":"number","description":"Number of tasks moved."}}},"fieldPointers":["/data/moved/0","/data/status","/data/pipelineStage","/data/count"]}},{"gateway":"mutate","domain":"tasks","operation":"assignee","description":"tasks.assignee (mutate) — set/clear a first-class human assignee (DISTINCT from the agent claim/unclaim lock; pass assignee:null to clear)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose assignee is being set or cleared","cli":{"positional":true}},{"name":"assignee","type":"string","required":false,"description":"Assignee to set; omit / empty / null clears the assignee"}],"outputSchema":{"operation":"tasks.assignee","shapeNote":"The new assignee is at /data/assignee (null when cleared); /data/assigned is true on set, false on clear.","dataSchema":{"type":"object","required":["taskId","assignee","assigned"],"additionalProperties":true,"properties":{"taskId":{"type":"string","description":"The task ID whose assignee changed."},"assignee":{"type":["string","null"],"description":"The new assignee value (null when cleared)."},"assigned":{"type":"boolean","description":"True when an assignee was set; false on clear."}}},"fieldPointers":["/data/taskId","/data/assignee","/data/assigned"]}},{"gateway":"mutate","domain":"tasks","operation":"relates.add","description":"tasks.relates.add (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","type"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"type","type":"string","required":true,"description":"type parameter"}]},{"gateway":"mutate","domain":"tasks","operation":"relates.add-batch","description":"tasks.relates.add-batch (mutate) — bulk-add advisory relation edges from a JSON payload ({relations:[...]} or {edges:[...]}); use dryRun to preview without writing.","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"relations","type":"array","required":false,"description":"Array of relation edges ({from|taskId, to|relatedId, type, reason})"},{"name":"edges","type":"array","required":false,"description":"Alias for \`relations\` — array of relation edges"},{"name":"dryRun","type":"boolean","required":false,"description":"Validate and report what would be created without writing"},{"name":"reasonWaiver","type":"string","required":false,"description":"Explicit audit waiver text for edges without per-edge reasons"}]},{"gateway":"mutate","domain":"tasks","operation":"relates.remove","description":"tasks.relates.remove (mutate) — delete a relation between two tasks. Pass \`type\` to scope deletion to a single relation kind; omit to remove any type.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId","relatedId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Source task ID","cli":{"positional":true}},{"name":"relatedId","type":"string","required":true,"description":"Target task ID to remove the relation to","cli":{"positional":true}},{"name":"type","type":"string","required":false,"description":"Optional relation type (blocks|related|duplicates|absorbs|fixes|extends|supersedes). Omit to remove any type.","cli":{"flag":"type"}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.create","description":"tasks.saga.create (mutate) — create a Saga as a first-class TaskType (type=saga) per ADR-083","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["title"],"params":[{"name":"title","type":"string","required":true,"description":"Saga title (3–500 characters)","cli":{"flag":"title"}},{"name":"description","type":"string","required":false,"description":"Saga description","cli":{"flag":"description","short":"-d"}},{"name":"acceptance","type":"array","required":false,"description":"Pipe-separated acceptance criteria","cli":{"flag":"acceptance"}},{"name":"dryRun","type":"boolean","required":false,"description":"Validate and preview without writing task, relation, or doc rows","cli":{"flag":"dry-run"}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.add","description":"tasks.saga.add (mutate) — link an Epic to a Saga via task_relations type=groups","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["sagaId","epicId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID (must have type=saga)","cli":{"positional":true}},{"name":"epicId","type":"string","required":true,"description":"Epic task ID to link as member","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.detach","description":"tasks.saga.detach (mutate) — remove a Saga member relation (task_relations type=groups); idempotent; appends to .cleo/audit/saga-detach.jsonl (T10118)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId","memberId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID","cli":{"positional":true}},{"name":"memberId","type":"string","required":true,"description":"Member task ID to detach from the Saga","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Human-readable reason recorded in the audit log entry"}]},{"gateway":"query","domain":"tasks","operation":"saga.list","description":"tasks.saga.list (query) — list all Sagas (labeled top-level Epics)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tasks","operation":"saga.members","description":"tasks.saga.members (query) — list member Epics linked to a Saga","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID","cli":{"positional":true}}]},{"gateway":"query","domain":"tasks","operation":"saga.rollup","description":"tasks.saga.rollup (query) — aggregate member Epic statuses (total/done/active/blocked/pending + completionPct)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.repair","description":"tasks.saga.repair (mutate) — detach I5-violating parentId and re-attach via task_relations type=groups; idempotent","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["sagaId"],"params":[{"name":"sagaId","type":"string","required":true,"description":"Saga task ID (must have type=saga)","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"saga.reconcile","description":"tasks.saga.reconcile (mutate) — idempotent cron-safe saga auto-close repair; per-saga advisory lock + audit log; supersedes T10098","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sagaId","type":"string","required":false,"description":"Optional saga task ID. Omit to walk every saga.","cli":{"positional":true}},{"name":"dryRun","type":"boolean","required":false,"description":"Report what would happen without mutating rows or writing audit log"}]},{"gateway":"mutate","domain":"tasks","operation":"saga.migrate-containment","description":"tasks.saga.migrate-containment (mutate) — convert parent_id-based Saga membership to groups relations; idempotent; audits to saga-contain-migration.jsonl","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sagaId","type":"string","required":false,"description":"Optional saga task ID. Omit to migrate all sagas.","cli":{"positional":true}},{"name":"dryRun","type":"boolean","required":false,"description":"Report what would happen without mutating rows or writing audit log"}]},{"gateway":"mutate","domain":"tasks","operation":"start","description":"tasks.start (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"tasks","operation":"stop","description":"tasks.stop (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tasks","operation":"sync.reconcile","description":"tasks.sync.reconcile (mutate) — reconcile external tasks with CLEO as SSoT","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["providerId","externalTasks"],"params":[{"name":"providerId","type":"string","required":true,"description":"Provider identifier (e.g. linear, jira, github)"},{"name":"externalTasks","type":"array","required":true,"description":"Array of normalized ExternalTask objects"},{"name":"dryRun","type":"boolean","required":false,"description":"Compute actions without applying them"},{"name":"conflictPolicy","type":"string","required":false,"description":"Conflict resolution: cleo-wins, provider-wins, latest-wins, report-only"},{"name":"defaultPhase","type":"string","required":false,"description":"Default phase for newly created tasks"},{"name":"defaultLabels","type":"array","required":false,"description":"Default labels for newly created tasks"}]},{"gateway":"query","domain":"tasks","operation":"sync.links","description":"tasks.sync.links (query) — list external task links by provider or task ID","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"providerId","type":"string","required":false,"description":"Filter links by provider"},{"name":"taskId","type":"string","required":false,"description":"Filter links by CLEO task ID"}]},{"gateway":"mutate","domain":"tasks","operation":"sync.links.remove","description":"tasks.sync.links.remove (mutate) — remove all external task links for a provider","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["providerId"],"params":[{"name":"providerId","type":"string","required":true,"description":"Provider whose links should be removed"}]},{"gateway":"mutate","domain":"tasks","operation":"claim","description":"tasks.claim (mutate) — claim a task by assigning it to the current session","tier":0,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId","agentId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to claim"},{"name":"agentId","type":"string","required":true,"description":"Agent ID to assign the task to"}]},{"gateway":"mutate","domain":"tasks","operation":"unclaim","description":"tasks.unclaim (mutate) — unclaim a task by removing the current assignee","tier":0,"idempotent":false,"sessionRequired":true,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to unclaim"}]},{"gateway":"mutate","domain":"session","operation":"start","description":"session.start (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"end","description":"session.end (mutate)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"resume","description":"session.resume (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"suspend","description":"session.suspend (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"gc","description":"session.gc (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"record.decision","description":"session.record.decision (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"record.assumption","description":"session.record.assumption (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"session","operation":"adopt","description":"session.adopt — rebind env to a specific session for multi-agent isolation (T9975)","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"sessionId","type":"string","required":true,"description":"Session ID to adopt"}]},{"gateway":"mutate","domain":"orchestrate","operation":"start","description":"orchestrate.start (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"spawn","description":"orchestrate.spawn (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"handoff","description":"orchestrate.handoff (mutate) — composite handoff (context.inject -> session.end -> spawn)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","protocolType"],"params":[{"name":"taskId","type":"string","required":true,"description":"Successor task ID for spawn context"},{"name":"protocolType","type":"string","required":true,"description":"Protocol name for handoff context injection"},{"name":"note","type":"string","required":false,"description":"Optional handoff note persisted through session.end"},{"name":"nextAction","type":"string","required":false,"description":"Optional next action metadata for the handoff payload"},{"name":"variant","type":"string","required":false,"description":"Optional context injection variant"},{"name":"tier","type":"number","required":false,"description":"Progressive disclosure tier (0-2)"},{"name":"idempotencyKey","type":"string","required":false,"description":"Caller-provided retry correlation key (reported in metadata)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"spawn.execute","description":"orchestrate.spawn.execute (mutate) — execute spawn for a task using adapter registry","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to spawn"},{"name":"adapterId","type":"string","required":false,"description":"Adapter ID (auto-select if omitted)"},{"name":"protocolType","type":"string","required":false,"description":"Protocol type override"},{"name":"tier","type":"number","required":false,"description":"Progressive disclosure tier (0-2)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"validate","description":"orchestrate.validate (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"pivot","description":"orchestrate.pivot (mutate) — record an audited context switch from one task to another (replaces silent reframes)","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["fromTaskId","toTaskId","reason"],"params":[{"name":"fromTaskId","type":"string","required":true,"description":"Currently-active task ID being paused","cli":{"positional":true}},{"name":"toTaskId","type":"string","required":true,"description":"Task ID becoming active in the current session","cli":{"positional":true}},{"name":"reason","type":"string","required":true,"description":"Free-form rationale for the pivot — REQUIRED, no silent pivots"},{"name":"blocksFrom","type":"boolean","required":false,"description":"When true (default), adds toTaskId as a dependency on fromTaskId so it cannot complete before the pivot resolves"}]},{"gateway":"mutate","domain":"orchestrate","operation":"parallel","description":"orchestrate.parallel (mutate) — absorbs parallel.start and parallel.end via action param","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["action"],"params":[{"name":"action","type":"string","required":true,"description":"Action: start or end"}]},{"gateway":"mutate","domain":"memory","operation":"observe","description":"memory.observe (mutate) — save observation to brain.db","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":["text"],"params":[{"name":"text","type":"string","required":true,"description":"text parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"memory","operation":"decision.store","description":"memory.decision.store (mutate) — store decision to brain.db","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["decision","rationale"],"params":[{"name":"decision","type":"string","required":true,"description":"decision parameter","cli":{"positional":true}},{"name":"rationale","type":"string","required":true,"description":"rationale parameter"}]},{"gateway":"mutate","domain":"memory","operation":"pattern.store","description":"memory.pattern.store (mutate) — store a reusable workflow or anti-pattern in BRAIN pattern memory","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["pattern","context"],"params":[{"name":"pattern","type":"string","required":true,"description":"pattern parameter","cli":{"positional":true}},{"name":"context","type":"string","required":true,"description":"context parameter"}]},{"gateway":"mutate","domain":"memory","operation":"learning.store","description":"memory.learning.store (mutate) — store an insight or lesson learned in BRAIN learning memory","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["insight","source"],"params":[{"name":"insight","type":"string","required":true,"description":"insight parameter","cli":{"positional":true}},{"name":"source","type":"string","required":true,"description":"source parameter"}]},{"gateway":"mutate","domain":"memory","operation":"link","description":"memory.link (mutate) — link brain entry to task","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["taskId","entryId"],"params":[{"name":"taskId","type":"string","required":true,"description":"taskId parameter","cli":{"positional":true}},{"name":"entryId","type":"string","required":true,"description":"entryId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"memory","operation":"graph.add","description":"memory.graph.add (mutate) — add a node or edge to the PageIndex graph","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"memory","operation":"graph.remove","description":"memory.graph.remove (mutate) — remove a node or edge from the PageIndex graph","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"quality","description":"Memory quality report: retrieval stats, noise ratio, tier distribution","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"code.links","description":"List code_reference edges connecting memories to nexus code symbols","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"code.memories-for-code","description":"Find memories linked to a code symbol via code_reference edges","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"symbol parameter"}]},{"gateway":"query","domain":"memory","operation":"code.for-memory","description":"Find code symbols linked to a memory entry via code_reference edges","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["memoryId"],"params":[{"name":"memoryId","type":"string","required":true,"description":"memoryId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"memory","operation":"code.link","description":"Create code_reference edge from memory to nexus symbol","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["memoryId","codeSymbol"],"params":[{"name":"memoryId","type":"string","required":true,"description":"memoryId parameter","cli":{"positional":true}},{"name":"codeSymbol","type":"string","required":true,"description":"codeSymbol parameter"}]},{"gateway":"mutate","domain":"memory","operation":"code.auto-link","description":"Scan memories for entity references and auto-link to nexus nodes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"doctor","description":"memory.doctor (query) — read-only brain noise scan: detects duplicate-content, missing-type, missing-provenance, orphan-edge, low-confidence, stale-unverified patterns. Used as M7 assert-clean gate for Sentient v1 activation.","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"assert-clean","type":"boolean","required":false,"description":"If true, exit non-zero when any noise patterns are detected (M7 gate for Sentient v1)."}]},{"gateway":"query","domain":"memory","operation":"sweep","description":"memory.sweep (query/mutate) — T1147 W7 BRAIN noise sweep. dry-run: detect noise candidates and write sample JSON to agent-outputs. approve <runId>: apply sweep to live brain tables (sets killSwitch during tx). status: list all noise-sweep-2440 runs. rollback <runId>: discard a staged run without applying changes.","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dry-run","type":"boolean","required":false,"description":"Detect noise candidates without staging DB writes."},{"name":"approve","type":"string","required":false,"description":"Run ID to approve and apply to live tables."},{"name":"status","type":"boolean","required":false,"description":"List recent noise-sweep-2440 runs."},{"name":"rollback","type":"string","required":false,"description":"Run ID to roll back without applying changes."}]},{"gateway":"mutate","domain":"memory","operation":"sweep","description":"memory.sweep (mutate) — T1147 W7 BRAIN noise sweep approve/rollback. approve <runId>: apply sweep to live brain tables. rollback <runId>: discard a staged run without applying changes.","tier":0,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"approve","type":"string","required":false,"description":"Run ID to approve and apply to live tables."},{"name":"rollback","type":"string","required":false,"description":"Run ID to roll back without applying changes."}]},{"gateway":"query","domain":"memory","operation":"llm-status","description":"memory.llm-status (query) — report LLM backend resolution status and extraction readiness","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"pending-verify","description":"memory.pending-verify (query) — list unverified brain entries with citation_count >= threshold","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"minCitations","type":"number","required":false,"description":"Minimum citation count threshold (default: 5)"},{"name":"limit","type":"number","required":false,"description":"Maximum entries to return (default: 50)"}]},{"gateway":"query","domain":"memory","operation":"bridge","description":"memory.bridge (query) — stream brain.db memory-bridge content directly (cli mode default)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"promote-explain","description":"memory.promote-explain (query) — read-only view over STDP weights, retrieval log, and citation_count for a brain entry; returns tier decision and score breakdown","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Brain entry id (e.g. O-abc123, D-def456, P-ghi789, L-jkl012)"}]},{"gateway":"query","domain":"memory","operation":"digest","description":"memory.digest (query) — summarized top-N observations by citation_count for session briefings","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Max observations to include in digest (default: 10)"}]},{"gateway":"query","domain":"memory","operation":"recent","description":"memory.recent (query) — tail recent brain_observations with optional filters (since, type, session, tier)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Max entries to return (default: 20)"},{"name":"since","type":"string","required":false,"description":"ISO timestamp or duration (e.g. '24h', '7d') to filter from"},{"name":"type","type":"string","required":false,"description":"Filter by observation type (e.g. diary, observation, pattern)"},{"name":"session","type":"string","required":false,"description":"Filter by source_session_id"},{"name":"tier","type":"string","required":false,"description":"Filter by memory_tier (short, medium, long)"}]},{"gateway":"query","domain":"memory","operation":"diary","description":"memory.diary (query) — list observations with type='diary' in reverse chronological order","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Max diary entries to return (default: 20)"}]},{"gateway":"query","domain":"memory","operation":"watch","description":"memory.watch (query) — poll for new brain_observations since a cursor; returns nextCursor for chained polling","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"cursor","type":"string","required":false,"description":"ISO datetime cursor; only observations after this time are returned"},{"name":"limit","type":"number","required":false,"description":"Max events per poll (default: 10)"}]},{"gateway":"mutate","domain":"memory","operation":"diary.write","description":"memory.diary.write (mutate) — store an observation with type='diary' (thin wrapper over observe)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["text"],"params":[{"name":"text","type":"string","required":true,"description":"Diary entry text"},{"name":"title","type":"string","required":false,"description":"Optional title"},{"name":"sourceSessionId","type":"string","required":false,"description":"Session that produced this entry"},{"name":"agent","type":"string","required":false,"description":"Agent provenance"}]},{"gateway":"mutate","domain":"memory","operation":"verify","description":"memory.verify (mutate) — flip verified=1 on a brain entry; requires project-orchestrator or owner identity","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Brain entry ID to verify"},{"name":"agent","type":"string","required":false,"description":"Caller identity ('project-orchestrator' or 'owner'). Legacy alias 'cleo-prime' accepted per T1258 E1 migration shim. Omit for terminal invocation."}]},{"gateway":"mutate","domain":"memory","operation":"precompact-flush","description":"memory.precompact-flush (mutate) — flush in-flight brain observations and issue a WAL checkpoint before context window compaction","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"memory","operation":"backfill.list","description":"memory.backfill.list (query) — list staged backfill runs with status (pending/approved/rolled-back)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"memory","operation":"backfill.run","description":"memory.backfill.run (mutate) — stage a new graph backfill run (rows held pending approval)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"memory","operation":"backfill.approve","description":"memory.backfill.approve (mutate) — approve a staged backfill run (commits rows to live tables)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Backfill run ID to approve"}]},{"gateway":"mutate","domain":"memory","operation":"backfill.rollback","description":"memory.backfill.rollback (mutate) — rollback a backfill run (removes staged/committed rows)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Backfill run ID to rollback"}]},{"gateway":"mutate","domain":"pipeline","operation":"stage.record","description":"pipeline.stage.record (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.skip","description":"pipeline.stage.skip (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.reset","description":"pipeline.stage.reset (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.gate.pass","description":"pipeline.stage.gate.pass (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"stage.gate.fail","description":"pipeline.stage.gate.fail (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"manifest.append","description":"pipeline.manifest.append (mutate) — append entry to pipeline_manifest (SQLite table per ADR-027)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["entry"],"params":[{"name":"entry","type":"string","required":true,"description":"entry parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"pipeline","operation":"manifest.archive","description":"pipeline.manifest.archive (mutate) — archive old manifest entries","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["beforeDate"],"params":[{"name":"beforeDate","type":"string","required":true,"description":"beforeDate parameter"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.set","description":"Set the active phase","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["phaseId"],"params":[{"name":"phaseId","type":"string","required":true,"description":"Phase slug to set as current"},{"name":"rollback","type":"boolean","required":false,"description":"Allow backward phase movement"},{"name":"force","type":"boolean","required":false,"description":"Skip confirmation prompt"},{"name":"dryRun","type":"boolean","required":false,"description":"Preview changes without modifying files"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.advance","description":"Complete current phase and start next","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"force","type":"boolean","required":false,"description":"Skip validation and interactive prompt"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.rename","description":"Rename a phase and update all task references","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["oldName","newName"],"params":[{"name":"oldName","type":"string","required":true,"description":"oldName parameter"},{"name":"newName","type":"string","required":true,"description":"newName parameter"}]},{"gateway":"mutate","domain":"pipeline","operation":"phase.delete","description":"Delete a phase with task reassignment protection","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["phaseId"],"params":[{"name":"phaseId","type":"string","required":true,"description":"Phase slug to delete"},{"name":"reassignTo","type":"string","required":false,"description":"Reassign tasks to another phase"},{"name":"force","type":"boolean","required":false,"description":"Required safety flag"}]},{"gateway":"mutate","domain":"check","operation":"compliance.record","description":"check.compliance.record (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"check","operation":"test.run","description":"check.test.run (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"check","operation":"compliance.sync","description":"check.compliance.sync (mutate) — sync project compliance metrics to global","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"check","operation":"gate.set","description":"check.gate.set (mutate) — write path of former gate.verify; set/reset gates (T5615)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"check","operation":"verify.explain","description":"check.verify.explain (query) — show evidence atoms + gate state for a task in human-readable format (read-only)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to explain verification state for (e.g. T1006)"}]},{"gateway":"query","domain":"pipeline","operation":"release.list","description":"List all releases from release_manifests table","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"release.show","description":"Show details for a specific release version","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"version parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"pipeline","operation":"release.channel.show","description":"Show the current release channel based on git branch (latest/beta/alpha)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"pipeline","operation":"release.pr-status","description":"Poll GitHub CI check statuses for the open release PR matching release/v<version> (T9095)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Release version (e.g. 2026.5.43 or v2026.5.43)","cli":{"positional":true}}]},{"gateway":"mutate","domain":"pipeline","operation":"release.cancel","description":"pipeline.release.cancel (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"version parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"pipeline","operation":"release.rollback","description":"pipeline.release.rollback (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"pipeline","operation":"release.rollback.full","description":"Full rollback: delete git tag (local + remote), revert release commit, remove manifest record (T820 RELEASE-05)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"version parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"init","description":"admin.init (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"scaffold-hub","description":"admin.scaffold-hub (mutate) — create CleoOS Hub dirs (global-recipes, pi-extensions, cant-workflows, agents) and seed starter justfile","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"config.set","description":"admin.config.set (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"config.set-preset","description":"admin.config.set-preset (mutate) — apply a strictness preset (strict, standard, minimal)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["preset"],"params":[{"name":"preset","type":"string","required":true,"description":"Preset name: strict | standard | minimal"}]},{"gateway":"mutate","domain":"admin","operation":"config.unset","description":"admin.config.unset (mutate) — remove a key from a scoped config file (idempotent) (T11917)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["key"],"params":[{"name":"key","type":"string","required":true,"description":"Dot-notation config key to remove","cli":{"positional":true}},{"name":"global","type":"boolean","required":false,"description":"Remove from the global file instead of the project file"}]},{"gateway":"query","domain":"admin","operation":"backup","description":"admin.backup (query) — list available backups (read-only)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"backup","description":"admin.backup (mutate) — absorbs restore and backup.restore via action param","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"migrate","description":"admin.migrate (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"cleanup","description":"admin.cleanup (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"job.cancel","description":"admin.job.cancel (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"safestop","description":"admin.safestop (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"inject.generate","description":"admin.inject.generate (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"skill.install","description":"tools.skill.install (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"skill.uninstall","description":"tools.skill.uninstall (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"skill.refresh","description":"tools.skill.refresh (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"tools","operation":"provider.inject","description":"tools.provider.inject (mutate)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"adapter.list","description":"tools.adapter.list (query) — list all discovered provider adapters","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"adapter.show","description":"tools.adapter.show (query) — show details for a specific adapter","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Adapter ID"}]},{"gateway":"query","domain":"tools","operation":"adapter.detect","description":"tools.adapter.detect (query) — detect active providers in current environment","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"tools","operation":"adapter.health","description":"tools.adapter.health (query) — health status for adapters","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"id","type":"string","required":false,"description":"Specific adapter ID (omit for all)"}]},{"gateway":"mutate","domain":"tools","operation":"adapter.activate","description":"tools.adapter.activate (mutate) — load and activate a provider adapter","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Adapter ID to activate"}]},{"gateway":"mutate","domain":"tools","operation":"adapter.dispose","description":"tools.adapter.dispose (mutate) — dispose one or all adapters","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"id","type":"string","required":false,"description":"Adapter ID (omit to dispose all)"}]},{"gateway":"mutate","domain":"admin","operation":"install.global","description":"Refresh global CLEO setup: provider files, configs, ~/.agents/AGENTS.md","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"token","description":"admin.token (query) — summarize/list/show token telemetry; absorbs token.summary, token.list, token.show via action param","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: summary (default), list, or show"},{"name":"tokenId","type":"string","required":false,"description":"Token ID for show action"},{"name":"provider","type":"string","required":false,"description":"Filter by provider"},{"name":"transport","type":"string","required":false,"description":"Filter by transport"},{"name":"domain","type":"string","required":false,"description":"Filter by domain"},{"name":"operationName","type":"string","required":false,"description":"Filter by operation name"},{"name":"sessionId","type":"string","required":false,"description":"Filter by session ID"},{"name":"taskId","type":"string","required":false,"description":"Filter by task ID"},{"name":"limit","type":"number","required":false,"description":"Maximum records to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many records before returning results"}]},{"gateway":"mutate","domain":"admin","operation":"token","description":"admin.token (mutate) — record/delete/clear token telemetry; absorbs token.record, token.delete, token.clear via action param","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"action","type":"string","required":false,"description":"Action: record (default), delete, or clear"},{"name":"tokenId","type":"string","required":false,"description":"Token ID for delete action"}]},{"gateway":"query","domain":"admin","operation":"adr.show","description":"admin.adr.show (query) — retrieve single ADR by ID with frontmatter","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["adrId"],"params":[{"name":"adrId","type":"string","required":true,"description":"adrId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"adr.sync","description":"admin.adr.sync (mutate) — sync .cleo/adrs/ markdown files into architecture_decisions DB table; absorbs adr.validate via validate flag","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"adr.find","description":"admin.adr.find (query) — fuzzy search ADRs; absorbs adr.list when query absent","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"query","type":"string","required":false,"description":"Search query (omit to list all ADRs)"},{"name":"status","type":"string","required":false,"description":"Filter ADRs by status"},{"name":"since","type":"string","required":false,"description":"Filter ADRs created on or after this date"},{"name":"limit","type":"number","required":false,"description":"Maximum ADRs to return"},{"name":"offset","type":"number","required":false,"description":"Skip this many ADRs before returning results"}]},{"gateway":"mutate","domain":"admin","operation":"health","description":"admin.health (mutate) — auto-fix failed health/doctor checks; mode:\\"repair\\" form of admin.health query (T5615)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"context.inject","description":"admin.context.inject (mutate) — inject protocol content into session context; moved from session domain (T5615)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["protocolType"],"params":[{"name":"protocolType","type":"string","required":true,"description":"protocolType parameter"}]},{"gateway":"query","domain":"admin","operation":"export","description":"admin.export (query) — export tasks; absorbs snapshot.export and export.tasks via scope param","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"admin","operation":"import","description":"admin.import (mutate) — import tasks; absorbs snapshot.import and import.tasks via scope param","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["file"],"params":[{"name":"file","type":"string","required":true,"description":"file parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"detect","description":"Refresh project-context.json — re-detect project type, framework, and LLM hints","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"smoke","description":"admin.smoke (query) — operational smoke test: one read-only query per domain","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"admin","operation":"smoke.provider","description":"admin.smoke.provider (query) — ADR-049 harness sovereignty probe: verify adapter shape, DB locality, hooks, spawn, and agent folder for a named provider","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider ID to probe (claude-code | claude-sdk | codex | cursor | gemini-cli | kimi | openai-sdk | opencode | pi)"}]},{"gateway":"query","domain":"admin","operation":"hooks.matrix","description":"admin.hooks.matrix (query) — cross-provider hook support matrix using CAAMP canonical taxonomy","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"providerIds","type":"string","required":false,"description":"Limit matrix to specific provider IDs (default: all mapped providers)"},{"name":"detectProvider","type":"boolean","required":false,"description":"Detect current runtime provider (default: true)"}]},{"gateway":"query","domain":"admin","operation":"map","description":"admin.map (query) — analyze codebase structure, return structured mapping","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"focus","type":"string","required":false,"description":"Focus analysis on one area: stack, architecture, structure, conventions, testing, integrations, concerns"}]},{"gateway":"mutate","domain":"admin","operation":"map","description":"admin.map (mutate) — analyze codebase and store findings to brain.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"focus","type":"string","required":false,"description":"Focus analysis on one area: stack, architecture, structure, conventions, testing, integrations, concerns"}]},{"gateway":"query","domain":"nexus","operation":"augment","description":"nexus.augment (query) — BM25 symbol context for PreToolUse hooks and search-code","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pattern"],"params":[{"name":"pattern","type":"string","required":true,"description":"Symbol name or pattern"},{"name":"limit","type":"number","required":false,"description":"Max results (default 5)"}]},{"gateway":"query","domain":"nexus","operation":"share.status","description":"nexus.share.status (query) — sharing status","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"share.snapshot.export","description":"nexus.share.snapshot.export (mutate) — export project snapshot","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"share.snapshot.import","description":"nexus.share.snapshot.import (mutate) — import project snapshot","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"status","description":"nexus.status (query) — overall NEXUS health status","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"list","description":"nexus.list (query) — list all registered NEXUS projects","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"show","description":"nexus.show (query) — show a specific project by name or hash","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"name parameter"}]},{"gateway":"query","domain":"nexus","operation":"resolve","description":"nexus.resolve (query) — resolve a cross-project project:taskId reference; renamed from nexus.query (T5615)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"deps","description":"nexus.deps (query) — cross-project dependency analysis","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"graph","description":"nexus.graph (query) — global dependency graph across all projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"path.show","description":"nexus.path.show (query) — show critical dependency path across projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"blockers.show","description":"nexus.blockers.show (query) — show blocking impact for a task query","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"orphans.list","description":"nexus.orphans.list (query) — list orphaned cross-project dependencies","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"discover","description":"nexus.discover (query) — discover related tasks across registered projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["query"],"params":[{"name":"query","type":"string","required":true,"description":"query parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"nexus","operation":"search","description":"nexus.search (query) — search for patterns across registered projects","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pattern"],"params":[{"name":"pattern","type":"string","required":true,"description":"pattern parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"init","description":"nexus.init (mutate) — initialize NEXUS (creates registry and directories)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"register","description":"nexus.register (mutate) — register a project in NEXUS","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["path"],"params":[{"name":"path","type":"string","required":true,"description":"path parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"unregister","description":"nexus.unregister (mutate) — remove a project from NEXUS","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"name parameter"}]},{"gateway":"mutate","domain":"nexus","operation":"sync","description":"nexus.sync (mutate) — sync project(s) metadata; absorbs sync.all when name omitted","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"name","type":"string","required":false,"description":"Project name to sync (omit to sync all)"}]},{"gateway":"mutate","domain":"nexus","operation":"permission.set","description":"nexus.permission.set (mutate) — update project permissions","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name","level"],"params":[{"name":"name","type":"string","required":true,"description":"name parameter"},{"name":"level","type":"string","required":true,"description":"level parameter"}]},{"gateway":"mutate","domain":"nexus","operation":"reconcile","description":"nexus.reconcile (mutate) — reconcile project identity with global nexus registry","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"transfer.preview","description":"nexus.transfer.preview (query) — preview a cross-project task transfer","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskIds","sourceProject","targetProject"],"params":[{"name":"taskIds","type":"array","required":true,"description":"Task IDs to transfer"},{"name":"sourceProject","type":"string","required":true,"description":"Source project name or hash"},{"name":"targetProject","type":"string","required":true,"description":"Target project name or hash"},{"name":"mode","type":"string","required":false,"description":"Transfer mode: 'copy' (default) or 'move'"},{"name":"scope","type":"string","required":false,"description":"Transfer scope: 'subtree' (default) or 'single'"}]},{"gateway":"mutate","domain":"nexus","operation":"transfer","description":"nexus.transfer (mutate) — transfer tasks between NEXUS projects","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["taskIds","sourceProject","targetProject"],"params":[{"name":"taskIds","type":"array","required":true,"description":"Task IDs to transfer"},{"name":"sourceProject","type":"string","required":true,"description":"Source project name or hash"},{"name":"targetProject","type":"string","required":true,"description":"Target project name or hash"},{"name":"mode","type":"string","required":false,"description":"Transfer mode: 'copy' (default) or 'move'"},{"name":"scope","type":"string","required":false,"description":"Transfer scope: 'subtree' (default) or 'single'"},{"name":"onConflict","type":"string","required":false,"description":"Conflict strategy: 'rename' (default), 'skip', 'duplicate', 'fail'"},{"name":"transferBrain","type":"boolean","required":false,"description":"Whether to transfer brain observations (default: false)"}]},{"gateway":"query","domain":"nexus","operation":"top-entries","description":"nexus.top-entries (query) — top-weighted symbols from nexus_relations by weight DESC (Hebbian plasticity aggregate)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum entries to return (default: 20)"},{"name":"kind","type":"string","required":false,"description":"Filter by nexus_nodes.kind (e.g. function, method, class, interface)"}]},{"gateway":"query","domain":"nexus","operation":"impact","description":"nexus.impact (query) — BFS blast radius for a symbol with optional reasons[] path-strings when why=true","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name to analyze (case-insensitive substring match)"},{"name":"why","type":"boolean","required":false,"description":"Append reasons[] per affected symbol (caller count, edge strength, hop depth). Default false"},{"name":"depth","type":"number","required":false,"description":"Maximum BFS depth (default 3, capped at 5)"},{"name":"projectId","type":"string","required":false,"description":"Override project ID (default: auto-detected from cwd)"}]},{"gateway":"query","domain":"nexus","operation":"full-context","description":"nexus.full-context (query) — full 5-substrate Living Brain context for a code symbol (NEXUS callers/callees, BRAIN memories, TASKS, sentient proposals, conduit threads)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name or nexus node ID"}]},{"gateway":"query","domain":"nexus","operation":"task-footprint","description":"nexus.task-footprint (query) — full code impact for a task: files, symbols, blast radius, brain observations, decisions, risk tier","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID (e.g., T001)"}]},{"gateway":"query","domain":"nexus","operation":"brain-anchors","description":"nexus.brain-anchors (query) — code anchors for a brain memory entry: linked nexus nodes, tasks that touched them, plasticity signal","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["entryId"],"params":[{"name":"entryId","type":"string","required":true,"description":"Brain entry node ID (e.g., observation:abc123)"}]},{"gateway":"query","domain":"nexus","operation":"why","description":"nexus.why (query) — causal trace: why is a code symbol structured this way? walks BRAIN decisions, observations, and tasks","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name or nexus node ID to trace"}]},{"gateway":"query","domain":"nexus","operation":"impact-full","description":"nexus.impact-full (query) — merged structural + task + brain impact report for a code symbol","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name or nexus node ID to analyze"}]},{"gateway":"query","domain":"nexus","operation":"route-map","description":"nexus.route-map (query) — display all routes with their handlers and dependencies for a project (route ID, handler name, HTTP method/path, dep count, caller count)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectId","type":"string","required":false,"description":"Project identifier (auto-derived from project root if omitted)"}]},{"gateway":"query","domain":"nexus","operation":"shape-check","description":"nexus.shape-check (query) — check response shape compatibility between a route handler and its callers; returns per-caller compatibility status and recommendations","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["routeSymbol"],"params":[{"name":"routeSymbol","type":"string","required":true,"description":"Route symbol ID (format: <filePath>::<routeName>)"},{"name":"projectId","type":"string","required":false,"description":"Project identifier (auto-derived from project root if omitted)"}]},{"gateway":"query","domain":"nexus","operation":"search-code","description":"nexus.search-code (query) — BM25 search of code symbols in nexus.db; returns symbol names, kinds, file paths, and relevance scores","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pattern"],"params":[{"name":"pattern","type":"string","required":true,"description":"Search query (symbol name, file pattern, or keyword)"},{"name":"limit","type":"number","required":false,"description":"Max results (default: 10)"}]},{"gateway":"query","domain":"nexus","operation":"wiki","description":"nexus.wiki (query) — generate community-grouped wiki index from the nexus code graph; scaffold mode when LOOM provider unavailable","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"outputDir","type":"string","required":false,"description":"Output directory for wiki files (default: <projectRoot>/.cleo/wiki)"},{"name":"communityFilter","type":"string","required":false,"description":"Filter generation to a single community ID (e.g. \\"community:3\\")"},{"name":"incremental","type":"boolean","required":false,"description":"Only regenerate communities whose symbols changed since last wiki run (uses .cleo/wiki-state.json)"}]},{"gateway":"query","domain":"nexus","operation":"contracts-show","description":"nexus.contracts-show (query) — show contract compatibility matrix between two registered projects; matches HTTP/gRPC/topic contracts and returns per-match compatibility scores","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["projectA","projectB"],"params":[{"name":"projectA","type":"string","required":true,"description":"First project name or ID"},{"name":"projectB","type":"string","required":true,"description":"Second project name or ID"}]},{"gateway":"query","domain":"nexus","operation":"task-symbols","description":"nexus.task-symbols (query) — show code symbols touched by a task via task_touches_symbol forward-lookup; returns symbol label, kind, filePath, weight, matchStrategy","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to look up (e.g. T001)"}]},{"gateway":"mutate","domain":"nexus","operation":"contracts-sync","description":"nexus.contracts-sync (mutate) — extract HTTP, gRPC, and topic contracts from a project and store them in nexus.db; idempotent upsert","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd / projectRoot)"},{"name":"projectId","type":"string","required":false,"description":"Override the project ID (default: auto-detected from repoPath)"}]},{"gateway":"mutate","domain":"nexus","operation":"contracts-link-tasks","description":"nexus.contracts-link-tasks (mutate) — link extracted contracts to tasks that touch their source symbols via task_touches_symbol edges; runs git-log task linker","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd / projectRoot)"},{"name":"projectId","type":"string","required":false,"description":"Override the project ID (default: auto-detected from repoPath)"}]},{"gateway":"mutate","domain":"nexus","operation":"conduit-scan","description":"nexus.conduit-scan (mutate) — scan conduit messages for symbol mentions and write conduit_mentions_symbol edges to brain_page_edges; gracefully no-ops when conduit.db or nexus.db is absent","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"profile.view","description":"nexus.profile.view (query) — list all user-profile traits, optionally filtered by minimum confidence","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"minConfidence","type":"number","required":false,"description":"Minimum confidence threshold in [0.0, 1.0]. Defaults to 0.0."},{"name":"includeSuperseded","type":"boolean","required":false,"description":"Include superseded (deprecated) traits. Defaults to false."}]},{"gateway":"query","domain":"nexus","operation":"profile.get","description":"nexus.profile.get (query) — fetch a single user-profile trait by key","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["traitKey"],"params":[{"name":"traitKey","type":"string","required":true,"description":"Trait key to retrieve (e.g. \\"prefers-zero-deps\\")","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"profile.import","description":"nexus.profile.import (mutate) — import user-profile traits from a portable JSON file (default: ~/.cleo/user_profile.json)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"path","type":"string","required":false,"description":"Absolute path to the JSON file. Defaults to ~/.cleo/user_profile.json."}]},{"gateway":"mutate","domain":"nexus","operation":"profile.export","description":"nexus.profile.export (mutate) — export user-profile traits to a portable JSON file (default: ~/.cleo/user_profile.json)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"path","type":"string","required":false,"description":"Absolute output path. Defaults to ~/.cleo/user_profile.json."}]},{"gateway":"mutate","domain":"nexus","operation":"profile.reinforce","description":"nexus.profile.reinforce (mutate) — increment reinforcement count and boost confidence for a user-profile trait","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["traitKey"],"params":[{"name":"traitKey","type":"string","required":true,"description":"Key of the trait to reinforce","cli":{"positional":true}},{"name":"source","type":"string","required":false,"description":"Source identifier for this reinforcement event. Defaults to \\"manual\\"."}]},{"gateway":"mutate","domain":"nexus","operation":"profile.upsert","description":"nexus.profile.upsert (mutate) — create or update a user-profile trait in nexus.db","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["trait"],"params":[{"name":"trait","type":"string","required":true,"description":"UserProfileTrait JSON object with traitKey, traitValue, confidence, source (accepted as JSON string at CLI boundary; parsed in dispatch handler)"}]},{"gateway":"mutate","domain":"nexus","operation":"profile.supersede","description":"nexus.profile.supersede (mutate) — mark a user-profile trait as superseded by another (T1139 supersession prep)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["oldKey","newKey"],"params":[{"name":"oldKey","type":"string","required":true,"description":"Trait key being deprecated"},{"name":"newKey","type":"string","required":true,"description":"Trait key that replaces the old one"}]},{"gateway":"query","domain":"nexus","operation":"sigil.list","description":"nexus.sigil.list (query) — list every sigil currently stored in nexus.db, optionally filtered by role","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"role","type":"string","required":false,"description":"Filter by role (e.g. \\"orchestrator\\", \\"lead\\", \\"worker\\", \\"specialist\\", \\"subagent\\")"}]},{"gateway":"mutate","domain":"nexus","operation":"sigil.sync","description":"nexus.sigil.sync (mutate) — populate the sigils table with one row per canonical CANT agent (cleo-subagent + 5 seed roles + 2 meta agents). Idempotent.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"nexus","operation":"clusters","description":"nexus.clusters (query) — list all detected Louvain community clusters for a project from nexus.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectId","type":"string","required":false,"description":"Override project ID"},{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd)"}]},{"gateway":"query","domain":"nexus","operation":"flows","description":"nexus.flows (query) — list all detected execution flow nodes for a project from nexus.db","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectId","type":"string","required":false,"description":"Override project ID"},{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd)"}]},{"gateway":"query","domain":"nexus","operation":"context","description":"nexus.context (query) — show callers, callees, community membership, and process participation for a code symbol","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["symbol"],"params":[{"name":"symbol","type":"string","required":true,"description":"Symbol name to look up","cli":{"positional":true}},{"name":"projectId","type":"string","required":false,"description":"Override project ID"},{"name":"limit","type":"number","required":false,"description":"Max callers/callees per side (default: 20)"},{"name":"content","type":"boolean","required":false,"description":"Append source code content"}]},{"gateway":"query","domain":"nexus","operation":"projects.list","description":"nexus.projects.list (query) — list all projects registered in the global nexus registry","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"nexus","operation":"projects.register","description":"nexus.projects.register (mutate) — register a project in the global nexus registry","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["path"],"params":[{"name":"path","type":"string","required":true,"description":"Path to the project directory","cli":{"positional":true}},{"name":"name","type":"string","required":false,"description":"Custom project name"}]},{"gateway":"mutate","domain":"nexus","operation":"projects.remove","description":"nexus.projects.remove (mutate) — remove a project from the global nexus registry","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["nameOrHash"],"params":[{"name":"nameOrHash","type":"string","required":true,"description":"Project name or hash to remove","cli":{"positional":true}}]},{"gateway":"mutate","domain":"nexus","operation":"projects.scan","description":"nexus.projects.scan (mutate) — walk filesystem roots to discover unregistered .cleo/ project directories","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"roots","type":"string","required":false,"description":"Comma-separated search roots"},{"name":"maxDepth","type":"number","required":false,"description":"Maximum traversal depth (default: 4)"},{"name":"autoRegister","type":"boolean","required":false,"description":"Auto-register discovered projects"},{"name":"includeExisting","type":"boolean","required":false,"description":"Also report already-registered projects"}]},{"gateway":"mutate","domain":"nexus","operation":"projects.clean","description":"nexus.projects.clean (mutate) — bulk-purge project registry rows matching configurable criteria","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dryRun","type":"boolean","required":false,"description":"Dry-run only (no deletions)"},{"name":"pattern","type":"string","required":false,"description":"JS regex matched against project_path"},{"name":"includeTemp","type":"boolean","required":false,"description":"Match .temp/ paths"},{"name":"includeTests","type":"boolean","required":false,"description":"Match test/tmp/fixture paths"},{"name":"matchUnhealthy","type":"boolean","required":false,"description":"Match unhealthy rows"},{"name":"matchNeverIndexed","type":"boolean","required":false,"description":"Match never-indexed rows"},{"name":"matchOrphaned","type":"boolean","required":false,"description":"Match rows whose project_path no longer exists on disk (T9117)"},{"name":"removeFs","type":"boolean","required":false,"description":"After DB delete, rm -rf each matched on-disk directory (T9117)"},{"name":"vacuum","type":"boolean","required":false,"description":"After delete, run sqlite VACUUM on nexus.db to reclaim space (T9117)"}]},{"gateway":"mutate","domain":"nexus","operation":"refresh-bridge","description":"nexus.refresh-bridge (mutate) — regenerate .cleo/nexus-bridge.md from the existing nexus.db index","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"repoPath","type":"string","required":false,"description":"Path to project directory (default: cwd)"},{"name":"projectId","type":"string","required":false,"description":"Override project ID"}]},{"gateway":"query","domain":"nexus","operation":"diff","description":"nexus.diff (query) — compare NEXUS index state between two git commits; shows new/removed relations and broken call chains","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"beforeRef","type":"string","required":false,"description":"Git ref for \\"before\\" snapshot (default: HEAD~1)"},{"name":"afterRef","type":"string","required":false,"description":"Git ref for \\"after\\" snapshot (default: HEAD)"},{"name":"repoPath","type":"string","required":false,"description":"Repository path (default: cwd)"},{"name":"projectId","type":"string","required":false,"description":"Override project ID"}]},{"gateway":"query","domain":"nexus","operation":"query-cte","description":"nexus.query-cte (query) — execute a recursive CTE query against nexus.db; supports template aliases (callers-of, callees-of, co-changed, co-cited, path-between, community-members)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["cte"],"params":[{"name":"cte","type":"string","required":true,"description":"CTE SQL or template alias","cli":{"positional":true}},{"name":"params","type":"string","required":false,"description":"Comma-separated CTE parameters"}]},{"gateway":"query","domain":"nexus","operation":"hot-paths","description":"nexus.hot-paths (query) — list highest-weight relation edges by Hebbian plasticity weight","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum edges to return (default: 20)"}]},{"gateway":"query","domain":"nexus","operation":"hot-nodes","description":"nexus.hot-nodes (query) — list symbols with highest aggregate Hebbian weight","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum nodes to return (default: 20)"}]},{"gateway":"query","domain":"nexus","operation":"cold-symbols","description":"nexus.cold-symbols (query) — list cold symbols (stale access + low weight) as pruning candidates","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"days","type":"number","required":false,"description":"Age threshold in days (default: 30)"}]},{"gateway":"query","domain":"sticky","operation":"list","description":"sticky.list (query) — list sticky notes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"sticky","operation":"show","description":"sticky.show (query) — show a specific sticky note","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["stickyId"],"params":[{"name":"stickyId","type":"string","required":true,"description":"stickyId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sticky","operation":"add","description":"sticky.add (mutate) — create a new sticky note","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["content"],"params":[{"name":"content","type":"string","required":true,"description":"content parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sticky","operation":"convert","description":"sticky.convert (mutate) — convert sticky to task, memory, task_note, or session_note","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["stickyId","targetType"],"params":[{"name":"stickyId","type":"string","required":true,"description":"ID of the sticky note"},{"name":"targetType","type":"string","required":true,"description":"Target type: task, memory, task_note, or session_note"},{"name":"title","type":"string","required":false,"description":"Optional task title (for task conversion)"},{"name":"memoryType","type":"string","required":false,"description":"Optional memory type (for memory conversion)"},{"name":"taskId","type":"string","required":false,"description":"Target task ID (required for task_note conversion)"},{"name":"sessionId","type":"string","required":false,"description":"Target session ID (optional for session_note conversion, defaults to active session)"}]},{"gateway":"mutate","domain":"sticky","operation":"archive","description":"sticky.archive (mutate) — archive sticky notes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["stickyId"],"params":[{"name":"stickyId","type":"string","required":true,"description":"stickyId parameter","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sticky","operation":"purge","description":"sticky.purge (mutate) — permanently delete sticky notes","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["stickyId"],"params":[{"name":"stickyId","type":"string","required":true,"description":"stickyId parameter","cli":{"positional":true}}]},{"gateway":"query","domain":"orchestrate","operation":"classify","description":"orchestrate.classify (query) — classify a request against CANT team registry to route to correct team/lead/protocol","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["request"],"params":[{"name":"request","type":"string","required":true,"description":"The request or task description to classify against team consult-when hints"},{"name":"context","type":"string","required":false,"description":"Optional additional context to improve classification accuracy"}]},{"gateway":"query","domain":"orchestrate","operation":"fanout.status","description":"orchestrate.fanout.status (query) — get status of a running fanout by its manifest entry ID","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["manifestEntryId"],"params":[{"name":"manifestEntryId","type":"string","required":true,"description":"Manifest entry ID returned by orchestrate.fanout"}]},{"gateway":"mutate","domain":"orchestrate","operation":"fanout","description":"orchestrate.fanout (mutate) — fan out N spawn requests in parallel via Promise.allSettled","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["items"],"params":[{"name":"items","type":"array","required":true,"description":"Array of {team, taskId, skill?} objects to fan out"}]},{"gateway":"query","domain":"conduit","operation":"status","description":"conduit.status (query) — check agent connection status and unread count","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"agentId","type":"string","required":false,"description":"Agent ID to check (defaults to active agent)"}]},{"gateway":"query","domain":"conduit","operation":"peek","description":"conduit.peek (query) — one-shot poll for new messages without acking","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"agentId","type":"string","required":false,"description":"Agent ID to poll as (defaults to active agent)"},{"name":"limit","type":"number","required":false,"description":"Max messages to fetch (default: 20)"}]},{"gateway":"mutate","domain":"conduit","operation":"start","description":"conduit.start (mutate) — start continuous message polling for the active agent","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"agentId","type":"string","required":false,"description":"Agent ID to poll as (defaults to active agent)"},{"name":"pollIntervalMs","type":"number","required":false,"description":"Poll interval in milliseconds (default: 5000)"},{"name":"groupConversationIds","type":"array","required":false,"description":"Group conversation IDs to monitor for @mentions"}]},{"gateway":"mutate","domain":"conduit","operation":"stop","description":"conduit.stop (mutate) — stop the active polling loop","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"conduit","operation":"send","description":"conduit.send (mutate) — send a message to an agent or conversation","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["content"],"params":[{"name":"to","type":"string","required":false,"description":"Target agent ID (required if no conversationId)"},{"name":"conversationId","type":"string","required":false,"description":"Target conversation ID (required if no to)"},{"name":"content","type":"string","required":true,"description":"Message content to send"},{"name":"agentId","type":"string","required":false,"description":"Send as this agent (defaults to active agent)"}]},{"gateway":"mutate","domain":"conduit","operation":"publish","description":"conduit.publish (mutate) — publish message to a topic (A2A, T1252)","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["topicName","payload"],"params":[{"name":"topicName","type":"string","required":true,"description":"Topic to publish to"},{"name":"payload","type":"string","required":true,"description":"Message payload (JSON-stringified object)"},{"name":"agentId","type":"string","required":false,"description":"Publish as this agent (defaults to active agent)"}]},{"gateway":"mutate","domain":"conduit","operation":"subscribe","description":"conduit.subscribe (mutate) — subscribe agent to a topic (A2A, T1252)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["topicName"],"params":[{"name":"topicName","type":"string","required":true,"description":"Topic to subscribe to"},{"name":"agentId","type":"string","required":false,"description":"Agent to subscribe (defaults to active agent)"},{"name":"filter","type":"string","required":false,"description":"Optional filter expression (JSON-stringified) for subscription"}]},{"gateway":"query","domain":"conduit","operation":"listen","description":"conduit.listen (query) — one-shot poll for topic messages (A2A, T1252)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["topicName"],"params":[{"name":"topicName","type":"string","required":true,"description":"Topic to poll"},{"name":"agentId","type":"string","required":false,"description":"Agent to poll as (defaults to active agent)"},{"name":"max","type":"number","required":false,"description":"Max messages to return (default: 20)"}]},{"gateway":"query","domain":"intelligence","operation":"predict","description":"Calculate risk score for a task, or predict validation outcome for a stage","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to assess"},{"name":"stage","type":"string","required":false,"description":"Lifecycle stage for validation outcome prediction"}]},{"gateway":"query","domain":"intelligence","operation":"suggest","description":"Suggest verification gate focus for a task","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to analyze"}]},{"gateway":"query","domain":"intelligence","operation":"learn-errors","description":"Extract recurring failure patterns from task and brain history","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum number of patterns to return"}]},{"gateway":"query","domain":"intelligence","operation":"confidence","description":"Score verification confidence for a task based on current gate state","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to score"}]},{"gateway":"query","domain":"intelligence","operation":"match","description":"Match known brain patterns against a task","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to match patterns against"}]},{"gateway":"query","domain":"diagnostics","operation":"status","description":"diagnostics.status (query) — show telemetry opt-in state and DB path","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"diagnostics","operation":"analyze","description":"diagnostics.analyze (query) — aggregate telemetry patterns; surface failing/slow commands and generate BRAIN observations","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"days","type":"number","required":false,"description":"Analysis window in days (default: 30)","cli":{"flag":"days","short":"-d"}},{"name":"noBrain","type":"boolean","required":false,"description":"Skip pushing observations to BRAIN","cli":{"flag":"no-brain"}}]},{"gateway":"query","domain":"diagnostics","operation":"export","description":"diagnostics.export (query) — JSON dump of all telemetry events","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"days","type":"number","required":false,"description":"Limit export to last N days (default: all)","cli":{"flag":"days","short":"-d"}}]},{"gateway":"mutate","domain":"diagnostics","operation":"enable","description":"diagnostics.enable (mutate) — opt in to anonymous command telemetry; generates stable anonymousId","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"diagnostics","operation":"disable","description":"diagnostics.disable (mutate) — opt out of telemetry collection","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"docs","operation":"add","description":"docs.add (mutate) — attach a local file, URL, or inline content to a CLEO owner entity (task, session, observation)","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["ownerId"],"params":[{"name":"ownerId","type":"string","required":true,"description":"Owner entity ID (e.g. T123, ses_*, O-abc)"},{"name":"file","type":"string","required":false,"description":"Path to local file to attach"},{"name":"url","type":"string","required":false,"description":"Remote URL to attach"},{"name":"content","type":"string","required":false,"description":"Inline document body (T10965); mutually exclusive with file/url"},{"name":"desc","type":"string","required":false,"description":"Free-text description"},{"name":"labels","type":"string","required":false,"description":"Comma-separated labels"},{"name":"attachedBy","type":"string","required":false,"description":"Agent identity (defaults to \\"human\\")"}]},{"gateway":"query","domain":"docs","operation":"list","description":"docs.list (query) — list attachments associated with a CLEO owner entity","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"task","type":"string","required":false,"description":"Filter by task ID (e.g. T123)"},{"name":"session","type":"string","required":false,"description":"Filter by session ID (e.g. ses_*)"},{"name":"observation","type":"string","required":false,"description":"Filter by observation ID (e.g. O-abc)"}]},{"gateway":"query","domain":"docs","operation":"fetch","description":"docs.fetch (query) — retrieve attachment bytes and metadata by attachment ID or SHA-256","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["attachmentRef"],"params":[{"name":"attachmentRef","type":"string","required":true,"description":"Attachment ID (att_*) or SHA-256 hex"}]},{"gateway":"mutate","domain":"docs","operation":"remove","description":"docs.remove (mutate) — remove an attachment ref from an owner; purges blob when refCount reaches zero","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["attachmentRef","from"],"params":[{"name":"attachmentRef","type":"string","required":true,"description":"Attachment ID (att_*) or SHA-256 hex"},{"name":"from","type":"string","required":true,"description":"Owner entity ID to remove the ref from"}]},{"gateway":"mutate","domain":"docs","operation":"supersede","description":"docs.supersede (mutate) — atomically flip an older doc to \`superseded\` and link both rows via the supersedes/superseded_by self-FK pointers (T10162 · Saga T9855)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["oldSlug","newSlug"],"params":[{"name":"oldSlug","type":"string","required":true,"description":"Slug of the doc being replaced","cli":{"positional":true}},{"name":"newSlug","type":"string","required":true,"description":"Slug of the doc that replaces oldSlug","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Optional human-readable reason carried back on the response"}]},{"gateway":"query","domain":"docs","operation":"generate","description":"docs.generate (query) — generate llms.txt-format doc summarising all attachments on a CLEO entity","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["for"],"params":[{"name":"for","type":"string","required":true,"description":"Target entity ID (e.g. T798, ses_*, O-abc)"},{"name":"attach","type":"boolean","required":false,"description":"Save the generated output as an llms-txt attachment on the target entity"}]},{"gateway":"query","domain":"docs","operation":"llm-output","description":"docs.llm-output (query) — unified LLM output: task export (rich Markdown) or attachment-bundle (llms.txt). Replaces \`docs export\` and \`docs generate\`.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["for"],"params":[{"name":"for","type":"string","required":true,"description":"Target entity ID"},{"name":"mode","type":"string","required":false,"description":"Output mode: task-export|attachment-bundle (auto-detected)"},{"name":"out","type":"string","required":false,"description":"Output file path"},{"name":"includeAttachments","type":"boolean","required":false,"description":"Include attachment manifest (task-export)"},{"name":"includeMemoryRefs","type":"boolean","required":false,"description":"Include memory refs (task-export)"},{"name":"attach","type":"boolean","required":false,"description":"Save as llms-txt attachment (attachment-bundle)"}]},{"gateway":"mutate","domain":"docs","operation":"update","description":"docs.update (mutate) — replace blob content for an existing slug while preserving the slug. New sha256 + new attachment row; the old row stays reachable by ID for history. NO supersession edge (use \`cleo docs supersede\` for that). Audit log entry appended to .cleo/audit/docs-versioning.jsonl (squashed within a 5-min window).","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["slug"],"params":[{"name":"slug","type":"string","required":true,"description":"Slug of the existing attachment to update","cli":{"positional":true}},{"name":"file","type":"string","required":false,"description":"Path to a local file containing the new content"},{"name":"allowExternal","type":"boolean","required":false,"description":"Permit --file to resolve outside the canonical project root; required for explicit external/worktree update ingestion.","cli":{"flag":"allow-external"}},{"name":"content","type":"string","required":false,"description":"Inline UTF-8 content (mutually exclusive with file)"},{"name":"message","type":"string","required":false,"description":"One-line summary describing the change (recorded in the audit log)"},{"name":"status","type":"string","required":false,"enum":["draft","proposed","accepted","superseded","archived","deprecated"],"description":"Override the new lifecycle status. Defaults to \\"draft\\" on every update. Valid: draft|proposed|accepted|superseded|archived|deprecated."},{"name":"dryRun","type":"boolean","required":false,"description":"Preview validation and resulting envelope without mutating attachment rows, blob storage, or audit logs.","cli":{"flag":"dry-run"}},{"name":"strict","type":"boolean","required":false,"description":"Fail body-schema diagnostics instead of surfacing advisory warnings before the write."},{"name":"attachedBy","type":"string","required":false,"description":"Agent identity that performed the update (defaults to \\"human\\")","cli":{"flag":"attached-by"}}]},{"gateway":"mutate","domain":"playbook","operation":"run","description":"playbook.run (mutate) — load a .cantbook by name and execute it via the playbook runtime state machine","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"Playbook name (looks up <name>.cantbook in the configured search path)","cli":{"positional":true}},{"name":"context","type":"string","required":false,"description":"JSON object string seeding the initial run context (e.g. {\\"epicId\\":\\"T999\\"})"}]},{"gateway":"query","domain":"playbook","operation":"status","description":"playbook.status (query) — return the current state of a playbook run from playbook_runs","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Playbook run identifier (FK into playbook_runs.run_id)","cli":{"positional":true}}]},{"gateway":"mutate","domain":"playbook","operation":"resume","description":"playbook.resume (mutate) — resume a paused playbook run once its HITL gate is approved","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["runId"],"params":[{"name":"runId","type":"string","required":true,"description":"Playbook run identifier to resume","cli":{"positional":true}}]},{"gateway":"query","domain":"playbook","operation":"list","description":"playbook.list (query) — enumerate playbook runs with optional status filter (active|completed|pending)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"status","type":"string","required":false,"description":"Filter on status (active|running|pending|paused|completed|failed|cancelled)"},{"name":"epicId","type":"string","required":false,"description":"Filter runs by the epic they belong to"},{"name":"limit","type":"number","required":false,"description":"Maximum number of runs to return"},{"name":"offset","type":"number","required":false,"description":"Skip the first N runs (applied after limit)"}]},{"gateway":"query","domain":"playbook","operation":"validate","description":"playbook.validate (query) — parse and validate a .cantbook file without executing it; exit 0 on success, exit 70 on parse error","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"file","type":"string","required":false,"description":"Absolute or relative path to the .cantbook file","cli":{"positional":true}},{"name":"name","type":"string","required":false,"description":"Playbook name (resolved through the standard search path)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"approve","description":"orchestrate.approve (mutate) — approve a pending playbook approval gate to unblock the run","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["resumeToken"],"params":[{"name":"resumeToken","type":"string","required":true,"description":"HMAC-signed resume token returned when the gate was created","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Optional justification note recorded on the approval row"},{"name":"approver","type":"string","required":false,"description":"Identity of the approver (defaults to cli-user)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"reject","description":"orchestrate.reject (mutate) — reject a pending playbook approval gate with a mandatory reason","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["resumeToken","reason"],"params":[{"name":"resumeToken","type":"string","required":true,"description":"HMAC-signed resume token returned when the gate was created","cli":{"positional":true}},{"name":"reason","type":"string","required":true,"description":"Justification for the rejection (recorded on the audit row)"},{"name":"approver","type":"string","required":false,"description":"Identity of the rejector (defaults to cli-user)"}]},{"gateway":"query","domain":"orchestrate","operation":"pending","description":"orchestrate.pending (query) — list all approval gates awaiting a decision across every run","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"orchestrate","operation":"worktree.complete","description":"orchestrate.worktree.complete (mutate) — merge (--no-ff) a task worktree branch into the project default branch (preserves agent commit SHAs per ADR-062) and clean up the worktree. T9548: idempotent (re-run on completed worktree = no-op).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose worktree should be merged and cleaned up"},{"name":"resolve","type":"string","required":false,"description":"T9548 conflict-recovery mode: \\"auto\\" (default — attempt git merge --no-ff) or \\"manual\\" (skip merge, mark worktree as manually-handled in audit log)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"worktree.cleanup","description":"orchestrate.worktree.cleanup (mutate) — prune orphaned agent worktrees (e.g. after agent crash or session end)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"olderThanHours","type":"number","required":false,"description":"Remove worktrees idle for longer than this many hours (default: 24)"}]},{"gateway":"mutate","domain":"orchestrate","operation":"worktree.prune","description":"orchestrate.worktree.prune (mutate) — prune the worktree for a single completed task, or all orphaned worktrees when no taskId is supplied","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"taskId","type":"string","required":false,"description":"Task ID whose worktree should be pruned (omit for bulk prune)"}]},{"gateway":"query","domain":"sentient","operation":"status","description":"sentient.status (query) — daemon state, kill-switch status, Tier-2 enabled flag, and proposal statistics","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[],"mcpExposed":true},{"gateway":"query","domain":"sentient","operation":"propose.list","description":"sentient.propose.list (query) — list all pending Tier-2 proposals (status=proposed)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"limit","type":"number","required":false,"description":"Maximum number of proposals to return (default: 50)"}],"mcpExposed":true},{"gateway":"query","domain":"sentient","operation":"propose.diff","description":"sentient.propose.diff (query) — show what a proposal would change (Tier-3 stub)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Proposal task ID","cli":{"positional":true}}]},{"gateway":"query","domain":"sentient","operation":"allowlist.list","description":"sentient.allowlist.list (query) — list owner pubkeys in the sentient allowlist","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"sentient","operation":"propose.accept","description":"sentient.propose.accept (mutate) — accept a Tier-2 proposal, transitioning proposed → pending","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Proposal task ID to accept","cli":{"positional":true}}]},{"gateway":"mutate","domain":"sentient","operation":"propose.reject","description":"sentient.propose.reject (mutate) — reject a Tier-2 proposal, transitioning proposed → cancelled","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Proposal task ID to reject","cli":{"positional":true}},{"name":"reason","type":"string","required":false,"description":"Human-readable reason for rejection"}]},{"gateway":"mutate","domain":"sentient","operation":"propose.run","description":"sentient.propose.run (mutate) — manually trigger a single Tier-2 propose tick in-process","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"sentient","operation":"propose.enable","description":"sentient.propose.enable (mutate) — enable Tier-2 autonomous proposal generation (M7 gate)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[],"mcpExposed":true},{"gateway":"mutate","domain":"sentient","operation":"propose.disable","description":"sentient.propose.disable (mutate) — disable Tier-2 autonomous proposal generation","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"sentient","operation":"allowlist.add","description":"sentient.allowlist.add (mutate) — add a base64-encoded owner pubkey to the sentient allowlist","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pubkey"],"params":[{"name":"pubkey","type":"string","required":true,"description":"Base64-encoded public key to add"}]},{"gateway":"mutate","domain":"sentient","operation":"allowlist.remove","description":"sentient.allowlist.remove (mutate) — remove a base64-encoded owner pubkey from the sentient allowlist","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["pubkey"],"params":[{"name":"pubkey","type":"string","required":true,"description":"Base64-encoded public key to remove"}]},{"gateway":"query","domain":"release","operation":"gate","description":"release.gate (query) — check all IVTR loops in a release epic have reached the released phase before allowing release.ship (T820 RELEASE-03)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID whose child tasks should be inspected"},{"name":"force","type":"boolean","required":false,"description":"Bypass the IVTR gate — requires explicit owner confirmation"}]},{"gateway":"mutate","domain":"release","operation":"gate","description":"release.gate (mutate) — same IVTR gate check as query.gate; safe in both gateways (no DB writes)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["epicId"],"params":[{"name":"epicId","type":"string","required":true,"description":"Epic ID whose child tasks should be inspected"},{"name":"force","type":"boolean","required":false,"description":"Bypass the IVTR gate — requires explicit owner confirmation"}]},{"gateway":"query","domain":"release","operation":"ivtr-suggest","description":"release.ivtr-suggest (query) — check if all epic tasks are released and suggest cleo release ship (T820 RELEASE-07)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID that just reached the released phase"}]},{"gateway":"mutate","domain":"release","operation":"ivtr-suggest","description":"release.ivtr-suggest (mutate) — same auto-suggest as query.ivtr-suggest; safe in both gateways (no DB writes)","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID that just reached the released phase"}]},{"gateway":"mutate","domain":"release","operation":"plan","description":"release.plan (mutate) — build canonical Release Plan envelope, write .cleo/release/<version>.plan.json, INSERT/UPDATE releases row status=planned (T9525 / SPEC-T9345 §4.2).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Candidate version (e.g. v2026.5.80)"},{"name":"epicId","type":"string","required":false,"description":"Epic task ID whose children scope the release (R-303); mutually exclusive with sagaId/taskIds"},{"name":"sagaId","type":"string","required":false,"description":"Saga task ID whose grouped member Epics scope the release; mutually exclusive with epicId/taskIds"},{"name":"taskIds","type":"array","required":false,"description":"Explicit task-list release scope; mutually exclusive with epicId/sagaId (T10088)"},{"name":"scheme","type":"string","required":false,"description":"Versioning scheme: calver | semver | calver-suffix"},{"name":"channel","type":"string","required":false,"description":"Release channel: latest | beta | alpha | rc"},{"name":"hotfix","type":"boolean","required":false,"description":"Mark plan as release_kind=hotfix"},{"name":"dryRun","type":"boolean","required":false,"description":"Compute the plan without writing file or DB row"}]},{"gateway":"mutate","domain":"release","operation":"open","description":"release.open (mutate) — dispatch release-prepare.yml via gh workflow run, UPDATE releases.status to pr-opened (T9530 / SPEC-T9345 §4.3).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Release version whose plan file lives at .cleo/release/<version>.plan.json"},{"name":"workflow","type":"string","required":false,"description":"Workflow file name (default: release-prepare.yml)"},{"name":"watch","type":"boolean","required":false,"description":"Poll gh run watch until terminal state"},{"name":"commitPlan","type":"boolean","required":false,"description":"Commit plan file before dispatching"},{"name":"epic","type":"string","required":false,"description":"Epic task ID forwarded as the plan scope (e.g. T9999)"},{"name":"tasks","type":"string","required":false,"description":"Comma-separated task IDs forwarded as the plan scope for a task-scoped release"}]},{"gateway":"mutate","domain":"release","operation":"reconcile","description":"release.reconcile (mutate) — v2 reconcile verb: backfill the 11 provenance tables from git log + gh api. Single SQLite TX, UPSERT-everywhere, idempotent (T9526 / SPEC-T9345 §4.4).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Version string whose tag has landed on main (e.g. v2026.6.0)"},{"name":"fromWorkflow","type":"boolean","required":false,"description":"Indicates invocation from release-publish.yml (affects logging only)"},{"name":"rollback","type":"boolean","required":false,"description":"Reconcile a rollback rather than a publish (deferred to T9528)"}]},{"gateway":"query","domain":"release","operation":"validate-changelog","description":"release.validate-changelog (query) — validate that CHANGELOG.md contains the canonical \`## [VERSION]\` header per ADR-028 §2.5. Replaces the brittle inline grep in .github/workflows/release.yml (T9937 / Saga T9862).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["version"],"params":[{"name":"version","type":"string","required":true,"description":"Release version (accepts v2026.5.94 or 2026.5.94)","cli":{"positional":true}},{"name":"changelogPath","type":"string","required":false,"description":"Override the CHANGELOG file path (default: <projectRoot>/CHANGELOG.md)"}]},{"gateway":"mutate","domain":"provenance","operation":"backfill","description":"provenance.backfill (mutate) — walk historical git tags from --since forward and populate the 11 provenance tables. UPSERT-everywhere, idempotent, restartable via .cleo/release/backfill-state.json (T9528 / SPEC-T9345 §8.3).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["since"],"params":[{"name":"since","type":"string","required":true,"allowEmpty":true,"description":"Lower-bound version (exclusive). Empty string = walk every reachable tag from the beginning of history."},{"name":"forceOverwrite","type":"boolean","required":false,"description":"UPDATE existing rows on conflict (audit-logged). Default: UPSERT only."},{"name":"dryRun","type":"boolean","required":false,"description":"Enumerate the tag set and return the plan without writing to the DB"},{"name":"resetCheckpoint","type":"boolean","required":false,"description":"Clear .cleo/release/backfill-state.json before starting (do NOT resume)"}]},{"gateway":"query","domain":"provenance","operation":"verify","description":"provenance.verify (query) — READ-ONLY audit of the 11 provenance tables for a release. Checks FK integrity (release_commits, task_commits, pr_commits, pr_tasks, release_changes, release_artifacts), orphan rows, and ADR-051 evidence-atom staleness. Exit code 0 on pass, non-zero on any fail (T9529 / SPEC-T9345 §4.6).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"version","type":"string","required":false,"description":"Release version to verify (e.g. v2026.6.0). Required unless --all is set."},{"name":"all","type":"boolean","required":false,"description":"Verify the most-recent N releases instead of a single version"},{"name":"limit","type":"number","required":false,"description":"How many releases to verify in --all mode (default 5)"}]},{"gateway":"query","domain":"llm","operation":"list","description":"llm.list (query) — list redacted credentials from the multi-credential pool, optionally filtered by provider","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Filter to a single provider transport"}]},{"gateway":"query","domain":"llm","operation":"test","description":"llm.test (query) — round-trip ping against the resolved provider; returns latency + response id (tokens never surfaced)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport to probe","cli":{"positional":true}},{"name":"label","type":"string","required":false,"description":"Credential label to pin the test to a specific store entry"},{"name":"model","type":"string","required":false,"description":"Model override (defaults to the provider's implicit fallback)"}]},{"gateway":"query","domain":"llm","operation":"whoami","description":"llm.whoami (query) — resolve every role and report which provider / model / credential would be picked","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"role","type":"string","required":false,"description":"Optional role filter (extraction | consolidation | derivation | hygiene | judgement)"}]},{"gateway":"query","domain":"llm","operation":"auxiliary-status","description":"llm.auxiliary-status (query) — show the active multi-provider auxiliary fallback chain and how to configure it (T9319)","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"projectRoot","type":"string","required":false,"description":"Optional project root for config resolution"}]},{"gateway":"mutate","domain":"llm","operation":"add","description":"llm.add (mutate) — upsert a credential into the multi-credential pool; auto-detects authType from token prefix","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","apiKey"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport","cli":{"positional":true}},{"name":"apiKey","type":"string","required":true,"description":"API key or OAuth bearer token to persist"},{"name":"label","type":"string","required":false,"description":"Human-readable label, unique within provider (default: 'default')"},{"name":"baseUrl","type":"string","required":false,"description":"Optional override for the provider base URL"},{"name":"authType","type":"string","required":false,"description":"Explicit auth type override ('api_key' | 'oauth' | 'aws_sdk')"},{"name":"priority","type":"number","required":false,"description":"Optional priority override (lower wins)"}]},{"gateway":"mutate","domain":"llm","operation":"remove","description":"llm.remove (mutate) — delete a (provider, label) credential pair from the pool","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider","label"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport","cli":{"positional":true}},{"name":"label","type":"string","required":true,"description":"Label of the credential to remove"}]},{"gateway":"mutate","domain":"llm","operation":"use","description":"llm.use (mutate) — set llm.default.{provider,model} in the global config","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider transport to mark as default","cli":{"positional":true}},{"name":"model","type":"string","required":false,"description":"Optional default model identifier"}]},{"gateway":"mutate","domain":"llm","operation":"profile","description":"llm.profile (mutate) — pin a role to a specific provider / model / credential label","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["role","provider"],"params":[{"name":"role","type":"string","required":true,"description":"Role name (extraction | consolidation | derivation | hygiene | judgement)","cli":{"positional":true}},{"name":"provider","type":"string","required":true,"description":"Provider transport for this role","cli":{"positional":true}},{"name":"model","type":"string","required":false,"description":"Optional model identifier for this role"},{"name":"credentialLabel","type":"string","required":false,"description":"Optional credential label to pin this role to a specific store entry"}]},{"gateway":"query","domain":"upgrade","operation":"workflows","description":"upgrade.workflows (query) — re-render the four release-pipeline workflow templates and report drift against .github/workflows/release-*.yml. Read-only (forces dryRun). Honours .workflow-overrides.yml for operator-declared customizations (T9536).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"includeRendered","type":"boolean","required":false,"description":"Include the freshly rendered YAML in the response (for diff display)"}]},{"gateway":"mutate","domain":"upgrade","operation":"workflows","description":"upgrade.workflows (mutate) — re-render the four release-pipeline workflow templates; with force=true, overwrite drifted files and audit-log to .cleo/audit/upgrade-workflows.jsonl. .workflow-overrides.yml entries are preserved (operator-declared customization). hasDrift flag in the response drives the --check exit-code contract (T9536).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"force","type":"boolean","required":false,"description":"Overwrite drifted files (excluding .workflow-overrides.yml keys)"},{"name":"dryRun","type":"boolean","required":false,"description":"Print the per-template diff without writing"},{"name":"includeRendered","type":"boolean","required":false,"description":"Include the freshly rendered YAML in the response (for diff display)"}]},{"gateway":"query","domain":"worktree","operation":"list","description":"worktree.list (query) — enumerate git worktrees with 5 status categories (active|stale|merged|orphan|locked). Reads tasks.db for owning-task status. 60s git timeout (T9546).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"statusFilter","type":"string","required":false,"description":"Filter to one or more status categories (comma-separated)"},{"name":"staleDays","type":"number","required":false,"description":"Days of inactivity before flagging stale (default 7)"}]},{"gateway":"mutate","domain":"worktree","operation":"prune","description":"worktree.prune (mutate) — remove orphaned worktrees with per-orphan confirmation. Audit-logs to .cleo/audit/worktree-lifecycle.jsonl (T9547).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"paths","type":"array","required":false,"description":"Pre-confirmed paths to remove"},{"name":"dryRun","type":"boolean","required":false,"description":"Enumerate orphans without acting"}]},{"gateway":"mutate","domain":"worktree","operation":"forceUnlock","description":"worktree.forceUnlock (mutate) — remove .git/index.lock and run git worktree unlock for a task. Warns on uncommitted changes (T9547).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose worktree (branch task/T<id>) to unlock"}]},{"gateway":"mutate","domain":"worktree","operation":"adopt","description":"worktree.adopt (mutate) — register an externally-created worktree (e.g. Claude Code Agent isolation:worktree) in the CLEO SSoT. Writes to .cleo/worktrees.json sentinel index and appends audit entry (T9804).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["worktreePath"],"params":[{"name":"worktreePath","type":"string","required":true,"description":"Absolute or relative path to the worktree directory to adopt"},{"name":"source","type":"string","required":false,"description":"Source classification (claude-agent | manual | adopted). Inferred from path when omitted."},{"name":"taskId","type":"string","required":false,"description":"Task ID to associate with this worktree. Extracted from branch name when omitted."},{"name":"actor","type":"string","required":false,"description":"Override actor name written to the audit log."}]},{"gateway":"mutate","domain":"worktree","operation":"destroy","description":"worktree.destroy (mutate) — explicitly destroy the XDG worktree for a task, remove its sentinel index entry, and append an audit-log row to .cleo/audit/worktree-lifecycle.jsonl (T9805 AC1).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID whose XDG worktree should be destroyed (e.g. T9805).","cli":{"positional":true}},{"name":"force","type":"boolean","required":false,"description":"Force removal even when the worktree has uncommitted changes. Default: false."},{"name":"deleteBranch","type":"boolean","required":false,"description":"Delete the task branch (task/T<id>) after removing the worktree. Default: true."},{"name":"reason","type":"string","required":false,"description":"Free-form reason recorded in the audit log (e.g. pr-merged, manual, idle-timeout). Default: manual."}]},{"gateway":"query","domain":"focus","operation":"show","description":"focus.show (query) — single-envelope orientation for a task, epic, or saga. Aggregates identity + scope + members + blockers + readyWave + attachedDocs + recentActivity + brainContext into ≤ 1 500 tokens.","tier":0,"idempotent":true,"sessionRequired":false,"requiredParams":["id"],"params":[{"name":"id","type":"string","required":true,"description":"Task, Epic, or Saga ID to orient on (e.g. T9973, T9831)"}]},{"gateway":"mutate","domain":"attention","operation":"add","description":"attention.add (mutate · alias jot) — record a scope-keyed working-memory jot. Session/agent identity + current task are auto-resolved from the environment (E0); the item keys to the narrowest scope (agent>task>epic>saga>session>global). No session/agent/task flags by default.","tier":1,"idempotent":false,"sessionRequired":false,"requiredParams":["content"],"params":[{"name":"content","type":"string","required":true,"description":"The jot content","cli":{"positional":true}},{"name":"tags","type":"array","required":false,"description":"Tags to attach (comma-separated on the CLI)"},{"name":"scope","type":"string","required":false,"description":"Explicit scope escalation: agent|task|epic|saga|session|global (default: narrowest)"},{"name":"ttlSeconds","type":"number","required":false,"description":"Optional time-to-live in seconds (sets expires_at)"}]},{"gateway":"query","domain":"attention","operation":"list","description":"attention.list (query) — list open working-memory jots visible to the calling agent across its resolved scope chain. Optional --scope / --tag filters.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Restrict to one scope kind: agent|task|epic|saga|session|global"},{"name":"tags","type":"array","required":false,"description":"Filter by tags (contains-ALL; comma-separated on the CLI)"},{"name":"includeAll","type":"boolean","required":false,"description":"Include non-open (consolidated/discarded) items too. Default: false"},{"name":"limit","type":"number","required":false,"description":"Maximum rows. Default: 50"}]},{"gateway":"query","domain":"attention","operation":"show","description":"attention.show (query) — synonym for attention.list; emits the open working-memory jots for the calling agent within token budget.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"scope","type":"string","required":false,"description":"Restrict to one scope kind: agent|task|epic|saga|session|global"},{"name":"tags","type":"array","required":false,"description":"Filter by tags (contains-ALL; comma-separated on the CLI)"},{"name":"includeAll","type":"boolean","required":false,"description":"Include non-open items too. Default: false"},{"name":"limit","type":"number","required":false,"description":"Maximum rows. Default: 50"}]},{"gateway":"query","domain":"tasks","operation":"context","description":"tasks.context (query) — bounded context pack for a single task. Combines identity + acceptance criteria + blockers + attached docs + graph edges (from tasks.slice) + recent activity within a configurable token budget, with explicit omission tracking and expansion hints.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["taskId"],"params":[{"name":"taskId","type":"string","required":true,"description":"Task ID to build context for (e.g. T10629)","cli":{"positional":true}},{"name":"budgetTokens","type":"number","required":false,"description":"Maximum token budget for the returned pack. Default: 1500"},{"name":"includeAcceptance","type":"boolean","required":false,"description":"Include acceptance criteria in the pack. Default: true"},{"name":"includeBlockers","type":"boolean","required":false,"description":"Include blocker summary in the pack. Default: true"},{"name":"includeDocs","type":"boolean","required":false,"description":"Include attached docs in the pack. Default: true"},{"name":"includeEdges","type":"boolean","required":false,"description":"Include graph edges (upstream/downstream/siblings/related) in the pack. Default: true"},{"name":"includeActivity","type":"boolean","required":false,"description":"Include recent activity (audit log) in the pack. Default: true"},{"name":"activityLimit","type":"number","required":false,"description":"Maximum number of recent activity events. Default: 10"},{"name":"edgeDepth","type":"number","required":false,"description":"Maximum depth for graph edges when includeEdges is true. Default: 1"}]},{"gateway":"query","domain":"selfimprove","operation":"probe","description":"selfimprove.probe (query) — returns { probe: \\"ok\\", version: 1 } (health/version probe). Used by the seeded-code-regression scenario to validate the fix-gen pipeline (T11988).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"selfimprove","operation":"run","description":"selfimprove.run (mutate) — boot ONE sandbox, replay a canned dogfood scenario, diff vs golden; on regression emit ONE leased selfimprove_dhq row + ONE DRAFT PR. Default OFF — requires --execute (else DRY-RUN). Budget-capped + circuit-broken (T11889 / T11889-D).","tier":2,"idempotent":false,"sessionRequired":true,"requiredParams":["scenario"],"params":[{"name":"scenario","type":"string","required":true,"description":"Canned dogfood scenario name to replay (e.g. dhq-replay-find)"},{"name":"execute","type":"boolean","required":false,"description":"Permit mutation (leased DHQ UPSERT) + egress (draft PR). DEFAULT false ⇒ DRY-RUN (replay + diff + report only — no DB write, no PR)."},{"name":"dryRun","type":"boolean","required":false,"description":"Force DRY-RUN explicitly (no DB write, no PR). Equivalent to omitting --execute; the loop is default-OFF."},{"name":"backend","type":"string","required":false,"description":"Confinement backend preference: 'gondolin' (micro-VM; degrades to the in-process guarded env when VM infra is absent — the CI path) | 'guarded'. Default: gondolin."}]},{"gateway":"query","domain":"service","operation":"auth-url","description":"service.auth-url (query) — build a PKCE OAuth authorization URL for a service provider; returns the URL + the code verifier + state to round-trip into service.exchange.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key (e.g. github, google, notion) — must be in SERVICE_PROVIDERS."},{"name":"state","type":"string","required":false,"description":"Opaque CSRF state to embed; a random value is generated when omitted."},{"name":"scope","type":"string","required":false,"description":"Scope override (e.g. a BYOC custom scope). Defaults to the provider scope."},{"name":"redirectUri","type":"string","required":false,"description":"Redirect URI override. Defaults to the provider loopback redirect."}]},{"gateway":"mutate","domain":"service","operation":"exchange","description":"service.exchange (mutate) — exchange an OAuth authorization code (+ PKCE verifier) for tokens and PERSIST them encryptGlobal-encrypted into service_connections. Returns the non-secret connection identity.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","code","codeVerifier","redirectUri"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"code","type":"string","required":true,"description":"Authorization code from the redirect callback."},{"name":"codeVerifier","type":"string","required":true,"description":"PKCE code verifier from service.auth-url (round-tripped)."},{"name":"redirectUri","type":"string","required":true,"description":"Redirect URI used in service.auth-url (must match)."},{"name":"label","type":"string","required":false,"description":"Connection label, unique within the provider. Defaults to \\"default\\"."}]},{"gateway":"mutate","domain":"service","operation":"refresh","description":"service.refresh (mutate) — refresh a service connection access token honoring the per-provider RefreshConfig (Form/Json × Body/BasicAuth, plus github-app / service-account-jwt / client-credentials variants); re-encrypts + persists the new blob.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["agentId","provider","label"],"params":[{"name":"agentId","type":"string","required":true,"description":"Agent requesting the refresh (trust-gated)."},{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"label","type":"string","required":true,"description":"Connection label."},{"name":"approved","type":"boolean","required":false,"description":"Out-of-band manual-approval flag forwarded to the trust gate."}]},{"gateway":"mutate","domain":"service","operation":"self-heal","description":"service.self-heal (mutate) — resolve a service connection and, when its expires_at is past, transparently refresh + re-encrypt + persist; returns a fresh sealed-credential reference (agents never see a stale token).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["agentId","provider","label"],"params":[{"name":"agentId","type":"string","required":true,"description":"Agent requesting the connection (trust-gated)."},{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"label","type":"string","required":true,"description":"Connection label."},{"name":"approved","type":"boolean","required":false,"description":"Out-of-band manual-approval flag forwarded to the trust gate."}]},{"gateway":"mutate","domain":"service","operation":"connect","description":"service.connect (mutate) — connect a service credential: store an already-obtained token (--token) OR exchange an OAuth authorization code (--paste-code + --code-verifier + --redirect-uri). Persists the token blob encryptGlobal-encrypted; returns the NON-SECRET connection identity (never the token).","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key (e.g. github, google, notion)."},{"name":"label","type":"string","required":false,"description":"Connection label, unique within the provider. Defaults to 'default'."},{"name":"token","type":"string","required":false,"description":"Direct access token to store (token-direct mode). SECRET — never echoed."},{"name":"refreshToken","type":"string","required":false,"description":"Optional refresh token paired with --token. SECRET."},{"name":"expiresAt","type":"string","required":false,"description":"ISO-8601 access-token expiry (token-direct mode)."},{"name":"code","type":"string","required":false,"description":"OAuth authorization code from the redirect callback (paste-code mode)."},{"name":"codeVerifier","type":"string","required":false,"description":"PKCE code verifier from service.auth-url, round-tripped (paste-code mode)."},{"name":"redirectUri","type":"string","required":false,"description":"Redirect URI used in service.auth-url; must match (paste-code mode)."}]},{"gateway":"query","domain":"service","operation":"list","description":"service.list (query) — list service connections as NON-SECRET views (provider/label/status/scopes/expiresAt/hasCredentials). The decrypted token is NEVER surfaced.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter; lists all providers when omitted."}]},{"gateway":"mutate","domain":"service","operation":"revoke","description":"service.revoke (mutate) — DELETE a service connection and CASCADE its agent_service_grants. Returns the {count, deleted, grantsRemoved} envelope (count=0 when no such connection).","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","label"],"params":[{"name":"provider","type":"string","required":true,"description":"Service provider key."},{"name":"label","type":"string","required":true,"description":"Connection label to revoke."}]},{"gateway":"query","domain":"service","operation":"status","description":"service.status (query) — report connection health: each connection adds \`expired\` + \`needsRefresh\` booleans computed from expires_at. NON-SECRET; never surfaces a token.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter; reports all connections when omitted."}]},{"gateway":"mutate","domain":"account","operation":"add","description":"account.add (mutate) — store a pooled provider credential. SECRET-BEARING (cli-only): accepts an API key / OAuth token and persists it encrypted; returns the NON-SECRET redacted view (tokenPreview last-4 ONLY — never the raw secret).","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider","token"],"params":[{"name":"provider","type":"string","required":true,"description":"LLM provider transport key (e.g. anthropic, openai).","cli":{"positional":true}},{"name":"token","type":"string","required":true,"description":"API key or OAuth bearer token to persist. SECRET — never echoed."},{"name":"label","type":"string","required":false,"description":"Account label, unique within the provider (default: 'default')."},{"name":"baseUrl","type":"string","required":false,"description":"Optional override for the provider base URL."},{"name":"authType","type":"string","required":false,"description":"Explicit auth-type override ('api_key' | 'oauth' | 'aws_sdk')."},{"name":"priority","type":"number","required":false,"description":"Optional priority override (lower wins)."}]},{"gateway":"query","domain":"account","operation":"list","description":"account.list (query) — list pooled accounts as NON-SECRET redacted views (provider/label/authType/tokenPreview). The decrypted secret is NEVER surfaced.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter; lists all providers when omitted."}]},{"gateway":"mutate","domain":"account","operation":"remove","description":"account.remove (mutate) — delete a (provider, label) account from the pool. Returns the {count, deleted} envelope (count=0 when absent — idempotent).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["provider","label"],"params":[{"name":"provider","type":"string","required":true,"description":"LLM provider transport key.","cli":{"positional":true}},{"name":"label","type":"string","required":true,"description":"Account label to remove."}]},{"gateway":"query","domain":"provider","operation":"list","description":"provider.list (query) — list every declarative provider as a NON-SECRET view (id/displayName/aliases/authMethods/modelsDevId) from the providers table.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"query","domain":"provider","operation":"show","description":"provider.show (query) — resolve ONE provider by id OR case-insensitive alias against the declarative alias index; returns the provider view + the id/alias matched.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider id OR a case-insensitive alias.","cli":{"positional":true}}]},{"gateway":"mutate","domain":"provider","operation":"connect","description":"provider.connect (mutate) — connect a provider by storing a token as one of its accounts (token-direct). SECRET-BEARING (cli-only): resolves the provider (id/alias) then delegates to the secret-bearing account write; returns the NON-SECRET account identity (never the raw token). OAuth flows route through \`cleo service\`.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["provider"],"params":[{"name":"provider","type":"string","required":true,"description":"Provider id or alias to connect.","cli":{"positional":true}},{"name":"token","type":"string","required":false,"description":"Direct API key / bearer token to store (token-direct mode). SECRET."},{"name":"label","type":"string","required":false,"description":"Account label to create (default: 'default')."},{"name":"authType","type":"string","required":false,"description":"Explicit auth-type override ('api_key' | 'oauth' | 'aws_sdk')."}]},{"gateway":"query","domain":"model","operation":"query","description":"model.query (query) — read the models.dev catalog (models_catalog table) newest-first by release date; optionally filtered by provider (models.dev id) and capped by --limit. Returns NON-SECRET catalog views.","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"provider","type":"string","required":false,"description":"Optional provider filter (models.dev id); queries all providers when omitted."},{"name":"limit","type":"number","required":false,"description":"Optional cap on the number of rows returned (newest-first)."}]},{"gateway":"query","domain":"model","operation":"show","description":"model.show (query) — resolve ONE catalog model by id; returns {found, model} (found=false when the id is absent — not an error).","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":["model"],"params":[{"name":"model","type":"string","required":true,"description":"Model id (catalog key) to resolve.","cli":{"positional":true}}]},{"gateway":"mutate","domain":"profile","operation":"create","description":"profile.create (mutate) — bind an account + model into a named, addressable profile. Validates the binding (the pinned account must exist; the model must be in the catalog) then persists into llm.profiles[name]. Returns {count, created, profile}.","tier":2,"idempotent":false,"sessionRequired":false,"requiredParams":["name","provider","model"],"params":[{"name":"name","type":"string","required":true,"description":"Profile name (the addressable handle).","cli":{"positional":true}},{"name":"provider","type":"string","required":true,"description":"Provider transport the bound account belongs to."},{"name":"model","type":"string","required":true,"description":"Model id to bind (validated against the catalog)."},{"name":"label","type":"string","required":false,"description":"Account label to pin (the credential binding). Validated to exist."},{"name":"role","type":"string","required":false,"description":"Optional role this profile occupies (extraction | consolidation | …)."}]},{"gateway":"query","domain":"profile","operation":"list","description":"profile.list (query) — list every named profile from llm.profiles (name + provider + model + optional credentialLabel).","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[]},{"gateway":"mutate","domain":"profile","operation":"pin","description":"profile.pin (mutate) — pin a role to a named profile (llm.roles[role].profile). The role must be a valid background role and the profile must already exist.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name","role"],"params":[{"name":"name","type":"string","required":true,"description":"Profile name to pin (must exist).","cli":{"positional":true}},{"name":"role","type":"string","required":true,"description":"Role to pin to this profile (extraction | consolidation | derivation | …)."}]},{"gateway":"mutate","domain":"profile","operation":"use","description":"profile.use (mutate) — set a named profile as the global default binding (llm.defaultProfile). The profile must already exist.","tier":2,"idempotent":true,"sessionRequired":false,"requiredParams":["name"],"params":[{"name":"name","type":"string","required":true,"description":"Profile name to mark as default (must exist).","cli":{"positional":true}}]},{"gateway":"mutate","domain":"admin","operation":"janitor.run","description":"admin.janitor.run (mutate) — run the janitor sweep: reap orphan processes, stop dead cleo-owned scopes, reclaim stale locks, prune tmp debris","tier":1,"idempotent":true,"sessionRequired":false,"requiredParams":[],"params":[{"name":"dryRun","type":"boolean","required":false,"description":"Report planned actions without mutating anything."},{"name":"gracePeriodMs","type":"number","required":false,"description":"Minimum age (ms) of an unregistered process before reap eligibility (default: 600000)."}]}]"`;