From 63519ec5637dba8d6d9916474047fca132504752 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Sat, 16 May 2026 17:42:06 +0900 Subject: [PATCH] docs(workspace): document omo workspace paths --- .agents/skills/work-with-pr/SKILL.md | 12 ++++++------ .opencode/skills/work-with-pr/SKILL.md | 12 ++++++------ AGENTS.md | 4 ++-- CHANGELOG.md | 4 ++-- docs/guide/orchestration.md | 20 ++++++++++---------- docs/guide/team-mode.md | 2 +- docs/reference/configuration.md | 4 ++-- docs/reference/features.md | 2 +- docs/reference/prompt-async-gate-rfc.md | 2 +- src/agents/prometheus/AGENTS.md | 2 +- src/cli/AGENTS.md | 2 +- src/features/claude-tasks/AGENTS.md | 2 +- src/hooks/atlas/AGENTS.md | 2 +- src/hooks/ralph-loop/AGENTS.md | 6 +++--- 14 files changed, 38 insertions(+), 38 deletions(-) diff --git a/.agents/skills/work-with-pr/SKILL.md b/.agents/skills/work-with-pr/SKILL.md index 4858b8de6..100277b24 100644 --- a/.agents/skills/work-with-pr/SKILL.md +++ b/.agents/skills/work-with-pr/SKILL.md @@ -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 ``` diff --git a/.opencode/skills/work-with-pr/SKILL.md b/.opencode/skills/work-with-pr/SKILL.md index 4858b8de6..100277b24 100644 --- a/.opencode/skills/work-with-pr/SKILL.md +++ b/.opencode/skills/work-with-pr/SKILL.md @@ -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 ``` diff --git a/AGENTS.md b/AGENTS.md index 4e268fbf0..c4bcc7518 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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 # 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. diff --git a/CHANGELOG.md b/CHANGELOG.md index bd5a4f072..0e957d713 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/docs/guide/orchestration.md b/docs/guide/orchestration.md index e082025f8..d80e56907 100644 --- a/docs/guide/orchestration.md +++ b/docs/guide/orchestration.md @@ -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" diff --git a/docs/guide/team-mode.md b/docs/guide/team-mode.md index 1396e2a95..be2eaf7e5 100644 --- a/docs/guide/team-mode.md +++ b/docs/guide/team-mode.md @@ -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`. diff --git a/docs/reference/configuration.md b/docs/reference/configuration.md index 53fe9e100..dd28c4e4f 100644 --- a/docs/reference/configuration.md +++ b/docs/reference/configuration.md @@ -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 | diff --git a/docs/reference/features.md b/docs/reference/features.md index 3ac2012c5..c0c37d841 100644 --- a/docs/reference/features.md +++ b/docs/reference/features.md @@ -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**: diff --git a/docs/reference/prompt-async-gate-rfc.md b/docs/reference/prompt-async-gate-rfc.md index 06eb6fe1f..799a2cb80 100644 --- a/docs/reference/prompt-async-gate-rfc.md +++ b/docs/reference/prompt-async-gate-rfc.md @@ -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`. diff --git a/src/agents/prometheus/AGENTS.md b/src/agents/prometheus/AGENTS.md index 392b8cf9a..3eabbb0b8 100644 --- a/src/agents/prometheus/AGENTS.md +++ b/src/agents/prometheus/AGENTS.md @@ -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 diff --git a/src/cli/AGENTS.md b/src/cli/AGENTS.md index 952c02d15..54dd68ee2 100644 --- a/src/cli/AGENTS.md +++ b/src/cli/AGENTS.md @@ -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 diff --git a/src/features/claude-tasks/AGENTS.md b/src/features/claude-tasks/AGENTS.md index 149a6eba7..c2da23fbd 100644 --- a/src/features/claude-tasks/AGENTS.md +++ b/src/features/claude-tasks/AGENTS.md @@ -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 diff --git a/src/hooks/atlas/AGENTS.md b/src/hooks/atlas/AGENTS.md index 2acbd548e..39aba856c 100644 --- a/src/hooks/atlas/AGENTS.md +++ b/src/hooks/atlas/AGENTS.md @@ -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` | diff --git a/src/hooks/ralph-loop/AGENTS.md b/src/hooks/ralph-loop/AGENTS.md index 5ce56921a..f24b9b637 100644 --- a/src/hooks/ralph-loop/AGENTS.md +++ b/src/hooks/ralph-loop/AGENTS.md @@ -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 DONE → if not done: inject continuation prompt → loop @@ -28,7 +28,7 @@ | `completion-promise-detector.ts` | Scan session transcript for `DONE` | | `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 ```