Oh-My-OpenCode provides 11 specialized AI agents. Each has distinct expertise, optimized models, and tool permissions.
| 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: gpt-5.3-codex → deep quality chain. |
| Hephaestus | gpt-5.3-codex |
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. Fallback: deep quality chain (claude-opus-4-6-thinking → step-3.5-flash → glm-5 → ...). Requires at least one model in the chain to be available. |
| Oracle | gpt-5.3-codex |
Architecture decisions, code review, debugging. Read-only consultation with stellar logical reasoning and deep analysis. Inspired by AmpCode. Fallback: claude-opus-4-6-thinking → claude-sonnet-4-5-thinking → deep quality chain. |
| Librarian | claude-sonnet-4-5 |
Multi-repo analysis, documentation lookup, OSS implementation examples. Deep codebase understanding with evidence-based answers. Fallback: speed chain (claude-haiku-4-5 → gpt-5-mini → ...) → quality chain. |
| Explore | claude-haiku-4-5 |
Fast codebase exploration and contextual grep. Fallback: oswe-vscode-prime → gpt-5-mini → gpt-4.1 → extended speed chain. |
| Multimodal-Looker | gemini-3-pro-image |
Visual content specialist. Analyzes PDFs, images, diagrams to extract information. Fallback: gemini-3-pro-high → gemini-3-flash → kimi-k2.5 → claude-opus-4-6-thinking → claude-sonnet-4-5-thinking → claude-haiku-4-5 → gpt-5-nano. |
| Agent | Model | Purpose |
|---|---|---|
| Prometheus | claude-opus-4-6-thinking |
Strategic planner with interview mode. Creates detailed work plans through iterative questioning. Fallback: gpt-5.3-codex → claude-sonnet-4-5-thinking → deep quality chain. |
| Metis | claude-opus-4-6-thinking |
Plan consultant — pre-planning analysis. Identifies hidden intentions, ambiguities, and AI failure points. Fallback: gpt-5.3-codex → claude-sonnet-4-5-thinking → deep quality chain. |
| Momus | gpt-5.3-codex |
Plan reviewer — validates plans against clarity, verifiability, and completeness standards. Fallback: claude-opus-4-6-thinking → deep quality chain. |
| Agent | Model | Purpose |
|---|---|---|
| Atlas | claude-sonnet-4-5-thinking |
Todo-list orchestrator. Executes planned tasks systematically, managing todo items and coordinating work. Fallback: claude-opus-4-6-thinking → gpt-5.3-codex → deep quality chain. |
| 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. |
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
| 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) |
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")
Enable tmux.enabled to see background agents in separate tmux panes:
{
"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
Customize agent models, prompts, and permissions in oh-my-opencode.json.
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.
- 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.
| Category | Default Model | Use Cases |
|---|---|---|
visual-engineering |
google/gemini-3-pro |
Frontend, UI/UX, design, styling, animation |
ultrabrain |
openai/gpt-5.3-codex (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-pro (max) |
Highly creative/artistic tasks, novel ideas |
quick |
anthropic/claude-haiku-4-5 |
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 |
kimi-for-coding/k2p5 |
Documentation, prose, technical writing |
Specify the category parameter when invoking the task tool.
task(
category="visual-engineering",
prompt="Add a responsive chart component to the dashboard page"
)You can define custom categories in oh-my-opencode.json.
| 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 |
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.
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.
| 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 any browser-related tasks - verification, browsing, web scraping, testing, screenshots. |
| 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. |
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?
- 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
Oh-My-OpenCode provides two browser automation providers, configurable via browser_automation_engine.provider.
mcp:
playwright:
command: npx
args: ["@playwright/mcp@latest"]Usage:
/playwright Navigate to example.com and take a screenshot
{
"browser_automation_engine": {
"provider": "agent-browser"
}
}Requires installation:
bun add -g agent-browserUsage:
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
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
---
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.
You can create powerful specialized agents by combining Categories and Skills.
- Category:
visual-engineering - load_skills:
["frontend-ui-ux", "playwright"] - Effect: Implements aesthetic UI and verifies rendering results directly in browser.
- Category:
ultrabrain - load_skills:
[](pure reasoning) - Effect: Leverages GPT-5.3 Codex's logical reasoning for in-depth system architecture analysis.
- Category:
quick - load_skills:
["git-master"] - Effect: Uses cost-effective models to quickly fix code and generate clean commits.
When delegating, clear and specific prompts are essential. Include these 7 elements:
- TASK: What needs to be done? (single objective)
- EXPECTED OUTCOME: What is the deliverable?
- REQUIRED SKILLS: Which skills should be loaded via
load_skills? - REQUIRED TOOLS: Which tools must be used? (whitelist)
- MUST DO: What must be done (constraints)
- MUST NOT DO: What must never be done
- CONTEXT: File paths, existing patterns, reference materials
Bad Example:
"Fix this"
Good Example:
TASK: Fix mobile layout breaking issue in
LoginButton.tsxCONTEXT:src/components/LoginButton.tsx, using Tailwind CSS MUST DO: Change flex-direction atmd:breakpoint MUST NOT DO: Modify existing desktop layout EXPECTED: Buttons align vertically on mobile
Commands are slash-triggered workflows that execute predefined templates.
| 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 |
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
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 } }
Purpose: Same as ralph-loop but with ultrawork mode active
Everything runs at maximum intensity - parallel agents, background tasks, aggressive exploration.
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
Purpose: Start execution from a Prometheus-generated plan
Usage:
/start-work [plan-name]
Uses atlas agent to execute planned tasks systematically.
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.
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.
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)
| Tool | Description |
|---|---|
| grep | Content search using regular expressions. Filter by file pattern. |
| glob | Fast file pattern matching. Find files by name patterns. |
| 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. |
| 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 |
| Tool | Description |
|---|---|
| ast_grep_search | AST-aware code pattern search (25 languages) |
| ast_grep_replace | AST-aware code replacement |
| Tool | Description |
|---|---|
| call_omo_agent | Spawn explore/librarian agents. Supports run_in_background. |
| task | Category-based task delegation. Supports categories (visual-engineering, deep, quick, ultrabrain) or direct agent targeting via subagent_type. |
| background_output | Retrieve background task results |
| background_cancel | Cancel running background tasks |
| Tool | Description |
|---|---|
| look_at | Analyze media files (PDFs, images, diagrams) via Multimodal-Looker agent. Extracts specific information or summaries from documents, describes visual content. |
| 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. |
| 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 |
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 |
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 OpenCode's own implementation based on observed Claude Code behavior and internal specifications.
Task Schema:
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
blockedByrun in parallel - Dependent tasks wait until blockers complete
Example Workflow:
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 unblockedStorage: 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.
| Tool | Description |
|---|---|
| interactive_bash | Tmux-based terminal for TUI apps (vim, htop, pudb). Pass tmux subcommands directly without prefix. |
Usage Examples:
# 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
tmuxprefix) - Use for interactive apps that need persistent sessions
- One-shot commands should use regular
Bashtool with&
Hooks intercept and modify behavior at key points in the agent lifecycle. 44 hooks across 5 tiers.
| 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 |
| 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. |
| 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. |
| 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. |
| 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. |
| Hook | Event | Description |
|---|---|---|
| tool-output-truncator | PostToolUse | Truncates output from Grep, Glob, LSP, AST-grep tools. Dynamically adjusts based on context window. |
| 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. |
| 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. |
| 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. |
| 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. |
| 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. |
Run custom scripts via Claude Code's settings.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)
Disable specific hooks in config:
{
"disabled_hooks": [
"comment-checker",
"auto-update-checker"
]
}| 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. |
Skills can bring their own MCP servers:
---
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.
Skills can define OAuth-protected remote MCP servers. OAuth 2.1 with full RFC compliance (RFC 9728, 8414, 8707, 7591) is supported:
---
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:
bunx oh-my-opencode mcp oauth login <server-name> --server-url https://api.example.comAuto-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
Inject rules from .claude/rules/ when conditions match:
---
globs: ["*.ts", "src/**/*.js"]
description: "TypeScript/JavaScript coding rules"
---
- Use PascalCase for interface names
- Use camelCase for function namesSupports:
.mdand.mdcfilesglobsfield for pattern matchingalwaysApply: truefor unconditional rules- Walks upward from file to project root, plus
~/.claude/rules/
Full compatibility layer for Claude Code configurations.
| 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}.
Disable specific features:
{
"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:
{
"claude_code": {
"plugins_override": {
"claude-mem@thedotmack": false
}
}
}
{ "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.2", "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 } } } }