github code-yeongyu/oh-my-openagent v5.1.55

3 hours ago

remove-ai-slops now names the two Bun scripts the programming skill ships for test work. Phase 2 runs check-test-junk.ts over every in-scope test file and treats its file:line findings as category-9 candidates (never automatic cuts); Phase 4b names mutation-proof.ts as the command behind the serial apply/run/restore proof it already described. (#12017)

The programming skill ships two Bun scripts that make the test rules mechanical. check-test-junk.ts flags the junk classes a regex can see in touched test files (source greps, prose pins, fixed sleeps, .only/.skip, self-comparisons, lower-bound cardinalities) with a per-line opt-out, and mutation-proof.ts breaks a production owner, runs the named tests, restores the file byte for byte and prints red/green, so "test your test" is one command. (#11972)

remove-ai-slops now prunes junk tests with the same table the programming skill and the gate reviewer use. Category 9 marks every in-scope test R/F/C/D, proves each deletion or merge by its class's rule (a production mutation for the behavior classes) before the cut, keeps the retention bar, and reports a baseline-red test as a bug instead of deleting it; behavior is locked with gate-passing tests rather than change certificates, and the report carries a Tests Ledger. (#11968)

  • senpi-task: a message sent to a daemon task while its launch is being recorded keeps its input identity; the task record no longer rolls its effect_seq back, and a record rewritten to the same size is no longer read stale (#10708). (#11946)

  • Internal telemetry maintenance. (#11882)

Fixed

  • omo remote attach on Windows now reports a stopped OmO device service as not running instead of a raw connection error (#12042). (#12043)
  • Memory sync on a CLI sign-in recovers after the OS credential store briefly reads empty (a locked keychain, a racing writer). The operations that saw the empty read are still refused, but the next sync pass gets a live account instead of staying off until restart. A real sign-out or credential change still stops sync (#11812). (#12001)
  • On Windows, omo host ensure forwards a private pipe pair through the npm launcher, Bun re-exec, and provisioned-runtime handoff. Both pipe handles travel together on their original stdio slots, and the waiting launcher closes its owned copies after spawning. Invalid or aliased pairs remain null declarations; POSIX socket forwarding is unchanged. (#11958)
  • Memory git failures that end without any output now say how the git process ended (exit code, signal and elapsed time) instead of a bare exit code. On macOS and Linux the signal tells an externally killed git apart from a silent git error; on Windows a killed child reports no signal, so there the elapsed time is the only clue. (#11945)
  • The compiled-worker relocation test no longer hangs now and then. Its fixture waited on terminate() from inside the worker's message handler, which races the worker's own exit and never settles on Bun 1.4.4. It now waits for the worker's clean exit after the ready message, and a timeout failure reports its signal. (#11941, fixes #11940)
  • The maintainer omob build now compiles the engine trust helper in its own cargo call, as the release workflows do, so a locally built desktop engine matches the released one. (#11939, part of #10762)
  • Validate retained research source bytes before replacing an extraction and preserve the original capture time when reusing those bytes. (#11936)
  • Memory /doctor no longer tells the user to "fix the cause" of parked facts batches without naming it: the facts check now reads as a plain-words to-do (run /facts retry for a transient cause such as a timeout, or the named fix such as setting memory.facts.model), followed by the cause counts per parked batch and the newest parked batch's run log path, and /facts retry reports how many batches it unparked and whether any parked again, with the cause. (#11909, part of #10897)
  • A skill MCP server's timeout (milliseconds, set on the server entry in the skill's mcp frontmatter or mcp.json) now bounds every direct MCP request: list tools/resources/prompts, call tool, read resource and get prompt. Values outside 1 to 2147483647 ms fall back to the SDK default (#11869, carried forward from #7224 by @AceRothstein71)

Changed

  • The omo-ai installer and launcher no longer rewrite the Claude Code version the engine advertised on Anthropic OAuth requests: senpi removed that request path together with the declaration the rewrite looked for (senpi#5131), so engine preparation keeps only the compile-safe css-tree data and the RPC stream guard, and an engine without the declaration no longer fails preparation with "unsupported Senpi". (#11964)
  • Simplified OpenCode agent assembly by removing redundant type assertions and an unused builtin-skill name inventory. Agent mode, override precedence, and skill selection remain unchanged. (#11870) (#11899)

Added

  • Categories and agents can set models_distribution: "round_robin" alongside models to spread new task children across their configured model chains. The default sequential policy keeps the existing order. Each child's fallback chain wraps from its selected starting model without repeating models, and continuations keep their current model. (#11905)
  • omo remote checks your OmO sign-in first and stops with one plain line when you are signed out, the keychain is locked or the credential store is unavailable (#11853). (#11864)
  • omo remote attach <device>/<session> shows a session from another device of this account in the attach TUI, observe-only for now: input is refused with "remote input not enabled yet" (#11853). (#11858)
  • omo remote status | devices | sessions | enable | disable shows this account's devices and the sessions on them through the OmO device service, as tables or --json, with a typed SDK (@oh-my-opencode/device-service-core) over the service's local API v1 underneath (#11853). (#11857)
  • Computer use (macOS): type() into a window that shows another computer or device (Screen Sharing, iPhone Mirroring) sends the keys of the current keyboard layout, since such a window receives key codes rather than typed text; every character is mapped before anything is sent, and a character no key types fails InvalidKey with nothing typed. In the background, text into a Screen Sharing window that needs Shift or Option fails BackgroundUnavailable before the first key (it takes modifiers from the physical keyboard; use foreground delivery), and el.type() never inserts into a remote window. (#11749, part of #11466)
  • Command Code is now offered during setup as a custom provider: when CMD_API_KEY (or COMMANDCODE_API_KEY) is present in the environment, setup writes a keyless models.json provider entry covering both Command Code wires (Anthropic messages and OpenAI-compatible chat completions) and stores the key reference in auth.json, so agents can use Command Code models without manual provider configuration (#11326). (#11326)

Improved

  • Simplify agent-usage reminder state reuse without changing reminder caps, delegation suppression or session cleanup. (#11890) (#11899)

  • e650809 chore(release): regenerate service-auth bundle for 5.1.55 (#12046)

  • 1c5187e docs(changelog): keep 5.1.55 notes neutral on telemetry

  • 13a2592 Merge pull request #12001 from code-yeongyu/fix/11812-transient-null-read

  • f6c39e5 Merge pull request #12043 from code-yeongyu/fix/remote-attach-stopped-service

  • a7b37c7 changes: 12043

  • d1cd2d7 fix(omo-native): omo remote attach names a stopped service on a refused connection

  • 8bda141 Merge pull request #11858 from code-yeongyu/feat/omo-remote-attach

  • f57238c Merge pull request #11864 from code-yeongyu/feat/omo-remote-bootstrap

  • f929317 Merge pull request #11946 from code-yeongyu/fix/10708-input-identity

  • 2429041 build(memory-sync): regenerate bundles after merging dev 8b8b5a7

  • cbef482 Merge remote-tracking branch 'origin/dev' into fix/11812-transient-null-read

  • 61f3a7e Merge remote-tracking branch 'origin/feat/omo-remote-bootstrap' into feat/omo-remote-attach

  • fc2f8a7 Merge remote-tracking branch 'origin/dev' into feat/omo-remote-bootstrap

  • 8b8b5a7 Merge pull request #11857 from code-yeongyu/feat/omo-remote-device-client

  • 91b4379 Merge remote-tracking branch 'origin/dev' into fix/10708-input-identity

  • 5dd32cb Merge commit 'cafe154cbd' into feat/omo-remote-attach

  • 61e2248 Merge pull request #11945 from code-yeongyu/fix/11943-git-exec-signal

  • cafe154 Merge remote-tracking branch 'origin/feat/omo-remote-device-client' into feat/omo-remote-bootstrap

  • 78a1540 chore(omo-native): regenerate service-auth bundle after merging dev

  • d0350c8 Merge remote-tracking branch 'origin/dev' into feat/omo-remote-device-client

  • 224ce9f docs(changes): scope the git termination note per platform (#11945)

  • 03d6211 Merge pull request #12019 from code-yeongyu/fix/12018-verify-assets-files-only

  • 5b210a0 Merge remote-tracking branch 'origin/dev' into fix/11943-git-exec-signal

  • bf472e8 Merge pull request #11936 from MoerAI/fix/11551-kept-raw-snapshot-integrity

  • adf3cc7 Merge pull request #11326 from Bearmancer/feat/commandcode-custom-provider

  • 8b93cb0 Merge pull request #11964 from code-yeongyu/fix/5131-drop-claude-code-floor

  • 2e68857 Merge branch 'dev' into fix/11551-kept-raw-snapshot-integrity

  • 79e65ae Merge remote-tracking branch 'origin/dev' into fix/12018-verify-assets-files-only

  • 5aaf501 test(device-service-core): LA17 expects the user SDDL token in the ACE list (Windows prints LA)

  • de3f64e Merge pull request #11905 from code-yeongyu/feat/10146-models-distribution

  • e0c128e Merge pull request #11749 from code-yeongyu/feat/11466-cu-remote-typing

  • f468e6e fix(device-service-core): keep SID_TOKEN_SCRIPT module-private (knip)

  • f1b932d Merge branch 'dev' into fix/11551-kept-raw-snapshot-integrity

  • 27bdf80 Merge pull request #11909 from surlymochan/fix/10897-doctor-parked-facts-cause

  • a67e3dc Merge pull request #12017 from code-yeongyu/test-rules/ras-wire-scripts

  • e12952d fix(device-service-core): accept the SDDL alias Windows prints for the user in the exact DACL verdict

  • 1f37861 Merge pull request #11882 from code-yeongyu/fix/install-key-review-lows

  • f757033 Merge branch 'dev' into feat/commandcode-custom-provider

  • 215b147 Merge pull request #11939 from code-yeongyu/feat/10762-omob-two-cargo-calls

  • 32e6bfb Merge remote-tracking branch 'origin/dev' into lane/11964

  • e357654 test(eq): re-record linux-x64 E21-E24 goldens for the remote-screens computer doc

  • 2a28bd1 Merge pull request #11958 from code-yeongyu/feat/omo-win32-private-fd-pair

  • 170220e fix(publish): verify only top-level release files, not payload dirs (#12018)

  • fa1397f Merge origin/dev into feat/11466-cu-remote-typing and regenerate bundles

  • b0991a6 remove-ai-slops: fold the two review LOWs (mark set, --test splitting caveat)

  • aeea2a4 changes: fragment for #12017

  • d0d8c74 remove-ai-slops: name the programming skill's detector and mutation-proof scripts

  • 07bc15b Merge pull request #11968 from code-yeongyu/test-rules/remove-ai-slops-junk-tests

  • eeb81f9 Merge pull request #11869 from code-yeongyu/fix/6631-mcp-request-timeout

  • 07acf3d fix(device-service-core): report the DACL apply error as plain text and show the written SDDL in LA17

  • 7e6e7b7 fix(memory): drop unused classifyFactsFailure export flagged by knip

  • 2bbfa36 fix(memory): resolve parked facts run path via ledger batchId; report /facts retry as started

  • 536dcde Merge remote-tracking branch 'origin/dev' into feat/10146-models-distribution

  • b29ed90 docs(changelog): add fragment for #11909

  • b642e5f feat(memory): name the parked-facts cause and run log in /doctor; report retry outcomes

  • 485d179 Merge remote-tracking branch 'origin/dev' into feat/10762-omob-two-cargo-calls

  • 302a8a4 Merge remote-tracking branch 'origin/dev' into fix/install-key-review-lows

  • 5a4c299 Merge origin/dev (5.1.54 release point) into test-rules/remove-ai-slops-junk-tests

  • b90e17c Merge pull request #11998 from code-yeongyu/release/v5.1.54-source-state

  • ac579e5 fix(device-service-core): apply the exact Windows DACL through SetAccessControl and name the error

  • 98f5549 chore(knip): drop SESSION_READ_WAIT from preExistingExports now that omo remote uses it

  • 6ca1b8b Merge remote-tracking branch 'origin/dev' into feat/omo-win32-private-fd-pair

  • 6a44924 Merge pull request #11941 from code-yeongyu/fix/11940-worker-compile-load-timeout

  • f49050d docs(remove-ai-slops): fold the #11968 review at c7b8b08

  • 33ca5c0 Merge remote-tracking branch 'origin/dev' into fix/11940-worker-compile-load-timeout

  • 1b1f17c fix(device-service-core): write the per-boot token with the platform secure-file helper in the proof test

  • eaf0f04 Merge pull request #11972 from code-yeongyu/test-rules/test-junk-detector

  • 1b239a3 docs(changes): add #12001 fragment

  • 5ee2bc5 Merge origin/dev (c4312cd, #11967 + #11991 merged) into test-rules/test-junk-detector

  • 81c94ee fix(memory-sync): renew the CLI account controller after a transient null read (#11812)

  • 61b3344 Merge pull request #11899 from code-yeongyu/cleanup-r3/omo-train-2

  • 0cfa935 fix(omo-native): exit omo remote attach when the TUI cannot start

  • 3d55d8f test(eq): re-record linux-x64 E21-E24 goldens for the remote-screens computer doc

  • c7b8b08 test(qa): refresh Linux E21-E24 after the remove-ai-slops description fold (#11968)

  • 91d7782 docs(remove-ai-slops): fold the #11968 review at 51ab1bb

  • b23d570 Merge origin/dev into feat/11466-cu-remote-typing and regenerate bundles

  • d21830f test(telemetry): replace a non-null assertion with an explicit guard

  • 56d080c Merge test-rules/programming-testing-refs (dev 5.1.53 + E21-E24 goldens) into test-rules/test-junk-detector

  • 51ab1bb test(qa): refresh Linux E21-E24 for the remove-ai-slops description (#11968)

  • d226b5a Merge branch 'dev' into feat/commandcode-custom-provider

  • ed862a5 Merge test-rules/programming-testing-refs (dev 5.1.53 + E21-E24 goldens) into test-rules/remove-ai-slops-junk-tests

  • 34adee1 Merge branch 'dev' into fix/11551-kept-raw-snapshot-integrity

  • 61936b2 Merge remote-tracking branch 'origin/dev' into feat/10146-models-distribution

  • d6afe4a Merge remote-tracking branch 'origin/dev' into fix/10708-input-identity

  • 126a20b Merge remote-tracking branch 'origin/dev' into fix/install-key-review-lows

  • f0ce60a Merge remote-tracking branch 'origin/dev' into fix/6631-mcp-request-timeout

  • c4134fb Merge remote-tracking branch 'origin/dev' into feat/10762-omob-two-cargo-calls

  • 8f47f58 Merge remote-tracking branch 'origin/dev' into cleanup-r3/omo-train-2

  • 7b6449f docs(remove-ai-slops): fold the #11968 review: proofs per class, run serially by the orchestrator

  • 47412b7 fix(omo-native): close a refused Windows pair's pipes in the hop (#11955)

  • 9749fcf fix(programming): fold the #11972 review notes into the detector and the proof helper

  • daa3add Merge remote-tracking branch 'origin/feat/omo-remote-bootstrap' into feat/omo-remote-attach

  • c4dc5f7 Merge remote-tracking branch 'origin/feat/omo-remote-device-client' into feat/omo-remote-bootstrap

  • a0bd5d2 Merge remote-tracking branch 'origin/dev' into feat/omo-remote-device-client

  • ed3e37e docs(changelog): fragment for #11972

  • f3bbab3 feat(programming): check-test-junk detector and mutation-proof helper on Bun

  • d32e37f docs(changelog): fragment for #11968

  • a088e65 docs(remove-ai-slops): treat tests as a cleanup surface with the junk-class table and proof rule

  • d05c7e8 fix(omo-native): drop the Claude Code UA floor rewrite of the installed engine

  • 421271e fix(omo-native): recognise Windows pipes by their S_IFIFO mode bits (#11955)

  • 58bc4c6 fix(omo-native): classify Windows private pipes by mode (#11955)

  • 8cfafdd test(omo-native): isolate Windows pipe bootstrap failures (#11955)

  • f525701 test(delegate-task): create the distribution fixture home under the OS temp dir

  • 2c5628c docs(omo-native): record Windows pipe pair forwarding (#11955)

  • e1bd792 feat(omo-native): forward Windows private pipe pairs (#11955)

  • df39c78 fix(setup): finish Command Code adoption review

  • 7482d7d Merge remote-tracking branch 'origin/dev' into feat/10146-models-distribution

  • af21ce1 Merge remote-tracking branch 'origin/dev' into fix/6631-mcp-request-timeout

  • 6cb85fd docs(changes): note the git termination diagnostic (#11945)

  • 4a705cc docs(changes): fragment for #11946

  • 8d91547 fix(memory-core): name how a git child ended when it fails without output (#11943)

  • fb6316f test(build): wait for the self-exiting worker instead of terminating it

  • c7c5085 docs(changes): add the #11941 fragment

  • c1d1921 test(build): give the relocated compiled-worker run a load-safe budget

  • 066fdfd docs(changes): add the #11939 fragment (#10762)

  • 08acef3 fix(omob): build the engine trust helper in its own cargo call (#10762)

  • cdb8d70 docs(changelog): record retained raw snapshot integrity fix

  • 38e0c49 fix(ulw-research): validate kept raw bytes before replacement

  • 7d91ee0 Merge origin/dev into feat/11466-cu-remote-typing and regenerate bundles

  • a4a37fd Merge origin/dev into omo train-2

  • ad34934 Merge branch 'feat/omo-remote-bootstrap' into feat/omo-remote-attach

  • d35336b Merge branch 'feat/omo-remote-device-client' into feat/omo-remote-bootstrap

  • db97ee5 fix(remote): spawn PowerShell through node:child_process and preload the PostHog test guard in device-service-core (part of #11853)

  • 805dec6 fix(models): preserve narrow reasoning effort through fallback snapshots

  • 3d33bed fix(config): retain round-robin chains through agent materialization

  • 2e096c0 docs(changelog): record model distribution in PR 11905

  • 6c7cdfb feat(task): distribute category and agent model starts per spawn

  • c9b79df Merge #11879 (cleanup-r3/o-memory-codex-slop) into omo train-2

  • d22dbc0 Merge branch 'feat/omo-remote-bootstrap' into feat/omo-remote-attach

  • 113aeae Merge branch 'feat/omo-remote-device-client' into feat/omo-remote-bootstrap

  • db848a9 Merge remote-tracking branch 'origin/dev' into feat/omo-remote-device-client

  • 79c65e6 docs(changes): fold train fragments into 11899.md

  • 47aff9e Merge #11890 (cleanup-r3/o-oc-hooks-slop-ready) into omo train-2

  • fd45e50 Merge #11884 (cleanup-r3/o-small-cores-slop) into omo train-2

  • 2aa93f7 Merge #11870 (cleanup-r3/o-oc-features-slop) into omo train-2

  • fc78e16 fix(mcp-client-core): cap the request timeout at the timer limit, drop the unused override, document timeout (review #11869)

  • a638463 docs(changelog): note reminder state cleanup

  • d0bba01 refactor(opencode): simplify reminder state lookup

  • 51e43f5 fix(remote): bound attach replay, isolate listeners, bound the keychain read (fixes #11885)

  • c54f98e Merge branch 'feat/omo-remote-bootstrap' into feat/omo-remote-attach

  • cc6cdc3 fix(remote): omo account show exits 0 when signed out; the docstring and tests say so (part of #11853)

  • 6d70a43 fix(telemetry): stop OTLP after install-key rejection

  • f7bdded test(model-core): infer provider lookup fixture metadata

  • 394daaf test(memory): remove redundant queue fixture array assertions

  • 4e9ddbb Merge branch 'feat/omo-remote-bootstrap' into feat/omo-remote-attach

  • 92aa663 refactor(memory): narrow reminder condition keys after clean handling

  • ccdd578 Merge branch 'feat/omo-remote-device-client' into feat/omo-remote-bootstrap

  • a80ab44 docs(changelog): record agent assembly cleanup

  • 30d6a1e fix(remote): detach releases the attach's subscription and settles detached (part of #11853)

  • 8eaabd1 docs(changes): record the MCP request timeout fix (#11869)

  • 3528c96 refactor(opencode): remove redundant agent assembly casts

  • 08ca6eb fix(mcp-client-core): propagate the configured request timeout to skill MCP calls (#6631)

  • cbf85f6 Merge branch 'feat/omo-remote-bootstrap' into feat/omo-remote-attach

  • 1f08b7a docs(changes): fragment for #11864

  • aa5d5e2 feat(remote): omo account show is the first step of every omo remote command (part of #11853)

  • 52bbfaf Merge branch 'feat/omo-remote-device-client' into feat/omo-remote-attach

  • bf1af03 refactor(remote): the local API is omo's own implementation of docs/local-api.md (part of #11853)

  • 5203d2c Merge branch 'feat/omo-remote-device-client' into feat/omo-remote-attach

  • 6717350 fix(remote): lint-ratchet and command-string audit findings before CI (part of #11853)

  • c4adca6 docs(changes): fragment for #11858

  • 15ca2c8 feat(remote): omo remote attach /, observe-only (part of #11853)

  • 14d9408 docs(changes): fragment for #11857

  • 0e8922d feat(remote): device-service SDK over local API v1 and the omo remote command group (part of #11853)

  • bb36b56 fix(desktop-macos): a bare key counts as pressed only once its press went out

  • 4f05a2b fix(desktop-macos): bare remote keys release what they pressed and use a null source

  • 59ae702 docs(changes): fragment for #11749

  • e221e80 chore(knip): list the engine test helper input-calls.ts as an entry

  • d1b5caa feat(desktop-macos): type into Screen Sharing and iPhone Mirroring windows

  • 73fe174 fix(setup): restore OpenCode source naming and scope Command Code guidance to planned runs

  • af90b90 feat(setup): configure Command Code as a models.json custom provider

Thank you to 2 community contributors:

  • @MoerAI:
    • fix(ulw-research): validate kept raw bytes before replacement
    • docs(changelog): record retained raw snapshot integrity fix
  • @surlymochan:
    • feat(memory): name the parked-facts cause and run log in /doctor; report retry outcomes
    • docs(changelog): add fragment for #11909
    • fix(memory): resolve parked facts run path via ledger batchId; report /facts retry as started
    • fix(memory): drop unused classifyFactsFailure export flagged by knip
bun add -g omo-ai

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

NewReleases is sending notifications on new releases.