Repository navigation
Releases: steig/worktender
Release list
v0.16.1
v0.16.0
What's Changed
- feat(draft): propose acceptance checks for an issue, for a human to approve by @steig in #232
- docs(acceptance): use a real command in the example check by @steig in #233
- fix(draft): read an export of tracked files, narrow what a check carries, ask before --write by @steig in #234
- fix(draft): remove the temporary export when interrupted by @steig in #236
- test(stats): check that the role start records reaches stats by @steig in #241
- fix(factory): remove factory:in-progress from closed issues by @steig in #242
- fix(factory): resolve the repository for --dry-run as a real pass does by @steig in #240
- fix(draft): drop greps of source files, steer the drafter to narrowed tests by @steig in #246
- fix(start): gate on the pane, not the agent name herdr can drop (#243) by @steig in #247
- feat(prune): close a ghost workspace whose worker is done and whose PR merged by @steig in #248
- chore(release): 0.16.0 by @steig in #249
Full Changelog: v0.15.0...v0.16.0
v0.15.0
What's Changed
- feat(start): hold factory:ready issues to runnable acceptance checks by @steig in #217
- feat(factory): start factory:ready issues from a queue under a cap by @steig in #216
- feat(pr-feedback): cap automatic feedback rounds per PR by @steig in #225
- chore: follow-ups from #214, #217 and #218 by @steig in #224
- feat(stats): escapes and
stats --checkalerts (slice 2 of #204) by @steig in #227 - feat(lessons): propose, approve and brief per-role lessons (slice 1 of #205) by @steig in #228
- feat(review): check a worker's PR against its acceptance checks before a human by @steig in #226
- chore(release): 0.15.0 by @steig in #229
Full Changelog: v0.14.0...v0.15.0
v0.14.0
What's Changed
- feat(gate): say whether each outcome was verified, reported, or inferred by @steig in #209
- feat(ls): show the agent's last activity from its session-log mtime by @steig in #212
- fix(start): never type the brief onto Claude's trust screen by @steig in #213
- feat(watch): route a PR's failing checks and new reviews to its worker by @steig in #211
- feat(refocus): re-deliver a worker's goal chain after compaction by @steig in #215
- test(herdrtest): print fake answers with cat, never echo by @steig in #218
- feat(stats): dispatch ledger and
worktender stats(slice 1 of #204) by @steig in #219 - feat(gate): --dagr keeps a herdr-dagr run file current while waiting by @steig in #220
- docs: catch the coordinator skill, README and reference up to 0.14 by @steig in #222
- feat(refocus): re-deliver a worker's goal chain on its role's interval by @steig in #221
- chore: release 0.14.0 by @steig in #223
Full Changelog: v0.13.1...v0.14.0
v0.13.1
What's Changed
- fix(watch): watch this repository by default, and stay quiet in workers by @steig in #194
- chore: release 0.13.1 by @steig in #195
Full Changelog: v0.13.0...v0.13.1
v0.13.0
What's Changed
- feat(roles): --role, user config and label routing by @steig in #188
- feat(roles): design/analysis briefs, example agents, roles docs by @steig in #189
- feat(watch): a Claude Code mod that watches the fleet for the coordinator by @steig in #190
- test(inbox): match search results by thread, not anywhere in the line by @steig in #191
- fix(ls): honour --reports with --all-repos by @steig in #192
- chore: release 0.13.0 by @steig in #193
Full Changelog: v0.12.0...v0.13.0
v0.12.0
Added
-
lslabels its columns, and--sortorders the rows. (#179) The table
printed up to eight columns and said what none of them were, so every reading
of it started by counting cells against the README — and the listing is
watched on a refresh loop, where that cost is paid again every time. A label
row is now drawn by default;--no-headerleaves it out for anything parsing
the table by line.--sorttakesstatus,seqorbranch.statusranks
by how much the row wants a person — blocked, idle, done, working, then the
worktrees with no agent — rather than alphabetically, andseqis lowest
first, because the counter only ever answers which worker herdr saw move
longest ago. Ties keep git's order, no--sortkeeps it entirely, and the
order applies to--jsonas well as the table. -
scripts/install.sh— worktender without herdr and without Go. (#144)
The degraded path #143 built never fired on the only install route that
existed:herdr plugin installmeans herdr is present by definition. One
documented step now puts the binary onPATHfor someone who runs neither:curl -fsSL https://raw.githubusercontent.com/steig/worktender/main/scripts/install.sh | shIt follows
releases/latestto a tag and pins both the binary and the
checksums.txtto that one release, verifies the SHA-256 before making
anything executable, and fails closed — a missing checksum line is as fatal as
a mismatched one, and every failure path removes the staged download. Nothing
is ever written to the destination path unverified, and it never wants sudo.
--versionpins a release,--dirmoves the destination off~/.local/bin.
See Trust for what the checksum does
and does not prove.
Changed
- The release workflow stamps the version into the binary. (#144) A plugin
install reads its version out of the manifest beside it and a standalone
install has no manifest at all, so without thisdoctorcould not name the
release it was — half of what that command is for. updateanddoctoranswer for a standalone install. (#144)update
moves a plugin checkout forward and a standalone install has none, so it
names the one step that does — re-running the installer — rather than
reporting a missingherdr-plugin.toml. It deliberately does not run that
itself.doctor'sversionline reports the release and says plainly that
nothing compared it against the newest. A binary that is neither — a hand
go build— is still told what was looked for.- Resolving the binary is PATH-first everywhere it is documented. (#144)
herdr plugin list --jsonis not available to a standalone install, so the
README, both skills,docs/dispatch.mdanddocs/json.mdnow take what is on
PATHand fall back to the plugin root.doctorsayson PATH alreadywhen
typingworktenderreaches the binary printing the line.
Fixed
- A pushed tag now reliably gets a release carrying the build assets.
(#182)release.yml'spublishstep rangh release create, which is
fatal when a release already exists for the tag — and one usually does,
because the release object with hand-written notes is created from a
laptop, which is also what pushes the tag. Every release from v0.10.0
through v0.11.2 built and checksummed fine and then failed to publish with
a release with the same tag name already exists, shipping with zero
assets attached. Nothing downstream said so:scripts/install.shand
scripts/build.sh's no-Go fallback just 404 on
releases/download/v<version>/worktender_<os>_<arch>. The step now goes
throughscripts/release-publish.sh, which creates a release only when the
tag has none and always ends ingh release upload --clobber, leaving
notes already on an existing release untouched. Losing the create to
something else — two runs of the workflow for one tag — is not fatal
either; whoever won made the release this run still has to upload to. And
the assets are checked to be real files first, becauserelease.yml
passes an unquoteddist/*and an emptydist/would otherwise publish
the literal glob.
v0.11.2
Fixed
- The
worktreesandcoordinatorskills now say when toinbox post,
not just how. (#176)inboxshipped, was tested and released, and went
completely unused through a multi-hour cross-session coordination effort
that was exactly its intended case — liveSendMessagedelivery already
satisfies the immediate need, so nothing prompted anyone to also log it
durably. Both skills now name the trigger: before sending a cross-session
message that isn't purely "go now" — a decision, a handoff, a status
another session will need after this one is gone — post it too.
v0.11.1
Fixed
skills/worktrees/SKILL.mdandskills/coordinator/SKILL.mdnow
documentinbox. (#174) They shipped without it when #170 landed after
the skills were last touched — a gap that mattered once nixos-config
started deriving its vendored copies straight from these files at the
pinned tag instead of hand-copying them.- The README now says plainly that
herdr plugin installdoes not put a
skill anywhere Claude Code looks. (#173) It clones this repository and
builds the binary, and the clone does containskills/, but no coding
session's working directory is ever inside a herdr plugin install and
nothing about Claude Code's skill discovery reads one. Also documents the
steig/skillsClaude Code marketplace as a third install path, alongside
the two (npx skills add, hand-vendoring) already there.
v0.11.0
Added
inbox: a global, threaded, durable log for agent-to-agent messages.
(#169)inbox post --thread <id> --from <name> --note <text>appends to
<plugin state dir>/inbox/<thread-id>.ndjson;inbox read --thread <id>
replays a thread in order;inbox search <query>substring-matches across
every thread. Fleet-wide rather than scoped to one repository, and pull-only
— there is no watch or subscribe, and it is not wired toSendMessageor any
other live channel, deliberately: an agent that wants a message durable
calls both. No retention yet; append-only.