@chorus-aidlc/chorus 0.9.2 → 0.9.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.
Files changed (227) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +187 -187
  3. package/.next/standalone/.next/app-path-routes-manifest.json +38 -38
  4. package/.next/standalone/.next/build-manifest.json +2 -2
  5. package/.next/standalone/.next/prerender-manifest.json +42 -42
  6. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  37. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  38. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  41. package/.next/standalone/.next/server/app/admin/companies/new.rsc +1 -1
  42. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  44. package/.next/standalone/.next/server/app/admin/companies.rsc +1 -1
  45. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/admin.html +1 -1
  47. package/.next/standalone/.next/server/app/admin.rsc +1 -1
  48. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  54. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  75. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/mcp/route.js +3 -3
  90. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  112. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  115. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  118. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  120. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  122. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  126. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  129. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  133. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  135. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  139. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  144. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  150. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  156. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  159. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/index.html +1 -1
  165. package/.next/standalone/.next/server/app/index.rsc +1 -1
  166. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  168. package/.next/standalone/.next/server/app/login/admin.rsc +1 -1
  169. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  171. package/.next/standalone/.next/server/app/login/callback.rsc +1 -1
  172. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  175. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +1 -1
  176. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  178. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +1 -1
  179. package/.next/standalone/.next/server/app/login.html +1 -1
  180. package/.next/standalone/.next/server/app/login.rsc +1 -1
  181. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  183. package/.next/standalone/.next/server/app/onboarding.rsc +1 -1
  184. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/projects.html +1 -1
  186. package/.next/standalone/.next/server/app/projects.rsc +1 -1
  187. package/.next/standalone/.next/server/app/settings.html +1 -1
  188. package/.next/standalone/.next/server/app/settings.rsc +1 -1
  189. package/.next/standalone/.next/server/app-paths-manifest.json +38 -38
  190. package/.next/standalone/.next/server/chunks/1165.js +1 -1
  191. package/.next/standalone/.next/server/chunks/7228.js +2 -2
  192. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  193. package/.next/standalone/.next/server/chunks/896.js +1 -0
  194. package/.next/standalone/.next/server/chunks/9508.js +2 -2
  195. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  196. package/.next/standalone/.next/server/pages/404.html +1 -1
  197. package/.next/standalone/.next/server/pages/500.html +1 -1
  198. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  200. package/.next/standalone/package.json +1 -1
  201. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  202. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  203. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
  204. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  205. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
  206. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  207. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +13 -4
  208. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +9 -4
  209. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  210. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +2 -2
  211. package/.next/standalone/public/install-codex.sh +200 -90
  212. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  213. package/.next/standalone/public/skill/chorus/SKILL.md +55 -3
  214. package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
  215. package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
  216. package/.next/standalone/public/skill/package.json +21 -5
  217. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +13 -4
  218. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +198 -0
  219. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +9 -4
  220. package/.next/standalone/public/skill/review-chorus/SKILL.md +13 -3
  221. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +219 -0
  222. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +529 -0
  223. package/.next/standalone/public/test-install-codex.sh +4 -0
  224. package/package.json +1 -1
  225. package/.next/standalone/.next/server/chunks/1002.js +0 -1
  226. /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → uuDSoqvm-WWenZQ6dXPT7}/_buildManifest.js +0 -0
  227. /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → uuDSoqvm-WWenZQ6dXPT7}/_ssgManifest.js +0 -0
@@ -14,8 +14,8 @@
14
14
  # [plugins."chorus@chorus-plugins"] enabled = true into ~/.codex/config.toml,
15
15
  # so Codex auto-enables the plugin on first launch (falls back to one-click
16
16
  # `/plugins → Install` if auto-install does not fire).
17
- # 4. Installs a lazy hook wrapper under ~/.codex/hooks/chorus/ so Chorus hooks
18
- # work even before the plugin cache is materialized.
17
+ # 4. Enables Codex lifecycle hooks. Chorus hook scripts are bundled in the
18
+ # plugin manifest and loaded by Codex after the plugin is installed/enabled.
19
19
 
20
20
  set -euo pipefail
21
21
 
@@ -35,6 +35,158 @@ CONFIG_TOML="$CODEX_HOME/config.toml"
35
35
 
36
36
  is_tty() { [ -t 0 ] && [ -t 1 ]; }
37
37
 
38
+ clean_legacy_chorus_hooks_json() {
39
+ local hooks_json="$1"
40
+ local tmp backup removed
41
+
42
+ tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-hooks.XXXXXX")"
43
+ backup="${hooks_json}.chorus-legacy-bak"
44
+ cp "$hooks_json" "$backup"
45
+
46
+ if command -v node >/dev/null 2>&1; then
47
+ removed="$(node - "$hooks_json" "$tmp" <<'NODE'
48
+ const fs = require("fs");
49
+ const input = process.argv[2];
50
+ const output = process.argv[3];
51
+ let removed = 0;
52
+
53
+ function isLegacyCommand(value) {
54
+ return typeof value === "string" && value.indexOf("hooks/chorus/run-hook.sh") !== -1;
55
+ }
56
+
57
+ function clean(value, parentKey) {
58
+ if (Array.isArray(value)) {
59
+ return value
60
+ .map((item) => clean(item, parentKey))
61
+ .filter((item) => item !== undefined);
62
+ }
63
+
64
+ if (value && typeof value === "object") {
65
+ if (isLegacyCommand(value.command)) {
66
+ removed += 1;
67
+ return undefined;
68
+ }
69
+
70
+ const hadHooksArray = Array.isArray(value.hooks);
71
+ const out = {};
72
+ for (const [key, child] of Object.entries(value)) {
73
+ const cleaned = clean(child, key);
74
+ if (cleaned === undefined) continue;
75
+ if (Array.isArray(cleaned) && cleaned.length === 0 && (key === "hooks" || parentKey === "hooks")) continue;
76
+ out[key] = cleaned;
77
+ }
78
+
79
+ if (hadHooksArray && (!Array.isArray(out.hooks) || out.hooks.length === 0)) {
80
+ return undefined;
81
+ }
82
+ return out;
83
+ }
84
+
85
+ return value;
86
+ }
87
+
88
+ let data = JSON.parse(fs.readFileSync(input, "utf8"));
89
+ data = clean(data, "") || {};
90
+ if (data.hooks && typeof data.hooks === "object" && !Array.isArray(data.hooks)) {
91
+ for (const key of Object.keys(data.hooks)) {
92
+ if (Array.isArray(data.hooks[key]) && data.hooks[key].length === 0) {
93
+ delete data.hooks[key];
94
+ }
95
+ }
96
+ if (Object.keys(data.hooks).length === 0) {
97
+ delete data.hooks;
98
+ }
99
+ }
100
+ fs.writeFileSync(output, JSON.stringify(data, null, 2) + "\n");
101
+ process.stdout.write(String(removed));
102
+ NODE
103
+ )" || {
104
+ rm -f "$tmp"
105
+ warn "Could not parse $hooks_json with node; leaving legacy hooks unchanged."
106
+ warn "Backup created at $backup"
107
+ return 1
108
+ }
109
+ elif command -v python3 >/dev/null 2>&1; then
110
+ removed="$(python3 - "$hooks_json" "$tmp" <<'PY'
111
+ import json
112
+ import sys
113
+
114
+ input_path = sys.argv[1]
115
+ output_path = sys.argv[2]
116
+ removed = 0
117
+
118
+ def is_legacy_command(value):
119
+ return isinstance(value, str) and "hooks/chorus/run-hook.sh" in value
120
+
121
+ def clean(value, parent_key=""):
122
+ global removed
123
+ if isinstance(value, list):
124
+ return [item for item in (clean(child, parent_key) for child in value) if item is not None]
125
+ if isinstance(value, dict):
126
+ if is_legacy_command(value.get("command")):
127
+ removed += 1
128
+ return None
129
+ had_hooks_array = isinstance(value.get("hooks"), list)
130
+ out = {}
131
+ for key, child in value.items():
132
+ cleaned = clean(child, key)
133
+ if cleaned is None:
134
+ continue
135
+ if isinstance(cleaned, list) and not cleaned and (key == "hooks" or parent_key == "hooks"):
136
+ continue
137
+ out[key] = cleaned
138
+ if had_hooks_array and (not isinstance(out.get("hooks"), list) or not out["hooks"]):
139
+ return None
140
+ return out
141
+ return value
142
+
143
+ with open(input_path, "r", encoding="utf-8") as f:
144
+ data = json.load(f)
145
+
146
+ data = clean(data) or {}
147
+ if isinstance(data.get("hooks"), dict):
148
+ for key in list(data["hooks"].keys()):
149
+ if isinstance(data["hooks"][key], list) and not data["hooks"][key]:
150
+ del data["hooks"][key]
151
+ if not data["hooks"]:
152
+ del data["hooks"]
153
+
154
+ with open(output_path, "w", encoding="utf-8") as f:
155
+ json.dump(data, f, indent=2)
156
+ f.write("\n")
157
+
158
+ print(removed, end="")
159
+ PY
160
+ )" || {
161
+ rm -f "$tmp"
162
+ warn "Could not parse $hooks_json with python3; leaving legacy hooks unchanged."
163
+ warn "Backup created at $backup"
164
+ return 1
165
+ }
166
+ else
167
+ rm -f "$tmp"
168
+ warn "Cannot auto-clean $hooks_json because neither node nor python3 is available."
169
+ warn "Backup created at $backup"
170
+ return 1
171
+ fi
172
+
173
+ if [ "${removed:-0}" = "0" ]; then
174
+ rm -f "$tmp"
175
+ warn "No legacy Chorus hook entries were removed from $hooks_json."
176
+ warn "Backup created at $backup"
177
+ return 1
178
+ fi
179
+
180
+ if grep -q '[^[:space:]{}]' "$tmp" 2>/dev/null; then
181
+ mv "$tmp" "$hooks_json"
182
+ ok "Removed $removed legacy Chorus hook entr$( [ "$removed" = "1" ] && printf 'y' || printf 'ies' ) from $hooks_json"
183
+ else
184
+ rm -f "$tmp" "$hooks_json"
185
+ ok "Removed $removed legacy Chorus hook entr$( [ "$removed" = "1" ] && printf 'y' || printf 'ies' ) and deleted now-empty $hooks_json"
186
+ fi
187
+ ok "Backup saved at $backup"
188
+ }
189
+
38
190
  # If piped through `curl | bash`, stdin is the script body. Re-open from /dev/tty
39
191
  # so interactive prompts still work — but only if a real TTY is available AND we
40
192
  # actually need to prompt for input. Both CHORUS_URL and CHORUS_API_KEY being set
@@ -181,104 +333,61 @@ TOML
181
333
 
182
334
  ok "Wrote [mcp_servers.chorus] and [plugins.\"chorus@chorus-plugins\"] → ${CONFIG_TOML}"
183
335
 
184
- # ---------- step 5: install hooks ----------
185
- hdr "5/5 Installing Chorus hooks"
336
+ # ---------- step 5: enable hooks ----------
337
+ hdr "5/5 Enabling Codex lifecycle hooks"
186
338
 
187
- # Install a tiny wrapper that lazily resolves the newest plugin cache at
188
- # hook-run time. This lets us write hooks.json BEFORE `/plugins → Install`
189
- # has materialized the plugin cache first-run UX becomes truly one-shot.
190
- WRAPPER_DIR="$CODEX_HOME/hooks/chorus"
191
- WRAPPER="$WRAPPER_DIR/run-hook.sh"
192
- mkdir -p "$WRAPPER_DIR"
193
- cat > "$WRAPPER" <<'WRAP'
194
- #!/usr/bin/env bash
195
- # Chorus hook wrapper (installed by public/install-codex.sh).
196
- # Resolves the newest installed Chorus plugin version at runtime and execs
197
- # the named hook script from its hooks/ directory. Exits 0 (no-op) if the
198
- # plugin has not been installed yet, so Codex sessions still start cleanly.
199
- set -eu
200
- HOOK_NAME="${1:-}"
201
- if [ -z "$HOOK_NAME" ]; then
202
- echo '{}' ; exit 0
203
- fi
204
- shift
205
- CODEX_HOME_RESOLVED="${CODEX_HOME:-$HOME/.codex}"
206
- PLUGIN_ROOT="$CODEX_HOME_RESOLVED/plugins/cache/chorus-plugins/chorus"
207
- if [ ! -d "$PLUGIN_ROOT" ]; then
208
- echo '{}' ; exit 0
209
- fi
210
- VER="$(ls -1 "$PLUGIN_ROOT" 2>/dev/null | sort -V | tail -1)"
211
- if [ -z "$VER" ]; then
212
- echo '{}' ; exit 0
213
- fi
214
- SCRIPT="$PLUGIN_ROOT/$VER/hooks/$HOOK_NAME"
215
- if [ ! -x "$SCRIPT" ]; then
216
- if [ -f "$SCRIPT" ]; then
217
- chmod +x "$SCRIPT" 2>/dev/null || true
339
+ HOOKS_JSON="$CODEX_HOME/hooks.json"
340
+ if [ -f "$HOOKS_JSON" ] && grep -q "hooks/chorus/run-hook.sh" "$HOOKS_JSON" 2>/dev/null; then
341
+ warn "Found legacy copied Chorus hook entries in $HOOKS_JSON."
342
+ warn "These can duplicate the plugin-bundled Chorus hooks now loaded by Codex."
343
+ warn "Legacy entries:"
344
+ grep -n "hooks/chorus/run-hook.sh" "$HOOKS_JSON" 2>/dev/null | sed 's/^/ /' >&2 || true
345
+
346
+ if [ -r /dev/tty ] && [ -w /dev/tty ]; then
347
+ printf " Clean legacy Chorus entries from %s now? [y/N]: " "$HOOKS_JSON" > /dev/tty
348
+ read -r clean_legacy_hooks_answer < /dev/tty
349
+ case "$clean_legacy_hooks_answer" in
350
+ y|Y|yes|YES|Yes)
351
+ clean_legacy_chorus_hooks_json "$HOOKS_JSON" || true
352
+ ;;
353
+ *)
354
+ warn "Keeping legacy hooks unchanged. Use /hooks to disable them or remove matching entries manually to avoid duplicates."
355
+ ;;
356
+ esac
218
357
  else
219
- echo '{}' ; exit 0
358
+ warn "No interactive TTY available; keeping legacy hooks unchanged."
359
+ warn "Re-run this installer in a terminal to auto-clean them, or remove matching entries manually."
220
360
  fi
221
361
  fi
222
- exec "$SCRIPT" "$@"
223
- WRAP
224
- chmod +x "$WRAPPER"
225
- ok "Installed hook wrapper → $WRAPPER"
226
362
 
227
- HOOKS_JSON="$CODEX_HOME/hooks.json"
228
- if [ -f "$HOOKS_JSON" ] && ! grep -q "hooks/chorus/run-hook.sh\|chorus-plugins/chorus" "$HOOKS_JSON" 2>/dev/null; then
229
- warn "Found a non-Chorus $HOOKS_JSON not overwriting."
230
- warn " Add Chorus hook entries manually (command = $WRAPPER on-session-start.sh | on-post-submit-proposal.sh | on-post-submit-for-verify.sh)."
231
- else
232
- cat > "$HOOKS_JSON" <<HJSON
233
- {
234
- "hooks": {
235
- "SessionStart": [
236
- {
237
- "matcher": "startup|resume|clear",
238
- "hooks": [
239
- { "type": "command", "command": "$WRAPPER on-session-start.sh", "timeout": 20, "statusMessage": "Chorus: checkin" }
240
- ]
241
- }
242
- ],
243
- "PostToolUse": [
244
- {
245
- "matcher": ".*chorus_pm_submit_proposal",
246
- "hooks": [
247
- { "type": "command", "command": "$WRAPPER on-post-submit-proposal.sh", "timeout": 10 }
248
- ]
249
- },
250
- {
251
- "matcher": ".*chorus_submit_for_verify",
252
- "hooks": [
253
- { "type": "command", "command": "$WRAPPER on-post-submit-for-verify.sh", "timeout": 10 }
254
- ]
255
- }
256
- ]
257
- }
258
- }
259
- HJSON
260
- ok "Wrote $HOOKS_JSON (routing through $WRAPPER)"
261
- fi
262
-
263
- # Enable the codex_hooks feature flag in config.toml (idempotent).
363
+ # Keep the current canonical feature key. `codex_hooks` is a deprecated alias;
364
+ # remove any old hook feature setting from [features] before writing `hooks = true`
365
+ # so reruns do not create duplicate TOML keys.
264
366
  if grep -qE "^\[features\]" "$CONFIG_TOML"; then
265
- if ! grep -qE "^codex_hooks\s*=\s*true" "$CONFIG_TOML"; then
266
- tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-features.XXXXXX")"
267
- awk '
268
- /^\[features\][[:space:]]*$/ { print; print "codex_hooks = true"; inserted=1; next }
269
- { print }
270
- ' "$CONFIG_TOML" > "$tmp" && mv "$tmp" "$CONFIG_TOML"
271
- ok "Added codex_hooks = true under existing [features]"
272
- else
273
- ok "codex_hooks feature flag already enabled"
274
- fi
367
+ tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-features.XXXXXX")"
368
+ awk '
369
+ /^\[features\][[:space:]]*$/ {
370
+ in_features = 1
371
+ print
372
+ print "hooks = true"
373
+ next
374
+ }
375
+ /^\[/ {
376
+ in_features = 0
377
+ }
378
+ in_features && /^[[:space:]]*(hooks|codex_hooks)[[:space:]]*=/ {
379
+ next
380
+ }
381
+ { print }
382
+ ' "$CONFIG_TOML" > "$tmp" && mv "$tmp" "$CONFIG_TOML"
383
+ ok "Set [features] hooks = true"
275
384
  else
276
385
  cat >> "$CONFIG_TOML" <<'TFEAT'
277
386
 
278
387
  [features]
279
- codex_hooks = true
388
+ hooks = true
280
389
  TFEAT
281
- ok "Appended [features] codex_hooks = true"
390
+ ok "Appended [features] hooks = true"
282
391
  fi
283
392
 
284
393
  # ---------- epilogue ----------
@@ -296,7 +405,8 @@ so one manual click is the fallback path).
296
405
 
297
406
  Verify anytime:
298
407
  ${BOLD}codex mcp list${RESET} # 'chorus' row, Auth = 'Bearer token'
299
- ${BOLD}codex features list${RESET} # codex_hooks + plugins both true
408
+ ${BOLD}codex features list${RESET} # hooks + plugins both true
409
+ ${BOLD}/hooks${RESET} # review/trust bundled Chorus hooks after launch
300
410
 
301
411
  Then in Codex type ${BOLD}\$chorus${RESET} (or \$develop, \$review, \$proposal, …) to
302
412
  activate a skill. To change your API key later, just re-run this installer.
@@ -4,7 +4,7 @@ description: Optional divergent-then-convergent dialogue for fuzzy ideas. Invoke
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.3"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -4,7 +4,7 @@ description: Chorus AI Agent collaboration platform — overview, common tools,
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.3"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -30,18 +30,28 @@ Skill files are hosted under the `<BASE_URL>/skill/` path.
30
30
  | **proposal-chorus** | Proposal creation, drafts, DAG, submission | `/skill/proposal-chorus/SKILL.md` |
31
31
  | **develop-chorus** | Task execution workflow | `/skill/develop-chorus/SKILL.md` |
32
32
  | **review-chorus** | Proposal approval, task verification, governance | `/skill/review-chorus/SKILL.md` |
33
+ | **quick-dev-chorus** | Lightweight direct-to-task workflow (skips Idea→Proposal) | `/skill/quick-dev-chorus/SKILL.md` |
34
+ | **brainstorm-chorus** | Optional divergent→convergent dialogue, prelude to elaboration | `/skill/brainstorm-chorus/SKILL.md` |
35
+ | **proposal-reviewer-chorus** | Read-only adversarial proposal reviewer (posts VERDICT) | `/skill/proposal-reviewer-chorus/SKILL.md` |
36
+ | **task-reviewer-chorus** | Read-only adversarial task reviewer (posts VERDICT) | `/skill/task-reviewer-chorus/SKILL.md` |
37
+ | **yolo-chorus** | Full-auto AI-DLC pipeline — prompt to done | `/skill/yolo-chorus/SKILL.md` |
33
38
  | **package.json** | Version & download metadata | `/skill/package.json` |
34
39
 
35
40
  ### Install (Claude Code, project-level)
36
41
 
37
42
  ```bash
38
43
  BASE_URL="<BASE_URL>"
39
- mkdir -p .claude/skills/chorus .claude/skills/idea-chorus .claude/skills/proposal-chorus .claude/skills/develop-chorus .claude/skills/review-chorus
44
+ mkdir -p .claude/skills/chorus .claude/skills/idea-chorus .claude/skills/proposal-chorus .claude/skills/develop-chorus .claude/skills/review-chorus .claude/skills/quick-dev-chorus .claude/skills/brainstorm-chorus .claude/skills/proposal-reviewer-chorus .claude/skills/task-reviewer-chorus .claude/skills/yolo-chorus
40
45
  curl -s $BASE_URL/skill/chorus/SKILL.md > .claude/skills/chorus/SKILL.md
41
46
  curl -s $BASE_URL/skill/idea-chorus/SKILL.md > .claude/skills/idea-chorus/SKILL.md
42
47
  curl -s $BASE_URL/skill/proposal-chorus/SKILL.md > .claude/skills/proposal-chorus/SKILL.md
43
48
  curl -s $BASE_URL/skill/develop-chorus/SKILL.md > .claude/skills/develop-chorus/SKILL.md
44
49
  curl -s $BASE_URL/skill/review-chorus/SKILL.md > .claude/skills/review-chorus/SKILL.md
50
+ curl -s $BASE_URL/skill/quick-dev-chorus/SKILL.md > .claude/skills/quick-dev-chorus/SKILL.md
51
+ curl -s $BASE_URL/skill/brainstorm-chorus/SKILL.md > .claude/skills/brainstorm-chorus/SKILL.md
52
+ curl -s $BASE_URL/skill/proposal-reviewer-chorus/SKILL.md > .claude/skills/proposal-reviewer-chorus/SKILL.md
53
+ curl -s $BASE_URL/skill/task-reviewer-chorus/SKILL.md > .claude/skills/task-reviewer-chorus/SKILL.md
54
+ curl -s $BASE_URL/skill/yolo-chorus/SKILL.md > .claude/skills/yolo-chorus/SKILL.md
45
55
  curl -s $BASE_URL/skill/package.json > .claude/skills/chorus/package.json
46
56
  ```
47
57
 
@@ -49,12 +59,17 @@ curl -s $BASE_URL/skill/package.json > .claude/skills/chorus/package.json
49
59
 
50
60
  ```bash
51
61
  BASE_URL="<BASE_URL>"
52
- mkdir -p ~/.moltbot/skills/chorus ~/.moltbot/skills/idea-chorus ~/.moltbot/skills/proposal-chorus ~/.moltbot/skills/develop-chorus ~/.moltbot/skills/review-chorus
62
+ mkdir -p ~/.moltbot/skills/chorus ~/.moltbot/skills/idea-chorus ~/.moltbot/skills/proposal-chorus ~/.moltbot/skills/develop-chorus ~/.moltbot/skills/review-chorus ~/.moltbot/skills/quick-dev-chorus ~/.moltbot/skills/brainstorm-chorus ~/.moltbot/skills/proposal-reviewer-chorus ~/.moltbot/skills/task-reviewer-chorus ~/.moltbot/skills/yolo-chorus
53
63
  curl -s $BASE_URL/skill/chorus/SKILL.md > ~/.moltbot/skills/chorus/SKILL.md
54
64
  curl -s $BASE_URL/skill/idea-chorus/SKILL.md > ~/.moltbot/skills/idea-chorus/SKILL.md
55
65
  curl -s $BASE_URL/skill/proposal-chorus/SKILL.md > ~/.moltbot/skills/proposal-chorus/SKILL.md
56
66
  curl -s $BASE_URL/skill/develop-chorus/SKILL.md > ~/.moltbot/skills/develop-chorus/SKILL.md
57
67
  curl -s $BASE_URL/skill/review-chorus/SKILL.md > ~/.moltbot/skills/review-chorus/SKILL.md
68
+ curl -s $BASE_URL/skill/quick-dev-chorus/SKILL.md > ~/.moltbot/skills/quick-dev-chorus/SKILL.md
69
+ curl -s $BASE_URL/skill/brainstorm-chorus/SKILL.md > ~/.moltbot/skills/brainstorm-chorus/SKILL.md
70
+ curl -s $BASE_URL/skill/proposal-reviewer-chorus/SKILL.md > ~/.moltbot/skills/proposal-reviewer-chorus/SKILL.md
71
+ curl -s $BASE_URL/skill/task-reviewer-chorus/SKILL.md > ~/.moltbot/skills/task-reviewer-chorus/SKILL.md
72
+ curl -s $BASE_URL/skill/yolo-chorus/SKILL.md > ~/.moltbot/skills/yolo-chorus/SKILL.md
58
73
  curl -s $BASE_URL/skill/package.json > ~/.moltbot/skills/chorus/package.json
59
74
  ```
60
75
 
@@ -385,17 +400,54 @@ approved --> draft (via revoke — cascade-closes tasks, deletes documents)
385
400
 
386
401
  ---
387
402
 
403
+ ## Independent Review
404
+
405
+ Chorus uses **independent, read-only adversarial reviewers** at two gates: before a proposal is approved, and before a task is verified. The reviewer's job is to find what is wrong — not to rubber-stamp. Its output is **advisory**: it informs the admin's decision but does not by itself approve, reject, verify, or reopen anything.
406
+
407
+ This is the **single canonical description** of the reviewer pattern. The `develop-chorus`, `review-chorus`, and `yolo-chorus` skills all point back here rather than redefining it.
408
+
409
+ ### The Pattern
410
+
411
+ 1. **Spawn a read-only sub-agent** that loads one of the two reviewer skills:
412
+ - `proposal-reviewer-chorus` (`<BASE_URL>/skill/proposal-reviewer-chorus/SKILL.md`) — for reviewing a **proposal** before approval. Pass it the `proposalUuid`.
413
+ - `task-reviewer-chorus` (`<BASE_URL>/skill/task-reviewer-chorus/SKILL.md`) — for reviewing a **task** before verification. Pass it the `taskUuid`.
414
+ 2. **The reviewer audits independently** and posts exactly **one** structured `VERDICT` comment on the proposal/task via `chorus_add_comment`. The comment ends with one literal verdict string: `VERDICT: PASS`, `VERDICT: PASS WITH NOTES`, or `VERDICT: FAIL`.
415
+ 3. **Read the verdict and act.** Fetch the comment with `chorus_get_comments({ targetType, targetUuid })`, read the BLOCKER / NOTE findings, then make the call:
416
+ - `PASS` / `PASS WITH NOTES` → proceed (approve the proposal / verify the task), addressing NOTEs at your discretion.
417
+ - `FAIL` → do **not** proceed; route the BLOCKERs back for a fix (reject/revise the proposal, or reopen/rework the task), then re-review.
418
+
419
+ > The verdict is advisory: even a `FAIL` does not block the admin, and a `PASS` does not auto-approve. A human/admin makes the final decision.
420
+
421
+ ### Spawn Mechanism Is Harness-Specific
422
+
423
+ How you spawn the read-only sub-agent depends on your agent harness — give it the reviewer skill plus the target UUID and instruct it to post a single VERDICT comment. Concrete examples:
424
+
425
+ - **Claude Code** — use the Task / Agent tool to launch a sub-agent that loads `task-reviewer-chorus` (or `proposal-reviewer-chorus`) and pass the `taskUuid` / `proposalUuid`.
426
+ - **Codex** — use `spawn_agent` with the reviewer skill and the target UUID.
427
+ - Other harnesses: use whatever sub-agent / sub-task primitive they expose.
428
+
429
+ ### Inline Self-Review Fallback
430
+
431
+ When sub-agents are **not** available in your harness, run the review inline yourself: load the relevant reviewer skill's procedure (`proposal-reviewer-chorus` or `task-reviewer-chorus`), audit the proposal/task against its checklist with the same adversarial posture, and post the single `VERDICT` comment yourself before acting on it. A same-agent self-review is weaker than a fresh independent reviewer, but it is far better than skipping the gate.
432
+
433
+ ---
434
+
388
435
  ## Skill Routing
389
436
 
390
437
  This is the core overview skill. For stage-specific workflows, download and read the appropriate skill:
391
438
 
392
439
  | Stage | Skill | Path |
393
440
  |-------|-------|------|
441
+ | **Overview** (this file) | `chorus` | `<BASE_URL>/skill/chorus/SKILL.md` |
394
442
  | **Quick Dev** | `quick-dev-chorus` | `<BASE_URL>/skill/quick-dev-chorus/SKILL.md` |
443
+ | **Brainstorm** | `brainstorm-chorus` | `<BASE_URL>/skill/brainstorm-chorus/SKILL.md` |
395
444
  | **Ideation** | `idea-chorus` | `<BASE_URL>/skill/idea-chorus/SKILL.md` |
396
445
  | **Planning** | `proposal-chorus` | `<BASE_URL>/skill/proposal-chorus/SKILL.md` |
397
446
  | **Development** | `develop-chorus` | `<BASE_URL>/skill/develop-chorus/SKILL.md` |
398
447
  | **Review** | `review-chorus` | `<BASE_URL>/skill/review-chorus/SKILL.md` |
448
+ | **Proposal Review** | `proposal-reviewer-chorus` | `<BASE_URL>/skill/proposal-reviewer-chorus/SKILL.md` |
449
+ | **Task Review** | `task-reviewer-chorus` | `<BASE_URL>/skill/task-reviewer-chorus/SKILL.md` |
450
+ | **Full-Auto** | `yolo-chorus` | `<BASE_URL>/skill/yolo-chorus/SKILL.md` |
399
451
 
400
452
  ### Getting Started
401
453
 
@@ -4,7 +4,7 @@ description: Chorus Development workflow — claim tasks, report work, self-chec
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.3"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -182,7 +182,7 @@ chorus_submit_for_verify({
182
182
 
183
183
  > `to_verify` does NOT unblock downstream tasks — only `done` (after admin verification) does.
184
184
 
185
- > **Review Agent:** After `chorus_submit_for_verify`, consider spawning `chorus:task-reviewer` an independent, read-only review agent that adversarially checks the implementation against AC and proposal documents. It posts a VERDICT comment on the task. Its result is advisory (does not block verification).
185
+ > **Independent Review:** After `chorus_submit_for_verify`, run an independent review of the task before it is verified. Spawn a read-only sub-agent that loads the `task-reviewer-chorus` skill (`<BASE_URL>/skill/task-reviewer-chorus/SKILL.md`), pass it the `taskUuid`, and let it post a single `VERDICT` comment (PASS / PASS WITH NOTES / FAIL) on the task; then read it with `chorus_get_comments` and act. The verdict is **advisory** (it does not block verification). The spawn mechanism is harness-specific, and an inline self-review fallback exists when sub-agents are unavailable — see the canonical **Independent Review** section in the `chorus` skill (`<BASE_URL>/skill/chorus/SKILL.md`) for the full pattern.
186
186
 
187
187
  ### Step 9: Handle Review Feedback
188
188
 
@@ -4,7 +4,7 @@ description: Chorus Idea workflow — claim ideas, run elaboration rounds, and p
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.3"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chorus-skill",
3
- "version": "0.3.1",
3
+ "version": "0.9.3",
4
4
  "description": "Chorus AI Agent collaboration platform skill. Supports PM, Developer, and Admin roles via MCP tools for the Idea-Proposal-Task workflow.",
5
5
  "author": "chorus",
6
6
  "license": "AGPL-3.0",
@@ -23,7 +23,12 @@
23
23
  "idea-chorus/SKILL.md": "/skill/idea-chorus/SKILL.md",
24
24
  "proposal-chorus/SKILL.md": "/skill/proposal-chorus/SKILL.md",
25
25
  "develop-chorus/SKILL.md": "/skill/develop-chorus/SKILL.md",
26
- "review-chorus/SKILL.md": "/skill/review-chorus/SKILL.md"
26
+ "review-chorus/SKILL.md": "/skill/review-chorus/SKILL.md",
27
+ "quick-dev-chorus/SKILL.md": "/skill/quick-dev-chorus/SKILL.md",
28
+ "brainstorm-chorus/SKILL.md": "/skill/brainstorm-chorus/SKILL.md",
29
+ "proposal-reviewer-chorus/SKILL.md": "/skill/proposal-reviewer-chorus/SKILL.md",
30
+ "task-reviewer-chorus/SKILL.md": "/skill/task-reviewer-chorus/SKILL.md",
31
+ "yolo-chorus/SKILL.md": "/skill/yolo-chorus/SKILL.md"
27
32
  },
28
33
  "requires": {
29
34
  "mcp": ["chorus"]
@@ -38,7 +43,10 @@
38
43
  "report work",
39
44
  "verify task",
40
45
  "approve proposal",
41
- "project management"
46
+ "project management",
47
+ "yolo",
48
+ "review agent",
49
+ "verify"
42
50
  ]
43
51
  },
44
52
  "moltbot": {
@@ -48,7 +56,12 @@
48
56
  "idea-chorus/SKILL.md": "/skill/idea-chorus/SKILL.md",
49
57
  "proposal-chorus/SKILL.md": "/skill/proposal-chorus/SKILL.md",
50
58
  "develop-chorus/SKILL.md": "/skill/develop-chorus/SKILL.md",
51
- "review-chorus/SKILL.md": "/skill/review-chorus/SKILL.md"
59
+ "review-chorus/SKILL.md": "/skill/review-chorus/SKILL.md",
60
+ "quick-dev-chorus/SKILL.md": "/skill/quick-dev-chorus/SKILL.md",
61
+ "brainstorm-chorus/SKILL.md": "/skill/brainstorm-chorus/SKILL.md",
62
+ "proposal-reviewer-chorus/SKILL.md": "/skill/proposal-reviewer-chorus/SKILL.md",
63
+ "task-reviewer-chorus/SKILL.md": "/skill/task-reviewer-chorus/SKILL.md",
64
+ "yolo-chorus/SKILL.md": "/skill/yolo-chorus/SKILL.md"
52
65
  },
53
66
  "requires": {
54
67
  "mcp": ["chorus"]
@@ -63,7 +76,10 @@
63
76
  "report work",
64
77
  "verify task",
65
78
  "approve proposal",
66
- "project management"
79
+ "project management",
80
+ "yolo",
81
+ "review agent",
82
+ "verify"
67
83
  ]
68
84
  }
69
85
  }
@@ -4,7 +4,7 @@ description: Chorus Proposal workflow — create proposals with document and tas
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.3"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -111,6 +111,8 @@ chorus_pm_add_document_draft({
111
111
 
112
112
  Add task drafts one at a time. The response returns the new draft's `draftUuid` — use it directly for `dependsOnDraftUuids` in subsequent drafts.
113
113
 
114
+ **`acceptanceCriteriaItems` is required** — every task draft must include at least one item with a non-blank `description`, or the call is rejected. Use the structured `acceptanceCriteriaItems` array (the legacy `acceptanceCriteria` Markdown string does not satisfy the requirement).
115
+
114
116
  ```
115
117
  # First task -> response includes { draftUuid, draftTitle }
116
118
  chorus_pm_add_task_draft({
@@ -119,7 +121,10 @@ chorus_pm_add_task_draft({
119
121
  description: "Detailed description of what to build...",
120
122
  priority: "high",
121
123
  storyPoints: 3,
122
- acceptanceCriteria: "- [ ] Criteria 1\n- [ ] Criteria 2"
124
+ acceptanceCriteriaItems: [
125
+ { description: "Criteria 1", required: true },
126
+ { description: "Criteria 2", required: true }
127
+ ]
123
128
  })
124
129
 
125
130
  # Second task — depends on first
@@ -129,11 +134,15 @@ chorus_pm_add_task_draft({
129
134
  description: "Unit and integration tests...",
130
135
  priority: "medium",
131
136
  storyPoints: 2,
132
- acceptanceCriteria: "- [ ] Test coverage > 80%",
137
+ acceptanceCriteriaItems: [
138
+ { description: "Test coverage > 80%", required: true }
139
+ ],
133
140
  dependsOnDraftUuids: ["<draftUuid-from-first-task>"]
134
141
  })
135
142
  ```
136
143
 
144
+ > To edit a draft's criteria later via `chorus_pm_update_task_draft`, pass a non-empty `acceptanceCriteriaItems` to replace them; omit the field to leave them unchanged. The field cannot be used to clear criteria.
145
+
137
146
  **Task priority:** `low`, `medium`, `high`
138
147
 
139
148
  ### Step 4: Review and Refine Drafts
@@ -302,7 +311,7 @@ Potential issues and how to address them.
302
311
 
303
312
  Good tasks are:
304
313
  - **Module-scoped** — One cohesive functional module per task, not a single function or file
305
- - **Testable** — Clear, cohesive acceptance criteria (max 6 items per task; group related checks into one criterion but list key coverage, e.g. "All tests pass: service layer unit tests, API integration tests, edge case handling")
314
+ - **Testable** — Clear, cohesive acceptance criteria are **required** on every task (at least one non-blank item; max 6; group related checks into one criterion but list key coverage, e.g. "All tests pass: service layer unit tests, API integration tests, edge case handling")
306
315
  - **Sized** — 1-8 story points (hours of agent work)
307
316
  - **Ordered** — Use `dependsOnDraftUuids` / `dependsOnTaskUuids` to express execution order
308
317
  - **Descriptive** — Include enough context for a developer agent to start without questions. For tasks with cross-module dependencies, reference the tech design's Module Contracts in the AC