-
released this
2026-07-24 17:26:54 +00:00 | 0 commits to master since this releaseWhat's Changed
Focus: Infrastructure, multi-model agents, developer experience
Features
- Checkpoint the CRDT snapshot periodically, not once by accident (1249)
- Script/check gates duplication and cognitive complexity (1251)
Bug Fixes
- CRDT snapshot has no schema migration; a failed load silently starts empty (1241)
- Bug fields steps_to_reproduce, actual_result and expected_result cannot be edited after creation (1250)
Refactors
- Script/release builds project images so they can't drift (1242)
- Merge jobs stop bloating replicated CRDT state (1243)
- Deduplicate the worktree module cluster (cleanup/remove/sweep/create/lifecycle share ~60-line clones) (1244)
- Deduplicate validation/requests.rs — five internal ~50-85 line self-clones (1245)
- Extract shared LLM-runtime logic duplicated between gemini and openai runtimes (1246)
- Deduplicate chat-transport LLM command handling (discord <-> whatsapp 45-line clone) (1247)
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.14.4...v0.14.5
Downloads
-
released this
2026-07-21 14:25:44 +00:00 | 17 commits to master since this releaseWhat's Changed
Bug Fixes
- Duplicate Working line: obsolete digging-in watcher survives alongside 1240 placeholder (1248)
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.14.3...v0.14.4
Downloads
-
released this
2026-07-21 13:33:44 +00:00 | 20 commits to master since this releaseWhat's Changed
Focus: Bot commands, MCP tools, infrastructure
Features
- Render agent questions as numbered options in chat protocols without question UI (1228)
- Sleds self-upgrade on startup to the gateway's published artifact if the baked binary is behind (1230)
- Project-rebuild must not silently downgrade a live sled to the stale image binary (1231)
- Ask "what happened with X" and get a paged, subject-scoped history (1236)
- Matrix bot posts "Working..." immediately on message receipt (1239)
- Matrix bot shows live progress by editing its placeholder message (1240)
Bug Fixes
- Explicit
projectarg ignored on the SSE MCP path — 1225's routing and create-guard are bypassed (1229) - Gateway chat bot crashes (CLI exit 1) on a sled MCP tool error instead of surfacing it (1232)
- Notifications fire off the filesystem watcher, not the state machine — story 995's TransitionFired subscriber was never wired into startup (1235)
statusresolves the story number against a different project thanshow(1237)- Worktree tests fail on macOS: tests clobber global HOME (1238)
Other Changes
- Removing hardcoded huskies session
- Ignoring some more files
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.14.2...v0.14.3
Downloads
-
released this
2026-07-18 23:47:30 +00:00 | 42 commits to master since this releaseWhat's Changed
Focus: MCP tools
Bug Fixes
- Show fails with "content unavailable" on done/archived stories — content should never be evicted (1222)
- Work-item tools use active project as an implicit global; project arg ignored, creates/reads misfile silently (1225)
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.14.1...v0.14.2
Downloads
-
released this
2026-07-18 18:30:50 +00:00 | 46 commits to master since this releaseWhat's Changed
Focus: Multi-model agents, infrastructure, developer experience
Features
- Pipeline board shows active-agent state distinctly from idle-blocked (1215)
- Shorten long-turn notification to "Working..." (1216)
- Remembered/sticky permission approvals so constrained agents stop re-prompting for the same action class (1218)
- Add runtime artifacts to the default project scaffold .gitignore (1219)
Bug Fixes
- Find_free_port can return a reserved/occupied port (2200), flaking its test and merge gates (1214)
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.14.0...v0.14.1
Downloads
-
released this
2026-07-18 11:58:54 +00:00 | 54 commits to master since this releaseWhat's Changed
Focus: Bot commands, MCP tools, infrastructure
Features
huskies projectschat command — list every registered project with port and status (1153)- Extend
gateway_healthwith a relay-working signal — is each sled actually delivering events? (1154) - Bracket logging around install_pre_commit_hook to diagnose bug 1151 freezes (1155)
- Periodic liveness tick so runtime freezes have a precise timestamp (1156)
- Reject boilerplate user stories at save time (1158)
- Replace perm_rx lock-as-presence-signal with a permission router (1163)
- Gateway pulls signed artifacts from a release channel into its local store (1169)
- Add Docker log rotation to project container launch args (1172)
- Identity-aware fleet checks: cryptographic node identity in upgrade and health probes (1173)
- Gateway startup announcement reports version and model (1174)
- Token-authenticated sled→gateway WS uplink (remote-gateway ready) (1179)
- Sled↔gateway goes WS-only: remove the deprecated HTTP fallback paths (1180)
- Config parse error hints at misplaced top-level keys after component (1183)
- Bounded auto-retry for GatesFailed merges before requiring human intervention (1185)
compactchat command: distill session context deterministically, then reset with a seed (1186)statuschat command shows that project's status (1187)- Merge tool results return a summary, not the full gate log (35KB per call) (1188)
- Gitea Actions workflow: build the sled artifact on master merges and publish to the dev channel (1189)
overviewchat command: active work across all connected sleds (1193)- Orphaned build-dir GC: reclaim dead worktree targets without touching warm caches (1199)
- Low-disk warning: the fleet tells the operator before the disk takes it down (1200)
- Chat notification when a new work item is filed (1201)
- Slim CRDT-backed pipeline_query MCP tool (project / stages / fields / include_archived) (1204)
- Fleet_identity MCP tool: read sled pins vs live signed identity, and re-pin via TOFU (1206)
- Fleet_resources MCP tool: on-demand host + per-container disk, load, and CPU/mem (1207)
- Ops/LLM sessions can reach gateway-mode + cross-project MCP (the biggest shell-fallback cause) (1208)
- Gateway lifecycle & telemetry MCP: gateway_info, restart_gateway, gateway_logs, start_story, chat_telemetry (1209)
- Gateway-side "digging in" notification for long tool-only turns (1210)
- Deterministic crash notification when the agent PTY dies mid-turn (1211)
- Sled chat messages show "workspace" instead of the real project name (1212)
- Chat "stop" command that immediately aborts the in-flight LLM turn (1213)
Bug Fixes
- Chat bot crash-loops on poisoned Claude Code session resume (1160)
- Full tokio runtime stall after unblock → merge auto-assign (1170)
- Flaky tests intermittently fail merge gates (1175)
- Base_branch fallback hardcodes master instead of auto-detecting (1176)
- Project.toml scaffold puts top-level keys after component so uncommenting them silently no-ops (1177)
- MergeFailureFinal is a trap state: successful re-merge cannot mark the story done (1178)
- Sled uplinks all register as 'workspace' — containers never get HUSKIES_PROJECT_NAME (1182)
- Stage transitions never reach the gateway relay: StatusEvent::StageTransition is published only in tests (1184)
- Startup version announcement only fires on the trampoline path — normal restarts still say just "Timmy is online." (1190)
- /identity node_id field reports the CRDT id, not the node_identity.key the signature uses (1191)
compactcommand is swallowed by the registry placeholder before its real handler runs (1192)- Db shadow-table tests flake when SHADOW_DB_PATH is not initialized (1194)
- Chat show renders metadata from stale content-text YAML instead of CRDT registers (1195)
- Inactivity watchdog kills agents mid tool-call: awaited MCP calls produce no PTY output (1196)
- Failed agents are never reaped — a dead pool entry blocks respawn indefinitely (1198)
- Flaky test: matrix pull pull_rejects_tampered_artifact_sha256_mismatch fails nondeterministically in merge gates (1202)
- Gateway
statusgives no response — 1187 made it proxy-only with no local resolution or error surfacing (1203) - Compact STILL swallowed after 1192 — interception is placed AFTER the registry dispatch, not before (1205)
Refactors
- Update workspace Cargo.toml dependencies to latest compatible versions (1162)
- Lockfile refresh + sqlx alpha-to-stable (1164)
- Upgrade matrix-sdk 0.17 to 0.18 (1165)
- Upgrade ed25519-dalek 2 to 3 (1166)
- Upgrade garde 0.22 to 0.23 (1167)
- Upgrade tokio-tungstenite 0.29 to 0.30 (1168)
- Dependency freshness sweep: bump manifest minimums, refresh lockfile, drop dead serde_yaml (1181)
Other Changes
- docs: refresh README release section
- script/release: push branch and tag together so master doesn't lag the tag
- Fix compact no-op in gateway mode: add compact to GATEWAY_LOCAL_COMMANDS
- Fold GatesFailed auto-retry into the block subscriber's shared budget
- Upgrading Docker to include newer node, so front-end builds
- Install Node 22 from NodeSource in project base image
- docs: update stale libsqlite3-sys pin comment for sqlx 0.9 stable
- Fix CRDT self-deadlock: read_llm_session re-locked the state mutex
- Disable CRDT debug logging in default features — fixes runtime stalls
- Pre-check binary writability before accepting an upgrade request
- Fix WS deadlock: never block on perm_rx in the chat handler
- Drop the drain check from upgrade — agent death is routine
- Remove all alternate update paths — fleet redeploy is release + upgrade all
- Revert /app/target binary fallback in entrypoint
- Add
releasechat command — build sled binary and publish artifact - Add
upgrade allchat command with drain check and convergence verify - Serve sled binary artifacts from ~/.huskies/artifacts/
- Install sled binary in huskies-owned dir so upgrades work without root
- Add /api/version endpoint for upgrade convergence checks
- Fixed exec bug
- Fix rebuild_and_restart in Docker project containers
- Added CRDT snapshotting
- Unreachable container times out gracefully
- Catching a docker rm problem
- Adding doc comments.
- Converted all external tool calling to async
- Dealing with bot failures
- Stack detection fix
- Added docs comment
- Adding show story mcp
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.13.0...v0.14.0
Downloads
-
v0.13.0 Stable
released this
2026-05-19 23:17:14 +00:00 | 176 commits to master since this releaseWhat's Changed
Focus: Bot commands, infrastructure, Docker hardening
Features
- Chat-bot proxy reads stale
gateway_project_urlsBTreeMap instead of live store (1122 missed this seam) (1132) - Mkdir -p ~/.huskies/<name>/ before ssh-keygen in adopt (1134)
- Bootstrap Claude credentials into newly-launched project sleds (1135)
- Sled → gateway WebSocket back-channel so project pipeline events reach Timmy (1136)
- First-run project init flow — walk through config instead of leaving defaults silently (1137)
- In-container huskies self-update —
huskies upgradepulls a fresh binary without docker rebuild (1138) - Per-project Dockerfile fragment so agents can extend their own sled image (1139)
- One-shot
project-rebuildchat command: rebuild image, swap container, reconnect, preserve state (1140) - Convert work-item type between spike/story/bug/refactor (or at least spike→story) (1141)
- Force coder agents through MCP-validated Edit/Write/Bash to prevent writes to master worktree (1142)
- Decouple LLM environmental awareness from chat transport — persona-keyed sessions and a real-time event subscription (1143)
- Gateway trampoline-restart: detached helper survives the gateway's own death (1144)
- Codesign self-heal at exec time so a missed re-sign doesn't silently SIGKILL the binary (1145)
- Matrix bot auto-recovers from M_UNKNOWN_TOKEN by re-logging in from bot.toml password (1146)
- One-active-gateway invariant via pidfile+flock — prevent double-gateway during restarts (1147)
- Per-sled
upgradechat command using huskies upgrade (1138), serial-locked (1148) huskies healthchat command — surface gateway, sled, matrix, creds, and build-hash status (1149)- Set HUSKIES_GATEWAY_URL on every sled container so 1136's relay actually spawns (1152)
Bug Fixes
- Install_pre_commit_hook blocks the tokio executor — sync std::process::Command::output() in an async path stalls worktree-create-sub (1151)
Other Changes
- script/local-release: restore build + hot-restart workflow
- fix: project sleds need claude CLI + extensions.worktreeConfig
- Revert "fix: bind project container host ports to 0.0.0.0"
- fix: bind project container host ports to 0.0.0.0
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.12.1...v0.13.0
Downloads
- Chat-bot proxy reads stale
-
v0.12.1 Stable
released this
2026-05-17 22:52:28 +00:00 | 212 commits to master since this releaseWhat's Changed
Focus: Developer experience, Docker hardening, bot commands
Features
- Remove static website from huskies OSS repo (moved to huskies-server) (1112)
- [huskies-server repo] Convert static website to Next.js with static rendering (1113)
- New project: --path flag to override default host directory (1114)
- New project: --adopt flow to wrap a container around an existing checkout (1115)
- Rebuild_and_restart loses pending CRDT ops by calling exec() before persistence channel drains (1116)
- MCP tool for adopt: expose
new project --adoptas an MCP call (1117) - Automate per-project docker image builds (huskies-project-base + per-stack overlays) (1118)
- Address npm audit moderate+ vulnerabilities in frontend/ (1119)
- Silence intentional-error stderr in frontend tests so failures stand out (1120)
- Remove the marketing website from the huskies OSS repo (now lives in huskies-server) (1121)
- Chat-bot switch command reads stale
gateway_projectsVec instead of livegateway_projects_store(1122) - Persist TransitionFired into a per-sled CRDT event log (1124)
- LLM session entity + assemble_prompt_context helper, wired into Matrix bot (1125)
- Gateway event aggregator with per-session scope filters (Timmy=All, Sally=single sled) (1126)
- Migrate all LLM-invoking transports onto assemble_prompt_context; delete legacy Vec (1127)
- Bounded event queues + EventStreamGap sentinel + observability for context assembly (1128)
- Find_free_port fallback returns unbindable port silently when range is exhausted (1129)
- Adopted/launched project containers bind huskies to 127.0.0.1, unreachable from host MCP (1130)
Other Changes
- fix: drop package-lock.json + node_modules before npm install in Dockerfile
- fix: work around npm optional-deps bug in frontend npm install
- chore: gitignore /pipeline.db at repo root (phantom stale file)
- fix: build frontend before cargo in script/test (merge gate self-heal)
- fix(1101): strip passing-test lines before classify() lint check; remove diagnostic
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.12.0...v0.12.1
Downloads
-
v0.12.0 Stable
released this
2026-05-17 01:16:27 +00:00 | 244 commits to master since this releaseWhat's Changed
Focus: Bot commands, Docker hardening
Features
- Chat bootstrap Phase 1:
new projectchat command spawns a bare project container and registers it with the gateway (1106) - Chat bootstrap Phase 2a: stack-overlay framework + Rust and Node stack overlays (1107)
- Chat bootstrap Phase 3: SSH-remote editor access into the project container (any editor) (1108)
- Chat bootstrap Phase 4:
--gitclones an existing repo and configures push credentials (1109) - Chat bootstrap Phase 2b: additional stack overlays (Go, Python, Ruby, JVM) (1110)
Bug Fixes
- Test isolation:
init_for_test()andensure_content_store()are once-per-thread, not once-per-test, polluting CRDT state across tests (1111)
Other Changes
- docs: chat-driven project bootstrap design overview
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.11.1...v0.12.0
Downloads
- Chat bootstrap Phase 1:
-
v0.11.1 Stable
released this
2026-05-15 22:43:43 +00:00 | 254 commits to master since this releaseWhat's Changed
Focus: Infrastructure, multi-model agents, bot commands
Features
- Fly.io Machines API integration for multi-tenant huskies SaaS (811)
- Tee pipeline events into gateway Timmy's context (1063)
- Move source-map regen into the merge pipeline; drop spawn-time regen and the orphan tracked-file drift (1065)
- Decouple startup CRDT replay from live TransitionFired channel; add periodic reconciler for side-effect subscribers (1066)
- Include story name in
huskies: merge NNNNcommit subject so release notes regenerate cleanly (1069) - Chat notification when a new work item is created (1073)
- Compact
Working tree: N (uncommitted)inline with the coder line in chatstatusoutput (1076) - Truncate merge-failure chat notification to the tail of gate output (1077)
- Pipeline+Status split — Step B: migrate UI/display layer to read Pipeline + Status (1085)
- Pipeline+Status split — Step C: migrate auto-assign, subscribers, and lifecycle transitions to read Pipeline + Status (1086)
- Pipeline+Status split — Step D: migrate CRDT storage to (Pipeline, Status) and remove the Stage enum (1087)
- Record and surface the origin of every work item (1088)
Bug Fixes
- done → archived sweep stops firing after rebuild_and_restart cycles (1070)
- Coder agents run sqlx migrations against the production pipeline.db, bricking the next server restart when binary's migration set is behind (1072)
get_versionreturns stalebuild_hashafterrebuild_and_restart(1074)get_pipeline_statusreturns ~9 KB per item — overflows MCP token limit at ~30 active items (1075)- Gateway event tee from 1063 not injecting into Timmy's context — buffer wired but reminders never appear (1078)
- Stuck-agent detector blocks stories on legitimate exploration / debugging — uses too narrow a "progress" signal (1089)
- Chat dispatcher spawns one Timmy per inbound message — needs coalesce window + per-session serial lock (1093)
- delete_story leaks zombie rows in pipeline_items shadow table — 176 tombstoned items still report non-terminal stages (1094)
- Shadow drift: set_name writes CRDT name register without updating pipeline_items.name (1095)
- Shadow drift: set_agent writes CRDT agent register without updating pipeline_items.agent (1096)
- Shadow drift: set_depends_on writes CRDT depends_on register without updating pipeline_items.depends_on (1097)
- Shadow drift: set_retry_count / bump_retry_count write CRDT register without updating pipeline_items.retry_count (1098)
- Multiple LLM agents can run concurrently on the same story (coder + mergemaster + others) — enforce one-agent-per-story invariant (1100)
- Rate-limit warning at session start sticks the
rate_limit_exitflag, causing 1053's fast-path bypass to skip completion on clean session exits (1103) - Freeze from Backlog stores wrong resume_to — Unfreeze restores to Coding instead of Backlog (1105)
Refactors
- Migrate
AgentPool::kill_all_childrenandkill_child_for_keytoprocess_killso server shutdown andstop_agentactually kill claude (1090) - Migrate the merge-gate's stale-cargo kill path to
process_kill(1091)
Other Changes
- fix(1102): require non-empty origin.id on create_* MCP tools
- diag(1101): log classify verdict + matched trigger on merge gate failures
- test(tick_loop): de-flake reconcile_never_floods_broadcast_channel
- fix(agents): kill-then-status reorder in stop_agent
- feat: add process_kill module + use it to fix watchdog double-spawn
- chore: gitignore .huskies/double_timmy_log.md
- fix: skip setup commands on worktree reuse so reconciler doesn't fire npm ci every 30s
- fix: drop source-map.json from agent orientation bundle
Full diff: https://code.crashlabs.io/crashlabs/huskies/compare/v0.11.0...v0.11.1
Downloads