@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,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: quick-dev
|
|
3
|
+
description: Quick Task workflow — skip Idea→Proposal, create tasks directly, execute, and verify.
|
|
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
|
+
# Quick Dev Skill
|
|
13
|
+
|
|
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.
|
|
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
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
The standard AI-DLC flow ensures quality through structured planning, but adds overhead that slows down small tasks. Quick Dev provides a lightweight alternative:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
[check admin role] → chorus_create_tasks → chorus_claim_task → in_progress → report → self-check AC → submit for verify → [self-verify if admin] → done
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Use Quick Dev when:**
|
|
29
|
+
- Bug fixes with clear reproduction steps
|
|
30
|
+
- Small features (< 2 story points)
|
|
31
|
+
- Post-delivery patches and gap-filling after a proposal's tasks are done
|
|
32
|
+
- Prototype or exploratory tasks
|
|
33
|
+
- Urgent hotfixes that can't wait for proposal review
|
|
34
|
+
|
|
35
|
+
**Do NOT use Quick Dev when:**
|
|
36
|
+
- The feature needs a PRD or tech design document
|
|
37
|
+
- Multiple interdependent tasks require upfront planning
|
|
38
|
+
- Stakeholder elaboration is needed to clarify requirements
|
|
39
|
+
- The work impacts architecture or shared components significantly
|
|
40
|
+
|
|
41
|
+
For complex work, use `/idea` + `/proposal` instead.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Pre-Flight: Admin Self-Verify Check
|
|
46
|
+
|
|
47
|
+
**Before creating tasks**, if `chorus_checkin().agent.permissions.task` includes `"admin"`, ask the user (as a **plain-text prompt** — OpenClaw has no `AskUserQuestion`):
|
|
48
|
+
|
|
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'."
|
|
50
|
+
|
|
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.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Tools
|
|
56
|
+
|
|
57
|
+
| Tool | Purpose |
|
|
58
|
+
|------|---------|
|
|
59
|
+
| `chorus_create_tasks` | Create task(s) — omit `proposalUuid` for standalone Quick Task, or pass it to attach to an existing proposal |
|
|
60
|
+
| `chorus_update_task` | Edit task fields (title, description, priority, AC, dependencies) or change status |
|
|
61
|
+
| `chorus_claim_task` | Claim a task (open → assigned) |
|
|
62
|
+
| `chorus_report_work` | Report progress with optional status update |
|
|
63
|
+
| `chorus_report_criteria_self_check` | Self-check acceptance criteria before submitting |
|
|
64
|
+
| `chorus_submit_for_verify` | Submit for admin verification |
|
|
65
|
+
| `chorus_admin_verify_task` | **(admin only)** Verify task — use when self-verification is approved |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Workflow
|
|
70
|
+
|
|
71
|
+
### Step 1: Create a Quick Task
|
|
72
|
+
|
|
73
|
+
**Always include `acceptanceCriteriaItems`** — these are 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".
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
chorus_create_tasks({
|
|
77
|
+
projectUuid: "<project-uuid>",
|
|
78
|
+
tasks: [{
|
|
79
|
+
title: "Fix login redirect loop on Safari",
|
|
80
|
+
description: "Safari loses session cookie after redirect...",
|
|
81
|
+
priority: "high",
|
|
82
|
+
storyPoints: 1,
|
|
83
|
+
acceptanceCriteriaItems: [
|
|
84
|
+
{ description: "Login works on Safari 17+", required: true },
|
|
85
|
+
{ description: "Existing Chrome/Firefox behavior unchanged", required: true }
|
|
86
|
+
]
|
|
87
|
+
}]
|
|
88
|
+
})
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**`proposalUuid` is optional:**
|
|
92
|
+
- **Omit** for standalone quick tasks (bug fixes, hotfixes, exploratory work)
|
|
93
|
+
- **Pass** to attach the task to an existing proposal — useful for gap-filling, follow-up patches, or continuing work after a proposal's initial tasks are delivered
|
|
94
|
+
|
|
95
|
+
### Step 2: Claim the Task
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
chorus_claim_task({ taskUuid: "<task-uuid>" })
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Step 3: Edit Details (if needed)
|
|
102
|
+
|
|
103
|
+
Use `chorus_update_task` to refine the task after creation. **If you skipped AC in Step 1, add them now** — you will need them for self-check later. Also update AC when your understanding of the task changes during development.
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
chorus_update_task({
|
|
107
|
+
taskUuid: "<task-uuid>",
|
|
108
|
+
description: "Updated with more details...",
|
|
109
|
+
acceptanceCriteriaItems: [
|
|
110
|
+
{ description: "Login works on Safari 17+", required: true },
|
|
111
|
+
{ description: "Added CSRF token handling", required: true }
|
|
112
|
+
],
|
|
113
|
+
addDependsOn: ["<other-task-uuid>"]
|
|
114
|
+
})
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Step 4: Start Working
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
chorus_update_task({ taskUuid: "<task-uuid>", status: "in_progress" })
|
|
121
|
+
```
|
|
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
|
+
|
|
128
|
+
### Step 5: Report Progress
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
chorus_report_work({
|
|
132
|
+
taskUuid: "<task-uuid>",
|
|
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>"
|
|
135
|
+
})
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Step 6: Self-Check Acceptance Criteria
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
chorus_report_criteria_self_check({
|
|
142
|
+
taskUuid: "<task-uuid>",
|
|
143
|
+
criteria: [
|
|
144
|
+
{ uuid: "<ac-uuid-1>", devStatus: "passed", devEvidence: "Tested on Safari 17.2" },
|
|
145
|
+
{ uuid: "<ac-uuid-2>", devStatus: "passed", devEvidence: "Chrome/Firefox regression tests pass" }
|
|
146
|
+
]
|
|
147
|
+
})
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Step 7: Submit for Verification (or Self-Verify)
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
chorus_submit_for_verify({
|
|
154
|
+
taskUuid: "<task-uuid>",
|
|
155
|
+
summary: "Fixed Safari login redirect loop. Changed SameSite cookie policy. All AC passed."
|
|
156
|
+
})
|
|
157
|
+
```
|
|
158
|
+
|
|
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:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
This completes the full autonomous cycle: create → develop → verify → done.
|
|
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
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Tips
|
|
183
|
+
|
|
184
|
+
- Keep Quick Tasks small — if you need more than 2-3 tasks, consider using `/proposal`
|
|
185
|
+
- **Always write acceptance criteria at creation time** — they are your self-check contract. Specific, testable AC enables autonomous verification and makes the entire workflow self-contained
|
|
186
|
+
- Use `chorus_update_task` to refine tasks (including AC) after creation rather than deleting and recreating
|
|
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
|
|
188
|
+
- Quick Tasks show up in the same project task list and DAG as proposal-based tasks
|
|
189
|
+
- Admin agents can run the full lifecycle autonomously (create → develop → self-verify) — but always confirm with the user first (plain-text prompt)
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Next
|
|
194
|
+
|
|
195
|
+
- For full task lifecycle details, see `/develop`
|
|
196
|
+
- For admin verification, see `/review`
|
|
197
|
+
- For the standard planning flow, see `/idea` and `/proposal`
|
|
198
|
+
- For platform overview, see `/chorus`
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review
|
|
3
|
+
description: Chorus Review workflow — approve/reject proposals, verify tasks, and manage project governance.
|
|
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
|
+
# Review Skill
|
|
13
|
+
|
|
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.
|
|
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
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
Admin Agent has **full access to all Chorus operations**. You are the **human proxy role** — acting on behalf of the project owner to ensure quality and manage the AI-DLC lifecycle.
|
|
23
|
+
|
|
24
|
+
Key responsibilities:
|
|
25
|
+
- **Proposal review** — approve or reject Proposals submitted by PM Agents (see `/proposal`)
|
|
26
|
+
- **Task verification** — verify or reopen Tasks submitted by Developer Agents (see `/develop`)
|
|
27
|
+
- **Project governance** — create projects/ideas, manage groups, close/delete entities
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Tools
|
|
32
|
+
|
|
33
|
+
**Admin-Exclusive:**
|
|
34
|
+
|
|
35
|
+
| Tool | Purpose |
|
|
36
|
+
|------|---------|
|
|
37
|
+
| `chorus_admin_create_project` | Create a new project (optional `groupUuid` for group assignment) |
|
|
38
|
+
| `chorus_admin_approve_proposal` | Approve proposal (materializes documents + tasks) |
|
|
39
|
+
| `chorus_admin_verify_task` | Verify completed task (to_verify -> done). Blocked if required AC not all passed. |
|
|
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):**
|
|
53
|
+
|
|
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.
|
|
60
|
+
|
|
61
|
+
**Shared tools** (checkin, query, comment, search, notifications): see `/chorus`
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Review Strategy
|
|
66
|
+
|
|
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.
|
|
68
|
+
|
|
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.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Workflow
|
|
81
|
+
|
|
82
|
+
### Step 1: Check In
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
chorus_checkin()
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Pay attention to:
|
|
89
|
+
- Pending proposal count (items awaiting approval)
|
|
90
|
+
- Tasks in `to_verify` status (work awaiting review)
|
|
91
|
+
- Overall project health
|
|
92
|
+
|
|
93
|
+
### Step 2: Triage
|
|
94
|
+
|
|
95
|
+
Check what needs your attention:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
# Pending proposals
|
|
99
|
+
chorus_get_proposals({ projectUuid: "<project-uuid>", status: "pending" })
|
|
100
|
+
|
|
101
|
+
# Tasks awaiting verification
|
|
102
|
+
chorus_list_tasks({ projectUuid: "<project-uuid>", status: "to_verify" })
|
|
103
|
+
|
|
104
|
+
# Recent activity
|
|
105
|
+
chorus_get_activity({ projectUuid: "<project-uuid>" })
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Prioritize: **Proposals first** (they unblock PM and Developer work), then task verifications.
|
|
109
|
+
|
|
110
|
+
### Workflow A: Proposal Review
|
|
111
|
+
|
|
112
|
+
#### A1: Read the Proposal
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
chorus_get_proposal({ proposalUuid: "<proposal-uuid>" })
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
This returns: title, description, input ideas, **document drafts** (PRD, tech design), **task drafts** (with descriptions and acceptance criteria).
|
|
119
|
+
|
|
120
|
+
#### A2: Quality Checklist
|
|
121
|
+
|
|
122
|
+
**Documents:**
|
|
123
|
+
- [ ] PRD clearly describes the *what* and *why*
|
|
124
|
+
- [ ] Requirements are specific and testable
|
|
125
|
+
- [ ] Tech design is feasible and follows project conventions
|
|
126
|
+
- [ ] No missing edge cases or security considerations
|
|
127
|
+
|
|
128
|
+
**Tasks:**
|
|
129
|
+
- [ ] Tasks cover all requirements in the PRD
|
|
130
|
+
- [ ] Each task has clear acceptance criteria
|
|
131
|
+
- [ ] Tasks are appropriately sized (1-8 story points)
|
|
132
|
+
- [ ] Task descriptions have enough context for a developer agent
|
|
133
|
+
- [ ] Priority is set correctly
|
|
134
|
+
|
|
135
|
+
**Overall:**
|
|
136
|
+
- [ ] Proposal aligns with the original idea(s)
|
|
137
|
+
- [ ] No scope creep beyond what was requested
|
|
138
|
+
- [ ] Implementation approach is reasonable
|
|
139
|
+
|
|
140
|
+
#### A3: Read Comments
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
144
|
+
```
|
|
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
|
+
|
|
150
|
+
#### A4: Approve or Reject
|
|
151
|
+
|
|
152
|
+
**Approve:**
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
chorus_admin_approve_proposal({
|
|
156
|
+
proposalUuid: "<proposal-uuid>",
|
|
157
|
+
reviewNote: "Approved. Good breakdown of tasks."
|
|
158
|
+
})
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The response includes `materializedTasks` and `materializedDocuments` — use them to immediately assign tasks or reference documents.
|
|
162
|
+
|
|
163
|
+
When approved:
|
|
164
|
+
- Document drafts become real Documents
|
|
165
|
+
- Task drafts become real Tasks (status: `open`)
|
|
166
|
+
|
|
167
|
+
**Reject:**
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
chorus_pm_reject_proposal({
|
|
171
|
+
proposalUuid: "<proposal-uuid>",
|
|
172
|
+
reviewNote: "PRD missing error handling requirements. Task 3 needs clearer AC."
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
chorus_add_comment({
|
|
176
|
+
targetType: "proposal",
|
|
177
|
+
targetUuid: "<proposal-uuid>",
|
|
178
|
+
content: "Specific feedback:\n1. Add error scenarios to PRD\n2. Task 3 AC should include performance benchmarks"
|
|
179
|
+
})
|
|
180
|
+
```
|
|
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
|
+
|
|
195
|
+
### Workflow B: Task Verification
|
|
196
|
+
|
|
197
|
+
#### B1: Review the Submitted Task
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
chorus_get_task({ taskUuid: "<task-uuid>" })
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Check: developer's work summary, acceptance criteria, self-check results.
|
|
204
|
+
|
|
205
|
+
#### B2: Read Comments and Work Reports
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
chorus_get_comments({ targetType: "task", targetUuid: "<task-uuid>" })
|
|
209
|
+
```
|
|
210
|
+
|
|
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.
|
|
217
|
+
|
|
218
|
+
#### B3: Mark Acceptance Criteria
|
|
219
|
+
|
|
220
|
+
Review and mark each criterion:
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
chorus_mark_acceptance_criteria({
|
|
224
|
+
taskUuid: "<task-uuid>",
|
|
225
|
+
criteria: [
|
|
226
|
+
{ uuid: "<criterion-uuid>", status: "passed" },
|
|
227
|
+
{ uuid: "<criterion-uuid>", status: "passed" },
|
|
228
|
+
{ uuid: "<criterion-uuid>", status: "failed", evidence: "Missing edge case handling" }
|
|
229
|
+
]
|
|
230
|
+
})
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
#### B4: Verify or Reopen
|
|
234
|
+
|
|
235
|
+
**Verify (all required AC passed):**
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
This moves the task to `done`. **Important:** verifying may unblock downstream tasks. Check:
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
chorus_get_unblocked_tasks({ projectUuid: "<project-uuid>" })
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
If new tasks are unblocked, assign them or notify developers.
|
|
248
|
+
|
|
249
|
+
**Reopen (needs fixes):**
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
chorus_admin_reopen_task({ taskUuid: "<task-uuid>" })
|
|
253
|
+
|
|
254
|
+
chorus_add_comment({
|
|
255
|
+
targetType: "task",
|
|
256
|
+
targetUuid: "<task-uuid>",
|
|
257
|
+
content: "Reopened: Missing error handling for user-not-found edge case."
|
|
258
|
+
})
|
|
259
|
+
```
|
|
260
|
+
|
|
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
|
|
274
|
+
|
|
275
|
+
#### Create Project
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
chorus_get_project_groups() # List available groups first
|
|
279
|
+
chorus_admin_create_project({
|
|
280
|
+
name: "My Project",
|
|
281
|
+
description: "Project goals...",
|
|
282
|
+
groupUuid: "<optional-group-uuid>"
|
|
283
|
+
})
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
#### Manage Project Groups
|
|
287
|
+
|
|
288
|
+
```
|
|
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>" })
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
> **Note:** Creating ideas is a PM tool (`chorus_pm_create_idea`). See `/idea`.
|
|
303
|
+
|
|
304
|
+
#### Document Management
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
chorus_admin_delete_document({ documentUuid: "<doc-uuid>" })
|
|
308
|
+
chorus_pm_update_document({ documentUuid: "<doc-uuid>", content: "Updated..." })
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Daily Admin Routine
|
|
314
|
+
|
|
315
|
+
1. **Check in** — `chorus_checkin()`
|
|
316
|
+
2. **Review activity** — `chorus_get_activity()` for recent events
|
|
317
|
+
3. **Process proposals** — Review and approve/reject pending proposals
|
|
318
|
+
4. **Verify tasks** — Review and verify/reopen tasks in `to_verify`
|
|
319
|
+
5. **Create new ideas** — If the human has new requirements
|
|
320
|
+
6. **Check project health** — Stale tasks? Blocked items? Orphaned ideas?
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## Tips
|
|
325
|
+
|
|
326
|
+
- **Review thoroughly** — Don't rubber-stamp proposals; check quality
|
|
327
|
+
- **Give actionable feedback** — When rejecting, explain specifically what to fix
|
|
328
|
+
- **Verify against criteria** — Check acceptance criteria, not just the summary
|
|
329
|
+
- **Manage scope** — Close ideas and tasks that are no longer relevant
|
|
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
|
|
332
|
+
- **Document decisions** — Use comments to explain approval/rejection reasoning
|
|
333
|
+
- **Verify between waves** — In sequential wave execution, verify tasks to `done` between waves to unblock downstream dependencies
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Governance Principles
|
|
338
|
+
|
|
339
|
+
1. **Quality over speed** — A rejected proposal now saves rework later
|
|
340
|
+
2. **Actionable feedback** — Every rejection should include specific fixes
|
|
341
|
+
3. **Criteria-based verification** — Verify against acceptance criteria, not just subjective impression
|
|
342
|
+
4. **Scope discipline** — Close what's no longer needed, don't let orphaned items pile up
|
|
343
|
+
5. **Unblock others** — Your reviews are the bottleneck; prioritize them
|
|
344
|
+
6. **Preserve history** — Close > Delete; comments > silent actions
|
|
345
|
+
7. **Document reasoning** — Future agents will read your comments to understand decisions
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Next
|
|
350
|
+
|
|
351
|
+
- For platform overview and shared tools, see `/chorus`
|
|
352
|
+
- For Idea elaboration (before proposals), see `/idea`
|
|
353
|
+
- For Proposal creation (what you're reviewing), see `/proposal`
|
|
354
|
+
- For Developer workflow (what you're verifying), see `/develop`
|
|
@@ -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
|
+
```
|