claudecode-omc 5.6.8 → 5.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.local/skills/prompt-optimizer/SKILL.md +262 -19
- package/.omc-curation/ecc-selection.json +80 -0
- package/.omc-curation/governance.json +113 -0
- package/.omc-curation/sources.lock.json +25 -0
- package/README.md +69 -4
- package/bundled/manifest.json +5 -5
- package/bundled/upstream/anthropic-skills/.omc-source/bundle.json +18 -0
- package/bundled/upstream/anthropic-skills/.omc-source/provenance.json +399 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +18 -17
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +9 -9
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +4 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/go/managed-agents/README.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/java/managed-agents/README.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +10 -10
- package/bundled/upstream/anthropic-skills/skills/claude-api/php/managed-agents/README.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +16 -16
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +7 -7
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/tool-use.md +19 -19
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +4 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/managed-agents/README.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +5 -5
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +3 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +10 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +19 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +6 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-multiagent.md +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +3 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +173 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +10 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +113 -13
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +14 -11
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +4 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +15 -15
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/batches.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/files-api.md +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +5 -5
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/tool-use.md +15 -15
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +3 -3
- package/bundled/upstream/ecc/.omc-source/bundle.json +2 -1
- package/bundled/upstream/ecc/.omc-source/last-plan-apply.json +108 -24
- package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +3 -3
- package/bundled/upstream/ecc/.omc-source/provenance.json +563 -0
- package/bundled/upstream/ecc/agents/marketing-agent.md +159 -0
- package/bundled/upstream/ecc/agents/react-build-resolver.md +215 -0
- package/bundled/upstream/ecc/agents/react-reviewer.md +167 -0
- package/bundled/upstream/ecc/agents/typescript-reviewer.md +3 -0
- package/bundled/upstream/ecc/commands/harness-audit.md +17 -10
- package/bundled/upstream/ecc/commands/marketing-campaign.md +129 -0
- package/bundled/upstream/ecc/commands/react-build.md +187 -0
- package/bundled/upstream/ecc/commands/react-review.md +170 -0
- package/bundled/upstream/ecc/commands/react-test.md +265 -0
- package/bundled/upstream/ecc/skills/benchmark-optimization-loop/SKILL.md +69 -0
- package/bundled/upstream/ecc/skills/blender-motion-state-inspection/SKILL.md +164 -0
- package/bundled/upstream/ecc/skills/canary-watch/SKILL.md +9 -1
- package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +31 -9
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +38 -4
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +319 -12
- package/bundled/upstream/ecc/skills/data-throughput-accelerator/SKILL.md +72 -0
- package/bundled/upstream/ecc/skills/dynamic-workflow-mode/SKILL.md +123 -0
- package/bundled/upstream/ecc/skills/frontend-a11y/SKILL.md +446 -0
- package/bundled/upstream/ecc/skills/ito-basket-compare/SKILL.md +63 -0
- package/bundled/upstream/ecc/skills/ito-data-atlas-agent/SKILL.md +63 -0
- package/bundled/upstream/ecc/skills/ito-market-intelligence/SKILL.md +60 -0
- package/bundled/upstream/ecc/skills/ito-trade-planner/SKILL.md +67 -0
- package/bundled/upstream/ecc/skills/latency-critical-systems/SKILL.md +73 -0
- package/bundled/upstream/ecc/skills/marketing-campaign/SKILL.md +113 -0
- package/bundled/upstream/ecc/skills/nextjs-turbopack/SKILL.md +13 -0
- package/bundled/upstream/ecc/skills/parallel-execution-optimizer/SKILL.md +72 -0
- package/bundled/upstream/ecc/skills/prediction-market-oracle-research/SKILL.md +63 -0
- package/bundled/upstream/ecc/skills/prediction-market-risk-review/SKILL.md +60 -0
- package/bundled/upstream/ecc/skills/react-patterns/SKILL.md +341 -0
- package/bundled/upstream/ecc/skills/react-performance/SKILL.md +574 -0
- package/bundled/upstream/ecc/skills/react-testing/SKILL.md +423 -0
- package/bundled/upstream/ecc/skills/recsys-pipeline-architect/SKILL.md +114 -0
- package/bundled/upstream/ecc/skills/recursive-decision-ledger/SKILL.md +79 -0
- package/bundled/upstream/ecc/skills/social-publisher/SKILL.md +115 -0
- package/bundled/upstream/ecc/skills/team-agent-orchestration/SKILL.md +110 -0
- package/bundled/upstream/ecc/skills/uncloud/SKILL.md +343 -0
- package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +99 -0
- package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +2 -1
- package/bundled/upstream/oh-my-claudecode/.omc-source/provenance.json +116 -0
- package/bundled/upstream/oh-my-claudecode/skills/autopilot/SKILL.md +7 -0
- package/bundled/upstream/oh-my-claudecode/skills/cancel/SKILL.md +1 -0
- package/bundled/upstream/oh-my-claudecode/skills/deep-interview/SKILL.md +39 -5
- package/bundled/upstream/oh-my-claudecode/skills/hud/SKILL.md +1 -0
- package/bundled/upstream/oh-my-claudecode/skills/local-build-reminder/SKILL.md +78 -0
- package/bundled/upstream/oh-my-claudecode/skills/omc-doctor/SKILL.md +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/SKILL.md +26 -10
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/01-install-claude-md.md +3 -3
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +6 -4
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/04-welcome.md +2 -2
- package/bundled/upstream/oh-my-claudecode/skills/omc-teams/SKILL.md +6 -6
- package/bundled/upstream/oh-my-claudecode/skills/plan/SKILL.md +44 -32
- package/bundled/upstream/oh-my-claudecode/skills/ralph/SKILL.md +45 -21
- package/bundled/upstream/oh-my-claudecode/skills/ralplan/SKILL.md +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/self-improve/SKILL.md +7 -0
- package/bundled/upstream/oh-my-claudecode/skills/self-improve/scripts/resolve-paths.mjs +39 -15
- package/bundled/upstream/oh-my-claudecode/skills/team/SKILL.md +132 -90
- package/bundled/upstream/oh-my-claudecode/skills/ultragoal/SKILL.md +93 -0
- package/bundled/upstream/oh-my-claudecode/skills/ultraqa/SKILL.md +28 -13
- package/bundled/upstream/oh-my-claudecode/skills/ultrawork/SKILL.md +7 -0
- package/bundled/upstream/superpowers/.omc-source/bundle.json +2 -1
- package/bundled/upstream/superpowers/.omc-source/provenance.json +63 -0
- package/package.json +2 -1
- package/src/catalog/source-catalog.js +10 -4
- package/src/cli/index.js +4 -0
- package/src/cli/plan.js +14 -2
- package/src/cli/setup.js +52 -13
- package/src/cli/skill.js +1 -1
- package/src/cli/source.js +265 -14
- package/src/config/sources.js +67 -1
- package/src/merge/content-patch.js +84 -0
- package/templates/merge-config.json +1 -8
- package/bundled/upstream/ecc/skills/strategic-compact/suggest-compact.sh +0 -54
|
@@ -78,6 +78,7 @@ User: "/team 3:executor fix all TypeScript errors"
|
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
**Storage layout (managed by Claude Code):**
|
|
81
|
+
|
|
81
82
|
```
|
|
82
83
|
~/.claude/
|
|
83
84
|
teams/fix-ts-errors/
|
|
@@ -90,6 +91,10 @@ User: "/team 3:executor fix all TypeScript errors"
|
|
|
90
91
|
...
|
|
91
92
|
```
|
|
92
93
|
|
|
94
|
+
## Goal Workflow Relationship
|
|
95
|
+
|
|
96
|
+
Team is the OMC authority for parallel, staged execution. Use the deterministic conflict policies `refuse`, `adopt_existing`, and `artifact_only` rather than non-deterministic warning handling. If a task mentions Claude Code `/goal`, Ralph, UltraQA, or artifact-only Ultragoal, keep Team as the primary loop authority unless the leader explicitly hands off. Use `/goal` only as a documented native Claude Code handoff target or as visible evidence from the lead session; do not claim the `/goal` evaluator independently runs commands, reads files, or replaces `team-verify` / `team-fix`. Artifact-only Ultragoal references should be treated as durable goal ledger/checkpoint/evidence artifacts, not as worker execution by themselves.
|
|
97
|
+
|
|
93
98
|
## Staged Pipeline (Canonical Team Runtime)
|
|
94
99
|
|
|
95
100
|
Team execution follows a staged pipeline:
|
|
@@ -100,13 +105,13 @@ Team execution follows a staged pipeline:
|
|
|
100
105
|
|
|
101
106
|
Each pipeline stage uses **specialized agents** -- not just executors. The lead selects agents based on the stage and task characteristics.
|
|
102
107
|
|
|
103
|
-
| Stage
|
|
104
|
-
|
|
105
|
-
| **team-plan**
|
|
106
|
-
| **team-prd**
|
|
107
|
-
| **team-exec**
|
|
108
|
-
| **team-verify** | `verifier` (sonnet)
|
|
109
|
-
| **team-fix**
|
|
108
|
+
| Stage | Required Agents | Optional Agents | Selection Criteria |
|
|
109
|
+
| --------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
110
|
+
| **team-plan** | `explore` (haiku), `planner` (opus) | `analyst` (opus), `architect` (opus) | Use `analyst` for unclear requirements. Use `architect` for systems with complex boundaries. |
|
|
111
|
+
| **team-prd** | `analyst` (opus) | `critic` (opus) | Use `critic` to challenge scope. |
|
|
112
|
+
| **team-exec** | `executor` (sonnet) | `executor` (opus), `debugger` (sonnet), `designer` (sonnet), `writer` (haiku), `test-engineer` (sonnet) | Match agent to subtask type. Use `executor` (model=opus) for complex autonomous work, `designer` for UI, `debugger` for compilation issues, `writer` for docs, `test-engineer` for test creation. |
|
|
113
|
+
| **team-verify** | `verifier` (sonnet) | `test-engineer` (sonnet), `security-reviewer` (sonnet), `code-reviewer` (opus) | Always run `verifier`. Add `security-reviewer` for auth/crypto changes. Add `code-reviewer` for >20 files or architectural changes. `code-reviewer` also covers style/formatting checks. |
|
|
114
|
+
| **team-fix** | `executor` (sonnet) | `debugger` (sonnet), `executor` (opus) | Use `debugger` for type/build errors and regression isolation. Use `executor` (model=opus) for complex multi-file fixes. |
|
|
110
115
|
|
|
111
116
|
**Routing rules:**
|
|
112
117
|
|
|
@@ -142,6 +147,7 @@ Each pipeline stage uses **specialized agents** -- not just executors. The lead
|
|
|
142
147
|
### Verify/Fix Loop and Stop Conditions
|
|
143
148
|
|
|
144
149
|
Continue `team-exec -> team-verify -> team-fix` until:
|
|
150
|
+
|
|
145
151
|
1. verification passes and no required fix tasks remain, or
|
|
146
152
|
2. work reaches an explicit terminal blocked/failed outcome with evidence.
|
|
147
153
|
|
|
@@ -159,6 +165,7 @@ The lead writes handoffs to `.omc/handoffs/<stage-name>.md`.
|
|
|
159
165
|
|
|
160
166
|
```markdown
|
|
161
167
|
## Handoff: <current-stage> → <next-stage>
|
|
168
|
+
|
|
162
169
|
- **Decided**: [key decisions made in this stage]
|
|
163
170
|
- **Rejected**: [alternatives considered and why they were rejected]
|
|
164
171
|
- **Risks**: [identified risks for the next stage]
|
|
@@ -177,6 +184,7 @@ The lead writes handoffs to `.omc/handoffs/<stage-name>.md`.
|
|
|
177
184
|
|
|
178
185
|
```markdown
|
|
179
186
|
## Handoff: team-plan → team-exec
|
|
187
|
+
|
|
180
188
|
- **Decided**: Microservice architecture with 3 services (auth, api, worker). PostgreSQL for persistence. JWT for auth tokens.
|
|
181
189
|
- **Rejected**: Monolith (scaling concerns), MongoDB (team expertise is SQL), session cookies (API-first design).
|
|
182
190
|
- **Risks**: Worker service needs Redis for job queue — not yet provisioned. Auth service has no rate limiting in initial design.
|
|
@@ -190,6 +198,17 @@ The lead writes handoffs to `.omc/handoffs/<stage-name>.md`.
|
|
|
190
198
|
- **Cancel:** `/oh-my-claudecode:cancel` requests teammate shutdown, waits for responses (best effort), marks phase `cancelled` with `active=false`, captures cancellation metadata, then deletes team resources and clears/preserves Team state per policy. Handoff files in `.omc/handoffs/` are preserved for potential resume.
|
|
191
199
|
- Terminal states are `complete`, `failed`, and `cancelled`.
|
|
192
200
|
|
|
201
|
+
## Windows psmux tmux-compatible gate
|
|
202
|
+
|
|
203
|
+
On native Windows, do **not** tell users that `/team` requires WSL or that tmux is unavailable until the actual tmux-compatible binary has been checked. Native [psmux](https://github.com/psmux/psmux) installs a `tmux`-compatible command (often `tmux` / `tmux.cmd`) and is a supported Team multiplexer.
|
|
204
|
+
|
|
205
|
+
Before blocking or falling back on Windows:
|
|
206
|
+
|
|
207
|
+
1. Check `tmux -V` (or the platform equivalent such as `where tmux` followed by `tmux -V`).
|
|
208
|
+
2. Treat a successful psmux-backed `tmux -V` as tmux available.
|
|
209
|
+
3. If psmux/tmux is available, continue the normal Team flow; do not emit WSL-required guidance.
|
|
210
|
+
4. Only when no tmux-compatible binary is available, tell the user to install psmux for native Windows support or use WSL2 as an alternative.
|
|
211
|
+
|
|
193
212
|
## Workflow
|
|
194
213
|
|
|
195
214
|
### Phase 1: Parse Input
|
|
@@ -219,6 +238,7 @@ Call `TeamCreate` with a slug derived from the task:
|
|
|
219
238
|
```
|
|
220
239
|
|
|
221
240
|
**Response:**
|
|
241
|
+
|
|
222
242
|
```json
|
|
223
243
|
{
|
|
224
244
|
"team_name": "fix-ts-errors",
|
|
@@ -248,18 +268,18 @@ state_write(mode="team", active=true, current_phase="team-plan", state={
|
|
|
248
268
|
|
|
249
269
|
**State schema fields:**
|
|
250
270
|
|
|
251
|
-
| Field
|
|
252
|
-
|
|
253
|
-
| `active`
|
|
254
|
-
| `current_phase`
|
|
255
|
-
| `team_name`
|
|
256
|
-
| `agent_count`
|
|
257
|
-
| `agent_types`
|
|
258
|
-
| `task`
|
|
259
|
-
| `fix_loop_count` | number
|
|
260
|
-
| `max_fix_loops`
|
|
261
|
-
| `linked_ralph`
|
|
262
|
-
| `stage_history`
|
|
271
|
+
| Field | Type | Description |
|
|
272
|
+
| ---------------- | ------- | --------------------------------------------------------------------------------------- |
|
|
273
|
+
| `active` | boolean | Whether team mode is active |
|
|
274
|
+
| `current_phase` | string | Current pipeline stage: `team-plan`, `team-prd`, `team-exec`, `team-verify`, `team-fix` |
|
|
275
|
+
| `team_name` | string | Slug name for the team |
|
|
276
|
+
| `agent_count` | number | Number of worker agents |
|
|
277
|
+
| `agent_types` | string | Comma-separated agent types used in team-exec |
|
|
278
|
+
| `task` | string | Original task description |
|
|
279
|
+
| `fix_loop_count` | number | Current fix iteration count |
|
|
280
|
+
| `max_fix_loops` | number | Maximum fix iterations before failing (default: 3) |
|
|
281
|
+
| `linked_ralph` | boolean | Whether team is linked to a ralph persistence loop |
|
|
282
|
+
| `stage_history` | string | Comma-separated list of stage transitions with timestamps |
|
|
263
283
|
|
|
264
284
|
**Update state on every stage transition:**
|
|
265
285
|
|
|
@@ -291,6 +311,7 @@ Call `TaskCreate` for each subtask. Set dependencies with `TaskUpdate` using `ad
|
|
|
291
311
|
```
|
|
292
312
|
|
|
293
313
|
**Response stores a task file (e.g. `1.json`):**
|
|
314
|
+
|
|
294
315
|
```json
|
|
295
316
|
{
|
|
296
317
|
"id": "1",
|
|
@@ -338,6 +359,7 @@ Spawn N teammates using `Task` with `team_name` and `name` parameters. Each team
|
|
|
338
359
|
```
|
|
339
360
|
|
|
340
361
|
**Response:**
|
|
362
|
+
|
|
341
363
|
```json
|
|
342
364
|
{
|
|
343
365
|
"agent_id": "worker-1@fix-ts-errors",
|
|
@@ -347,6 +369,7 @@ Spawn N teammates using `Task` with `team_name` and `name` parameters. Each team
|
|
|
347
369
|
```
|
|
348
370
|
|
|
349
371
|
**Side effects:**
|
|
372
|
+
|
|
350
373
|
- Teammate added to `config.json` members array
|
|
351
374
|
- An **internal task** is auto-created (with `metadata._internal: true`) tracking the agent lifecycle
|
|
352
375
|
- Internal tasks appear in `TaskList` output -- filter them when counting real tasks
|
|
@@ -401,6 +424,7 @@ state_write(mode="team", current_phase="team-fix", state={
|
|
|
401
424
|
```
|
|
402
425
|
|
|
403
426
|
This enables:
|
|
427
|
+
|
|
404
428
|
- **Resume**: If the lead crashes, `state_read(mode="team")` reveals the last stage and team name for recovery
|
|
405
429
|
- **Cancel**: The cancel skill reads `current_phase` to know what cleanup is needed
|
|
406
430
|
- **Ralph integration**: Ralph can read team state to know if the pipeline completed or failed
|
|
@@ -533,6 +557,7 @@ This addendum must preserve the core rule: **worker = executor only, never leade
|
|
|
533
557
|
**CRITICAL: Steps must execute in exact order. Never call TeamDelete before shutdown is confirmed.**
|
|
534
558
|
|
|
535
559
|
**Step 1: Verify completion**
|
|
560
|
+
|
|
536
561
|
```
|
|
537
562
|
Call TaskList — verify all real tasks (non-internal) are completed or failed.
|
|
538
563
|
```
|
|
@@ -540,6 +565,7 @@ Call TaskList — verify all real tasks (non-internal) are completed or failed.
|
|
|
540
565
|
**Step 2: Request shutdown from each teammate**
|
|
541
566
|
|
|
542
567
|
**Lead sends:**
|
|
568
|
+
|
|
543
569
|
```json
|
|
544
570
|
{
|
|
545
571
|
"type": "shutdown_request",
|
|
@@ -549,11 +575,13 @@ Call TaskList — verify all real tasks (non-internal) are completed or failed.
|
|
|
549
575
|
```
|
|
550
576
|
|
|
551
577
|
**Step 3: Wait for responses (BLOCKING)**
|
|
578
|
+
|
|
552
579
|
- Wait up to 30s per teammate for `shutdown_response`
|
|
553
580
|
- Track which teammates confirmed vs timed out
|
|
554
581
|
- If a teammate doesn't respond within 30s: log warning, mark as unresponsive
|
|
555
582
|
|
|
556
583
|
**Teammate receives and responds:**
|
|
584
|
+
|
|
557
585
|
```json
|
|
558
586
|
{
|
|
559
587
|
"type": "shutdown_response",
|
|
@@ -563,11 +591,13 @@ Call TaskList — verify all real tasks (non-internal) are completed or failed.
|
|
|
563
591
|
```
|
|
564
592
|
|
|
565
593
|
After approval:
|
|
594
|
+
|
|
566
595
|
- Teammate process terminates
|
|
567
596
|
- Teammate auto-removed from `config.json` members array
|
|
568
597
|
- Internal task for that teammate completes
|
|
569
598
|
|
|
570
599
|
**Step 4: TeamDelete — only after ALL teammates confirmed or timed out**
|
|
600
|
+
|
|
571
601
|
```json
|
|
572
602
|
{ "team_name": "fix-ts-errors" }
|
|
573
603
|
```
|
|
@@ -575,6 +605,7 @@ After approval:
|
|
|
575
605
|
**Step 5: Orphan scan**
|
|
576
606
|
|
|
577
607
|
Check for agent processes that survived TeamDelete:
|
|
608
|
+
|
|
578
609
|
```bash
|
|
579
610
|
node "${CLAUDE_PLUGIN_ROOT}/scripts/cleanup-orphans.mjs" --team-name fix-ts-errors
|
|
580
611
|
```
|
|
@@ -582,6 +613,7 @@ node "${CLAUDE_PLUGIN_ROOT}/scripts/cleanup-orphans.mjs" --team-name fix-ts-erro
|
|
|
582
613
|
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.
|
|
583
614
|
|
|
584
615
|
**Shutdown sequence is BLOCKING:** Do not proceed to TeamDelete until all teammates have either:
|
|
616
|
+
|
|
585
617
|
- Confirmed shutdown (`shutdown_response` with `approve: true`), OR
|
|
586
618
|
- Timed out (30s with no response)
|
|
587
619
|
|
|
@@ -595,11 +627,11 @@ The team skill supports **hybrid execution** combining Claude agent teammates wi
|
|
|
595
627
|
|
|
596
628
|
Tasks are tagged with an execution mode during decomposition:
|
|
597
629
|
|
|
598
|
-
| Execution Mode
|
|
599
|
-
|
|
600
|
-
| `claude_worker` | Claude agent
|
|
601
|
-
| `codex_worker`
|
|
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`.
|
|
630
|
+
| Execution Mode | Provider | Capabilities |
|
|
631
|
+
| --------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
632
|
+
| `claude_worker` | Claude agent | Full Claude Code tool access (Read/Write/Edit/Bash/Task). Best for tasks needing Claude's reasoning + iterative tool use. |
|
|
633
|
+
| `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`. |
|
|
634
|
+
| `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`. |
|
|
603
635
|
|
|
604
636
|
### How CLI Workers Operate
|
|
605
637
|
|
|
@@ -612,6 +644,7 @@ Tmux CLI workers run in dedicated tmux panes with filesystem access. They are **
|
|
|
612
644
|
5. Lead reads the output, marks the task complete, and feeds results to dependent tasks
|
|
613
645
|
|
|
614
646
|
**Key difference from Claude teammates:**
|
|
647
|
+
|
|
615
648
|
- CLI workers operate via tmux, not Claude Code's tool system
|
|
616
649
|
- They cannot use TaskList/TaskUpdate/SendMessage (no team awareness)
|
|
617
650
|
- They run as one-shot autonomous jobs, not persistent teammates
|
|
@@ -619,16 +652,16 @@ Tmux CLI workers run in dedicated tmux panes with filesystem access. They are **
|
|
|
619
652
|
|
|
620
653
|
### When to Route Where
|
|
621
654
|
|
|
622
|
-
| Task Type
|
|
623
|
-
|
|
624
|
-
| Iterative multi-step work
|
|
625
|
-
| Code review / security audit
|
|
626
|
-
| Architecture analysis / planning | architect Claude agent
|
|
627
|
-
| Refactoring (well-scoped)
|
|
628
|
-
| UI/frontend implementation
|
|
629
|
-
| Large-scale documentation
|
|
630
|
-
| Build/test iteration loops
|
|
631
|
-
| Tasks needing team coordination
|
|
655
|
+
| Task Type | Best Route | Why |
|
|
656
|
+
| -------------------------------- | ------------------------------ | --------------------------------------------------- |
|
|
657
|
+
| Iterative multi-step work | Claude teammate | Needs tool-mediated iteration + team communication |
|
|
658
|
+
| Code review / security audit | CLI worker or specialist agent | Autonomous execution, good at structured analysis |
|
|
659
|
+
| Architecture analysis / planning | architect Claude agent | Strong analytical reasoning with codebase access |
|
|
660
|
+
| Refactoring (well-scoped) | CLI worker or executor agent | Autonomous execution, good at structured transforms |
|
|
661
|
+
| UI/frontend implementation | designer Claude agent | Design expertise, framework idioms |
|
|
662
|
+
| Large-scale documentation | writer Claude agent | Writing expertise + large context for consistency |
|
|
663
|
+
| Build/test iteration loops | Claude teammate | Needs Bash tool + iterative fix cycles |
|
|
664
|
+
| Tasks needing team coordination | Claude teammate | Needs SendMessage for status updates |
|
|
632
665
|
|
|
633
666
|
### Example: Hybrid Team with CLI Workers
|
|
634
667
|
|
|
@@ -680,18 +713,18 @@ The `getTeamStatus(teamName, workingDirectory, heartbeatMaxAgeMs?)` function pro
|
|
|
680
713
|
Example usage in the monitor loop:
|
|
681
714
|
|
|
682
715
|
```typescript
|
|
683
|
-
const status = getTeamStatus(
|
|
716
|
+
const status = getTeamStatus("fix-ts-errors", workingDirectory);
|
|
684
717
|
|
|
685
718
|
for (const worker of status.workers) {
|
|
686
719
|
if (!worker.isAlive) {
|
|
687
720
|
// Worker is dead -- reassign its in-progress tasks
|
|
688
721
|
}
|
|
689
722
|
for (const msg of worker.recentMessages) {
|
|
690
|
-
if (msg.type ===
|
|
723
|
+
if (msg.type === "task_complete") {
|
|
691
724
|
// Mark task complete, unblock dependents
|
|
692
|
-
} else if (msg.type ===
|
|
725
|
+
} else if (msg.type === "task_failed") {
|
|
693
726
|
// Handle failure, possibly retry or reassign
|
|
694
|
-
} else if (msg.type ===
|
|
727
|
+
} else if (msg.type === "error") {
|
|
695
728
|
// Log error, check if worker needs intervention
|
|
696
729
|
}
|
|
697
730
|
}
|
|
@@ -704,14 +737,14 @@ if (status.taskSummary.pending === 0 && status.taskSummary.inProgress === 0) {
|
|
|
704
737
|
|
|
705
738
|
### Event-Based Actions from Outbox Messages
|
|
706
739
|
|
|
707
|
-
| Message Type
|
|
708
|
-
|
|
709
|
-
| `task_complete` | Mark task completed, check if blocked tasks are now unblocked, notify dependent workers
|
|
710
|
-
| `task_failed`
|
|
711
|
-
| `idle`
|
|
712
|
-
| `error`
|
|
713
|
-
| `shutdown_ack`
|
|
714
|
-
| `heartbeat`
|
|
740
|
+
| Message Type | Action |
|
|
741
|
+
| --------------- | ------------------------------------------------------------------------------------------- |
|
|
742
|
+
| `task_complete` | Mark task completed, check if blocked tasks are now unblocked, notify dependent workers |
|
|
743
|
+
| `task_failed` | Increment failure sidecar, decide retry vs reassign vs skip |
|
|
744
|
+
| `idle` | Worker has no assigned tasks -- assign pending work or begin shutdown |
|
|
745
|
+
| `error` | Log the error, check `consecutiveErrors` in heartbeat for quarantine threshold |
|
|
746
|
+
| `shutdown_ack` | Worker acknowledged shutdown -- safe to remove from team |
|
|
747
|
+
| `heartbeat` | Update liveness tracking (redundant with heartbeat files but useful for latency monitoring) |
|
|
715
748
|
|
|
716
749
|
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.
|
|
717
750
|
|
|
@@ -755,6 +788,7 @@ When the user invokes `/team ralph`, says "team ralph", or combines both keyword
|
|
|
755
788
|
### Activation
|
|
756
789
|
|
|
757
790
|
Team+Ralph activates when:
|
|
791
|
+
|
|
758
792
|
1. User invokes `/team ralph "task"` or `/oh-my-claudecode:team ralph "task"`
|
|
759
793
|
2. Keyword detector finds both `team` and `ralph` in the prompt
|
|
760
794
|
3. Hook detects `MAGIC KEYWORD: RALPH` alongside team context
|
|
@@ -791,6 +825,7 @@ state_write(mode="ralph", active=true, iteration=1, max_iterations=10, current_p
|
|
|
791
825
|
### Cancellation
|
|
792
826
|
|
|
793
827
|
Cancel either mode cancels both:
|
|
828
|
+
|
|
794
829
|
- **Cancel Ralph (linked):** Cancel Team first (graceful shutdown), then clear Ralph state
|
|
795
830
|
- **Cancel Team (linked):** Clear Team, mark Ralph iteration cancelled, stop loop
|
|
796
831
|
|
|
@@ -810,21 +845,21 @@ This prevents duplicate teams and allows graceful recovery from lead failures.
|
|
|
810
845
|
|
|
811
846
|
## Comparison: Team vs Legacy Swarm
|
|
812
847
|
|
|
813
|
-
| Aspect
|
|
814
|
-
|
|
815
|
-
| **Storage**
|
|
816
|
-
| **Dependencies**
|
|
817
|
-
| **Task claiming**
|
|
818
|
-
| **Race conditions**
|
|
819
|
-
| **Communication**
|
|
820
|
-
| **Task dependencies**
|
|
821
|
-
| **Heartbeat**
|
|
822
|
-
| **Shutdown**
|
|
823
|
-
| **Agent lifecycle**
|
|
824
|
-
| **Progress visibility** | `TaskList` shows live status with owner
|
|
825
|
-
| **Conflict prevention** | Owner field (lead-assigned)
|
|
826
|
-
| **Crash recovery**
|
|
827
|
-
| **State cleanup**
|
|
848
|
+
| Aspect | Team (Native) | Swarm (Legacy SQLite) |
|
|
849
|
+
| ----------------------- | ------------------------------------------------------------------ | -------------------------------------- |
|
|
850
|
+
| **Storage** | JSON files in `~/.claude/teams/` and `~/.claude/tasks/` | SQLite in `.omc/state/swarm.db` |
|
|
851
|
+
| **Dependencies** | `better-sqlite3` not needed | Requires `better-sqlite3` npm package |
|
|
852
|
+
| **Task claiming** | `TaskUpdate(owner + in_progress)` -- lead pre-assigns | SQLite IMMEDIATE transaction -- atomic |
|
|
853
|
+
| **Race conditions** | Possible if two agents claim same task (mitigate by pre-assigning) | None (SQLite transactions) |
|
|
854
|
+
| **Communication** | `SendMessage` (DM, broadcast, shutdown) | None (fire-and-forget agents) |
|
|
855
|
+
| **Task dependencies** | Built-in `blocks` / `blockedBy` arrays | Not supported |
|
|
856
|
+
| **Heartbeat** | Automatic idle notifications from Claude Code | Manual heartbeat table + polling |
|
|
857
|
+
| **Shutdown** | Graceful request/response protocol | Signal-based termination |
|
|
858
|
+
| **Agent lifecycle** | Auto-tracked via internal tasks + config members | Manual tracking via heartbeat table |
|
|
859
|
+
| **Progress visibility** | `TaskList` shows live status with owner | SQL queries on tasks table |
|
|
860
|
+
| **Conflict prevention** | Owner field (lead-assigned) | Lease-based claiming with timeout |
|
|
861
|
+
| **Crash recovery** | Lead detects via missing messages, reassigns | Auto-release after 5-min lease timeout |
|
|
862
|
+
| **State cleanup** | `TeamDelete` removes everything | Manual `rm` of SQLite database |
|
|
828
863
|
|
|
829
864
|
**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.
|
|
830
865
|
|
|
@@ -881,9 +916,9 @@ Optional settings live in `.claude/omc.jsonc` (project) or `~/.config/claude-omc
|
|
|
881
916
|
"maxAgents": 20,
|
|
882
917
|
"defaultAgentType": "claude",
|
|
883
918
|
"monitorIntervalMs": 30000,
|
|
884
|
-
"shutdownTimeoutMs": 15000
|
|
885
|
-
}
|
|
886
|
-
}
|
|
919
|
+
"shutdownTimeoutMs": 15000,
|
|
920
|
+
},
|
|
921
|
+
},
|
|
887
922
|
}
|
|
888
923
|
```
|
|
889
924
|
|
|
@@ -907,27 +942,27 @@ Declare which provider (`claude`, `codex`, `gemini`) and which model tier should
|
|
|
907
942
|
{
|
|
908
943
|
"team": {
|
|
909
944
|
"roleRouting": {
|
|
910
|
-
"orchestrator":
|
|
911
|
-
"planner":
|
|
912
|
-
"analyst":
|
|
913
|
-
"executor":
|
|
914
|
-
"critic":
|
|
945
|
+
"orchestrator": { "model": "inherit" },
|
|
946
|
+
"planner": { "provider": "claude", "model": "HIGH" },
|
|
947
|
+
"analyst": { "provider": "claude", "model": "HIGH" },
|
|
948
|
+
"executor": { "provider": "claude", "model": "MEDIUM" },
|
|
949
|
+
"critic": { "provider": "codex" },
|
|
915
950
|
"code-reviewer": { "provider": "gemini" },
|
|
916
|
-
"test-engineer": { "provider": "gemini", "model": "MEDIUM" }
|
|
917
|
-
}
|
|
918
|
-
}
|
|
951
|
+
"test-engineer": { "provider": "gemini", "model": "MEDIUM" },
|
|
952
|
+
},
|
|
953
|
+
},
|
|
919
954
|
}
|
|
920
955
|
```
|
|
921
956
|
|
|
922
|
-
| Role
|
|
923
|
-
|
|
924
|
-
| `orchestrator`
|
|
925
|
-
| `planner`
|
|
926
|
-
| `analyst`
|
|
927
|
-
| `executor`
|
|
928
|
-
| `critic`
|
|
929
|
-
| `code-reviewer` | gemini
|
|
930
|
-
| `test-engineer` | gemini
|
|
957
|
+
| Role | Provider | Model |
|
|
958
|
+
| --------------- | --------------- | ------------------------- |
|
|
959
|
+
| `orchestrator` | claude (pinned) | inherits invoking session |
|
|
960
|
+
| `planner` | claude | `HIGH` (opus) |
|
|
961
|
+
| `analyst` | claude | `HIGH` (opus) |
|
|
962
|
+
| `executor` | claude | `MEDIUM` (sonnet) |
|
|
963
|
+
| `critic` | codex | codex default |
|
|
964
|
+
| `code-reviewer` | gemini | gemini default |
|
|
965
|
+
| `test-engineer` | gemini | `MEDIUM` (sonnet) |
|
|
931
966
|
|
|
932
967
|
### Canonical roles
|
|
933
968
|
|
|
@@ -998,15 +1033,15 @@ MCP workers can operate in isolated git worktrees to prevent file conflicts betw
|
|
|
998
1033
|
|
|
999
1034
|
### API Reference
|
|
1000
1035
|
|
|
1001
|
-
| Function
|
|
1002
|
-
|
|
1003
|
-
| `createWorkerWorktree(teamName, workerName, repoRoot, baseBranch?)` | Create isolated worktree
|
|
1004
|
-
| `removeWorkerWorktree(teamName, workerName, repoRoot)`
|
|
1005
|
-
| `listTeamWorktrees(teamName, repoRoot)`
|
|
1006
|
-
| `cleanupTeamWorktrees(teamName, repoRoot)`
|
|
1007
|
-
| `checkMergeConflicts(workerBranch, baseBranch, repoRoot)`
|
|
1008
|
-
| `mergeWorkerBranch(workerBranch, baseBranch, repoRoot)`
|
|
1009
|
-
| `mergeAllWorkerBranches(teamName, repoRoot, baseBranch?)`
|
|
1036
|
+
| Function | Description |
|
|
1037
|
+
| ------------------------------------------------------------------- | ------------------------------ |
|
|
1038
|
+
| `createWorkerWorktree(teamName, workerName, repoRoot, baseBranch?)` | Create isolated worktree |
|
|
1039
|
+
| `removeWorkerWorktree(teamName, workerName, repoRoot)` | Remove worktree and branch |
|
|
1040
|
+
| `listTeamWorktrees(teamName, repoRoot)` | List all team worktrees |
|
|
1041
|
+
| `cleanupTeamWorktrees(teamName, repoRoot)` | Remove all team worktrees |
|
|
1042
|
+
| `checkMergeConflicts(workerBranch, baseBranch, repoRoot)` | Non-destructive conflict check |
|
|
1043
|
+
| `mergeWorkerBranch(workerBranch, baseBranch, repoRoot)` | Merge worker branch (--no-ff) |
|
|
1044
|
+
| `mergeAllWorkerBranches(teamName, repoRoot, baseBranch?)` | Merge all completed workers |
|
|
1010
1045
|
|
|
1011
1046
|
### Important Notes
|
|
1012
1047
|
|
|
@@ -1038,3 +1073,10 @@ MCP workers can operate in isolated git worktrees to prevent file conflicts betw
|
|
|
1038
1073
|
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.
|
|
1039
1074
|
|
|
1040
1075
|
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.
|
|
1076
|
+
|
|
1077
|
+
## Parallel session caveats
|
|
1078
|
+
|
|
1079
|
+
- **Multi-repo workspace anchor:** drop a `.omc-workspace` marker at the parent directory so multiple sessions across sub-repos share one `.omc/`. Resolution order: `OMC_STATE_DIR > .omc-workspace > git > cwd`. See `docs/REFERENCE.md`.
|
|
1080
|
+
- **Session id source:** OMC_SESSION_ID env var wins in CLI contexts; hook payload data.session_id wins in hook contexts.
|
|
1081
|
+
- **Plan id (when applicable):** Team state is session-scoped. Team handoffs at `.omc/handoffs/` are shared by design (see Wave G in the workspace plan).
|
|
1082
|
+
- **Parallel verdict:** supported (session-scoped + shared handoffs by design)
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ultragoal
|
|
3
|
+
description: Durable multi-goal workflow that persists plan/ledger artifacts under .omc/ultragoal and prints Claude /goal handoff text for the active session
|
|
4
|
+
argument-hint: "<brief or subcommand>"
|
|
5
|
+
level: 3
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<Purpose>
|
|
9
|
+
Ultragoal breaks a brief into an ordered set of goals, records start/checkpoint/blocker/failure events in a durable append-only ledger, and tells the active Claude agent how to drive the Claude Code `/goal` slash command alongside the plan. It does not — and cannot — mutate Claude `/goal` state from the shell; it persists durable repo state and prints a model-facing handoff that the active agent must act on in-session.
|
|
10
|
+
</Purpose>
|
|
11
|
+
|
|
12
|
+
<Use_When>
|
|
13
|
+
- The user wants a durable, repo-native way to track an ultragoal across multiple Claude sessions or worktrees
|
|
14
|
+
- The work is large enough to warrant multiple ordered "stories" with attempt counts and per-story evidence
|
|
15
|
+
- The user wants the final completion gated behind ai-slop-cleaner + verification + $code-review
|
|
16
|
+
- The user wants the active Claude `/goal` directive coordinated with the ledger so that a session restart does not lose progress
|
|
17
|
+
</Use_When>
|
|
18
|
+
|
|
19
|
+
<Do_Not_Use_When>
|
|
20
|
+
- The task is a single small change — use direct delegation or `ralph` instead
|
|
21
|
+
- The user wants the assistant to literally invoke `/goal` itself from the shell — that is not possible; `omc ultragoal` only writes artifacts and prints handoff text
|
|
22
|
+
- The user wants a planning-only artifact with no execution loop — use `plan` instead
|
|
23
|
+
</Do_Not_Use_When>
|
|
24
|
+
|
|
25
|
+
<Why_This_Exists>
|
|
26
|
+
Claude Code `/goal` is a session-scoped Stop hook: it blocks the session from stopping until a condition holds, and auto-clears on success. That is a great single-session execution primitive, but it loses state across sessions and does not by itself enforce a final review gate. `omc ultragoal` adds a durable plan, ledger, and gating layer so a long multi-step initiative can survive session restarts, fresh worktrees, and review iterations while still leveraging Claude `/goal` to keep the active agent focused.
|
|
27
|
+
</Why_This_Exists>
|
|
28
|
+
|
|
29
|
+
<How_To_Use>
|
|
30
|
+
|
|
31
|
+
1. Create a plan from a brief:
|
|
32
|
+
```
|
|
33
|
+
omc ultragoal create-goals --brief-file plan.md
|
|
34
|
+
```
|
|
35
|
+
Or with explicit stories:
|
|
36
|
+
```
|
|
37
|
+
omc ultragoal create-goals --brief "ship the migration" \
|
|
38
|
+
--goal "Schema::Add new columns" \
|
|
39
|
+
--goal "Backfill::Backfill rows in batches" \
|
|
40
|
+
--goal "Cutover::Drop old columns and switch reads"
|
|
41
|
+
```
|
|
42
|
+
The default mode is `aggregate` (one Claude `/goal` covers the run).
|
|
43
|
+
Pass `--claude-goal-mode per-story` if you want each story to have its own `/goal`.
|
|
44
|
+
|
|
45
|
+
**Multi-repo workspaces / parallel sessions:** when several Claude sessions
|
|
46
|
+
in the same workspace need to run `/ultragoal` concurrently, pass either
|
|
47
|
+
`--plan-id <stable-id>` or `--auto-plan-id` so the plan is written to
|
|
48
|
+
`.omc/ultragoal/plans/{planId}/` instead of the shared single-plan path.
|
|
49
|
+
Without that flag, two sessions creating goals would clobber each other.
|
|
50
|
+
`--auto-plan-id` derives `{epochMs}-{slug}` from the brief title. Then thread
|
|
51
|
+
the same `--plan-id <id>` through every subsequent subcommand in that session.
|
|
52
|
+
Use `omc ultragoal list-plans` to enumerate available planIds when needed.
|
|
53
|
+
|
|
54
|
+
2. Start (or resume) the next story:
|
|
55
|
+
```
|
|
56
|
+
omc ultragoal complete-goals
|
|
57
|
+
```
|
|
58
|
+
This prints a model-facing handoff. The active Claude agent must read it and:
|
|
59
|
+
- Confirm/Set the active `/goal` condition in this session.
|
|
60
|
+
- Work the story.
|
|
61
|
+
- When the story is complete (and for the final story, after the full quality gate), share back a snapshot of the active `/goal` state and call `checkpoint`.
|
|
62
|
+
|
|
63
|
+
3. Checkpoint a story:
|
|
64
|
+
```
|
|
65
|
+
omc ultragoal checkpoint --goal-id G001-... --status complete \
|
|
66
|
+
--evidence "tests/files/PR evidence" \
|
|
67
|
+
--claude-goal-json '{"goal":{"objective":"...","status":"active"}}'
|
|
68
|
+
```
|
|
69
|
+
For the final story, also pass `--quality-gate-json` containing
|
|
70
|
+
`aiSlopCleaner`, `verification`, and `codeReview` evidence (all clean).
|
|
71
|
+
|
|
72
|
+
4. If the final review is not clean, do NOT mark complete. Record blockers:
|
|
73
|
+
```
|
|
74
|
+
omc ultragoal record-review-blockers --goal-id G00X-... \
|
|
75
|
+
--title "Resolve final code-review blockers" \
|
|
76
|
+
--objective "Fix the listed review findings and rerun final gates" \
|
|
77
|
+
--evidence "<the review findings>" \
|
|
78
|
+
--claude-goal-json '{"goal":{"objective":"...","status":"active"}}'
|
|
79
|
+
```
|
|
80
|
+
This appends a new blocker story and keeps the Claude `/goal` active.
|
|
81
|
+
|
|
82
|
+
5. Inspect state at any time:
|
|
83
|
+
```
|
|
84
|
+
omc ultragoal status
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
</How_To_Use>
|
|
88
|
+
|
|
89
|
+
<Important_Limitations>
|
|
90
|
+
- The shell cannot invoke or mutate Claude Code `/goal` state. `omc ultragoal` only persists durable artifacts and prints instructions that the active Claude agent reads and acts on in-session.
|
|
91
|
+
- Snapshots passed via `--claude-goal-json` are model-supplied proof of the active `/goal` state; OMC validates them for textual consistency with the plan's expected objective and ledger event, but it cannot independently observe Claude `/goal` state.
|
|
92
|
+
- If the Claude `/goal` slash command is renamed or restructured, only the handoff wording needs to change; the reconciliation logic is name-agnostic.
|
|
93
|
+
</Important_Limitations>
|
|
@@ -15,17 +15,21 @@ You are now in **ULTRAQA** mode - an autonomous QA cycling workflow that runs un
|
|
|
15
15
|
|
|
16
16
|
**Cycle**: qa-tester → architect verification → fix → repeat
|
|
17
17
|
|
|
18
|
+
## Relationship to `/goal`, Ralph, Team, and Ultragoal
|
|
19
|
+
|
|
20
|
+
UltraQA owns repeated quality-gate cycling only. Use the deterministic conflict policies `refuse`, `adopt_existing`, and `artifact_only` rather than non-deterministic warning handling. Use it after the target behavior is known and the remaining question is whether tests, build, lint, typecheck, or another explicit QA condition passes. If Claude Code `/goal` is active, UltraQA may produce visible command evidence for that goal, but must not describe the `/goal` evaluator as independently running commands or reading files. If Ralph or Team is active, UltraQA is a verification/fix sub-loop under that authority rather than a competing session loop. If no active loop is safe, record QA expectations and evidence in artifact-only Ultragoal notes instead of claiming automatic execution.
|
|
21
|
+
|
|
18
22
|
## Goal Parsing
|
|
19
23
|
|
|
20
24
|
Parse the goal from arguments. Supported formats:
|
|
21
25
|
|
|
22
|
-
| Invocation
|
|
23
|
-
|
|
24
|
-
| `/oh-my-claudecode:ultraqa --tests`
|
|
25
|
-
| `/oh-my-claudecode:ultraqa --build`
|
|
26
|
-
| `/oh-my-claudecode:ultraqa --lint`
|
|
27
|
-
| `/oh-my-claudecode:ultraqa --typecheck`
|
|
28
|
-
| `/oh-my-claudecode:ultraqa --custom "pattern"` | custom
|
|
26
|
+
| Invocation | Goal Type | What to Check |
|
|
27
|
+
| ---------------------------------------------- | --------- | -------------------------------- |
|
|
28
|
+
| `/oh-my-claudecode:ultraqa --tests` | tests | All test suites pass |
|
|
29
|
+
| `/oh-my-claudecode:ultraqa --build` | build | Build succeeds with exit 0 |
|
|
30
|
+
| `/oh-my-claudecode:ultraqa --lint` | lint | No lint errors |
|
|
31
|
+
| `/oh-my-claudecode:ultraqa --typecheck` | typecheck | No TypeScript errors |
|
|
32
|
+
| `/oh-my-claudecode:ultraqa --custom "pattern"` | custom | Custom success pattern in output |
|
|
29
33
|
|
|
30
34
|
If no structured goal provided, interpret the argument as a custom goal.
|
|
31
35
|
|
|
@@ -52,6 +56,7 @@ If no structured goal provided, interpret the argument as a custom goal.
|
|
|
52
56
|
- **NO** → Continue to step 3
|
|
53
57
|
|
|
54
58
|
3. **ARCHITECT DIAGNOSIS**: Spawn architect to analyze failure
|
|
59
|
+
|
|
55
60
|
```
|
|
56
61
|
Task(subagent_type="oh-my-claudecode:architect", model="opus", prompt="DIAGNOSE FAILURE:
|
|
57
62
|
Goal: [goal type]
|
|
@@ -60,6 +65,7 @@ If no structured goal provided, interpret the argument as a custom goal.
|
|
|
60
65
|
```
|
|
61
66
|
|
|
62
67
|
4. **FIX ISSUES**: Apply architect's recommendations
|
|
68
|
+
|
|
63
69
|
```
|
|
64
70
|
Task(subagent_type="oh-my-claudecode:executor", model="sonnet", prompt="FIX:
|
|
65
71
|
Issue: [architect diagnosis]
|
|
@@ -71,16 +77,17 @@ If no structured goal provided, interpret the argument as a custom goal.
|
|
|
71
77
|
|
|
72
78
|
## Exit Conditions
|
|
73
79
|
|
|
74
|
-
| Condition
|
|
75
|
-
|
|
76
|
-
| **Goal Met**
|
|
77
|
-
| **Cycle 5 Reached**
|
|
78
|
-
| **Same Failure 3x**
|
|
79
|
-
| **Environment Error** | Exit: "ULTRAQA ERROR: [tmux/port/dependency issue]"
|
|
80
|
+
| Condition | Action |
|
|
81
|
+
| --------------------- | ----------------------------------------------------------------------------- |
|
|
82
|
+
| **Goal Met** | Exit with success: "ULTRAQA COMPLETE: Goal met after N cycles" |
|
|
83
|
+
| **Cycle 5 Reached** | Exit with diagnosis: "ULTRAQA STOPPED: Max cycles. Diagnosis: ..." |
|
|
84
|
+
| **Same Failure 3x** | Exit early: "ULTRAQA STOPPED: Same failure detected 3 times. Root cause: ..." |
|
|
85
|
+
| **Environment Error** | Exit: "ULTRAQA ERROR: [tmux/port/dependency issue]" |
|
|
80
86
|
|
|
81
87
|
## Observability
|
|
82
88
|
|
|
83
89
|
Output progress each cycle:
|
|
90
|
+
|
|
84
91
|
```
|
|
85
92
|
[ULTRAQA Cycle 1/5] Running tests...
|
|
86
93
|
[ULTRAQA Cycle 1/5] FAILED - 3 tests failing
|
|
@@ -94,6 +101,7 @@ Output progress each cycle:
|
|
|
94
101
|
## State Tracking
|
|
95
102
|
|
|
96
103
|
Track state in `.omc/ultraqa-state.json`:
|
|
104
|
+
|
|
97
105
|
```json
|
|
98
106
|
{
|
|
99
107
|
"active": true,
|
|
@@ -132,6 +140,13 @@ rm -f .omc/state/ultraqa-state.json
|
|
|
132
140
|
|
|
133
141
|
This ensures clean state for future sessions. Stale state files with `active: false` should not be left behind.
|
|
134
142
|
|
|
143
|
+
## Parallel session caveats
|
|
144
|
+
|
|
145
|
+
- **Multi-repo workspace anchor:** drop a `.omc-workspace` marker at the parent directory so multiple sessions across sub-repos share one `.omc/`. Resolution order: `OMC_STATE_DIR > .omc-workspace > git > cwd`. See `docs/REFERENCE.md`.
|
|
146
|
+
- **Session id source:** OMC_SESSION_ID env var wins in CLI contexts; hook payload data.session_id wins in hook contexts.
|
|
147
|
+
- **Plan id (when applicable):** UltraQA state is session-scoped. Mutual-exclusion with ralph applies only within the same session.
|
|
148
|
+
- **Parallel verdict:** supported (session-scoped state)
|
|
149
|
+
|
|
135
150
|
---
|
|
136
151
|
|
|
137
152
|
Begin ULTRAQA cycling now. Parse the goal and start cycle 1.
|