🛡️ /security-research — New Team Mode Skill
Spin up an adversarial 5-member security team in one command: 3 vulnerability hunters (surface, auth/data, runtime/supply) + 2 PoC engineers, all running in parallel. Every finding is calibrated by actual exploitability — no severity without an attack path. CWE classification + OWASP WSTG/ASVS methodology + CVSS v4.0 scoring built in.
/security-research
Requires team_mode.enabled: true in your oh-my-opencode.jsonc.
⚡ Parent-Wake Race Fixed — No More Duplicate Assistant Streams
Background-agent completion edges were duplicating parent-wake injections, occasionally starting a second assistant stream on the same task. The new parent-wake-dedupe layer catches this at BOTH the flush-time AND the prompt-async gate hold, so completion notifications now collapse to exactly one per logical event. (#4256 / #4019)
🔧 Model Configuration Edge Cases Restored
Three fixes for users hitting model resolution corners:
- Atlas honors your override even when resolution fails (cold cache, no system default). Instead of silently dropping Atlas, it now registers with your chosen model. (#4255)
- multimodal-looker trusts your vision model — set
agents.multimodal-looker.modelto any provider/model and the vision-cache will accept it, no provider declaration needed. (#4209) openai/gpt-5.3-codexstops getting auto-rewritten — the canonical Codex powerhouse is no longer mistakenly migrated togpt-5.4. (#3777)
🪟 Cross-Platform Tooling Hardening
- OpenCode-bundled ripgrep reused —
~/.cache/opencode/bin/rgis probed first, so we stop duplicate-downloading ripgrep when OpenCode already has it. (#3805) - Windows ast-grep path matching locked — backslash + UNC suffixes now match the dist CLI consistently. Regression test pins this. (#4220)
- CJK terminal headers preserved — NFC normalization in
oh-my-opencode runoutput stops Hangul/CJK from mangling. (#4170)
✨ TUI Quality of Life
- Clickable subagent entries — late-arriving session IDs are now captured before metadata publish, fixing the perpetual-spinner subagent bug. (#4252)
look_atno longer hangs — child sessions that produce no output exit gracefully viaallowStableIdleWithoutActivityinstead of waiting for the 120s timeout. (#4238)/stop-continuationrespected after boulder completion — no more stray completion nudges fired after you explicitly stopped. (#4149)- tool-pair-validator continues after repair — multi-message conversations with missing
tool_resultblocks now repair every affected message in one transform pass. (#4123)
⚠ Breaking (cleanup): Top-level lsp Config Key Removed
Read this if your
oh-my-opencode.jsonchad anlsp:block. If you did not, you can ignore this section.
The migration in this release explicitly removes the top-level lsp config key and creates a timestamped .bak file next to your config. Move your server definitions to project-root .opencode/lsp.json — the new home, consumed by the lsp MCP server (backed by packages/lsp-tools-mcp).
Why this looks like a break but isn't: this key was already being silently stripped by the Zod schema since v3.x — custom LSP servers in this location have not been functional for several releases. This migration just makes the loss visible (via log + .bak backup) so you can actually recover.
To restore your servers (one-time):
# 1. Find the most recent backup created by this migration
ls -t ~/.config/opencode/oh-my-opencode.jsonc.bak.* 2>/dev/null | head -1
# or in your project:
ls -t .opencode/oh-my-opencode.jsonc.bak.* 2>/dev/null | head -1
# 2. Open the .bak file, copy the `lsp: { ... }` contents into project-root
# .opencode/lsp.json with this shape:
# {
# "$schema": "...",
# "servers": {
# "typescript": { "command": "typescript-language-server", "args": ["--stdio"] }
# }
# }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.
Commit Summary
- 20d67be @EvangelosMoschou has signed the CLA in #4357
- 5e2f12f Merge pull request #4348 from Yeachan-Heo/omc-team/you-are-one-of-5-parallel-work/worker-4
- 0c14c47 Merge pull request #4350 from Yeachan-Heo/omc-team/you-are-one-of-5-parallel-work/worker-3
- f390d36 Merge pull request #4352 from Yeachan-Heo/fix/atlas-config-model-override-4255
- 5451313 Merge pull request #4356 from Yeachan-Heo/fix/issue-3805-auto-tools-path
- bfc5078 fix: trust user-configured multimodal-looker model for vision (#4209)
- 779e2d2 fix(task): capture late-arriving sessionId so TUI subagent entry is clickable (#4252)
- 7d444ee fix(agents): honor user atlas model when resolution returns undefined (#4255)
- 6c691a1 fix(grep): probe OpenCode cache-backed bin for auto-downloaded rg (#3805)
- c0a6c66 Merge pull request #4346 from code-yeongyu/fix/agent-loop-dedupe-race-4256
- b3097e5 fix(background-agent): suppress redundant parent wakes
- 2bfad49 feat(skills): add security-research orchestration
- 1ecf4f6 @chouzz has signed the CLA in #4312
- 01d2196 Merge pull request #4238 from islee23520/fix/look-at-status-map-hang
- f511b4b Merge pull request #4263 from YOMXXX/fix/gpt-5-3-codex-migration
- d06a5d7 Merge pull request #4272 from YOMXXX/fix/ast-grep-windows-cli-suffix-test
- 9da3009 Merge pull request #4279 from MoerAI/fix/migrate-orphan-lsp-config-key
- 74db81d Merge pull request #4285 from SpencerJung/fix/issue-4123-tool-pair-retrigger
- 6cac80f Merge pull request #4290 from SpencerJung/fix/issue-4170-cjk-agent-header
- 12d7d10 Merge pull request #4282 from SpencerJung/fix/issue-4149-terminal-continuation-guard
- 6062df8 fix(migration): make 'lsp' migration guidance self-contained and update stale docs (addresses codex P2 on #4279)
- ed4c04e fix(cli): preserve CJK agent header text
- 2856930 fix(tool-pair-validator): continue after synthetic repairs
- 7dae271 fix(atlas): honor stopped continuation after boulder completion
- a7429cc fix(migration): drop orphan 'lsp' config key so users see LSP moved to .opencode/lsp.json (fixes #4225)
- ccaf61e test(ast-grep): lock Windows backslash matching for ast_grep dist cli suffix (#4220)
- d788c3d fix(migration): stop rewriting explicit gpt-5.3-codex to gpt-5.4 (#3777)
- c4a51be Cover look_at permanently absent session output
- b3a195d Avoid look_at status map wait hang
Thank you to 5 community contributors:
- @islee23520:
- Avoid look_at status map wait hang
- Cover look_at permanently absent session output
- @YOMXXX:
- @MoerAI:
- @SpencerJung:
- fix(atlas): honor stopped continuation after boulder completion
- fix(tool-pair-validator): continue after synthetic repairs
- fix(cli): preserve CJK agent header text
- @Yeachan-Heo:
- fix(grep): probe OpenCode cache-backed bin for auto-downloaded rg (#3805)