- Terminal monitors and background Bash sessions are recorded per session with a single startup notification
- @code-yeongyu/senpi updated to 2026.9.4-3
- Anthropic native tool search no longer returns 400 errors by fixing the tool_reference field name and gating BM25 server tool injection to supported models
- Korean and non-ASCII characters in memory slugs, git paths, and recall query planning are now preserved with compatibility for directories written by older builds
- GitHub releases are created as full releases and the Latest badge is determined from the highest published semver rather than tag order
- Windows SQLite handle leak no longer stalls the harness by replacing prepare() calls with exec() in credential readers
- Conditional x-search skill ships without startup logging
- Bun skill guidance in ultrawork directive is gated instead of unconditional
- Senpi hooks-state lock is granted to every memory sandbox
- Unsupported isolation traversal fails closed instead of appearing complete
- Diagnostic pull timeout now awaits cancellation write to prevent losing $/cancelRequest on Windows
- PATH senpi executables that do not match the running engine are rejected
- Lead tasklist tools are deferred to tool_search
- Hoisted bin directory resolution for scoped engine packages
- Architect blockers closed in omob pipeline
- Skill-source filter, cache locking, and provenance mirrors root-fixed
- Dev binary built from the latest commits with build provenance
- Page work routes to a real browser before the CLI
- Browser QA and research browsing go through the eval kernel
- CloakBrowser's venv interpreter is used in the launch step
From oh-my-openagent
omo 5.0.0-beta.42
beta.41 was never published: its first release attempt failed the CI gate and the retry re-selected the stale stamp commit, so the number was skipped rather than shipping a tree that lacked the engine bump. This release carries everything intended for beta.41.
Engine: @code-yeongyu/senpi 2026.9.4-3 (beta.40 shipped 2026.9.3-2 — this beta moves the engine across 2026.9.4, 2026.9.4-2 and 2026.9.4-3).
Highlights
Anthropic native tool search no longer 400s
The headline engine fix. Native tool search sent tool_reference blocks under a name field instead of the API's tool_name, and the BM25 server tool was injected on every anthropic-messages endpoint — including gateways, proxies and Kimi-coding hosts that reject it. Either one returned
400 tools.N.tool_search_tool_bm25_20251119.name: Input should be 'tool_search_tool_bm25' (or an opaque invalid-request error), after which the adapter disabled native search for the rest of the session. Injection is now gated to models that actually support tool search (Opus/Sonnet 4.5+ and the Fable line), and the reference field matches the wire contract. (senpi #1354)
Korean and non-ASCII memory finally round-trips
Memory slugs, git paths and recall query planning keep Korean/non-Latin letters instead of mangling them, with compatibility for directories written by older builds. (#7739, #7741)
Release plumbing corrected
Every GitHub release is created as a full release, and the Latest badge is decided from the highest published semver rather than tag order. (#7743, #7761)
Windows: a leaked SQLite handle no longer stalls the harness
node:sqlite's DatabaseSync.close() does not finalize outstanding statements on Bun 1.4, so one
prepare() left the store's file handle open until GC. POSIX hides this (unlink ignores open handles) but
Windows keeps the file locked, and the next open of the same store blocks — sibling-harness detection could
stall for tens of seconds. Every prepare() in the credential readers and their tests is gone, replaced by
exec() with a row-sink function, and a contract test now asserts that no file handle survives close().
(#7775)
Fixed
omo-senpi: the conditional x-search skill ships and no longer logs at startup (#7745); Bun skill guidance in the ultrawork directive is gated instead of unconditional (#7754); the senpi hooks-state lock is granted to every memory sandbox (#7756); unsupported isolation traversal fails closed instead of looking complete (#7769)lsp-core: a diagnostic pull that times out now awaits its cancellation write, so$/cancelRequestis not lost on Windows (#7773)senpi-task: PATH senpi executables that do not match the running engine are rejected (#7758); lead tasklist tools are deferred to tool_search (#7737)omo-native/omob: hoisted bin dir resolution for scoped engine packages (#7755), architect blockers closed in the omob pipeline (#7747), skill-source filter + cache locking + provenance mirrors root-fixed (#7763), dev binary built from the latest commits with build provenance (#7740)shared-skills: page work routes to a real browser before the CLI (#7751), browser QA and research browsing go through the eval kernel (#7750), CloakBrowser's venv interpreter is used in the launch step too (#7757)- Dependencies:
@code-yeongyu/senpipin moved to 2026.9.4-2 then 2026.9.4-3 (#7749, #7772) - Isolation QA snapshots assert the real per-platform contract instead of POSIX-only outcomes, so Windows reports capability failures explicitly (#7770, #7775)
Engine changes (senpi 2026.9.4 → 2026.9.4-3)
- Terminal monitors and background Bash sessions are recorded per session, with a single startup notification for carried-over/lost/expired state, and monitors expose a stable
mon_id whilebash_output/bash_input/bash_resize/kill_bashaccept either id - A spawned RPC host that never answers
get_protocol_inforeports why instead of surfacing a rawpowershell.exefailure, and no longer leaks its pidfile and socket - File-backed credential, auth and settings locks wait through bounded contention retries and report an actionable transient error instead of burning the provider fallback chain
- Image generation treats a seeded placeholder key as absent, so it falls through to a configured gateway instead of failing with an OpenAI 401
- Hook trust-state reads fail open when the lock directory cannot be created (sandboxed/read-only children); writers still fail closed
bun install --frozen-lockfileworks on a clean checkout again
Internal / tests
- Windows
memory-coreunmerged-entry timing (#7767), omob default dirs asserted with the host path separator (#7759), isolation state-race suite determinism (#7770) - Task and memory tool descriptions dieted (-369 tokens) (#7738), shipped skill descriptions rewritten as routing text (#7744), review-work replaced with orchestrator QA plus one gate reviewer (#7742), ulw-research browsing worker made binding and render-first (#7760)