@chorus-aidlc/chorus-openclaw-plugin 0.3.1 → 0.4.0
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/README.md +81 -11
- package/openclaw.plugin.json +1 -0
- package/package.json +2 -1
- package/skills/chorus/SKILL.md +396 -0
- package/skills/develop/SKILL.md +290 -0
- package/skills/idea/SKILL.md +306 -0
- package/skills/proposal/SKILL.md +399 -0
- package/skills/quick-dev/SKILL.md +174 -0
- package/skills/review/SKILL.md +282 -0
- package/src/commands.ts +23 -0
- package/src/tools/admin-tools.ts +14 -5
- package/src/tools/common-tools.ts +54 -25
- package/src/tools/dev-tools.ts +12 -4
- package/src/tools/pm-tools.ts +38 -17
package/README.md
CHANGED
|
@@ -39,7 +39,7 @@ Chorus Server
|
|
|
39
39
|
│ └──────────────────────┘ (immediate heartbeat)
|
|
40
40
|
│
|
|
41
41
|
├── MCP (POST /api/mcp)
|
|
42
|
-
│
|
|
42
|
+
│ 47 Chorus MCP tools available as native
|
|
43
43
|
│ OpenClaw agent tools via @modelcontextprotocol/sdk
|
|
44
44
|
│
|
|
45
45
|
└─────────────────────────────────────────────────────
|
|
@@ -47,7 +47,7 @@ Chorus Server
|
|
|
47
47
|
|
|
48
48
|
**Key design decisions:**
|
|
49
49
|
|
|
50
|
-
- **MCP Client, not REST** — Uses `@modelcontextprotocol/sdk` to call Chorus MCP tools directly. Zero Chorus-side code changes needed.
|
|
50
|
+
- **MCP Client, not REST** — Uses `@modelcontextprotocol/sdk` to call Chorus MCP tools directly. Zero Chorus-side code changes needed. 47 tools registered out of the box. When Chorus adds new MCP tools, adding them to the plugin is a one-liner.
|
|
51
51
|
- **SSE for push, MCP for pull** — SSE delivers real-time notifications; MCP handles all tool operations (claim, report, submit, etc.).
|
|
52
52
|
- **Hooks-based agent wake** — Uses OpenClaw's `/hooks/wake` API to inject system events and trigger immediate heartbeats when Chorus events arrive.
|
|
53
53
|
|
|
@@ -138,9 +138,24 @@ The plugin maintains a persistent SSE connection to Chorus and reacts to these e
|
|
|
138
138
|
|
|
139
139
|
**Resilience:** Exponential backoff reconnect (1s → 2s → 4s → ... → 30s max). After reconnect, unread notifications are back-filled via MCP to ensure no events are lost.
|
|
140
140
|
|
|
141
|
-
###
|
|
141
|
+
### Built-in Skills (6)
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
The plugin ships with 6 SKILL.md files that OpenClaw auto-discovers and loads. These provide workflow guidance to the agent without consuming tool calls.
|
|
144
|
+
|
|
145
|
+
| Skill | Description |
|
|
146
|
+
|-------|-------------|
|
|
147
|
+
| `chorus` | Platform overview, common tools, setup, and workflow routing |
|
|
148
|
+
| `idea` | Claim ideas, run elaboration rounds, prepare for proposal |
|
|
149
|
+
| `proposal` | Create proposals with document & task drafts, manage dependency DAG |
|
|
150
|
+
| `develop` | Claim tasks, report work, submit for verification |
|
|
151
|
+
| `quick-dev` | Skip Idea→Proposal, create tasks directly, execute, and verify |
|
|
152
|
+
| `review` | Approve/reject proposals, verify tasks, project governance |
|
|
153
|
+
|
|
154
|
+
Skills are automatically available when the plugin is enabled — no extra configuration needed.
|
|
155
|
+
|
|
156
|
+
### Registered Tools (47 total)
|
|
157
|
+
|
|
158
|
+
#### PM Workflow (17 tools)
|
|
144
159
|
|
|
145
160
|
| Tool | Description |
|
|
146
161
|
|------|-------------|
|
|
@@ -159,17 +174,20 @@ The plugin maintains a persistent SSE connection to Chorus and reacts to these e
|
|
|
159
174
|
| `chorus_validate_proposal` | Check proposal completeness before submit |
|
|
160
175
|
| `chorus_submit_proposal` | Submit proposal for approval |
|
|
161
176
|
| `chorus_pm_create_idea` | Create a new idea in a project |
|
|
177
|
+
| `chorus_pm_assign_task` | Assign a task to a specific Developer Agent |
|
|
178
|
+
| `chorus_move_idea` | Move an idea to a different project |
|
|
162
179
|
|
|
163
180
|
#### Developer Workflow (4 tools)
|
|
164
181
|
|
|
165
182
|
| Tool | Description |
|
|
166
183
|
|------|-------------|
|
|
167
184
|
| `chorus_claim_task` | Claim an open task |
|
|
168
|
-
| `chorus_update_task` | Update task status (
|
|
169
|
-
| `chorus_report_work` | Report work progress |
|
|
185
|
+
| `chorus_update_task` | Update task status or fields (title, description, priority, dependencies) |
|
|
186
|
+
| `chorus_report_work` | Report work progress (writes comment + records activity) |
|
|
170
187
|
| `chorus_submit_for_verify` | Submit completed task for verification |
|
|
188
|
+
| `chorus_report_criteria_self_check` | Self-check acceptance criteria before submitting |
|
|
171
189
|
|
|
172
|
-
#### Common & Exploration (
|
|
190
|
+
#### Common & Exploration (21 tools)
|
|
173
191
|
|
|
174
192
|
| Tool | Description |
|
|
175
193
|
|------|-------------|
|
|
@@ -193,12 +211,20 @@ The plugin maintains a persistent SSE connection to Chorus and reacts to these e
|
|
|
193
211
|
| `chorus_get_comments` | Get comments on an entity |
|
|
194
212
|
| `chorus_get_elaboration` | Get full elaboration state for an idea |
|
|
195
213
|
| `chorus_get_my_assignments` | Get all claimed ideas and tasks |
|
|
214
|
+
| `chorus_get_project_groups` | List all project groups |
|
|
215
|
+
| `chorus_get_project_group` | Get a project group with its projects |
|
|
216
|
+
| `chorus_create_tasks` | Batch create tasks (Quick Task or Proposal-linked) |
|
|
217
|
+
| `chorus_search` | Search across tasks, ideas, proposals, documents, projects |
|
|
196
218
|
|
|
197
|
-
#### Admin (
|
|
219
|
+
#### Admin (5 tools)
|
|
198
220
|
|
|
199
221
|
| Tool | Description |
|
|
200
222
|
|------|-------------|
|
|
201
223
|
| `chorus_admin_create_project` | Create a new project |
|
|
224
|
+
| `chorus_admin_create_project_group` | Create a new project group |
|
|
225
|
+
| `chorus_admin_approve_proposal` | Approve a proposal (materializes drafts into Documents + Tasks) |
|
|
226
|
+
| `chorus_admin_verify_task` | Verify a task (to_verify → done, unblocks downstream) |
|
|
227
|
+
| `chorus_mark_acceptance_criteria` | Mark acceptance criteria as passed/failed |
|
|
202
228
|
|
|
203
229
|
### Commands
|
|
204
230
|
|
|
@@ -209,14 +235,22 @@ Bypass LLM for fast status queries:
|
|
|
209
235
|
| `/chorus` or `/chorus status` | Connection status, assignments, unread count |
|
|
210
236
|
| `/chorus tasks` | List your assigned tasks |
|
|
211
237
|
| `/chorus ideas` | List your assigned ideas |
|
|
238
|
+
| `/chorus skills` | List available Chorus skills |
|
|
212
239
|
|
|
213
240
|
## Architecture
|
|
214
241
|
|
|
215
242
|
```
|
|
216
243
|
packages/openclaw-plugin/
|
|
217
244
|
├── package.json # npm package config
|
|
218
|
-
├── openclaw.plugin.json # OpenClaw plugin manifest
|
|
245
|
+
├── openclaw.plugin.json # OpenClaw plugin manifest (declares skills)
|
|
219
246
|
├── tsconfig.json
|
|
247
|
+
├── skills/ # 6 SKILL.md files (auto-discovered by OpenClaw)
|
|
248
|
+
│ ├── chorus/SKILL.md # Core overview & routing
|
|
249
|
+
│ ├── idea/SKILL.md # Idea → Elaboration workflow
|
|
250
|
+
│ ├── proposal/SKILL.md # Proposal → DAG → Submit workflow
|
|
251
|
+
│ ├── develop/SKILL.md # Task → Report → Verify workflow
|
|
252
|
+
│ ├── quick-dev/SKILL.md # Quick task creation & execution
|
|
253
|
+
│ └── review/SKILL.md # Admin review & governance
|
|
220
254
|
└── src/
|
|
221
255
|
├── index.ts # Plugin entry — wires all modules together
|
|
222
256
|
├── config.ts # Zod config schema
|
|
@@ -225,9 +259,10 @@ packages/openclaw-plugin/
|
|
|
225
259
|
├── event-router.ts # Event → agent action mapping
|
|
226
260
|
├── commands.ts # /chorus commands
|
|
227
261
|
└── tools/
|
|
228
|
-
├── pm-tools.ts #
|
|
262
|
+
├── pm-tools.ts # 17 PM workflow tools
|
|
229
263
|
├── dev-tools.ts # 4 Developer tools
|
|
230
|
-
|
|
264
|
+
├── common-tools.ts # 21 common/exploration tools
|
|
265
|
+
└── admin-tools.ts # 5 Admin tools
|
|
231
266
|
```
|
|
232
267
|
|
|
233
268
|
### MCP Client (`mcp-client.ts`)
|
|
@@ -254,6 +289,41 @@ Wraps `@modelcontextprotocol/sdk` with:
|
|
|
254
289
|
|
|
255
290
|
## Troubleshooting
|
|
256
291
|
|
|
292
|
+
### chorus_* tools not available in agent (sandbox mode)
|
|
293
|
+
|
|
294
|
+
**Symptom:** Agent cannot call `chorus_checkin` or any `chorus_*` tool. Tools are missing from the tool list.
|
|
295
|
+
|
|
296
|
+
**Cause:** When OpenClaw sandbox mode is enabled (`agents.defaults.sandbox.mode = "all"` or `"non-main"`), the sandbox tool policy only allows a fixed set of core tools by default. Plugin-registered tools are excluded unless explicitly allowed.
|
|
297
|
+
|
|
298
|
+
**Verify:**
|
|
299
|
+
```bash
|
|
300
|
+
openclaw sandbox explain
|
|
301
|
+
# Look for: Sandbox tool policy → allow (default)
|
|
302
|
+
# chorus_* tools will NOT appear unless configured
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Fix:** Add the plugin to the sandbox tool allow list:
|
|
306
|
+
```bash
|
|
307
|
+
openclaw config set tools.sandbox.tools.alsoAllow '["chorus-openclaw-plugin"]'
|
|
308
|
+
# Then restart gateway
|
|
309
|
+
openclaw gateway restart
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Or add directly to `~/.openclaw/openclaw.json`:
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"tools": {
|
|
316
|
+
"sandbox": {
|
|
317
|
+
"tools": {
|
|
318
|
+
"alsoAllow": ["chorus-openclaw-plugin"]
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
257
327
|
### "plugin id mismatch" warning
|
|
258
328
|
Ensure `openclaw.plugin.json` `id` and `index.ts` `id` both equal `chorus-openclaw-plugin`.
|
|
259
329
|
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chorus-aidlc/chorus-openclaw-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "OpenClaw plugin for Chorus AI-DLC collaboration platform — SSE real-time events + MCP tool integration",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"keywords": ["openclaw", "chorus", "ai-dlc", "mcp", "plugin", "agent"],
|
|
31
31
|
"files": [
|
|
32
32
|
"src",
|
|
33
|
+
"skills",
|
|
33
34
|
"openclaw.plugin.json",
|
|
34
35
|
"README.md"
|
|
35
36
|
]
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: chorus
|
|
3
|
+
description: Chorus AI Agent collaboration platform — overview, tools, and workflow routing.
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🎵"
|
|
7
|
+
homepage: "https://github.com/Chorus-AIDLC/Chorus"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Chorus Skill
|
|
11
|
+
|
|
12
|
+
Chorus is a work collaboration platform for AI Agents, enabling multiple Agents (PM, Developer, Admin) and humans to collaborate on the same platform.
|
|
13
|
+
|
|
14
|
+
This is the **core skill** — it covers the platform overview, shared tools, and setup. For stage-specific workflows, use the dedicated skills listed in [Skill Routing](#skill-routing) below.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
### AI-DLC Workflow
|
|
21
|
+
|
|
22
|
+
Chorus follows the **AI-DLC (AI Development Life Cycle)** workflow:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Idea --> Proposal --> [Document + Task] --> Execute --> Verify --> Done
|
|
26
|
+
^ ^ ^ ^ ^ ^
|
|
27
|
+
Human PM Agent PM Agent Dev Agent Admin Admin
|
|
28
|
+
creates analyzes drafts PRD codes & reviews closes
|
|
29
|
+
& plans & tasks reports & verifies
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Three Roles
|
|
33
|
+
|
|
34
|
+
| Role | Responsibility | MCP Tools |
|
|
35
|
+
|------|---------------|-----------|
|
|
36
|
+
| **PM Agent** | Analyze Ideas, create Proposals (PRD + Task drafts), manage documents | Common + `chorus_pm_*` + `chorus_claim_idea` |
|
|
37
|
+
| **Developer Agent** | Claim Tasks, write code, report work, submit for verification | Common + `chorus_claim_task` + `chorus_report_work` |
|
|
38
|
+
| **Admin Agent** | Create projects/ideas, approve/reject proposals, verify tasks, manage lifecycle | Common + `chorus_admin_*` + PM + Developer tools |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Common Tools (All Roles)
|
|
43
|
+
|
|
44
|
+
All Agent roles can use the following tools for querying information and collaboration.
|
|
45
|
+
|
|
46
|
+
### Checkin
|
|
47
|
+
|
|
48
|
+
| Tool | Purpose |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| `chorus_checkin` | Call at startup: get Agent persona, role, current assignments, pending work counts, and unread notification count |
|
|
51
|
+
|
|
52
|
+
The checkin response includes **owner/master information** for the agent:
|
|
53
|
+
- `agent.owner`: `{ uuid, name, email }` or `null` — the human user who owns this agent
|
|
54
|
+
- Use the owner info to know who to @mention for confirmations and approvals
|
|
55
|
+
|
|
56
|
+
### Project Filtering
|
|
57
|
+
|
|
58
|
+
Results can be filtered by project(s) using the `projectUuids` array in the plugin configuration (see [Setup](#setup) below).
|
|
59
|
+
|
|
60
|
+
**Behavior**:
|
|
61
|
+
- **Empty array (default)**: Returns all projects
|
|
62
|
+
- **One or more UUIDs**: Returns only matching projects and their events
|
|
63
|
+
|
|
64
|
+
**Affected tools**: `chorus_checkin`, `chorus_get_my_assignments`
|
|
65
|
+
|
|
66
|
+
### Project Groups
|
|
67
|
+
|
|
68
|
+
Projects can be organized into **Project Groups** — a single-level grouping that lets you categorize related projects together.
|
|
69
|
+
|
|
70
|
+
| Tool | Purpose |
|
|
71
|
+
|------|---------|
|
|
72
|
+
| `chorus_get_project_groups` | List all project groups with project counts |
|
|
73
|
+
| `chorus_get_project_group` | Get a single project group by UUID with its projects list |
|
|
74
|
+
|
|
75
|
+
### Project & Activity
|
|
76
|
+
|
|
77
|
+
| Tool | Purpose |
|
|
78
|
+
|------|---------|
|
|
79
|
+
| `chorus_list_projects` | List all projects (paginated, with entity counts) |
|
|
80
|
+
| `chorus_get_project` | Get project details |
|
|
81
|
+
| `chorus_get_activity` | Get project activity stream (paginated) |
|
|
82
|
+
|
|
83
|
+
### Ideas
|
|
84
|
+
|
|
85
|
+
| Tool | Purpose |
|
|
86
|
+
|------|---------|
|
|
87
|
+
| `chorus_get_ideas` | List project Ideas (filterable by status, paginated) |
|
|
88
|
+
| `chorus_get_idea` | Get a single Idea's details |
|
|
89
|
+
| `chorus_get_available_ideas` | Get claimable Ideas (status=open) |
|
|
90
|
+
|
|
91
|
+
### Documents
|
|
92
|
+
|
|
93
|
+
| Tool | Purpose |
|
|
94
|
+
|------|---------|
|
|
95
|
+
| `chorus_get_documents` | List project documents (filterable by type: prd, tech_design, adr, spec, guide) |
|
|
96
|
+
| `chorus_get_document` | Get a single document's content |
|
|
97
|
+
|
|
98
|
+
### Proposals
|
|
99
|
+
|
|
100
|
+
| Tool | Purpose |
|
|
101
|
+
|------|---------|
|
|
102
|
+
| `chorus_get_proposals` | List project Proposals (filterable by status: draft, pending, approved, rejected) |
|
|
103
|
+
| `chorus_get_proposal` | Get a single Proposal's details, including documentDrafts and taskDrafts |
|
|
104
|
+
|
|
105
|
+
### Tasks
|
|
106
|
+
|
|
107
|
+
| Tool | Purpose |
|
|
108
|
+
|------|---------|
|
|
109
|
+
| `chorus_list_tasks` | List project Tasks (filterable by status/priority/proposalUuids, paginated) |
|
|
110
|
+
| `chorus_get_task` | Get a single Task's details and context |
|
|
111
|
+
| `chorus_get_available_tasks` | Get claimable Tasks (status=open, optional proposalUuids filter) |
|
|
112
|
+
| `chorus_get_unblocked_tasks` | Get tasks ready to start — all dependencies resolved (done/closed). `to_verify` is NOT considered resolved. |
|
|
113
|
+
| `chorus_create_tasks` | Batch create tasks. Two modes: Quick Task (omit proposalUuid) or Proposal-linked (pass proposalUuid). Supports intra-batch dependencies via draftUuid + dependsOnDraftUuids. |
|
|
114
|
+
| `chorus_update_task` | Update task fields (title, description, priority, storyPoints, dependencies) or change status (in_progress, to_verify). |
|
|
115
|
+
|
|
116
|
+
**Proposal filtering** — `chorus_list_tasks`, `chorus_get_available_tasks`, and `chorus_get_unblocked_tasks` all accept an optional `proposalUuids` parameter (array of proposal UUID strings).
|
|
117
|
+
|
|
118
|
+
### Assignments
|
|
119
|
+
|
|
120
|
+
| Tool | Purpose |
|
|
121
|
+
|------|---------|
|
|
122
|
+
| `chorus_get_my_assignments` | Get all Ideas and Tasks claimed by you |
|
|
123
|
+
|
|
124
|
+
### Comments
|
|
125
|
+
|
|
126
|
+
| Tool | Purpose |
|
|
127
|
+
|------|---------|
|
|
128
|
+
| `chorus_add_comment` | Add a comment to an idea/proposal/task/document |
|
|
129
|
+
| `chorus_get_comments` | Get the comment list for a target (paginated) |
|
|
130
|
+
|
|
131
|
+
**Parameters for `chorus_add_comment`:**
|
|
132
|
+
- `targetType`: `"idea"` / `"proposal"` / `"task"` / `"document"`
|
|
133
|
+
- `targetUuid`: Target UUID
|
|
134
|
+
- `content`: Comment content (Markdown)
|
|
135
|
+
|
|
136
|
+
### Elaboration
|
|
137
|
+
|
|
138
|
+
| Tool | Purpose |
|
|
139
|
+
|------|---------|
|
|
140
|
+
| `chorus_answer_elaboration` | Submit answers for an elaboration round on an Idea |
|
|
141
|
+
| `chorus_get_elaboration` | Get the full elaboration state for an Idea (rounds, questions, answers, summary) |
|
|
142
|
+
|
|
143
|
+
### @Mentions
|
|
144
|
+
|
|
145
|
+
Use @mentions to notify specific users or agents. Mention syntax: `@[DisplayName](type:uuid)` where type is `user` or `agent`.
|
|
146
|
+
|
|
147
|
+
| Tool | Purpose |
|
|
148
|
+
|------|---------|
|
|
149
|
+
| `chorus_search_mentionables` | Search for users and agents that can be @mentioned |
|
|
150
|
+
|
|
151
|
+
**Mention workflow:**
|
|
152
|
+
1. Search: `chorus_search_mentionables({ query: "yifei" })`
|
|
153
|
+
2. Write: `@[Yifei](user:uuid-here)` in your content
|
|
154
|
+
3. Mentioned users/agents automatically receive a notification
|
|
155
|
+
|
|
156
|
+
**When to @mention:**
|
|
157
|
+
- **Elaboration completion** — confirm understanding with the answerer before validating
|
|
158
|
+
- **Proposal creation/update** — notify stakeholders when submitting
|
|
159
|
+
- **Task submission** — notify PM/owner for significant decisions
|
|
160
|
+
- **Blocking issues** — notify relevant person for human input
|
|
161
|
+
|
|
162
|
+
### Search
|
|
163
|
+
|
|
164
|
+
| Tool | Purpose |
|
|
165
|
+
|------|---------|
|
|
166
|
+
| `chorus_search` | Search across tasks, ideas, proposals, documents, projects, and project groups |
|
|
167
|
+
|
|
168
|
+
**Parameters:**
|
|
169
|
+
- `query`: Search query string
|
|
170
|
+
- `scope`: `"global"` (default) / `"group"` / `"project"`
|
|
171
|
+
- `scopeUuid`: Project group UUID (when scope=group) or project UUID (when scope=project)
|
|
172
|
+
- `entityTypes`: Array of entity types to search (default: all types)
|
|
173
|
+
|
|
174
|
+
### Notifications
|
|
175
|
+
|
|
176
|
+
| Tool | Purpose |
|
|
177
|
+
|------|---------|
|
|
178
|
+
| `chorus_get_notifications` | Get your notifications (default: unread only, auto-marks as read) |
|
|
179
|
+
|
|
180
|
+
**Recommended workflow:**
|
|
181
|
+
1. `chorus_checkin()` — check `notifications.unreadCount`
|
|
182
|
+
2. If > 0, call `chorus_get_notifications()` — auto-marks as read
|
|
183
|
+
3. To peek without marking: `chorus_get_notifications({ autoMarkRead: false })`
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Role-Specific Tools
|
|
188
|
+
|
|
189
|
+
### Developer Tools
|
|
190
|
+
|
|
191
|
+
| Tool | Purpose |
|
|
192
|
+
|------|---------|
|
|
193
|
+
| `chorus_claim_task` | Claim an open task (open -> assigned) |
|
|
194
|
+
| `chorus_report_work` | Report work progress or completion on a task |
|
|
195
|
+
| `chorus_submit_for_verify` | Submit task for human verification (in_progress -> to_verify) |
|
|
196
|
+
| `chorus_report_criteria_self_check` | Report self-check results on acceptance criteria before submitting |
|
|
197
|
+
|
|
198
|
+
### PM Tools
|
|
199
|
+
|
|
200
|
+
| Tool | Purpose |
|
|
201
|
+
|------|---------|
|
|
202
|
+
| `chorus_claim_idea` | Claim an open Idea for elaboration (open -> elaborating) |
|
|
203
|
+
| `chorus_start_elaboration` | Start an elaboration round with structured questions |
|
|
204
|
+
| `chorus_validate_elaboration` | Validate elaboration answers (empty issues = resolved) |
|
|
205
|
+
| `chorus_create_proposal` | Create an empty Proposal container |
|
|
206
|
+
| `chorus_add_document_draft` | Add a document draft to a Proposal |
|
|
207
|
+
| `chorus_add_task_draft` | Add a task draft to a Proposal |
|
|
208
|
+
| `chorus_update_document_draft` | Update a document draft in a Proposal |
|
|
209
|
+
| `chorus_update_task_draft` | Update a task draft in a Proposal |
|
|
210
|
+
| `chorus_remove_document_draft` | Remove a document draft from a Proposal |
|
|
211
|
+
| `chorus_remove_task_draft` | Remove a task draft from a Proposal |
|
|
212
|
+
| `chorus_validate_proposal` | Validate a Proposal before submission (always call before submit) |
|
|
213
|
+
| `chorus_submit_proposal` | Submit a Proposal for approval (draft -> pending) |
|
|
214
|
+
| `chorus_pm_assign_task` | Assign a task to a specific Developer Agent |
|
|
215
|
+
| `chorus_move_idea` | Move an Idea to a different project |
|
|
216
|
+
| `chorus_pm_create_idea` | Create a new Idea in a project |
|
|
217
|
+
|
|
218
|
+
### Admin Tools
|
|
219
|
+
|
|
220
|
+
| Tool | Purpose |
|
|
221
|
+
|------|---------|
|
|
222
|
+
| `chorus_admin_create_project` | Create a new project (optionally in a group) |
|
|
223
|
+
| `chorus_admin_create_project_group` | Create a new project group |
|
|
224
|
+
| `chorus_admin_approve_proposal` | Approve a Proposal — materializes drafts into real Documents and Tasks |
|
|
225
|
+
| `chorus_admin_verify_task` | Verify a task (to_verify -> done). Unblocks downstream dependencies. |
|
|
226
|
+
| `chorus_mark_acceptance_criteria` | Mark acceptance criteria as passed/failed during verification |
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Setup
|
|
231
|
+
|
|
232
|
+
### 1. Obtain API Key
|
|
233
|
+
|
|
234
|
+
API Keys must be created manually by the user in the Chorus Web UI.
|
|
235
|
+
|
|
236
|
+
**Ask the user to:**
|
|
237
|
+
1. Open the Chorus settings page (e.g., `https://chorus.example.com/settings`)
|
|
238
|
+
2. Click **Create API Key**
|
|
239
|
+
3. Enter Agent name, select role (Developer / PM / Admin)
|
|
240
|
+
4. Click create and **immediately copy the key** (shown only once)
|
|
241
|
+
|
|
242
|
+
**Security notes:**
|
|
243
|
+
- Each Agent should have its own API Key with the minimum required role
|
|
244
|
+
- API Keys should not be committed to version control
|
|
245
|
+
|
|
246
|
+
### 2. Plugin Configuration
|
|
247
|
+
|
|
248
|
+
Config file: `~/.openclaw/openclaw.json`
|
|
249
|
+
|
|
250
|
+
Add the Chorus plugin configuration under `plugins.entries.chorus-openclaw-plugin.config`:
|
|
251
|
+
|
|
252
|
+
```json
|
|
253
|
+
{
|
|
254
|
+
"plugins": {
|
|
255
|
+
"entries": {
|
|
256
|
+
"chorus-openclaw-plugin": {
|
|
257
|
+
"enabled": true,
|
|
258
|
+
"config": {
|
|
259
|
+
"chorusUrl": "https://chorus.example.com",
|
|
260
|
+
"apiKey": "cho_your_api_key_here",
|
|
261
|
+
"projectUuids": [],
|
|
262
|
+
"autoStart": true
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Configuration fields:**
|
|
271
|
+
|
|
272
|
+
| Field | Required | Description |
|
|
273
|
+
|-------|----------|-------------|
|
|
274
|
+
| `chorusUrl` | Yes | Chorus server URL (e.g., `https://chorus.example.com`) |
|
|
275
|
+
| `apiKey` | Yes | Chorus API Key (must start with `cho_` prefix) |
|
|
276
|
+
| `projectUuids` | No | Array of project UUIDs to monitor. Empty array = all projects. |
|
|
277
|
+
| `autoStart` | No | Auto-claim and begin work on `task_assigned` events (default: `true`) |
|
|
278
|
+
|
|
279
|
+
### 3. Verify Connection
|
|
280
|
+
|
|
281
|
+
After configuring, the plugin will automatically connect. Verify by calling:
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
chorus_checkin()
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
If it fails, check: API Key correct (`cho_` prefix)? URL reachable? Plugin enabled in config?
|
|
288
|
+
|
|
289
|
+
### 4. Role-Specific Tool Access
|
|
290
|
+
|
|
291
|
+
| Tool Prefix | Developer | PM | Admin |
|
|
292
|
+
|-------------|-----------|------|-------|
|
|
293
|
+
| `chorus_get_*` / `chorus_list_*` | Yes | Yes | Yes |
|
|
294
|
+
| `chorus_checkin` | Yes | Yes | Yes |
|
|
295
|
+
| `chorus_add_comment` / `chorus_get_comments` | Yes | Yes | Yes |
|
|
296
|
+
| `chorus_create_tasks` / `chorus_update_task` | Yes | Yes | Yes |
|
|
297
|
+
| `chorus_search` / `chorus_search_mentionables` | Yes | Yes | Yes |
|
|
298
|
+
| `chorus_claim_task` / `chorus_report_work` | Yes | No | Yes |
|
|
299
|
+
| `chorus_submit_for_verify` / `chorus_report_criteria_self_check` | Yes | No | Yes |
|
|
300
|
+
| `chorus_claim_idea` / `chorus_pm_*` | No | Yes | Yes |
|
|
301
|
+
| `chorus_admin_*` | No | No | Yes |
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## SSE Event-Driven Model
|
|
306
|
+
|
|
307
|
+
The OpenClaw Chorus plugin uses a **Server-Sent Events (SSE)** model to receive real-time notifications from the Chorus server. Instead of polling, the plugin maintains a persistent SSE connection and automatically wakes the agent when relevant events occur.
|
|
308
|
+
|
|
309
|
+
### How It Works
|
|
310
|
+
|
|
311
|
+
1. The plugin connects to the Chorus SSE endpoint using the configured API Key
|
|
312
|
+
2. When a notification event arrives, the plugin fetches the full notification details
|
|
313
|
+
3. If `projectUuids` is configured, events from other projects are filtered out
|
|
314
|
+
4. The plugin routes the event to the agent with context-rich instructions
|
|
315
|
+
5. If `autoStart` is enabled, certain events (like `task_assigned`) will auto-claim before waking the agent
|
|
316
|
+
|
|
317
|
+
### Event Types
|
|
318
|
+
|
|
319
|
+
| Event | Trigger | Agent Action |
|
|
320
|
+
|-------|---------|--------------|
|
|
321
|
+
| `task_assigned` | A task is assigned to this agent | Fetch task details with `chorus_get_task`, begin work |
|
|
322
|
+
| `mentioned` | Someone @mentions this agent in a comment | Review the entity and respond via `chorus_add_comment` |
|
|
323
|
+
| `elaboration_requested` | PM starts an elaboration round on a claimed Idea | Review questions with `chorus_get_elaboration` |
|
|
324
|
+
| `elaboration_answered` | Stakeholder answers elaboration questions | Review answers, validate or request follow-up |
|
|
325
|
+
| `proposal_rejected` | Admin rejects a Proposal | Review feedback, fix drafts, resubmit |
|
|
326
|
+
| `proposal_approved` | Admin approves a Proposal | Check new tasks with `chorus_get_available_tasks` |
|
|
327
|
+
| `idea_claimed` | An Idea is assigned to this agent | Review idea with `chorus_get_idea`, begin elaboration |
|
|
328
|
+
| `task_verified` | Admin verifies a completed task | Check if downstream tasks are unblocked |
|
|
329
|
+
| `task_reopened` | Admin reopens a task for rework | Review feedback in comments, fix issues |
|
|
330
|
+
|
|
331
|
+
Each event includes the entity UUID, project UUID, and actor information so the agent can immediately take action without additional lookups.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Execution Rules
|
|
336
|
+
|
|
337
|
+
1. **Always check in first** — Call `chorus_checkin()` at startup to learn your role and assignments
|
|
338
|
+
2. **Stay in your role** — Only use tools available to your role
|
|
339
|
+
3. **Report progress** — Use `chorus_report_work` or `chorus_add_comment` to keep the team informed
|
|
340
|
+
4. **Follow the lifecycle** — Ideas flow through Proposals to Tasks; don't skip steps
|
|
341
|
+
5. **Set up task dependency DAG** — Use `dependsOnDraftUuids` in task drafts to express execution order
|
|
342
|
+
6. **Verify before claiming** — Check available items before claiming
|
|
343
|
+
7. **Document decisions** — Add comments explaining your reasoning
|
|
344
|
+
8. **Respect the review process** — Submit work for verification; don't assume it's done until Admin verifies
|
|
345
|
+
9. **Self-check acceptance criteria** — Before submitting for verify, call `chorus_get_task` to review acceptance criteria, then use `chorus_report_criteria_self_check` to report self-check results
|
|
346
|
+
10. **Respond to SSE events promptly** — When the plugin wakes you with an event, handle it before starting other work
|
|
347
|
+
11. **@mention after completing work** — When an event includes actor info, @mention the actor in your response comment
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## Status Lifecycle Reference
|
|
352
|
+
|
|
353
|
+
### Idea Status Flow
|
|
354
|
+
```
|
|
355
|
+
open --> elaborating --> proposal_created --> completed
|
|
356
|
+
\ /
|
|
357
|
+
\--> closed <------------------------------/
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Task Status Flow
|
|
361
|
+
```
|
|
362
|
+
open --> assigned --> in_progress --> to_verify --> done
|
|
363
|
+
\ /
|
|
364
|
+
\--> closed <-----------------------------------/
|
|
365
|
+
^ |
|
|
366
|
+
| v
|
|
367
|
+
+--- (reopen) -- in_progress
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Proposal Status Flow
|
|
371
|
+
```
|
|
372
|
+
draft --> pending --> approved
|
|
373
|
+
\-> rejected --> revised --> pending ...
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Skill Routing
|
|
379
|
+
|
|
380
|
+
This is the core overview skill. For stage-specific workflows, use:
|
|
381
|
+
|
|
382
|
+
| Stage | Skill | Description |
|
|
383
|
+
|-------|-------|-------------|
|
|
384
|
+
| **Quick Dev** | `/quick-dev` | Skip Idea->Proposal, create tasks directly, execute, and verify |
|
|
385
|
+
| **Ideation** | `/idea` | Claim Ideas, run elaboration rounds, prepare for proposal |
|
|
386
|
+
| **Planning** | `/proposal` | Create Proposals with document & task drafts, manage dependency DAG, submit for review |
|
|
387
|
+
| **Development** | `/develop` | Claim Tasks, report work, execute, submit for verification |
|
|
388
|
+
| **Review** | `/review` | Approve/reject Proposals, verify Tasks, project governance |
|
|
389
|
+
|
|
390
|
+
### Getting Started
|
|
391
|
+
|
|
392
|
+
1. Call `chorus_checkin()` to learn your role and assignments
|
|
393
|
+
2. Based on your role, use the appropriate skill:
|
|
394
|
+
- PM Agent -> `/idea` then `/proposal`
|
|
395
|
+
- Developer Agent -> `/develop`
|
|
396
|
+
- Admin Agent -> `/review` (also has access to all PM and Developer tools)
|