oh-my-opencode (also published as oh-my-openagent, and invoked as omo) is a batteries-included plugin that turns OpenCode into a multi-model AI agent harness. It adds a cast of purpose-built coding agents, parallel background workers, hash-anchored editing, LSP/AST code tools, a keyword-driven "ultrawork" orchestration mode, team mode for multi-agent collaboration, and dozens of quality-of-life hooks — all installed with a single command.
The same engine also ships as LazyCodex, a plugin for OpenAI's Codex CLI. This guide covers everyday usage; deep architecture, the full configuration reference, and operations live in the companion Admin Guide.
Note
oh-my-opencode is a plugin, not a standalone model. It rides on top of OpenCode (or Codex) and your own model subscriptions (Claude, OpenAI, Gemini, GitHub Copilot, MiniMax, Kimi, Z.ai, and more). You bring the model access; oh-my-opencode makes the agent dramatically more capable.
1. Quick Start
Get from zero to a working agent in three steps.
Step 1 — Install OpenCode
oh-my-opencode is an OpenCode plugin, so you need OpenCode first. If you do not have it yet, install it from opencode.ai. The installer in Step 2 will check for it and guide you.
Step 2 — Run the interactive installer
npx oh-my-opencode install
This launches an interactive terminal UI (TUI) that:
- Detects your OpenCode (or Codex) installation.
- Asks which model subscriptions you have (Claude, OpenAI/ChatGPT, Gemini, GitHub Copilot, and others).
- Writes the plugin configuration and registers the bundled agents, tools, and MCP servers.
✔ Detected OpenCode
✔ Configured Claude (max20), OpenAI
✔ Registered agents: Sisyphus, Atlas, Prometheus, Hephaestus …
✔ oh-my-opencode is ready. Start OpenCode and pick the "Sisyphus" agent.
Tip
omoandoh-my-openagentare aliases for the same binary.npx omo installdoes exactly the same thing asnpx oh-my-opencode install.
Step 3 — Start working
Open OpenCode in your project and select an agent (Sisyphus is the default builder). Or drive it headlessly from the shell:
omo run "Add input validation to the signup form and write tests"
[12:01:04] Sisyphus › Reading src/forms/signup.ts …
[12:01:22] Sisyphus › Editing src/forms/signup.ts (hashline_edit)
[12:01:48] Sisyphus › Running tests … 14 passed
✔ Done
That's it. The sections below explain everything you can do from here.
2. Installation
2.1 Requirements
| Requirement | Detail |
|---|---|
| OpenCode | The host application. Install separately from opencode.ai. |
| Node.js | v20 or newer (the CLI installer and Codex components require it). |
| Bun | Bundled into the prebuilt binaries; you do not need to install it separately for normal use. |
| Operating system | macOS (arm64/x64), Linux (x64/arm64, glibc or musl), and Windows (x64). Prebuilt binaries are shipped for each. |
| A model subscription | At least one of: Claude, OpenAI/ChatGPT, Gemini, GitHub Copilot, OpenCode Zen, Z.ai, Kimi, OpenCode Go, or Vercel AI Gateway. |
Note
Platform binaries are delivered as optional npm dependencies (
oh-my-opencode-darwin-arm64,oh-my-opencode-linux-x64,oh-my-opencode-windows-x64, and so on). Your package manager automatically picks the one matching your OS and CPU. "baseline" variants exist for older CPUs without AVX2.
2.2 Install for OpenCode
The interactive installer is the recommended path:
npx oh-my-opencode install
If you prefer a non-interactive install (for scripts or CI), pass --no-tui together with explicit subscription flags:
npx oh-my-opencode install --no-tui --claude max20 --openai yes
The available install flags are:
| Flag | Values | Meaning |
|---|---|---|
--no-tui |
— | Run non-interactively. Requires the other options to be set explicitly. |
--claude <value> |
no, yes, max20 |
Claude subscription tier. max20 is the Claude Max 20× plan. |
--openai <value> |
no, yes |
OpenAI / ChatGPT subscription. |
--gemini <value> |
no, yes |
Google Gemini integration. |
--copilot <value> |
no, yes |
GitHub Copilot subscription. |
--opencode-zen <value> |
no, yes |
OpenCode Zen access. |
--zai-coding-plan <value> |
no, yes |
Z.ai Coding Plan subscription. |
--kimi-for-coding <value> |
no, yes |
Kimi For Coding (Moonshot) subscription. |
--opencode-go <value> |
no, yes |
OpenCode Go subscription. |
--vercel-ai-gateway <value> |
no, yes |
Vercel AI Gateway access. |
--skip-auth |
— | Skip authentication setup hints during install. |
Tip
You can re-run
omo installany time to add a new subscription or repair a broken setup. It is safe to run repeatedly.
2.3 Install for Codex (LazyCodex)
If you use OpenAI's Codex CLI instead of OpenCode, install the Codex flavor:
npx lazycodex-ai install
This builds and copies the plugin into the Codex plugin cache, registers the sisyphuslabs marketplace, installs runtime dependencies, and enables the relevant Codex features in your config.toml:
[features]
plugins = true
plugin_hooks = true
[plugins."omo@sisyphuslabs"]
enabled = true
To configure Codex with autonomous permissions during install (approval never, full filesystem access, network enabled), add --codex-autonomous:
npx lazycodex-ai install --codex-autonomous
Warning
--codex-autonomousremoves Codex's approval prompts and grants broad filesystem and network access. Only enable it in environments you trust (for example, a disposable container or a dedicated project sandbox).
2.4 Verify your installation
Run the built-in doctor to confirm everything is wired correctly:
omo doctor
oh-my-opencode doctor
✔ OpenCode detected (v1.15.4)
✔ Config valid: ~/.config/opencode/oh-my-opencode.jsonc
✔ Agents registered: 11
✔ MCP servers reachable: ast-grep, git-bash, lsp
✔ Model resolution OK
For a compact one-line dashboard, use omo doctor --status. For machine-readable output, add --json. See Section 9, Troubleshooting when the doctor reports problems.
2.5 Uninstall and cleanup
To remove Codex project-local and home artifacts that oh-my-opencode created:
omo cleanup
omo cleanup --project /path/to/repo # also clean a project's .codex/.omx artifacts
omo cleanup --json # structured output
3. Everyday Usage
There are two ways to drive oh-my-opencode: interactively inside OpenCode (pick an agent and chat) and headlessly from the shell with omo run. Most of this guide applies to both.
3.1 The run command
omo run executes a single agent task from the command line and prints the result. It is the workhorse for scripts, cron jobs, and "do this one thing" requests.
omo run "Refactor the auth module to use async/await"
Common options:
| Option | Description |
|---|---|
-a, --agent <name> |
Which agent to use. Defaults to your configured default, falling back to Sisyphus. |
-m, --model <provider/model> |
Override the model, e.g. anthropic/claude-sonnet-4 or openai/gpt-5.4. |
-d, --directory <path> |
Working directory to run in (defaults to the current directory). |
-p, --port <port> |
Server port. Attaches to an existing server if the port is already in use. |
--attach <url> |
Attach to an already-running OpenCode server instead of starting one. |
--session-id <id> |
Resume an existing session instead of creating a new one. |
--on-complete <command> |
Shell command to run after the task finishes (e.g. send a notification). |
--json |
Emit a structured JSON result to stdout (ideal for scripting). |
--verbose |
Show the full event stream rather than just messages and tool calls. |
--no-timestamp |
Drop the timestamp prefix from output lines. |
Examples
Run a specific agent with a model override:
omo run -a hephaestus -m openai/gpt-5.4 "Find and fix the flaky test in tests/api"
Capture a machine-readable result:
omo run --json "Summarize what changed in the last commit" > result.json
Resume a previous session and notify when done:
omo run --session-id ses_abc123 --on-complete "say done" "Continue the migration"
Tip
Set a default agent so you never have to pass
-a. Add"default_run_agent": "sisyphus"to youroh-my-opencode.jsonc, or set theOPENCODE_DEFAULT_AGENTenvironment variable.
3.2 Checking versions and capabilities
omo version # print the installed version
omo get-local-version # version resolved from this project's config
omo get-local-version --json # same, machine-readable
omo refresh-model-capabilities # refresh the model capability table from models.dev
refresh-model-capabilities pulls the latest model metadata (context window sizes, reasoning support, vision support) so agent routing and fallback decisions stay accurate as providers ship new models.
omo refresh-model-capabilities --source-url https://models.dev/api.json --json
4. The Agents
oh-my-opencode's headline feature is a roster of specialized agents, each tuned for a different kind of work and (optionally) a different model. You select an agent in the OpenCode TUI or with omo run -a <name>.
4.1 Agent roster
| Agent | Role |
|---|---|
| Sisyphus | The default builder. A relentless, test-driven coding agent that implements features end-to-end. This is what you'll use most. |
| Sisyphus Junior | A lighter-weight builder used for delegated sub-tasks and parallel work. Keeps its own notepad of progress. |
| Atlas | The planner/orchestrator. Breaks large work into a plan ("boulder") and coordinates execution, including background and team work. |
| Prometheus | A focused agent constrained to Markdown-only output — used for planning documents and write-ups rather than code edits. |
| Hephaestus | A builder variant tuned for GPT-class models (the no-hephaestus-non-gpt hook keeps it on GPT models). |
| Oracle | A high-reasoning consultant for hard questions and design decisions. |
| Librarian | A research/retrieval agent for finding things across a codebase or docs. |
| Explore | A fast read-only exploration agent for surveying code without making changes. |
| Multimodal Looker | Handles images and visual input via the look_at tool (screenshots, diagrams, design mockups). |
| Metis | A reasoning-heavy advisor (mapped to the ultrabrain category by default in examples). |
| Momus | A reviewer/critic agent that re-reviews plans and work. |
Note
OpenCode's own built-in
buildandplanagents remain available alongside these. oh-my-opencode can override their behavior through configuration (see the Admin Guide).
4.2 Picking the right agent
- Just build something → Sisyphus (default). It reads code, edits with precision, runs tests, and iterates.
- Plan a big change first → Atlas to plan, then let it delegate to builders.
- A tricky design question → Oracle or Metis for deeper reasoning.
- Look at a screenshot or diagram → Multimodal Looker (or just attach an image and let the agent route to it).
- Review work before merging → Momus.
4.3 Categories: model routing buckets
Rather than hard-coding a model per agent, oh-my-opencode groups work into categories, and each category maps to a model. This lets you assign your best model to your hardest work and a cheap, fast model to routine work — once — and have every agent honor it.
Built-in categories:
| Category | Intended for |
|---|---|
ultrabrain |
The hardest reasoning and architecture work. |
deep |
Deep multi-step problem solving. |
visual-engineering |
Front-end / UI work that benefits from a vision-capable model. |
artistry |
Creative or design-leaning tasks. |
writing |
Documentation and prose. |
quick |
Fast, cheap, routine actions. |
unspecified-low / unspecified-high |
Fallback buckets for uncategorized work at low/high effort. |
You assign models to categories in oh-my-opencode.jsonc. See the Admin Guide's configuration reference for the exact syntax; a typical setup routes ultrabrain to your strongest model and quick to a cheap one.
5. Power Features
This is where oh-my-opencode goes beyond a normal coding assistant.
5.1 Ultrawork — keyword-triggered orchestration
Type ultrawork (or ulw) anywhere in your message and oh-my-opencode injects an orchestration directive that makes the agent plan, parallelize, and verify its work much more aggressively. It is the single most impactful thing you can type.
ultrawork: migrate the entire codebase from CommonJS to ESM
Other keywords the detector recognizes:
| Keyword | Effect |
|---|---|
ultrawork / ulw |
Full orchestration mode — plan, delegate, verify. |
search |
Expand into a broad code/content search workflow. |
analyze |
Expand into a deeper analysis workflow. |
team |
Spin up team mode (multiple agents collaborating — see §5.4). |
hyperplan |
Produce a detailed plan before acting. |
hyperplan-ultrawork |
Combine deep planning with full orchestration. |
Tip
If you want ultrawork on every session automatically, set
"default_mode": { "ultrawork": true }in your config — no keyword required.
5.2 Background and delegated tasks
oh-my-opencode can run sub-agents in parallel in the background while the main agent keeps working. This is what makes large refactors and multi-file changes fast.
delegate_taskhands a self-contained sub-task to another agent (optionally a different model/category) and waits for or streams back the result.background_tasklaunches work that runs concurrently; the parent is "woken" when a child finishes.call_omo_agentinvokes a named agent for a focused request.
You don't usually call these tools by hand — the agents use them automatically when you ask for big, parallelizable work (especially under ultrawork). You'll see child tasks appear as they spawn and complete.
Note
A built-in circuit breaker caps how many tool calls a runaway sub-agent can make, so a confused background task can't burn unlimited tokens. Concurrency, depth, and timeouts are all configurable (Admin Guide).
5.3 Ralph Loop and ULW Loop — autonomous goal loops
For long-running, goal-directed work, oh-my-opencode offers two loop modes that keep the agent going until a goal is met or a limit is hit:
- Ralph Loop (
/ralph-loop) — repeatedly re-prompts the agent to continue until the work is done or the iteration cap is reached. Cancel with/cancel-ralph. - ULW Loop (
/ulw-loop) — a durable, repo-native multi-goal loop with explicit success criteria and an evidence audit, so the agent must show that each goal was actually met.
omo ulw-loop --brief "Get the test suite to 100% pass and zero type errors"
Caution
Loop modes are autonomous — the agent will keep taking actions (including edits and commands) without pausing for you. Start with a bounded iteration count and review the result. The default Ralph Loop cap is 100 iterations.
5.4 Team Mode — multiple agents collaborating
Type team (or enable it in config) to run several agents at once as a coordinated team, communicating through a shared mailbox. A team lead coordinates members, each working in parallel.
When tmux visualization is enabled, each member gets its own tmux pane so you can watch them work side by side.
team: split the API rewrite across services — one agent per service
Team mode has sensible safety limits out of the box: up to 8 members (4 running in parallel), wall-clock and message budgets, and per-member turn caps. All are configurable.
Note
Team mode benefits from
tmuxbeing installed for the multi-pane visualization, but it is not required — members can run without panes.
5.5 Start-Work and Boulder — durable plans
The start-work flow (/start-work) creates a durable plan stored in .omo/boulder.json and an associated plan file under .omo/plans/. A "boulder" is a unit of tracked work with TODOs and verification steps. Continuation hooks make sure the agent keeps pushing the boulder uphill — if it stops with incomplete TODOs, it's nudged to continue.
Inspect active work at any time:
omo boulder # show boulder state for the current project
omo boulder -w <work-id> # filter to one work item
omo boulder --json
5.6 Remote control with OpenClaw (Discord / Telegram)
OpenClaw lets you receive notifications and send replies to a running agent from Discord or Telegram — useful for kicking off or steering long jobs from your phone. It is disabled by default and enabled through the openclaw config block (Admin Guide).
6. The Tools Your Agents Use
oh-my-opencode adds a set of high-quality tools on top of OpenCode's built-ins. You rarely invoke these directly, but knowing what they are helps you understand what the agent is doing and write better requests.
6.1 Editing and reading
| Tool | What it does |
|---|---|
hashline_edit |
Hash-anchored file editing. Instead of fragile line numbers, edits are anchored to a hash of the surrounding lines, so they stay correct even if the file shifts. Enable with "hashline_edit": true. |
look_at |
Opens and analyzes images (screenshots, diagrams, mockups) for vision-capable models. |
read_image_resizer |
Automatically resizes oversized images before they reach the model. |
write_existing_file_guard |
Prevents accidentally overwriting an existing file with write — you're told to use edit instead. |
6.2 Searching and navigating code
| Tool | What it does |
|---|---|
grep |
A fast, bundled ripgrep-based content search (downloads a ripgrep binary on first use). |
glob |
Fast filename/path matching. |
ast-grep (MCP) |
Structural, syntax-aware search and refactoring across many languages — find code by its shape, not just text. |
lsp (MCP) |
Language Server tools: diagnostics, go-to-definition, find-references, symbols, and safe rename. |
6.3 Sessions, tasks, and skills
| Tool | What it does |
|---|---|
session_read / session_write / session_search |
Persistent session memory the agent can read back and search. |
task |
Structured task/todo management for multi-step work. |
delegate_task / background_task / call_omo_agent |
Spawn and coordinate sub-agents (see §5.2). |
skill / skill_mcp |
Load a skill — a reusable, pre-written capability (see §7). |
interactive_bash |
Run an interactive shell session the agent can drive. |
git_bash (MCP) |
On Windows, routes git through a proper bash environment. |
Tip
If your model provider limits the number of tools (for example, OpenAI's 128-tool cap), set
experimental.max_toolsin your config. oh-my-opencode will keep the highest-priority tools and drop the rest to stay under the limit.
7. Skills
Skills are reusable, self-contained capabilities the agent can load on demand — think of them as expert playbooks. oh-my-opencode bundles a library of them and lets you add your own.
Bundled skill highlights:
| Skill | Purpose |
|---|---|
programming |
Language-specific best-practice references (Go, Python, Rust, TypeScript) and scaffolding. |
debugging |
Structured debugging methodology and runtime/tool references. |
refactor |
Safe, systematic refactoring. |
review-work |
Review a change for quality before it ships. |
start-work |
Begin a durable, planned unit of work (see §5.5). |
frontend-ui-ux |
Front-end and UI/UX guidance. |
git-master |
Git workflow assistance, including commit message conventions. |
security-research / security-review |
Security-focused analysis. |
remove-ai-slops |
Clean up tell-tale "AI-generated" artifacts from code and text. |
init-deep |
Deep project initialization / onboarding. |
Add your own skills by pointing the config at a directory of SKILL.md files:
{
"skills": {
"sources": [{ "path": "skill/", "recursive": true }]
}
}
You can also enable or disable individual skills (disabled_skills) — see the Admin Guide.
8. Common Tasks (Recipes)
8.1 Do a big refactor fast
omo run "ultrawork: convert all class components in src/ to function components with hooks"
The ultrawork keyword triggers planning, parallel delegation, and verification automatically.
8.2 Fix a failing test suite end-to-end
omo ulw-loop --brief "Make the full test suite pass with zero type errors. Show evidence."
The ULW loop keeps iterating and must produce evidence each goal is met before it stops.
8.3 Review a change before merging
In OpenCode, switch to the Momus agent (or invoke the review-work skill) and ask it to review your working tree or a specific diff.
8.4 Work from a screenshot
Attach an image and describe what you want. The Multimodal Looker agent / look_at tool reads the image:
Here's a screenshot of the bug. ultrawork: reproduce and fix it.
8.5 Use different models for different work
In oh-my-opencode.jsonc, assign your strongest model to ultrabrain and a fast one to quick. Every agent then routes hard work to the strong model and routine work to the cheap one — no per-request flags needed.
8.6 Run headless in CI
omo run --no-timestamp --json -a sisyphus "Apply the codemod in scripts/codemod.ts and commit" \
| tee result.json
8.7 Steer a long job from your phone
Enable OpenClaw with your Discord or Telegram credentials (Admin Guide), start a long ulw-loop, and reply from chat to nudge the agent.
9. Troubleshooting
Format: each entry gives the symptom, the likely cause, and the fix.
Error: Model string must be in <provider>/<model> format
Cause: A -m/--model value (or a config model field) is missing the provider prefix.
Solution: Always include the provider, e.g. anthropic/claude-sonnet-4, not just claude-sonnet-4.
Prevention: Use the exact provider/model ids your provider exposes; run omo doctor to validate model resolution.
Error: Provider cannot be empty / Model ID cannot be empty
Cause: A model string like /gpt-5.4 or openai/ — one half is blank.
Solution: Supply both halves: openai/gpt-5.4.
Model routing is ignored after restart, falling back to a default model
Cause: A known issue where oh-my-opencode.json model routing can be dropped on restart (community issue #3570).
Solution: Re-run omo doctor to confirm your config is valid and loaded, and verify the config file is in the active OpenCode config directory. Explicitly set the category models rather than relying on per-agent model (which is deprecated in favor of category).
An agent (Atlas / Quick) stops unexpectedly mid-plan
Cause: Some models (notably certain MiniMax variants) are flagged "unstable" and can halt during plan execution (community issue #3198). oh-my-opencode runs unstable agents in a monitored background mode for exactly this reason.
Solution: Route that agent/category to a more stable model, or rely on the babysitter and runtime-fallback features to recover. See runtime_fallback in the Admin Guide.
Error: Port must be between 1 and 65535 / No available port found in range
Cause: An invalid -p/--port value, or every candidate port is occupied.
Solution: Pass a valid free port, or omit --port and let oh-my-opencode pick one. Use --attach <url> to connect to a server you already have running.
Error: Session not found: <id> / Failed to create session after all retries
Cause: The --session-id you resumed no longer exists, or the OpenCode server is unreachable.
Solution: Start a fresh session (omit --session-id), or confirm the server is running and reachable at the expected port/URL.
Error: File already exists. Use edit tool instead.
Cause: The agent tried to write over an existing file; the write-existing-file-guard blocked it.
Solution: This is protective and expected — let the agent use edit/hashline_edit to modify the file instead of overwriting it.
Error: ripgrep binary not found after extraction / Unsupported platform
Cause: The bundled grep tool failed to download or extract its ripgrep binary, or you're on an unsupported platform.
Solution: Check your network/proxy, ensure your platform is one of the supported targets, and retry. The agent can fall back to OpenCode's built-in search.
Error: Agent task timed out after 5 minutes. / Prompt was not durably accepted by OpenCode
Cause: A delegated/background sub-agent took too long or the OpenCode server didn't acknowledge the prompt.
Solution: Break the task into smaller pieces, raise the relevant background-task timeout in config, or check server health with omo doctor.
Team errors: team_create denied … / <tool> is lead-only
Cause: A team-mode rule was violated — e.g. a member tried a lead-only action, or a session tried to join two teams. Solution: Only the team lead performs lead-only actions; members operate within their assignment. Start a fresh team if a session is already a participant elsewhere.
MiniMax / new model not appearing in the model list
Cause: The model capability table is stale, or the provider prefix isn't recognized yet (community issues #4692, #3535).
Solution: Run omo refresh-model-capabilities, then restart OpenCode. Confirm the provider is configured.
Builtin skills (init-deep, review-work, start-work) not showing as slash commands
Cause: A known visibility issue on some OpenCode Desktop builds (community issue #4714).
Solution: Update to the latest oh-my-opencode and OpenCode, re-run omo install, and restart. Verify with omo doctor.
omo doctor reports an invalid config
Cause: A typo or out-of-range value in oh-my-opencode.jsonc (the config is strictly validated).
Solution: Run omo doctor --verbose to see the exact field and expected values, then fix it. Reference the Admin Guide's configuration table for valid ranges and defaults.
10. Frequently Asked Questions
Q: Is oh-my-opencode a model or an AI provider? No. It's a plugin that supercharges OpenCode (or Codex). You connect your own model subscriptions; oh-my-opencode adds agents, tools, and orchestration on top.
Q: What's the difference between oh-my-opencode, oh-my-openagent, omo, and lazycodex?
They're the same project. oh-my-opencode/oh-my-openagent/omo are interchangeable command names for the OpenCode plugin. lazycodex/lazycodex-ai install the Codex flavor of the same engine.
Q: Do I have to use the keyword ultrawork?
No, but it's the easiest way to get the agent's best work on a per-message basis. You can also turn it on for every session with default_mode.ultrawork.
Q: Which agent should I start with? Sisyphus — it's the default, all-purpose test-driven builder.
Q: Can I use multiple model providers at once? Yes. That's a core feature. Assign different providers/models to different categories and agents, and oh-my-opencode routes work accordingly, with automatic fallback if a provider errors.
Q: What happens if my model provider returns an error mid-task?
With runtime_fallback enabled, oh-my-opencode automatically retries on a fallback model for errors like rate limits (429) and server errors (5xx), with a cooldown before retrying the failed model.
Q: How do I make edits more reliable on large files?
Enable hashline_edit ("hashline_edit": true). It anchors edits to content hashes instead of line numbers, so they survive file shifts.
Q: Is my code or prompt sent anywhere?
oh-my-opencode sends an anonymous, daily "active install" event to PostHog by default — no prompts, file contents, or hostnames. Opt out by setting OMO_DISABLE_POSTHOG=1 (and OMO_SEND_ANONYMOUS_TELEMETRY=0). The bundled LSP, rules, and comment-checker components run locally and make no network calls of their own.
Q: How do I disable a feature I don't want (a hook, agent, MCP, skill, or command)?
Use the disabled_hooks, disabled_agents, disabled_mcps, disabled_skills, or disabled_commands arrays in your config. See the Admin Guide.
Q: Can it run unattended for a long time? Yes — use Ralph Loop or ULW Loop for autonomous, goal-directed runs with iteration caps and (for ULW) evidence requirements. Review the output; these modes act without pausing.
Q: Does it work on Windows?
Yes. Windows x64 binaries are shipped, and a bundled git_bash MCP routes git through a proper bash environment on Windows.
Q: Where is my configuration stored?
In oh-my-opencode.jsonc (or .json) in your OpenCode config directory, and/or per-project under .opencode/. The full schema is documented in the Admin Guide.
Q: How do I get more detail when something breaks?
Run omo doctor --verbose. For specific components, several support debug env vars (for example COMMENT_CHECKER_DEBUG, NODE_DEBUG=codex-rules).
Q: The agent keeps trying to "continue" after I want it to stop. Why?
Continuation hooks (todo-continuation, start-work continuation, Ralph Loop) intentionally nudge the agent to finish incomplete work. Cancel loops with /cancel-ralph, or complete/clear the active boulder.