Gitmoot v0.5.2
A large orchestration + runtime-robustness release: a smarter multi-agent "Orchestra" (goal-anchored synthesis, dependency dataflow, independent verification, human-in-the-loop pauses), more resilient agent/runtime management, and automated cross-platform releases. All changes are additive / opt-in or bug fixes — default behavior is unchanged.
What's new since v0.5.1
Orchestra — multi-agent delegation
- feat(workflow): goal-anchored finale continuations (#418) — when delegated jobs finish, the coordinator's continuation now restates the original goal (resolved depth-stably from the root job) and synthesizes an answer to that goal — reconciling child conflicts and flagging gaps — instead of a generic "decide the next step." Termination semantics are unchanged.
- feat(workflow): deps[] as dataflow (#419) — a dependent leg can now receive
its succeeded upstream dependencies' results (decision, summary, PR, changes,
artifact body) injected into its prompt, so legs build on each other instead of
only knowing a dep finished. Opt-in via
[orchestrate].inject_upstream_dep_context(default off; flag-off output is byte-identical). - docs(orchestra): verifier delegation pattern + built-in template (#421) — a
new built-in
verifiercoordinator recipe for independent (different-model, read-only) checking of delegated work against the goal, generalizing the decompose-and-verify verify leg. Cross-evaluation beats self-grading; documented in both doc trees. - feat(workflow): result-aware non-progress loop detection (#339) —
delegation trees that perturb the work set each round but produce no new
verifiable side effects now trip the loop ladder after a configurable streak
(
[orchestrate].max_delegation_non_progress_streak, default 2), not just the blunt depth cap. - feat(workflow): escalate_human failure_policy (#340) — a delegation can
pause the whole tree durably for a human (
awaiting_human), @-tag them on the PR/issue + surface it in the dashboard Attention list, and resume via/gitmoot resume <jobID> retry|continue|abort. Zero tokens while waiting; a TTL auto-finalizes a never-answered escalation; paused time is excluded from the per-root wall-clock budget. - fix(daemon): pre-flight failures advance the parent DAG (#409, #413) — a
delegation child that fails before its agent runs (checkout / branch-lock /
permission / etc.) now still advances the parent so its
failure_policyfires (includingescalate_human), instead of stranding the tree silently. The checkout guard was also relaxed so a worktree-less delegation child isn't false-failed. - perf(db): index the delegation tree by root_id (#420) — root-scoped engine
lookups now use an indexed
root_idcolumn instead of full-table scans that re-parsed every job, removing an O(n) cost on every child completion under large trees. Behavior is identical. - refactor(prompts): single-source the gitmoot_result contract (#422) — the agent JSON contract is generated from the Go structs at build time with a drift-guard test, so the prompt can't silently diverge from the code; the delegation field docs are now complete (15/15 fields).
Agents & runtimes
- feat(cli):
gitmoot agent restart(#414) — rebind a registered agent to a fresh runtime session in place (preserving role / repo / template / capabilities), instead of remove-and-recreate; refuses while a live session or queued/running jobs are in flight. - fix(doctor): accurate Claude auth health (#414, #427) —
agent doctor,gitmoot doctor, andplugin doctornow run a live Claude probe instead of false-failing when only an env token is missing (foreground works via cached credentials), with daemon-aware guidance that background jobs still need a token in the daemon env. The status iswarn(not a hard fail) when the box is actually authenticated. - feat(cli): record owner PID+host on runtime-session locks (#425) — so
gitmoot agent restart(and recovery tooling) can distinguish a live foreground session from a stranded lock. - feat(skillopt):
recover --generation(#303) — reclaim a stranded SkillOpt option-generation lock (left by a killedtrain continue) and salvage the already-persisted options;--advance-statecompletes the iteration.
CLI, setup & comments
- feat(cli): tagging-ready
gitmoot setup(#428) —setupnow defaults to--watch-issues, so@<agent> ask …mentions on issues route to jobs out of the box. - feat(workflow): readable findings in posted comments (#429) —
findings[]objects render as readable markdown in PR/issue comments instead of raw JSON.
Release & install
- ci(release): automated cross-platform releases + linux/arm64 (#412) —
release binaries (linux/darwin × amd64/arm64, static, CGO-off) are now built,
checksummed (
sha256sums.txt), and attached by a GitHub Actions workflow on release publish; the one-line installer supportslinux/arm64(e.g. Raspberry Pi).
Install / upgrade
- Existing install:
gitmoot update - Fresh install:
curl -fsSL https://gitmoot.io/install.sh | sh