🎉 v4.0.0 — Finally, Team Mode
You waited. We cooked. Team Mode lands today.
This is the release that turns oh-my-opencode from "one agent with subagents" into a real multi-agent system — multiple agents, real-time coordination, side-by-side tmux visualization, all of it.
👥 Team Mode
A lead agent orchestrates a team of category-specialized members, all running in parallel and communicating through dedicated tools (team_create, team_send_message, team_task_create). Watch every member work simultaneously in a dedicated tmux layout — focus and grid windows let you zoom into one teammate without losing the bigger picture.
It powers everything new in this release:
hyperplanskill — 5 hostile agents tear apart your plan from orthogonal angles before a single line of code is writtensecurity-researchskill — 3 vulnerability hunters + 2 PoC engineers auditing your codebase in parallel, with severity calibrated by actual exploitability- Hand-tuned member prompts so the team contract isn't accidentally bypassed via
delegate_task
Opt in: set team_mode.enabled = true in your config and restart opencode. Off by default — enable it when you want it.
🧠 Model-Specific Agent Prompts
GPT-5.2 and GPT-5.3-codex now ship with category-tailored system prompts. Oracle, Momus, and the deep category each get a model-specific overlay tuned to that model's strengths.
🛡️ Reliability Hardening
- Ralph loop stops cascading runtime errors — retries are guarded, atlas re-attempts boulders, ultrawork has full retry coverage.
- Desktop plugin boots cleanly without Bun on Electron —
bun:sqliteis hidden from the Node ESM loader. - Agent name sanitization — backslashes/quotes can no longer poison agent launches.
- Doctor catches unexpected failures with actionable diagnostics instead of silent exit 137.
- Credit-balance fallback — low balance correctly classifies as
quota_exceededand triggers the fallback chain. - PostHog billing trimmed — feature flags disabled,
plugin_loadedevent removed.
📚 Docs
Team mode and tmux-subagent features documented end-to-end across EN / KO / JA / RU / ZH-CN READMEs. New AGENTS.md sections for team-mode and tmux-subagent internals.
⚠️ Behavioral Changes
delegate_task(deepcategory): one goal per call is now enforced. Bundle multiple goals into parallel calls, not one bundled call.- When team mode is enabled, members orchestrate via
team_*tools, notdelegate_task.
Minor Compatibility and Stability Release
This release carries compatibility-facing behavior changes and operational hardening. Read the summary below before upgrading or publishing.
- Rename transition updates across package detection, plugin/config compatibility, and install surfaces.
- Task and tool behavior updates, including delegate-task contract and runtime registration behavior.
- Task-system default behavior alignment so omitted configuration behaves consistently across runtime paths.
- Install and publish workflow hardening, including safer release sequencing and package/install fixes.
Commit Summary
- 6b49e3b test agent runtime sort behavior
- ee938aa fix full-suite isolation regressions
- 102b5f9 fix(delegate-task): require one goal per
deepcall - 788fbec fix desktop plugin startup without Bun
- 4bcbbdd Merge pull request #3832 from herjarsa/fix/desktop-electron-bun-protocol-compat
- df48af3 Merge pull request #3830 from code-yeongyu/fix/posthog-billing-optimization
- 9861510 @herjarsa has signed the CLA in #3832
- 3a93a40 fix(desktop): hide bun:sqlite import from Node.js/Electron ESM loader
- 8586cb8 fix(posthog): disable feature flags, remove plugin_loaded event for billing optimization
- 10f9559 Merge pull request #3810 from code-yeongyu/fix/ralph-loop-retry-runtime-errors-v2
- dfc7dfa feat(delegate-task): add GPT-5.3-codex specialized deep category prompt
- 5eea702 feat(agents): add GPT-5.2 specialized prompts for oracle and momus
- ebe26ea fix(ralph-loop): guard runtime error retries
- 83ec352 merge dev into continuation runtime retry
- 2c70938 test(ralph-loop): cover ultrawork runtime retry
- 6a2d19d fix(atlas): retry boulder after runtime errors
- cd88e35 chore(gitignore): ignore session/debugging artifacts and tool caches
- 40ded42 chore(drafts): remove stale gpt-5.5 prompt drafts
- 5190805 @oyi77 has signed the CLA in #3823
- 1ad0fd4 Merge pull request #3748 from code-yeongyu/fix/simple-github-bugs-1948-3564
- ef66516 Merge pull request #3801 from code-yeongyu/fix/directory-agents-non-string-output
- 7bd863b Merge pull request #3813 from code-yeongyu/fix/agent-name-backslash-sanitize
- d9ef03f test(agent): guard queueItem assertion against empty queue race
- 25d183f fix(agent): sanitize backslash/quote from agent name in launch() and background-executor
- 66a6f42 fix(todo-continuation-enforcer): preserve overload countdown
- 89c9599 fix(team-mode): gate tmux layout cleanup by config
- b4791c8 fix(team-mode): keep tmux visualization in caller window
- 675f788 fix(team-mode): resolve caller tmux window target
- 9dd0e9f Merge pull request #3622 from MoerAI/fix/truncate-tool-error-output
- 4494887 Merge pull request #3612 from MoerAI/fix/doctor-exit-137-handling
- 462d774 Merge pull request #3610 from MoerAI/fix/credit-balance-too-low-fallback
- 2971322 fix(doctor): catch unexpected failures and provide actionable diagnostics (fixes #3345)
- a22416d fix(error-classifier): classify credit balance too low as quota_exceeded for fallback (fixes #3571)
- 7ac1109 Merge pull request #3636 from lucasyounger/codex/fix-3629-worktree-plan-path
- 37d981e Merge pull request #3634 from auyua9/fix/ast-grep-pattern-hints
- 0a7306c Merge pull request #3637 from ihoooohi/fix/claude-thinking-legacy-alias-collision
- 7e43bea Merge pull request #3620 from MoerAI/fix/sisyphus-prompt-plan-reference
- 62a7356 Merge pull request #3621 from MoerAI/fix/skill-tool-respects-plugins-config
- 9b87fd5 Merge pull request #3744 from Arcadi4/dev
- 6a341fc Merge pull request #3595 from samuele-ruffino96/feature/opencode-go-model-upgrade
- f31860b fix(docs): resolve model table inconsistencies in installation guide
- df7f64d fix(docs): correct Explore and Librarian fallback chains in installation guide
- 467a4a5 fix(test): use toContain instead of providers[0].toBe for multi-provider entries
- b7d77da fix(capabilities): add kimi-k2.6 to supplemental model entries
- 1e93d37 docs(opencode-go): update docs and fallback chain tables to reflect glm-5.1, kimi-k2.6, qwen3.5-plus
- 6cd40df feat(opencode-go): upgrade glm-5 → glm-5.1 and kimi-k2.5 → kimi-k2.6 in fallback chains
- 0727d9a fix(opencode-go): replace non-existent minimax-m2.7-highspeed with qwen3.5-plus
- ad2255e Merge pull request #2227 from DEAN-Cherry/docs/speed-up-fallback
- d1a7c8f Merge pull request #3096 from s2mr/fix/git-master-language-agnostic-support
- b0c7c9f Merge pull request #3811 from code-yeongyu/feat/readme-dori-image-update-v2
- abba70c Merge pull request #3691 from islee23520/chore/gpt-5.5-followup-cleanup
- 4deecdf Merge pull request #3358 from lrq3000/patch-1
- 5624393 Merge pull request #3783 from matchai/feat/walk-up-config-discovery
- c04f772 docs(readme): replace dated star-count copy in banner with timeless site catchphrases
- 2bdd912 docs(install): extend rebrand to all bunx/npx oh-my-* commands for consistency
- 766cdaf docs: align GPT-5.5 model references
- 3aa6ff9 Merge pull request #3741 from hashen10/patch-1
- f940cb4 docs(install): Update installation commands for humans in documentation to oh-my-openagent
- 13c70cf docs(config): document hierarchical config discovery
- eb1e104 refactor(config): tighten walk-up config discovery from oracle review
- cc1d9cf feat(config): walk up directory tree to merge ancestor plugin configs
- 47b5c56 fix(ralph-loop): retry runtime errors immediately
- 3bf0b89 Merge pull request #3809 from code-yeongyu/feat/readme-dori-image-update
- 8e17199 fix(ralph-loop): retry runtime errors immediately
- a0be496 docs(readme): update Sisyphus Labs banner to new Dori branding
- 53fc2a5 fix(bug-report): keep required: true for latest version checkbox
- fe0fcd5 Update bug report template for openagent
- 01c8a2a feat(shared): add findProjectOpencodePluginConfigFiles walker
- 44216a5 Merge pull request #3578 from xiaolai/fix/nlpm-agents-missing-frontmatter
- 3749656 Merge pull request #3784 from matchai/chore/remove-redundant-env-restore
- 9e4a621 Merge pull request #3008 from YanzheL/fix/configuration-schema-issues
- 573a530 Merge pull request #3006 from YanzheL/docs/fix-sisyphus-tasks-config-reference
- 227c114 Merge pull request #3044 from haimingZZ/docs/fix-install-guide-link
- 17f51ac Merge pull request #3009 from YanzheL/fix/ollama-ndjson-markup
- 3dd1254 Merge pull request #3007 from YanzheL/fix/example-schema-urls
- cedcd2d Merge pull request #3808 from code-yeongyu/feat/team-mode
- 35426eb docs(readme): add Vercel to adopters list across all languages
- cf3e05c Merge pull request #3807 from code-yeongyu/feat/team-mode
- 44de4c5 docs(readme): rebrand Sisyphus Labs banner to Dori across all languages
- 612680a Merge pull request #3493 from code-yeongyu/feat/team-mode
- 8bcd236 docs(readme): align English banner wording with Korean source of truth
- 4e5980d fix(tmux): avoid Bun global in runner bundle
- 8003d1a test(ci): isolate stateful tests in CI runner
- 786b065 test(background-task): mock notification shell chain
- 2fd6be0 test(cli): update model fallback snapshots
- 2d37df4 refactor(team-mode): use dedicated focus and grid windows for team layout
- 503df29 fix(team-mode): register spawned sessions early
- cb81930 fix(team-mode): stop tmux freeze when many teammates spawn
- e6cd50c fix(team-mode): preserve tmux focus during layout
- b99325f fix(skills): make hyperplan deep member optional
- 1248450 fix(keyword-detector): pin hyperplan roster hint
- 8f48277 fix(builtin-commands): pin hyperplan roster contract
- ca8732f fix(team-mode): reject incomplete hyperplan teams
- ea5e3e0 fix(model): allow artistry category fallbacks
- 267745f test(plugin): remove forbidden assertions in event tests
- d737f2e test(background-agent): remove forbidden assertions in manager tests
- c90be7f feat(team-mode): align member and lead prompts with Claude Code free-code reference
- f6643e7 fix(keyword-detector): yield to slash commands so /hyperplan executes its template
- d8f89b6 fix(team-mode): preserve per-category model for kind:"category" members
- cc17808 chore(schema): regenerate JSON schema for hyperplan-ultrawork keyword
- 5c67482 feat(keyword-detector): add hyperplan-ultrawork combo + tuple refactor
- 09fe4ca fix(hyperplan): align keyword detector and command template with mandatory plan handoff
- 0b4390b feat(skills/hyperplan): mandate plan agent handoff after adversarial distillation
- 9a0aec0 feat(skills): add hyperplan skill
- 8344997 assets: regenerate oh-my-opencode schema with hyperplan
- 3befe5f feat(keyword-detector): add hyperplan toast and planner filtering to hook
- 5af4160 feat(builtin-commands): register hyperplan builtin command
- 65e2643 feat(keyword-detector): add hyperplan to detector types list
- b32f274 feat(keyword-detector): register hyperplan in keyword detectors array
- f025a4c feat(keyword-detector): add hyperplan keyword pattern, message and test
- a75a24d feat(builtin-commands): add hyperplan command template
- 592308d feat(builtin-commands): add hyperplan to command name type
- 4af7d62 feat(config): add hyperplan to keyword detector type schema
- 585ad6d feat(config): add hyperplan to builtin command schema
- 91b7fca fix(plugin): replace any type with explicit summarize overloads in event handler
- 924dd85 fix(hephaestus): restore autonomy prompt section
- b54922d fix(team-mode): forbid delegate-task in member guidance
- 4d44877 fix(team-mode): reject empty team_create lead session override
- 91c0d75 feat(keyword-detector): add per-keyword disable config
- 25d9437 feat(keyword-detector): add team mode keyword detection
- 2ffe5af feat(shared): add supplemental model capability entries for team-mode
- c79addb test(shared): expand migrate-legacy-config-file tests for team-mode
- 34b659a feat(shared): update agent display names for team-mode
- 20a66f7 feat(plugin): wire team-mode into tool-guard and transform hook creation
- f3b9a8a assets: update omo.png
- 22056bd docs(readme): update zh-cn README for team-mode
- c142f6d docs(readme): update ru README for team-mode
- 073328b docs(readme): update ja README for team-mode
- 5c04f3a docs(readme): update ko README for team-mode
- dcd5beb docs(readme): update en README for team-mode
- d7d9564 docs: add AGENTS.md for team-mode and tmux-subagent features
- dc02767 docs: update overview, features reference and AGENTS.md for team-mode
- c3884cc docs(guide): update agent-model-matching with team-mode
- 6e1df2c docs(guide): add team-mode guide
- 83eff39 assets: regenerate oh-my-opencode schema json with team-mode
- 1168e3a test(perf): add plugin init team-mode resume-defer benchmark
- a475e45 feat(cli): add doctor check for team-mode dependencies
- 855c848 feat(opencode-skill-loader): adapt skill resolution and discovery for team-mode
- 7fbefa4 feat(claude-code-loader): adapt plugin discovery for team-mode
- 15a0e10 feat(background-agent): adapt task poller for team-mode work distribution
- 00a6647 feat(background-agent): adapt idle event handler for team-mode sessions
- a0d122b feat(background-agent): integrate team-mode into background manager
- 417a368 feat(background-agent): extend types for team-mode background tasks
- 2e6bb34 feat(builtin-commands): adapt commands and templates for team-mode
- 39f27b9 feat(tools): wire team-mode into skill and subagent resolvers
- 2078f9c feat(tools): extend delegate-task types for team-mode subagents
- fc31524 feat(tools): register team-mode skill tooling and update exports
- 75fc915 test(agents): expand hephaestus and utils tests for team-mode
- 527ab51 feat(agents): adapt momus agent for team-mode context
- 98a69b9 feat(agents): adapt agent-skill-resolution for team-mode skills
- a110c73 feat(agents): register team-mode in builtin and general agent definitions
- 6327a7a feat(agents): add available-skills resolution with tests
- 79ba0e6 feat(hooks): add aggressive truncation strategy tests for context-window recovery
- d2a28c1 feat(hooks): adapt session-recovery for team-mode session semantics
- 473062d feat(hooks): export team-mode hooks from central index
- d67e57e feat(plugin): include team-mode in message transform and skill context
- dabd35f feat(plugin): integrate team-mode into session events and synthetic idles
- f882f04 feat(plugin): add team-mode gating to tool execute hooks
- 47e0fba feat(plugin): register team-mode tools and expand registry tests
- 2258c00 feat(plugin-handlers): wire team-mode into agent, command and tool config handlers
- 2c48cab feat(plugin): initialize team-mode at plugin entry and config merge
- ecd9cee feat(hooks): add team tool gating hook with tests
- 438806e feat(hooks): add team member status handler with tests
- 384132c feat(hooks): add team member error handler with tests
- de88241 feat(hooks): add team lead orphan handler with tests
- c16c67c feat(hooks): add team idle wake hint handler with tests
- bd768a4 feat(hooks): add team-mode status injector hook with tests
- 7f8034c feat(hooks): add team mailbox injector hook with tests
- 844dcd4 feat(builtin-skills): register team-mode skill in exports
- c9fdb04 feat(builtin-skills): add team-mode skill implementation with tests
- d3c020c feat(team-mode): export team-tools barrel
- f2555fe feat(team-mode): add team tasks tools with tests
- b71c6e1 feat(team-mode): add team query tools with tests
- 379b3fd feat(team-mode): add team messaging tools with missing-session tests
- f432798 feat(team-mode): add team lifecycle tools with inline spec tests
- a10ab16 feat(team-mode): export team-runtime barrel
- c657dff feat(team-mode): add team runtime shutdown helpers and tests
- cb1c750 feat(team-mode): add team runtime resource cleanup with tests
- 62d4090 feat(team-mode): add team runtime delete with background cancellation tests
- 4645d56 feat(team-mode): add team runtime layout activation with tests
- d958b7f feat(team-mode): add team runtime member dependency resolution
- a65d54c feat(team-mode): add team runtime member resolver with tests
- 301e02c feat(team-mode): add team runtime status query with tests
- d9785c7 feat(team-mode): add team runtime create with tests
- 51382c1 test(team-mode): add live tmux smoke test for team layout
- f78b1e6 feat(team-mode): add sweep-stale-team-sessions with tests
- 2b8096f feat(team-mode): add resolve-caller-tmux-session helper with tests
- eb61091 feat(team-mode): add rebalance-team-window command with tests
- a13ef03 feat(team-mode): add close-team-member-pane command with tests
- c5df781 feat(team-mode): add tmux team layout creation and removal
- 0f20a1b feat(team-mode): export team-mailbox barrel
- 01aeeed feat(team-mode): add team mailbox reservation logic
- 2ce86ff feat(team-mode): add team mailbox poll with tests
- 3f69333 feat(team-mode): add team mailbox ack with tests
- 07368b4 feat(team-mode): add team mailbox send with tests
- 85cc30a feat(team-mode): add team mailbox inbox with tests
- 796143a feat(team-mode): export team-tasklist barrel
- b34cd87 feat(team-mode): add team tasklist test-support utilities
- f725937 feat(team-mode): add team tasklist update with tests
- 205ce93 feat(team-mode): add team tasklist dependencies with tests
- 4270af3 feat(team-mode): add team tasklist claim with tests
- 0433484 feat(team-mode): add team tasklist list with tests
- 031a7a4 feat(team-mode): add team tasklist get with tests
- 6e0f6ae feat(team-mode): add team tasklist store with tests
- 23e6a53 feat(team-mode): export team-state-store barrel
- 274df1f feat(team-mode): add team state store resume logic with tests
- 79fb12e feat(team-mode): add team state store locks with tests
- 1bec921 feat(team-mode): add team state store with tests
- 48bac22 feat(team-mode): export team-registry barrel
- 2866d32 feat(team-mode): add team registry validator with tests
- cf050dc feat(team-mode): add team spec input normalizer with tests
- de30721 feat(team-mode): add team registry loader with normalization tests
- b2359c0 feat(team-mode): add team registry path utilities with tests
- a910239 feat(team-mode): add team session registry with tests
- 3a93cb7 test(team-mode): add integration test for team-mode lifecycle
- 8c4c4ff feat(team-mode): add caller team-lead resolution with tests
- 41d6e12 feat(team-mode): add member session resolution and routing logic
- 8a42d7f feat(team-mode): add member guidance and parser utilities
- 783d705 feat(team-mode): add core types, dependencies and type-level tests
- 5e4ae88 test(tmux-subagent): expand zombie-pane test coverage
- 49bb5dd test(tmux-subagent): add pane-state-querier runner tests
- 8d3d882 test(tmux-subagent): add manager project-directory resolution tests
- 77655a7 test(tmux-subagent): expand manager test coverage
- 680927d test(tmux-subagent): expand polling-manager test coverage
- b6dcf05 test(tmux-subagent): expand action-executor test coverage
- c8b2250 refactor(tmux-subagent): stabilize polling, execution and session lifecycle with runner
- 90e6e0c feat(openclaw): integrate typed tmux runner for external dispatch
- 4a5e7cf feat(tmux): add window-spawn utility with tests
- 13b3bd9 feat(tmux): add session-spawn utility with tests
- ad31598 feat(tmux): add session-kill utility with runner tests
- 56250a4 feat(tmux): add pane-spawn utility with runner tests
- f93e15b feat(tmux): add pane-replace utility with tests
- d901020 feat(tmux): add pane-dimensions utility with tests
- cfce0cc refactor(tmux): migrate pane-close to runner and expand test coverage
- b9a40f0 refactor(tmux): migrate layout commands to typed runner
- c9e544a refactor(tmux): export sweepTmuxSessionsWith and add runtime tests
- 96161cc feat(tmux): introduce typed tmux command runner abstraction
- ec121a7 feat(config): add team-mode configuration schema and merge support
- caaa3d4 refactor(hephaestus): tighten GPT-5.5 prompt for outcome-first density
- bcaae10 fix(directory-agents-injector): guard against non-string output.output
- c3beb37 fix(doctor): detect gh when Bun.which misses it
- 9c4bceb fix(plugin): normalize bare schema refs
- 9ba6763 fix(call-omo-agent): validate missing subagent type
- f49afe7 refactor(agents): Add "max" to all codebase reasoning enums accordingly
- 4c6fd2e chore(config): Allow option "max" for "reasoningEffort" field in schema
- 9c7102b fix(aliases): stop rewriting canonical claude-opus-4-6-thinking
- 828c263 Fix #3629: resolve boulder progress from worktree plan
- e7ad2b9 fix(ast-grep): restore pattern hints in tools
- 2c78cc6 fix(tool-execute-after): cap excessively long tool output to prevent TUI flooding (fixes #3586)
- 7806df1 fix(tool-registry): pass plugins config to skill tool for proper command filtering (fixes #3582)
- 32e56c0 fix(agents): reference prometheus instead of conditional plan alias in prompts (fixes #3596)
- 53e3061 docs(agents): add YAML frontmatter to AGENTS.md documentation files
- 9856684 fix(git-master): align validation check with language-profile approach
- fdc4376 docs(git-master): sync skill markdown with multilingual wording
- 01d6a7d docs(git-master): generalize language profile guidance
- 034c5fe docs(git-master): make mode triggers language-agnostic
- b473593 docs: fix install guide model-matching link
- 0e8f5dd docs(ollama): fix NDJSON code block language identifier
- 2ebf146 docs(configuration): fix invalid JSON examples and schema issues
- cbd7dac docs(examples): update schema URLs to oh-my-openagent
- dc41de9 docs: fix Sisyphus Tasks config reference to match actual schema
- b8c4f44 docs: add guide for speeding up fallback with proxy APIs
Thank you to 8 community contributors:
- @Arcadi4:
- chore(config): Allow option "max" for "reasoningEffort" field in schema
- refactor(agents): Add "max" to all codebase reasoning enums accordingly
- @matchai:
- feat(shared): add findProjectOpencodePluginConfigFiles walker
- feat(config): walk up directory tree to merge ancestor plugin configs
- refactor(config): tighten walk-up config discovery from oracle review
- docs(config): document hierarchical config discovery
- @hashen10:
- Update bug report template for openagent
- @lrq3000:
- docs(install): Update installation commands for humans in documentation to oh-my-openagent
- @islee23520:
- docs: align GPT-5.5 model references
- @samuele-ruffino96:
- fix(opencode-go): replace non-existent minimax-m2.7-highspeed with qwen3.5-plus
- feat(opencode-go): upgrade glm-5 → glm-5.1 and kimi-k2.5 → kimi-k2.6 in fallback chains
- docs(opencode-go): update docs and fallback chain tables to reflect glm-5.1, kimi-k2.6, qwen3.5-plus
- fix(capabilities): add kimi-k2.6 to supplemental model entries
- fix(test): use toContain instead of providers[0].toBe for multi-provider entries
- fix(docs): correct Explore and Librarian fallback chains in installation guide
- fix(docs): resolve model table inconsistencies in installation guide
- @MoerAI:
- @herjarsa:
- fix(desktop): hide bun:sqlite import from Node.js/Electron ESM loader