# Oh-My-OpenAgent Features Reference ## Agents Oh-My-OpenAgent provides 11 specialized AI agents. Each has distinct expertise, optimized models, and tool permissions. ### Core Agents Core-agent tab cycling is deterministic via injected runtime order field. The fixed priority order is Sisyphus (order: 1), Hephaestus (order: 2), Prometheus (order: 3), and Atlas (order: 4). Remaining agents follow after that stable core ordering. | Agent | Model | Purpose | | --------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Sisyphus** | `claude-opus-4-6` | The default orchestrator. Plans, delegates, and executes complex tasks using specialized subagents with aggressive parallel execution. Todo-driven workflow with extended thinking (32k budget). Fallback: `glm-5` → `big-pickle`. | | **Hephaestus** | `gpt-5.4` | The Legitimate Craftsman. Autonomous deep worker inspired by AmpCode's deep mode. Goal-oriented execution with thorough research before action. Explores codebase patterns, completes tasks end-to-end without premature stopping. Named after the Greek god of forge and craftsmanship. Requires a GPT-capable provider. | | **Oracle** | `gpt-5.4` | Architecture decisions, code review, debugging. Read-only consultation with stellar logical reasoning and deep analysis. Inspired by AmpCode. Fallback: `gemini-3.1-pro` → `claude-opus-4-6`. | | **Librarian** | `minimax-m2.7` | Multi-repo analysis, documentation lookup, OSS implementation examples. Deep codebase understanding with evidence-based answers. Primary OpenCode Go path uses MiniMax M2.7, then falls back to OpenCode Zen `minimax-m2.7-highspeed`, then `claude-haiku-4-5` and `gpt-5-nano`. | | **Explore** | `grok-code-fast-1` | Fast codebase exploration and contextual grep. Primary path stays on Grok Code Fast 1, then uses OpenCode Go `minimax-m2.7-highspeed`, then OpenCode Zen `minimax-m2.7`, before falling through to Haiku and GPT-5-Nano. | | **Multimodal-Looker** | `gpt-5.4` | Visual content specialist. Analyzes PDFs, images, diagrams to extract information. Fallback: `k2p5` → `glm-4.6v` → `gpt-5-nano`. | ### Planning Agents | Agent | Model | Purpose | | -------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | **Prometheus** | `claude-opus-4-6` | Strategic planner with interview mode. Creates detailed work plans through iterative questioning. Fallback: `gpt-5.4` → `gemini-3.1-pro`. | | **Metis** | `claude-opus-4-6` | Plan consultant — pre-planning analysis. Identifies hidden intentions, ambiguities, and AI failure points. Fallback: `gpt-5.4` → `gemini-3.1-pro`. | | **Momus** | `gpt-5.4` | Plan reviewer — validates plans against clarity, verifiability, and completeness standards. Fallback: `claude-opus-4-6` → `gemini-3.1-pro`. | ### Orchestration Agents | Agent | Model | Purpose | | ------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Atlas** | `claude-sonnet-4-6` | Todo-list orchestrator. Executes planned tasks systematically, managing todo items and coordinating work. Fallback: `gpt-5.4` (medium). | | **Sisyphus-Junior** | _(category-dependent)_ | Category-spawned executor. Model is selected automatically based on the task category (visual-engineering, quick, deep, etc.). Used when the main agent delegates work via the `task` tool. | ### Invoking Agents The main agent invokes these automatically, but you can call them explicitly: ``` Ask @oracle to review this design and propose an architecture Ask @librarian how this is implemented - why does the behavior keep changing? Ask @explore for the policy on this feature ``` ### Tool Restrictions | Agent | Restrictions | | ----------------- | --------------------------------------------------------------------------------------- | | oracle | Read-only: cannot write, edit, or delegate (blocked: write, edit, task, call_omo_agent) | | librarian | Cannot write, edit, or delegate (blocked: write, edit, task, call_omo_agent) | | explore | Cannot write, edit, or delegate (blocked: write, edit, task, call_omo_agent) | | multimodal-looker | Allowlist: `read` only | | atlas | Cannot delegate (blocked: task, call_omo_agent) | | momus | Cannot write, edit, or delegate (blocked: write, edit, task) | ### Background Agents Run agents in the background and continue working: - Have GPT debug while Claude tries different approaches - Gemini writes frontend while Claude handles backend - Fire massive parallel searches, continue implementation, use results when ready ``` # Launch in background task(subagent_type="explore", load_skills=[], prompt="Find auth implementations", run_in_background=true) # Continue working... # System notifies on completion # Retrieve results when needed background_output(task_id="bg_abc123") ``` #### Visual Multi-Agent with Tmux Enable `tmux.enabled` to see background agents in separate tmux panes: ```json { "tmux": { "enabled": true, "layout": "main-vertical" } } ``` When running inside tmux: - Background agents spawn in new panes - Watch multiple agents work in real-time - Each pane shows agent output live - Auto-cleanup when agents complete - **Stable agent ordering**: core-agent tab cycling is deterministic via injected runtime order field (Sisyphus: 1, Hephaestus: 2, Prometheus: 3, Atlas: 4) Customize agent models, prompts, and permissions in `oh-my-opencode.jsonc`. ## Category System A Category is an agent configuration preset optimized for specific domains. Instead of delegating everything to a single AI agent, it is far more efficient to invoke specialists tailored to the nature of the task. ### What Categories Are and Why They Matter - **Category**: "What kind of work is this?" (determines model, temperature, prompt mindset) - **Skill**: "What tools and knowledge are needed?" (injects specialized knowledge, MCP tools, workflows) By combining these two concepts, you can generate optimal agents through `task`. ### Built-in Categories | Category | Default Model | Use Cases | | -------------------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | | `visual-engineering` | `google/gemini-3.1-pro` | Frontend, UI/UX, design, styling, animation | | `ultrabrain` | `openai/gpt-5.4` (xhigh) | Deep logical reasoning, complex architecture decisions requiring extensive analysis | | `deep` | `openai/gpt-5.3-codex` (medium) | Goal-oriented autonomous problem-solving. Thorough research before action. For hairy problems requiring deep understanding. | | `artistry` | `google/gemini-3.1-pro` (high) | Highly creative/artistic tasks, novel ideas | | `quick` | `openai/gpt-5.4-mini` | Trivial tasks - single file changes, typo fixes, simple modifications | | `unspecified-low` | `anthropic/claude-sonnet-4-6` | Tasks that don't fit other categories, low effort required | | `unspecified-high` | `anthropic/claude-opus-4-6` (max) | Tasks that don't fit other categories, high effort required | | `writing` | `google/gemini-3-flash` | Documentation, prose, technical writing | ### Usage Specify the `category` parameter when invoking the `task` tool. ```typescript task({ category: "visual-engineering", prompt: "Add a responsive chart component to the dashboard page", }); ``` ### Custom Categories You can define custom categories in your plugin config file. During the rename transition, both `oh-my-openagent.json[c]` and legacy `oh-my-opencode.json[c]` basenames are recognized. #### Category Configuration Schema | Field | Type | Description | | ------------------- | ------- | --------------------------------------------------------------------------- | | `description` | string | Human-readable description of the category's purpose. Shown in task prompt. | | `model` | string | AI model ID to use (e.g., `anthropic/claude-opus-4-6`) | | `variant` | string | Model variant (e.g., `max`, `xhigh`) | | `temperature` | number | Creativity level (0.0 ~ 2.0). Lower is more deterministic. | | `top_p` | number | Nucleus sampling parameter (0.0 ~ 1.0) | | `prompt_append` | string | Content to append to system prompt when this category is selected | | `thinking` | object | Thinking model configuration (`{ type: "enabled", budgetTokens: 16000 }`) | | `reasoningEffort` | string | Reasoning effort level (`low`, `medium`, `high`) | | `textVerbosity` | string | Text verbosity level (`low`, `medium`, `high`) | | `tools` | object | Tool usage control (disable with `{ "tool_name": false }`) | | `maxTokens` | number | Maximum response token count | | `is_unstable_agent` | boolean | Mark agent as unstable - forces background mode for monitoring | #### Example Configuration ```jsonc { "categories": { // 1. Define new custom category "korean-writer": { "model": "google/gemini-3-flash", "temperature": 0.5, "prompt_append": "You are a Korean technical writer. Maintain a friendly and clear tone.", }, // 2. Override existing category (change model) "visual-engineering": { "model": "openai/gpt-5.4", "temperature": 0.8, }, // 3. Configure thinking model and restrict tools "deep-reasoning": { "model": "anthropic/claude-opus-4-6", "thinking": { "type": "enabled", "budgetTokens": 32000, }, "tools": { "websearch_web_search_exa": false, }, }, }, } ``` ### Sisyphus-Junior as Delegated Executor When you use a Category, a special agent called **Sisyphus-Junior** performs the work. - **Characteristic**: Cannot **re-delegate** tasks to other agents. - **Purpose**: Prevents infinite delegation loops and ensures focus on the assigned task. ## Advanced Configuration ### Rename Compatibility The published package and binary remain `oh-my-opencode`. Inside `opencode.json`, the compatibility layer now prefers the plugin entry `oh-my-openagent`, while legacy `oh-my-opencode` entries still load with a warning. Plugin config files (`oh-my-openagent.json[c]` or legacy `oh-my-opencode.json[c]`) are recognized during the transition. Run `bunx oh-my-opencode doctor` to check for legacy package name warnings. ### Fallback Models Configure per-agent fallback chains with arrays that can mix plain model strings and per-model objects: ```jsonc { "agents": { "sisyphus": { "fallback_models": [ "opencode/glm-5", { "model": "openai/gpt-5.4", "variant": "high" }, { "model": "anthropic/claude-sonnet-4-6", "thinking": { "type": "enabled", "budgetTokens": 64000 } } ] } } } ``` When a model errors, the runtime can move through the configured fallback array. Object entries let you tune the backup model itself instead of only swapping the model name. ### File-Based Prompts Load agent system prompts from external files using `file://` URLs in the `prompt` field, or append additional content with `prompt_append`. The `prompt_append` field also works on categories. ```jsonc { "agents": { "sisyphus": { "prompt": "file:///path/to/custom-prompt.md" }, "oracle": { "prompt_append": "file:///path/to/additional-context.md" } }, "categories": { "deep": { "prompt_append": "file:///path/to/deep-category-append.md" } } } ``` Supports `~` expansion for home directory and relative `file://` paths. Useful for: - Version controlling prompts separately from config - Sharing prompts across projects - Keeping configuration files concise - Adding category-specific context without duplicating base prompts The file content is loaded at runtime and injected into the agent's system prompt. ### Session Recovery The system automatically recovers from common session failures without user intervention: - **Missing tool results**: reconstructs recoverable tool state and skips invalid tool-part IDs instead of failing the whole recovery pass - **Thinking block violations**: Recovers from API thinking block mismatches - **Empty messages**: Reconstructs message history when content is missing - **Context window limits**: Gracefully handles Claude context window exceeded errors with intelligent compaction - **JSON parse errors**: Recovers from malformed tool outputs Recovery happens transparently during agent execution. You see the result, not the failure. ## Skills Skills provide specialized workflows with embedded MCP servers and detailed instructions. A Skill is a mechanism that injects **specialized knowledge (Context)** and **tools (MCP)** for specific domains into agents. ### Built-in Skills | Skill | Trigger | Description | | ------------------ | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **git-master** | commit, rebase, squash, "who wrote", "when was X added" | Git expert. Detects commit styles, splits atomic commits, formulates rebase strategies. Three specializations: Commit Architect (atomic commits, dependency ordering, style detection), Rebase Surgeon (history rewriting, conflict resolution, branch cleanup), History Archaeologist (finding when/where specific changes were introduced). | | **playwright** | Browser tasks, testing, screenshots | Browser automation via Playwright MCP. MUST USE for browser verification, browsing, web scraping, testing, and screenshots. | | **playwright-cli** | Browser tasks on Playwright CLI | Browser automation through the Playwright CLI integration. Useful when direct CLI scripting is preferred over MCP. | | **agent-browser** | Browser tasks on agent-browser | Browser automation via the `agent-browser` CLI. Covers navigation, snapshots, screenshots, network inspection, and scripted interactions. | | **dev-browser** | Stateful browser scripting | Browser automation with persistent page state for iterative workflows and authenticated sessions. | | **frontend-ui-ux** | UI/UX tasks, styling | Designer-turned-developer persona. Crafts stunning UI/UX even without design mockups. Emphasizes bold aesthetic direction, distinctive typography, cohesive color palettes. | #### git-master Core Principles **Multiple Commits by Default**: ``` 3+ files -> MUST be 2+ commits 5+ files -> MUST be 3+ commits 10+ files -> MUST be 5+ commits ``` **Automatic Style Detection**: - Analyzes last 30 commits for language (Korean/English) and style (semantic/plain/short) - Matches your repo's commit conventions automatically **Usage**: ``` /git-master commit these changes /git-master rebase onto main /git-master who wrote this authentication code? ``` #### frontend-ui-ux Design Process - **Design Process**: Purpose, Tone, Constraints, Differentiation - **Aesthetic Direction**: Choose extreme - brutalist, maximalist, retro-futuristic, luxury, playful - **Typography**: Distinctive fonts, avoid generic (Inter, Roboto, Arial) - **Color**: Cohesive palettes with sharp accents, avoid purple-on-white AI slop - **Motion**: High-impact staggered reveals, scroll-triggering, surprising hover states - **Anti-Patterns**: Generic fonts, predictable layouts, cookie-cutter design ### Browser Automation Options Oh-My-OpenAgent provides two browser automation providers, configurable via `browser_automation_engine.provider`. #### Option 1: Playwright MCP (Default) ```yaml mcp: playwright: command: npx args: ["@playwright/mcp@latest"] ``` **Usage**: ``` /playwright Navigate to example.com and take a screenshot ``` #### Option 2: Agent Browser CLI (Vercel) ```json { "browser_automation_engine": { "provider": "agent-browser" } } ``` **Requires installation**: ```bash bun add -g agent-browser ``` **Usage**: ``` Use agent-browser to navigate to example.com and extract the main heading ``` **Capabilities (Both Providers)**: - Navigate and interact with web pages - Take screenshots and PDFs - Fill forms and click elements - Wait for network requests - Scrape content ### Custom Skill Creation (SKILL.md) You can add custom skills directly to `.opencode/skills/` in your project root or `~/.claude/skills/` in your home directory. **Example: `.opencode/skills/my-skill/SKILL.md`** ```markdown --- name: my-skill description: My special custom skill mcp: my-mcp: command: npx args: ["-y", "my-mcp-server"] --- # My Skill Prompt This content will be injected into the agent's system prompt. ... ``` **Skill Load Locations** (priority order, highest first): - `.opencode/skills/*/SKILL.md` (project, OpenCode native) - `~/.config/opencode/skills/*/SKILL.md` (user, OpenCode native) - `.claude/skills/*/SKILL.md` (project, Claude Code compat) - `.agents/skills/*/SKILL.md` (project, Agents convention) - `~/.agents/skills/*/SKILL.md` (user, Agents convention) Same-named skill at higher priority overrides lower. Disable built-in skills via `disabled_skills: ["playwright"]` in config. ### Category + Skill Combo Strategies You can create powerful specialized agents by combining Categories and Skills. #### The Designer (UI Implementation) - **Category**: `visual-engineering` - **load_skills**: `["frontend-ui-ux", "playwright"]` - **Effect**: Implements aesthetic UI and verifies rendering results directly in browser. #### The Architect (Design Review) - **Category**: `ultrabrain` - **load_skills**: `[]` (pure reasoning) - **Effect**: Leverages GPT-5.4 xhigh reasoning for in-depth system architecture analysis. #### The Maintainer (Quick Fixes) - **Category**: `quick` - **load_skills**: `["git-master"]` - **Effect**: Uses cost-effective models to quickly fix code and generate clean commits. ### task Prompt Guide When delegating, **clear and specific** prompts are essential. Include these 7 elements: 1. **TASK**: What needs to be done? (single objective) 2. **EXPECTED OUTCOME**: What is the deliverable? 3. **REQUIRED SKILLS**: Which skills should be loaded via `load_skills`? 4. **REQUIRED TOOLS**: Which tools must be used? (whitelist) 5. **MUST DO**: What must be done (constraints) 6. **MUST NOT DO**: What must never be done 7. **CONTEXT**: File paths, existing patterns, reference materials **Bad Example**: > "Fix this" **Good Example**: > **TASK**: Fix mobile layout breaking issue in `LoginButton.tsx` > **CONTEXT**: `src/components/LoginButton.tsx`, using Tailwind CSS > **MUST DO**: Change flex-direction at `md:` breakpoint > **MUST NOT DO**: Modify existing desktop layout > **EXPECTED**: Buttons align vertically on mobile ## Commands Commands are slash-triggered workflows that execute predefined templates. ### Built-in Commands | Command | Description | | -------------------- | ------------------------------------------------------------------------------------------ | | `/init-deep` | Initialize hierarchical AGENTS.md knowledge base | | `/ralph-loop` | Start self-referential development loop until completion | | `/ulw-loop` | Start ultrawork loop - continues with ultrawork mode | | `/cancel-ralph` | Cancel active Ralph Loop | | `/refactor` | Intelligent refactoring with LSP, AST-grep, architecture analysis, and TDD verification | | `/start-work` | Start Sisyphus work session from Prometheus plan | | `/stop-continuation` | Stop all continuation mechanisms (ralph loop, todo continuation, boulder) for this session | | `/handoff` | Create a detailed context summary for continuing work in a new session | ### /init-deep **Purpose**: Generate hierarchical AGENTS.md files throughout your project **Usage**: ``` /init-deep [--create-new] [--max-depth=N] ``` Creates directory-specific context files that agents automatically read: ``` project/ ├── AGENTS.md # Project-wide context ├── src/ │ ├── AGENTS.md # src-specific context │ └── components/ │ └── AGENTS.md # Component-specific context ``` ### /ralph-loop **Purpose**: Self-referential development loop that runs until task completion **Named after**: Anthropic's Ralph Wiggum plugin **Usage**: ``` /ralph-loop "Build a REST API with authentication" /ralph-loop "Refactor the payment module" --max-iterations=50 ``` **Behavior**: - Agent works continuously toward the goal - Detects `DONE` to know when complete - Auto-continues if agent stops without completion - Ends when: completion detected, max iterations reached (default 100), or `/cancel-ralph` **Configure**: `{ "ralph_loop": { "enabled": true, "default_max_iterations": 100 } }` ### /ulw-loop **Purpose**: Same as ralph-loop but with ultrawork mode active Everything runs at maximum intensity - parallel agents, background tasks, aggressive exploration. ### /refactor **Purpose**: Intelligent refactoring with full toolchain **Usage**: ``` /refactor [--scope=] [--strategy=] ``` **Features**: - LSP-powered rename and navigation - AST-grep for pattern matching - Architecture analysis before changes - TDD verification after changes - Codemap generation ### /start-work **Purpose**: Start execution from a Prometheus-generated plan **Usage**: ``` /start-work [plan-name] ``` Uses atlas agent to execute planned tasks systematically. ### /stop-continuation **Purpose**: Stop all continuation mechanisms for this session Stops ralph loop, todo continuation, and boulder state. Use when you want the agent to stop its current multi-step workflow. ### /handoff **Purpose**: Create a detailed context summary for continuing work in a new session Generates a structured handoff document capturing the current state, what was done, what remains, and relevant file paths — enabling seamless continuation in a fresh session. ### Custom Commands Load custom commands from: - `.opencode/command/*.md` (project, OpenCode native) - `~/.config/opencode/command/*.md` (user, OpenCode native) - `.claude/commands/*.md` (project, Claude Code compat) - `~/.config/opencode/commands/*.md` (user, Claude Code compat) ## Tools ### Code Search Tools | Tool | Description | | -------- | ----------------------------------------------------------------- | | **grep** | Content search using regular expressions. Filter by file pattern. | | **glob** | Fast file pattern matching. Find files by name patterns. | ### Edit Tools | Tool | Description | | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | **edit** | Hash-anchored edit tool. Uses `LINE#ID` format for precise, safe modifications. Validates content hashes before applying changes — zero stale-line errors. | ### LSP Tools (IDE Features for Agents) | Tool | Description | | ----------------------- | ------------------------------------------- | | **lsp_diagnostics** | Get errors/warnings before build | | **lsp_prepare_rename** | Validate rename operation | | **lsp_rename** | Rename symbol across workspace | | **lsp_goto_definition** | Jump to symbol definition | | **lsp_find_references** | Find all usages across workspace | | **lsp_symbols** | Get file outline or workspace symbol search | ### AST-Grep Tools | Tool | Description | | -------------------- | -------------------------------------------- | | **ast_grep_search** | AST-aware code pattern search (25 languages) | | **ast_grep_replace** | AST-aware code replacement | ### Delegation Tools | Tool | Description | | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **call_omo_agent** | Spawn explore/librarian agents. Supports `run_in_background`. | | **task** | Category-based task delegation. Supports built-in categories like `visual-engineering`, `ultrabrain`, `deep`, `artistry`, `quick`, `unspecified-low`, `unspecified-high`, and `writing`, or direct agent targeting via `subagent_type`. | | **background_output** | Retrieve background task results | | **background_cancel** | Cancel running background tasks | ### Visual Analysis Tools | Tool | Description | | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **look_at** | Analyze media files (PDFs, images, diagrams) via Multimodal-Looker agent. Extracts specific information or summaries from documents, describes visual content. | ### Skill Tools | Tool | Description | | ------------- | ------------------------------------------------------------------------------------------------------ | | **skill** | Load and execute a skill or slash command by name. Returns detailed instructions with context applied. | | **skill_mcp** | Invoke MCP server operations from skill-embedded MCPs. | ### Session Tools | Tool | Description | | ------------------ | ---------------------------------------- | | **session_list** | List all OpenCode sessions | | **session_read** | Read messages and history from a session | | **session_search** | Full-text search across session messages | | **session_info** | Get session metadata and statistics | ### Task Management Tools Requires `experimental.task_system: true` in config. | Tool | Description | | --------------- | ---------------------------------------- | | **task_create** | Create a new task with auto-generated ID | | **task_get** | Retrieve a task by ID | | **task_list** | List all active tasks | | **task_update** | Update an existing task | #### Task System Details **Note on Claude Code Alignment**: This implementation follows Claude Code's internal Task tool signatures (`TaskCreate`, `TaskUpdate`, `TaskList`, `TaskGet`) and field naming conventions (`subject`, `blockedBy`, `blocks`, etc.). However, Anthropic has not published official documentation for these tools. This is Oh My OpenAgent's own implementation based on observed Claude Code behavior and internal specifications. **Task Schema**: ```ts interface Task { id: string; // T-{uuid} subject: string; // Imperative: "Run tests" description: string; status: "pending" | "in_progress" | "completed" | "deleted"; activeForm?: string; // Present continuous: "Running tests" blocks: string[]; // Tasks this blocks blockedBy: string[]; // Tasks blocking this owner?: string; // Agent name metadata?: Record; threadID: string; // Session ID (auto-set) } ``` **Dependencies and Parallel Execution**: ``` [Build Frontend] ──┐ ├──→ [Integration Tests] ──→ [Deploy] [Build Backend] ──┘ ``` - Tasks with empty `blockedBy` run in parallel - Dependent tasks wait until blockers complete **Example Workflow**: ```ts TaskCreate({ subject: "Build frontend" }); // T-001 TaskCreate({ subject: "Build backend" }); // T-002 TaskCreate({ subject: "Run integration tests", blockedBy: ["T-001", "T-002"] }); // T-003 TaskList(); // T-001 [pending] Build frontend blockedBy: [] // T-002 [pending] Build backend blockedBy: [] // T-003 [pending] Integration tests blockedBy: [T-001, T-002] TaskUpdate({ id: "T-001", status: "completed" }); TaskUpdate({ id: "T-002", status: "completed" }); // T-003 now unblocked ``` **Storage**: Tasks are stored as JSON files in `.sisyphus/tasks/`. **Difference from TodoWrite**: | Feature | TodoWrite | Task System | | ------------------ | -------------- | -------------------------- | | Storage | Session memory | File system | | Persistence | Lost on close | Survives restart | | Dependencies | None | Full support (`blockedBy`) | | Parallel execution | Manual | Automatic optimization | **When to Use**: Use Tasks when work has multiple steps with dependencies, multiple subagents will collaborate, or progress should persist across sessions. ### Interactive Terminal Tools | Tool | Description | | -------------------- | -------------------------------------------------------------------------------------------------- | | **interactive_bash** | Tmux-based terminal for TUI apps (vim, htop, pudb). Pass tmux subcommands directly without prefix. | **Usage Examples**: ```bash # Create a new session interactive_bash(tmux_command="new-session -d -s dev-app") # Send keystrokes to a session interactive_bash(tmux_command="send-keys -t dev-app 'vim main.py' Enter") # Capture pane output interactive_bash(tmux_command="capture-pane -p -t dev-app") ``` **Key Points**: - Commands are tmux subcommands (no `tmux` prefix) - Use for interactive apps that need persistent sessions - One-shot commands should use regular `Bash` tool with `&` ## Hooks Hooks intercept and modify behavior at key points in the agent lifecycle across the full session, message, tool, and parameter pipeline. ### Hook Events | Event | When | Can | | --------------- | ----------------------------- | -------------------------------------------------- | | **PreToolUse** | Before tool execution | Block, modify input, inject context | | **PostToolUse** | After tool execution | Add warnings, modify output, inject messages | | **Message** | During message processing | Transform content, detect keywords, activate modes | | **Event** | On session lifecycle changes | Recovery, fallback, notifications | | **Transform** | During context transformation | Inject context, validate blocks | | **Params** | When setting API parameters | Adjust model settings, effort level | ### Built-in Hooks #### Context & Injection | Hook | Event | Description | | ------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **directory-agents-injector** | PreToolUse + PostToolUse | Auto-injects AGENTS.md when reading files. Walks from file to project root, collecting all AGENTS.md files. Deprecated for OpenCode 1.1.37+ — Auto-disabled when native AGENTS.md injection is available. | | **directory-readme-injector** | PreToolUse + PostToolUse | Auto-injects README.md for directory context. | | **rules-injector** | PreToolUse + PostToolUse | Injects rules from `.claude/rules/` when conditions match. Supports globs and alwaysApply. | | **compaction-context-injector** | Event | Preserves critical context during session compaction. | | **context-window-monitor** | Event | Monitors context window usage and tracks token consumption. | | **preemptive-compaction** | Event | Proactively compacts sessions before hitting token limits. | #### Productivity & Control | Hook | Event | Description | | --------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | **keyword-detector** | Message + Transform | Detects keywords and activates modes: `ultrawork`/`ulw` (max performance), `search`/`find` (parallel exploration), `analyze`/`investigate` (deep analysis). | | **think-mode** | Params | Auto-detects extended thinking needs. Catches "think deeply", "ultrathink" and adjusts model settings. | | **ralph-loop** | Event + Message | Manages self-referential loop continuation. | | **start-work** | Message | Handles /start-work command execution. | | **auto-slash-command** | Message | Automatically executes slash commands from prompts. | | **stop-continuation-guard** | Event + Message | Guards the stop-continuation mechanism. | | **category-skill-reminder** | Event + PostToolUse | Reminds agents about available category skills for delegation. | | **anthropic-effort** | Params | Adjusts Anthropic API effort level based on context. | #### Quality & Safety | Hook | Event | Description | | ------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------- | | **comment-checker** | PostToolUse | Reminds agents to reduce excessive comments. Smartly ignores BDD, directives, docstrings. | | **thinking-block-validator** | Transform | Validates thinking blocks to prevent API errors. | | **edit-error-recovery** | PostToolUse + Event | Recovers from edit tool failures. | | **write-existing-file-guard** | PreToolUse | Prevents accidental overwrites of existing files without reading them first. | | **hashline-read-enhancer** | PostToolUse | Enhances read output with hash-anchored line markers for the hashline edit tool. | | **hashline-edit-diff-enhancer** | PreToolUse + PostToolUse | Enhances edit operations with diff markers for the hashline edit tool. | #### Recovery & Stability | Hook | Event | Description | | ------------------------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **session-recovery** | Event | Recovers from session errors — missing tool results, thinking block issues, empty messages. | | **anthropic-context-window-limit-recovery** | Event | Handles Claude context window limits gracefully. | | **runtime-fallback** | Event + Message | Automatically switches to backup models on retryable API errors (e.g., 429, 503, 529), provider key misconfiguration errors (e.g., missing API key), and auto-retry signals (when `timeout_seconds > 0`). Configurable retry logic with per-model cooldown. | | **model-fallback** | Event + Message | Manages model fallback chain when primary model is unavailable. | | **json-error-recovery** | PostToolUse | Recovers from JSON parse errors in tool outputs. | #### Truncation & Context Management | Hook | Event | Description | | ------------------------- | ----------- | --------------------------------------------------------------------------------------------------- | | **tool-output-truncator** | PostToolUse | Truncates output from Grep, Glob, LSP, AST-grep tools. Dynamically adjusts based on context window. | #### Notifications & UX | Hook | Event | Description | | ---------------------------- | ------------------- | -------------------------------------------------------------------------------------------------- | | **auto-update-checker** | Event | Checks for new versions on session creation, shows startup toast with version and Sisyphus status. | | **background-notification** | Event | Notifies when background agent tasks complete. | | **session-notification** | Event | OS notifications when agents go idle. Works on macOS, Linux, Windows. | | **agent-usage-reminder** | PostToolUse + Event | Reminds you to leverage specialized agents for better results. | | **question-label-truncator** | PreToolUse | Truncates long question labels in the Question tool UI. | #### Task Management | Hook | Event | Description | | -------------------------------- | ------------------- | --------------------------------------------------- | | **task-resume-info** | PostToolUse | Provides task resume information for continuity. | | **delegate-task-retry** | PostToolUse + Event | Retries failed task delegation calls. | | **empty-task-response-detector** | PostToolUse | Detects empty responses from delegated tasks. | | **tasks-todowrite-disabler** | PreToolUse | Disables TodoWrite tool when task system is active. | #### Continuation | Hook | Event | Description | | ------------------------------ | ----- | ---------------------------------------------------------- | | **todo-continuation-enforcer** | Event | Enforces todo completion — yanks idle agents back to work. | | **compaction-todo-preserver** | Event | Preserves todo state during session compaction. | | **unstable-agent-babysitter** | Event | Handles unstable agent behavior with recovery strategies. | #### Integration | Hook | Event | Description | | ---------------------------- | ------------------- | ------------------------------------------------------- | | **claude-code-hooks** | All | Executes hooks from Claude Code's settings.json. | | **atlas** | Multiple | Main orchestration logic for todo-driven work sessions. | | **interactive-bash-session** | PostToolUse + Event | Manages tmux sessions for interactive CLI. | | **non-interactive-env** | PreToolUse | Handles non-interactive environment constraints. | #### Specialized | Hook | Event | Description | | --------------------------- | ---------- | ---------------------------------------------------------- | | **prometheus-md-only** | PreToolUse | Enforces markdown-only output for Prometheus planner. | | **no-sisyphus-gpt** | Message | Prevents Sisyphus from running on incompatible GPT models. | | **no-hephaestus-non-gpt** | Message | Prevents Hephaestus from running on non-GPT models. | | **sisyphus-junior-notepad** | PreToolUse | Manages notepad state for Sisyphus-Junior agents. | ### Claude Code Hooks Integration Run custom scripts via Claude Code's `settings.json`: ```json { "hooks": { "PostToolUse": [ { "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": "eslint --fix $FILE" }] } ] } } ``` **Hook locations**: - `~/.claude/settings.json` (user) - `./.claude/settings.json` (project) - `./.claude/settings.local.json` (local, git-ignored) ### Disabling Hooks Disable specific hooks in config: ```json { "disabled_hooks": ["comment-checker"] } ``` ## MCPs ### Built-in MCPs | MCP | Description | | ------------- | --------------------------------------------------------------------------------------------- | | **websearch** | Real-time web search powered by Exa AI | | **context7** | Official documentation lookup for any library/framework | | **grep_app** | Ultra-fast code search across public GitHub repos. Great for finding implementation examples. | ### Skill-Embedded MCPs Skills can bring their own MCP servers: ```yaml --- description: Browser automation skill mcp: playwright: command: npx args: ["-y", "@anthropic-ai/mcp-playwright"] --- ``` The `skill_mcp` tool invokes these operations with full schema discovery. #### OAuth-Enabled MCPs Skills can define OAuth-protected remote MCP servers. OAuth 2.1 with full RFC compliance (RFC 9728, 8414, 8707, 7591) is supported: ```yaml --- description: My API skill mcp: my-api: url: https://api.example.com/mcp oauth: clientId: ${CLIENT_ID} scopes: ["read", "write"] --- ``` When a skill MCP has `oauth` configured: - **Auto-discovery**: Fetches `/.well-known/oauth-protected-resource` (RFC 9728), falls back to `/.well-known/oauth-authorization-server` (RFC 8414) - **Dynamic Client Registration**: Auto-registers with servers supporting RFC 7591 (clientId becomes optional) - **PKCE**: Mandatory for all flows - **Resource Indicators**: Auto-generated from MCP URL per RFC 8707 - **Token Storage**: Persisted in `~/.config/opencode/mcp-oauth.json` (chmod 0600) - **Auto-refresh**: Tokens refresh on 401; step-up authorization on 403 with `WWW-Authenticate` - **Dynamic Port**: OAuth callback server uses an auto-discovered available port Pre-authenticate via CLI: ```bash bunx oh-my-opencode mcp oauth login --server-url https://api.example.com ``` ## Model Capabilities Model capabilities are models.dev-backed, with a refreshable cache and compatibility diagnostics. The system combines bundled models.dev snapshot data, optional refreshed cache data, provider runtime metadata, and heuristics when exact metadata is unavailable. ### Refreshing Capabilities Update the local cache with the latest model information: ```bash bunx oh-my-opencode refresh-model-capabilities ``` Configure automatic refresh at startup: ```jsonc { "model_capabilities": { "enabled": true, "auto_refresh_on_start": true, "refresh_timeout_ms": 5000, "source_url": "https://models.dev/api.json" } } ``` ### Capability Diagnostics Run `bunx oh-my-opencode doctor` to see capability diagnostics including: - effective model resolution for agents and categories - warnings when configured models rely on compatibility fallback - override compatibility details alongside model resolution output ## Context Injection ### Directory AGENTS.md Auto-injects AGENTS.md when reading files. Walks from file directory to project root: ``` project/ ├── AGENTS.md # Injected first ├── src/ │ ├── AGENTS.md # Injected second │ └── components/ │ ├── AGENTS.md # Injected third │ └── Button.tsx # Reading this injects all 3 ``` ### Conditional Rules Inject rules from `.claude/rules/` when conditions match: ```markdown --- globs: ["*.ts", "src/**/*.js"] description: "TypeScript/JavaScript coding rules" --- - Use PascalCase for interface names - Use camelCase for function names ``` Supports: - `.md` and `.mdc` files - `globs` field for pattern matching - `alwaysApply: true` for unconditional rules - Walks upward from file to project root, plus `~/.claude/rules/` ## Claude Code Compatibility Full compatibility layer for Claude Code configurations. ### Config Loaders | Type | Locations | | ------------ | ---------------------------------------------------------------------------------- | | **Commands** | `~/.config/opencode/commands/`, `.claude/commands/` | | **Skills** | `~/.config/opencode/skills/*/SKILL.md`, `.claude/skills/*/SKILL.md` | | **Agents** | `~/.config/opencode/agents/*.md`, `.claude/agents/*.md` | | **MCPs** | `~/.claude.json`, `~/.config/opencode/.mcp.json`, `.mcp.json`, `.claude/.mcp.json` | MCP configs support environment variable expansion: `${VAR}`. ### Compatibility Toggles Disable specific features: ```json { "claude_code": { "mcp": false, "commands": false, "skills": false, "agents": false, "hooks": false, "plugins": false } } ``` | Toggle | Disables | | ---------- | ------------------------------------------------------------ | | `mcp` | `.mcp.json` files (keeps built-in MCPs) | | `commands` | Command loading from Claude Code paths | | `skills` | Skill loading from Claude Code paths | | `agents` | Agent loading from Claude Code paths (keeps built-in agents) | | `hooks` | settings.json hooks | | `plugins` | Claude Code marketplace plugins | Disable specific plugins: ```json { "claude_code": { "plugins_override": { "claude-mem@thedotmack": false } } } ```