@cleocode/skills 2026.3.45 → 2026.3.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleocode/skills",
3
- "version": "2026.3.45",
3
+ "version": "2026.3.46",
4
4
  "description": "CLEO skill definitions - bundled with CLEO monorepo",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -15,5 +15,8 @@
15
15
  "type": "git",
16
16
  "url": "https://github.com/kryptobaseddev/cleo",
17
17
  "directory": "packages/skills"
18
+ },
19
+ "scripts": {
20
+ "validate:ops": "tsx scripts/validate-operations.ts"
18
21
  }
19
22
  }
@@ -15,7 +15,7 @@ The manifest system provides O(1) append operations and race-condition-free conc
15
15
  **Default Paths**:
16
16
  - Output directory: `claudedocs/agent-outputs/` (configurable via `agentOutputs.directory`)
17
17
  - Manifest file: `MANIFEST.jsonl` (configurable via `agentOutputs.manifestFile`)
18
- - Full path: `{{OUTPUT_DIR}}/{{MANIFEST_PATH}}`
18
+ - Full path: `{{OUTPUT_DIR}}/MANIFEST.jsonl` (i.e., `claudedocs/agent-outputs/MANIFEST.jsonl`)
19
19
 
20
20
  **Design Principles**:
21
21
  - Append-only writes preserve audit trail
@@ -34,36 +34,23 @@ Create a new manifest entry for agent output.
34
34
  **Usage**:
35
35
  ```bash
36
36
  cleo research add \
37
- --title "Entry Title" \
38
- --file "path/to/output.md" \
39
- --topics "topic1,topic2,topic3" \
40
- --findings "Finding 1,Finding 2,Finding 3" \
41
- [--status STATUS] \
42
- [--task T####] \
43
- [--epic T####] \
44
- [--actionable | --not-actionable] \
45
- [--needs-followup T001,T002] \
46
- [--agent-type TYPE]
37
+ --task T#### \
38
+ --topic "topic-slug" \
39
+ [--findings "Finding 1,Finding 2,Finding 3"] \
40
+ [--sources "source1,source2"]
47
41
  ```
48
42
 
49
43
  **Required Flags**:
50
44
  | Flag | Description | Example |
51
45
  |------|-------------|---------|
52
- | `--title` | Human-readable title | `"Authentication Research"` |
53
- | `--file` | Relative path to output file | `"2026-02-07_auth-research.md"` |
54
- | `--topics` | Comma-separated topic tags | `"authentication,security,jwt"` |
55
- | `--findings` | Comma-separated key findings (1-7 items) | `"JWT tokens expire after 1h,OAuth2 preferred,PKCE required"` |
46
+ | `--task` | Task ID to attach research to | `T3154` |
47
+ | `--topic` | Research topic (slug) | `"jwt-authentication"` |
56
48
 
57
49
  **Optional Flags**:
58
- | Flag | Default | Valid Values |
59
- |------|---------|--------------|
60
- | `--status` | `complete` | `complete`, `partial`, `blocked` |
61
- | `--task` | none | Task ID (e.g., `T1234`) |
62
- | `--epic` | none | Epic ID (e.g., `T1200`) |
63
- | `--actionable` | `true` | Boolean flag |
64
- | `--not-actionable` | - | Negates actionable |
65
- | `--needs-followup` | `[]` | Comma-separated task IDs |
66
- | `--agent-type` | `research` | See Agent Type Values below |
50
+ | Flag | Description | Example |
51
+ |------|-------------|---------|
52
+ | `--findings` | Comma-separated key findings | `"JWT tokens expire in 1h,OAuth2 preferred"` |
53
+ | `--sources` | Comma-separated source references | `"https://example.com,RFC 7519"` |
67
54
 
68
55
  **Agent Type Values** (RCASD-IVTR+C protocol + workflow types):
69
56
  - **Protocol types**: `research`, `consensus`, `specification`, `decomposition`, `implementation`, `contribution`, `release`
@@ -74,21 +61,17 @@ cleo research add \
74
61
  **Example**:
75
62
  ```bash
76
63
  cleo research add \
77
- --title "JWT Authentication Best Practices" \
78
- --file "2026-02-07_jwt-auth.md" \
79
- --topics "authentication,jwt,security" \
80
- --findings "Use RS256 for asymmetric signing,Tokens expire in 1h,Refresh tokens stored securely" \
81
- --status complete \
82
64
  --task T3154 \
83
- --actionable \
84
- --agent-type research
65
+ --topic "jwt-authentication" \
66
+ --findings "Use RS256 for asymmetric signing,Tokens expire in 1h,Refresh tokens stored securely" \
67
+ --sources "RFC 7519,OWASP JWT Cheat Sheet"
85
68
  ```
86
69
 
87
70
  **Output**: JSON with created entry ID
88
71
  ```json
89
72
  {
90
73
  "success": true,
91
- "entryId": "jwt-auth-2026-02-07",
74
+ "entryId": "jwt-authentication-2026-02-07",
92
75
  "manifestPath": "claudedocs/agent-outputs/MANIFEST.jsonl"
93
76
  }
94
77
  ```
@@ -102,24 +85,26 @@ Update an existing manifest entry.
102
85
  **Usage**:
103
86
  ```bash
104
87
  cleo research update <entry-id> \
105
- [--title "New Title"] \
106
- [--status STATUS] \
107
88
  [--findings "F1,F2,F3"] \
108
- [--topics "T1,T2"] \
109
- [--actionable | --not-actionable] \
110
- [--needs-followup T001,T002]
89
+ [--sources "S1,S2"] \
90
+ [--status STATUS]
111
91
  ```
112
92
 
113
93
  **Parameters**:
114
- - `<entry-id>`: Entry ID from manifest (e.g., `jwt-auth-2026-02-07`)
94
+ - `<entry-id>`: Entry ID from manifest (e.g., `jwt-authentication-2026-02-07`)
115
95
 
116
- **Flags**: Same as `add` command (all optional for update)
96
+ **Flags**:
97
+ | Flag | Description |
98
+ |------|-------------|
99
+ | `--findings` | Updated comma-separated findings |
100
+ | `--sources` | Updated comma-separated sources |
101
+ | `--status` | Updated status (`complete`, `partial`, `blocked`) |
117
102
 
118
103
  **Example**:
119
104
  ```bash
120
- cleo research update jwt-auth-2026-02-07 \
105
+ cleo research update jwt-authentication-2026-02-07 \
121
106
  --status partial \
122
- --needs-followup T3155,T3156
107
+ --findings "Finding 1,Finding 2 (revised)"
123
108
  ```
124
109
 
125
110
  ---
@@ -132,30 +117,24 @@ Query and filter manifest entries.
132
117
  ```bash
133
118
  cleo research list \
134
119
  [--status STATUS] \
135
- [--type TYPE] \
136
- [--topic TOPIC] \
137
- [--since DATE] \
138
- [--limit N] \
139
- [--actionable]
120
+ [--task T####] \
121
+ [--limit N]
140
122
  ```
141
123
 
142
124
  **Filter Options**:
143
125
  | Flag | Description | Example |
144
126
  |------|-------------|---------|
145
- | `--status` | Filter by status | `complete`, `partial`, `blocked`, `archived` |
146
- | `--type` | Filter by agent type | `research`, `implementation`, `validation` |
147
- | `--topic` | Filter by topic tag | `authentication` |
148
- | `--since` | Entries since date | `2026-02-01` (ISO 8601: YYYY-MM-DD) |
149
- | `--limit` | Max results | `20` (default: 20) |
150
- | `--actionable` | Only actionable entries | Boolean flag |
127
+ | `--status` | Filter by status | `complete`, `partial`, `blocked`, `pending` |
128
+ | `--task` | Filter by task ID | `T3154` |
129
+ | `--limit` | Max results | `20` |
151
130
 
152
131
  **Example**:
153
132
  ```bash
154
- # Recent research entries
155
- cleo research list --type research --since 2026-02-01 --limit 10
133
+ # Entries for a specific task
134
+ cleo research list --task T3154 --limit 10
156
135
 
157
- # Actionable partial entries
158
- cleo research list --status partial --actionable
136
+ # Partial entries
137
+ cleo research list --status partial
159
138
  ```
160
139
 
161
140
  **Output**: JSON array with manifest entries
@@ -235,22 +214,16 @@ Link a research entry to a task (bidirectional association).
235
214
 
236
215
  **Usage**:
237
216
  ```bash
238
- cleo research link <task-id> <research-id> [--notes "Custom note"]
217
+ cleo research link <research-id> <task-id>
239
218
  ```
240
219
 
241
220
  **Parameters**:
242
- - `<task-id>`: Task ID (e.g., `T3154`)
243
221
  - `<research-id>`: Entry ID from manifest
244
-
245
- **Options**:
246
- | Flag | Description |
247
- |------|-------------|
248
- | `--notes` | Custom note text instead of default |
222
+ - `<task-id>`: Task ID (e.g., `T3154`)
249
223
 
250
224
  **Example**:
251
225
  ```bash
252
- cleo research link T3154 jwt-auth-2026-02-07
253
- cleo research link T3154 jwt-auth-2026-02-07 --notes "Primary research source"
226
+ cleo research link jwt-auth-2026-02-07 T3154
254
227
  ```
255
228
 
256
229
  **Effects**:
@@ -268,17 +241,8 @@ cleo research show jwt-auth-2026-02-07 # Check linked_tasks
268
241
 
269
242
  ### cleo research unlink
270
243
 
271
- Remove link between research and task.
272
-
273
- **Usage**:
274
- ```bash
275
- cleo research unlink <task-id> <research-id>
276
- ```
277
-
278
- **Example**:
279
- ```bash
280
- cleo research unlink T3154 jwt-auth-2026-02-07
281
- ```
244
+ > **Note**: Not currently implemented in the CLI. To disassociate research from a task, use
245
+ > `cleo research update <id>` to change status, or remove the link manually from the task record.
282
246
 
283
247
  ---
284
248
 
@@ -302,22 +266,16 @@ cleo research links T3154
302
266
 
303
267
  ### cleo research pending
304
268
 
305
- Show entries with `needs_followup` (orchestrator handoffs).
269
+ Show entries with `status: pending` (orchestrator handoffs).
306
270
 
307
271
  **Usage**:
308
272
  ```bash
309
- cleo research pending [--brief]
273
+ cleo research pending
310
274
  ```
311
275
 
312
- **Options**:
313
- | Flag | Description |
314
- |------|-------------|
315
- | `--brief` | Minimal output (just IDs and followup tasks) |
316
-
317
276
  **Example**:
318
277
  ```bash
319
278
  cleo research pending
320
- cleo research pending --brief
321
279
  ```
322
280
 
323
281
  **Output**: JSON array of entries requiring followup
@@ -344,81 +302,37 @@ Archive old manifest entries to maintain context efficiency.
344
302
 
345
303
  **Usage**:
346
304
  ```bash
347
- cleo research archive \
348
- [--threshold BYTES] \
349
- [--percent N] \
350
- [--dry-run]
305
+ cleo research archive [--before-date YYYY-MM-DD]
351
306
  ```
352
307
 
353
308
  **Options**:
354
- | Flag | Default | Description |
355
- |------|---------|-------------|
356
- | `--threshold` | `200000` | Archive threshold in bytes (~50K tokens) |
357
- | `--percent` | `50` | Percentage of oldest entries to archive |
358
- | `--dry-run` | - | Show what would be archived without changes |
309
+ | Flag | Description |
310
+ |------|-------------|
311
+ | `--before-date` | Archive entries created before this date (ISO 8601) |
359
312
 
360
313
  **Example**:
361
314
  ```bash
362
- # Preview archival
363
- cleo research archive --dry-run
364
-
365
- # Archive oldest 50% when manifest exceeds 200KB
366
- cleo research archive --threshold 200000 --percent 50
315
+ # Archive entries older than a cutoff date
316
+ cleo research archive --before-date 2026-01-01
367
317
  ```
368
318
 
369
319
  **Effects**:
370
- - Moves entries to `{{OUTPUT_DIR}}/archive/MANIFEST-archive.jsonl`
371
- - Updates status to `archived` in archive file
372
- - Removes from main manifest to reduce context size
320
+ - Moves matching entries to archive storage
321
+ - Reduces active manifest size for context efficiency
373
322
 
374
323
  ---
375
324
 
376
325
  ### cleo research archive-list
377
326
 
378
- List entries from the archive file.
379
-
380
- **Usage**:
381
- ```bash
382
- cleo research archive-list \
383
- [--limit N] \
384
- [--since DATE]
385
- ```
386
-
387
- **Options**:
388
- | Flag | Default | Description |
389
- |------|---------|-------------|
390
- | `--limit` | `50` | Max entries to return |
391
- | `--since` | none | Filter archived since date (ISO 8601) |
392
-
393
- **Example**:
394
- ```bash
395
- cleo research archive-list --limit 100 --since 2026-01-01
396
- ```
327
+ > **Note**: Not currently implemented in the CLI. To list archived entries, use
328
+ > `cleo research list --status archived` or query the archive file directly.
397
329
 
398
330
  ---
399
331
 
400
332
  ### cleo research status
401
333
 
402
- Show manifest size and archival status.
403
-
404
- **Usage**:
405
- ```bash
406
- cleo research status
407
- ```
408
-
409
- **Output**: JSON with size metrics
410
- ```json
411
- {
412
- "success": true,
413
- "manifest": {
414
- "path": "claudedocs/agent-outputs/MANIFEST.jsonl",
415
- "size": 153420,
416
- "entryCount": 42,
417
- "threshold": 200000,
418
- "needsArchival": false
419
- }
420
- }
421
- ```
334
+ > **Note**: Not currently implemented as a separate CLI command. Use `cleo research stats`
335
+ > for manifest statistics.
422
336
 
423
337
  ---
424
338
 
@@ -457,106 +371,30 @@ cleo research stats
457
371
 
458
372
  ### cleo research validate
459
373
 
460
- Validate manifest file integrity and entry format.
461
-
462
- **Usage**:
463
- ```bash
464
- cleo research validate [--fix] [--protocol] [--task T####]
465
- ```
466
-
467
- **Options**:
468
- | Flag | Description |
469
- |------|-------------|
470
- | `--fix` | Remove invalid entries (destructive) |
471
- | `--protocol` | Validate against protocol requirements |
472
- | `--task` | Validate entries linked to specific task |
473
-
474
- **Example**:
475
- ```bash
476
- # Check integrity
477
- cleo research validate
478
-
479
- # Fix invalid entries
480
- cleo research validate --fix
481
-
482
- # Validate protocol compliance for task outputs
483
- cleo research validate --protocol --task T3154
484
- ```
485
-
486
- **Validation Checks**:
487
- - Valid JSON syntax per line
488
- - Required fields present: `id`, `file`, `title`, `date`, `status`, `topics`, `key_findings`, `actionable`
489
- - Status enum: `complete`, `partial`, `blocked`, `archived`
490
- - Date format: ISO 8601 (YYYY-MM-DD)
491
- - Field types: `topics` array, `key_findings` array, `actionable` boolean
492
- - Agent type validity (protocol + workflow types)
493
-
494
- **Exit Codes**:
495
- - `0`: Validation passed
496
- - `6`: Validation errors found (`EXIT_VALIDATION_ERROR`)
374
+ > **Note**: Not currently implemented in the CLI. Manifest validation occurs automatically
375
+ > when entries are created via `cleo research add`.
497
376
 
498
377
  ---
499
378
 
500
379
  ### cleo research compact
501
380
 
502
- Remove duplicate/obsolete entries from manifest.
503
-
504
- **Usage**:
505
- ```bash
506
- cleo research compact
507
- ```
508
-
509
- **Effects**:
510
- - Removes duplicate entries (same ID)
511
- - Keeps most recent version of duplicates
512
- - Atomic operation with backup
381
+ > **Note**: Not currently implemented in the CLI. Use `cleo research archive` to manage
382
+ > manifest size.
513
383
 
514
384
  ---
515
385
 
516
386
  ### cleo research get
517
387
 
518
- Get single entry by ID (raw JSON object).
519
-
520
- **Usage**:
521
- ```bash
522
- cleo research get <entry-id>
523
- ```
524
-
525
- **Example**:
526
- ```bash
527
- cleo research get jwt-auth-2026-02-07
528
- ```
529
-
530
- **Output**: Raw JSON object (no wrapper)
388
+ > **Note**: Not currently implemented as a separate CLI command. Use `cleo research show <id>`
389
+ > for entry details.
531
390
 
532
391
  ---
533
392
 
534
393
  ### cleo research inject
535
394
 
536
- Output the subagent injection template for prompts.
537
-
538
- **Usage**:
539
- ```bash
540
- cleo research inject [--raw] [--clipboard]
541
- ```
542
-
543
- **Options**:
544
- | Flag | Description |
545
- |------|-------------|
546
- | `--raw` | Output template without variable substitution |
547
- | `--clipboard` | Copy to clipboard (pbcopy/xclip) |
548
-
549
- **Example**:
550
- ```bash
551
- # Output with current values
552
- cleo research inject
553
-
554
- # Raw template with {{TOKENS}}
555
- cleo research inject --raw
556
-
557
- # Copy to clipboard
558
- cleo research inject --clipboard
559
- ```
395
+ > **Note**: Not currently implemented in the CLI. The orchestrator generates fully-resolved
396
+ > subagent prompts via `cleo orchestrator spawn <taskId>` or
397
+ > `mutate({ domain: "orchestrate", operation: "spawn", params: { taskId } })`.
560
398
 
561
399
  ---
562
400
 
@@ -645,13 +483,10 @@ When present, the `audit` field provides operational metadata:
645
483
 
646
484
  ```bash
647
485
  cleo research add \
648
- --title "{{TITLE}}" \
649
- --file "{{DATE}}_{{TOPIC_SLUG}}.md" \
650
- --topics "{{TOPICS_CSV}}" \
651
- --findings "{{FINDINGS_CSV}}" \
652
- --status complete \
653
486
  --task {{TASK_ID}} \
654
- --agent-type research
487
+ --topic "{{TOPIC_SLUG}}" \
488
+ --findings "{{FINDINGS_CSV}}" \
489
+ --sources "{{SOURCES_CSV}}"
655
490
  ```
656
491
 
657
492
  3. Link to task: `{{TASK_LINK_CMD}} {{TASK_ID}} {{ENTRY_ID}}`
@@ -668,13 +503,9 @@ cleo research add \
668
503
 
669
504
  # Record in manifest
670
505
  cleo research add \
671
- --title "{{TASK_TITLE}} Implementation" \
672
- --file "{{OUTPUT_FILE}}" \
673
- --topics "{{TASK_LABELS}}" \
674
- --findings "Implemented X,Added Y,Modified Z" \
675
- --status complete \
676
506
  --task {{TASK_ID}} \
677
- --agent-type implementation
507
+ --topic "{{TOPIC_SLUG}}" \
508
+ --findings "Implemented X,Added Y,Modified Z"
678
509
 
679
510
  # Complete task
680
511
  {{TASK_COMPLETE_CMD}} {{TASK_ID}}
@@ -715,7 +546,7 @@ echo "$json" >> claudedocs/agent-outputs/MANIFEST.jsonl
715
546
 
716
547
  **Solution**: Use CLI commands
717
548
  ```bash
718
- cleo research add --title "..." --file "..." --topics "..." --findings "..."
549
+ cleo research add --task T#### --topic "..." --findings "..."
719
550
  ```
720
551
 
721
552
  ---
@@ -723,15 +554,15 @@ cleo research add --title "..." --file "..." --topics "..." --findings "..."
723
554
  ### ❌ Missing Key Findings
724
555
 
725
556
  ```bash
726
- # WRONG - Empty findings array
727
- cleo research add --findings ""
557
+ # WRONG - No findings provided
558
+ cleo research add --task T#### --topic "auth"
728
559
  ```
729
560
 
730
- **Problem**: Manifest is for discovery - empty findings defeat purpose
561
+ **Problem**: Manifest is for discovery entries without findings defeat the purpose
731
562
 
732
- **Solution**: Always provide 1-7 concise findings
563
+ **Solution**: Always provide concise findings
733
564
  ```bash
734
- cleo research add --findings "Finding 1,Finding 2,Finding 3"
565
+ cleo research add --task T#### --topic "auth" --findings "Finding 1,Finding 2,Finding 3"
735
566
  ```
736
567
 
737
568
  ---
@@ -752,7 +583,7 @@ Here is my research:
752
583
 
753
584
  **Solution**: Return ONLY summary message
754
585
  ```markdown
755
- Research complete. See MANIFEST.jsonl for summary.
586
+ [Type] complete. See MANIFEST.jsonl for summary.
756
587
  ```
757
588
 
758
589
  ---
@@ -775,27 +606,25 @@ findings=$(cat findings.txt | tr '\n' ',' | sed 's/,$//')
775
606
 
776
607
  ---
777
608
 
778
- ### ❌ Skipping Task Link
609
+ ### ❌ Skipping Task ID
779
610
 
780
611
  ```bash
781
- # WRONG - No bidirectional association
782
- cleo research add --title "..." --file "..." --topics "..." --findings "..."
612
+ # WRONG - No association with task
613
+ cleo research add --topic "..." --findings "..."
783
614
  # (missing --task flag)
784
615
  ```
785
616
 
786
617
  **Problem**: Research orphaned, cannot be discovered from task
787
618
 
788
- **Solution**: Always link to task
619
+ **Solution**: Always include `--task` flag
789
620
  ```bash
790
621
  cleo research add \
791
- --title "..." \
792
- --file "..." \
793
- --topics "..." \
794
- --findings "..." \
795
- --task {{TASK_ID}}
796
-
797
- # Or link after creation
798
- cleo research link {{TASK_ID}} {{ENTRY_ID}}
622
+ --task {{TASK_ID}} \
623
+ --topic "..." \
624
+ --findings "..."
625
+
626
+ # Or link an existing entry to a task
627
+ cleo research link <entry-id> {{TASK_ID}}
799
628
  ```
800
629
 
801
630
  ---
@@ -1,5 +1,9 @@
1
1
  # Skill Chaining Patterns
2
2
 
3
+ > **Reference status**: Not directly `@`-referenced by any ct-* skill SKILL.md. Referenced
4
+ > in ct-epic-architect's `references/skill-aware-execution.md` as a prose pointer. Available
5
+ > for skill authors and orchestrators that need multi-level delegation patterns.
6
+
3
7
  This reference defines patterns for multi-level skill invocation and context propagation across agent boundaries.
4
8
 
5
9
  ---
@@ -35,8 +39,12 @@ The orchestrator delegates work to a subagent via `orchestrate.spawn` with skill
35
39
 
36
40
  ### Implementation
37
41
 
38
- ```
39
- # 1. Generate fully-resolved spawn prompt via MCP
42
+ ```bash
43
+ # CLI (Primary)
44
+ cleo orchestrator spawn T1234 --json
45
+
46
+ # MCP (Fallback)
47
+ # 1. Generate fully-resolved spawn prompt
40
48
  mutate({ domain: "orchestrate", operation: "spawn", params: { taskId: "T1234" }})
41
49
 
42
50
  # 2. Provider adapter executes the prompt using its native mechanism
@@ -50,7 +58,7 @@ mutate({ domain: "orchestrate", operation: "spawn", params: { taskId: "T1234" }}
50
58
 
51
59
  - **Input**: Task ID, skill template, previous manifest key_findings
52
60
  - **Output**: Manifest entry with key_findings for next agent
53
- - **Response**: "Research complete. See MANIFEST.jsonl for summary."
61
+ - **Response**: "[Type] complete. See MANIFEST.jsonl for summary."
54
62
 
55
63
  ---
56
64
 
@@ -169,8 +177,8 @@ Parent reads only key_findings, not full research files.
169
177
  ### Rule 2: Minimal Response (MUST)
170
178
 
171
179
  ```
172
- Subagent MUST return ONLY: "Research complete. See MANIFEST.jsonl for summary."
173
- Subagent MUST NOT return research content in response.
180
+ Subagent MUST return ONLY: "[Type] complete/partial/blocked. See MANIFEST.jsonl for summary/details/blocker details."
181
+ Subagent MUST NOT return output content in response.
174
182
  ```
175
183
 
176
184
  ### Rule 3: File-Based Details (MUST)
@@ -209,7 +217,7 @@ TOPIC_SLUG # URL-safe topic name
209
217
  Before spawning subagent:
210
218
  - [ ] Identify appropriate skill for task type
211
219
  - [ ] Prepare token context (TASK_ID, DATE, TOPIC_SLUG)
212
- - [ ] Use `orchestrate.spawn` to generate fully-resolved prompt
220
+ - [ ] CLI: `cleo orchestrator spawn <taskId> --json` or MCP: `orchestrate.spawn`
213
221
  - [ ] Verify token resolution is complete (`tokenResolution.fullyResolved`)
214
222
 
215
223
  Before chaining to another skill: