github code-yeongyu/oh-my-openagent v4.1.0

4 hours ago

v4.1.0 — Boulder Tracking, Electron Compatibility, and Ralph Loop Hardening

Boulder: Know Where Your Work Stands

The new Boulder system tracks multi-session work across plan files. Each plan task now has per-task timers, completion detection, and elapsed-time nudges so you always know how long each piece of work actually took. A new boulder CLI subcommand (bunx oh-my-opencode boulder) gives you an at-a-glance dashboard of all active and completed work items with progress percentages and timing breakdowns.

Electron/Desktop Compatibility

19 unguarded Bun.* call sites that crashed with ReferenceError: Bun is not defined under Electron are now routed through runtime shims. The MCP OAuth callback server and port detection both moved from Bun.serve to node:http and node:net. If you're running oh-my-opencode through OpenCode Desktop, the plugin now boots without errors on Node/Electron runtimes.

Ralph Loop: No More Silent Failures

The ralph loop (the continuation engine that keeps agents working across iterations) received 7 targeted fixes. Prompt dispatch failures now surface instead of silently swallowing errors. Synthetic idle replays are ignored so stale iterations don't restart work. Ownership races are detected and rejected. If continuation broke mysteriously for you before, this release addresses the root causes.

Tolerant Fsync for Synced Folders

File writes on cloud-synced directories (iCloud, Dropbox, OneDrive) no longer crash with EPERM on fsync. The plugin detects synced-folder paths and gracefully skips fsync when the OS blocks it, surfacing a one-time warning to the agent instead of failing the operation.

Configurable Agent Ordering

You can now override the default agent display order via the agent_order config key. Agents not listed fall back to the built-in canonical order.

Plugin Disposal

The plugin now registers a cleanup handler that gracefully tears down managers, MCP clients, and background tasks when OpenCode exits, instead of leaving orphaned processes.

88 Bug Fixes

Delegate-task abort recovery, background-agent stale todo state, team-mode session tracking, config migration fsync on Windows, hashline unsafe assertions, and dozens more fixes across the full stack. See the commit log below for the complete list.


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

  • 2146071 .opencode to .agents
  • a0b4630 remove hyperplan for .opencode (not as a feature)
  • 75825eb fix(todo-description-override): add OpenCode schema contract for string priorities
  • c740ed8 fix(delegate-task): route sync prompts by directory
  • 6035a55 fix(background-agent): route session prompts by directory
  • 7d09d2c Merge pull request #3967 from code-yeongyu/refactor/typescript-no-excuse-slops
  • 2fc1786 test(hashline): remove unsafe test assertions
  • fb135d0 test(tools): remove unsafe test assertions
  • 8b093a1 test(shared): remove unsafe test assertions
  • f05aeaa test(plugin): remove unsafe test assertions
  • 0787867 test(ralph-loop): remove unsafe fixture assertions
  • 2321115 test(hooks): remove unsafe test assertions
  • 11b3638 test(features): remove unsafe test assertions
  • 7365163 test(cli): remove unsafe test assertions
  • cde14b5 fix(call-omo-agent): restrict callable agents
  • 9ffef79 fix(ralph-loop): ignore synthetic idle replays
  • 07797e1 fix(background-agent): preserve direct all-complete replies
  • 2d20037 @jas32096 has signed the CLA in #3966
  • d82f6a6 fix(background-agent): refresh stale todo state
  • ec3a7bb Merge pull request #3965 from code-yeongyu/fix/ralph-loop-prompt-result
  • 2c0f8e4 fix(ralph-loop): return prompt dispatch failures
  • 2d656bd Merge pull request #3964 from code-yeongyu/fix/electron-bun-runtime-shims
  • 8e07ef6 fix(mcp-oauth): use fixed localhost base for callback URL parsing
  • 1152939 refactor(cli): use Response(stream).text() instead of Bun.readableStreamToText
  • 22c7e4e refactor(mcp-oauth): replace Bun.serve with node:http in callback-server
  • 2386cbd refactor(port-utils): drop Bun.serve in favor of node:net probe
  • 0aafe20 refactor: route raw Bun.file/write/hash/which/spawn through runtime shims
  • 4394f34 feat(shim): add bun-file/hash/which shims with Node fallbacks
  • 4da4855 fix(plugin): normalize event session ids
  • 4aa2a01 Merge pull request #3961 from code-yeongyu/fix/ultrawork-oracle-continuation
  • 0de6bd7 fix(ralph-loop): reject promptAsync error responses
  • 67f90a8 Merge pull request #3956 from code-yeongyu/fix/web-audit-dependencies
  • 33f62c4 fix(web): patch audit dependency advisories
  • 6a9cad1 Merge pull request #3955 from acamq/fix/supply-chain-audit-deps
  • 5394b29 fix(deps): patch vulnerable mcp transitives
  • 1c05c60 fix(background-agent): replace system-reminder wake with queued notifications
  • 3ed4651 fix(compaction): skip autocontinue for compaction agent
  • 90f0971 fix(background-agent): handle idle status events
  • 71a63c2 Revert "fix(hooks): dedupe native agent instructions"
  • 78d5287 fix(hooks): dedupe native agent instructions
  • c849d0c fix(ralph-loop): suppress stale iteration toasts
  • 2c299d2 Merge pull request #3943 from code-yeongyu/feature/boulder-evolution-and-discipline-agents
  • 29c4248 fix(hooks/atlas): capture plan snapshot for .sisyphus paths
  • cf5fe75 feat(hooks/atlas): parse task_key from delegation prompt for parallel batches
  • e3cddb3 feat(hooks/atlas): end task timer when plan checkbox flips to checked via edit
  • b8c25b3 refactor(hooks/atlas): remove unused resolveSessionOrigin helper
  • 079a2cd fix(start-work): preserve existing works when starting an explicit new plan
  • dd5f775 fix(boulder-state): missing plan file no longer reports isComplete=true
  • ce2f3af fix(boulder-state): make completeBoulder idempotent on already-completed works
  • 7035153 style(agents): replace em dashes with semicolons/periods
  • 14b9a43 fix(cli/boulder): strip ANSI in formatter test so FORCE_COLOR CI passes
  • de9c28a fix(hooks/atlas): align completion behavior tests with task-4 timing updates
  • 1ebf89c feat(hooks/atlas): inject boulder-complete elapsed-time nudge once per work
  • a1c6e6b fixup! feat(hooks/atlas): use getWorkForSession in boulder lookups and session tracking
  • c345082 feat(cli/boulder): implement boulder() entry point and register subcommand
  • 3098493 feat(cli/boulder): add types and formatter for boulder subcommand
  • fb2f696 docs(start-work): document multi-work resume flow in agent template
  • d6f4199 feat(start-work): use getWorkResumeOptions for multi-work resume selection
  • 29b44ff feat(hooks/atlas): call completeBoulder when progress.isComplete
  • 127112e feat(hooks/atlas): wire per-task timers via startTaskTimer/endTaskTimer
  • f2a5ef0 feat(hooks/atlas): add BOULDER_COMPLETE_PROMPT template and SessionState guard
  • 18af3d3 feat(hooks/atlas): use getWorkForSession in boulder lookups and session tracking
  • 42db707 feat(boulder-state): add formatDurationHuman utility
  • 0c6805c prompt(prometheus): add Oracle phase-gate verification between phases
  • 8c238a1 prompt(atlas): replace retry cap with no-excuses policy and add boulder-complete response
  • 29c29da Merge pull request #3942 from code-yeongyu/fix/3819-compaction-agent-token-cache
  • 5d823b5 feat(boulder-state): add task timer + completion helpers
  • 9f50074 feat(boulder-state): add session-aware multi-work storage helpers
  • 49ff4b5 fix(compaction): ignore compaction agent updates
  • 246e0dc feat(boulder-state): add BoulderWorkState and timing fields to types
  • cfe94fc Merge pull request #3941 from code-yeongyu/fix/delegate-task-metadata
  • 0fd918e fix(delegate-task): preserve native task metadata
  • 726c82e Merge pull request #3939 from code-yeongyu/fix/ralph-loop-message-dispatch
  • 2e36a92 fix(ralph-loop): revalidate ownership and harden commit/session-creation failures
  • 35cab4d test(ralph-loop): cover ownership race, verification commit failure, session.create throw
  • 954aa1f fix(compaction): isolate preservation hook failures
  • caaae19 fix(ralph-loop): commit iteration only after verification continuation dispatches
  • 09c45c3 fix(ralph-loop): commit iteration only after continuation is dispatched
  • d4cdeac fix(ralph-loop): return typed ContinuationResult from continueIteration
  • f0857a8 test(ralph-loop): add dispatch-failure invariant tests
  • bd4db2a Merge pull request #3938 from code-yeongyu/fix/delegate-bg-completion-message
  • a5cc498 fix(background-agent): retry deferred parent wake
  • 917398b fix(team-mode): cleanup team runs on shutdown
  • 59209f0 fix(team-mode): track session-created team runs
  • ac9e375 fix(delegate-task): align continuation task metadata titles
  • 5bb0b01 @Qihao0v0 has signed the CLA in #3934
  • b213d0d Merge pull request #3929 from wenghuayang96/fix/runtime-fallback-volcano-quota
  • 38c50d6 Merge pull request #3827 from ShishaBoyTJ/fix/tmux-subagent-single-dispatch
  • 0d19c31 fix: add cmux __tmux-compat prefix to interactive_bash tool
  • 9314dca @acamq has signed the CLA in #3644
  • 69aedf3 Merge pull request #3915 from code-yeongyu/fix/installer-checking-opencode-hang
  • f983b6b fix(installer): avoid empty-version success on delayed stdout
  • 5d1c871 fix(installer): bound outputPromise wait after kill to prevent indirect hang
  • 4b281f9 Merge pull request #3914 from code-yeongyu/fix/max-output-tokens
  • 1dc2664 Merge pull request #3912 from code-yeongyu/fix/sync-poller-abort-handling
  • 50dffc9 Merge pull request #3911 from code-yeongyu/fix/todo-diag-blocked-alert
  • 0b6d28a Merge pull request #3913 from code-yeongyu/fix/bg-task-registry-aborted
  • 8b1696f fix(delegate-task): prevent stale-text abort recovery
  • 8e47d3a fix(delegate-task): require anchored text for abort recovery
  • f6a6bb3 Merge pull request #3910 from code-yeongyu/fix/config-migration-repeated-bak
  • e018739 fix(delegate-task): recover aborted-operation messages in sync flows
  • 64f9a70 fix(config): use r+ when fsyncing migrated temp file
  • eb6605a fix(background-agent): preserve non-sensitive timing in archived tasks
  • 468bf25 fix(delegate-task): gate continuation recovery to canonical abort errors
  • 8407389 test(installer): stabilize timeout signal escalation assertion
  • 2f8ce57 fix(chat-params): use conservative token fallback for invalid limits
  • a4ce0b6 fix(background-agent): redact archived prompts and cap fallback archive
  • 6591302 fix(delegate-task): narrow abort recovery to canonical abort errors
  • 2168040 fix(plugin): scope synthetic-idle dedup bypass to matching marker
  • 7464d7e fix(installer): timeout opencode --version probe to avoid Desktop binary hang
  • 851ebfb Merge pull request #3932 from code-yeongyu/revert-3622-fix/truncate-tool-error-output
  • 2992750 Revert "fix(tool-execute-after): cap excessively long tool output to prevent TUI flooding (fixes #3586)"
  • 124bbb1 @masterkain has signed the CLA in #3930
  • f3f72fc fix(runtime-fallback): also classify Volcano Engine errors as quota_exceeded
  • 45f583a @wenghuayang96 has signed the CLA in #3929
  • 39a7e01 @MisileLab has signed the CLA in #3928
  • 1c7881e fix(runtime-fallback): match Volcano Engine 'exceeded the usage quota' errors
  • cb3aba9 Merge pull request #3927 from acamq/feat/support-dsv4-thinking
  • a81a7e7 Merge pull request #3926 from acamq/fix/opencode-go-installer
  • 5259bdf fix(model-settings): apply reasoning aliases with capabilities
  • fd670a8 fix(model-settings): enable DeepSeek reasoning effort
  • cfab5ca fix(installer): add opencode-go fallback entries for deep and artistry categories
  • c5e89f1 fix(model-settings): support family reasoning aliases
  • 50d0d16 Merge pull request #3909 from code-yeongyu/fix/doctor-version-parsing
  • 6520c70 Merge pull request #3917 from code-yeongyu/fix/anthropic-prefill-recovery
  • 432728b Merge pull request #3916 from code-yeongyu/fix/delegate-inactivity-timeout
  • 41629b5 fix(plugin): guard assistant prefill message tails
  • eef62cc fix(delegate-task): clarify sync inactivity timeout
  • 98da8b6 fix(installer): apply extractSemverFromOutput to opencode-binary version probe
  • 6fd1ec3 test(background-agent): align cancel cleanup assertions with archive fallback
  • 279f0d1 fix(chat-params): guard non-positive max output tokens
  • dbaea82 fix(background-agent): retain completed tasks via archive fallback after cleanup
  • a064e13 fix(delegate-task): recover sync results on abort race
  • a196d84 fix(plugin): allow real session.idle after synthetic idle within dedup window
  • f45452a fix(config): use r+ mode for fsync on Windows to prevent migration retry loop
  • dc4f248 fix(doctor): extract semver from opencode --version stdout
  • 50699e3 fix(background-task): disambiguate background output task ids
  • e92f81e Merge PR #3907: fix(delegate-task): pause timeouts for active sessions
  • f67ff56 Merge pull request #3906 from code-yeongyu/codex/fix-compact-agent-mismatch
  • dd29e9b fix(compaction): restore context and todos before continue
  • 862a2df fix(delegate-task): pause timeouts for active sessions
  • 5a4127c fix(background-agent): defer busy parent wake
  • ed4aa4d Merge PR #3905: fix team-mode member communication tools
  • d801c88 fix(team-mode): preserve member context on retry
  • 1ea4dfe fix(hooks): settle idle prompt continuations
  • b36389e fix(team-mode): keep member communication tools visible
  • 8068429 fix(ralph-loop): settle idle before continuation
  • 1e4a51e @zhuohoudeputao has signed the CLA in #3896
  • e7901ad @wjiuxing has signed the CLA in #3890
  • be2acd4 fix(delegate-task): hide team tools from subagents
  • 99ddb3b @leeyazhou has signed the CLA in #3884
  • dc69383 Merge pull request #3876 from code-yeongyu/feature/web-team-mode-and-model-updates
  • a7ec539 fix(web): address review-work findings (Category Routing, OG dims, e2e drift)
  • fff2fb7 perf(web): Lighthouse perfection — 100/100/100/100 desktop, 97/100/100/100 mobile
  • cafdf31 docs: add Team Mode and refresh model references across all READMEs
  • c03f2d0 feat(web): refresh landing page for v4.0 — Team Mode, model versions, optimized hero
  • d8ba0d2 @jollyxenon has signed the CLA in #3875
  • 00033d5 @x-x-gpu has signed the CLA in #3872
  • 68b64f1 @rshks has signed the CLA in #3866
  • 0a1c69e @cvqluu has signed the CLA in #3870
  • 85c7700 feat(web): add MDX components for documentation rendering
  • b7c7cb2 feat(delegate-task): add model string parser for variants
  • 8ada977 feat(plugin): add plugin disposal with graceful cleanup
  • 93169a3 feat(delegate-task): add call ID resolution utility
  • 1bb3631 feat(tmux-subagent): add event handlers for session lifecycle
  • 0e59f26 Merge pull request #3865 from code-yeongyu/fix/manifesto-domain
  • 4181993 docs(manifesto): use ohmyopenagent.com (no dashes) for the project domain
  • 41d152c Merge pull request #3864 from code-yeongyu/fix/docs-correct-urls
  • 1aeb2fd Merge pull request #3862 from code-yeongyu/codex/cpu-usage-optimization
  • 268ee57 fix(docs): revert wrong schema URL canonicalization (file is oh-my-opencode.schema.json)
  • b405fc7 Merge pull request #3861 from code-yeongyu/fix/web-docs-marked-no-eval
  • 2efe8a8 test(index): stabilize openclaw bootstrap smoke test
  • 5cf8623 perf(skill): reuse precomputed command list
  • 8eadf20 perf(shared): avoid spawning opencode for version checks
  • 9848803 fix(web): replace next-mdx-remote with marked + raw HTML to avoid CF Workers eval ban
  • 222f5d0 Merge pull request #3860 from code-yeongyu/fix/web-docs-bundle-at-build
  • c01a89b feat(atlas): mandate parallel delegation and add per-model variants
  • 57b9d42 fix(web): bundle docs sources at build time so the worker has no fs
  • 7708254 Merge pull request #3859 from code-yeongyu/feat/web-mdx-docs-sot
  • 70be16d docs(agent-model-matching): Hephaestus chain is gpt-5.5 only
  • 46683d7 Merge branch 'dev' into feat/web-mdx-docs-sot
  • aadcbbf chore(workflows): trigger web CI + deploy on docs/ changes
  • e5369f3 feat(web): render docs from repo-root docs/ as MDX SoT at build time
  • 36867d4 Merge pull request #3858 from code-yeongyu/feature/configurable-agent-ordering
  • 810e3c7 docs: refresh user-facing guide + reference for current code state
  • 3a738e7 Merge remote-tracking branch 'origin/dev' into feature/configurable-agent-ordering
  • 9522dd4 feat(config): add configurable agent ordering
  • 457836b Merge pull request #3857 from code-yeongyu/fix/web-next15-runtime
  • e02166d fix(web): downgrade Next.js 16.2.6 -> 15.5.18 to unblock Cloudflare deploy
  • 3134d9d Merge pull request #3854 from code-yeongyu/fix/team-mode-fsync-eperm
  • 43b0529 feat(hooks): surface fsync-skip warnings to AI agent via tool output
  • 6b69505 feat(shared): wire tolerantFsync to record skips with path classification
  • 20ae3f8 feat(shared): add fsync-skip tracker and path-environment classifier
  • 5d8d2b6 Merge pull request #3855 from code-yeongyu/chore/web-deploy-on-dev
  • 7fe197d chore(workflows): trigger web-deploy on dev push too
  • 8667d7e Merge pull request #3853 from code-yeongyu/chore/web-bump-deps
  • 81a1f66 fix(web): truly pin lucide-react at 0.577.0
  • 7735b2a fix(shared): tolerate EPERM during fsync in writeFileAtomically
  • c69d6bd fix(team-mode): tolerate EPERM during fsync in atomicWrite and acquireLock
  • 9d83255 feat(shared): add tolerant-fsync utility for synced-folder filesystems
  • dff2acf chore(web): apply prettier 3.8 + Next 16 tsconfig auto-formatting
  • e5eda11 chore(web): bump every dependency to latest
  • 172976c Merge pull request #3852 from code-yeongyu/feature/add-web-frontend
  • f7d16c5 fix(web): actually ignore .wrangler/ as web/AGENTS.md claims
  • 39cf5a8 fix(test): update model-fallback snapshots after metis switch to claude-sonnet-4-6
  • fc0ef39 docs(web): mention web/ subdir + workflows in root AGENTS.md
  • 14398d5 ci(web): add web-ci and web-deploy GitHub Actions workflows
  • f94714b feat(web): import oh-my-openagent-web Next.js + Cloudflare Workers site
  • 2b2f21e chore(test): scope root bun test to bin/script/src
  • c7d6a4a fix: remove dead-code files accidentally resurrected by previous commit
  • 2dfa633 fix(metis): switch primary model to claude-sonnet-4-6 + correct AGENTS.md inaccuracies
  • 838b5ae docs(agents): refresh hierarchical AGENTS.md with team-mode coverage
  • cd31d2a Merge pull request #3842 from herjarsa/fix/desktop-electron-bun-protocol-compat
  • adc6d92 fix(agents): copy factory mode to agent config for Desktop 1.14.x compat
  • 9ab2731 @NICxKMS has signed the CLA in #3838
  • 8236d7d fix: support cmux tmux compatibility
  • cd05e48 @ShishaBoyTJ has signed the CLA in #3827

Thank you to 4 community contributors:

  • @ShishaBoyTJ:
    • fix: support cmux tmux compatibility
  • @herjarsa:
    • fix(agents): copy factory mode to agent config for Desktop 1.14.x compat
  • @acamq:
    • fix(model-settings): support family reasoning aliases
    • fix(installer): add opencode-go fallback entries for deep and artistry categories
    • fix(model-settings): enable DeepSeek reasoning effort
    • fix(model-settings): apply reasoning aliases with capabilities
    • Merge pull request #3926 from acamq/fix/opencode-go-installer
    • Merge pull request #3927 from acamq/feat/support-dsv4-thinking
    • Revert "fix(tool-execute-after): cap excessively long tool output to prevent TUI flooding (fixes #3586)"
    • Merge pull request #3932 from code-yeongyu/revert-3622-fix/truncate-tool-error-output
    • fix: add cmux __tmux-compat prefix to interactive_bash tool
    • Merge pull request #3827 from ShishaBoyTJ/fix/tmux-subagent-single-dispatch
    • Merge pull request #3929 from wenghuayang96/fix/runtime-fallback-volcano-quota
    • fix(deps): patch vulnerable mcp transitives
    • Merge pull request #3955 from acamq/fix/supply-chain-audit-deps
    • fix(web): patch audit dependency advisories
    • Merge pull request #3956 from code-yeongyu/fix/web-audit-dependencies
  • @wenghuayang96:
    • fix(runtime-fallback): match Volcano Engine 'exceeded the usage quota' errors
    • fix(runtime-fallback): also classify Volcano Engine errors as quota_exceeded

Don't miss a new oh-my-openagent release

NewReleases is sending notifications on new releases.