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
.hppC++ 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.definitionhandler is now wired sotodo-description-overrideactually 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
bun i -g oh-my-opencode@4.3.0 # or npmMinor 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
- f313eb1 docs: add [Unreleased] section and #4225 known issue
- 11c3da7 fix(default-mode,multimodal-looker,delegate-task): preserve user-expected behavior
- 7cce0ad fix(notepad-guard,start-work): wire dispatch and match .omo paths
- 3f44b45 feat(i18n): wire initI18n into production plugin startup
- 9c9e988 fix(model-core): restore OpenAI server_error retryable patterns (regression from package extraction)
- 9624914 test(disabled-providers): drop logger mock to fix global mock-module leakage
- beed9e8 @shipped-it has signed the CLA in #4253
- f1bf61e fix: resolve duplicate ANALYZE_MESSAGE/ANALYZE_PATTERN identifiers in keyword-detector constants
- 8a5811b chore(comment-checker): drop dead apply-patch-edits re-export shim
- 7c66aae refactor(rules-engine): centralize rule constants and AGENTS.md walk-up
- edaa95f refactor(model-core): host snapshot fetcher, suggestion parser, and context-limit resolver
- 4ea7636 refactor(packages): extract hashline-core package
- f29411a Merge pull request #4235 from code-yeongyu/fix/subagent-timeout-active-output
- dbfde0b fix(background-agent): ignore metadata stream output
- 282010f fix(background-agent): gate stale timeout on abort success
- 6d15ab8 fix(background-agent): fail cancellation when abort fails
- bd1a6e3 fix(background-agent): forward session stream activity
- 53cabfe Merge pull request #3035 from code-yeongyu/fix/issue-2697-v2
- 90c38d1 Merge remote-tracking branch 'origin/dev' into fix/subagent-timeout-active-output
- 0bf8a9d fix(background-agent): fail abort on SDK errors
- a562d53 fix: strip mcp_ prefix from tool names before dispatch
- b68af25 fix(background-agent): track session.next activity
- 6c0252f Merge pull request #3742 from mrosnerr/fix/schema-preserve-custom-agent-overrides
- 6e1e01e Merge pull request #4219 from sjawhar/fix/skill-discovery-opencode-config
- baa07dc Merge pull request #4232 from MoerAI/fix/hyperplan-hpp-file-extension
- 61b812f fix(keyword-detector): stop hyperplan firing on '.hpp' C++ header paths (fixes #4215)
- 94d6d5b Merge pull request #4231 from code-yeongyu/fix/post-4228-test-and-session-gone
- 0feb125 fix(background-agent): preserve missed polls on lookup errors
- 98d475f test(agent): align remapper fallback display name
- 7e8a61a Merge pull request #2307 from SwiggitySwerve/feat/prometheus-spec-awareness
- b2971a6 Merge pull request #2827 from z-traveler/feat/per-agent-skill-filtering
- a7af82a Merge pull request #4230 from code-yeongyu/fix/post-merge-debugging-cleanup-20260521
- 3d40264 Merge pull request #4228 from code-yeongyu/fix/delegate-stale-activity
- deb13d8 Merge pull request #3241 from cpkt9762/fix/configurable-task-cleanup-delay
- 4b6877c Merge pull request #3294 from kilhyeonjun/fix/doctor-custom-provider-regression
- d78ebc1 Merge pull request #3370 from Zireael/fix/git-bash-shell-detection-on-windows
- 6678c2a Merge pull request #3884 from leeyazhou/i18n
- c5f8fd4 Merge pull request #4031 from PeterPonyu/feat/config-disabled-providers
- e4a60b8 Merge pull request #4048 from PeterPonyu/feat/doctor-check-tui-plugin
- 735b4d2 Merge pull request #4070 from PeterPonyu/fix/4036-prompt-shield-system-directive-marker
- 45e5d5d Merge pull request #4071 from PeterPonyu/fix/4027-role-coordinator-subagent-selection
- d7d023b Merge pull request #4072 from PeterPonyu/fix/3645-runtime-fallback-git-silent-fail
- 689ad99 Merge pull request #4079 from PeterPonyu/refactor/3694-extract-analyze-constants
- c5b1bff Merge pull request #4080 from PeterPonyu/docs/3469-mcp-list-plugin-vs-native
- 9cca684 Merge pull request #4081 from PeterPonyu/feat/4004-agent-display-name-i18n
- acedacc Merge pull request #4084 from pizzav-xyz/feature/keyword-detector-enabled-expansions
- ba5bc0e Merge pull request #4092 from code-yeongyu/fix/status-timeout-hang
- a7401a3 Merge pull request #4157 from ririnto/docs/config-reference-alignment
- 323e53f Merge pull request #4181 from devswha/docs/add-vibetip-docs-link
- b40426c Merge pull request #4190 from herjarsa/feat/default-mode
- d502900 Merge pull request #4221 from heunghingwan/feat/plan-format-validator
- e4049b7 Merge pull request #4222 from andomeder/wip/pr1-skip-disconnected-explicit-provider-fallbacks
- bd55396 fix(look-at): avoid empty stable idle completion
- bd61479 Merge pull request #4227 from code-yeongyu/fix/post-4106-cleanup-20260521
- 95291fa chore(evidence): refresh package layering refactor notes
- fc0f4cc chore(model-core): remove unused generated snapshot (DI strategy makes it dead)
- f6a2ff3 test(coupling-audit): allowlist dual-runtime spawn shims
- 2f26f78 chore(evidence): backfill PASS sentinels in empty evidence files
- 017f05d refactor(packages/model-core): eliminate src/ back-imports via dependency injection
- e15461f refactor(model-core): inject bundled capabilities snapshot from harness
- 2462d7a refactor(model-core): remove src back-imports via core utilities and adapter
- a089d4a docs: update AGENTS.md + ROADMAP.md for package layering refactor
- 27e4345 docs: update rules-core → rules-engine references
- 4bbf1d9 refactor(packages): rename rules-core to rules-engine
- 7c7aa28 refactor(packages): extract agents-md-core package
- 2748009 refactor(packages): extract model-core package
- f7ceb03 refactor(packages): extract boulder-state package
- 7028c1f refactor(packages): extract comment-checker-core package
- 3b303e7 refactor(packages): extract ast-grep-core from ast-grep-mcp
- a5c1d71 refactor(packages): extract utils package
- 6e6f300 fix(background-agent): defer stale cancel on activity lookup errors
- 036e04c fix(look-at): allow stable idle after sync prompt
- 98d760a test(agent): align remapper display assertion
- 927cc84 fix(background-agent): refresh stale checks from session activity
- 8979e19 Merge pull request #4226 from code-yeongyu/fix/background-notification-active-turn-queue
- 0ad4d97 fix(background-agent): preserve parent activity across idle events
- ced36bf refactor: split prompt async gate modules
- a820172 fix(background-agent): defer parent wakes during active turns
- 8b52612 Merge pull request #4194 from MoerAI/fix/lsp-windows-cli-path-separator
- 9bd2a9d fix(runtime-fallback): fall back to synthetic continuation when session messages are empty (#3645)
- 20ba83e test(mcp): remove stale lsp exists import
- ed6e995 fix(mcp): normalize path separators in LSP/ast-grep cli candidate detection (fixes #4151)
- 860c663 fix-up(#4027): narrow coordinator guard to registry hard-reject set
- 7af3007 fix(team-mode): reject coordinator agents as subagent targets (#4027)
- 9791019 fix(prometheus-md-only): replace SYSTEM DIRECTIVE marker with XML tag in external prompts (#4036)
- 5a965fb fix(background-agent): skip disconnected explicit-provider fallbacks
- cfe2916 Fix ambiguous FN. notation in Final Wave label instructions
- fcb9684 @heunghingwan has signed the CLA in #4221
- 73b5a7e Add plan format validator hook to detect malformed task labels
- a6e4691 fix: remove duplicate local isRecord declaration (conflicts with import)
- 9c4ae26 fix(skill-discovery): load native OpenCode skills in task delegation
- 97c73b4 Merge pull request #3147 from EZotoff/fix/notepad-directive-scope
- db4c9f4 Merge pull request #3316 from ahuangsnail/fix/max-output-tokens-zero-fallback
- 821ee92 Merge pull request #2965 from sjawhar/fix/chat-message-session-cache
- 5b72411 Merge pull request #3045 from haimingZZ/fix/gpt54-junior-edit-tool-haimingzz
- d7dbe7c Merge pull request #2988 from odedindi/fix/add-server-export
- abcc46f fix: update pollSessionUntilIdle -> waitForLookAtSessionResult import
- 2a4f5f2 Merge pull request #2958 from kui123456789/fix/context-injector-prt-prefix
- 70da8ad Merge pull request #3600 from hackerh3/hackerh3/start-work-session-affinity
- 3dba552 Merge pull request #2991 from GreenPi290/fix/doctor-wsl-binary-detection
- f5de4bf Merge pull request #3498 from Disaster-Terminator/fix/task-id-prompt-surface
- abf79cd Merge pull request #3499 from Netzhangheng/fix/windows-auth-interceptor-binding
- ace15a6 Merge pull request #3785 from Biemmmmm/fix/resolve-plugin-root-in-commands
- d0719ff Merge pull request #3875 from jollyxenon/fix/3846-opencode-config-dir-additive
- 6dcb2af Merge pull request #3838 from NICxKMS/fix/team-mode-windows-atomic-write
- b18963b Merge pull request #3868 from MoerAI/fix/openai-server-error-retryable
- 2185bab Merge pull request #3936 from wjiuxing/fix/flaky-spawner-test-polling
- cad63c9 Merge pull request #4052 from PeterPonyu/fix/3505-attach-retry-until-session-ready
- 7651c85 Merge pull request #3944 from survivor998/fix/ultraworker-display-name-zwsp
- 10ad8d8 Merge pull request #4050 from PeterPonyu/fix/3822-doctor-plugin-version-detection
- 0e49767 Merge pull request #4026 from dihak/fix/graceful-shutdown-exit
- e824115 Merge pull request #4063 from PeterPonyu/fix/3963-server-url-port-zero
- 467aa13 Merge pull request #4064 from PeterPonyu/fix/3923-team-error-propagation
- cb124f7 Merge pull request #4065 from PeterPonyu/fix/3987-team-create-hard-reject-validation
- a1f03c8 Merge pull request #4066 from PeterPonyu/fix/2887-filter-terminal-probe-replies
- 6637a18 Merge pull request #4067 from PeterPonyu/fix/3898-fallback-preserve-team-context
- b76e8d2 Merge pull request #4077 from PeterPonyu/fix/4013-todo-continuation-enforcer-loop
- 5eabeb8 Merge pull request #4082 from PeterPonyu/fix/3685-notepad-no-write-fallback
- 85d0329 Merge pull request #4098 from sjawhar/feat/look-at-async
- aa3187b Merge pull request #4180 from JacobZyy/fix/plugin-hooks-merge
- 343d9ed Merge pull request #4099 from sjawhar/fix/mcp-reload-survival
- 7a5b8d8 Merge pull request #4100 from sjawhar/fix/tmux-isolated-close-no-layout
- 12ed091 Merge pull request #4101 from sjawhar/fix/modalities-object-shape
- aa5eeaf Merge pull request #4102 from sjawhar/fix/skill-directory-param
- 3ee0209 Merge pull request #4113 from PeterPonyu/fix/3937-runtime-fallback-quota-patterns
- f35bb95 Merge pull request #4114 from PeterPonyu/fix/3607-detect-shell-windows-msystem
- c6d754d Merge pull request #4115 from PeterPonyu/fix/3726-glob-grep-broken-symlinks
- 8276eb6 Merge pull request #4121 from mguttmann/fix-4119
- 33f121b fix: add PATH to restricted hook env, protect HOME/CLAUDE_PROJECT_DIR from allowlist override, reset plugin hooks state in tests
- 3e9c3f8 Merge pull request #4146 from LYY/fix/skill-shortname-fallback
- 2fd6271 Merge remote-tracking branch 'origin/dev' into dev
- 791825f Merge pull request #4153 from MoerAI/fix/fallback-model-string-guard
- e246965 Merge pull request #4154 from MoerAI/fix/todo-description-override-fires
- b463acd Merge pull request #4171 from MoerAI/fix/multimodal-looker-tool-usage-guidance
- eea27d6 fix(mcp): resolve local mcp runtimes
- 37be0d5 Merge pull request #4174 from MoerAI/fix/cli-setup-alias-for-install
- 0a20844 fix: address PR #4180 review - security, typing, and test coverage
- fd6a7ae Merge pull request #4176 from jangByeongHui/fix/skill-mcp-env-allowlist-bypass-3995
- 1e42c61 fix(todo-continuation): normalize prompt agent
- 32f0e1e Merge pull request #4186 from lang-911/feat/grok-reasoning-effort
- 5a69550 Merge pull request #4206 from jeongjin0/fix/session-ready-background-tasks
- c85d2f9 fix(model-error-classifier): mark OpenAI server_error patterns as retryable (fixes #3799)
- 69e7ab4 Merge pull request #4083 from PeterPonyu/fix/3724-slash-command-content-duplicated
- 4611856 Merge pull request #4172 from MoerAI/fix/team-mode-base-dir-chmod-eperm
- 60a23a5 fix(notification): suppress ready alerts during background tasks
- 3cb6785 fix(ralph-loop): minimal continuation prompt for default_mode
- dc2e082 fix(default-mode): skip ultrawork system prompt when ralph_loop is also enabled
- 2f1380f refactor(default-mode): inject ultrawork via system prompt instead of visible text
- e5463e2 feat(default-mode): auto-activate ultrawork and ralph loop without commands
- 696682e fix(chat-message): refresh stale session-agent cache from explicit input.agent
- 33c8bcd fix(look-at): address Oracle review findings on async session poller
- 824cd1a fix(skill-mcp): allow MCP manager to accept connections after disconnectAll
- e8a7e2a fix(tmux): skip layout enforcement when closing isolated container pane
- 94e7193 fix(model-capabilities): handle object-shaped modalities in readModalityKeys
- d2d1541 fix(skill): pass directory to getAllSkills and fix async test timing
- 342954c fix(sisyphus-junior-notepad): scope plan directive to delegated workers
- 8b097f2 fix(model-heuristics): register Grok family with reasoningEffort support
- 9b151a2 fix(delegate-task): address Oracle review on PR #4121 — preserve explicit-null reject + rewrite continuation test
- 2f16a7d fix(delegate-task): default run_in_background and load_skills instead of throwing (fixes #4119)
- c5cc720 docs(readme): add docs site badge linking to omo.vibetip.help/docs
- 68f9cd2 Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
- 9dc9d77 feat(i18n): add toast i18n with en/zh locale and plugin config support
- 5e20842 fix(hooks): always persist plugin hook config state, even when empty
- 4d105d0 fix(hooks): merge marketplace plugin hooksConfigs into claude-code-hooks at config time
- 22aadd6 fix(skill-mcp-manager): trust explicit skill MCP env vars (#3995)
- 554a6aa fix(cli): add 'setup' as an alias for the install command (fixes #4112)
- 688d739 fix(team-mode): swallow EPERM/ENOTSUP/EINVAL from chmod on base dir to keep init alive (fixes #4023)
- 81ce512 fix(agents): declare multimodal-looker tool allowlist in prompt to prevent death loop on small VL models (fixes #4116)
- 8b40d0a docs: align config reference with implementation
- ed44466 fix(plugin): wire tool.definition handler so todo-description-override actually fires (fixes #3705)
- ae0c106 fix(shared,delegate-task,claude-code-agent-loader): guard model parsers against non-string input (fixes #4145)
- 47fced7 fix: address review findings - git-master identity check, test fixtures, regression strength
- 77997d8 fix(skill-loader): support unambiguous short skill names
- 0886936 feat: filter agent-restricted skills from prompts and tool description
- 98bd6a8 Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
- 669e752 feat(i18n): add toast i18n with en/zh locale and plugin config support
- 8bba735 fix(glob,grep): keep exit-code gate at >1 — --no-messages alone is enough
- a8ccffd style(runtime-fallback): add explicit optional chain on .replace per review
- e195a47 fix(glob,grep): tolerate broken symlinks and non-fatal I/O warnings
- 2bd7946 fix(non-interactive-env): use powershell syntax on Windows regardless of SHELL/MSYSTEM
- b2f0d42 test(runtime-fallback): tighten quota regression fixtures so new paths actually fire
- f357ed0 fix(runtime-fallback): classify more provider quota error names
- 6c54123 fix(slash-commands): inject command content exactly once (#3724)
- 75ba708 fix(team-mode): sync atomic writes through writable handle
- ec37123 Merge remote-tracking branch 'origin/dev' into fix/task-id-prompt-surface
- a77312c test(atlas): exclude isSessionActive timeout from retry timer assertion
- 36468b1 fix(shared): add timeout to isSessionActive to prevent infinite hang
- 572c3c2 fix(notepad-guard): refuse Write tool for .sisyphus/notepads files (#3685)
- 7bc92bc feat(agents): support per-agent displayName for i18n (#4004)
- c5067d1 docs(mcp): clarify plugin-injected MCPs do not appear in opencode mcp list (#3469)
- 57ab749 refactor(keyword-detector): consolidate analyze pattern/message into analyze/default and document delegate_task params (#3694)
- 5e4d45a fix(todo-continuation-enforcer): stop looping after all todos complete (#4013)
- b516d5d fix(team-mode): preserve team membership across model fallback (#3898)
- e25f3ca fix(tmux-subagent): drain terminal probe replies during delegated pane startup (#2887)
- 4c36005 fix(team-mode): reject team_create from hard-reject agents (#3987)
- 2bf5038 fix(team-mode): surface member error to main agent (#3923)
- ced95c4 fix(team-mode): surface port-0 fallback and silent layout skip (#3963)
- f152569 feat(keyword-detector): add enabled_expansions config for allowlist control
- 58681f6 test(tmux-subagent): assert waitForSessionReady gates executeActions
- cc88bed fix(doctor): emit warning when tui.json is registered but opencode.json is not
- 0465562 fix(tmux-subagent): wait for session readiness before spawning attach pane
- 78ae240 fix(doctor): detect plugin version via require.resolve fallback
- 08959d6 feat(doctor): warn when oh-my-openagent/tui is missing from tui.json
- e8a6408 feat(config): add disabled_providers schema + helper
- ec49d6a fix(process-cleanup): call process.exit() after SIGTERM cleanup
- a960f44 Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
- fd4b3bb feat(i18n): add toast i18n with en/zh locale and plugin config support
- 099e126 Merge branch 'i18n' of github.com:leeyazhou/oh-my-openagent into i18n
- 6ffea1b feat(i18n): add toast i18n with en/zh locale and plugin config support
- 771242e fix(start-work): prefer nested session plan refs
- d22bd71 fix(start-work): narrow existing state before resume
- 063ba46 fix(start-work): prefer current session plan
- b430524 feat(start-work): add session plan affinity lookup
- cd39f88 fix(display): lowercase 'ultraworker' to avoid ZWSP rendering glitch in OpenCode TUI
- a4fde03 fix: replace brittle setTimeout(50) with polling waitForCondition in spawner tests
- 6fd31a9 feat(i18n): add toast i18n with en/zh locale and plugin config support
- ecd9d2a fix(test): stabilize opencode command dir assertions across environments
- 66a1a9a fix(test): address review follow-ups for config dir layering
- 8d5dd90 fix(plugin-config): merge user config from default and custom opencode dirs
- 850dc3a fix(agent-loader): load opencode global agents from both config roots
- 71025da fix(shared): add additive opencode config directory discovery
- 87ad159 fix(prompt): prefer edit tool for gpt-5.4 juniors
- a26117d fix: resolve ${CLAUDE_PLUGIN_ROOT} in plugin commands, agents, and skills
- bcc554b fix(schema): preserve custom agent overrides via catchall
- fd0e6e2 Merge remote-tracking branch 'origin/dev' into fix/git-bash-shell-detection-on-windows
- 0996d68 Fix interceptor auth injection binding
- ee500ad Fix interceptor auth injection on Windows
- ff9c3e0 test(atlas): assert task_id guidance in reminder
- 64a2911 fix(prompts): prefer task_id in continuation guidance
- 998dbde fix: detect Git Bash/WSL/MSYS2 shell on Windows before PSModulePath
- 6c3308a fix: treat zero limit.output as unknown to enable fallback to bundled snapshot
- 02d64e4 test(doctor): cover custom provider config regression
- 14c25cb feat(background-task): make taskCleanupDelayMs configurable
- cb53cba merge: resolve conflicts with dev branch
- c507ce7 fix(doctor): improve opencode binary detection for WSL
- 28b0a75 fix(package): add ./server export for OpenCode-Go plugin compatibility
- 607fce1 fix(context-injector): prefix synthetic part ids with prt_
- d66b6bc fix(prometheus): complete OpenSpec command reference, fix Gemini self-containment, strengthen tests
- 69f4fed fix(prometheus): remove BMAD active detection, add missing spec-awareness tests
- 8ff4123 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