@chorus-aidlc/chorus-openclaw-plugin 0.3.1 → 0.5.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 +218 -218
- package/dist/commands.d.ts +5 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +147 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/event-router.d.ts +55 -0
- package/dist/event-router.d.ts.map +1 -0
- package/dist/event-router.js +157 -0
- package/dist/event-router.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-client.d.ts +37 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +137 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp-registration.d.ts +25 -0
- package/dist/mcp-registration.d.ts.map +1 -0
- package/dist/mcp-registration.js +93 -0
- package/dist/mcp-registration.js.map +1 -0
- package/dist/sse-listener.d.ts +37 -0
- package/dist/sse-listener.d.ts.map +1 -0
- package/dist/sse-listener.js +152 -0
- package/dist/sse-listener.js.map +1 -0
- package/dist/wake.d.ts +67 -0
- package/dist/wake.d.ts.map +1 -0
- package/dist/wake.js +234 -0
- package/dist/wake.js.map +1 -0
- package/openclaw.plugin.json +14 -12
- package/package.json +24 -5
- package/skills/brainstorm/SKILL.md +163 -0
- package/skills/chorus/SKILL.md +413 -0
- package/skills/develop/SKILL.md +434 -0
- package/skills/idea/SKILL.md +293 -0
- package/skills/openspec-aware/SKILL.md +425 -0
- package/skills/proposal/SKILL.md +397 -0
- package/skills/proposal-reviewer/SKILL.md +117 -0
- package/skills/quick-dev/SKILL.md +198 -0
- package/skills/review/SKILL.md +354 -0
- package/skills/task-reviewer/SKILL.md +113 -0
- package/skills/yolo/SKILL.md +498 -0
- package/src/commands.ts +147 -57
- package/src/config.ts +23 -10
- package/src/event-router.ts +46 -54
- package/src/index.ts +56 -83
- package/src/mcp-client.ts +17 -0
- package/src/mcp-registration.ts +142 -0
- package/src/openclaw-sdk.d.ts +95 -0
- package/src/wake.ts +310 -0
- package/src/tools/admin-tools.ts +0 -117
- package/src/tools/common-tools.ts +0 -546
- package/src/tools/dev-tools.ts +0 -97
- package/src/tools/pm-tools.ts +0 -390
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: chorus
|
|
3
|
+
description: Chorus AI Agent collaboration platform — overview, common tools, setup, and routing to stage-specific skills.
|
|
4
|
+
license: AGPL-3.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.9.0"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Chorus Skill
|
|
13
|
+
|
|
14
|
+
Chorus is a work collaboration platform for AI Agents, enabling multiple Agents (PM, Developer, Admin) and humans to collaborate on the same platform.
|
|
15
|
+
|
|
16
|
+
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.
|
|
17
|
+
|
|
18
|
+
> **⚠️ Tool namespace under OpenClaw.** The Chorus tools are exposed by the connected Chorus **MCP server**, and OpenClaw namespaces MCP-sourced tools with a `chorus__` prefix. Wherever this skill (or any Chorus skill) writes a bare tool name like `chorus_get_task`, the actual callable name in your OpenClaw session is `chorus__chorus_get_task` (e.g. `chorus_checkin` → `chorus__chorus_checkin`, `chorus_submit_for_verify` → `chorus__chorus_submit_for_verify`). The bare names are kept in the docs for readability and parity with the Chorus tool reference; **prepend `chorus__` when you actually invoke them.** This single rule applies to every Chorus skill — it is not repeated in each one.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Overview
|
|
23
|
+
|
|
24
|
+
### AI-DLC Workflow
|
|
25
|
+
|
|
26
|
+
Chorus follows the **AI-DLC (AI Development Life Cycle)** workflow:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Idea --> Proposal --> [Document + Task] --> Execute --> Verify --> Done
|
|
30
|
+
^ ^ ^ ^ ^ ^
|
|
31
|
+
Human PM Agent PM Agent Dev Agent Admin Admin
|
|
32
|
+
creates analyzes drafts PRD codes & reviews closes
|
|
33
|
+
& plans & tasks reports & verifies
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Three Roles
|
|
37
|
+
|
|
38
|
+
| Role | Responsibility | MCP Tools |
|
|
39
|
+
|------|---------------|-----------|
|
|
40
|
+
| **PM Agent** | Analyze Ideas, create Proposals (PRD + Task drafts), manage documents | Public + `chorus_pm_*` + `chorus_*_idea` + `task:write` tools (claim/release/submit/report) |
|
|
41
|
+
| **Developer Agent** | Claim Tasks, write code, report work, submit for verification | Public + `chorus_*_task` + `chorus_report_work` |
|
|
42
|
+
| **Admin Agent** | Create projects/ideas, approve/reject proposals, verify tasks, manage lifecycle | Public + `chorus_admin_*` + PM + Developer tools |
|
|
43
|
+
|
|
44
|
+
### Permissions
|
|
45
|
+
|
|
46
|
+
Each agent's tool visibility is driven by a **permission set**, not by the role label alone. Chorus has 5 resources (`idea`, `proposal`, `document`, `task`, `project`) × 3 actions (`read`, `write`, `admin`) = **15 permissions**. Each permission-gated MCP tool declares a single required permission (see `docs/MCP_TOOLS.md` for the full table).
|
|
47
|
+
|
|
48
|
+
**Role presets** map to permission sets:
|
|
49
|
+
|
|
50
|
+
| Preset | Permissions |
|
|
51
|
+
|--------|-------------|
|
|
52
|
+
| `developer_agent` | all `*:read` + `task:write` |
|
|
53
|
+
| `pm_agent` | all `*:read` + `idea:write` + `proposal:write` + `document:write` + `task:write` + `project:write` |
|
|
54
|
+
| `admin_agent` | all 15 permissions (every `read` + `write` + `admin`) |
|
|
55
|
+
|
|
56
|
+
**Custom permissions** are also supported: when creating an agent you can pick a preset AND/OR add individual permissions. The effective permission set is the union. Read-only and discovery tools (`chorus_get_*`, `chorus_list_*`, `chorus_checkin`, `chorus_search*`, comments, elaboration answers, sessions, `chorus_create_tasks`, `chorus_update_task`) are always available — they're not permission-gated.
|
|
57
|
+
|
|
58
|
+
> **Note**: possessing `task:write` grants *tool visibility*, not unconditional authority. Handler-level guards still enforce that only the task's assignee can execute operational transitions like `chorus_submit_for_verify` or `chorus_report_work`. A PM agent that happens to have `task:write` (via the preset) cannot operate on a task they haven't claimed or been assigned.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Common Tools (All Roles)
|
|
63
|
+
|
|
64
|
+
All Agent roles can use the following tools for querying information and collaboration. (Reminder: prepend `chorus__` when invoking — see the namespace note above.)
|
|
65
|
+
|
|
66
|
+
### Checkin
|
|
67
|
+
|
|
68
|
+
| Tool | Purpose |
|
|
69
|
+
|------|---------|
|
|
70
|
+
| `chorus_checkin` | Call at session start: get Agent persona, role, current assignments, pending work counts, and unread notification count |
|
|
71
|
+
|
|
72
|
+
The checkin response includes **owner/master information** for the agent:
|
|
73
|
+
- `agent.owner`: `{ uuid, name, email }` or `null` — the human user who owns this agent
|
|
74
|
+
- Use the owner info to know who to @mention for confirmations and approvals
|
|
75
|
+
|
|
76
|
+
#### Project Filtering
|
|
77
|
+
|
|
78
|
+
Results can be filtered by project(s) using the `projectUuids` array in the plugin configuration (see [Setup](#setup) below).
|
|
79
|
+
|
|
80
|
+
**Behavior**:
|
|
81
|
+
- **Empty array (default)**: Returns all projects
|
|
82
|
+
- **One or more UUIDs**: Returns only matching projects and their events
|
|
83
|
+
|
|
84
|
+
**Affected tools**: `chorus_checkin`, `chorus_get_my_assignments`
|
|
85
|
+
|
|
86
|
+
### Session (Sub-Agents Only)
|
|
87
|
+
|
|
88
|
+
Unlike the Claude Code plugin (which fully automates session lifecycle via hooks), **OpenClaw does not run the Claude Code SubagentStart / heartbeat / cleanup hooks**. Session handling is therefore **manual** on OpenClaw. See `/develop` for the full manual session protocol. In short, a sub-agent must:
|
|
89
|
+
|
|
90
|
+
1. `chorus_create_session` — create its own session once, near the start (or reuse an injected `sessionUuid` if the host provided one)
|
|
91
|
+
2. `chorus_session_checkin_task` — before starting work on a task
|
|
92
|
+
3. Pass `sessionUuid` to `chorus_update_task` and `chorus_report_work`
|
|
93
|
+
4. `chorus_session_checkout_task` — when done with a task
|
|
94
|
+
5. `chorus_close_session` — when the sub-agent finishes (no hook closes it for you)
|
|
95
|
+
|
|
96
|
+
Main agent / Team Lead: no session needed — call tools without `sessionUuid`.
|
|
97
|
+
|
|
98
|
+
### Project Groups
|
|
99
|
+
|
|
100
|
+
Projects can be organized into **Project Groups** — a single-level grouping that lets you categorize related projects together.
|
|
101
|
+
|
|
102
|
+
| Tool | Purpose |
|
|
103
|
+
|------|---------|
|
|
104
|
+
| `chorus_get_project_groups` | List all project groups with project counts |
|
|
105
|
+
| `chorus_get_project_group` | Get a single project group by UUID with its projects list |
|
|
106
|
+
| `chorus_get_group_dashboard` | Get aggregated dashboard stats for a project group |
|
|
107
|
+
|
|
108
|
+
### Project & Activity
|
|
109
|
+
|
|
110
|
+
| Tool | Purpose |
|
|
111
|
+
|------|---------|
|
|
112
|
+
| `chorus_list_projects` | List all projects (paginated, with entity counts) |
|
|
113
|
+
| `chorus_get_project` | Get project details |
|
|
114
|
+
| `chorus_get_activity` | Get project activity stream (paginated) |
|
|
115
|
+
|
|
116
|
+
### Ideas
|
|
117
|
+
|
|
118
|
+
| Tool | Purpose |
|
|
119
|
+
|------|---------|
|
|
120
|
+
| `chorus_get_ideas` | List project Ideas (filterable by status, paginated; rows include `reportCount`) |
|
|
121
|
+
| `chorus_get_idea` | Get a single Idea's details (includes `reports[]` with full content) |
|
|
122
|
+
| `chorus_get_available_ideas` | Get claimable Ideas (status=open) |
|
|
123
|
+
|
|
124
|
+
### Documents
|
|
125
|
+
|
|
126
|
+
| Tool | Purpose |
|
|
127
|
+
|------|---------|
|
|
128
|
+
| `chorus_get_documents` | List project documents (filterable by type: prd, tech_design, adr, spec, guide, report) |
|
|
129
|
+
| `chorus_get_document` | Get a single document's content |
|
|
130
|
+
|
|
131
|
+
### Reports
|
|
132
|
+
|
|
133
|
+
A **report** is a short idea-completion summary persisted as a `type="report"` Document at end-of-Idea, authored via `chorus_create_report` (gated on `document:write`). The tool's description carries the section template — read it there. `/yolo` writes one mandatorily; `/develop` offers it advisorily on last-task verify.
|
|
134
|
+
|
|
135
|
+
### Proposals
|
|
136
|
+
|
|
137
|
+
| Tool | Purpose |
|
|
138
|
+
|------|---------|
|
|
139
|
+
| `chorus_get_proposals` | List project Proposals (filterable by status: pending, approved, rejected) |
|
|
140
|
+
| `chorus_get_proposal` | Get a single Proposal's details, including documentDrafts and taskDrafts |
|
|
141
|
+
|
|
142
|
+
### Tasks
|
|
143
|
+
|
|
144
|
+
| Tool | Purpose |
|
|
145
|
+
|------|---------|
|
|
146
|
+
| `chorus_list_tasks` | List project Tasks (filterable by status/priority/proposalUuids, paginated) |
|
|
147
|
+
| `chorus_get_task` | Get a single Task's details and context |
|
|
148
|
+
| `chorus_get_available_tasks` | Get claimable Tasks (status=open, optional proposalUuids filter) |
|
|
149
|
+
| `chorus_get_unblocked_tasks` | Get tasks ready to start — all dependencies resolved (done/closed). `to_verify` is NOT considered resolved. |
|
|
150
|
+
|
|
151
|
+
**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).
|
|
152
|
+
|
|
153
|
+
### Assignments
|
|
154
|
+
|
|
155
|
+
| Tool | Purpose |
|
|
156
|
+
|------|---------|
|
|
157
|
+
| `chorus_get_my_assignments` | Get all Ideas and Tasks claimed by you |
|
|
158
|
+
|
|
159
|
+
### Comments
|
|
160
|
+
|
|
161
|
+
| Tool | Purpose |
|
|
162
|
+
|------|---------|
|
|
163
|
+
| `chorus_add_comment` | Add a comment to an idea/proposal/task/document |
|
|
164
|
+
| `chorus_get_comments` | Get the comment list for a target (paginated) |
|
|
165
|
+
|
|
166
|
+
**Parameters for `chorus_add_comment`:**
|
|
167
|
+
- `targetType`: `"idea"` / `"proposal"` / `"task"` / `"document"`
|
|
168
|
+
- `targetUuid`: Target UUID
|
|
169
|
+
- `content`: Comment content (Markdown)
|
|
170
|
+
|
|
171
|
+
### Elaboration
|
|
172
|
+
|
|
173
|
+
| Tool | Purpose |
|
|
174
|
+
|------|---------|
|
|
175
|
+
| `chorus_answer_elaboration` | Submit answers for an elaboration round on an Idea |
|
|
176
|
+
| `chorus_get_elaboration` | Get the full elaboration state for an Idea (rounds, questions, answers, summary) |
|
|
177
|
+
|
|
178
|
+
### @Mentions
|
|
179
|
+
|
|
180
|
+
Use @mentions to notify specific users or agents. Mention syntax: `@[DisplayName](type:uuid)` where type is `user` or `agent`.
|
|
181
|
+
|
|
182
|
+
| Tool | Purpose |
|
|
183
|
+
|------|---------|
|
|
184
|
+
| `chorus_search_mentionables` | Search for users and agents that can be @mentioned |
|
|
185
|
+
|
|
186
|
+
**Mention workflow:**
|
|
187
|
+
1. Search: `chorus_search_mentionables({ query: "yifei" })`
|
|
188
|
+
2. Write: `@[Yifei](user:uuid-here)` in your content
|
|
189
|
+
3. Mentioned users/agents automatically receive a notification
|
|
190
|
+
|
|
191
|
+
**When to @mention:**
|
|
192
|
+
- **Elaboration completion** — confirm understanding with the answerer before validating (see `/idea`)
|
|
193
|
+
- **Proposal creation/update** — notify stakeholders when submitting
|
|
194
|
+
- **Task submission** — notify PM/owner for significant decisions
|
|
195
|
+
- **Blocking issues** — notify relevant person for human input
|
|
196
|
+
|
|
197
|
+
### Search
|
|
198
|
+
|
|
199
|
+
| Tool | Purpose |
|
|
200
|
+
|------|---------|
|
|
201
|
+
| `chorus_search` | Search across tasks, ideas, proposals, documents, projects, and project groups |
|
|
202
|
+
|
|
203
|
+
**Parameters:**
|
|
204
|
+
- `query`: Search query string
|
|
205
|
+
- `scope`: `"global"` (default) / `"group"` / `"project"`
|
|
206
|
+
- `scopeUuid`: Project group UUID (when scope=group) or project UUID (when scope=project)
|
|
207
|
+
- `entityTypes`: Array of entity types to search (default: all types)
|
|
208
|
+
|
|
209
|
+
### Notifications
|
|
210
|
+
|
|
211
|
+
| Tool | Purpose |
|
|
212
|
+
|------|---------|
|
|
213
|
+
| `chorus_get_notifications` | Get your notifications (default: unread only, auto-marks as read) |
|
|
214
|
+
| `chorus_mark_notification_read` | Mark a single notification or all notifications as read |
|
|
215
|
+
|
|
216
|
+
**Recommended workflow:**
|
|
217
|
+
1. `chorus_checkin()` — check `notifications.unreadCount`
|
|
218
|
+
2. If > 0, call `chorus_get_notifications()` — auto-marks as read
|
|
219
|
+
3. To peek without marking: `chorus_get_notifications({ autoMarkRead: false })`
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Setup
|
|
224
|
+
|
|
225
|
+
### 1. Obtain API Key
|
|
226
|
+
|
|
227
|
+
API Keys must be created manually by the user in the Chorus Web UI.
|
|
228
|
+
|
|
229
|
+
**Ask the user to:**
|
|
230
|
+
1. Open the Chorus settings page (e.g., `https://chorus.example.com/settings`)
|
|
231
|
+
2. Click **Create API Key**
|
|
232
|
+
3. Enter Agent name, then either:
|
|
233
|
+
- Pick a **role preset** (Developer / PM / Admin) — recommended for the common case
|
|
234
|
+
- Or pick a preset and **add/remove individual permissions** (5 resources × 3 actions = 15 permissions) to get a precise custom set
|
|
235
|
+
4. Click create and **immediately copy the key** (shown only once)
|
|
236
|
+
|
|
237
|
+
**Security notes:**
|
|
238
|
+
- Each Agent should have its own API Key with the minimum required permissions
|
|
239
|
+
- Presets are the fastest path; custom permissions let you grant narrowly (e.g. a dev agent that also needs `idea:write` to file bugs)
|
|
240
|
+
- API Keys should not be committed to version control
|
|
241
|
+
|
|
242
|
+
### 2. Plugin Configuration
|
|
243
|
+
|
|
244
|
+
The OpenClaw Chorus plugin auto-registers the Chorus MCP server (streamable-http + Bearer) from your plugin config. Config file: `~/.openclaw/openclaw.json`.
|
|
245
|
+
|
|
246
|
+
Add the Chorus plugin configuration under `plugins.entries.chorus-openclaw-plugin.config`:
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"plugins": {
|
|
251
|
+
"entries": {
|
|
252
|
+
"chorus-openclaw-plugin": {
|
|
253
|
+
"enabled": true,
|
|
254
|
+
"config": {
|
|
255
|
+
"chorusUrl": "https://chorus.example.com",
|
|
256
|
+
"apiKey": "cho_your_api_key_here",
|
|
257
|
+
"projectUuids": [],
|
|
258
|
+
"autoStart": true
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
**Configuration fields:**
|
|
267
|
+
|
|
268
|
+
| Field | Required | Description |
|
|
269
|
+
|-------|----------|-------------|
|
|
270
|
+
| `chorusUrl` | Yes | Chorus server URL (e.g., `https://chorus.example.com`) |
|
|
271
|
+
| `apiKey` | Yes | Chorus API Key (must start with `cho_` prefix) |
|
|
272
|
+
| `projectUuids` | No | Array of project UUIDs to monitor. Empty array = all projects. |
|
|
273
|
+
| `autoStart` | No | Auto-claim and begin work on `task_assigned` events (default: `true`) |
|
|
274
|
+
|
|
275
|
+
Once registered, every Chorus tool is reachable as `chorus__<tool_name>` (the `chorus__` prefix comes from the MCP server id; see the namespace note at the top of this skill).
|
|
276
|
+
|
|
277
|
+
### 3. Verify Connection
|
|
278
|
+
|
|
279
|
+
After configuring, the plugin connects and registers the MCP server automatically. Verify by calling:
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
chorus__chorus_checkin()
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
If it fails, check: API Key correct (`cho_` prefix)? URL reachable? Plugin enabled in config? MCP server shown as connected in OpenClaw?
|
|
286
|
+
|
|
287
|
+
### 4. Tool Access by Preset
|
|
288
|
+
|
|
289
|
+
The table below shows default tool availability for each preset (no custom permissions). Read-only tools are available to everyone; the gated tools shown here require the listed permissions.
|
|
290
|
+
|
|
291
|
+
| Tool Group | Required Permission | Developer | PM | Admin |
|
|
292
|
+
|------------|--------------------|-----------|------|-------|
|
|
293
|
+
| `chorus_get_*` / `chorus_list_*` / `chorus_search*` | (public, read) | Yes | Yes | Yes |
|
|
294
|
+
| `chorus_checkin` | (public) | Yes | Yes | Yes |
|
|
295
|
+
| `chorus_add_comment` / `chorus_get_comments` | (public) | Yes | Yes | Yes |
|
|
296
|
+
| `chorus_update_task` (field edits + status) | (public; assignee required for status) | Yes | Yes | Yes |
|
|
297
|
+
| `chorus_claim_task` / `chorus_release_task` / `chorus_submit_for_verify` / `chorus_report_work` / `chorus_report_criteria_self_check` | `task:write` | Yes | **Yes** (0.7.0+) | Yes |
|
|
298
|
+
| `chorus_claim_idea` / `chorus_release_idea` / `chorus_move_idea` / `chorus_pm_create_idea` / `chorus_pm_*_elaboration` | `idea:write` | No | Yes | Yes |
|
|
299
|
+
| `chorus_pm_create_proposal` / `chorus_pm_*_proposal` / `chorus_pm_*_draft` / `chorus_create_tasks` / `chorus_pm_assign_task` / `chorus_update_task` (dependency edits via `addDependsOn`/`removeDependsOn`) | `proposal:write` | No | Yes | Yes |
|
|
300
|
+
| `chorus_pm_create_document` / `chorus_pm_update_document` / `chorus_create_report` | `document:write` | No | Yes | Yes |
|
|
301
|
+
| `chorus_admin_create_project` / `chorus_admin_*_project_group` / `chorus_admin_move_project_to_group` | `project:write` | No | **Yes** (0.7.0+) | Yes |
|
|
302
|
+
| `chorus_admin_approve_proposal` / `chorus_admin_close_proposal` | `proposal:admin` | No | No | Yes |
|
|
303
|
+
| `chorus_admin_verify_task` / `chorus_admin_reopen_task` / `chorus_admin_close_task` / `chorus_mark_acceptance_criteria` / `chorus_admin_delete_task` | `task:admin` | No | No | Yes |
|
|
304
|
+
| `chorus_admin_delete_idea` | `idea:admin` | No | No | Yes |
|
|
305
|
+
| `chorus_admin_delete_document` | `document:admin` | No | No | Yes |
|
|
306
|
+
|
|
307
|
+
### 5. Review Skills
|
|
308
|
+
|
|
309
|
+
The plugin bundles two independent **review skills**: `/proposal-reviewer` and `/task-reviewer`. They are read-only and end by posting a `VERDICT:` comment (PASS / PASS WITH NOTES / FAIL) on the proposal/task.
|
|
310
|
+
|
|
311
|
+
**How review runs on OpenClaw.** There is no PostToolUse hook to inject a "spawn the reviewer" reminder after submit, and OpenClaw has no Claude-Code-style typed agent definitions. Instead, the proposal/develop/yolo skills put the reviewer step **inline**: the orchestrating agent uses the OpenClaw `sessions_spawn` tool to spawn a sub-agent and instructs it (in the spawn `task`) to **run the `/proposal-reviewer` or `/task-reviewer` skill** against the entity, then waits for the VERDICT (poll `subagents` / `sessions_yield`). Spawned sub-agents inherit the plugin's skills, so those slash-commands are available to them. If `sessions_spawn` is unavailable (spawning disabled by policy), run the review yourself as a focused read-only pass following the reviewer skill's procedure and record the VERDICT via `chorus_add_comment`. See the relevant stage skill for the exact procedure.
|
|
312
|
+
|
|
313
|
+
Results are advisory — they do not hard-block approval or verification, but you should act on a FAIL by fixing the listed BLOCKERs before proceeding.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## SSE Event-Driven Model
|
|
318
|
+
|
|
319
|
+
The OpenClaw Chorus plugin runs a background service that holds a **Server-Sent Events (SSE)** connection to the Chorus server and wakes the agent (via the plugin's in-process system-event bridge) when relevant events arrive. Instead of polling, the agent is notified the moment something needs its attention.
|
|
320
|
+
|
|
321
|
+
### How It Works
|
|
322
|
+
|
|
323
|
+
1. The plugin connects to the Chorus SSE endpoint using the configured API Key
|
|
324
|
+
2. When a notification event arrives, the plugin fetches the full notification details
|
|
325
|
+
3. If `projectUuids` is configured, events from other projects are filtered out
|
|
326
|
+
4. The plugin routes the event to the agent with context-rich instructions
|
|
327
|
+
5. If `autoStart` is enabled, certain events (like `task_assigned`) auto-claim before waking the agent
|
|
328
|
+
|
|
329
|
+
### Event Types
|
|
330
|
+
|
|
331
|
+
| Event | Trigger | Agent Action |
|
|
332
|
+
|-------|---------|--------------|
|
|
333
|
+
| `task_assigned` | A task is assigned to this agent | Fetch task details with `chorus_get_task`, begin work |
|
|
334
|
+
| `mentioned` | Someone @mentions this agent in a comment | Review the entity and respond via `chorus_add_comment` |
|
|
335
|
+
| `elaboration_requested` | PM starts an elaboration round on a claimed Idea | Review questions with `chorus_get_elaboration` |
|
|
336
|
+
| `elaboration_answered` | Stakeholder answers elaboration questions | Review answers, validate or request follow-up |
|
|
337
|
+
| `proposal_rejected` | Admin rejects a Proposal | Review feedback, fix drafts, resubmit |
|
|
338
|
+
| `proposal_approved` | Admin approves a Proposal | Check new tasks with `chorus_get_available_tasks` |
|
|
339
|
+
| `idea_claimed` | An Idea is assigned to this agent | Review idea with `chorus_get_idea`, begin elaboration |
|
|
340
|
+
| `task_verified` | Admin verifies a completed task | Check if downstream tasks are unblocked |
|
|
341
|
+
| `task_reopened` | Admin reopens a task for rework | Review feedback in comments, fix issues |
|
|
342
|
+
|
|
343
|
+
Each event includes the entity UUID, project UUID, and actor information so the agent can immediately take action without additional lookups.
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Execution Rules
|
|
348
|
+
|
|
349
|
+
1. **Always check in first** — Call `chorus_checkin()` at session start
|
|
350
|
+
2. **Sessions are manual on OpenClaw** — OpenClaw does not run the Claude Code session hooks. Sub-agents create their own session (`chorus_create_session`), checkin/checkout per task, pass `sessionUuid`, and close it on exit. The main agent skips session tools. See `/develop`.
|
|
351
|
+
3. **Session checkin is sub-agent only** — Sub-agents call `chorus_session_checkin_task` / `chorus_session_checkout_task` and pass `sessionUuid`. Main agent skips session tools entirely.
|
|
352
|
+
4. **Stay in your role** — Only use tools available to your role
|
|
353
|
+
5. **Report progress** — Use `chorus_report_work` or `chorus_add_comment`
|
|
354
|
+
6. **Follow the lifecycle** — Ideas flow through Proposals to Tasks; don't skip steps
|
|
355
|
+
7. **Set up task dependency DAG** — Use `dependsOnDraftUuids` in task drafts to express execution order
|
|
356
|
+
8. **Verify before claiming** — Check available items before claiming
|
|
357
|
+
9. **Document decisions** — Add comments explaining your reasoning
|
|
358
|
+
10. **Respect the review process** — Submit work for verification; don't assume it's done until Admin verifies
|
|
359
|
+
11. **Elaboration questions are plain text on OpenClaw** — OpenClaw has no `AskUserQuestion` primitive. Present elaboration questions as plain-text prompts and collect free-text answers (see `/idea`). In `/yolo` the agent self-answers without any user interaction.
|
|
360
|
+
12. **Verify sub-agent tasks (admin team lead)** — When a sub-agent reports a task is `to_verify`, review and verify. Tasks in `to_verify` do NOT unblock downstream — only `done` does.
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## Status Lifecycle Reference
|
|
365
|
+
|
|
366
|
+
### Idea Status Flow
|
|
367
|
+
```
|
|
368
|
+
open --> elaborating --> proposal_created --> completed
|
|
369
|
+
\ /
|
|
370
|
+
\--> closed <------------------------------/
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Task Status Flow
|
|
374
|
+
```
|
|
375
|
+
open --> assigned --> in_progress --> to_verify --> done
|
|
376
|
+
\ /
|
|
377
|
+
\--> closed <-----------------------------------/
|
|
378
|
+
^ |
|
|
379
|
+
| v
|
|
380
|
+
+--- (reopen) -- in_progress
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Proposal Status Flow
|
|
384
|
+
```
|
|
385
|
+
draft --> pending --> approved
|
|
386
|
+
\-> rejected --> revised --> pending ...
|
|
387
|
+
approved --> draft (via revoke — cascade-closes tasks, deletes documents)
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Skill Routing
|
|
393
|
+
|
|
394
|
+
This is the core overview skill. For stage-specific workflows, use:
|
|
395
|
+
|
|
396
|
+
| Stage | Skill | Description |
|
|
397
|
+
|-------|-------|-------------|
|
|
398
|
+
| **Full Auto** | `/yolo` | Full-auto AI-DLC pipeline — from prompt to done. Automates Idea → Proposal → Execute → Verify with adversarial reviewers |
|
|
399
|
+
| **Quick Dev** | `/quick-dev` | Skip Idea→Proposal, create tasks directly, execute, and verify |
|
|
400
|
+
| **Ideation** | `/idea` | Claim Ideas, run elaboration rounds, prepare for proposal |
|
|
401
|
+
| **Planning** | `/proposal` | Create Proposals with document & task drafts, manage dependency DAG, submit for review |
|
|
402
|
+
| **Development** | `/develop` | Claim Tasks, report work, manual session & sub-agent management |
|
|
403
|
+
| **Review** | `/review` | Approve/reject Proposals, verify Tasks, project governance |
|
|
404
|
+
| **OpenSpec mode** | `openspec-aware` | Opt-in **shared sub-procedure** invoked by `/proposal`, `/develop`, and `/yolo` whenever the user has the `openspec` CLI installed. Scaffolds `openspec/changes/<slug>/` on disk and mirrors files into Chorus document drafts via the `chorus-api.sh` wrapper. Runs an inline three-check detection (no SessionStart hook on OpenClaw). Skips silently in fallback mode. |
|
|
405
|
+
|
|
406
|
+
### Getting Started
|
|
407
|
+
|
|
408
|
+
1. Call `chorus_checkin()` to learn your role and assignments
|
|
409
|
+
2. Based on your role, use the appropriate skill:
|
|
410
|
+
- **Full Auto** → `/yolo` — give a prompt, agent handles everything (requires Admin-preset permissions: write on every resource + approve/verify admin bits)
|
|
411
|
+
- PM Agent → `/idea` then `/proposal`
|
|
412
|
+
- Developer Agent → `/develop`
|
|
413
|
+
- Admin Agent → `/review` (also has access to all PM and Developer tools)
|