docs(workspace): document omo workspace paths

This commit is contained in:
YeonGyu-Kim
2026-05-16 17:42:06 +09:00
parent f10f796318
commit 63519ec563
14 changed files with 38 additions and 38 deletions
+6 -6
View File
@@ -282,15 +282,15 @@ Once all three gates pass:
gh pr merge "$PR_NUMBER" --squash --delete-branch
```
### Sync .sisyphus state back to main repo
### Sync .omo state back to main repo
Before removing the worktree, copy `.sisyphus/` state back. When `.sisyphus/` is gitignored, files written there during worktree execution are not committed or merged — they would be lost on worktree removal.
Before removing the worktree, copy `.omo/` state back. When `.omo/` is gitignored, files written there during worktree execution are not committed or merged — they would be lost on worktree removal.
```bash
# Sync .sisyphus state from worktree to main repo (preserves task state, plans, notepads)
if [ -d "$WORKTREE_PATH/.sisyphus" ]; then
mkdir -p "$ORIGINAL_DIR/.sisyphus"
cp -r "$WORKTREE_PATH/.sisyphus/"* "$ORIGINAL_DIR/.sisyphus/" 2>/dev/null || true
# Sync .omo state from worktree to main repo (preserves task state, plans, notepads)
if [ -d "$WORKTREE_PATH/.omo" ]; then
mkdir -p "$ORIGINAL_DIR/.omo"
cp -r "$WORKTREE_PATH/.omo/"* "$ORIGINAL_DIR/.omo/" 2>/dev/null || true
fi
```
+6 -6
View File
@@ -282,15 +282,15 @@ Once all three gates pass:
gh pr merge "$PR_NUMBER" --squash --delete-branch
```
### Sync .sisyphus state back to main repo
### Sync .omo state back to main repo
Before removing the worktree, copy `.sisyphus/` state back. When `.sisyphus/` is gitignored, files written there during worktree execution are not committed or merged — they would be lost on worktree removal.
Before removing the worktree, copy `.omo/` state back. When `.omo/` is gitignored, files written there during worktree execution are not committed or merged — they would be lost on worktree removal.
```bash
# Sync .sisyphus state from worktree to main repo (preserves task state, plans, notepads)
if [ -d "$WORKTREE_PATH/.sisyphus" ]; then
mkdir -p "$ORIGINAL_DIR/.sisyphus"
cp -r "$WORKTREE_PATH/.sisyphus/"* "$ORIGINAL_DIR/.sisyphus/" 2>/dev/null || true
# Sync .omo state from worktree to main repo (preserves task state, plans, notepads)
if [ -d "$WORKTREE_PATH/.omo" ]; then
mkdir -p "$ORIGINAL_DIR/.omo"
cp -r "$WORKTREE_PATH/.omo/"* "$ORIGINAL_DIR/.omo/" 2>/dev/null || true
fi
```
+2 -2
View File
@@ -42,7 +42,7 @@ oh-my-opencode/
├── bun-test.d.ts # Custom bun:test type augmentations
├── .opencode/ # Project-scope skills + commands (skills/, command/) + background-tasks state
├── .agents/ # Mirrored project-scope skills + commands (recent migration target)
├── .sisyphus/ # AI agent workspace (run-continuation/, plans/, tasks/, notepads/)
├── .omo/ # AI agent workspace (run-continuation/, plans/, tasks/, notepads/)
└── .local-ignore/ # Dev-only test fixtures + PR worktrees
```
@@ -254,7 +254,7 @@ bunx oh-my-opencode mcp-oauth login <server-url> # Tier-3 MCP OAuth (PKCE + DCR
- **Build:** `bun build` (ESM) + `tsc --emitDeclarationOnly`, externals: `@ast-grep/napi`, `zod`.
- **CI tests:** root tests run through plain `bun test`; `web/**` has its own package-level CI workflow.
- **122 barrel `index.ts` files** establish module boundaries.
- **Architecture rules** enforced via `.sisyphus/rules/modular-code-enforcement.md` (when present in workspace).
- **Architecture rules** enforced via `.omo/rules/modular-code-enforcement.md` (when present in workspace).
- **Windows builds:** run on `windows-latest` (not cross-compiled) to avoid Bun segfaults.
- **Platform binaries:** detect AVX2 + libc family at runtime, fallback to baseline if needed.
- **IntentGate (`keyword-detector`):** classifies user intent (`ultrawork`/`ulw`, `search`, `analyze`, `team`) and injects mode-specific prompts.
+2 -2
View File
@@ -22,14 +22,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `prompt-async-gate`: dispatch timeout via `Promise.race` with a default 30s window. Previously a hung `promptAsync` deadlocked the gate for that sessionID until process restart. (BLOCKER-1)
- `prompt-async-gate`: post-dispatch failure now keeps the reservation hold regardless of whether `promptAsync` resolved or threw. AGENTS.md's documented race window ("returns before durably accepted, later failures arrive as `session.error`") is now covered. (BLOCKER-2)
- `prompt-async-gate.test.ts`: replaced `setTimeout`-based synchronization with event-driven patterns to comply with the new `.sisyphus/rules/test-discipline.md` rule. (BLOCKER-3)
- `prompt-async-gate.test.ts`: replaced `setTimeout`-based synchronization with event-driven patterns to comply with the new `.omo/rules/test-discipline.md` rule. (BLOCKER-3)
- `model-suggestion-retry`: releases the reservation before the suggested-model retry so the second attempt can dispatch immediately. Without this, BLOCKER-2's post-dispatch hold trapped the retry path.
### Internal
- `prompt-async-route-audit.test.ts` migrated to TypeScript compiler API for AST-based detection. Catches destructuring, bracket access, optional chaining, and type-cast aliasing bypass patterns. Two existing production callers are documented in `RAW_PROMPT_ALLOWLIST` with justifications: `src/plugin/event.ts` (team-idle-wake-hint client facade) and `src/hooks/session-recovery/recover-unavailable-tool.ts` (capability check before gate-routed dispatch). (HIGH-5)
- New `mock-module-lifecycle-audit.test.ts` enforces cleanup pairing for `mock.module(...)` calls in test files; existing offenders allowlisted with TODO references. (HIGH-10)
- `.sisyphus/rules/test-discipline.md` added in this release window forbidding `setTimeout(resolve, N)` and `await sleep(N)` in test bodies unless time is the SUT. Several CI sharding commits earlier in the window were superseded by removing the sharded runner in favor of the rule.
- `.omo/rules/test-discipline.md` added in this release window forbidding `setTimeout(resolve, N)` and `await sleep(N)` in test bodies unless time is the SUT. Several CI sharding commits earlier in the window were superseded by removing the sharded runner in favor of the rule.
### Known Issues
+10 -10
View File
@@ -55,7 +55,7 @@ flowchart TB
User -->|"Describe work"| Prometheus
Prometheus -->|"Consult"| Metis
Prometheus -->|"Interview"| User
Prometheus -->|"Generate plan"| Plan[".sisyphus/plans/*.md"]
Prometheus -->|"Generate plan"| Plan[".omo/plans/*.md"]
Plan -->|"High accuracy?"| Momus
Momus -->|"OKAY / REJECT"| Prometheus
@@ -105,7 +105,7 @@ Mode distinction:
### Prometheus: Your Strategic Consultant
Prometheus is not just a planner, it's an intelligent interviewer that helps you think through what you actually need. It is **READ-ONLY** - can only create or modify markdown files within `.sisyphus/` directory.
Prometheus is not just a planner, it's an intelligent interviewer that helps you think through what you actually need. It is **READ-ONLY** - can only create or modify markdown files within `.omo/` directory.
**The Interview Process:**
@@ -244,7 +244,7 @@ This prevents repeating mistakes and ensures consistent patterns.
**Notepad System:**
```
.sisyphus/notepads/{plan-name}/
.omo/notepads/{plan-name}/
├── learnings.md # Patterns, conventions, successful approaches
├── decisions.md # Architectural choices and rationales
├── issues.md # Problems, blockers, gotchas encountered
@@ -379,7 +379,7 @@ For `subagent_type` team members, current eligibility is:
Why `oracle`/`prometheus` are rejected in team members:
- Oracle is read-only (cannot write/edit/patch/delegate)
- Prometheus is constrained to `.sisyphus/*.md` writes by the `prometheus-md-only` hook
- Prometheus is constrained to `.omo/*.md` writes by the `prometheus-md-only` hook
---
@@ -394,7 +394,7 @@ Why `oracle`/`prometheus` are rejected in team members:
2. Select "Prometheus" from the agent list
3. Describe your work: "I want to refactor the auth system"
4. Answer interview questions
5. Prometheus creates plan in .sisyphus/plans/{name}.md
5. Prometheus creates plan in .omo/plans/{name}.md
```
**Method 2: Use @plan Command (in Sisyphus)**
@@ -404,7 +404,7 @@ Why `oracle`/`prometheus` are rejected in team members:
2. Type: @plan "I want to refactor the auth system"
3. The @plan command automatically switches to Prometheus
4. Answer interview questions
5. Prometheus creates plan in .sisyphus/plans/{name}.md
5. Prometheus creates plan in .omo/plans/{name}.md
```
**Which Should You Use?**
@@ -427,7 +427,7 @@ User: /start-work
[start-work hook activates]
Check: Does .sisyphus/boulder.json exist?
Check: Does .omo/boulder.json exist?
├─ YES (existing work) → RESUME MODE
│ - Read the existing boulder state
@@ -436,7 +436,7 @@ Check: Does .sisyphus/boulder.json exist?
│ - Atlas continues where you left off
└─ NO (fresh start) → INIT MODE
- Find the most recent plan in .sisyphus/plans/
- Find the most recent plan in .omo/plans/
- Create new boulder.json tracking this plan
- Switch session agent to Atlas
- Begin execution from task 1
@@ -563,8 +563,8 @@ Prometheus enters interview mode by default. It will ask you questions about you
Either:
- No plans exist in `.sisyphus/plans/` → Create one with Prometheus first
- Plans exist but boulder.json points elsewhere → Delete `.sisyphus/boulder.json` and retry
- No plans exist in `.omo/plans/` → Create one with Prometheus first
- Plans exist but boulder.json points elsewhere → Delete `.omo/boulder.json` and retry
### "I'm in Atlas but I want to switch back to normal mode"
+1 -1
View File
@@ -146,4 +146,4 @@ When enabled, each member gets a dedicated tmux pane attached to that member's s
## Reference
Full design: `.sisyphus/plans/team-mode.md`.
Full design: `.omo/plans/team-mode.md`.
+2 -2
View File
@@ -451,7 +451,7 @@ The `sisyphus.tasks` section configures **storage options** only:
{
"sisyphus": {
"tasks": {
"storage_path": ".sisyphus/tasks",
"storage_path": ".omo/tasks",
"claude_code_compat": false
}
}
@@ -460,7 +460,7 @@ The `sisyphus.tasks` section configures **storage options** only:
| Option | Default | Description |
| -------------------- | ----------------- | ------------------------------------------ |
| `storage_path` | `.sisyphus/tasks` | Storage path (relative to project root) |
| `storage_path` | `.omo/tasks` | Storage path (relative to project root) |
| `task_list_id` | - | Force task list ID (alternative to env `ULTRAWORK_TASK_LIST_ID`) |
| `claude_code_compat` | `false` | Enable Claude Code path compatibility mode |
+1 -1
View File
@@ -707,7 +707,7 @@ TaskUpdate({ id: "T-002", status: "completed" });
// T-003 now unblocked
```
**Storage**: Tasks are stored as JSON files in `.sisyphus/tasks/`.
**Storage**: Tasks are stored as JSON files in `.omo/tasks/`.
**Difference from TodoWrite**:
+1 -1
View File
@@ -231,7 +231,7 @@ for their trigger. Static policy alone is not enough.
- PR #3866 -> PR #4053: schema-compatible synthetic tool results for
post-compaction recovery, related to safe recovery dispatch.
- Root `AGENTS.md`: section "Internal message injection is dangerous".
- `.sisyphus/rules/test-discipline.md`: forbids `setTimeout(resolve, N)` and
- `.omo/rules/test-discipline.md`: forbids `setTimeout(resolve, N)` and
`await sleep(N)` in tests unless time itself is the system under test.
- Implementation: `src/shared/prompt-async-gate.ts`.
- Audit: `src/shared/prompt-async-route-audit.test.ts`.
+1 -1
View File
@@ -31,7 +31,7 @@ description: Developer reference for the Prometheus strategic planner agent —
- May ONLY create/edit `.md` files (enforced by hook)
- FORBIDDEN paths: `src/`, `package.json`, config files
- Must explore codebase before planning (NEVER plan blind)
- Plans saved to `.sisyphus/plans/`
- Plans saved to `.omo/plans/`
- Acceptance criteria requiring "user manually tests" are FORBIDDEN
## PLAN OUTPUT FORMAT
+1 -1
View File
@@ -16,7 +16,7 @@ Commander.js CLI with 7 commands. Entry: `index.ts` → `runCli()` in `cli-progr
| `get-local-version` | Version detection | Installed vs npm latest |
| `mcp-oauth` | OAuth token management | login (PKCE), logout, status |
| `refresh-model-capabilities` | Refresh models.dev cache | Model capabilities refresh |
| `boulder` | Boulder state inspector | Format work-state + tasks from `.sisyphus/boulder-state/` |
| `boulder` | Boulder state inspector | Format work-state + tasks from `.omo/boulder-state/` |
## STRUCTURE
+1 -1
View File
@@ -36,7 +36,7 @@ interface Task {
## STORAGE
- Location: `.sisyphus/tasks/` directory
- Location: `.omo/tasks/` directory
- Format: JSON files, one per task
- Atomic writes: temp file → rename
- Locking: file-based lock for concurrent access
+1 -1
View File
@@ -42,7 +42,7 @@ session.idle event
| `session-last-agent.ts` | Determine which agent owns the session |
| `recent-model-resolver.ts` | Resolve model used in recent messages |
| `subagent-session-id.ts` | Detect if session is a subagent session |
| `sisyphus-path.ts` | Resolve `.sisyphus/` directory path |
| `omo-path.ts` | Resolve `.omo/` directory path |
| `is-abort-error.ts` | Detect abort signals in session output |
| `types.ts` | `SessionState`, `AtlasHookOptions`, `AtlasContext` |
+3 -3
View File
@@ -10,7 +10,7 @@
```
/ralph-loop → startLoop(sessionID, prompt, options)
→ loopState.startLoop() → persists state to .sisyphus/ralph-loop.local.md
→ loopState.startLoop() → persists state to .omo/ralph-loop.local.md
→ session.idle events → createRalphLoopEventHandler()
→ completionPromiseDetector: scan output for <promise>DONE</promise>
→ if not done: inject continuation prompt → loop
@@ -28,7 +28,7 @@
| `completion-promise-detector.ts` | Scan session transcript for `<promise>DONE</promise>` |
| `continuation-prompt-builder.ts` | Build continuation message for next iteration |
| `continuation-prompt-injector.ts` | Inject built prompt into active session |
| `storage.ts` | Read/write `.sisyphus/ralph-loop.local.md` state file |
| `storage.ts` | Read/write `.omo/ralph-loop.local.md` state file |
| `message-storage-directory.ts` | Temp dir for prompt injection |
| `with-timeout.ts` | API call wrapper with timeout (default 5000ms) |
| `types.ts` | `RalphLoopState`, `RalphLoopOptions`, loop iteration types |
@@ -36,7 +36,7 @@
## STATE FILE
```
.sisyphus/ralph-loop.local.md (gitignored)
.omo/ralph-loop.local.md (gitignored)
→ sessionID, prompt, iteration count, maxIterations, completionPromise, ultrawork flag
```