Back to Oh My Openagent

Oh-My-OpenAgent Features Reference

docs/reference/features.md

3.17.1455.2 KB
Original Source

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.

AgentModelPurpose
Sisyphusclaude-opus-4-7The default orchestrator. Plans, delegates, and executes complex tasks using specialized subagents with aggressive parallel execution. Todo-driven workflow with extended thinking (32k budget). Fallback: opencode-go/kimi-k2.5kimi-for-coding/k2p5opencode|moonshotai|moonshotai-cn|firmware|ollama-cloud|aihubmix/kimi-k2.5openai|github-copilot|opencode/gpt-5.4 (medium)zai-coding-plan|opencode/glm-5opencode/big-pickle.
Hephaestusgpt-5.4The 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.
Oraclegpt-5.4Architecture decisions, code review, debugging. Read-only consultation with stellar logical reasoning and deep analysis. Inspired by AmpCode. Fallback: google|github-copilot|opencode/gemini-3.1-pro (high)anthropic|github-copilot|opencode/claude-opus-4-7 (max)opencode-go/glm-5.
Librariangpt-5.4-mini-fastMulti-repo analysis, documentation lookup, OSS implementation examples. Deep codebase understanding with evidence-based answers. Fallback: opencode-go/minimax-m2.7-highspeedopencode-go/minimax-m2.7anthropic|opencode/claude-haiku-4-5openai|opencode/gpt-5.4-nano.
Exploregpt-5.4-mini-fastFast codebase exploration and contextual grep. Fallback: opencode-go/minimax-m2.7-highspeedopencode-go/minimax-m2.7anthropic|opencode/claude-haiku-4-5openai|opencode/gpt-5.4-nano.
Multimodal-Lookergpt-5.4Visual content specialist. Analyzes PDFs, images, diagrams to extract information. Fallback: opencode-go/kimi-k2.5zai-coding-plan/glm-4.6vopenai|github-copilot|opencode/gpt-5-nano.

Planning Agents

AgentModelPurpose
Prometheusclaude-opus-4-7Strategic planner with interview mode. Creates detailed work plans through iterative questioning. Fallback: openai|github-copilot|opencode/gpt-5.4 (high)opencode-go/glm-5google|github-copilot|opencode/gemini-3.1-pro.
Metisclaude-opus-4-7Plan consultant — pre-planning analysis. Identifies hidden intentions, ambiguities, and AI failure points. Fallback: openai|github-copilot|opencode/gpt-5.4 (high)opencode-go/glm-5kimi-for-coding/k2p5.
Momusgpt-5.4Plan reviewer — validates plans against clarity, verifiability, and completeness standards. Fallback: anthropic|github-copilot|opencode/claude-opus-4-7 (max)google|github-copilot|opencode/gemini-3.1-pro (high)opencode-go/glm-5.

Orchestration Agents

AgentModelPurpose
Atlasclaude-sonnet-4-6Todo-list orchestrator. Executes planned tasks systematically, managing todo items and coordinating work. Fallback: opencode-go/kimi-k2.5openai|github-copilot|opencode/gpt-5.4 (medium)opencode-go/minimax-m2.7.
Sisyphus-Junior(category-dependent)Category-spawned executor. Model is selected automatically based on the task category (visual-engineering, quick, deep, etc.). Its built-in general fallback chain is anthropic|github-copilot|opencode/claude-sonnet-4-6opencode-go/kimi-k2.5openai|github-copilot|opencode/gpt-5.4 (medium)opencode-go/minimax-m2.7opencode/big-pickle.

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

AgentRestrictions
oracleRead-only: cannot write, edit, or delegate (blocked: write, edit, task, call_omo_agent)
librarianCannot write, edit, or delegate (blocked: write, edit, task, call_omo_agent)
exploreCannot write, edit, or delegate (blocked: write, edit, task, call_omo_agent)
multimodal-lookerAllowlist: read only
atlasCannot delegate (blocked: task, call_omo_agent)
momusCannot 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

CategoryDefault ModelUse Cases
visual-engineeringgoogle/gemini-3.1-proFrontend, UI/UX, design, styling, animation
ultrabrainopenai/gpt-5.4 (xhigh)Deep logical reasoning, complex architecture decisions requiring extensive analysis
deepopenai/gpt-5.4 (medium)Goal-oriented autonomous problem-solving. Thorough research before action. For hairy problems requiring deep understanding.
artistrygoogle/gemini-3.1-pro (high)Highly creative/artistic tasks, novel ideas
quickopenai/gpt-5.4-miniTrivial tasks - single file changes, typo fixes, simple modifications
unspecified-lowanthropic/claude-sonnet-4-6Tasks that don't fit other categories, low effort required
unspecified-highanthropic/claude-opus-4-7 (max)Tasks that don't fit other categories, high effort required
writinggoogle/gemini-3-flashDocumentation, 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

FieldTypeDescription
descriptionstringHuman-readable description of the category's purpose. Shown in task prompt.
modelstringAI model ID to use (e.g., anthropic/claude-opus-4-7)
variantstringModel variant (e.g., max, xhigh)
temperaturenumberCreativity level (0.0 ~ 2.0). Lower is more deterministic.
top_pnumberNucleus sampling parameter (0.0 ~ 1.0)
prompt_appendstringContent to append to system prompt when this category is selected
thinkingobjectThinking model configuration ({ type: "enabled", budgetTokens: 16000 })
reasoningEffortstringReasoning effort level (low, medium, high)
textVerbositystringText verbosity level (low, medium, high)
toolsobjectTool usage control (disable with { "tool_name": false })
maxTokensnumberMaximum response token count
is_unstable_agentbooleanMark 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-7",
      "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

SkillTriggerDescription
git-mastercommit, 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).
playwrightBrowser tasks, testing, screenshotsBrowser automation via Playwright MCP. MUST USE for browser verification, browsing, web scraping, testing, and screenshots.
agent-browserBrowser tasks on agent-browserBrowser automation via the agent-browser CLI. Covers navigation, snapshots, screenshots, network inspection, and scripted interactions.
dev-browserStateful browser scriptingBrowser automation with persistent page state for iterative workflows and authenticated sessions.
frontend-ui-uxUI/UX tasks, stylingDesigner-turned-developer persona. Crafts stunning UI/UX even without design mockups. Emphasizes bold aesthetic direction, distinctive typography, cohesive color palettes.
review-work"review work", "review my work", "QA my work"Post-implementation review orchestrator. Launches 5 parallel background sub-agents for comprehensive review: goal verification, code quality, security, hands-on QA, and context mining. All must pass for review to pass.
ai-slop-remover"remove AI slop", "de-AI", "humanize"Removes AI-generated code smells from files while preserving functionality. Identifies and eliminates verbose comments, redundant error handling, over-engineered patterns, and generic AI phrasing.

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

CommandDescription
/init-deepInitialize hierarchical AGENTS.md knowledge base
/ralph-loopStart self-referential development loop until completion
/ulw-loopStart ultrawork loop - continues with ultrawork mode
/cancel-ralphCancel active Ralph Loop
/refactorIntelligent refactoring with LSP, AST-grep, architecture analysis, and TDD verification
/start-workStart Sisyphus work session from Prometheus plan
/stop-continuationStop all continuation mechanisms (ralph loop, todo continuation, boulder) for this session
/handoffCreate 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 <promise>DONE</promise> 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 <target> [--scope=<file|module|project>] [--strategy=<safe|aggressive>]

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

ToolDescription
grepContent search using regular expressions. Filter by file pattern.
globFast file pattern matching. Find files by name patterns.

Edit Tools

ToolDescription
editHash-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)

ToolDescription
lsp_diagnosticsGet errors/warnings before build
lsp_prepare_renameValidate rename operation
lsp_renameRename symbol across workspace
lsp_goto_definitionJump to symbol definition
lsp_find_referencesFind all usages across workspace
lsp_symbolsGet file outline or workspace symbol search

AST-Grep Tools

ToolDescription
ast_grep_searchAST-aware code pattern search (25 languages)
ast_grep_replaceAST-aware code replacement

Delegation Tools

ToolDescription
call_omo_agentSpawn explore/librarian agents. Supports run_in_background.
taskCategory-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_outputRetrieve background task results
background_cancelCancel running background tasks

Visual Analysis Tools

ToolDescription
look_atAnalyze media files (PDFs, images, diagrams) via Multimodal-Looker agent. Extracts specific information or summaries from documents, describes visual content.

Skill Tools

ToolDescription
skillLoad and execute a skill or slash command by name. Returns detailed instructions with context applied.
skill_mcpInvoke MCP server operations from skill-embedded MCPs.

Session Tools

ToolDescription
session_listList all OpenCode sessions
session_readRead messages and history from a session
session_searchFull-text search across session messages
session_infoGet session metadata and statistics

Task Management Tools

Requires experimental.task_system: true in config.

ToolDescription
task_createCreate a new task with auto-generated ID
task_getRetrieve a task by ID
task_listList all active tasks
task_updateUpdate 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<string, unknown>;
  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:

FeatureTodoWriteTask System
StorageSession memoryFile system
PersistenceLost on closeSurvives restart
DependenciesNoneFull support (blockedBy)
Parallel executionManualAutomatic 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

ToolDescription
interactive_bashTmux-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

EventWhenCan
PreToolUseBefore tool executionBlock, modify input, inject context
PostToolUseAfter tool executionAdd warnings, modify output, inject messages
MessageDuring message processingTransform content, detect keywords, activate modes
EventOn session lifecycle changesRecovery, fallback, notifications
TransformDuring context transformationInject context, validate blocks
ParamsWhen setting API parametersAdjust model settings, effort level

Built-in Hooks

Context & Injection

HookEventDescription
directory-agents-injectorPreToolUse + PostToolUseAuto-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-injectorPreToolUse + PostToolUseAuto-injects README.md for directory context.
rules-injectorPreToolUse + PostToolUseInjects rules from .claude/rules/ when conditions match. Supports globs and alwaysApply.
compaction-context-injectorEventPreserves critical context during session compaction.
context-window-monitorEventMonitors context window usage and tracks token consumption.
preemptive-compactionEventProactively compacts sessions before hitting token limits.

Productivity & Control

HookEventDescription
keyword-detectorMessage + TransformDetects keywords and activates modes: ultrawork/ulw (max performance), search/find (parallel exploration), analyze/investigate (deep analysis).
think-modeParamsAuto-detects extended thinking needs. Catches "think deeply", "ultrathink" and adjusts model settings.
ralph-loopEvent + MessageManages self-referential loop continuation.
start-workMessageHandles /start-work command execution.
auto-slash-commandMessageAutomatically executes slash commands from prompts.
stop-continuation-guardEvent + MessageGuards the stop-continuation mechanism.
category-skill-reminderEvent + PostToolUseReminds agents about available category skills for delegation.
anthropic-effortParamsAdjusts Anthropic API effort level based on context.

Quality & Safety

HookEventDescription
comment-checkerPostToolUseReminds agents to reduce excessive comments. Smartly ignores BDD, directives, docstrings.
thinking-block-validatorTransformValidates thinking blocks to prevent API errors.
edit-error-recoveryPostToolUse + EventRecovers from edit tool failures.
write-existing-file-guardPreToolUsePrevents accidental overwrites of existing files without reading them first.
hashline-read-enhancerPostToolUseEnhances read output with hash-anchored line markers for the hashline edit tool.
hashline-edit-diff-enhancerPreToolUse + PostToolUseEnhances edit operations with diff markers for the hashline edit tool.

Recovery & Stability

HookEventDescription
session-recoveryEventRecovers from session errors — missing tool results, thinking block issues, empty messages.
anthropic-context-window-limit-recoveryEventHandles Claude context window limits gracefully.
runtime-fallbackEvent + MessageAutomatically 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-fallbackEvent + MessageManages model fallback chain when primary model is unavailable.
json-error-recoveryPostToolUseRecovers from JSON parse errors in tool outputs.

Truncation & Context Management

HookEventDescription
tool-output-truncatorPostToolUseTruncates output from Grep, Glob, LSP, AST-grep tools. Dynamically adjusts based on context window.

Notifications & UX

HookEventDescription
auto-update-checkerEventChecks for new versions on session creation, shows startup toast with version and Sisyphus status.
background-notificationEventNotifies when background agent tasks complete.
session-notificationEventOS notifications when agents go idle. Works on macOS, Linux, Windows.
agent-usage-reminderPostToolUse + EventReminds you to leverage specialized agents for better results.
question-label-truncatorPreToolUseTruncates long question labels in the Question tool UI.

Task Management

HookEventDescription
task-resume-infoPostToolUseProvides task resume information for continuity.
delegate-task-retryPostToolUse + EventRetries failed task delegation calls.
empty-task-response-detectorPostToolUseDetects empty responses from delegated tasks.
tasks-todowrite-disablerPreToolUseDisables TodoWrite tool when task system is active.

Continuation

HookEventDescription
todo-continuation-enforcerEventEnforces todo completion — yanks idle agents back to work.
compaction-todo-preserverEventPreserves todo state during session compaction.
unstable-agent-babysitterEventHandles unstable agent behavior with recovery strategies.

Integration

HookEventDescription
claude-code-hooksAllExecutes hooks from Claude Code's settings.json.
atlasMultipleMain orchestration logic for todo-driven work sessions.
interactive-bash-sessionPostToolUse + EventManages tmux sessions for interactive CLI.
non-interactive-envPreToolUseHandles non-interactive environment constraints.

Specialized

HookEventDescription
prometheus-md-onlyPreToolUseEnforces markdown-only output for Prometheus planner.
no-sisyphus-gptMessagePrevents Sisyphus from running on incompatible GPT models.
no-hephaestus-non-gptMessagePrevents Hephaestus from running on non-GPT models.
sisyphus-junior-notepadPreToolUseManages 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

MCPDescription
websearchReal-time web search powered by Exa AI
context7Official documentation lookup for any library/framework
grep_appUltra-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-name> --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

TypeLocations
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
  }
}
ToggleDisables
mcp.mcp.json files (keeps built-in MCPs)
commandsCommand loading from Claude Code paths
skillsSkill loading from Claude Code paths
agentsAgent loading from Claude Code paths (keeps built-in agents)
hookssettings.json hooks
pluginsClaude Code marketplace plugins

Disable specific plugins:

json
{
  "claude_code": {
    "plugins_override": {
      "claude-mem@thedotmack": false
    }
  }
}