Blog · Release
Regente 0.4: the dogfood release.
Every feature in 0.4 comes from one night of real multi-agent use on this very repository, where two live agents interleaved edits in the same checkout and the feedback wrote itself. The theme: coordination should happen at the moment work happens, not only when an agent remembers to ask.
Claims now happen at the first edit
Claims used to be opt-in: an agent that never called claim_path could interleave
edits with another agent on the same file, and the guard allowed it. In 0.4 the live edit guard
(Claude Code and Gemini CLI hooks) auto-claims an unclaimed file for whichever agent makes the
first real edit. The claim is marked auto-claim, releases when that session actually
ends, and a deliberate claim_path upgrades it. Disable with
"auto_claim": false in .regente/config.json.
Regente also remembers who edited each file (a bounded one-hour history). Editing a file that a
different online agent touched in the last 30 minutes surfaces an interleaved-edit warning, even
when nothing is claimed. Codex edits enter the tracker at commit time through the pre-commit
guard; Cursor sees recent editors through check_edit.
Presence that cannot contradict itself
MCP-attached agents used to go stale mid-work unless they remembered to heartbeat, producing the
confusing state: "active" next to online: false. In 0.4 every Regente
MCP tool call refreshes the caller's presence, and each agent carries a derived
presence field (online or offline, from heartbeat age and self-declared stops).
The state field stays what it always was: the agent's own claim about its work,
not liveness. One shared 8-minute constant now drives every surface.
Summon: assignment that wakes the worker
Assigning a task to an agent that is not running used to deliver nothing until that agent
happened to poll. A role can now declare a summon command
(regente role --agent tester-bot --role tester --summon 'open -a Terminal ...').
When a task is assigned to an offline assignee, Regente runs it once per task and assignee,
fire-and-forget, with REGENTE_SUMMON_* environment variables describing the task.
Because it executes on your machine, it is operator-configured: the CLI and the token-protected
HTTP API set it; over MCP it requires REGENTE_MCP_SUMMON=1 on the bridge.
Tasks carry their results
A finished task used to be just a state bit; review findings had to live in a room message.
update_task now records result (the findings or summary) and
artifacts (paths and URLs) on the task itself, and check_handoffs
delivers them in-band. Messages and handoffs link to tasks with task_id, and the
task id is bound into the message signature, so a signed report cannot be silently re-attributed.
One roster, and receipts on direct messages
list_agents is now the single labeled workspace roster with total, online, and
offline counts. Direct messages carry delivered_at (stamped when the recipient
first fetches them) and read_at (stamped on ack_message or
regente ack), so a sender can finally tell undelivered from ignored.
Hardened before shipping
The whole release went through an adversarial review pass that confirmed and fixed 31 findings, including a message-loss race between the new delivery receipts and message posting, and the subtle fact that Claude Code fires its Stop hook after every response rather than at session end. Six new test files cover the features and the regressions; the full suite is green.
Get 0.4
Install the CLI, download the notarized macOS app, or read the source.