Download Latest Version v4.4.0 source code.tar.gz (31.5 MB)
Email in envelope

Get an email when there's a new version of OhMyOpenCode

Home / v4.3.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-05-21 33.3 kB
v4.3.0 source code.tar.gz 2026-05-21 31.5 MB
v4.3.0 source code.zip 2026-05-21 32.9 MB
Totals: 3 Items   64.4 MB 0

v4.3.0 - Zero-Config High-Agency and a Hardened Core

v4.3.0 stops asking you to type commands to get into flow state. Set default mode once and every new session starts with ultrawork and ralph loop active. Eight new workspace packages decouple core logic from the OpenCode harness, laying groundwork for Codex and Pi support.

What's New

🌍 Multilingual Toasts and Agent Names

Toast messages and agent display names now ship with English and Chinese locales. Set i18n.locale="zh" or export LANG=zh_CN and the UI switches automatically.

⚙️ Auto-Activated Modes

Set default_mode.ultrawork=true and default_mode.ralph_loop=true in your plugin config. Every new session starts in high-agency mode without typing commands. The first turn already carries the ultrawork system prompt.

🔒 Smarter Defaults and Guardrails

Block unused providers with disabled_providers so they never pollute model resolution or fallback chains. The plan-format-validator hook catches malformed task labels in .omo/plans/*.md before they break start-work. Prometheus auto-detects OpenSpec and .specify files and adapts its interview questions to your spec framework.

🎯 Scoped Skills and Async Vision

Skills can declare a target agent in their frontmatter, so restricted skills stay hidden from ineligible agents. Enforcement now applies at delegate-task injection too. look_at is now non-blocking, so your session stays responsive while images and PDFs process.

Architecture

This release extracts eight workspace packages: utils, hashline-core, model-core, rules-engine, agents-md-core, ast-grep-core, comment-checker-core, and boulder-state. Dependency injection replaces direct src/ back-imports, so the same logic can wire into a different harness without forking. If you are building a plugin or porting to Codex or Pi, this layering is your foundation. The 779-line prompt-async-gate monolith is now six focused sub-modules, making concurrent prompt dispatch safer to reason about.

Reliability Improvements

Background Agents Stay Accountable

Stream activity tracking, parent-wake handling, and stale-timeout gating mean fewer ghost sessions and lost background tasks. PRs [#4226], [#4228], and [#4235] landed a complete reliability pass.

Team-Mode Hardens at the Edges

Coordinator agents are hard-rejected as subagent targets, preventing invalid team composition. Member errors surface to the lead instead of being swallowed. Port-0 fallback, atomic config writes, and Windows EPERM resilience all landed. Team membership persists across model fallback switches.

Runtime-Fallback and Windows Fixes

Empty session histories get a synthetic continuation instead of failing silently. More provider quota error patterns are recognized, and OpenAI server_error is retryable again. On Windows, Git Bash and MSYS2 detection runs before PowerShell checks, WSL binary paths resolve correctly in doctor, and powershell syntax fallback works in non-interactive shells.

Bug Fixes Worth Calling Out

  • Hyperplan no longer fires on .hpp C++ header paths. (#4215)
  • Slash-commands inject their content exactly once, removing duplicate noise. (#3724)
  • Todo-continuation stops looping after all todos are complete. (#4013)
  • tool.definition handler is now wired so todo-description-override actually fires. (#3705)
  • Skill MCP reloads no longer kill active skill sessions. (#4099)
  • ${CLAUDE_PLUGIN_ROOT} is now resolved correctly in plugin commands.

Pre-Publish Review Catches

A comprehensive pre-publish review caught and fixed 16 blockers before this release shipped. initI18n() was missing from production startup. The notepad-write-guard was inert and is now activated and extended to .omo/notepads. The .omo path migration for start-work plan affinity was incomplete. The multimodal-looker prompt was out of sync with the runtime tool allowlist. Per-agent skill restrictions were not enforced at delegate-task time. The model-core OpenAI server_error retryable pattern had regressed during package extraction. The gate worked.

Breaking Changes

None. This is a backward-compatible minor release.

Upgrade

:::bash
bun i -g oh-my-opencode@4.3.0  # or npm

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.

Commit Summary

  • f313eb1a docs: add [Unreleased] section and [#4225] known issue
  • 11c3da75 fix(default-mode,multimodal-looker,delegate-task): preserve user-expected behavior
  • 7cce0ad2 fix(notepad-guard,start-work): wire dispatch and match .omo paths
  • 3f44b45f feat(i18n): wire initI18n into production plugin startup
  • 9c9e9885 fix(model-core): restore OpenAI server_error retryable patterns (regression from package extraction)
  • 9624914c test(disabled-providers): drop logger mock to fix global mock-module leakage
  • beed9e89 @shipped-it has signed the CLA in code-yeongyu/oh-my-openagent#4253
  • f1bf61ef fix: resolve duplicate ANALYZE_MESSAGE/ANALYZE_PATTERN identifiers in keyword-detector constants
  • 8a5811bf chore(comment-checker): drop dead apply-patch-edits re-export shim
  • 7c66aae0 refactor(rules-engine): centralize rule constants and AGENTS.md walk-up
  • edaa95fe refactor(model-core): host snapshot fetcher, suggestion parser, and context-limit resolver
  • 4ea76365 refactor(packages): extract hashline-core package
  • f29411a6 Merge pull request [#4235] from code-yeongyu/fix/subagent-timeout-active-output
  • dbfde0b0 fix(background-agent): ignore metadata stream output
  • 282010f9 fix(background-agent): gate stale timeout on abort success
  • 6d15ab86 fix(background-agent): fail cancellation when abort fails
  • bd1a6e3d fix(background-agent): forward session stream activity
  • 53cabfe4 Merge pull request [#3035] from code-yeongyu/fix/issue-2697-v2
  • 90c38d16 Merge remote-tracking branch 'origin/dev' into fix/subagent-timeout-active-output
  • 0bf8a9df fix(background-agent): fail abort on SDK errors
  • a562d536 fix: strip mcp_ prefix from tool names before dispatch
  • b68af25e fix(background-agent): track session.next activity
  • 6c0252fa Merge pull request [#3742] from mrosnerr/fix/schema-preserve-custom-agent-overrides
  • 6e1e01eb Merge pull request [#4219] from sjawhar/fix/skill-discovery-opencode-config
  • baa07dc9 Merge pull request [#4232] from MoerAI/fix/hyperplan-hpp-file-extension
  • 61b812ff fix(keyword-detector): stop hyperplan firing on '.hpp' C++ header paths (fixes [#4215])
  • 94d6d5b4 Merge pull request [#4231] from code-yeongyu/fix/post-4228-test-and-session-gone
  • 0feb1250 fix(background-agent): preserve missed polls on lookup errors
  • 98d475f9 test(agent): align remapper fallback display name
  • 7e8a61ae Merge pull request [#2307] from SwiggitySwerve/feat/prometheus-spec-awareness
  • b2971a6a Merge pull request [#2827] from z-traveler/feat/per-agent-skill-filtering
  • a7af82a8 Merge pull request [#4230] from code-yeongyu/fix/post-merge-debugging-cleanup-20260521
  • 3d402644 Merge pull request [#4228] from code-yeongyu/fix/delegate-stale-activity
  • deb13d8e Merge pull request [#3241] from cpkt9762/fix/configurable-task-cleanup-delay
  • 4b6877cb Merge pull request [#3294] from kilhyeonjun/fix/doctor-custom-provider-regression
  • d78ebc12 Merge pull request [#3370] from Zireael/fix/git-bash-shell-detection-on-windows
  • 6678c2ae Merge pull request [#3884] from leeyazhou/i18n
  • c5f8fd40 Merge pull request [#4031] from PeterPonyu/feat/config-disabled-providers
  • e4a60b8c Merge pull request [#4048] from PeterPonyu/feat/doctor-check-tui-plugin
  • 735b4d29 Merge pull request [#4070] from PeterPonyu/fix/4036-prompt-shield-system-directive-marker
  • 45e5d5dd Merge pull request [#4071] from PeterPonyu/fix/4027-role-coordinator-subagent-selection
  • d7d023bf Merge pull request [#4072] from PeterPonyu/fix/3645-runtime-fallback-git-silent-fail
  • 689ad997 Merge pull request [#4079] from PeterPonyu/refactor/3694-extract-analyze-constants
  • c5b1bff3 Merge pull request [#4080] from PeterPonyu/docs/3469-mcp-list-plugin-vs-native
  • 9cca6848 Merge pull request [#4081] from PeterPonyu/feat/4004-agent-display-name-i18n
  • acedacc5 Merge pull request [#4084] from pizzav-xyz/feature/keyword-detector-enabled-expansions
  • ba5bc0ef Merge pull request [#4092] from code-yeongyu/fix/status-timeout-hang
  • a7401a34 Merge pull request [#4157] from ririnto/docs/config-reference-alignment
  • 323e53f3 Merge pull request [#4181] from devswha/docs/add-vibetip-docs-link
  • b40426ca Merge pull request [#4190] from herjarsa/feat/default-mode
  • d5029002 Merge pull request [#4221] from heunghingwan/feat/plan-format-validator
  • e4049b7a Merge pull request [#4222] from andomeder/wip/pr1-skip-disconnected-explicit-provider-fallbacks
  • bd553962 fix(look-at): avoid empty stable idle completion
  • bd614793 Merge pull request [#4227] from code-yeongyu/fix/post-4106-cleanup-20260521
  • 95291fa4 chore(evidence): refresh package layering refactor notes
  • fc0f4cc9 chore(model-core): remove unused generated snapshot (DI strategy makes it dead)
  • f6a2ff35 test(coupling-audit): allowlist dual-runtime spawn shims
  • 2f26f78f chore(evidence): backfill PASS sentinels in empty evidence files
  • 017f05dd refactor(packages/model-core): eliminate src/ back-imports via dependency injection
  • e15461fe refactor(model-core): inject bundled capabilities snapshot from harness
  • 2462d7af refactor(model-core): remove src back-imports via core utilities and adapter
  • a089d4a5 docs: update AGENTS.md + ROADMAP.md for package layering refactor
  • 27e43457 docs: update rules-core → rules-engine references
  • 4bbf1d93 refactor(packages): rename rules-core to rules-engine
  • 7c7aa281 refactor(packages): extract agents-md-core package
  • 2748009f refactor(packages): extract model-core package
  • f7ceb03e refactor(packages): extract boulder-state package
  • 7028c1f4 refactor(packages): extract comment-checker-core package
  • 3b303e79 refactor(packages): extract ast-grep-core from ast-grep-mcp
  • a5c1d710 refactor(packages): extract utils package
  • 6e6f300c fix(background-agent): defer stale cancel on activity lookup errors
  • 036e04c1 fix(look-at): allow stable idle after sync prompt
  • 98d760a5 test(agent): align remapper display assertion
  • 927cc84f fix(background-agent): refresh stale checks from session activity
  • 8979e198 Merge pull request [#4226] from code-yeongyu/fix/background-notification-active-turn-queue
  • 0ad4d974 fix(background-agent): preserve parent activity across idle events
  • ced36bff refactor: split prompt async gate modules
  • a8201726 fix(background-agent): defer parent wakes during active turns
  • 8b526124 Merge pull request [#4194] from MoerAI/fix/lsp-windows-cli-path-separator
  • 9bd2a9d7 fix(runtime-fallback): fall back to synthetic continuation when session messages are empty (#3645)
  • 20ba83e1 test(mcp): remove stale lsp exists import
  • ed6e9955 fix(mcp): normalize path separators in LSP/ast-grep cli candidate detection (fixes [#4151])
  • 860c663c fix-up(#4027): narrow coordinator guard to registry hard-reject set
  • 7af3007e fix(team-mode): reject coordinator agents as subagent targets (#4027)
  • 97910193 fix(prometheus-md-only): replace SYSTEM DIRECTIVE marker with XML tag in external prompts (#4036)
  • 5a965fb4 fix(background-agent): skip disconnected explicit-provider fallbacks
  • cfe29168 Fix ambiguous FN. notation in Final Wave label instructions
  • fcb96841 @heunghingwan has signed the CLA in code-yeongyu/oh-my-openagent#4221
  • 73b5a7eb Add plan format validator hook to detect malformed task labels
  • a6e4691f fix: remove duplicate local isRecord declaration (conflicts with import)
  • 9c4ae269 fix(skill-discovery): load native OpenCode skills in task delegation
  • 97c73b41 Merge pull request [#3147] from EZotoff/fix/notepad-directive-scope
  • db4c9f49 Merge pull request [#3316] from ahuangsnail/fix/max-output-tokens-zero-fallback
  • 821ee92c Merge pull request [#2965] from sjawhar/fix/chat-message-session-cache
  • 5b72411b Merge pull request [#3045] from haimingZZ/fix/gpt54-junior-edit-tool-haimingzz
  • d7dbe7cd Merge pull request [#2988] from odedindi/fix/add-server-export
  • abcc46f4 fix: update pollSessionUntilIdle -> waitForLookAtSessionResult import
  • 2a4f5f28 Merge pull request [#2958] from kui123456789/fix/context-injector-prt-prefix
  • 70da8ad6 Merge pull request [#3600] from hackerh3/hackerh3/start-work-session-affinity
  • 3dba5527 Merge pull request [#2991] from GreenPi290/fix/doctor-wsl-binary-detection
  • f5de4bf7 Merge pull request [#3498] from Disaster-Terminator/fix/task-id-prompt-surface
  • abf79cd8 Merge pull request [#3499] from Netzhangheng/fix/windows-auth-interceptor-binding
  • ace15a6a Merge pull request [#3785] from Biemmmmm/fix/resolve-plugin-root-in-commands
  • d0719ff7 Merge pull request [#3875] from jollyxenon/fix/3846-opencode-config-dir-additive
  • 6dcb2afd Merge pull request [#3838] from NICxKMS/fix/team-mode-windows-atomic-write
  • b18963b0 Merge pull request [#3868] from MoerAI/fix/openai-server-error-retryable
  • 2185babd Merge pull request [#3936] from wjiuxing/fix/flaky-spawner-test-polling
  • cad63c97 Merge pull request [#4052] from PeterPonyu/fix/3505-attach-retry-until-session-ready
  • 7651c856 Merge pull request [#3944] from survivor998/fix/ultraworker-display-name-zwsp
  • 10ad8d87 Merge pull request [#4050] from PeterPonyu/fix/3822-doctor-plugin-version-detection
  • 0e49767a Merge pull request [#4026] from dihak/fix/graceful-shutdown-exit
  • e824115a Merge pull request [#4063] from PeterPonyu/fix/3963-server-url-port-zero
  • 467aa13e Merge pull request [#4064] from PeterPonyu/fix/3923-team-error-propagation
  • cb124f75 Merge pull request [#4065] from PeterPonyu/fix/3987-team-create-hard-reject-validation
  • a1f03c84 Merge pull request [#4066] from PeterPonyu/fix/2887-filter-terminal-probe-replies
  • 6637a184 Merge pull request [#4067] from PeterPonyu/fix/3898-fallback-preserve-team-context
  • b76e8d2e Merge pull request [#4077] from PeterPonyu/fix/4013-todo-continuation-enforcer-loop
  • 5eabeb80 Merge pull request [#4082] from PeterPonyu/fix/3685-notepad-no-write-fallback
  • 85d03298 Merge pull request [#4098] from sjawhar/feat/look-at-async
  • aa3187bf Merge pull request [#4180] from JacobZyy/fix/plugin-hooks-merge
  • 343d9ed2 Merge pull request [#4099] from sjawhar/fix/mcp-reload-survival
  • 7a5b8d83 Merge pull request [#4100] from sjawhar/fix/tmux-isolated-close-no-layout
  • 12ed091e Merge pull request [#4101] from sjawhar/fix/modalities-object-shape
  • aa5eeaf8 Merge pull request [#4102] from sjawhar/fix/skill-directory-param
  • 3ee0209a Merge pull request [#4113] from PeterPonyu/fix/3937-runtime-fallback-quota-patterns
  • f35bb956 Merge pull request [#4114] from PeterPonyu/fix/3607-detect-shell-windows-msystem
  • c6d754d3 Merge pull request [#4115] from PeterPonyu/fix/3726-glob-grep-broken-symlinks
  • 8276eb6c Merge pull request [#4121] from mguttmann/fix-4119
  • 33f121b1 fix: add PATH to restricted hook env, protect HOME/CLAUDE_PROJECT_DIR from allowlist override, reset plugin hooks state in tests
  • 3e9c3f8a Merge pull request [#4146] from LYY/fix/skill-shortname-fallback
  • 2fd62714 Merge remote-tracking branch 'origin/dev' into dev
  • 791825fc Merge pull request [#4153] from MoerAI/fix/fallback-model-string-guard
  • e2469657 Merge pull request [#4154] from MoerAI/fix/todo-description-override-fires
  • b463acda Merge pull request [#4171] from MoerAI/fix/multimodal-looker-tool-usage-guidance
  • eea27d6f fix(mcp): resolve local mcp runtimes
  • 37be0d56 Merge pull request [#4174] from MoerAI/fix/cli-setup-alias-for-install
  • 0a20844b fix: address PR [#4180] review - security, typing, and test coverage
  • fd6a7aed Merge pull request [#4176] from jangByeongHui/fix/skill-mcp-env-allowlist-bypass-3995
  • 1e42c610 fix(todo-continuation): normalize prompt agent
  • 32f0e1e0 Merge pull request [#4186] from lang-911/feat/grok-reasoning-effort
  • 5a695505 Merge pull request [#4206] from jeongjin0/fix/session-ready-background-tasks
  • c85d2f9b fix(model-error-classifier): mark OpenAI server_error patterns as retryable (fixes [#3799])
  • 69e7ab47 Merge pull request [#4083] from PeterPonyu/fix/3724-slash-command-content-duplicated
  • 46118561 Merge pull request [#4172] from MoerAI/fix/team-mode-base-dir-chmod-eperm
  • 60a23a55 fix(notification): suppress ready alerts during background tasks
  • 3cb6785d fix(ralph-loop): minimal continuation prompt for default_mode
  • dc2e082a fix(default-mode): skip ultrawork system prompt when ralph_loop is also enabled
  • 2f1380f5 refactor(default-mode): inject ultrawork via system prompt instead of visible text
  • e5463e2d feat(default-mode): auto-activate ultrawork and ralph loop without commands
  • 696682e9 fix(chat-message): refresh stale session-agent cache from explicit input.agent
  • 33c8bcd8 fix(look-at): address Oracle review findings on async session poller
  • 824cd1a8 fix(skill-mcp): allow MCP manager to accept connections after disconnectAll
  • e8a7e2a9 fix(tmux): skip layout enforcement when closing isolated container pane
  • 94e71936 fix(model-capabilities): handle object-shaped modalities in readModalityKeys
  • d2d15413 fix(skill): pass directory to getAllSkills and fix async test timing
  • 342954ca fix(sisyphus-junior-notepad): scope plan directive to delegated workers
  • 8b097f2c fix(model-heuristics): register Grok family with reasoningEffort support
  • 9b151a25 fix(delegate-task): address Oracle review on PR [#4121] — preserve explicit-null reject + rewrite continuation test
  • 2f16a7da fix(delegate-task): default run_in_background and load_skills instead of throwing (fixes [#4119])
  • c5cc720d docs(readme): add docs site badge linking to omo.vibetip.help/docs
  • 68f9cd25 Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • 9dc9d779 feat(i18n): add toast i18n with en/zh locale and plugin config support
  • 5e208422 fix(hooks): always persist plugin hook config state, even when empty
  • 4d105d05 fix(hooks): merge marketplace plugin hooksConfigs into claude-code-hooks at config time
  • 22aadd68 fix(skill-mcp-manager): trust explicit skill MCP env vars (#3995)
  • 554a6aab fix(cli): add 'setup' as an alias for the install command (fixes [#4112])
  • 688d7395 fix(team-mode): swallow EPERM/ENOTSUP/EINVAL from chmod on base dir to keep init alive (fixes [#4023])
  • 81ce5127 fix(agents): declare multimodal-looker tool allowlist in prompt to prevent death loop on small VL models (fixes [#4116])
  • 8b40d0af docs: align config reference with implementation
  • ed44466f fix(plugin): wire tool.definition handler so todo-description-override actually fires (fixes [#3705])
  • ae0c106e fix(shared,delegate-task,claude-code-agent-loader): guard model parsers against non-string input (fixes [#4145])
  • 47fced74 fix: address review findings - git-master identity check, test fixtures, regression strength
  • 77997d8e fix(skill-loader): support unambiguous short skill names
  • 08869369 feat: filter agent-restricted skills from prompts and tool description
  • 98bd6a8e Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • 669e7525 feat(i18n): add toast i18n with en/zh locale and plugin config support
  • 8bba7357 fix(glob,grep): keep exit-code gate at >1 — --no-messages alone is enough
  • a8ccffdd style(runtime-fallback): add explicit optional chain on .replace per review
  • e195a472 fix(glob,grep): tolerate broken symlinks and non-fatal I/O warnings
  • 2bd79460 fix(non-interactive-env): use powershell syntax on Windows regardless of SHELL/MSYSTEM
  • b2f0d423 test(runtime-fallback): tighten quota regression fixtures so new paths actually fire
  • f357ed03 fix(runtime-fallback): classify more provider quota error names
  • 6c54123e fix(slash-commands): inject command content exactly once (#3724)
  • 75ba7080 fix(team-mode): sync atomic writes through writable handle
  • ec371237 Merge remote-tracking branch 'origin/dev' into fix/task-id-prompt-surface
  • a77312c3 test(atlas): exclude isSessionActive timeout from retry timer assertion
  • 36468b11 fix(shared): add timeout to isSessionActive to prevent infinite hang
  • 572c3c24 fix(notepad-guard): refuse Write tool for .sisyphus/notepads files (#3685)
  • 7bc92bcd feat(agents): support per-agent displayName for i18n (#4004)
  • c5067d1e docs(mcp): clarify plugin-injected MCPs do not appear in opencode mcp list (#3469)
  • 57ab749b refactor(keyword-detector): consolidate analyze pattern/message into analyze/default and document delegate_task params (#3694)
  • 5e4d45a3 fix(todo-continuation-enforcer): stop looping after all todos complete (#4013)
  • b516d5d4 fix(team-mode): preserve team membership across model fallback (#3898)
  • e25f3ca7 fix(tmux-subagent): drain terminal probe replies during delegated pane startup (#2887)
  • 4c360054 fix(team-mode): reject team_create from hard-reject agents (#3987)
  • 2bf50382 fix(team-mode): surface member error to main agent (#3923)
  • ced95c4b fix(team-mode): surface port-0 fallback and silent layout skip (#3963)
  • f152569e feat(keyword-detector): add enabled_expansions config for allowlist control
  • 58681f6d test(tmux-subagent): assert waitForSessionReady gates executeActions
  • cc88bedd fix(doctor): emit warning when tui.json is registered but opencode.json is not
  • 0465562f fix(tmux-subagent): wait for session readiness before spawning attach pane
  • 78ae2402 fix(doctor): detect plugin version via require.resolve fallback
  • 08959d63 feat(doctor): warn when oh-my-openagent/tui is missing from tui.json
  • e8a64088 feat(config): add disabled_providers schema + helper
  • ec49d6af fix(process-cleanup): call process.exit() after SIGTERM cleanup
  • a960f44a Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • fd4b3bb3 feat(i18n): add toast i18n with en/zh locale and plugin config support
  • 099e126b Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • 6ffea1bc feat(i18n): add toast i18n with en/zh locale and plugin config support
  • 771242ea fix(start-work): prefer nested session plan refs
  • d22bd71d fix(start-work): narrow existing state before resume
  • 063ba466 fix(start-work): prefer current session plan
  • b430524a feat(start-work): add session plan affinity lookup
  • cd39f885 fix(display): lowercase 'ultraworker' to avoid ZWSP rendering glitch in OpenCode TUI
  • a4fde034 fix: replace brittle setTimeout(50) with polling waitForCondition in spawner tests
  • 6fd31a99 feat(i18n): add toast i18n with en/zh locale and plugin config support
  • ecd9d2a0 fix(test): stabilize opencode command dir assertions across environments
  • 66a1a9ad fix(test): address review follow-ups for config dir layering
  • 8d5dd908 fix(plugin-config): merge user config from default and custom opencode dirs
  • 850dc3a4 fix(agent-loader): load opencode global agents from both config roots
  • 71025dae fix(shared): add additive opencode config directory discovery
  • 87ad159b fix(prompt): prefer edit tool for gpt-5.4 juniors
  • a26117d9 fix: resolve ${CLAUDE_PLUGIN_ROOT} in plugin commands, agents, and skills
  • bcc554bb fix(schema): preserve custom agent overrides via catchall
  • fd0e6e21 Merge remote-tracking branch 'origin/dev' into fix/git-bash-shell-detection-on-windows
  • 0996d68d Fix interceptor auth injection binding
  • ee500ad7 Fix interceptor auth injection on Windows
  • ff9c3e0e test(atlas): assert task_id guidance in reminder
  • 64a29118 fix(prompts): prefer task_id in continuation guidance
  • 998dbde2 fix: detect Git Bash/WSL/MSYS2 shell on Windows before PSModulePath
  • 6c3308aa fix: treat zero limit.output as unknown to enable fallback to bundled snapshot
  • 02d64e44 test(doctor): cover custom provider config regression
  • 14c25cbb feat(background-task): make taskCleanupDelayMs configurable
  • cb53cba8 merge: resolve conflicts with dev branch
  • c507ce7c fix(doctor): improve opencode binary detection for WSL
  • 28b0a757 fix(package): add ./server export for OpenCode-Go plugin compatibility
  • 607fce17 fix(context-injector): prefix synthetic part ids with prt_
  • d66b6bcb fix(prometheus): complete OpenSpec command reference, fix Gemini self-containment, strengthen tests
  • 69f4fed0 fix(prometheus): remove BMAD active detection, add missing spec-awareness tests
  • 8ff41232 feat(prometheus): add spec-driven development framework awareness

Thank you to 36 community contributors:

  • @SwiggitySwerve:
  • feat(prometheus): add spec-driven development framework awareness
  • fix(prometheus): remove BMAD active detection, add missing spec-awareness tests
  • fix(prometheus): complete OpenSpec command reference, fix Gemini self-containment, strengthen tests
  • merge: resolve conflicts with dev branch
  • @kui123456789:
  • fix(context-injector): prefix synthetic part ids with prt_
  • @odedindi:
  • fix(package): add ./server export for OpenCode-Go plugin compatibility
  • @GreenPi290:
  • fix(doctor): improve opencode binary detection for WSL
  • @cpkt9762:
  • feat(background-task): make taskCleanupDelayMs configurable
  • @kilhyeonjun:
  • test(doctor): cover custom provider config regression
  • @ahuangsnail:
  • fix: treat zero limit.output as unknown to enable fallback to bundled snapshot
  • @Zireael:
  • fix: detect Git Bash/WSL/MSYS2 shell on Windows before PSModulePath
  • Merge remote-tracking branch 'origin/dev' into fix/git-bash-shell-detection-on-windows
  • @Disaster-Terminator:
  • fix(prompts): prefer task_id in continuation guidance
  • test(atlas): assert task_id guidance in reminder
  • Merge remote-tracking branch 'origin/dev' into fix/task-id-prompt-surface
  • @Netzhangheng:
  • Fix interceptor auth injection on Windows
  • Fix interceptor auth injection binding
  • @mrosnerr:
  • fix(schema): preserve custom agent overrides via catchall
  • @Biemmmmm:
  • fix: resolve ${CLAUDE_PLUGIN_ROOT} in plugin commands, agents, and skills
  • @haimingZZ:
  • fix(prompt): prefer edit tool for gpt-5.4 juniors
  • @jollyxenon:
  • fix(shared): add additive opencode config directory discovery
  • fix(agent-loader): load opencode global agents from both config roots
  • fix(plugin-config): merge user config from default and custom opencode dirs
  • fix(test): address review follow-ups for config dir layering
  • fix(test): stabilize opencode command dir assertions across environments
  • @leeyazhou:
  • feat(i18n): add toast i18n with en/zh locale and plugin config support
  • feat(i18n): add toast i18n with en/zh locale and plugin config support
  • Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • feat(i18n): add toast i18n with en/zh locale and plugin config support
  • Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • feat(i18n): add toast i18n with en/zh locale and plugin config support
  • Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • feat(i18n): add toast i18n with en/zh locale and plugin config support
  • Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
  • @wjiuxing:
  • fix: replace brittle setTimeout(50) with polling waitForCondition in spawner tests
  • @survivor998:
  • fix(display): lowercase 'ultraworker' to avoid ZWSP rendering glitch in OpenCode TUI
  • @hackerh3:
  • feat(start-work): add session plan affinity lookup
  • fix(start-work): prefer current session plan
  • fix(start-work): narrow existing state before resume
  • fix(start-work): prefer nested session plan refs
  • @dihak:
  • fix(process-cleanup): call process.exit() after SIGTERM cleanup
  • @PeterPonyu:
  • feat(config): add disabled_providers schema + helper
  • feat(doctor): warn when oh-my-openagent/tui is missing from tui.json
  • fix(doctor): detect plugin version via require.resolve fallback
  • fix(tmux-subagent): wait for session readiness before spawning attach pane
  • fix(doctor): emit warning when tui.json is registered but opencode.json is not
  • test(tmux-subagent): assert waitForSessionReady gates executeActions
  • fix(team-mode): surface port-0 fallback and silent layout skip (#3963)
  • fix(team-mode): surface member error to main agent (#3923)
  • fix(team-mode): reject team_create from hard-reject agents (#3987)
  • fix(tmux-subagent): drain terminal probe replies during delegated pane startup (#2887)
  • fix(team-mode): preserve team membership across model fallback (#3898)
  • fix(todo-continuation-enforcer): stop looping after all todos complete (#4013)
  • refactor(keyword-detector): consolidate analyze pattern/message into analyze/default and document delegate_task params (#3694)
  • docs(mcp): clarify plugin-injected MCPs do not appear in opencode mcp list (#3469)
  • feat(agents): support per-agent displayName for i18n (#4004)
  • fix(notepad-guard): refuse Write tool for .sisyphus/notepads files (#3685)
  • fix(slash-commands): inject command content exactly once (#3724)
  • fix(runtime-fallback): classify more provider quota error names
  • test(runtime-fallback): tighten quota regression fixtures so new paths actually fire
  • fix(non-interactive-env): use powershell syntax on Windows regardless of SHELL/MSYSTEM
  • fix(glob,grep): tolerate broken symlinks and non-fatal I/O warnings
  • style(runtime-fallback): add explicit optional chain on .replace per review
  • fix(glob,grep): keep exit-code gate at >1 — --no-messages alone is enough
  • fix(prometheus-md-only): replace SYSTEM DIRECTIVE marker with XML tag in external prompts (#4036)
  • fix(team-mode): reject coordinator agents as subagent targets (#4027)
  • fix-up(#4027): narrow coordinator guard to registry hard-reject set
  • fix(runtime-fallback): fall back to synthetic continuation when session messages are empty (#3645)
  • @pizzav-xyz:
  • feat(keyword-detector): add enabled_expansions config for allowlist control
  • @NICxKMS:
  • fix(team-mode): sync atomic writes through writable handle
  • @z-traveler:
  • feat: filter agent-restricted skills from prompts and tool description
  • @LYY:
  • fix(skill-loader): support unambiguous short skill names
  • fix: address review findings - git-master identity check, test fixtures, regression strength
  • @MoerAI:
  • fix(shared,delegate-task,claude-code-agent-loader): guard model parsers against non-string input (fixes [#4145])
  • fix(plugin): wire tool.definition handler so todo-description-override actually fires (fixes [#3705])
  • fix(agents): declare multimodal-looker tool allowlist in prompt to prevent death loop on small VL models (fixes [#4116])
  • fix(team-mode): swallow EPERM/ENOTSUP/EINVAL from chmod on base dir to keep init alive (fixes [#4023])
  • fix(cli): add 'setup' as an alias for the install command (fixes [#4112])
  • fix(model-error-classifier): mark OpenAI server_error patterns as retryable (fixes [#3799])
  • fix(mcp): normalize path separators in LSP/ast-grep cli candidate detection (fixes [#4151])
  • fix(keyword-detector): stop hyperplan firing on '.hpp' C++ header paths (fixes [#4215])
  • @ririnto:
  • docs: align config reference with implementation
  • @jangByeongHui:
  • fix(skill-mcp-manager): trust explicit skill MCP env vars (#3995)
  • @JacobZyy:
  • fix(hooks): merge marketplace plugin hooksConfigs into claude-code-hooks at config time
  • fix(hooks): always persist plugin hook config state, even when empty
  • fix: address PR [#4180] review - security, typing, and test coverage
  • fix: add PATH to restricted hook env, protect HOME/CLAUDE_PROJECT_DIR from allowlist override, reset plugin hooks state in tests
  • @devswha:
  • docs(readme): add docs site badge linking to omo.vibetip.help/docs
  • @lang-911:
  • fix(model-heuristics): register Grok family with reasoningEffort support
  • @EZotoff:
  • fix(sisyphus-junior-notepad): scope plan directive to delegated workers
  • @sjawhar:
  • fix(skill): pass directory to getAllSkills and fix async test timing
  • fix(model-capabilities): handle object-shaped modalities in readModalityKeys
  • fix(tmux): skip layout enforcement when closing isolated container pane
  • fix(skill-mcp): allow MCP manager to accept connections after disconnectAll
  • fix(look-at): address Oracle review findings on async session poller
  • fix(chat-message): refresh stale session-agent cache from explicit input.agent
  • fix(skill-discovery): load native OpenCode skills in task delegation
  • @herjarsa:
  • feat(default-mode): auto-activate ultrawork and ralph loop without commands
  • refactor(default-mode): inject ultrawork via system prompt instead of visible text
  • fix(default-mode): skip ultrawork system prompt when ralph_loop is also enabled
  • fix(ralph-loop): minimal continuation prompt for default_mode
  • @jeongjin0:
  • fix(notification): suppress ready alerts during background tasks
  • @heunghingwan:
  • Add plan format validator hook to detect malformed task labels
  • Fix ambiguous FN. notation in Final Wave label instructions
  • @andomeder:
  • fix(background-agent): skip disconnected explicit-provider fallbacks
Source: README.md, updated 2026-05-21