@chorus-aidlc/chorus-openclaw-plugin 0.4.0 → 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 +208 -278
- 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 +13 -12
- package/package.json +23 -5
- package/skills/brainstorm/SKILL.md +163 -0
- package/skills/chorus/SKILL.md +113 -96
- package/skills/develop/SKILL.md +195 -51
- package/skills/idea/SKILL.md +136 -149
- package/skills/openspec-aware/SKILL.md +425 -0
- package/skills/proposal/SKILL.md +155 -157
- package/skills/proposal-reviewer/SKILL.md +117 -0
- package/skills/quick-dev/SKILL.md +31 -7
- package/skills/review/SKILL.md +105 -33
- package/skills/task-reviewer/SKILL.md +113 -0
- package/skills/yolo/SKILL.md +498 -0
- package/src/commands.ts +138 -71
- 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 -126
- package/src/tools/common-tools.ts +0 -575
- package/src/tools/dev-tools.ts +0 -105
- package/src/tools/pm-tools.ts +0 -411
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: quick-dev
|
|
3
3
|
description: Quick Task workflow — skip Idea→Proposal, create tasks directly, execute, and verify.
|
|
4
|
+
license: AGPL-3.0
|
|
4
5
|
metadata:
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.9.0"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
7
10
|
---
|
|
8
11
|
|
|
9
12
|
# Quick Dev Skill
|
|
10
13
|
|
|
11
14
|
Skip the full AI-DLC pipeline (Idea → Elaboration → Proposal → Approval) and create tasks directly. Ideal for small, well-understood work. The goal is for agents to **autonomously record their development work and verify task completion** through structured acceptance criteria.
|
|
12
15
|
|
|
16
|
+
> **Tool namespace:** Chorus tools are exposed by the connected MCP server under a `chorus__` prefix on OpenClaw (e.g. `chorus__chorus_create_tasks`). Bare names are used below for readability — prepend `chorus__` when invoking. See `/chorus` for the full rule.
|
|
17
|
+
|
|
13
18
|
---
|
|
14
19
|
|
|
15
20
|
## Overview
|
|
@@ -39,9 +44,9 @@ For complex work, use `/idea` + `/proposal` instead.
|
|
|
39
44
|
|
|
40
45
|
## Pre-Flight: Admin Self-Verify Check
|
|
41
46
|
|
|
42
|
-
**Before creating tasks**, if
|
|
47
|
+
**Before creating tasks**, if `chorus_checkin().agent.permissions.task` includes `"admin"`, ask the user (as a **plain-text prompt** — OpenClaw has no `AskUserQuestion`):
|
|
43
48
|
|
|
44
|
-
> "I have admin privileges. After development, should I verify the task myself, or leave it for another admin to verify?"
|
|
49
|
+
> "I have admin privileges. After development, should I verify the task myself, or leave it for another admin to verify? Reply 'self' or 'other'."
|
|
45
50
|
|
|
46
51
|
This matters because admin agents can call `chorus_admin_verify_task` to close the loop autonomously. If the user approves self-verification, you can complete the entire create → develop → verify cycle without human intervention. Record the decision and apply it in Step 7.
|
|
47
52
|
|
|
@@ -115,12 +120,18 @@ chorus_update_task({
|
|
|
115
120
|
chorus_update_task({ taskUuid: "<task-uuid>", status: "in_progress" })
|
|
116
121
|
```
|
|
117
122
|
|
|
123
|
+
**Sub-agents:** create your own session first (manual on OpenClaw — see `/develop`), then pass `sessionUuid` for attribution:
|
|
124
|
+
```
|
|
125
|
+
chorus_update_task({ taskUuid: "<task-uuid>", status: "in_progress", sessionUuid: "<session-uuid>" })
|
|
126
|
+
```
|
|
127
|
+
|
|
118
128
|
### Step 5: Report Progress
|
|
119
129
|
|
|
120
130
|
```
|
|
121
131
|
chorus_report_work({
|
|
122
132
|
taskUuid: "<task-uuid>",
|
|
123
|
-
report: "Fixed Safari cookie issue:\n- Root cause: SameSite=Strict incompatible with redirect\n- Changed to SameSite=Lax\n- Commit: abc1234"
|
|
133
|
+
report: "Fixed Safari cookie issue:\n- Root cause: SameSite=Strict incompatible with redirect\n- Changed to SameSite=Lax\n- Commit: abc1234",
|
|
134
|
+
sessionUuid: "<session-uuid>"
|
|
124
135
|
})
|
|
125
136
|
```
|
|
126
137
|
|
|
@@ -145,7 +156,7 @@ chorus_submit_for_verify({
|
|
|
145
156
|
})
|
|
146
157
|
```
|
|
147
158
|
|
|
148
|
-
**Admin self-verification:** If you have
|
|
159
|
+
**Admin self-verification:** If you have `task: ["admin"]` in `permissions` and the user approved self-verification in the Pre-Flight check, you can verify the task yourself immediately after submitting:
|
|
149
160
|
|
|
150
161
|
```
|
|
151
162
|
chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
|
|
@@ -153,6 +164,19 @@ chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
|
|
|
153
164
|
|
|
154
165
|
This completes the full autonomous cycle: create → develop → verify → done.
|
|
155
166
|
|
|
167
|
+
> **Optional independent review:** for non-trivial quick tasks you may still run the `/task-reviewer` skill in a spawned sub-agent (`sessions_spawn` with a task telling it to run `/task-reviewer` against the taskUuid, then wait for the VERDICT) or do a focused read-only self-review before verifying — same pattern as `/develop` Step 8.5. There is no PostToolUse hook on OpenClaw, so do this inline if you want it.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Session Integration
|
|
172
|
+
|
|
173
|
+
Quick Tasks support sub-agent execution just like proposal-based tasks. **Session lifecycle is manual on OpenClaw** (no SubagentStart/heartbeat/cleanup hooks):
|
|
174
|
+
|
|
175
|
+
- **Main agent**: create quick tasks, work them yourself, or hand task UUIDs to sub-agents
|
|
176
|
+
- **Sub-agents**: create your own session (`chorus_create_session`), checkin/checkout per task, pass `sessionUuid` to `chorus_update_task` / `chorus_report_work`, and close the session on exit — see `/develop` for the full manual protocol
|
|
177
|
+
|
|
178
|
+
> OpenClaw has no Agent Teams / `TeamCreate` primitive; if you need to run several quick tasks, work them sequentially as the main agent (or dispatch generic sub-agents one at a time).
|
|
179
|
+
|
|
156
180
|
---
|
|
157
181
|
|
|
158
182
|
## Tips
|
|
@@ -162,7 +186,7 @@ This completes the full autonomous cycle: create → develop → verify → done
|
|
|
162
186
|
- Use `chorus_update_task` to refine tasks (including AC) after creation rather than deleting and recreating
|
|
163
187
|
- Pass `proposalUuid` to attach follow-up or gap-filling tasks to an existing proposal — this keeps related work grouped in the same project context and DAG
|
|
164
188
|
- Quick Tasks show up in the same project task list and DAG as proposal-based tasks
|
|
165
|
-
- Admin agents can run the full lifecycle autonomously (create → develop → self-verify) — but always confirm with the user first
|
|
189
|
+
- Admin agents can run the full lifecycle autonomously (create → develop → self-verify) — but always confirm with the user first (plain-text prompt)
|
|
166
190
|
|
|
167
191
|
---
|
|
168
192
|
|
package/skills/review/SKILL.md
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review
|
|
3
|
-
description: Chorus Review workflow — approve/reject proposals, verify tasks, and manage governance.
|
|
3
|
+
description: Chorus Review workflow — approve/reject proposals, verify tasks, and manage project governance.
|
|
4
|
+
license: AGPL-3.0
|
|
4
5
|
metadata:
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.9.0"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
7
10
|
---
|
|
8
11
|
|
|
9
12
|
# Review Skill
|
|
10
13
|
|
|
11
14
|
This skill covers the **Review** stage of the AI-DLC workflow: approving or rejecting Proposals, verifying completed Tasks, and managing overall project governance as an Admin Agent.
|
|
12
15
|
|
|
16
|
+
> **Tool namespace:** Chorus tools are exposed by the connected MCP server under a `chorus__` prefix on OpenClaw (e.g. `chorus__chorus_admin_verify_task`). Bare names are used below for readability — prepend `chorus__` when invoking. See `/chorus` for the full rule.
|
|
17
|
+
|
|
13
18
|
---
|
|
14
19
|
|
|
15
20
|
## Overview
|
|
@@ -19,7 +24,7 @@ Admin Agent has **full access to all Chorus operations**. You are the **human pr
|
|
|
19
24
|
Key responsibilities:
|
|
20
25
|
- **Proposal review** — approve or reject Proposals submitted by PM Agents (see `/proposal`)
|
|
21
26
|
- **Task verification** — verify or reopen Tasks submitted by Developer Agents (see `/develop`)
|
|
22
|
-
- **Project governance** — create projects, manage groups,
|
|
27
|
+
- **Project governance** — create projects/ideas, manage groups, close/delete entities
|
|
23
28
|
|
|
24
29
|
---
|
|
25
30
|
|
|
@@ -30,28 +35,45 @@ Key responsibilities:
|
|
|
30
35
|
| Tool | Purpose |
|
|
31
36
|
|------|---------|
|
|
32
37
|
| `chorus_admin_create_project` | Create a new project (optional `groupUuid` for group assignment) |
|
|
33
|
-
| `chorus_admin_create_project_group` | Create a new project group for organizing projects |
|
|
34
38
|
| `chorus_admin_approve_proposal` | Approve proposal (materializes documents + tasks) |
|
|
35
39
|
| `chorus_admin_verify_task` | Verify completed task (to_verify -> done). Blocked if required AC not all passed. |
|
|
36
40
|
| `chorus_mark_acceptance_criteria` | Mark acceptance criteria as passed/failed during verification (batch) |
|
|
41
|
+
| `chorus_admin_reopen_task` | Reopen task for rework (to_verify -> in_progress) |
|
|
42
|
+
| `chorus_admin_close_task` | Close task (any state -> closed) |
|
|
43
|
+
| `chorus_admin_close_idea` | Close idea (any state -> closed) |
|
|
44
|
+
| `chorus_admin_delete_idea` | Delete an idea permanently |
|
|
45
|
+
| `chorus_admin_delete_task` | Delete a task permanently |
|
|
46
|
+
| `chorus_admin_delete_document` | Delete a document permanently |
|
|
47
|
+
| `chorus_admin_create_project_group` | Create a new project group |
|
|
48
|
+
| `chorus_admin_update_project_group` | Update a project group (name, description) |
|
|
49
|
+
| `chorus_admin_delete_project_group` | Delete a project group (projects become ungrouped) |
|
|
50
|
+
| `chorus_admin_move_project_to_group` | Move a project to a group or ungroup it |
|
|
51
|
+
|
|
52
|
+
**PM + Admin (proposal reject/revoke):**
|
|
37
53
|
|
|
38
|
-
|
|
54
|
+
| Tool | Purpose |
|
|
55
|
+
|------|---------|
|
|
56
|
+
| `chorus_pm_reject_proposal` | Reject a pending proposal (pending -> draft). PM: own proposals only. Admin: any proposal. |
|
|
57
|
+
| `chorus_pm_revoke_proposal` | Revoke an approved proposal (approved -> draft). Cascade-closes tasks, deletes documents. PM: own only. Admin: any. |
|
|
58
|
+
|
|
59
|
+
**All PM tools** (`chorus_pm_*`, `chorus_*_idea`) and **all Developer tools** (`chorus_*_task`, `chorus_report_work`) are also available to Admin.
|
|
39
60
|
|
|
40
61
|
**Shared tools** (checkin, query, comment, search, notifications): see `/chorus`
|
|
41
62
|
|
|
42
63
|
---
|
|
43
64
|
|
|
44
|
-
##
|
|
45
|
-
|
|
46
|
-
The OpenClaw plugin listens for SSE events relevant to admin review:
|
|
65
|
+
## Review Strategy
|
|
47
66
|
|
|
48
|
-
|
|
49
|
-
|-----------|---------|--------------|
|
|
50
|
-
| `task_assigned` | A task is assigned to you | Wake and review/start work |
|
|
51
|
-
| `mentioned` | You are @mentioned in a comment | Wake and respond |
|
|
52
|
-
| `proposal_approved` / `proposal_rejected` | Proposal status changed | Informational — check new tasks or feedback |
|
|
67
|
+
When reviewing proposals or tasks, get an independent VERDICT before approving/verifying. On OpenClaw there is **no PostToolUse hook** to remind you — invoke the review yourself, inline.
|
|
53
68
|
|
|
54
|
-
|
|
69
|
+
1. **Preferred — spawn a reviewer sub-agent.** Use the OpenClaw `sessions_spawn` tool to spawn a sub-agent whose `task` tells it to **invoke the `/proposal-reviewer` skill** (for proposals) or the `/task-reviewer` skill (for tasks) — both bundled with this plugin — against the entity. Wait for it (poll the `subagents` tool or use `sessions_yield` — do NOT detach; you must have the VERDICT before proceeding). The sub-agent inherits the plugin skills, so the reviewer skill is available to it; it posts a VERDICT comment with detailed findings. Example task prompt: `Run the /proposal-reviewer skill to review proposalUuid <uuid>; post your VERDICT comment when done.`
|
|
70
|
+
2. **Read the VERDICT.** After the reviewer completes, call `chorus_get_comments` and find the most recent comment containing `VERDICT:`. There are exactly three possible outcomes:
|
|
71
|
+
- **VERDICT: PASS** — No issues found. Approve (proposals) or mark AC passed and verify (tasks).
|
|
72
|
+
- **VERDICT: PASS WITH NOTES** — Minor non-blocking notes. Still approve/verify. Notes are informational.
|
|
73
|
+
- **VERDICT: FAIL** — BLOCKERs found. Reject (proposals) or reopen (tasks). Fix the specific BLOCKERs listed in the comment before resubmitting.
|
|
74
|
+
3. **No new VERDICT comment?** The sub-agent exhausted its turn budget before posting. Respawn it ONCE with an explicit prompt like: *"Stay within your turn budget. Skip deep source verification — batch all MCP fetches up front, skim for obvious BLOCKERs only, and reserve your last few turns to post the VERDICT comment."* If the second attempt also fails to post, review manually (step 5).
|
|
75
|
+
4. **Track rounds.** Count existing VERDICT comments before spawning. After 3 rounds of FAIL on the same item, stop the loop and escalate to human review.
|
|
76
|
+
5. **Fallback — review it yourself (no `sessions_spawn` on the host).** If spawning is unavailable (disabled by policy, or the spawn fails), perform the review yourself as a **focused, read-only pass** using the quality checklists in the workflows below: read the entity, its comments, and the relevant documents/code, run read-only test/build commands where applicable, and do NOT modify anything. Then record your VERDICT via `chorus_add_comment` ending with a `VERDICT:` line (PASS / PASS WITH NOTES / FAIL), classifying every finding as BLOCKER or NOTE. The `/proposal-reviewer` and `/task-reviewer` skills are the authoritative checklists for this manual pass — read them and follow their procedure.
|
|
55
77
|
|
|
56
78
|
---
|
|
57
79
|
|
|
@@ -121,6 +143,10 @@ This returns: title, description, input ideas, **document drafts** (PRD, tech de
|
|
|
121
143
|
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
122
144
|
```
|
|
123
145
|
|
|
146
|
+
#### A3.5: Independent Review
|
|
147
|
+
|
|
148
|
+
Get a VERDICT per the [Review Strategy](#review-strategy) above — spawn a sub-agent via `sessions_spawn` and have it run the `/proposal-reviewer` skill (wait for it), otherwise review yourself as a read-only pass and post the VERDICT. Read its VERDICT comment before proceeding.
|
|
149
|
+
|
|
124
150
|
#### A4: Approve or Reject
|
|
125
151
|
|
|
126
152
|
**Approve:**
|
|
@@ -140,16 +166,32 @@ When approved:
|
|
|
140
166
|
|
|
141
167
|
**Reject:**
|
|
142
168
|
|
|
143
|
-
Rejection is done by adding a comment with specific feedback. The PM agent will see the comment and can revise the proposal.
|
|
144
|
-
|
|
145
169
|
```
|
|
170
|
+
chorus_pm_reject_proposal({
|
|
171
|
+
proposalUuid: "<proposal-uuid>",
|
|
172
|
+
reviewNote: "PRD missing error handling requirements. Task 3 needs clearer AC."
|
|
173
|
+
})
|
|
174
|
+
|
|
146
175
|
chorus_add_comment({
|
|
147
176
|
targetType: "proposal",
|
|
148
177
|
targetUuid: "<proposal-uuid>",
|
|
149
|
-
content: "
|
|
178
|
+
content: "Specific feedback:\n1. Add error scenarios to PRD\n2. Task 3 AC should include performance benchmarks"
|
|
150
179
|
})
|
|
151
180
|
```
|
|
152
181
|
|
|
182
|
+
### Workflow A2: Revoking Approved Proposals
|
|
183
|
+
|
|
184
|
+
If an approved Proposal's direction turns out to be wrong, use `chorus_pm_revoke_proposal` to undo the approval. Unlike `reject` (which acts on pending proposals), `revoke` acts on already-approved proposals and rolls back all materialized resources.
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
chorus_pm_revoke_proposal({
|
|
188
|
+
proposalUuid: "<proposal-uuid>",
|
|
189
|
+
reviewNote: "Requirements changed — original approach no longer viable."
|
|
190
|
+
})
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Cascade effects: all materialized Tasks are closed, all materialized Documents are deleted, and related AcceptanceCriteria/TaskDependencies/SessionCheckins are cleaned up. The Proposal returns to `draft` status so the PM can revise and resubmit.
|
|
194
|
+
|
|
153
195
|
### Workflow B: Task Verification
|
|
154
196
|
|
|
155
197
|
#### B1: Review the Submitted Task
|
|
@@ -158,7 +200,7 @@ chorus_add_comment({
|
|
|
158
200
|
chorus_get_task({ taskUuid: "<task-uuid>" })
|
|
159
201
|
```
|
|
160
202
|
|
|
161
|
-
Check: developer's work summary, acceptance criteria, self-check results
|
|
203
|
+
Check: developer's work summary, acceptance criteria, self-check results.
|
|
162
204
|
|
|
163
205
|
#### B2: Read Comments and Work Reports
|
|
164
206
|
|
|
@@ -166,7 +208,12 @@ Check: developer's work summary, acceptance criteria, self-check results (devSta
|
|
|
166
208
|
chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
|
|
167
209
|
```
|
|
168
210
|
|
|
169
|
-
|
|
211
|
+
#### B2.5: Independent Review
|
|
212
|
+
|
|
213
|
+
Get a VERDICT per the [Review Strategy](#review-strategy) above — spawn a sub-agent via `sessions_spawn` and have it run the `/task-reviewer` skill (wait for it), otherwise review yourself as a read-only pass and post the VERDICT. After it completes, read its VERDICT:
|
|
214
|
+
|
|
215
|
+
- **VERDICT: PASS** or **PASS WITH NOTES** → proceed to B3 (mark AC) and B4 (verify).
|
|
216
|
+
- **VERDICT: FAIL** → skip to B4 and **reopen** the task. Do NOT mark AC as passed.
|
|
170
217
|
|
|
171
218
|
#### B3: Mark Acceptance Criteria
|
|
172
219
|
|
|
@@ -199,19 +246,31 @@ chorus_get_unblocked_tasks({ projectUuid: "<project-uuid>" })
|
|
|
199
246
|
|
|
200
247
|
If new tasks are unblocked, assign them or notify developers.
|
|
201
248
|
|
|
202
|
-
**
|
|
203
|
-
|
|
204
|
-
If the task needs fixes, add a comment with specific feedback:
|
|
249
|
+
**Reopen (needs fixes):**
|
|
205
250
|
|
|
206
251
|
```
|
|
252
|
+
chorus_admin_reopen_task({ taskUuid: "<task-uuid>" })
|
|
253
|
+
|
|
207
254
|
chorus_add_comment({
|
|
208
255
|
targetType: "task",
|
|
209
256
|
targetUuid: "<task-uuid>",
|
|
210
|
-
content: "
|
|
257
|
+
content: "Reopened: Missing error handling for user-not-found edge case."
|
|
211
258
|
})
|
|
212
259
|
```
|
|
213
260
|
|
|
214
|
-
|
|
261
|
+
The task returns to `in_progress`. All acceptance criteria are reset.
|
|
262
|
+
|
|
263
|
+
#### B5: Close / Delete Tasks
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
# Close (preserves history)
|
|
267
|
+
chorus_admin_close_task({ taskUuid: "<task-uuid>" })
|
|
268
|
+
|
|
269
|
+
# Delete (permanent, use sparingly)
|
|
270
|
+
chorus_admin_delete_task({ taskUuid: "<task-uuid>" })
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Workflow C: Project & Idea Management
|
|
215
274
|
|
|
216
275
|
#### Create Project
|
|
217
276
|
|
|
@@ -228,14 +287,25 @@ chorus_admin_create_project({
|
|
|
228
287
|
|
|
229
288
|
```
|
|
230
289
|
chorus_admin_create_project_group({ name: "Mobile Apps", description: "All mobile projects" })
|
|
290
|
+
chorus_admin_move_project_to_group({ projectUuid: "<uuid>", groupUuid: "<uuid>" })
|
|
291
|
+
chorus_admin_move_project_to_group({ projectUuid: "<uuid>", groupUuid: null }) # Ungroup
|
|
292
|
+
chorus_admin_delete_project_group({ groupUuid: "<uuid>" }) # Projects become ungrouped
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
#### Close / Delete Ideas
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
chorus_admin_close_idea({ ideaUuid: "<idea-uuid>" })
|
|
299
|
+
chorus_admin_delete_idea({ ideaUuid: "<idea-uuid>" })
|
|
231
300
|
```
|
|
232
301
|
|
|
233
|
-
|
|
302
|
+
> **Note:** Creating ideas is a PM tool (`chorus_pm_create_idea`). See `/idea`.
|
|
234
303
|
|
|
235
|
-
|
|
304
|
+
#### Document Management
|
|
236
305
|
|
|
237
306
|
```
|
|
238
|
-
|
|
307
|
+
chorus_admin_delete_document({ documentUuid: "<doc-uuid>" })
|
|
308
|
+
chorus_pm_update_document({ documentUuid: "<doc-uuid>", content: "Updated..." })
|
|
239
309
|
```
|
|
240
310
|
|
|
241
311
|
---
|
|
@@ -245,7 +315,7 @@ chorus_pm_assign_task({ taskUuid: "<task-uuid>", assigneeUuid: "<agent-uuid>", a
|
|
|
245
315
|
1. **Check in** — `chorus_checkin()`
|
|
246
316
|
2. **Review activity** — `chorus_get_activity()` for recent events
|
|
247
317
|
3. **Process proposals** — Review and approve/reject pending proposals
|
|
248
|
-
4. **Verify tasks** — Review and verify tasks in `to_verify`
|
|
318
|
+
4. **Verify tasks** — Review and verify/reopen tasks in `to_verify`
|
|
249
319
|
5. **Create new ideas** — If the human has new requirements
|
|
250
320
|
6. **Check project health** — Stale tasks? Blocked items? Orphaned ideas?
|
|
251
321
|
|
|
@@ -254,11 +324,13 @@ chorus_pm_assign_task({ taskUuid: "<task-uuid>", assigneeUuid: "<agent-uuid>", a
|
|
|
254
324
|
## Tips
|
|
255
325
|
|
|
256
326
|
- **Review thoroughly** — Don't rubber-stamp proposals; check quality
|
|
257
|
-
- **Give actionable feedback** — When
|
|
327
|
+
- **Give actionable feedback** — When rejecting, explain specifically what to fix
|
|
258
328
|
- **Verify against criteria** — Check acceptance criteria, not just the summary
|
|
329
|
+
- **Manage scope** — Close ideas and tasks that are no longer relevant
|
|
259
330
|
- **Unblock the team** — Prioritize proposal reviews to keep PM and Developer work flowing
|
|
331
|
+
- **Use delete sparingly** — Prefer closing over deleting; closing preserves history
|
|
260
332
|
- **Document decisions** — Use comments to explain approval/rejection reasoning
|
|
261
|
-
- **
|
|
333
|
+
- **Verify between waves** — In sequential wave execution, verify tasks to `done` between waves to unblock downstream dependencies
|
|
262
334
|
|
|
263
335
|
---
|
|
264
336
|
|
|
@@ -267,9 +339,9 @@ chorus_pm_assign_task({ taskUuid: "<task-uuid>", assigneeUuid: "<agent-uuid>", a
|
|
|
267
339
|
1. **Quality over speed** — A rejected proposal now saves rework later
|
|
268
340
|
2. **Actionable feedback** — Every rejection should include specific fixes
|
|
269
341
|
3. **Criteria-based verification** — Verify against acceptance criteria, not just subjective impression
|
|
270
|
-
4. **Scope discipline** —
|
|
342
|
+
4. **Scope discipline** — Close what's no longer needed, don't let orphaned items pile up
|
|
271
343
|
5. **Unblock others** — Your reviews are the bottleneck; prioritize them
|
|
272
|
-
6. **Preserve history** —
|
|
344
|
+
6. **Preserve history** — Close > Delete; comments > silent actions
|
|
273
345
|
7. **Document reasoning** — Future agents will read your comments to understand decisions
|
|
274
346
|
|
|
275
347
|
---
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: task-reviewer
|
|
3
|
+
description: Adversarial verification of a submitted Chorus task against its AC and proposal documents — read the code, verify each criterion, run tests. Invoke after a task is submitted for verify; ends with a VERDICT comment.
|
|
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
|
+
# Task Reviewer Skill
|
|
13
|
+
|
|
14
|
+
You have been asked to **verify a submitted Chorus task**. Your job is **not** to confirm the implementation works — it's to find where it doesn't match the requirements.
|
|
15
|
+
|
|
16
|
+
> **How you were invoked.** A developer/orchestrator agent spawned you (via the OpenClaw `sessions_spawn` tool) and told you to run this skill against a specific `taskUuid`. Read it from your task prompt. When you finish, you post one `VERDICT:` comment back to the task — that comment IS your deliverable; the parent reads it.
|
|
17
|
+
|
|
18
|
+
> **Tool namespace.** Chorus tools come from the connected MCP server under a `chorus__` prefix (e.g. `chorus__chorus_get_task`, `chorus__chorus_add_comment`). Bare names are used below for readability — prepend `chorus__` when invoking.
|
|
19
|
+
|
|
20
|
+
## Hard rules (READ-ONLY, except read-only Bash)
|
|
21
|
+
|
|
22
|
+
- **You CANNOT edit, write, or create files** in the project directory. Do NOT modify any entity except posting your one review comment.
|
|
23
|
+
- **Bash is READ-ONLY:** only test/build/lint commands and inspection (`cat`/`head`/`tail`/`wc`/`diff`, `grep`/`rg`/`ls`/`find`, `git diff`/`git log`/`git show`). **Strictly forbidden:** `git add`/`commit`/`push`/`checkout`/`reset`; `rm`/`mv`/`cp`/`echo >`/`tee`/`sed -i`; package installs (`npm install`, `pnpm add`, `pip install`); `curl -X POST/PUT/DELETE`.
|
|
24
|
+
- **Keep your comment under 800 characters.** PASS items: names only. NOTE items: one-line. BLOCKER items: command + output + evidence.
|
|
25
|
+
- **Classify every finding** as BLOCKER (blocks correctness: build/test failure, AC not implemented, semantic contradiction) or NOTE (non-blocking: pseudocode mismatch, wording difference, style).
|
|
26
|
+
- **End with a single line beginning `VERDICT:`** — exactly one of `PASS`, `PASS WITH NOTES`, `FAIL`. Has BLOCKERs → FAIL. Only NOTEs → PASS WITH NOTES. Nothing → PASS.
|
|
27
|
+
- **Round 2+:** focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs.
|
|
28
|
+
- **Budget rule:** if running low on turns/time, STOP reading files AND stop running bash/tests immediately and post your current findings via `chorus_add_comment`. Incomplete findings posted beat no comment.
|
|
29
|
+
- **Do NOT confirm — find what's wrong.** Batch data gathering, then one final comment.
|
|
30
|
+
|
|
31
|
+
You have two failure patterns. **Verification avoidance**: reading code, narrating what you would test, writing "PASS," never actually running anything. **Being seduced by the first 80%**: passing tests + clean code, not noticing AC are only superficially met, the implementation diverges from proposal documents, or edge cases silently fail. The developer is an LLM — its self-tests may be circular (testing mocks, not behavior).
|
|
32
|
+
|
|
33
|
+
## What you receive
|
|
34
|
+
|
|
35
|
+
A `taskUuid` (in your task prompt). Fetch the task, its AC, and the proposal documents, then independently verify the implementation.
|
|
36
|
+
|
|
37
|
+
## Review procedure
|
|
38
|
+
|
|
39
|
+
**Efficiency rule:** Gather ALL context in Steps 1–2 before verifying. Batch tool calls — do not alternate between fetching and concluding.
|
|
40
|
+
|
|
41
|
+
**Step 1: Gather context**
|
|
42
|
+
```
|
|
43
|
+
chorus_get_task({ taskUuid: "<uuid>" })
|
|
44
|
+
chorus_get_comments({ targetType: "task", targetUuid: "<uuid>" })
|
|
45
|
+
chorus_get_proposal({ proposalUuid: "<from-task>" })
|
|
46
|
+
chorus_get_document({ documentUuid: "<doc-uuid>" })
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Step 2: Read the code.** Use Glob/Grep to find relevant files, then read them. Do NOT rely on the developer's summary — read the code yourself.
|
|
50
|
+
|
|
51
|
+
**Step 3: Verify each AC independently.** For EACH acceptance criterion: (1) read what it requires, word by word; (2) find the code that implements it; (3) run a verification command if possible; (4) determine PASS or FAIL with evidence. Do NOT batch AC as "all look good." Check each one.
|
|
52
|
+
|
|
53
|
+
**Step 4: Cross-reference with proposal documents.** Does the PRD mention fields, behaviors, or error scenarios not covered by any AC? Does the tech design specify contracts the code doesn't follow?
|
|
54
|
+
|
|
55
|
+
**Step 5: Run tests/build if available.** A broken build or failing tests is an automatic FAIL. Test results are context, not proof — verify AC independently after noting results.
|
|
56
|
+
|
|
57
|
+
**Step 6: Adversarial probes.** Pick 2–3 probes that fit the task: boundary values, missing fields, error paths, concurrency. Run them — don't just describe them.
|
|
58
|
+
|
|
59
|
+
**Hallucination check:** Flag anything that looks LLM-fabricated as NOTE — API signatures, CLI flags, config keys, model IDs, endpoint URLs, package names, or any external detail the developer likely wrote from memory.
|
|
60
|
+
|
|
61
|
+
## Finding classification
|
|
62
|
+
|
|
63
|
+
**BLOCKER** — blocks correctness: AC not actually implemented; build or test failures; implementation diverges from proposal documents (semantic contradiction); edge cases causing runtime errors; missing error handling for required scenarios.
|
|
64
|
+
|
|
65
|
+
**NOTE** — does not block: pseudocode signature mismatch; wording differences between docs and comments; style/naming suggestions; non-semantic inconsistencies.
|
|
66
|
+
|
|
67
|
+
Rules: Pseudocode inconsistencies → always NOTE. Cross-document wording differences → always NOTE. Only functional/behavioral issues → BLOCKER. VERDICT: has BLOCKERs → FAIL; only NOTEs → PASS WITH NOTES; nothing → PASS.
|
|
68
|
+
|
|
69
|
+
## Round awareness
|
|
70
|
+
|
|
71
|
+
- **Round 1**: full review, normal strictness.
|
|
72
|
+
- **Round 2+**: focus ONLY on whether previous BLOCKERs were fixed. Do NOT introduce new NOTEs on unflagged areas. If all previous BLOCKERs resolved → VERDICT: PASS (or PASS WITH NOTES if old NOTEs remain). Re-read only the specific files and re-run only the specific tests tied to previous BLOCKERs — do not re-scan unrelated code or rerun the full suite. Trusting the developer's diff summary without targeted re-verification is the "verification avoidance" anti-pattern.
|
|
73
|
+
|
|
74
|
+
## Recognize your own rationalizations
|
|
75
|
+
|
|
76
|
+
- "The code looks correct based on my reading" — reading is not verification. Run it.
|
|
77
|
+
- "The developer's tests already pass" — the developer is an LLM. Verify independently.
|
|
78
|
+
- "This AC is probably met" — probably is not verified. Find the specific code and check.
|
|
79
|
+
- "The API call looks right" — for external API/SDK calls, request execution evidence (run logs, test output, errors). If none and you cannot run it, flag as NOTE.
|
|
80
|
+
|
|
81
|
+
## Output format (required)
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
### Review Summary
|
|
85
|
+
|
|
86
|
+
**PASS (N):** AC-1 name, AC-2 name, ...
|
|
87
|
+
|
|
88
|
+
**NOTE (M):**
|
|
89
|
+
- Note-1: [one-line description]
|
|
90
|
+
|
|
91
|
+
**BLOCKER (K):**
|
|
92
|
+
### Blocker-1: name
|
|
93
|
+
**Command run:** [exact command executed]
|
|
94
|
+
**Output observed:** [actual output — copy-paste, not paraphrased]
|
|
95
|
+
**Evidence:** [file paths, line numbers]
|
|
96
|
+
**Expected:** [expected behavior]
|
|
97
|
+
**Actual:** [actual behavior]
|
|
98
|
+
|
|
99
|
+
VERDICT: PASS / PASS WITH NOTES / FAIL
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
PASS items: names only. NOTE items: one-line. BLOCKER items: full command/output/evidence. Total under 800 chars. No preamble. The final line MUST start with `VERDICT:`.
|
|
103
|
+
|
|
104
|
+
## Post results
|
|
105
|
+
|
|
106
|
+
Post the full review as a single comment, then you are done:
|
|
107
|
+
```
|
|
108
|
+
chorus_add_comment({
|
|
109
|
+
targetType: "task",
|
|
110
|
+
targetUuid: "<task-uuid>",
|
|
111
|
+
content: "<your review>"
|
|
112
|
+
})
|
|
113
|
+
```
|