Repository navigation
Releases: stump-wtf/harness
Release list
v0.17.0
harness v0.17.0 adds an MCP stdio bridge for inspecting and controlling the daemon (status, runs, logs), renders pipe-run live streams as readable entries in the logs, and feeds those streams into the observer's fan-out. Fixes cover byte-faithful attach output, keystroke ordering and skewed host clocks.
Features
- Expose daemon status, runs, logs and controls over MCP stdio (5b4da15)
- Render pipe run streams as readable entries in logs (fa46f26)
- Feed a pipe run's live stream into the observer's fan-out (767bddb)
Fixes
- Keep the readable attach byte-faithful for interactive output (5948a6f)
- Keep attached keystrokes and pastes in typed order (7dfd209)
- Clamp proctree started_at against skewed host clocks (dad82be)
Docs
- Describe pipe run stream rendering in the logs docs (ac21b20)
Maintenance
- Settle the live capture before comparing it to the finished log (0d15172)
- 1 dependency update
Full changelog: v0.16.0...v0.17.0
Executed via scheduled Harness using glm-5.3-flash in Crush
v0.16.0
harness v0.16.0: run lifecycle hooks (pre_run/post_run) with templated per-run workdirs, a graceful stop flag for stop, restart and daemon shutdown, and a fix keeping Shift/Ctrl cursor-key and Shift+Tab bindings while attached.
Features
- graceful stop flag for stop, restart and daemon shutdown (#990) (4961446)
- pre_run/post_run hooks + templated per-run workdir (#983) (f24d7fa)
Fixes
- keep Shift/Ctrl on cursor keys and Shift+Tab when attached (#988) (0910f03)
Maintenance
- 1 dependency update
- test: let a spawned test daemon bind its own metrics port (#989) (062b47f)
- test(attach): wait on replay frames, not the snapshot, in tail ordering (#991) (419d838)
Full changelog: v0.15.0...v0.16.0
v0.15.0
v0.14.0
harness v0.14.0 batches merge-train PRs onto a single train commit, lets command packages run bundled scripts via {{package.dir}}, and fixes schedule state reporting and bundled-file scan listings.
Features
- Batch PRs onto one train commit (SPEC-0025 REQ-17) (a100d19)
- Let a command package run its bundled script with {{package.dir}} (46e0d5b)
Fixes
- List every bundled file with its scan status (6bfc7b9)
- fix(surfaces): a stopped schedule reads disarmed, not armed (e83d486)
Maintenance
- 1 dependency update
Full changelog: v0.13.0...v0.14.0
v0.13.0
harness v0.13.0: quota parks, the budget day, package env vars and READMEs, harness stable, trigger event context, and health and stall watchdogs.
Features
- per-harness health_cmd probe with restart/notify action (#960) (301a457)
- progress-based stall_timeout watchdog (#959) (a904a52)
- stable lint and stable check for stable checkouts (38c6a3d)
- event context, typed{} envelope metadata and event.* template paths (15e4228)
- announce a quota park once, with its reset and rule (0b4ddbd)
- park a harness on an exhausted quota until the reset (0804139)
- let packages suggest supervision defaults you choose (#931) (479d52d)
- promote agent stable to top-level harness stable (977ae66)
- show the package README at info, install and upgrade; flag a package without one (8ef41bf)
- declare package env vars in [[env]]; doctor checks them (08ae398)
- SPDX [package].license field (7418cbb)
- one admission funnel, the budget day, max_runs_per_day (725309d)
Fixes
- retry each fuzz target once to survive the stop-window flake (abb5af1)
- reset channel backoff from accumulated healthy streams (66687aa)
- admit a restart before stopping the running process (0beefe0)
Docs
- document the trigger event context for v0.13.0 (4f98d99)
- amend ADR-0044 so a package can suggest supervision defaults (e455fa0)
Maintenance
- 6 dependency updates
Full changelog: v0.12.0...v0.13.0
v0.12.0
Changelog
Features
- c4e9376 feat!: hold reasons (hours, quota, budget); hold_reasons replaces held (#898)
- fd401d5 feat(config): parse and validate run budget keys and [budget] (#896)
- 63af3df feat(modelerr): one model-error classifier, plus ResetAfter (#897)
- 2e2e911 feat: agent list, describe attribution and the doctor pin row (#815) (#885)
- d003841 feat: agent packages content scan and confirmation gate (#812) (#880)
- a02f598 feat: agent stables — [stable.*], stable add/remove/update/list, search and info (#811) (#878)
- 9d85f77 feat: harness agent install, uninstall and prune (#813) (#883)
- b935d44 feat: harness agent upgrade — resolve, diff, rescan, re-pin (#814) (#884)
- 7e013d6 feat: model API config, chat-completions client and gate-call layer
- ff1af1a feat: ordered skill merge, shadowing diagnostics and spawn-time projection (#75) (#892)
- 74645c1 feat: packages ship one-shot prompts; package paths stay inside (#908)
- b38036e feat: prompt_template and prompt_template_file (SPEC-0017 REQ-5, REQ-7) (#905)
- 6d190dc feat: the package skill tier in the ordered skill merge (#816) (#893)
- ce9dfcf feat: upgrade effective-value review and the confirmed-scope write (#882) (#887)
- 1dd674b feat: verify the standard-webhooks signature scheme on webhook routes (#904)
Fixes
- 2f2ed8a fix(docs): renumber agent-package-stables off ADR-0040 (#872)
- 009e0a2 fix(mergetrain): keep stacked PRs out of the train (#873)
- 97d2757 fix(modelapi): one deadline per screen, so a freed slot cannot outlive it (#918)
- 3fe65d4 fix(notify): a triggered harness's failed run is not a give-up (#895)
- e63e3a2 fix: capture socket peer credentials on darwin (#889)
- ffa4e0e fix: prune keeps pins that kept review paths point into (#891)
- 90ba6f2 fix: register an events subscription before the daemon's HELLO reply (#879)
- 1f19ff5 fix: report socket peer credentials on darwin (#890)
- 0390493 fix: skip value continuation lines when finding a key (#888)
- e4fa9d8 fix: stop claude-code preview and attach output staircasing (#881)
- af97649 fix: the upgrade review covers skill_paths (#816 follow-up) (#894)
- 9a2a335 fix: trace enabled-intent changes and alert on boot-dormant autostart (#835) (#866)
Other
- e4c3390 toil: consolidate on agent-trace's shared credential redactor (#916)
harness v0.11.0
harness v0.11.0
A supervision release: harness now tells you when an agent is stuck waiting at a prompt, lets you query run history across harnesses even when offline, and folds token, cost and model information into every run.
Highlights
- See stuck agents immediately. A harness sitting at a prompt waiting for input gets a waiting marker in the harness list, with a capture of what it is showing, so nothing idles in silence (4047571).
- Query the run ledger across harnesses, offline.
runsnow answers questions about run history for every harness at once, and without a live daemon (72887eb). - Tokens, cost and the served model on every run. Usage reports and observer activity are folded into the open run, so a run's cost is part of its record, not a separate report (06a34c1, 1fe9520).
harness stopnow suppresses the schedule. Stopping a harness no longer lets the scheduler immediately bring it back (d0e8c36).- Readable stream-json in attach. Agents that speak stream-json render readably in attach and the preview, via a line mux that needs no emulator (2be6adf, 1ea4026).
- A more durable ledger. A synced line is acknowledged only once it is committed, fixing acknowledgement races (31134eb).
Features
- Surface stuck-at-prompt harnesses via a waiting marker and capture (4047571)
- Query the run ledger across harnesses, and offline (72887eb)
- Fold usage reports into runs: tokens, cost, served model (06a34c1)
- Fold observer activity into the open run (1fe9520)
- Attach stream-json one-shots through an emulator-less line mux (1ea4026)
- Comment-preserving, atomic
harness.tomltable editor (881b514) - Agent package manifest schema, pin store, and source resolution at load (b2a2b02)
Fixes
- Render stream-json readably in attach and the preview (2be6adf)
harness stopsuppresses the schedule (d0e8c36)- Ack a synced ledger line only once it is committed (31134eb)
- The boot scan no longer lists a trimmed skip's update as a Partial stub (0377ad9)
- Bound the shift-passthrough mouse release window (91205a3)
- Log config load warnings and show them on doctor's config row (2232378)
harness.tomlediting: array-aware headers, dual-spelling add, validated keys (8b883bf)harness.tomlediting: replace the whole value and tidy only the removal seam (16408e4)- Follow the harness's package source through the edit round-trip (704c6b5)
- Carry the pin reference on the agent-package wire and name it PackageSource (0ea2eca)
- Security:
get_trajectoryreads only sessions it reported (370435e)
Reliability & tests
- Notify tests wait on deliveries, not files, and no longer race a wall-clock hook budget (50a27e9, 3505c1c)
- Transcript live appends are gated on the sessions' baseline reads (37da254)
- Run history is counted only after the ledger commits the burst (d396e28)
- Ledger fsync is skipped in the metrics, scheduler and remote test binaries (f66c404, 3dce799)
Install / upgrade
brew install stump-wtf/tap/harness
# or: brew tap stump-wtf/tap && brew install harness
brew upgrade harness
Binaries for Linux and macOS (amd64, arm64) and checksums.txt are attached below.
Full changelog: v0.10.0...v0.11.0
Executed via scheduled Harness using Qwen3.8-27B in Crush
v0.10.0
Changelog
- b0dec5c Merge branch 'main' into feat/480-trigger-metrics-v2
- 6cf3fd1 Merge branch 'main' into feat/480-trigger-metrics-v2
- 7dd2d3d Merge branch 'main' into feat/480-trigger-metrics-v2
- 4e2e764 Merge branch 'main' into feat/480-trigger-metrics-v2
- dc05f6c Merge branch 'main' into feat/506-pi-omp-adapters-v2
- 720b00f Merge branch 'main' into feat/506-pi-omp-adapters-v2
- 2bddad3 Merge main into feat/structured-oneshot-pipes
- f57b4e7 Merge origin/main: adopt the [daemon] process-settings pattern (#789)
- 40dc347 Merge origin/main: resolve against byte-bounded scrollback (#793)
- e0efd3b Merge remote-tracking branch 'origin/main' into feat/480-trigger-metrics-v2
- 8bdd16e Merge remote-tracking branch 'origin/main' into feat/480-trigger-metrics-v2
- 20b801f Merge remote-tracking branch 'origin/main' into feat/506-pi-omp-adapters-v2
- c6b1964 Merge remote-tracking branch 'origin/main' into feat/506-pi-omp-adapters-v2
- 5125f0c Merge remote-tracking branch 'origin/main' into feat/506-pi-omp-adapters-v2
- 4f2d773 Merge remote-tracking branch 'origin/main' into feat/506-pi-omp-adapters-v2
- 7ca8a78 Merge remote-tracking branch 'origin/main' into feat/506-pi-omp-adapters-v2
- ad87a6c Merge remote-tracking branch 'origin/main' into feat/compress-sealed-logs
- 99c9a05 Merge remote-tracking branch 'origin/main' into feat/daemon-memory-guardrails
- 158f3cf Merge remote-tracking branch 'origin/main' into review-791
- 45c2887 Merge remote-tracking branch 'origin/main' into review-792
- 520d244 Merge remote-tracking branch 'origin/main' into review-792
- a028864 feat(adapter): declare claude-code's structured prompt stream
- d9f4b5b feat(daemon): add compress_logs setting, on by default
- e71a3d8 feat(daemon): add opt-in memory_limit and loopback-only pprof_addr
- f3fdc7b feat(daemon): show a pipe run's stream in logs --run N --raw
- 6ef858b feat(metrics): export Go runtime memory classes and the GC heap goal
- 8eb335b feat(metrics): export harness_trigger_* on the SPEC-0013 endpoint
- 399bc3a feat(redact): mask JSON lines per string, skip unmatchable text
- 3368e7a feat(sealedlog): compress sealed logs with zstd, read either form
- 9569994 feat(settings): parse human byte sizes as a setting kind
- 3c092ce feat(skills): learned skill store with the two-channel gate (#788)
- ce585e3 feat(skills): serving clones, FTS5 retrieval index, retrieval counts (#78) (#794)
- 67ef20e feat(supervisor): compress rotated backups and closed runs' logs
- cb64ddd feat(supervisor): run stream-json one-shots on pipes, not a PTY
- 99d3a66 feat(webhook): de-duplicate delivery IDs and enforce rate_limit
- f1a3d98 feat: add pi and omp adapters and command transcripts binding
- 6ebef5a feat: add the command harness kind, exec'd without a shell
- 5cf69b5 fix(adapter): observe OMP sessions now that agent-trace v0.6.0 reads them
- 9a2971c fix(attach): bound scrollback by bytes and replay it without copying (#793)
- 776756b fix(attach): release a removed Mux and cap its scrollback
- 2e11c65 fix(supervisor): release each spawn's sanitizer emulator
- 0bbe2f9 fix(test): pass a nil clock to startDaemonSources in the metrics test
- b6603a7 fix(tui): cap the vtView emulator's scrollback
- fa66fdb fix: accept [daemon] process settings in harness.toml
- 85ca820 fix: honour typed --config and --socket in doctor's settings report
- 6704535 fix: reject a prompt on a generic harness at every front door
- 6eb8f7e merge: resolve against #689's ordered publish and per-source stats
- 76ec466 refactor(config): fold memory_limit and pprof_addr into checkDaemonSettings
v0.9.0
Changelog
- a994c26 Merge branch 'main' into toil/public-intake
- 45cf39c Merge branch 'main' into toil/public-intake
- af8cfd7 Merge remote-tracking branch 'origin/main' into toil/public-intake
- 2550db5 Merge remote-tracking branch 'origin/main' into toil/public-intake
- c9cae8c Merge remote-tracking branch 'origin/main' into toil/public-intake
- 3cc5e47 Merge remote-tracking branch 'origin/main' into toil/public-intake
- cfec972 Merge remote-tracking branch 'origin/main' into u653
- ed787fb feat(ledger): record every resident process lifetime as a run (#649)
- 7fbfca7 feat(peek): render claude-code stream-json readably in the live preview (#738)
- a0d6eb3 feat(trigger): add harness triggers and show triggered harnesses (replay of #656) (#689)
- 18ab9e7 feat(tui): one-shot preview and chatroom read like
harness logs - e89ae5f feat(webhook): verify hmac-sha256, github, gitea and gitlab deliveries
- b569f6a feat: command one-shots with argv templates over the run context (#661)
- 49df0c3 fix(observe): attribute rows written during a scan to the open run (#714)
- 4dfaa34 fix: pass the scheduler clock to startDaemonSources in the hmac test
- b88badc refactor: extract the
harness logsrenderer into internal/logview
v0.8.0
Changelog
- ee82610 feat(cli): style one-shot verbs on a terminal, keep pipes plain (#728)
- 51a8f07 feat(cli): style one-shot verbs on a terminal, keep pipes plain (#728)
- 4072a31 feat(logs): style harness logs on a terminal, collapse repeats (#727)
- 2f98667 feat: notify hook — alert when a harness fails, is loop-stopped, or rotated (#729)
- aadb623 feat: notify hook — alert when a harness fails, is loop-stopped, or rotated (#729)
- fa79a15 fix(sessionguard): resolve the crush store from --data-dir (#726)