@chorus-aidlc/chorus-openclaw-plugin 0.4.0 → 0.5.3
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 +114 -97
- package/skills/develop/SKILL.md +197 -52
- package/skills/idea/SKILL.md +136 -150
- package/skills/openspec-aware/SKILL.md +425 -0
- package/skills/proposal/SKILL.md +162 -153
- package/skills/proposal-reviewer/SKILL.md +118 -0
- package/skills/quick-dev/SKILL.md +34 -10
- package/skills/review/SKILL.md +109 -35
- package/skills/task-reviewer/SKILL.md +113 -0
- package/skills/yolo/SKILL.md +501 -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.4"
|
|
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
|
|
|
@@ -65,7 +70,7 @@ This matters because admin agents can call `chorus_admin_verify_task` to close t
|
|
|
65
70
|
|
|
66
71
|
### Step 1: Create a Quick Task
|
|
67
72
|
|
|
68
|
-
**
|
|
73
|
+
**`acceptanceCriteriaItems` is required** — `chorus_create_tasks` rejects any task without at least one non-blank criterion (and rejects the whole batch if any task is missing them). These are also the foundation for self-checking in Step 6. Write specific, testable criteria that you can objectively verify after development. Vague AC like "works correctly" defeats the purpose; prefer "returns 200 on GET /api/foo with valid token".
|
|
69
74
|
|
|
70
75
|
```
|
|
71
76
|
chorus_create_tasks({
|
|
@@ -95,7 +100,7 @@ chorus_claim_task({ taskUuid: "<task-uuid>" })
|
|
|
95
100
|
|
|
96
101
|
### Step 3: Edit Details (if needed)
|
|
97
102
|
|
|
98
|
-
Use `chorus_update_task` to refine the task after creation.
|
|
103
|
+
Use `chorus_update_task` to refine the task after creation. Tasks always have AC (creation requires them), but **update them when your understanding changes during development**. Passing `acceptanceCriteriaItems` **replaces** the task's criteria with the provided non-empty set; omit the field to leave them unchanged (it cannot be used to clear AC).
|
|
99
104
|
|
|
100
105
|
```
|
|
101
106
|
chorus_update_task({
|
|
@@ -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,16 +164,29 @@ 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
|
|
159
183
|
|
|
160
184
|
- Keep Quick Tasks small — if you need more than 2-3 tasks, consider using `/proposal`
|
|
161
|
-
- **
|
|
185
|
+
- **Acceptance criteria are required at creation time** — `chorus_create_tasks` rejects tasks without them. They are your self-check contract; specific, testable AC enables autonomous verification and makes the entire workflow self-contained
|
|
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.4"
|
|
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
|
|
|
@@ -90,10 +112,12 @@ Prioritize: **Proposals first** (they unblock PM and Developer work), then task
|
|
|
90
112
|
#### A1: Read the Proposal
|
|
91
113
|
|
|
92
114
|
```
|
|
93
|
-
chorus_get_proposal({ proposalUuid: "<proposal-uuid>" })
|
|
115
|
+
chorus_get_proposal({ proposalUuid: "<proposal-uuid>", section: "full" })
|
|
94
116
|
```
|
|
95
117
|
|
|
96
|
-
|
|
118
|
+
`chorus_get_proposal` defaults to `section: "basic"` — proposal metadata plus a lightweight index of the drafts (uuid, type/title, contentLength, AC count, dependency edges) with **no** document content or full task descriptions. For a review you need the bodies, so pass `section: "full"` to get everything at once (or `section: "documents"` / `section: "tasks"` to read one kind at a time).
|
|
119
|
+
|
|
120
|
+
The `full` view returns: title, description, input ideas, **document drafts** (PRD, tech design), **task drafts** (with descriptions and acceptance criteria).
|
|
97
121
|
|
|
98
122
|
#### A2: Quality Checklist
|
|
99
123
|
|
|
@@ -121,6 +145,10 @@ This returns: title, description, input ideas, **document drafts** (PRD, tech de
|
|
|
121
145
|
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
122
146
|
```
|
|
123
147
|
|
|
148
|
+
#### A3.5: Independent Review
|
|
149
|
+
|
|
150
|
+
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.
|
|
151
|
+
|
|
124
152
|
#### A4: Approve or Reject
|
|
125
153
|
|
|
126
154
|
**Approve:**
|
|
@@ -140,16 +168,32 @@ When approved:
|
|
|
140
168
|
|
|
141
169
|
**Reject:**
|
|
142
170
|
|
|
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
171
|
```
|
|
172
|
+
chorus_pm_reject_proposal({
|
|
173
|
+
proposalUuid: "<proposal-uuid>",
|
|
174
|
+
reviewNote: "PRD missing error handling requirements. Task 3 needs clearer AC."
|
|
175
|
+
})
|
|
176
|
+
|
|
146
177
|
chorus_add_comment({
|
|
147
178
|
targetType: "proposal",
|
|
148
179
|
targetUuid: "<proposal-uuid>",
|
|
149
|
-
content: "
|
|
180
|
+
content: "Specific feedback:\n1. Add error scenarios to PRD\n2. Task 3 AC should include performance benchmarks"
|
|
181
|
+
})
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Workflow A2: Revoking Approved Proposals
|
|
185
|
+
|
|
186
|
+
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.
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
chorus_pm_revoke_proposal({
|
|
190
|
+
proposalUuid: "<proposal-uuid>",
|
|
191
|
+
reviewNote: "Requirements changed — original approach no longer viable."
|
|
150
192
|
})
|
|
151
193
|
```
|
|
152
194
|
|
|
195
|
+
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.
|
|
196
|
+
|
|
153
197
|
### Workflow B: Task Verification
|
|
154
198
|
|
|
155
199
|
#### B1: Review the Submitted Task
|
|
@@ -158,7 +202,7 @@ chorus_add_comment({
|
|
|
158
202
|
chorus_get_task({ taskUuid: "<task-uuid>" })
|
|
159
203
|
```
|
|
160
204
|
|
|
161
|
-
Check: developer's work summary, acceptance criteria, self-check results
|
|
205
|
+
Check: developer's work summary, acceptance criteria, self-check results.
|
|
162
206
|
|
|
163
207
|
#### B2: Read Comments and Work Reports
|
|
164
208
|
|
|
@@ -166,7 +210,12 @@ Check: developer's work summary, acceptance criteria, self-check results (devSta
|
|
|
166
210
|
chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
|
|
167
211
|
```
|
|
168
212
|
|
|
169
|
-
|
|
213
|
+
#### B2.5: Independent Review
|
|
214
|
+
|
|
215
|
+
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:
|
|
216
|
+
|
|
217
|
+
- **VERDICT: PASS** or **PASS WITH NOTES** → proceed to B3 (mark AC) and B4 (verify).
|
|
218
|
+
- **VERDICT: FAIL** → skip to B4 and **reopen** the task. Do NOT mark AC as passed.
|
|
170
219
|
|
|
171
220
|
#### B3: Mark Acceptance Criteria
|
|
172
221
|
|
|
@@ -199,19 +248,31 @@ chorus_get_unblocked_tasks({ projectUuid: "<project-uuid>" })
|
|
|
199
248
|
|
|
200
249
|
If new tasks are unblocked, assign them or notify developers.
|
|
201
250
|
|
|
202
|
-
**
|
|
203
|
-
|
|
204
|
-
If the task needs fixes, add a comment with specific feedback:
|
|
251
|
+
**Reopen (needs fixes):**
|
|
205
252
|
|
|
206
253
|
```
|
|
254
|
+
chorus_admin_reopen_task({ taskUuid: "<task-uuid>" })
|
|
255
|
+
|
|
207
256
|
chorus_add_comment({
|
|
208
257
|
targetType: "task",
|
|
209
258
|
targetUuid: "<task-uuid>",
|
|
210
|
-
content: "
|
|
259
|
+
content: "Reopened: Missing error handling for user-not-found edge case."
|
|
211
260
|
})
|
|
212
261
|
```
|
|
213
262
|
|
|
214
|
-
|
|
263
|
+
The task returns to `in_progress`. All acceptance criteria are reset.
|
|
264
|
+
|
|
265
|
+
#### B5: Close / Delete Tasks
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
# Close (preserves history)
|
|
269
|
+
chorus_admin_close_task({ taskUuid: "<task-uuid>" })
|
|
270
|
+
|
|
271
|
+
# Delete (permanent, use sparingly)
|
|
272
|
+
chorus_admin_delete_task({ taskUuid: "<task-uuid>" })
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Workflow C: Project & Idea Management
|
|
215
276
|
|
|
216
277
|
#### Create Project
|
|
217
278
|
|
|
@@ -228,14 +289,25 @@ chorus_admin_create_project({
|
|
|
228
289
|
|
|
229
290
|
```
|
|
230
291
|
chorus_admin_create_project_group({ name: "Mobile Apps", description: "All mobile projects" })
|
|
292
|
+
chorus_admin_move_project_to_group({ projectUuid: "<uuid>", groupUuid: "<uuid>" })
|
|
293
|
+
chorus_admin_move_project_to_group({ projectUuid: "<uuid>", groupUuid: null }) # Ungroup
|
|
294
|
+
chorus_admin_delete_project_group({ groupUuid: "<uuid>" }) # Projects become ungrouped
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
#### Close / Delete Ideas
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
chorus_admin_close_idea({ ideaUuid: "<idea-uuid>" })
|
|
301
|
+
chorus_admin_delete_idea({ ideaUuid: "<idea-uuid>" })
|
|
231
302
|
```
|
|
232
303
|
|
|
233
|
-
|
|
304
|
+
> **Note:** Creating ideas is a PM tool (`chorus_pm_create_idea`). See `/idea`.
|
|
234
305
|
|
|
235
|
-
|
|
306
|
+
#### Document Management
|
|
236
307
|
|
|
237
308
|
```
|
|
238
|
-
|
|
309
|
+
chorus_admin_delete_document({ documentUuid: "<doc-uuid>" })
|
|
310
|
+
chorus_pm_update_document({ documentUuid: "<doc-uuid>", content: "Updated..." })
|
|
239
311
|
```
|
|
240
312
|
|
|
241
313
|
---
|
|
@@ -245,7 +317,7 @@ chorus_pm_assign_task({ taskUuid: "<task-uuid>", assigneeUuid: "<agent-uuid>", a
|
|
|
245
317
|
1. **Check in** — `chorus_checkin()`
|
|
246
318
|
2. **Review activity** — `chorus_get_activity()` for recent events
|
|
247
319
|
3. **Process proposals** — Review and approve/reject pending proposals
|
|
248
|
-
4. **Verify tasks** — Review and verify tasks in `to_verify`
|
|
320
|
+
4. **Verify tasks** — Review and verify/reopen tasks in `to_verify`
|
|
249
321
|
5. **Create new ideas** — If the human has new requirements
|
|
250
322
|
6. **Check project health** — Stale tasks? Blocked items? Orphaned ideas?
|
|
251
323
|
|
|
@@ -254,11 +326,13 @@ chorus_pm_assign_task({ taskUuid: "<task-uuid>", assigneeUuid: "<agent-uuid>", a
|
|
|
254
326
|
## Tips
|
|
255
327
|
|
|
256
328
|
- **Review thoroughly** — Don't rubber-stamp proposals; check quality
|
|
257
|
-
- **Give actionable feedback** — When
|
|
329
|
+
- **Give actionable feedback** — When rejecting, explain specifically what to fix
|
|
258
330
|
- **Verify against criteria** — Check acceptance criteria, not just the summary
|
|
331
|
+
- **Manage scope** — Close ideas and tasks that are no longer relevant
|
|
259
332
|
- **Unblock the team** — Prioritize proposal reviews to keep PM and Developer work flowing
|
|
333
|
+
- **Use delete sparingly** — Prefer closing over deleting; closing preserves history
|
|
260
334
|
- **Document decisions** — Use comments to explain approval/rejection reasoning
|
|
261
|
-
- **
|
|
335
|
+
- **Verify between waves** — In sequential wave execution, verify tasks to `done` between waves to unblock downstream dependencies
|
|
262
336
|
|
|
263
337
|
---
|
|
264
338
|
|
|
@@ -267,9 +341,9 @@ chorus_pm_assign_task({ taskUuid: "<task-uuid>", assigneeUuid: "<agent-uuid>", a
|
|
|
267
341
|
1. **Quality over speed** — A rejected proposal now saves rework later
|
|
268
342
|
2. **Actionable feedback** — Every rejection should include specific fixes
|
|
269
343
|
3. **Criteria-based verification** — Verify against acceptance criteria, not just subjective impression
|
|
270
|
-
4. **Scope discipline** —
|
|
344
|
+
4. **Scope discipline** — Close what's no longer needed, don't let orphaned items pile up
|
|
271
345
|
5. **Unblock others** — Your reviews are the bottleneck; prioritize them
|
|
272
|
-
6. **Preserve history** —
|
|
346
|
+
6. **Preserve history** — Close > Delete; comments > silent actions
|
|
273
347
|
7. **Document reasoning** — Future agents will read your comments to understand decisions
|
|
274
348
|
|
|
275
349
|
---
|
|
@@ -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.4"
|
|
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>", section: "documents" })
|
|
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
|
+
```
|