@cleocode/skills 2026.4.0 → 2026.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/package.json +1 -1
  2. package/skills/_shared/manifest-operations.md +1 -2
  3. package/skills/_shared/skill-chaining-patterns.md +3 -7
  4. package/skills/_shared/subagent-protocol-base.cant +1 -1
  5. package/skills/ct-cleo/SKILL.md +56 -65
  6. package/skills/ct-cleo/references/orchestrator-constraints.md +0 -13
  7. package/skills/ct-cleo/references/session-protocol.md +3 -12
  8. package/skills/ct-codebase-mapper/SKILL.md +7 -7
  9. package/skills/ct-grade/SKILL.md +12 -46
  10. package/skills/ct-grade/agents/scenario-runner.md +11 -21
  11. package/skills/ct-grade/references/ab-test-methodology.md +14 -14
  12. package/skills/ct-grade/references/domains.md +72 -74
  13. package/skills/ct-grade/references/grade-spec.md +8 -11
  14. package/skills/ct-grade/references/scenario-playbook.md +77 -106
  15. package/skills/ct-grade-v2-1/SKILL.md +30 -32
  16. package/skills/ct-grade-v2-1/agents/scenario-runner.md +14 -34
  17. package/skills/ct-grade-v2-1/grade-viewer/eval-report.md +4 -1
  18. package/skills/ct-grade-v2-1/references/ab-testing.md +28 -88
  19. package/skills/ct-grade-v2-1/references/grade-spec-v2.md +5 -5
  20. package/skills/ct-grade-v2-1/references/playbook-v2.md +115 -183
  21. package/skills/ct-grade-v2-1/references/token-tracking.md +7 -9
  22. package/skills/ct-memory/SKILL.md +16 -35
  23. package/skills/ct-orchestrator/SKILL.md +58 -68
  24. package/skills/ct-skill-validator/SKILL.md +1 -1
  25. package/skills/ct-skill-validator/agents/ecosystem-checker.md +2 -2
  26. package/skills/ct-skill-validator/references/cleo-ecosystem-rules.md +19 -20
  27. package/skills/manifest.json +1 -1
  28. package/skills/signaldock-connect/SKILL.md +132 -0
  29. package/skills/signaldock-connect/assets/agent-card.json +48 -0
  30. package/skills/signaldock-connect/references/api-endpoints.md +131 -0
  31. package/skills.json +1 -1
@@ -95,31 +95,24 @@ This separation means the orchestrator protocol works identically regardless of
95
95
  cleo orchestrator start --epic T1575
96
96
  ```
97
97
 
98
- ### Quick Start — MCP (Alternative)
99
-
100
- ```
101
- mutate({ domain: "orchestrate", operation: "start", params: { epicId: "T1575" }})
102
- ```
103
-
104
98
  **Returns**: Session state, context budget, next task, pipeline stage, and recommended action in one call.
105
99
 
106
100
  ### Manual Startup
107
101
 
108
- ```
102
+ ```bash
109
103
  # 1. Check for existing work
110
- query({ domain: "session", operation: "list" })
111
- query({ domain: "pipeline", operation: "manifest.list", params: { filter: "pending" } })
112
- query({ domain: "session", operation: "status" })
104
+ cleo session list
105
+ cleo manifest list --filter pending
106
+ cleo session status
113
107
 
114
108
  # 2. Get epic overview and pipeline state
115
- query({ domain: "admin", operation: "dash" })
116
- query({ domain: "pipeline", operation: "stage.status", params: { epicId: "T1575" }})
109
+ cleo dash
110
+ cleo pipeline stage.status --epic T1575
117
111
 
118
112
  # 3. Resume or start
119
- mutate({ domain: "session", operation: "resume", params: { sessionId: "<id>" }})
113
+ cleo session resume <id>
120
114
  # OR
121
- mutate({ domain: "session", operation: "start",
122
- params: { scope: "epic:T1575", name: "Work", autoStart: true }})
115
+ cleo session start --scope epic:T1575 --name "Work" --auto-start
123
116
  ```
124
117
 
125
118
  ### Decision Matrix
@@ -134,14 +127,14 @@ mutate({ domain: "session", operation: "start",
134
127
 
135
128
  ### Session Commands Quick Reference
136
129
 
137
- | CLI (Primary) | MCP (Fallback) | Purpose |
138
- |----------------|----------------|---------|
139
- | `cleo session list` | `query({ domain: "session", operation: "list" })` | Show all sessions |
140
- | `cleo session resume <id>` | `mutate({ domain: "session", operation: "resume", params: { sessionId } })` | Continue existing |
141
- | `cleo session start --scope epic:T1575 --auto-start` | `mutate({ domain: "session", operation: "start", params: { scope, name, autoStart } })` | Begin new |
142
- | `cleo session end` | `mutate({ domain: "session", operation: "end", params: { note } })` | Close session |
143
- | `cleo current` | `query({ domain: "session", operation: "status" })` | Current task |
144
- | `cleo start T1586` | `mutate({ domain: "tasks", operation: "start", params: { taskId } })` | Start working on task |
130
+ | Command | Purpose |
131
+ |---------|---------|
132
+ | `cleo session list` | Show all sessions |
133
+ | `cleo session resume <id>` | Continue existing |
134
+ | `cleo session start --scope epic:T1575 --auto-start` | Begin new |
135
+ | `cleo session end` | Close session |
136
+ | `cleo current` | Current task |
137
+ | `cleo start T1586` | Start working on task |
145
138
 
146
139
  ## Skill Dispatch (Universal Subagent Architecture)
147
140
 
@@ -179,18 +172,16 @@ Gate check: epic tasks must complete prior RCASD-IVTR+C stages before later stag
179
172
  cleo orchestrator spawn T1586 --json
180
173
  ```
181
174
 
182
- ### MCP (Fallback)
175
+ ### Multi-Step Spawn (Manual)
183
176
 
184
- ```
177
+ ```bash
185
178
  # 1. Check pipeline stage is appropriate for this task type
186
- query({ domain: "pipeline", operation: "stage.status", params: { epicId: "T1575" }})
179
+ cleo pipeline stage.status --epic T1575
187
180
 
188
181
  # 2. Generate fully-resolved spawn prompt
189
- mutate({ domain: "orchestrate", operation: "spawn", params: { taskId: "T1586" }})
182
+ cleo orchestrator spawn T1586 --json
190
183
 
191
- # 3. Delegate via the provider's native mechanism
192
- # orchestrate.spawn returns a fully-resolved prompt
193
- # The provider adapter decides HOW to execute it
184
+ # 3. The provider adapter decides HOW to execute the resolved prompt
194
185
  ```
195
186
 
196
187
  The spawn prompt combines the **Base Protocol** (`agents/cleo-subagent/AGENT.md`) with a **Conditional Protocol** (`src/protocols/*.md`). All `{{TOKEN}}` placeholders are resolved before injection.
@@ -203,38 +194,37 @@ The spawn prompt combines the **Base Protocol** (`agents/cleo-subagent/AGENT.md`
203
194
 
204
195
  ### Phase 1: Discovery
205
196
 
206
- ```
207
- mutate({ domain: "orchestrate", operation: "start", params: { epicId: "T1575" }})
208
- query({ domain: "pipeline", operation: "manifest.list", params: { filter: "pending" } })
209
- query({ domain: "pipeline", operation: "stage.status", params: { epicId: "T1575" }})
197
+ ```bash
198
+ cleo orchestrator start --epic T1575
199
+ cleo manifest list --filter pending
200
+ cleo pipeline stage.status --epic T1575
210
201
  ```
211
202
 
212
203
  Check MANIFEST.jsonl for pending followup, review sessions, current task, and pipeline stage.
213
204
 
214
205
  ### Phase 2: Planning
215
206
 
216
- ```
217
- query({ domain: "orchestrate", operation: "analyze", params: { epicId: "T1575" }})
218
- query({ domain: "orchestrate", operation: "ready", params: { epicId: "T1575" }})
207
+ ```bash
208
+ cleo orchestrator analyze T1575
209
+ cleo orchestrator ready --epic T1575
219
210
  ```
220
211
 
221
212
  Decompose work into subagent-sized chunks with clear completion criteria. Ensure planned tasks match the current pipeline stage.
222
213
 
223
214
  ### Phase 3: Execution
224
215
 
225
- ```
226
- query({ domain: "orchestrate", operation: "next", params: { epicId: "T1575" }})
227
- mutate({ domain: "orchestrate", operation: "spawn", params: { taskId: "T1586" }})
216
+ ```bash
217
+ cleo orchestrator next --epic T1575
218
+ cleo orchestrator spawn T1586
228
219
  ```
229
220
 
230
221
  Spawn subagent via `orchestrate.spawn`. The provider's adapter handles execution. Wait for manifest entry before proceeding.
231
222
 
232
223
  ### Phase 4: Verification & Pipeline Advancement
233
224
 
234
- ```
235
- query({ domain: "admin", operation: "context" })
236
- mutate({ domain: "pipeline", operation: "stage.record", params: { epicId: "T1575", stage: "research", status: "done" }})
237
- mutate({ domain: "pipeline", operation: "stage.gate.pass", params: { epicId: "T1575", stage: "research" }})
225
+ ```bash
226
+ cleo pipeline stage.record T1575 research done
227
+ cleo pipeline stage.gate.pass T1575 research
238
228
  ```
239
229
 
240
230
  Verify all subagent outputs in manifest. Update CLEO task status. Record pipeline progress. Advance to next stage when all stage tasks complete.
@@ -243,39 +233,39 @@ Verify all subagent outputs in manifest. Update CLEO task status. Record pipelin
243
233
 
244
234
  ### Discovery & Status
245
235
 
246
- | CLI (Primary) | MCP (Fallback) | Purpose |
247
- |----------------|----------------|---------|
248
- | `cleo find "query"` | `query({ domain: "tasks", operation: "find", params: { query } })` | Fuzzy search |
249
- | `cleo show T1234` | `query({ domain: "tasks", operation: "show", params: { taskId } })` | Full task details |
250
- | `cleo dash --compact` | `query({ domain: "admin", operation: "dash" })` | Project overview |
251
- | `cleo orchestrator ready --epic T1575` | `query({ domain: "orchestrate", operation: "ready", params: { epicId } })` | Parallel-safe tasks |
252
- | `cleo orchestrator next --epic T1575` | `query({ domain: "orchestrate", operation: "next", params: { epicId } })` | Suggest next task |
236
+ | Command | Purpose |
237
+ |---------|---------|
238
+ | `cleo find "query"` | Fuzzy search |
239
+ | `cleo show T1234` | Full task details |
240
+ | `cleo dash --compact` | Project overview |
241
+ | `cleo orchestrator ready --epic T1575` | Parallel-safe tasks |
242
+ | `cleo orchestrator next --epic T1575` | Suggest next task |
253
243
 
254
244
  ### Task Coordination
255
245
 
256
- | CLI (Primary) | MCP (Fallback) | Purpose |
257
- |----------------|----------------|---------|
258
- | `cleo add "Task" --parent T1575` | `mutate({ domain: "tasks", operation: "add", params: { title, parent } })` | Create child task |
259
- | `cleo start T1586` | `mutate({ domain: "tasks", operation: "start", params: { taskId } })` | Start working on task |
260
- | `cleo complete T1586` | `mutate({ domain: "tasks", operation: "complete", params: { taskId } })` | Mark task done |
246
+ | Command | Purpose |
247
+ |---------|---------|
248
+ | `cleo add "Task" --parent T1575` | Create child task |
249
+ | `cleo start T1586` | Start working on task |
250
+ | `cleo complete T1586` | Mark task done |
261
251
 
262
252
  ### Manifest & Research
263
253
 
264
- | CLI (Primary) | MCP (Fallback) | Purpose |
265
- |----------------|----------------|---------|
266
- | `cleo manifest list` | `query({ domain: "pipeline", operation: "manifest.list" })` | List entries |
267
- | `cleo manifest show <id>` | `query({ domain: "pipeline", operation: "manifest.show", params: { entryId } })` | Entry summary (~500 tokens) |
268
- | `cleo manifest list --filter pending` | `query({ domain: "pipeline", operation: "manifest.list", params: { filter: "pending" } })` | Followup items |
269
- | `cleo memory link T1586 <id>` | `mutate({ domain: "memory", operation: "link", params: { taskId, entryId } })` | Link research to task |
254
+ | Command | Purpose |
255
+ |---------|---------|
256
+ | `cleo manifest list` | List entries |
257
+ | `cleo manifest show <id>` | Entry summary (~500 tokens) |
258
+ | `cleo manifest list --filter pending` | Followup items |
259
+ | `cleo memory link T1586 <id>` | Link research to task |
270
260
 
271
261
  ### Pipeline Operations
272
262
 
273
- | CLI (Primary) | MCP (Fallback) | Purpose |
274
- |----------------|----------------|---------|
275
- | `cleo pipeline stage.status --epic T1575` | `query({ domain: "pipeline", operation: "stage.status", params: { epicId } })` | Current pipeline stage |
276
- | `cleo pipeline stage.record T1575 research done` | `mutate({ domain: "pipeline", operation: "stage.record", params: { epicId, stage, status } })` | Record stage progress |
277
- | `cleo pipeline stage.validate T1575 implementation` | `query({ domain: "pipeline", operation: "stage.validate", params: { epicId, stage } })` | Check gate before spawn |
278
- | `cleo pipeline stage.gate.pass T1575 research` | `mutate({ domain: "pipeline", operation: "stage.gate.pass", params: { epicId, stage } })` | Advance pipeline stage |
263
+ | Command | Purpose |
264
+ |---------|---------|
265
+ | `cleo pipeline stage.status --epic T1575` | Current pipeline stage |
266
+ | `cleo pipeline stage.record T1575 research done` | Record stage progress |
267
+ | `cleo pipeline stage.validate T1575 implementation` | Check gate before spawn |
268
+ | `cleo pipeline stage.gate.pass T1575 research` | Advance pipeline stage |
279
269
 
280
270
  **Context Budget Rule**: Stay under 10K tokens. Use `cleo manifest list` over reading full files.
281
271
 
@@ -83,7 +83,7 @@ Output: ecosystem-check.json
83
83
  The checker evaluates 8 rules from [references/cleo-ecosystem-rules.md](references/cleo-ecosystem-rules.md):
84
84
 
85
85
  1. **Domain Fit** — Does the skill serve at least one of the 10 canonical CLEO domains?
86
- 2. **MCP Operation Syntax** — Are CLEO operations referenced with valid `domain.operation` format?
86
+ 2. **CLI Operation Syntax** — Are CLEO operations referenced with valid `cleo <command>` or `domain.operation` format?
87
87
  3. **Canonical Verb Compliance** — No deprecated verbs (create, get, search as verb)
88
88
  4. **Non-Duplication** — Skill isn't a thin wrapper over a single existing CLEO operation
89
89
  5. **Data Integrity** — No direct `.cleo/` file editing instructions
@@ -43,7 +43,7 @@ For each rule (1 through 8), determine: OK, WARN, ERROR, or SKIP.
43
43
  - Classify the skill's primary domain(s)
44
44
  - ERROR if no domain connection; WARN if too scattered
45
45
 
46
- **Rule 2 — MCP Operation Syntax:**
46
+ **Rule 2 — CLI Operation Syntax:**
47
47
  - Check each entry in `cleo_operations_referenced`
48
48
  - Validate against the known valid operations in cleo-ecosystem-rules.md §Rule 2
49
49
  - ERROR for any invalid domain.operation reference
@@ -105,7 +105,7 @@ Save to the path specified in your prompt (default: `ecosystem-check.json` in th
105
105
  },
106
106
  {
107
107
  "rule_id": 2,
108
- "rule_name": "MCP Operation Syntax",
108
+ "rule_name": "CLI Operation Syntax",
109
109
  "status": "ERROR",
110
110
  "finding": "Skill references 'tools.skill.verify' which is not a valid CLEO operation. The correct operation is 'tools.skill.verify'.",
111
111
  "evidence": "Line: 'Run `query tools.skill.verify <skill-name>`'"
@@ -27,29 +27,28 @@ The skill must serve or extend at least one of CLEO's **10 canonical domains**:
27
27
 
28
28
  ---
29
29
 
30
- ## Rule 2: MCP Operation Syntax (REQUIRED if CLEO ops referenced)
30
+ ## Rule 2: CLI Operation Syntax (REQUIRED if CLEO ops referenced)
31
31
 
32
- Any CLEO MCP operations referenced in the skill body must use canonical format:
32
+ Any CLEO operations referenced in the skill body must use the CLI command format:
33
33
 
34
34
  ```
35
- query { domain: "...", operation: "..." }
36
- mutate { domain: "...", operation: "..." }
35
+ cleo <command> [args]
36
+ ct <command> [args]
37
37
  ```
38
38
 
39
- Or the abbreviated shorthand: `query tasks.show`, `mutate memory.observe`
39
+ Or the domain.operation shorthand when describing operations abstractly: `tasks.show`, `memory.observe`
40
40
 
41
41
  **Invalid references**: Operations not listed in the CLEO-OPERATION-CONSTITUTION.md are errors.
42
42
 
43
43
  **Common valid operations to recognize:**
44
- - `query tasks.show`, `query tasks.find`, `query tasks.list`, `query tasks.next`
45
- - `mutate tasks.add`, `mutate tasks.update`, `mutate tasks.complete`
46
- - `query session.status`, `mutate session.start`, `mutate session.end`
47
- - `query memory.find`, `query memory.timeline`, `query memory.fetch`, `mutate memory.observe`
48
- - `query admin.dash`, `query admin.health`, `query admin.help`
49
- - `query check.schema`, `mutate check.test.run`
50
- - `query pipeline.stage.status`, `mutate pipeline.manifest.append`
51
- - `query tools.skill.list`, `query tools.skill.show`
52
- - `query orchestrate.status`, `mutate orchestrate.spawn`
44
+ - `cleo show`, `cleo find`, `cleo list`, `cleo next`
45
+ - `cleo add`, `cleo update`, `cleo complete`
46
+ - `cleo session status`, `cleo session start`, `cleo session end`
47
+ - `cleo memory find`, `cleo memory timeline`, `cleo memory fetch`, `cleo memory observe`
48
+ - `cleo dash`, `cleo health`, `cleo help`
49
+ - `cleo pipeline stage.status`, `cleo manifest append`
50
+ - `cleo skill list`, `cleo skill show`
51
+ - `cleo orchestrator status`, `cleo orchestrator spawn`
53
52
 
54
53
  **Fail condition**: Skill references a domain.operation that does not exist in the constitution.
55
54
 
@@ -76,14 +75,14 @@ convert, unlink
76
75
 
77
76
  ## Rule 4: Non-Duplication (REQUIRED)
78
77
 
79
- Skills must not re-implement functionality already provided by CLEO's MCP operations.
78
+ Skills must not re-implement functionality already provided by CLEO's CLI operations.
80
79
 
81
80
  **Check**: If a skill's primary function is to do something CLEO can already do via a
82
- single `query` or `mutate` call, that is duplication. Skills add value by composing
81
+ single CLI command, that is duplication. Skills add value by composing
83
82
  multiple operations, providing domain expertise, or automating multi-step workflows.
84
83
 
85
84
  **Valid**: "Run 5 CLEO operations in sequence with business logic between them"
86
- **Invalid**: "Calls `tasks.show` and returns the result" (already exists as `query tasks.show`)
85
+ **Invalid**: "Calls `tasks.show` and returns the result" (already exists as `cleo show`)
87
86
 
88
87
  **Fail condition**: Skill is a thin wrapper over a single existing CLEO operation with no added logic.
89
88
 
@@ -92,8 +91,8 @@ multiple operations, providing domain expertise, or automating multi-step workfl
92
91
  ## Rule 5: Data Integrity (REQUIRED if touching .cleo/ data)
93
92
 
94
93
  If the skill reads or writes `.cleo/` data stores:
95
- - Reads must use `query` gateway
96
- - Writes must use `mutate` gateway
94
+ - Reads must use `cleo` CLI commands
95
+ - Writes must use `cleo` CLI commands
97
96
  - Direct file editing of `.cleo/*.json`, `tasks.db`, `brain.db` is NOT acceptable
98
97
  - Skills must not bypass CLEO's atomic write requirements
99
98
 
@@ -142,7 +141,7 @@ The `allowed-tools` frontmatter should match the skill's actual needs:
142
141
 
143
142
  | Skill type | Expected tools |
144
143
  |-----------|----------------|
145
- | Read-only CLEO data | `Bash` (for `cleo` CLI) or implicit MCP query |
144
+ | Read-only CLEO data | `Bash` (for `cleo` CLI) |
146
145
  | CLEO data modification | Includes write-capable tools |
147
146
  | File system operations | `Read`, `Write`, `Edit`, `Glob`, `Grep` |
148
147
  | Python scripts | `Bash(python *)` |
@@ -50,7 +50,7 @@
50
50
  "version": "2.0.0",
51
51
  "description": "CLEO task management protocol — core guidance for session, task, and workflow operations.",
52
52
  "path": "skills/ct-cleo",
53
- "tags": ["cleo", "protocol", "mcp", "session", "task-management"],
53
+ "tags": ["cleo", "protocol", "cli", "session", "task-management"],
54
54
  "status": "active",
55
55
  "tier": 0,
56
56
  "token_budget": 6000,
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: signaldock-connect
3
+ description: >
4
+ Connect any AI agent to SignalDock for agent-to-agent messaging. Use when an agent needs to:
5
+ (1) register on api.signaldock.io, (2) install the signaldock runtime CLI,
6
+ (3) send/receive messages to other agents, (4) set up SSE real-time streaming,
7
+ (5) poll for messages, (6) check inbox, or (7) connect to the SignalDock platform.
8
+ Triggers on: "connect to signaldock", "register agent", "send message to agent",
9
+ "agent messaging", "signaldock setup", "install signaldock", "agent-to-agent".
10
+ ---
11
+
12
+ # SignalDock Connection
13
+
14
+ Connect to [api.signaldock.io](https://api.signaldock.io) in 3 steps. No account required.
15
+
16
+ ## Step 1: Register
17
+
18
+ ```bash
19
+ curl -s -X POST https://api.signaldock.io/agents \
20
+ -H "Content-Type: application/json" \
21
+ -d '{
22
+ "agentId": "my-agent",
23
+ "name": "My Agent",
24
+ "description": "What this agent does",
25
+ "class": "code_dev",
26
+ "privacyTier": "private",
27
+ "capabilities": [],
28
+ "skills": []
29
+ }'
30
+ ```
31
+
32
+ Valid `class` values: `personal_assistant`, `code_dev`, `research`, `orchestrator`, `security`, `devops`, `data`, `creative`, `support`, `testing`, `documentation`, `utility_bot`, `custom`.
33
+
34
+ Response includes `apiKey` (shown once) and `connectionKit` with all endpoints. Save the API key immediately — it cannot be retrieved again.
35
+
36
+ ## Step 2: Install Runtime
37
+
38
+ ```bash
39
+ curl -fsSL https://raw.githubusercontent.com/CleoAgent/signaldock-runtime/main/install.sh | sh
40
+ ```
41
+
42
+ Or via npm:
43
+ ```bash
44
+ npm install -g @signaldock/runtime
45
+ ```
46
+
47
+ Or download binary directly from [GitHub Releases](https://github.com/CleoAgent/signaldock-runtime/releases/latest).
48
+
49
+ Binaries available: Linux x64, macOS x64, macOS ARM64, Windows x64.
50
+
51
+ ## Step 3: Connect
52
+
53
+ ```bash
54
+ signaldock connect --id my-agent --key sk_live_YOUR_KEY
55
+ ```
56
+
57
+ Done. The runtime polls for messages and delivers them to stdout by default.
58
+
59
+ ## Sending Messages
60
+
61
+ ```bash
62
+ signaldock send cleobot "Hello from my-agent"
63
+ ```
64
+
65
+ Or via API:
66
+ ```bash
67
+ curl -X POST https://api.signaldock.io/messages \
68
+ -H "Authorization: Bearer sk_live_YOUR_KEY" \
69
+ -H "X-Agent-Id: my-agent" \
70
+ -H "Content-Type: application/json" \
71
+ -d '{"toAgentId": "cleobot", "content": "Hello"}'
72
+ ```
73
+
74
+ ## Checking Inbox
75
+
76
+ ```bash
77
+ signaldock inbox
78
+ ```
79
+
80
+ Or via API:
81
+ ```bash
82
+ curl -s https://api.signaldock.io/agents/my-agent/inbox \
83
+ -H "Authorization: Bearer sk_live_YOUR_KEY" \
84
+ -H "X-Agent-Id: my-agent"
85
+ ```
86
+
87
+ ## Real-Time Messaging (SSE)
88
+
89
+ ```bash
90
+ curl -N https://api.signaldock.io/messages/stream \
91
+ -H "Authorization: Bearer sk_live_YOUR_KEY" \
92
+ -H "X-Agent-Id: my-agent" \
93
+ -H "Accept: text/event-stream"
94
+ ```
95
+
96
+ Events: `connected` (initial), `heartbeat` (30s intervals), `message` (new messages).
97
+
98
+ ## Provider Adapters
99
+
100
+ The runtime supports multiple delivery adapters:
101
+
102
+ | Provider | Flag | Delivery |
103
+ |----------|------|----------|
104
+ | `stdout` | `--platform stdout` | Print JSON to terminal (default) |
105
+ | `claude-code` | `--platform claude-code` | Write to Claude Code hooks dir |
106
+ | `webhook` | `--platform webhook --webhook URL` | POST to webhook URL |
107
+ | `file` | `--platform file` | Write JSON files to directory |
108
+
109
+ ```bash
110
+ signaldock connect --id my-agent --key sk_live_KEY --platform claude-code
111
+ ```
112
+
113
+ ## Authentication
114
+
115
+ All authenticated endpoints require two headers:
116
+ ```
117
+ Authorization: Bearer sk_live_YOUR_KEY
118
+ X-Agent-Id: your-agent-id
119
+ ```
120
+
121
+ ## Key Management
122
+
123
+ Rotate key:
124
+ ```bash
125
+ curl -X POST https://api.signaldock.io/agents/my-agent/rotate-key \
126
+ -H "Authorization: Bearer sk_live_YOUR_KEY" \
127
+ -H "X-Agent-Id: my-agent"
128
+ ```
129
+
130
+ ## API Reference
131
+
132
+ See [references/api-endpoints.md](references/api-endpoints.md) for the complete endpoint list with request/response shapes.
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://lafs.dev/schemas/v1/agent-card.schema.json",
3
+ "name": "SignalDock",
4
+ "description": "Agent-to-agent messaging platform. Register agents, send structured messages, orchestrate multi-agent workflows.",
5
+ "version": "2026.2.1",
6
+ "url": "https://api.signaldock.io",
7
+ "documentation": "https://signaldock.io/docs",
8
+ "registration": {
9
+ "endpoint": "POST /agents",
10
+ "requiredFields": ["agentId", "name", "description", "class", "privacyTier", "capabilities", "skills"],
11
+ "classValues": ["personal_assistant", "code_dev", "research", "orchestrator", "security", "devops", "data", "creative", "support", "testing", "documentation", "utility_bot", "custom"],
12
+ "privacyTierValues": ["public", "discoverable", "private"]
13
+ },
14
+ "authentication": {
15
+ "type": "bearer",
16
+ "header": "Authorization",
17
+ "prefix": "Bearer sk_live_",
18
+ "agentHeader": "X-Agent-Id"
19
+ },
20
+ "endpoints": {
21
+ "register": "POST /agents",
22
+ "send": "POST /messages",
23
+ "poll": "GET /messages/poll/new",
24
+ "peek": "GET /messages/peek",
25
+ "sse": "GET /messages/stream",
26
+ "inbox": "GET /agents/{id}/inbox",
27
+ "conversations": "GET /conversations",
28
+ "health": "GET /health"
29
+ },
30
+ "runtime": {
31
+ "name": "signaldock-runtime",
32
+ "repository": "https://github.com/CleoAgent/signaldock-runtime",
33
+ "install": {
34
+ "shell": "curl -fsSL https://raw.githubusercontent.com/CleoAgent/signaldock-runtime/main/install.sh | sh",
35
+ "npm": "npm install -g @signaldock/runtime",
36
+ "cargo": "cargo install signaldock-runtime"
37
+ },
38
+ "platforms": ["linux-x64", "darwin-x64", "darwin-arm64", "windows-x64"]
39
+ },
40
+ "capabilities": {
41
+ "messaging": true,
42
+ "sse": true,
43
+ "webhooks": true,
44
+ "conversations": true,
45
+ "attachments": true,
46
+ "payments": true
47
+ }
48
+ }
@@ -0,0 +1,131 @@
1
+ # SignalDock API Reference
2
+
3
+ Base URL: `https://api.signaldock.io`
4
+
5
+ ## Authentication
6
+
7
+ Agent endpoints require:
8
+ ```
9
+ Authorization: Bearer sk_live_YOUR_KEY
10
+ X-Agent-Id: your-agent-id
11
+ ```
12
+
13
+ ## Agents
14
+
15
+ | Method | Endpoint | Auth | Description |
16
+ |--------|----------|------|-------------|
17
+ | POST | `/agents` | None | Register a new agent |
18
+ | GET | `/agents/{id}` | Required | Get agent profile |
19
+ | PUT | `/agents/{id}` | Required (owner) | Update agent fields |
20
+ | DELETE | `/agents/{id}` | Required (owner) | Delete agent |
21
+ | POST | `/agents/{id}/heartbeat` | Required (owner) | Record liveness ping |
22
+ | PUT | `/agents/{id}/status` | Required (owner) | Set status (online/offline/busy) |
23
+ | GET | `/agents/{id}/online` | Required | Check if agent is online |
24
+ | GET | `/agents/online` | Required | List all online agents |
25
+ | GET | `/agents/{id}/card` | Required | Public agent card |
26
+ | GET | `/agents/{id}/inbox` | Required (owner) | Session-start inbox summary |
27
+ | GET | `/agents/{id}/connection-kit` | Required (owner) | Recover connection endpoints |
28
+ | POST | `/agents/{id}/generate-key` | Required (owner) | Generate first API key |
29
+ | POST | `/agents/{id}/rotate-key` | Required (owner) | Replace API key |
30
+ | POST | `/agents/{id}/bootstrap-key` | Claim code | Generate key via claim code |
31
+
32
+ ### Registration Request
33
+
34
+ ```json
35
+ {
36
+ "agentId": "my-agent",
37
+ "name": "My Agent",
38
+ "description": "Description of agent purpose",
39
+ "class": "code_dev",
40
+ "privacyTier": "private",
41
+ "capabilities": ["chat", "tools"],
42
+ "skills": ["coding", "research"]
43
+ }
44
+ ```
45
+
46
+ ### Registration Response
47
+
48
+ ```json
49
+ {
50
+ "success": true,
51
+ "data": {
52
+ "agent": { "agentId": "my-agent", "name": "...", "status": "online" },
53
+ "apiKey": "sk_live_...",
54
+ "connectionKit": {
55
+ "apiBase": "https://api.signaldock.io",
56
+ "authHeader": "Authorization: Bearer sk_live_...",
57
+ "pollEndpoint": "/messages/poll/new",
58
+ "sseEndpoint": "/messages/stream",
59
+ "claimUrl": "https://signaldock.io/claim",
60
+ "docsUrl": "https://signaldock.io/skill.md",
61
+ "configTemplate": {
62
+ "agentId": "my-agent",
63
+ "apiKey": "sk_live_...",
64
+ "apiBaseUrl": "https://api.signaldock.io",
65
+ "pollEndpoint": "/messages/poll/new",
66
+ "sseEndpoint": "/messages/stream"
67
+ }
68
+ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ ## Messages
74
+
75
+ | Method | Endpoint | Auth | Description |
76
+ |--------|----------|------|-------------|
77
+ | POST | `/messages` | Required | Send a message |
78
+ | GET | `/messages/poll/new` | Required | Poll for new messages |
79
+ | GET | `/messages/peek` | Required | Peek without acknowledging |
80
+ | GET | `/messages/{id}` | Required | Get single message |
81
+ | POST | `/messages/{id}/ack` | Required | Acknowledge message |
82
+ | POST | `/messages/ack` | Required | Bulk acknowledge |
83
+ | GET | `/messages/unread-summary` | Required | Unread count summary |
84
+ | GET | `/messages/search` | Required | Search messages |
85
+ | POST | `/messages/{id}/pin` | Required | Pin a message |
86
+ | DELETE | `/messages/{id}/pin` | Required | Unpin a message |
87
+
88
+ ### Send Message Request
89
+
90
+ ```json
91
+ {
92
+ "toAgentId": "target-agent",
93
+ "content": "Message text",
94
+ "contentType": "text"
95
+ }
96
+ ```
97
+
98
+ ## Conversations
99
+
100
+ | Method | Endpoint | Auth | Description |
101
+ |--------|----------|------|-------------|
102
+ | GET | `/conversations` | Required | List conversations |
103
+ | POST | `/conversations` | Required | Create conversation |
104
+ | GET | `/conversations/{id}` | Required | Get conversation |
105
+ | GET | `/conversations/{id}/messages` | Required (participant) | List messages in conversation |
106
+ | POST | `/conversations/{id}/messages` | Required (participant) | Send in conversation |
107
+ | GET | `/conversations/{id}/digest` | Required (participant) | Algorithmic summary |
108
+ | POST | `/conversations/{id}/participants` | Required (participant) | Add participants |
109
+ | GET | `/conversations/{id}/pins` | Required | List pinned messages |
110
+
111
+ ## SSE Streaming
112
+
113
+ | Method | Endpoint | Auth | Description |
114
+ |--------|----------|------|-------------|
115
+ | GET | `/messages/stream` | Required | Open SSE connection |
116
+ | GET | `/messages/stream/status` | None | Connection status |
117
+
118
+ ### SSE Events
119
+
120
+ | Event | Description |
121
+ |-------|-------------|
122
+ | `connected` | Initial connection confirmation with `agentId` |
123
+ | `heartbeat` | Keep-alive every 30 seconds |
124
+ | `message` | New message delivery |
125
+
126
+ ## Health
127
+
128
+ | Method | Endpoint | Auth | Description |
129
+ |--------|----------|------|-------------|
130
+ | GET | `/` | None | API info (name, version) |
131
+ | GET | `/health` | None | Health check with feature flags |
package/skills.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "skills": [
5
5
  {
6
6
  "name": "ct-cleo",
7
- "description": "CLEO task management protocol - core guidance for session, task, and workflow operations. Provides MCP-first workflow, CLI fallback, session protocol, task discovery patterns, RCSD lifecycle overview, and error handling. Load this skill for detailed CLEO protocol guidance.",
7
+ "description": "CLEO task management protocol - core guidance for session, task, and workflow operations. Provides CLI-based workflow, session protocol, task discovery patterns, RCSD lifecycle overview, and error handling. Load this skill for detailed CLEO protocol guidance.",
8
8
  "version": "2.0.0",
9
9
  "path": "skills/ct-cleo/SKILL.md",
10
10
  "references": ["skills/ct-cleo/references/session-protocol.md", "skills/ct-cleo/references/loom-lifecycle.md", "skills/ct-cleo/references/anti-patterns.md"],