obot.agent v0.4.0
See it move: the annotated v0.4.0 demo walks each change as a real terminal capture with the command that produced it.
v0.3.0 gave obot the ability to run unattended. v0.4.0 is about what that run costs you: a session opens before the model thinks, the dashboard is one click from any status line, write policy is one file instead of two drifting ones, the three things that used to park an overnight run on a permission prompt are fixed, and the release you are reading has a written contract behind it. Nothing in the session-command surface is removed or renamed.
What's new
-
A session opens before the model produces a token. The hand-off — the previous session's priorities, what is waiting on you, what changed overnight — is assembled by a shell script during command expansion, so it is already in the prompt at first paint instead of being rediscovered over several model round trips.
/session-initand/s-initare now the same fast command, andobot-autolaunches unattended leads through it too. (#76, #77, #80, #81 · hub #91, #148) -
Every status line ends with a clickable hub link — the live session ops hub inside the obot workspace, the deployed roadmap hub anywhere else — so the dashboard is one click from any session. The status line also became a tracked, installable artifact under
tools/statusline/rather than one untracked file on one machine, and the watch loop can serve the live view over loopback so the link opens in Chrome instead of Finder. (#52 · hub #24) -
A repo's write policy is one decision in one file. Merge tiers and unattended-autonomy grants used to live in two files needing separate edits per repo, and they had drifted into a state neither could express. They are now one
policy.jsonwhere a repo gets a single profile,obot-policy explain <repo>prints what that profile means in plain words, and branches match by role rather than by name — so a release branch calledmasterorsiteneeds no special-casing. (#59, #61 · hub #18, #140) -
Overnight runs stop parking on permission prompts. Spawned agents were handed a worktree path outside
.claude/worktrees/— the only location Claude Code auto-approves — so each one waited for a click that, unattended, means until morning. A new triage table also tells you in one command why a session is missing from Remote Control, and the wrapup rebuilds the Analytics cost data before it posts so the spend page stops going stale. (#69, #63, #67 · hub #18, #46) -
What needs you is the first thing a wrapup says. Every wrapup output — checkpoint page, diary entry, morning digest, closing message — now opens with the release candidates awaiting review and the decisions awaiting your call, each linking its PR and its demo or decision artifact, with the work log underneath. Both lists carry forward until you close them, decisions post to the hub's Q&A discussions where you answer in-thread, and a risk named in a wrapup becomes a tracked issue carrying a proposed mitigation. (#83, #85, #71, #72 · hub #142–#144, #148)
-
Releases now have a written contract.
docs/rc-framework.mdstates what reaches your review queue — release candidates and decision artifacts, nothing else — and what a candidate must carry, with a deployed demo page as a hard gate. The companionrc-release-notesskill puts the notes in a repo'sNEWS.md, demo link first, and the tag publishes that section verbatim on approval. This file is that convention applied to obot.agent itself. (#83, #86 · hub #123) -
Releases are now real, reviewable PRs. A lagging
stablebranch, cut at v0.3.0, gives this repo what it never had: a base to propose a release against. Each release is amain → stablePR whose diff is exactly the release window, carrying the RC roles and merging only with explicit approval — the release you are reading arrives that way. The same decision set the program's governing principle (operational repos self-improve with automatic merges tomainand periodicstablereleases; user-facing clinical work is reviewed before prod) and the NEWS.md convention this heading follows: every repo keeps a NEWS.md current inmain, unreleased work under a(Upcoming)heading. (decision record) -
The test suite runs in CI. Every push and pull request now runs the full 112-test suite plus the policy-file validator on GitHub Actions — previously this repo had no CI at all, which mattered rather a lot for a repo whose merges to production are automatic. A red check now blocks a broken
maininstead of a morning surprise. -
Prime remembers across restarts. The standing Q&A session writes its durable state to a capped, provenance-stamped
prime-state.md, and a cold session rehydrates from one read viatools/prime-rehydrate— including across midnight, which the first version got wrong and a same-night fix corrected. (#91, #94 · hub #154) -
/grill-meinterviews you about a goal — a resumable, multi-session elicitation interview that extracts what you want built, including the parts held tacitly, before requirements are filed. (#96) -
Thirteen session commands have one-word aliases, and three are new:
/s-ideafiles a half-formed thought to the triage queue without derailing the session,/s-reviewswalks the PRs waiting on a decision one at a time, and/s-primeruns a session as the standing question desk — a long-lived session that answers from warm context in seconds and delegates anything slower. (#64, #84 · hub #48, #114)
Also in this release
- The roadmap audit queue costs no tokens until you click, and batches submit in parallel with per-agent worktrees so concurrent applies stop colliding. (#55, #56 · hub #92, #109)
- An upstream audit you can hand over: five ready-to-file
gsm.qtlissue drafts, each with a runnable repro, atdrafts/gsm.qtl/. Re-verified against current upstream on 2026-08-14; they stay drafts because agents do not write outside thejwildfireorg. (#62) - Milestones stopped being optional. No work starts on an issue until it carries a milestone, and a release names the issues it ships —
obot-mergenow refuses any merge whoseClosestarget has no milestone, and a release-branch merge whose body names no issue at all. The rule is written where an agent hits it before branching:--autoincrement selection, the release-notes procedure and the RC checklist. safety.viz v1.6.0 shipped the night before this landed grouping none of the four issues it delivered. (#89 · hub #123) - A note on the merge lane. Three
obot-mergecalls in this window were denied by the Claude Code auto-mode classifier and succeeded on a plain retry, which briefly looked like a threat to the whole unattended model. It was not: 3 denials in 99 real invocations, traced to the one command spelling the workspace permission allowlist did not cover. The allowlist rule landed on 2026-08-14 and the three merges that closed this release went through on the first attempt. Evidence and reasoning: decision artifact.
Tests and provenance
112 tests are green across the status line, session hub, serve loop, audit lane and the merge gate, up from 66 at v0.3.0 (node --test tools/session-hub/test/*.test.mjs tools/statusline/test/*.test.mjs scripts/test/*.test.mjs), and the suite now runs in CI on every push and pull request. Every capture on the demo page is real output from this machine with its reproduce command executed before publication.