Released: 2026-09-27
Added
- Official checksum-pinned Herdr 0.9.1 releases replace the vendored patch and Rust/Zig
build. Senpi's built-in integration owns reports; OLW recognizespiandomowithout
duplicate session reports. Owned clones use upstream groups andworktree.create.
olw doctorblocks the operational switch and lists remaining legacy parents. Existing
servers, installed binaries and caches are untouched; one-release rollback is documented.
New linked parents (--repo), children and successors of legacy parents are rejected with
legacy_parent_unsupportedbefore external side effects; close/migrate with approval or
continue those parents with the retained pre-switch OLW and patched Herdr together. - Pinned-by-default OMO model routing with accepted baselines, route-level upstream advice,
selectiveapply/dismiss, optionalfollowmode, launcher and manager notices, and catalog
health review for removed or degraded models. Advice is read-only until explicit acceptance. - Issue deliverables (
pr,report,document) on bindings, briefs, packets and status. Owned-clone
children publish one PR into their parent's integration branch;pr openreuses open PRs and
pr mergechecks the reported head and merges with a merge commit. PR-less results require a
deliverable path. Project PRs stop for user review; legacy local merges remain deprecated but unchanged. - Fetch-before-close publication guards for owned parents and their PR children, with explicit
--discard, and isolated bare-remote/gh-shim PR lifecycle QA. - New mapped parents run in OLW-owned, hardlinked clones of repository mirrors, with readable
per-project Herdr groups and child worktrees owned by the parent clone. Explicit private local-file
copies, setup deadlines/logs/receipts, and close-time unpushed-commit reports are supported.
Legacy checkouts remain unchanged;parent create --repoconflicts with a mapping (later rejected; see the official Herdr entry). - Scope projects can declare a target Git remote and default branch. OLW maintains one locked,
fetch-only mirror per remote and exposes mirror status and explicit fetching througholw doctor
andolw repo list|fetch. - Child modes:
child create --mode direct|planned|research. Aplannedchild runs
a plan stage (opencodex/anthropic/claude-fable-5-1xhigh, ulw-plan) and then an
execute stage (opencodex/anthropic/claude-opus-5-5medium, ulw-execute driving
mass-ulw) in the same worktree, each in its own Herdr tab and binding.stage completerecords the plan hand-off (path, sha256, head) andstage start --stage executestops the plan session and opens the execute stage.status
showsmode,stage,stageBindingsandopenQuestionsper lineage generation;
closeon any stage closes that generation and its workspace once. The parent
sends the issue packet to the execute binding; nothing transfers automatically. - Questions and answers:
questionandanswermessage kinds, theolw_asktool
in bound child and parent sessions (nativeask_user_questionis blocked there),
and theask,answerand read-onlyquestionscommands. A parent's question
goes to its ready manager or, without one or with--to-user, to the user inbox;
answer --as-useranswers an inbox question. - The manager:
olw manageopens or reattaches the scope-free management session
inside the OLW host with the user's default model (fallback Opus 5.5 medium).
Parents created while it's ready link to it automatically;parent create --no-manageropts out.manageruns an update check at start and puts the
result in the manager brief. - Update automation:
olw update checkreports the pinned OMO and Senpi versions
against the npm dist-tags (omo-aibeta,@code-yeongyu/senpilatest) and
never installs;olw update preparebuilds anolw/update-omo-<v>-senpi-<v>
branch from the selected remote'sdev(defaultorigin) in a separate worktree, runs install, typecheck, test and
build there and opens a PR todev(draft if anything failed). Neither touches
the live host. mediumis an accepted thinking level for role models.- User-managed opencodex model metadata catalog (
MODEL_CATALOGin
src/proxy/model-catalog.ts). It overrides the context window, output limit,
input modalities and reasoning flag that ocx exports late or wrong, for example
the 32000 output stand-in on every model (lidge-jun/opencodex#5828). The
managedomolauncher and role panes loaddist/extension/model-catalog.js,
which re-registers corrected models at session start.
bun run proxy:routing cataloglists the active changes and any redundant or
stale entries. - Issue children start in packet-bound mass-ulw mode, using native phase workflows
and independent artifact verification before reporting to the existing parent. - Real child workflow QA for successful execution and recovery of invalid work
without repeating successful nodes:qa:child-workflow happy|failed-node. - Model chain warnings on every managed
omostart, inolw doctor(under
chains, stillok) and viabun run proxy:routing chains: a category or
agent with no working model or a single remaining model, and OLW role models
missing from the opencodex catalog. Warnings never block a start and print once
per change. - Durable execute-stage launch intent: concurrent recovery of an execute stage is fenced to
one launch, andreconcilesettles a recovery whose outcome is uncertain.
Changed
- CI now records exact-commit results for every
devmerge and rejects pull requests into
main. Owner-authorized releases validate that evidence, publish an immutable source tag and
GitHub release, then fast-forwardmainwith dedicated release credentials. The first release
after adopting the workflow is bootstrapped by an owner-pushed tag; later releases use dispatch. - Repository policies follow
docs/policy/: PRs targetdevand merge with a merge
commit,mainonly advances to released commits, and issue and PR text is in
English. Issue forms are nowbugandproposal. - Pinned the official
omo-ai5.0.0 and@code-yeongyu/senpi2026.9.26 releases, retaining only runtime-repair hunks that remain necessary. - Models route through opencodex. The routing synchronizer reads the
opencodex-owned catalog inmodels.json, and OLW role pins useopencodex. - Child fixture standby permits internal workers only after explicit instruction;
creating additional OLW roles and accessing live Linear remain forbidden. - Only children may hold an issue-packet goal. Supervisor/parent waiting and model
assignments remain unchanged; existing bindings are not reinitialized. - An upstream xAI route is followed by the same model on Cursor when opencodex
publishes it (xai/grok-4.7, thencursor/grok-4.7). No other same-model host
becomes a second lane. - A managed category or agent route whose upstream choices opencodex no longer
publishes is written without models and listed asunroutable, instead of
rejecting the whole routing update. stage start --stage executerequires an accepted plan report and an unchanged plan file;
legacy hand-offs without one fail closed. Repeating an identicalstage completeattaches
the accepted report id to the hand-off. Reported plan paths are resolved.- The manager session keeps the user's native model and thinking level instead of
pinning them. - A report addressed to a paused manager goes to the user inbox.
- The child CLI
askcommand is rejected; children use theolw_asktool.askstays
available to parents. update preparerejects a stale check or one that isn't an upgrade, targets the selected
GitHub remote withgh -R, reuses an existing remote pull request, and skips typecheck,
test and build after the install step fails.--remoteaccepts GitHub remotes only.- Repository mirror locks use a kernel
flockthat the spawnedgitinherits.
Removed
- The CLIProxyAPI model extension (
dist/proxy/index.js), its/proxy-refresh
command, access files and manual-first CLIProxyAPI policy document. Role
launches and the shared host profile no longer load it. Remove that path from
OMO'ssettings.jsonextensions. A routing receipt without a provider is
still re-planned at the next start.
Fixed
- Upstream Sol Fast selectors are routed to standard-tier Sol through opencodex;
Luna keeps its Fast row. Sol's priority tier cost too much for its speed gain. - The managed
omolauncher works with omo-ai installed through bun (5.0.0 and
later). It finds the omo-ai package from its manifest instead of assuming a
symlinked bin, so the generated bun launcher script no longer fails the routing
preflight withENOENT ... ~/.bun/package.json. - Once routing has been adopted, a failed routing preflight no longer blocks the
interactiveomolauncher: it prints the error and starts OMO with the retained
routing. Before adoption, and for OLW role launches, a failed preflight still
stops the launch. pr mergematches the child's report to the requested PR instead of the latest
report from that binding.
Security
- Explicit local-file copies are anchored to directory handles inside the owned checkout,
reject C0 and C1 control characters at both path boundaries, and surface cleanup failures.
Receipts store only a source label, never the source path. - Git remote arguments get explicit option boundaries (
--), so a remote name or URL can't
be read as a flag.
Migration
Do these steps in order after pulling v0.2.0.
- Rebuild the control root. Run
bun run install:localfrom the checkout, or follow the
upgrade steps in docs/policy/releases.md. Running
Herdr servers and OMO sessions keep the old code until you close and recreate them. - Switch to official Herdr. Run
olw doctor;legacy_parents_remaininglists every
linked-worktree parent from 0.1.0. Close or migrate those parents first, with approval,
or keep them on the pre-switch stack. Then remove
~/.omo/agent/extensions/herdr-senpi-agent-state.tsand restart the Herdr server.
Rollback for one release is to keep the pre-switch checkout and its patched Herdr
artifact directory; see docs/operations.md. - Stop using
parent create --repo. It's rejected withlegacy_parent_unsupported. Map
each project to a repository in the scope snapshot instead; the format is in
docs/repositories.md. - Routing is pinned by default. Existing installs migrate without rewriting
omo.jsonc.
Runbun run proxy:routing baseline saveonce so the baseline gets a catalog snapshot;
until then,proxy:routing statusreports that the save is needed. - Remove the CLIProxyAPI extension path (
dist/proxy/index.js) from OMO'ssettings.json
extensions, as noted under Removed. - Children that called the CLI
askcommand must use theolw_asktool. The command
itself stays for parents.