oh-my-copilot 4.13.2 → 4.13.21

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 (311) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +1 -1
  4. package/bridge/cli.cjs +2522 -949
  5. package/bridge/mcp-server.cjs +97 -9
  6. package/bridge/runtime-cli.cjs +1256 -133
  7. package/bridge/team.js +1241 -65
  8. package/dist/__tests__/auto-slash-aliases.test.js +91 -0
  9. package/dist/__tests__/auto-slash-aliases.test.js.map +1 -1
  10. package/dist/__tests__/hud/labels.test.d.ts +2 -0
  11. package/dist/__tests__/hud/labels.test.d.ts.map +1 -0
  12. package/dist/__tests__/hud/labels.test.js +158 -0
  13. package/dist/__tests__/hud/labels.test.js.map +1 -0
  14. package/dist/__tests__/hud/render-rate-limits-priority.test.js +26 -0
  15. package/dist/__tests__/hud/render-rate-limits-priority.test.js.map +1 -1
  16. package/dist/__tests__/hud-marketplace-resolution.test.js +34 -0
  17. package/dist/__tests__/hud-marketplace-resolution.test.js.map +1 -1
  18. package/dist/__tests__/installer-hud-skip.test.js +6 -0
  19. package/dist/__tests__/installer-hud-skip.test.js.map +1 -1
  20. package/dist/__tests__/installer-omc-reference.test.js +1 -1
  21. package/dist/__tests__/installer-omc-reference.test.js.map +1 -1
  22. package/dist/__tests__/mnemosyne/detector.test.js +2 -0
  23. package/dist/__tests__/mnemosyne/detector.test.js.map +1 -1
  24. package/dist/__tests__/notepad.test.js +2 -2
  25. package/dist/__tests__/notepad.test.js.map +1 -1
  26. package/dist/__tests__/pre-tool-enforcer.test.js +84 -1
  27. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
  28. package/dist/__tests__/ralph-prd-mandatory.test.js +11 -1
  29. package/dist/__tests__/ralph-prd-mandatory.test.js.map +1 -1
  30. package/dist/__tests__/ralph-prd.test.js +40 -2
  31. package/dist/__tests__/ralph-prd.test.js.map +1 -1
  32. package/dist/__tests__/skills.test.js +363 -4
  33. package/dist/__tests__/skills.test.js.map +1 -1
  34. package/dist/__tests__/state-root-resolution.test.js +56 -6
  35. package/dist/__tests__/state-root-resolution.test.js.map +1 -1
  36. package/dist/autoresearch/__tests__/runtime.test.js +225 -28
  37. package/dist/autoresearch/__tests__/runtime.test.js.map +1 -1
  38. package/dist/autoresearch/runtime.d.ts.map +1 -1
  39. package/dist/autoresearch/runtime.js +9 -5
  40. package/dist/autoresearch/runtime.js.map +1 -1
  41. package/dist/cli/autoresearch.d.ts +1 -1
  42. package/dist/cli/autoresearch.d.ts.map +1 -1
  43. package/dist/cli/autoresearch.js +4 -4
  44. package/dist/cli/commands/team.d.ts +1 -0
  45. package/dist/cli/commands/team.d.ts.map +1 -1
  46. package/dist/cli/commands/team.js +14 -2
  47. package/dist/cli/commands/team.js.map +1 -1
  48. package/dist/cli/index.js +3 -0
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/cli/team.d.ts +6 -0
  51. package/dist/cli/team.d.ts.map +1 -1
  52. package/dist/cli/team.js +23 -1
  53. package/dist/cli/team.js.map +1 -1
  54. package/dist/config/__tests__/loader.test.js.map +1 -1
  55. package/dist/features/boulder-state/constants.d.ts +1 -1
  56. package/dist/features/boulder-state/constants.d.ts.map +1 -1
  57. package/dist/features/builtin-skills/skills.d.ts.map +1 -1
  58. package/dist/features/builtin-skills/skills.js +11 -3
  59. package/dist/features/builtin-skills/skills.js.map +1 -1
  60. package/dist/features/builtin-skills/types.d.ts +7 -0
  61. package/dist/features/builtin-skills/types.d.ts.map +1 -1
  62. package/dist/features/magic-keywords.d.ts.map +1 -1
  63. package/dist/features/magic-keywords.js +30 -1
  64. package/dist/features/magic-keywords.js.map +1 -1
  65. package/dist/features/rate-limit-wait/tmux-detector.d.ts +4 -4
  66. package/dist/features/rate-limit-wait/tmux-detector.js +9 -9
  67. package/dist/features/rate-limit-wait/tmux-detector.js.map +1 -1
  68. package/dist/hooks/__tests__/bridge-routing.test.js +156 -0
  69. package/dist/hooks/__tests__/bridge-routing.test.js.map +1 -1
  70. package/dist/hooks/auto-slash-command/constants.d.ts.map +1 -1
  71. package/dist/hooks/auto-slash-command/constants.js +1 -0
  72. package/dist/hooks/auto-slash-command/constants.js.map +1 -1
  73. package/dist/hooks/auto-slash-command/executor.d.ts.map +1 -1
  74. package/dist/hooks/auto-slash-command/executor.js +29 -0
  75. package/dist/hooks/auto-slash-command/executor.js.map +1 -1
  76. package/dist/hooks/bridge.d.ts.map +1 -1
  77. package/dist/hooks/bridge.js +184 -1
  78. package/dist/hooks/bridge.js.map +1 -1
  79. package/dist/hooks/learner/detector.js +1 -1
  80. package/dist/hooks/mode-registry/__tests__/session-isolation.test.js +16 -0
  81. package/dist/hooks/mode-registry/__tests__/session-isolation.test.js.map +1 -1
  82. package/dist/hooks/notepad/index.d.ts +4 -1
  83. package/dist/hooks/notepad/index.d.ts.map +1 -1
  84. package/dist/hooks/notepad/index.js +7 -4
  85. package/dist/hooks/notepad/index.js.map +1 -1
  86. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js +70 -3
  87. package/dist/hooks/persistent-mode/__tests__/ralph-verification-flow.test.js.map +1 -1
  88. package/dist/hooks/persistent-mode/index.d.ts.map +1 -1
  89. package/dist/hooks/persistent-mode/index.js +10 -9
  90. package/dist/hooks/persistent-mode/index.js.map +1 -1
  91. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js +64 -9
  92. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js.map +1 -1
  93. package/dist/hooks/project-memory/__tests__/integration.test.js +117 -3
  94. package/dist/hooks/project-memory/__tests__/integration.test.js.map +1 -1
  95. package/dist/hooks/project-memory/__tests__/storage.test.js +11 -11
  96. package/dist/hooks/project-memory/__tests__/storage.test.js.map +1 -1
  97. package/dist/hooks/project-memory/index.d.ts.map +1 -1
  98. package/dist/hooks/project-memory/index.js +24 -12
  99. package/dist/hooks/project-memory/index.js.map +1 -1
  100. package/dist/hooks/ralph/index.d.ts +1 -1
  101. package/dist/hooks/ralph/index.d.ts.map +1 -1
  102. package/dist/hooks/ralph/index.js +1 -1
  103. package/dist/hooks/ralph/index.js.map +1 -1
  104. package/dist/hooks/ralph/loop.d.ts +6 -6
  105. package/dist/hooks/ralph/loop.d.ts.map +1 -1
  106. package/dist/hooks/ralph/loop.js +18 -18
  107. package/dist/hooks/ralph/loop.js.map +1 -1
  108. package/dist/hooks/ralph/prd.d.ts +23 -12
  109. package/dist/hooks/ralph/prd.d.ts.map +1 -1
  110. package/dist/hooks/ralph/prd.js +88 -42
  111. package/dist/hooks/ralph/prd.js.map +1 -1
  112. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js +20 -0
  113. package/dist/hooks/session-end/__tests__/mode-state-cleanup.test.js.map +1 -1
  114. package/dist/hooks/session-end/index.d.ts +9 -0
  115. package/dist/hooks/session-end/index.d.ts.map +1 -1
  116. package/dist/hooks/session-end/index.js +67 -0
  117. package/dist/hooks/session-end/index.js.map +1 -1
  118. package/dist/hooks/skill-bridge.cjs +6 -5
  119. package/dist/hooks/skill-state/index.d.ts.map +1 -1
  120. package/dist/hooks/skill-state/index.js +1 -0
  121. package/dist/hooks/skill-state/index.js.map +1 -1
  122. package/dist/hud/__tests__/git-status.test.js +18 -0
  123. package/dist/hud/__tests__/git-status.test.js.map +1 -1
  124. package/dist/hud/elements/background.d.ts +3 -3
  125. package/dist/hud/elements/background.d.ts.map +1 -1
  126. package/dist/hud/elements/background.js +5 -4
  127. package/dist/hud/elements/background.js.map +1 -1
  128. package/dist/hud/elements/call-counts.d.ts +2 -2
  129. package/dist/hud/elements/call-counts.d.ts.map +1 -1
  130. package/dist/hud/elements/call-counts.js +7 -6
  131. package/dist/hud/elements/call-counts.js.map +1 -1
  132. package/dist/hud/elements/context.d.ts +3 -3
  133. package/dist/hud/elements/context.d.ts.map +1 -1
  134. package/dist/hud/elements/context.js +5 -4
  135. package/dist/hud/elements/context.js.map +1 -1
  136. package/dist/hud/elements/git.d.ts +2 -1
  137. package/dist/hud/elements/git.d.ts.map +1 -1
  138. package/dist/hud/elements/git.js +7 -6
  139. package/dist/hud/elements/git.js.map +1 -1
  140. package/dist/hud/elements/ralph.d.ts +2 -2
  141. package/dist/hud/elements/ralph.d.ts.map +1 -1
  142. package/dist/hud/elements/ralph.js +3 -2
  143. package/dist/hud/elements/ralph.js.map +1 -1
  144. package/dist/hud/elements/thinking.d.ts +2 -2
  145. package/dist/hud/elements/thinking.d.ts.map +1 -1
  146. package/dist/hud/elements/thinking.js +3 -2
  147. package/dist/hud/elements/thinking.js.map +1 -1
  148. package/dist/hud/elements/token-usage.d.ts +2 -2
  149. package/dist/hud/elements/token-usage.d.ts.map +1 -1
  150. package/dist/hud/elements/token-usage.js +3 -2
  151. package/dist/hud/elements/token-usage.js.map +1 -1
  152. package/dist/hud/render.d.ts.map +1 -1
  153. package/dist/hud/render.js +11 -10
  154. package/dist/hud/render.js.map +1 -1
  155. package/dist/hud/state.d.ts.map +1 -1
  156. package/dist/hud/state.js +18 -1
  157. package/dist/hud/state.js.map +1 -1
  158. package/dist/hud/types.d.ts +26 -0
  159. package/dist/hud/types.d.ts.map +1 -1
  160. package/dist/hud/types.js +58 -0
  161. package/dist/hud/types.js.map +1 -1
  162. package/dist/installer/__tests__/hud-cache-wrapper.test.d.ts +2 -0
  163. package/dist/installer/__tests__/hud-cache-wrapper.test.d.ts.map +1 -0
  164. package/dist/installer/__tests__/hud-cache-wrapper.test.js +235 -0
  165. package/dist/installer/__tests__/hud-cache-wrapper.test.js.map +1 -0
  166. package/dist/installer/__tests__/standalone-hook-reconcile.test.js +2 -0
  167. package/dist/installer/__tests__/standalone-hook-reconcile.test.js.map +1 -1
  168. package/dist/installer/index.d.ts.map +1 -1
  169. package/dist/installer/index.js +19 -7
  170. package/dist/installer/index.js.map +1 -1
  171. package/dist/lib/__tests__/worktree-paths.test.js +162 -39
  172. package/dist/lib/__tests__/worktree-paths.test.js.map +1 -1
  173. package/dist/lib/worktree-paths.d.ts +87 -9
  174. package/dist/lib/worktree-paths.d.ts.map +1 -1
  175. package/dist/lib/worktree-paths.js +209 -27
  176. package/dist/lib/worktree-paths.js.map +1 -1
  177. package/dist/team/__tests__/auto-merge-restart.test.d.ts +2 -0
  178. package/dist/team/__tests__/auto-merge-restart.test.d.ts.map +1 -0
  179. package/dist/team/__tests__/auto-merge-restart.test.js +128 -0
  180. package/dist/team/__tests__/auto-merge-restart.test.js.map +1 -0
  181. package/dist/team/__tests__/auto-merge.perf.test.d.ts +2 -0
  182. package/dist/team/__tests__/auto-merge.perf.test.d.ts.map +1 -0
  183. package/dist/team/__tests__/auto-merge.perf.test.js +85 -0
  184. package/dist/team/__tests__/auto-merge.perf.test.js.map +1 -0
  185. package/dist/team/__tests__/conflict-mailbox.test.d.ts +2 -0
  186. package/dist/team/__tests__/conflict-mailbox.test.d.ts.map +1 -0
  187. package/dist/team/__tests__/conflict-mailbox.test.js +238 -0
  188. package/dist/team/__tests__/conflict-mailbox.test.js.map +1 -0
  189. package/dist/team/__tests__/helpers/git-fixture.d.ts +72 -0
  190. package/dist/team/__tests__/helpers/git-fixture.d.ts.map +1 -0
  191. package/dist/team/__tests__/helpers/git-fixture.js +252 -0
  192. package/dist/team/__tests__/helpers/git-fixture.js.map +1 -0
  193. package/dist/team/__tests__/leader-inbox.test.d.ts +2 -0
  194. package/dist/team/__tests__/leader-inbox.test.d.ts.map +1 -0
  195. package/dist/team/__tests__/leader-inbox.test.js +152 -0
  196. package/dist/team/__tests__/leader-inbox.test.js.map +1 -0
  197. package/dist/team/__tests__/merge-orchestrator.test.d.ts +2 -0
  198. package/dist/team/__tests__/merge-orchestrator.test.d.ts.map +1 -0
  199. package/dist/team/__tests__/merge-orchestrator.test.js +779 -0
  200. package/dist/team/__tests__/merge-orchestrator.test.js.map +1 -0
  201. package/dist/team/__tests__/rebase-smoke.test.d.ts +2 -0
  202. package/dist/team/__tests__/rebase-smoke.test.d.ts.map +1 -0
  203. package/dist/team/__tests__/rebase-smoke.test.js +272 -0
  204. package/dist/team/__tests__/rebase-smoke.test.js.map +1 -0
  205. package/dist/team/__tests__/runtime-cli.test.js +9 -1
  206. package/dist/team/__tests__/runtime-cli.test.js.map +1 -1
  207. package/dist/team/__tests__/runtime-v2.dispatch.test.js +150 -1
  208. package/dist/team/__tests__/runtime-v2.dispatch.test.js.map +1 -1
  209. package/dist/team/__tests__/teardown-invariant.test.d.ts +2 -0
  210. package/dist/team/__tests__/teardown-invariant.test.d.ts.map +1 -0
  211. package/dist/team/__tests__/teardown-invariant.test.js +176 -0
  212. package/dist/team/__tests__/teardown-invariant.test.js.map +1 -0
  213. package/dist/team/__tests__/worker-commit-cadence.test.d.ts +2 -0
  214. package/dist/team/__tests__/worker-commit-cadence.test.d.ts.map +1 -0
  215. package/dist/team/__tests__/worker-commit-cadence.test.js +315 -0
  216. package/dist/team/__tests__/worker-commit-cadence.test.js.map +1 -0
  217. package/dist/team/__tests__/worktree-runtime-e2e.test.d.ts +2 -0
  218. package/dist/team/__tests__/worktree-runtime-e2e.test.d.ts.map +1 -0
  219. package/dist/team/__tests__/worktree-runtime-e2e.test.js +182 -0
  220. package/dist/team/__tests__/worktree-runtime-e2e.test.js.map +1 -0
  221. package/dist/team/conflict-mailbox.d.ts +49 -0
  222. package/dist/team/conflict-mailbox.d.ts.map +1 -0
  223. package/dist/team/conflict-mailbox.js +98 -0
  224. package/dist/team/conflict-mailbox.js.map +1 -0
  225. package/dist/team/leader-inbox.d.ts +28 -0
  226. package/dist/team/leader-inbox.d.ts.map +1 -0
  227. package/dist/team/leader-inbox.js +68 -0
  228. package/dist/team/leader-inbox.js.map +1 -0
  229. package/dist/team/merge-coordinator.d.ts +6 -0
  230. package/dist/team/merge-coordinator.d.ts.map +1 -1
  231. package/dist/team/merge-coordinator.js +6 -2
  232. package/dist/team/merge-coordinator.js.map +1 -1
  233. package/dist/team/merge-orchestrator.d.ts +41 -0
  234. package/dist/team/merge-orchestrator.d.ts.map +1 -0
  235. package/dist/team/merge-orchestrator.js +736 -0
  236. package/dist/team/merge-orchestrator.js.map +1 -0
  237. package/dist/team/runtime-cli.d.ts +1 -0
  238. package/dist/team/runtime-cli.d.ts.map +1 -1
  239. package/dist/team/runtime-cli.js +15 -2
  240. package/dist/team/runtime-cli.js.map +1 -1
  241. package/dist/team/runtime-flags.d.ts +5 -0
  242. package/dist/team/runtime-flags.d.ts.map +1 -0
  243. package/dist/team/runtime-flags.js +12 -0
  244. package/dist/team/runtime-flags.js.map +1 -0
  245. package/dist/team/runtime-v2.d.ts +7 -1
  246. package/dist/team/runtime-v2.d.ts.map +1 -1
  247. package/dist/team/runtime-v2.js +185 -8
  248. package/dist/team/runtime-v2.js.map +1 -1
  249. package/dist/team/worker-bootstrap.d.ts +4 -0
  250. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  251. package/dist/team/worker-bootstrap.js +10 -1
  252. package/dist/team/worker-bootstrap.js.map +1 -1
  253. package/dist/team/worker-commit-cadence.d.ts +70 -0
  254. package/dist/team/worker-commit-cadence.d.ts.map +1 -0
  255. package/dist/team/worker-commit-cadence.js +271 -0
  256. package/dist/team/worker-commit-cadence.js.map +1 -0
  257. package/dist/tools/__tests__/memory-tools.test.js +4 -4
  258. package/dist/tools/__tests__/memory-tools.test.js.map +1 -1
  259. package/dist/tools/__tests__/state-tools.test.js +13 -1
  260. package/dist/tools/__tests__/state-tools.test.js.map +1 -1
  261. package/docs/GETTING-STARTED.md +415 -0
  262. package/docs/MIGRATION.md +66 -66
  263. package/docs/REFERENCE.md +21 -4
  264. package/docs/company-context-interface.md +5 -16
  265. package/docs/copilot-instructions.md +1 -1
  266. package/package.json +1 -1
  267. package/scripts/lib/hud-cache-wrapper.sh +122 -0
  268. package/scripts/plugin-setup.mjs +10 -1
  269. package/scripts/post-tool-verifier.mjs +118 -5
  270. package/scripts/pre-tool-enforcer.mjs +54 -6
  271. package/scripts/session-start.mjs +171 -3
  272. package/skills/AGENTS.md +22 -91
  273. package/skills/ai-slop-cleaner/SKILL.md +118 -120
  274. package/skills/ask/SKILL.md +6 -8
  275. package/skills/autopilot/SKILL.md +1 -28
  276. package/skills/autoresearch/SKILL.md +5 -5
  277. package/skills/cancel/SKILL.md +13 -13
  278. package/skills/cccg/SKILL.md +1 -0
  279. package/skills/configure-notifications/SKILL.md +80 -215
  280. package/skills/debug/SKILL.md +3 -2
  281. package/skills/deep-dive/SKILL.md +20 -9
  282. package/skills/deep-interview/SKILL.md +32 -4
  283. package/skills/deepinit/SKILL.md +1 -0
  284. package/skills/external-context/SKILL.md +2 -1
  285. package/skills/hud/SKILL.md +22 -52
  286. package/skills/learner/SKILL.md +90 -57
  287. package/skills/mcp-setup/SKILL.md +45 -60
  288. package/skills/omc-doctor/SKILL.md +1 -1
  289. package/skills/omc-reference/SKILL.md +6 -6
  290. package/skills/omc-setup/SKILL.md +30 -74
  291. package/skills/omc-setup/phases/01-install-claude-md.md +97 -0
  292. package/skills/omc-setup/phases/02-configure.md +25 -40
  293. package/skills/omc-setup/phases/03-integrations.md +100 -69
  294. package/skills/omc-setup/phases/04-welcome.md +102 -44
  295. package/skills/omc-teams/SKILL.md +63 -26
  296. package/skills/plan/SKILL.md +11 -9
  297. package/skills/ralph/SKILL.md +42 -41
  298. package/skills/ralplan/SKILL.md +3 -10
  299. package/skills/release/SKILL.md +168 -57
  300. package/skills/remember/SKILL.md +2 -1
  301. package/skills/sciomc/SKILL.md +12 -11
  302. package/skills/self-improve/SKILL.md +4 -4
  303. package/skills/setup/SKILL.md +1 -0
  304. package/skills/skill/SKILL.md +21 -20
  305. package/skills/skillify/SKILL.md +34 -3
  306. package/skills/team/SKILL.md +62 -44
  307. package/skills/ultraqa/SKILL.md +1 -2
  308. package/skills/ultrawork/SKILL.md +28 -21
  309. package/skills/verify/SKILL.md +2 -1
  310. package/skills/writer-memory/SKILL.md +2 -1
  311. package/templates/hooks/pre-tool-use.mjs +144 -45
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  name: team
3
- description: N coordinated agents on shared task list using Copilot CLI native teams
3
+ description: N coordinated agents on shared task list using Claude Code native teams
4
4
  argument-hint: "[N:agent-type] [ralph] <task description>"
5
5
  aliases: []
6
+ level: 4
6
7
  ---
7
8
 
8
9
  # Team Skill
9
10
 
10
- Spawn N coordinated agents working on a shared task list using Copilot CLI's native team tools. Replaces the legacy `/swarm` skill (SQLite-based) with built-in team management, inter-agent messaging, and task dependencies -- no external dependencies required.
11
+ Spawn N coordinated agents working on a shared task list using Claude Code's native team tools. Replaces the legacy `/swarm` skill (SQLite-based) with built-in team management, inter-agent messaging, and task dependencies -- no external dependencies required.
11
12
 
12
13
  The `swarm` compatibility alias was removed in #1131.
13
14
 
@@ -38,7 +39,7 @@ The `swarm` compatibility alias was removed in #1131.
38
39
  /team 2:codex "review architecture and suggest improvements"
39
40
  # With Gemini CLI workers (requires: npm install -g @google/gemini-cli)
40
41
  /team 2:gemini "redesign the UI components"
41
- # Mixed: Codex for backend analysis, Gemini for frontend (use /cccg instead for this)
42
+ # Mixed: Codex for backend analysis, Gemini for frontend (use /ccg instead for this)
42
43
  ```
43
44
 
44
45
  ## Architecture
@@ -76,9 +77,9 @@ User: "/team 3:executor fix all TypeScript errors"
76
77
  -> rm .omcp/state/team-state.json
77
78
  ```
78
79
 
79
- **Storage layout (managed by Copilot CLI):**
80
+ **Storage layout (managed by Claude Code):**
80
81
  ```
81
- ~/.copilot/
82
+ ~/.claude/
82
83
  teams/fix-ts-errors/
83
84
  config.json # Team metadata + members array
84
85
  tasks/fix-ts-errors/
@@ -110,7 +111,7 @@ Each pipeline stage uses **specialized agents** -- not just executors. The lead
110
111
  **Routing rules:**
111
112
 
112
113
  1. **The lead picks agents per stage, not the user.** The user's `N:agent-type` parameter only overrides the `team-exec` stage worker type. All other stages use stage-appropriate specialists.
113
- 2. **Specialist agents complement executor agents.** Route analysis/review to architect/critic Copilot agents and UI work to designer agents. Tmux CLI workers are one-shot and don't participate in team communication.
114
+ 2. **Specialist agents complement executor agents.** Route analysis/review to architect/critic Claude agents and UI work to designer agents. Tmux CLI workers are one-shot and don't participate in team communication.
114
115
  3. **Cost mode affects model tier.** In downgrade: `opus` agents to `sonnet`, `sonnet` to `haiku` where quality permits. `team-verify` always uses at least `sonnet`.
115
116
  4. **Risk level escalates review.** Security-sensitive or >20 file changes must include `security-reviewer` + `code-reviewer` (opus) in `team-verify`.
116
117
 
@@ -221,7 +222,7 @@ Call `TeamCreate` with a slug derived from the task:
221
222
  ```json
222
223
  {
223
224
  "team_name": "fix-ts-errors",
224
- "team_file_path": "~/.copilot/teams/fix-ts-errors/config.json",
225
+ "team_file_path": "~/.claude/teams/fix-ts-errors/config.json",
225
226
  "lead_agent_id": "team-lead@fix-ts-errors"
226
227
  }
227
228
  ```
@@ -477,7 +478,7 @@ Do NOT mark the task as completed. Leave it in_progress so the lead can reassign
477
478
  == RULES ==
478
479
  - NEVER spawn sub-agents or use the Task tool
479
480
  - NEVER run tmux pane/session orchestration commands (for example `tmux split-window`, `tmux new-session`)
480
- - NEVER run team spawning/orchestration skills or commands (for example `$team`, `$ultrawork`, `$autopilot`, `$ralph`, `omcp team ...`, `omx team ...`)
481
+ - NEVER run team spawning/orchestration skills or commands (for example `$team`, `$ultrawork`, `$autopilot`, `$ralph`, `omc team ...`, `omx team ...`)
481
482
  - ALWAYS use absolute file paths
482
483
  - ALWAYS report progress via SendMessage to "team-lead"
483
484
  - Use SendMessage with type "message" only -- never "broadcast"
@@ -488,7 +489,7 @@ Do NOT mark the task as completed. Leave it in_progress so the lead can reassign
488
489
  When composing teammate prompts, append a short addendum based on worker type:
489
490
 
490
491
  - `claude_worker`: Emphasize strict TaskList/TaskUpdate/SendMessage loop and no orchestration commands.
491
- - `codex_worker`: Emphasize CLI API lifecycle (`omcp team api ... --json`) and explicit failure ACKs with stderr.
492
+ - `codex_worker`: Emphasize CLI API lifecycle (`omc team api ... --json`) and explicit failure ACKs with stderr.
492
493
  - `gemini_worker`: Emphasize bounded file ownership and milestone ACKs after each completed sub-step.
493
494
 
494
495
  This addendum must preserve the core rule: **worker = executor only, never leader/orchestrator**.
@@ -575,7 +576,7 @@ After approval:
575
576
 
576
577
  Check for agent processes that survived TeamDelete:
577
578
  ```bash
578
- node "${PLUGIN_ROOT}/scripts/cleanup-orphans.mjs" --team-name fix-ts-errors
579
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/cleanup-orphans.mjs" --team-name fix-ts-errors
579
580
  ```
580
581
 
581
582
  This scans for processes matching the team name whose config no longer exists, and terminates them (SIGTERM → 5s wait → SIGKILL). Supports `--dry-run` for inspection.
@@ -588,7 +589,7 @@ This scans for processes matching the team name whose config no longer exists, a
588
589
 
589
590
  ## CLI Workers (Codex and Gemini)
590
591
 
591
- The team skill supports **hybrid execution** combining Copilot agent teammates with external CLI workers (Codex CLI and Gemini CLI). Both types can make code changes -- they differ in capabilities and cost. These are standalone CLI tools, not MCP servers.
592
+ The team skill supports **hybrid execution** combining Claude agent teammates with external CLI workers (Codex CLI and Gemini CLI). Both types can make code changes -- they differ in capabilities and cost. These are standalone CLI tools, not MCP servers.
592
593
 
593
594
  ### Execution Modes
594
595
 
@@ -596,7 +597,7 @@ Tasks are tagged with an execution mode during decomposition:
596
597
 
597
598
  | Execution Mode | Provider | Capabilities |
598
599
  |---------------|----------|-------------|
599
- | `claude_worker` | Copilot agent | Full Copilot CLI tool access (Read/Write/Edit/Bash/Task). Best for tasks needing Copilot's reasoning + iterative tool use. |
600
+ | `claude_worker` | Claude agent | Full Claude Code tool access (Read/Write/Edit/Bash/Task). Best for tasks needing Claude's reasoning + iterative tool use. |
600
601
  | `codex_worker` | Codex CLI (tmux pane) | Full filesystem access in working_directory. Runs autonomously via tmux pane. Best for code review, security analysis, refactoring, architecture. Requires `npm install -g @openai/codex`. |
601
602
  | `gemini_worker` | Gemini CLI (tmux pane) | Full filesystem access in working_directory. Runs autonomously via tmux pane. Best for UI/design work, documentation, large-context tasks. Requires `npm install -g @google/gemini-cli`. |
602
603
 
@@ -610,8 +611,8 @@ Tmux CLI workers run in dedicated tmux panes with filesystem access. They are **
610
611
  4. Results/summary are written to an output file
611
612
  5. Lead reads the output, marks the task complete, and feeds results to dependent tasks
612
613
 
613
- **Key difference from Copilot teammates:**
614
- - CLI workers operate via tmux, not Copilot CLI's tool system
614
+ **Key difference from Claude teammates:**
615
+ - CLI workers operate via tmux, not Claude Code's tool system
615
616
  - They cannot use TaskList/TaskUpdate/SendMessage (no team awareness)
616
617
  - They run as one-shot autonomous jobs, not persistent teammates
617
618
  - The lead manages their lifecycle (spawn, monitor, collect results)
@@ -620,14 +621,14 @@ Tmux CLI workers run in dedicated tmux panes with filesystem access. They are **
620
621
 
621
622
  | Task Type | Best Route | Why |
622
623
  |-----------|-----------|-----|
623
- | Iterative multi-step work | Copilot teammate | Needs tool-mediated iteration + team communication |
624
+ | Iterative multi-step work | Claude teammate | Needs tool-mediated iteration + team communication |
624
625
  | Code review / security audit | CLI worker or specialist agent | Autonomous execution, good at structured analysis |
625
- | Architecture analysis / planning | architect Copilot agent | Strong analytical reasoning with codebase access |
626
+ | Architecture analysis / planning | architect Claude agent | Strong analytical reasoning with codebase access |
626
627
  | Refactoring (well-scoped) | CLI worker or executor agent | Autonomous execution, good at structured transforms |
627
- | UI/frontend implementation | designer Copilot agent | Design expertise, framework idioms |
628
- | Large-scale documentation | writer Copilot agent | Writing expertise + large context for consistency |
629
- | Build/test iteration loops | Copilot teammate | Needs Bash tool + iterative fix cycles |
630
- | Tasks needing team coordination | Copilot teammate | Needs SendMessage for status updates |
628
+ | UI/frontend implementation | designer Claude agent | Design expertise, framework idioms |
629
+ | Large-scale documentation | writer Claude agent | Writing expertise + large context for consistency |
630
+ | Build/test iteration loops | Claude teammate | Needs Bash tool + iterative fix cycles |
631
+ | Tasks needing team coordination | Claude teammate | Needs SendMessage for status updates |
631
632
 
632
633
  ### Example: Hybrid Team with CLI Workers
633
634
 
@@ -642,13 +643,13 @@ Task decomposition:
642
643
  #5 [gemini_worker] Final code review of all changes
643
644
  ```
644
645
 
645
- The lead runs #1 (Codex security analysis), then #2 and #3 in parallel (Codex refactors backend, designer agent redesigns frontend), then #4 (Copilot teammate handles test iteration), then #5 (Gemini final review).
646
+ The lead runs #1 (Codex security analysis), then #2 and #3 in parallel (Codex refactors backend, designer agent redesigns frontend), then #4 (Claude teammate handles test iteration), then #5 (Gemini final review).
646
647
 
647
648
  ### Pre-flight Analysis (Optional)
648
649
 
649
650
  For large ambiguous tasks, run analysis before team creation:
650
651
 
651
- 1. Spawn `Task(subagent_type="oh-my-copilot:planner", name="planner-1", ...)` with task description + codebase context
652
+ 1. Spawn `Task(subagent_type="oh-my-copilot:planner", ...)` with task description + codebase context
652
653
  2. Use the analysis to produce better task decomposition
653
654
  3. Create team and tasks with enriched context
654
655
 
@@ -712,18 +713,7 @@ if (status.taskSummary.pending === 0 && status.taskSummary.inProgress === 0) {
712
713
  | `shutdown_ack` | Worker acknowledged shutdown -- safe to remove from team |
713
714
  | `heartbeat` | Update liveness tracking (redundant with heartbeat files but useful for latency monitoring) |
714
715
 
715
- This approach complements the existing `SendMessage`-based communication by providing a pull-based mechanism for MCP workers that cannot use Copilot CLI's team messaging tools.
716
-
717
- ## Failure Recovery
718
-
719
- When a teammate agent fails, the structured recovery manager classifies the failure and determines the action:
720
- - **rate_limited**: Retry with exponential backoff
721
- - **auth_failure**: Escalate immediately (needs user credentials/permissions)
722
- - **build_error**: Retry with additional context about the error
723
- - **circular_fix**: Stop retrying and generate escalation report
724
- - **unknown**: Retry up to 3 times, then escalate
725
-
726
- The recovery manager integrates with the circular fix detector — if the same error recurs 3+ times across iterations, it escalates rather than continuing to retry.
716
+ This approach complements the existing `SendMessage`-based communication by providing a pull-based mechanism for MCP workers that cannot use Claude Code's team messaging tools.
727
717
 
728
718
  ## Error Handling
729
719
 
@@ -822,13 +812,13 @@ This prevents duplicate teams and allows graceful recovery from lead failures.
822
812
 
823
813
  | Aspect | Team (Native) | Swarm (Legacy SQLite) |
824
814
  |--------|--------------|----------------------|
825
- | **Storage** | JSON files in `~/.copilot/teams/` and `~/.copilot/tasks/` | SQLite in `.omcp/state/swarm.db` |
815
+ | **Storage** | JSON files in `~/.claude/teams/` and `~/.claude/tasks/` | SQLite in `.omcp/state/swarm.db` |
826
816
  | **Dependencies** | `better-sqlite3` not needed | Requires `better-sqlite3` npm package |
827
817
  | **Task claiming** | `TaskUpdate(owner + in_progress)` -- lead pre-assigns | SQLite IMMEDIATE transaction -- atomic |
828
818
  | **Race conditions** | Possible if two agents claim same task (mitigate by pre-assigning) | None (SQLite transactions) |
829
819
  | **Communication** | `SendMessage` (DM, broadcast, shutdown) | None (fire-and-forget agents) |
830
820
  | **Task dependencies** | Built-in `blocks` / `blockedBy` arrays | Not supported |
831
- | **Heartbeat** | Automatic idle notifications from Copilot CLI | Manual heartbeat table + polling |
821
+ | **Heartbeat** | Automatic idle notifications from Claude Code | Manual heartbeat table + polling |
832
822
  | **Shutdown** | Graceful request/response protocol | Signal-based termination |
833
823
  | **Agent lifecycle** | Auto-tracked via internal tasks + config members | Manual tracking via heartbeat table |
834
824
  | **Progress visibility** | `TaskList` shows live status with owner | SQL queries on tasks table |
@@ -836,7 +826,7 @@ This prevents duplicate teams and allows graceful recovery from lead failures.
836
826
  | **Crash recovery** | Lead detects via missing messages, reassigns | Auto-release after 5-min lease timeout |
837
827
  | **State cleanup** | `TeamDelete` removes everything | Manual `rm` of SQLite database |
838
828
 
839
- **When to use Team over Swarm:** Always prefer `/team` for new work. It uses Copilot CLI's built-in infrastructure, requires no external dependencies, supports inter-agent communication, and has task dependency management.
829
+ **When to use Team over Swarm:** Always prefer `/team` for new work. It uses Claude Code's built-in infrastructure, requires no external dependencies, supports inter-agent communication, and has task dependency management.
840
830
 
841
831
  ## Cancellation
842
832
 
@@ -857,7 +847,7 @@ When team is linked to ralph, cancellation follows dependency order:
857
847
  - **Cancel triggered from Team context:** Clear Team state, then mark Ralph as cancelled. Ralph's stop hook will detect the missing team and stop iterating.
858
848
  - **Force cancel (`--force`):** Clears both `team` and `ralph` state unconditionally via `state_clear`.
859
849
 
860
- If teammates are unresponsive, `TeamDelete` may fail. In that case, the cancel skill should wait briefly and retry, or inform the user to manually clean up `~/.copilot/teams/{team_name}/` and `~/.copilot/tasks/{team_name}/`.
850
+ If teammates are unresponsive, `TeamDelete` may fail. In that case, the cancel skill should wait briefly and retry, or inform the user to manually clean up `~/.claude/teams/{team_name}/` and `~/.claude/tasks/{team_name}/`.
861
851
 
862
852
  ## Runtime V2 (Event-Driven)
863
853
 
@@ -882,7 +872,7 @@ When `OMC_TEAM_SCALING_ENABLED=1` is set, the team supports mid-session scaling:
882
872
 
883
873
  ## Configuration
884
874
 
885
- Optional settings live in `.copilot/omg.jsonc` (project) or `~/.config/copilot-omg/config.jsonc` (user). Project values override user values; `OMCP_TEAM_ROLE_OVERRIDES` (env JSON) supersedes both.
875
+ Optional settings live in `.copilot/omg.jsonc` (project) or `~/.config/copilot-omg/config.jsonc` (user). Project values override user values; `OMC_TEAM_ROLE_OVERRIDES` (env JSON) supersedes both.
886
876
 
887
877
  ```jsonc
888
878
  {
@@ -902,7 +892,7 @@ Optional settings live in `.copilot/omg.jsonc` (project) or `~/.config/copilot-o
902
892
  - **ops.monitorIntervalMs** - How often to poll `TaskList` (default: 30s)
903
893
  - **ops.shutdownTimeoutMs** - How long to wait for shutdown responses (default: 15s)
904
894
 
905
- > **Note:** Team members do not have a hardcoded model default. Each teammate is a separate Copilot CLI session that inherits the user's configured model. Since teammates can spawn their own subagents, the session model acts as the orchestration layer while subagents can use any model tier.
895
+ > **Note:** Team members do not have a hardcoded model default. Each teammate is a separate Claude Code session that inherits the user's configured model. Since teammates can spawn their own subagents, the session model acts as the orchestration layer while subagents can use any model tier.
906
896
 
907
897
  ## Per-Role Provider & Model Routing
908
898
 
@@ -945,13 +935,41 @@ Declare which provider (`claude`, `codex`, `gemini`) and which model tier should
945
935
 
946
936
  User-friendly aliases normalize via `normalizeDelegationRole()` — e.g. `reviewer` → `code-reviewer`, `quality-reviewer` → `code-reviewer`, `harsh-critic` → `critic`, `build-fixer` → `debugger`. Accepted alias keys are honored during resolved snapshot creation and later stage routing, not just validation. Unknown roles fail validation at parse time.
947
937
 
938
+ ### Spec fields (`TeamRoleAssignmentSpec`)
939
+
940
+ - **provider** — `"claude" | "codex" | "gemini"`. Omitted → defaults to `claude`.
941
+ - **model** — tier name (`"HIGH" | "MEDIUM" | "LOW"`) or an explicit model ID. Tiers resolve through `routing.tierModels`.
942
+ - **agent** — optional Claude agent name (e.g. `"critic"`, `"executor"`). Only honored when the resolved provider is `claude`.
943
+
944
+ `orchestrator` is pinned to `claude`; only `model` is user-configurable. Any other key on `orchestrator` is rejected by the validator.
945
+
946
+ ### Env override
947
+
948
+ ```bash
949
+ OMC_TEAM_ROLE_OVERRIDES='{"critic":{"provider":"codex"},"code-reviewer":{"provider":"gemini"}}'
950
+ ```
951
+
952
+ Precedence: `OMC_TEAM_ROLE_OVERRIDES` > `.copilot/omg.jsonc` (project) > `~/.config/copilot-omg/config.jsonc` (user) > built-in defaults. Invalid JSON logs a warning and is ignored — env overrides are best-effort and never abort the run.
953
+
954
+ ### Fallback when a CLI is missing
955
+
956
+ If the CLI for a configured provider is absent from `PATH` at spawn time, `buildLaunchArgs()` throws, the team lead emits a visible `SendMessage` warning, and the runtime falls back to a deterministic Claude assignment pre-computed by `buildResolvedRoutingSnapshot` (same tier + same agent, `provider: "claude"`). Fallback is loud by design — silent fallback is a test failure. Probe provider availability with `omc doctor --team-routing`.
957
+
958
+ ### Stickiness — resolved once, reused everywhere
959
+
960
+ Resolved routing is immutable per team. Editing config mid-team-lifetime does not affect running teams; a new `/team` invocation picks up the new mapping. This guarantees that spawn, scale-up, and worker-restart all see identical routing, including across worktree detaches (the snapshot travels with `TeamConfig`).
961
+
962
+ ### Zero-config behavior
963
+
964
+ An empty `team.roleRouting` preserves pre-patch behavior: every worker is Claude, model tiers follow `routing.tierModels`, and `/team 3:executor ...` still spawns three Claude Sonnet executors.
965
+
948
966
  ## State Cleanup
949
967
 
950
968
  On successful completion:
951
969
 
952
- 1. `TeamDelete` handles all Copilot CLI state:
953
- - Removes `~/.copilot/teams/{team_name}/` (config)
954
- - Removes `~/.copilot/tasks/{team_name}/` (all task files + lock)
970
+ 1. `TeamDelete` handles all Claude Code state:
971
+ - Removes `~/.claude/teams/{team_name}/` (config)
972
+ - Removes `~/.claude/tasks/{team_name}/` (all task files + lock)
955
973
  2. OMC state cleanup via MCP tools:
956
974
  ```
957
975
  state_clear(mode="team")
@@ -1019,4 +1037,4 @@ MCP workers can operate in isolated git worktrees to prevent file conflicts betw
1019
1037
 
1020
1038
  10. **Broadcast is expensive** -- Each broadcast sends a separate message to every teammate. Use `message` (DM) by default. Only broadcast for truly team-wide critical alerts.
1021
1039
 
1022
- 11. **CLI workers are one-shot, not persistent** -- Tmux CLI workers have full filesystem access and CAN make code changes. However, they run as autonomous one-shot jobs -- they cannot use TaskList/TaskUpdate/SendMessage. The lead must manage their lifecycle: write prompt_file, spawn CLI worker, read output_file, mark task complete. They don't participate in team communication like Copilot teammates do.
1040
+ 11. **CLI workers are one-shot, not persistent** -- Tmux CLI workers have full filesystem access and CAN make code changes. However, they run as autonomous one-shot jobs -- they cannot use TaskList/TaskUpdate/SendMessage. The lead must manage their lifecycle: write prompt_file, spawn CLI worker, read output_file, mark task complete. They don't participate in team communication like Claude teammates do.
@@ -2,6 +2,7 @@
2
2
  name: ultraqa
3
3
  description: QA cycling workflow - test, verify, fix, repeat until goal met
4
4
  argument-hint: "[--tests|--build|--lint|--typecheck|--custom <pattern>] [--interactive]"
5
+ level: 3
5
6
  ---
6
7
 
7
8
  # UltraQA Skill
@@ -75,7 +76,6 @@ If no structured goal provided, interpret the argument as a custom goal.
75
76
  | **Goal Met** | Exit with success: "ULTRAQA COMPLETE: Goal met after N cycles" |
76
77
  | **Cycle 5 Reached** | Exit with diagnosis: "ULTRAQA STOPPED: Max cycles. Diagnosis: ..." |
77
78
  | **Same Failure 3x** | Exit early: "ULTRAQA STOPPED: Same failure detected 3 times. Root cause: ..." |
78
- | **Circular Fix Detected** | Exit with escalation report: Generate structured report at `.omcp/escalation-report.md` with error pattern hash, occurrence count, error timeline, and recommended manual interventions. Set ultraqa state to stopped. |
79
79
  | **Environment Error** | Exit: "ULTRAQA ERROR: [tmux/port/dependency issue]" |
80
80
 
81
81
  ## Observability
@@ -118,7 +118,6 @@ User can cancel with `/oh-my-copilot:cancel` which clears the state file.
118
118
  3. **EARLY EXIT on pattern** - 3x same failure = stop and surface
119
119
  4. **CLEAR OUTPUT** - User should always know current cycle and status
120
120
  5. **CLEAN UP** - Clear state file on completion or cancellation
121
- 6. **CIRCULAR FIX DETECTION** - The system tracks error hashes across cycles. If the same normalized error appears 3+ times within a 2-hour window, stop immediately and generate an escalation report at `.omcp/escalation-report.md` instead of continuing to retry. This prevents wasting cycles on fundamentally broken fixes.
122
121
 
123
122
  ## STATE CLEANUP ON COMPLETION
124
123
 
@@ -2,10 +2,11 @@
2
2
  name: ultrawork
3
3
  description: Parallel execution engine for high-throughput task completion
4
4
  argument-hint: "<task description with parallel work items>"
5
+ level: 4
5
6
  ---
6
7
 
7
8
  <Purpose>
8
- Ultrawork is a parallel execution engine that runs multiple agents simultaneously for independent tasks. It is a component, not a standalone persistence mode -- it provides parallelism and smart model routing but not persistence, verification loops, or state management.
9
+ Ultrawork is a parallel execution engine and execution protocol for independent work. It emphasizes intent grounding, parallel context gathering, dependency-aware task graphs for non-trivial work, and concise evidence-backed execution summaries. It is a component, not a standalone persistence mode -- it provides parallelism and routing guidance, but not persistence, verification loops, or long-lived state management.
9
10
  </Purpose>
10
11
 
11
12
  <Use_When>
@@ -28,26 +29,38 @@ Sequential task execution wastes time when tasks are independent. Ultrawork enab
28
29
 
29
30
  <Execution_Policy>
30
31
  - Fire all independent agent calls simultaneously -- never serialize independent work
31
- - **Stagger parallel launches**: When firing N parallel tasks, stagger launches by 1 second between each (e.g., fire task 1, wait 1s, fire task 2, wait 1s, fire task 3). This prevents thundering herd rate limits. The system will inject stagger advisories if launches are too rapid.
32
32
  - Always pass the `model` parameter explicitly when delegating
33
33
  - Read `docs/shared/agent-tiers.md` before first delegation for agent selection guidance
34
34
  - Use `run_in_background: true` for operations over ~30 seconds (installs, builds, tests)
35
35
  - Run quick commands (git status, file reads, simple checks) in the foreground
36
+ - Resolve intent and uncertainty before implementation; explore first, ask only when still blocked
37
+ - For non-trivial tasks, produce a dependency-aware plan with parallel waves before execution
38
+ - Keep delegated-task reports concise: short summary, files touched, verification status, blockers
39
+ - Manual QA is required for implemented behavior, not just diagnostics
36
40
  </Execution_Policy>
37
41
 
38
42
  <Steps>
39
43
  1. **Read agent reference**: Load `docs/shared/agent-tiers.md` for tier selection
40
- 2. **Classify tasks by independence**: Identify which tasks can run in parallel vs which have dependencies
41
- 3. **Route to correct tiers**:
44
+ 2. **Ground intent first**: Confirm whether the request is implementation, investigation, evaluation, or research; do not code before that is clear
45
+ 3. **Gather context in parallel**:
46
+ - direct tools for quick reads/searches
47
+ - exploration/docs agents for broad context
48
+ 4. **Classify tasks by independence**: Identify which tasks can run in parallel vs which have dependencies
49
+ 5. **Create a task graph for non-trivial work**:
50
+ - Parallel Execution Waves
51
+ - Dependency Matrix
52
+ - acceptance criteria and verification steps per task
53
+ 6. **Route to correct tiers**:
42
54
  - Simple lookups/definitions: LOW tier (Haiku)
43
55
  - Standard implementation: MEDIUM tier (Sonnet)
44
56
  - Complex analysis/refactoring: HIGH tier (Opus)
45
- 4. **Fire independent tasks simultaneously**: Launch all parallel-safe tasks at once
46
- 5. **Run dependent tasks sequentially**: Wait for prerequisites before launching dependent work
47
- 6. **Background long operations**: Builds, installs, and test suites use `run_in_background: true`
48
- 7. **Verify when all tasks complete** (lightweight):
57
+ 7. **Fire independent tasks simultaneously**: Launch all parallel-safe tasks at once
58
+ 8. **Run dependent tasks sequentially**: Wait for prerequisites before launching dependent work
59
+ 9. **Background long operations**: Builds, installs, and test suites use `run_in_background: true`
60
+ 10. **Verify when all tasks complete** (lightweight):
49
61
  - Build/typecheck passes
50
62
  - Affected tests pass
63
+ - Manual QA completed for implemented behavior
51
64
  - No new errors introduced
52
65
  </Steps>
53
66
 
@@ -63,9 +76,9 @@ Sequential task execution wastes time when tasks are independent. Ultrawork enab
63
76
  <Good>
64
77
  Three independent tasks fired simultaneously:
65
78
  ```
66
- Task(subagent_type="oh-my-copilot:executor", model="haiku", name="executor-1", prompt="Add missing type export for Config interface")
67
- Task(subagent_type="oh-my-copilot:executor", model="sonnet", name="executor-2", prompt="Implement the /api/users endpoint with validation")
68
- Task(subagent_type="oh-my-copilot:executor", model="sonnet", name="executor-3", prompt="Add integration tests for the auth middleware")
79
+ Task(subagent_type="oh-my-copilot:executor", model="haiku", prompt="Add missing type export for Config interface")
80
+ Task(subagent_type="oh-my-copilot:executor", model="sonnet", prompt="Implement the /api/users endpoint with validation")
81
+ Task(subagent_type="oh-my-copilot:executor", model="sonnet", prompt="Add integration tests for the auth middleware")
69
82
  ```
70
83
  Why good: Independent tasks at appropriate tiers, all fired at once.
71
84
  </Good>
@@ -73,8 +86,8 @@ Why good: Independent tasks at appropriate tiers, all fired at once.
73
86
  <Good>
74
87
  Correct use of background execution:
75
88
  ```
76
- Task(subagent_type="oh-my-copilot:executor", model="sonnet", name="executor-1", prompt="npm install && npm run build", run_in_background=true)
77
- Task(subagent_type="oh-my-copilot:executor", model="haiku", name="executor-2", prompt="Update the README with new API endpoints")
89
+ Task(subagent_type="oh-my-copilot:executor", model="sonnet", prompt="npm install && npm run build", run_in_background=true)
90
+ Task(subagent_type="oh-my-copilot:executor", model="haiku", prompt="Update the README with new API endpoints")
78
91
  ```
79
92
  Why good: Long build runs in background while short task runs in foreground.
80
93
  </Good>
@@ -92,7 +105,7 @@ Why bad: These tasks are independent. Running them sequentially wastes time.
92
105
  <Bad>
93
106
  Wrong tier selection:
94
107
  ```
95
- Task(subagent_type="oh-my-copilot:executor", model="opus", name="executor-1", prompt="Add a missing semicolon")
108
+ Task(subagent_type="oh-my-copilot:executor", model="opus", prompt="Add a missing semicolon")
96
109
  ```
97
110
  Why bad: Opus is expensive overkill for a trivial fix. Use executor with Haiku instead.
98
111
  </Bad>
@@ -101,7 +114,7 @@ Why bad: Opus is expensive overkill for a trivial fix. Use executor with Haiku i
101
114
  <Escalation_And_Stop_Conditions>
102
115
  - When ultrawork is invoked directly (not via ralph), apply lightweight verification only -- build passes, tests pass, no new errors
103
116
  - For full persistence and comprehensive architect verification, recommend switching to `ralph` mode
104
- - If a task fails, use the structured recovery manager: classify the failure (rate_limited, auth_failure, build_error, etc.) and follow the mapped recovery action (retry with backoff, escalate, retry with context). After 3 retries for the same task, escalate rather than continuing. If the circular fix detector triggers, stop immediately and generate an escalation report.
117
+ - If a task fails repeatedly across retries, report the issue rather than retrying indefinitely
105
118
  - Escalate to the user when tasks have unclear dependencies or conflicting requirements
106
119
  </Escalation_And_Stop_Conditions>
107
120
 
@@ -126,10 +139,4 @@ autopilot (autonomous execution)
126
139
  ```
127
140
 
128
141
  Ultrawork is the parallelism layer. Ralph adds persistence and verification. Autopilot adds the full lifecycle pipeline.
129
-
130
- ## Stagger Delay
131
-
132
- When launching multiple parallel agents, a 1-second stagger delay is applied between launches to prevent rate limiting. This is advisory — the system injects guidance when rapid-fire Task calls are detected.
133
-
134
- Configuration: The stagger delay can be customized via the `stagger_delay_ms` field in ultrawork state (default: 1000ms).
135
142
  </Advanced>
@@ -8,7 +8,7 @@ description: Verify that a change really works before you claim completion
8
8
  Use this skill when the user wants confidence that a feature, fix, or refactor actually works.
9
9
 
10
10
  ## Goal
11
- Turn vague "it should work" claims into concrete evidence.
11
+ Turn vague “it should work” claims into concrete evidence.
12
12
 
13
13
  ## Workflow
14
14
  1. Identify the exact behavior that must be proven.
@@ -34,3 +34,4 @@ Turn vague "it should work" claims into concrete evidence.
34
34
  - Which commands/tests were run
35
35
  - What passed
36
36
  - What failed or remains unverified
37
+
@@ -2,6 +2,7 @@
2
2
  name: writer-memory
3
3
  description: Agentic memory system for writers - track characters, relationships, scenes, and themes
4
4
  argument-hint: "init|char|rel|scene|query|validate|synopsis|status|export [args]"
5
+ level: 7
5
6
  ---
6
7
 
7
8
  # Writer Memory - Agentic Memory System for Writers
@@ -10,7 +11,7 @@ Persistent memory system designed for creative writers, with first-class support
10
11
 
11
12
  ## Overview
12
13
 
13
- Writer Memory maintains context across Copilot sessions for fiction writers. It tracks:
14
+ Writer Memory maintains context across Claude sessions for fiction writers. It tracks:
14
15
 
15
16
  - **Characters (캐릭터)**: Emotional arcs (감정궤도), attitudes (태도), dialogue tone (대사톤), speech levels
16
17
  - **World (세계관)**: Settings, rules, atmosphere, constraints
@@ -16,6 +16,150 @@ const __dirname = dirname(__filename);
16
16
  // Dynamic import for the shared stdin module
17
17
  const { readStdin } = await import(pathToFileURL(path.join(__dirname, 'lib', 'stdin.mjs')).href);
18
18
 
19
+ // ---------------------------------------------------------------------------
20
+ // Skill Active State (issue #1033)
21
+ // Writes skill-active-state.json so the persistent-mode Stop hook can prevent
22
+ // premature session termination while a skill is executing.
23
+ // ---------------------------------------------------------------------------
24
+
25
+ /**
26
+ * Skill protection levels: none/light/medium/heavy.
27
+ * - 'none': Already has dedicated mode state (ralph, autopilot) or instant/read-only
28
+ * - 'light': Quick agent shortcuts (3 reinforcements, 5 min TTL)
29
+ * - 'medium': Review/planning skills that run multiple agents (5 reinforcements, 15 min TTL)
30
+ * - 'heavy': Long-running skills (10 reinforcements, 30 min TTL)
31
+ */
32
+ const PROTECTION_CONFIGS = {
33
+ none: { maxReinforcements: 0, staleTtlMs: 0 },
34
+ light: { maxReinforcements: 3, staleTtlMs: 5 * 60 * 1000 },
35
+ medium: { maxReinforcements: 5, staleTtlMs: 15 * 60 * 1000 },
36
+ heavy: { maxReinforcements: 10, staleTtlMs: 30 * 60 * 1000 },
37
+ };
38
+
39
+ const SKILL_PROTECTION = {
40
+ // Already have mode state → no protection needed
41
+ autopilot: 'none', ralph: 'none', ultrawork: 'none', team: 'none',
42
+ 'omc-teams': 'none', ultraqa: 'none', cancel: 'none',
43
+ // Instant / read-only → no protection needed
44
+ trace: 'none', hud: 'none', 'omc-doctor': 'none', 'omc-help': 'none',
45
+ 'learn-about-omc': 'none', note: 'none',
46
+ // Light protection (3 reinforcements)
47
+ tdd: 'light', 'build-fix': 'light', analyze: 'light', skill: 'light',
48
+ 'configure-notifications': 'light',
49
+ // Medium protection (5 reinforcements)
50
+ 'code-review': 'medium', 'security-review': 'medium', plan: 'medium',
51
+ ralplan: 'medium', review: 'medium', 'external-context': 'medium',
52
+ sciomc: 'medium', skillify: 'medium', learner: 'medium', 'omc-setup': 'medium',
53
+ 'mcp-setup': 'medium', 'project-session-manager': 'medium',
54
+ 'writer-memory': 'medium', 'ralph-init': 'medium', ccg: 'medium',
55
+ // Heavy protection (10 reinforcements)
56
+ deepinit: 'heavy',
57
+ };
58
+
59
+ function getSkillProtection(skillName) {
60
+ const normalized = (skillName || '').toLowerCase().replace(/^oh-my-(?:claudecode|copilot):/, '');
61
+ return SKILL_PROTECTION[normalized] || 'light';
62
+ }
63
+
64
+ function getInvokedSkillName(toolInput) {
65
+ if (!toolInput || typeof toolInput !== 'object') return null;
66
+ const rawSkill = toolInput.skill || toolInput.skill_name || toolInput.skillName || toolInput.command || null;
67
+ if (typeof rawSkill !== 'string' || !rawSkill.trim()) return null;
68
+ const normalized = rawSkill.trim();
69
+ return normalized.includes(':') ? normalized.split(':').at(-1).toLowerCase() : normalized.toLowerCase();
70
+ }
71
+
72
+ const SESSION_ID_ALLOWLIST = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,255}$/;
73
+
74
+ function writeSkillActiveState(directory, skillName, sessionId) {
75
+ const protection = getSkillProtection(skillName);
76
+ if (protection === 'none') return;
77
+
78
+ const config = PROTECTION_CONFIGS[protection];
79
+ const now = new Date().toISOString();
80
+ const normalized = (skillName || '').toLowerCase().replace(/^oh-my-(?:claudecode|copilot):/, '');
81
+
82
+ const state = {
83
+ active: true,
84
+ skill_name: normalized,
85
+ session_id: sessionId || undefined,
86
+ started_at: now,
87
+ last_checked_at: now,
88
+ reinforcement_count: 0,
89
+ max_reinforcements: config.maxReinforcements,
90
+ stale_ttl_ms: config.staleTtlMs,
91
+ };
92
+
93
+ const stateDir = path.join(directory, '.omc', 'state');
94
+
95
+ // Write to session-scoped path when sessionId is available (must match persistent-mode.mjs reads)
96
+ const safeSessionId = sessionId && SESSION_ID_ALLOWLIST.test(sessionId) ? sessionId : '';
97
+ const targetDir = safeSessionId
98
+ ? path.join(stateDir, 'sessions', safeSessionId)
99
+ : stateDir;
100
+ const targetPath = path.join(targetDir, 'skill-active-state.json');
101
+
102
+ try {
103
+ if (!existsSync(targetDir)) {
104
+ mkdirSync(targetDir, { recursive: true });
105
+ }
106
+ const tmpPath = targetPath + '.tmp';
107
+ writeFileSync(tmpPath, JSON.stringify(state, null, 2), { mode: 0o600 });
108
+ renameSync(tmpPath, targetPath);
109
+ } catch {
110
+ // Best-effort; don't fail the hook
111
+ }
112
+ }
113
+
114
+
115
+ function clearAwaitingConfirmationFlag(directory, stateName, sessionId) {
116
+ const stateDir = path.join(directory, '.omc', 'state');
117
+ const safeSessionId = sessionId && SESSION_ID_ALLOWLIST.test(sessionId) ? sessionId : '';
118
+ const paths = [
119
+ safeSessionId ? path.join(stateDir, 'sessions', safeSessionId, `${stateName}-state.json`) : null,
120
+ path.join(stateDir, `${stateName}-state.json`),
121
+ path.join(homedir(), '.omc', 'state', `${stateName}-state.json`),
122
+ ].filter(Boolean);
123
+
124
+ for (const statePath of paths) {
125
+ try {
126
+ if (!existsSync(statePath)) continue;
127
+ const state = JSON.parse(readFileSync(statePath, 'utf-8'));
128
+ if (!state || typeof state !== 'object' || !state.awaiting_confirmation) continue;
129
+ delete state.awaiting_confirmation;
130
+ const tmpPath = statePath + '.tmp';
131
+ writeFileSync(tmpPath, JSON.stringify(state, null, 2), { mode: 0o600 });
132
+ renameSync(tmpPath, statePath);
133
+ } catch {
134
+ // Best-effort; don't fail the hook
135
+ }
136
+ }
137
+ }
138
+
139
+ function confirmSkillModeStates(directory, skillName, sessionId) {
140
+ switch (skillName) {
141
+ case 'ralph':
142
+ clearAwaitingConfirmationFlag(directory, 'ralph', sessionId);
143
+ clearAwaitingConfirmationFlag(directory, 'ultrawork', sessionId);
144
+ break;
145
+ case 'ultrawork':
146
+ clearAwaitingConfirmationFlag(directory, 'ultrawork', sessionId);
147
+ break;
148
+ case 'autopilot':
149
+ clearAwaitingConfirmationFlag(directory, 'autopilot', sessionId);
150
+ break;
151
+ case 'ralplan':
152
+ clearAwaitingConfirmationFlag(directory, 'ralplan', sessionId);
153
+ break;
154
+ default:
155
+ break;
156
+ }
157
+ }
158
+
159
+ // ---------------------------------------------------------------------------
160
+ // Delegation enforcement
161
+ // ---------------------------------------------------------------------------
162
+
19
163
  // Allowed path patterns (no warning)
20
164
  // Paths are normalized to forward slashes before matching
21
165
  const ALLOWED_PATH_PATTERNS = [
@@ -87,51 +231,6 @@ function workerCommandViolation(command) {
87
231
  return null;
88
232
  }
89
233
 
90
- const SESSION_ID_ALLOWLIST = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,255}$/;
91
-
92
- function clearAwaitingConfirmationFlag(directory, stateName, sessionId) {
93
- const stateDir = path.join(directory, '.omcp', 'state');
94
- const safeSessionId = sessionId && SESSION_ID_ALLOWLIST.test(sessionId) ? sessionId : '';
95
- const paths = [
96
- safeSessionId ? path.join(stateDir, 'sessions', safeSessionId, `${stateName}-state.json`) : null,
97
- path.join(stateDir, `${stateName}-state.json`),
98
- path.join(homedir(), '.omcp', 'state', `${stateName}-state.json`),
99
- ].filter(Boolean);
100
-
101
- for (const statePath of paths) {
102
- try {
103
- if (!existsSync(statePath)) continue;
104
- const state = JSON.parse(readFileSync(statePath, 'utf-8'));
105
- if (!state || typeof state !== 'object' || !state.awaiting_confirmation) continue;
106
- delete state.awaiting_confirmation;
107
- const tmpPath = statePath + '.tmp';
108
- writeFileSync(tmpPath, JSON.stringify(state, null, 2), { mode: 0o600 });
109
- renameSync(tmpPath, statePath);
110
- } catch {
111
- // Best-effort; don't fail the hook
112
- }
113
- }
114
- }
115
-
116
- function confirmSkillModeStates(directory, skillName, sessionId) {
117
- switch (skillName) {
118
- case 'ralph':
119
- clearAwaitingConfirmationFlag(directory, 'ralph', sessionId);
120
- clearAwaitingConfirmationFlag(directory, 'ultrawork', sessionId);
121
- break;
122
- case 'ultrawork':
123
- clearAwaitingConfirmationFlag(directory, 'ultrawork', sessionId);
124
- break;
125
- case 'autopilot':
126
- clearAwaitingConfirmationFlag(directory, 'autopilot', sessionId);
127
- break;
128
- case 'ralplan':
129
- clearAwaitingConfirmationFlag(directory, 'ralplan', sessionId);
130
- break;
131
- default:
132
- break;
133
- }
134
- }
135
234
 
136
235
  function checkBashCommand(command) {
137
236
  // Check if command might modify files