Skip to content

v0.2.0

Choose a tag to compare

@wf-release-bot wf-release-bot released this 27 May 03:58
Immutable release. Only release title and notes can be modified.
af6f8c9

0.2.0 (2026-05-27)

Features

  • add --no-status flag to task list for fast completions (d025717)
  • add (mostly idempotent) agent reinit command to cli (3c62062)
  • add a proper claude plugin option for installing nerf tools (b35b733)
  • add agent exec command (17dad70)
  • add agent exec command for non-interactive remote execution as agent user (1dabed9)
  • add agent socket infrastructure and refactor task session creation (ea95339)
  • add agent templates (f24fba6)
  • add apt support for getting tenv via cloudsmith (13678d2)
  • add choose, pause, prompt_secret to output handler (0ea9b28)
  • add claude code plugin for nerf tools (6b977bc)
  • add claude_install flag and validate marketplace/plugin dependencies (36dabd5)
  • add config edit command (62cb1c8)
  • add config sync-vscode-workspaces command (ce70a1a)
  • add decoupled warning mechanism with DI and migrate all callsites (d98184b)
  • add hard timeout to run_detached and set 10min limit for Lima provisioning (06e92ef)
  • add INFO status for non-applicable checks, stop warning on missing platforms (e078dc5)
  • add liveness infrastructure -- PID checks, health checks, force kill (Phase 2) (e341eb2)
  • add mise support (89ad43f)
  • add nerf-specific env vars when nerf is installed (78228ad)
  • add output.confirm for presentation-agnostic yes/no prompts (f4fcef9)
  • add output.prompt for string input collection (a3223e4)
  • add output.warn DI mechanism and migrate all warning callsites (339ad79)
  • add Proxmox VM provisioner (4351ed1)
  • add Proxmox VM provisioner (fa0b306)
  • add repo support for dotfiles (d810535)
  • add run_new method with sudo and tty parameters (6a8309f)
  • add session repair command for PID recovery (Phase 4) (22f4404)
  • add session restart-all command (25e954e)
  • add ssh logging to lima provisioning (f254894)
  • add stale socket cleanup on vm reinit and agent reinit (859318b)
  • add starship user installer to catalog (8b52275)
  • add tasks (61a9aa0)
  • add use-nerf-commands rule to nerf install (1990fe8)
  • add uv user installer to catalog (0803283)
  • add vm backup command (ad789ed)
  • add vm exec command (8d4b816)
  • add vm exec command for non-interactive remote execution (6cc26d5)
  • add vm port-forward to cli (db8e571)
  • add vm rekey command for switching Tailscale accounts (bd8f1f1)
  • add warnings fixture for tests, migrate config.py to output.warn (1a6fe15)
  • add workspace and task describe commands (558d1a9)
  • add workspace rehome command to move on vm filesystem (2295873)
  • align workspace shell/console with vm approach (accf0f0)
  • allow creating workspace with task (38c908c)
  • batch stop/restart (--all, --all-stopped) with --vm/--workspace filters (324d7ba)
  • Claude Code marketplace and plugin support in templates (d82573a)
  • clean up vm handling of agents and tasks (fec6506)
  • cli: add comment above Include directive in SSH config (5441d33)
  • cli: add config sync-ssh-config command to rebuild SSH config on demand (dd9b615)
  • cli: add test field to install commands for skip-if-installed (0255c45)
  • cli: add test field to install commands for skip-if-installed checks (47dab73)
  • cli: integrate nerf tools into VM init via config (dfb26fd)
  • cli: manage SSH config via config.d with configurable host prefix (14a2880)
  • cli: move init to config init, add config sample (88b9484)
  • cli: move init to config init, add config sample (96fad41)
  • cli: replace test with test_exec/test_file/test_dir, add fnm and unzip (6f38492)
  • cli: replace test with test_exec/test_file/test_dir, add fnm and unzip (968e471)
  • cli: resilient provisioning with nohup detached execution (6fe4cef)
  • cli: resilient provisioning with nohup detached execution (d9f06b3)
  • complete agents (42f4e12)
  • default workspaces to /opt/agentworks with config option (3bbc042)
  • detach Azure public IP after provisioning and poll for Tailscale stability (0761ad9)
  • ditch rules as plugins don't support them (03937e4)
  • drop cached status column, add PID column and SessionHealth enum (Phase 1) (4687276)
  • enhancements to nerfctl grant capabilities including skill mapping for easy ux (a2f23f6)
  • ensure logging across all operations (90cd0c8)
  • force explicit admin vs agent selection for new tasks (6f899e9)
  • implement optional mise pruning and clarify idempotency (f0162f7)
  • implement vm templates (lock og sdd) (9e4ac61)
  • improve vm backup with single zstd archive and reliable detached execution (7b9d72a)
  • improve vm backup with single zstd archive, progress reporting, and reliable detached execution (21d6849)
  • improve vm describe with live resources (9643e48)
  • install nerfctl tools along with nerf commands (1e6022c)
  • integrate agent socket setup into VM init and agent provisioning (dbc9399)
  • migrate all session commands to health-based liveness model (Phase 3) (bd56d71)
  • offer to delete auto-created workspace upon only task deletion (ffb52c7)
  • Phase 6 -- unified status model (has-session primary, boot_id, session type dispatch) (4d7024f)
  • protect vm deletions based on tasks (8f91cdc)
  • robust ssh logging (f9b715b)
  • run agent tmux sessions as the agent user via per-task sockets (9cc13f7)
  • run dist-upgrade during bootstrap to keep base image current (81d134b)
  • set consistent VM hostname as <platform>--<vm_name> (0473f13)
  • show tasks and agents in vm describe (97f53b4)
  • support claude code marketplaces and plugins in admin and agent templates (47f1c93)
  • task enhancements and fixes (6761f82)
  • task restart impl (079aacf)
  • thread socket paths through task manager, console, and tmuxinator (160e70d)
  • unified output module with handler protocol and exception hierarchy (0c8bd05)
  • update nerf skills to reference nerf env vars (7ce3996)
  • upgrade to nerftools 1.0.0 and use default plugin metadata (4be19d2)
  • use consistent table formatting for workspaces vs tasks (96530ed)
  • use native provisioning and add swap support (c393bd9)
  • verbose force-kill output (SIGTERM, escalation, socket cleanup) (ec86990)
  • verbose stop output (C-c, grace period, survivors, force-kill escalation) (48a5ff1)
  • vm rekey prints env key detection, add --ignore-env flag (675c41b)
  • warn about broken/unknown sessions at bottom of session list (b82e9d0)
  • warn when agent task is found on legacy default server (4d68b2c)
  • workspace copy (dde6c28)
  • workspace repair command (52ab828)

Bug Fixes

  • add 10-minute timeout to dist-upgrade during bootstrap (7513a62)
  • add get_warn_handler and restore previous handler in test fixture (c605c29)
  • add indent param to detail, Ctrl-C handling in confirm/prompt_secret (260a7a3)
  • add logger redaction and IP validation in _join_tailscale (8dd5223)
  • add migration guard for legacy agent sessions without socket_path (933c35c)
  • add SSH non-interactive options to vm exec (33e8417)
  • add success message for agent git safe.directory setup (bf3649a)
  • address 5 PR review items -- error context, EOF handling, progress API (0065881)
  • address Copilot PR review feedback (f8442eb)
  • address Copilot review -- PID parsing, force_kill return, CLI validation, test patterns, rehome (bee6665)
  • address PR feedback on Proxmox provisioner (c4955fd)
  • address PR review - use custom for catalog sources, fix proxmox hasattr, align terminology (8b208f4)
  • address PR review -- nohup ordering, auth key quoting, IP validation (95c264d)
  • address PR review -- remove backward compat, guard division, raise on failure (6a60510)
  • address PR review -- robust find -exec, merge split imports (02fd2ab)
  • address PR review -- safer return type, broader cspell glob (8f86d56)
  • address PR review -- ValidationError, error context in exceptions, UserAbort on Ctrl-C (c492952)
  • address PR review -- WSL2 support, quiet flag, resilient output read, test (5eb2b27)
  • address PR review comments - catalog terminology, UserConfig alias, [user] section backward compat (bca0451)
  • address PR review feedback from Copilot (89b0db6)
  • admin-mode health (session-ended vs BROKEN), sudo on tmux cmds, delete UNKNOWN handler, test annotations (5567a2e)
  • allow empty message (9387992)
  • allow for retries on tailscale echo test (0ae2505)
  • allow inheriting from undefined default templates (1fcb257)
  • always verify SSH connectivity after rekey, not just with --wait-for-share (48fb445)
  • attach logger to ExecTarget in _create_agent_on_vm, add migration tests (d77dcb3)
  • avoid redundant stdout.strip() calls in IP validation (6d1cabf)
  • avoid zsh brace parsing issue in ensure_agent_socket_root (4f94915)
  • Azure admin_exec_target used stale config.user instead of config.operator (89ae6ef)
  • backfill socket_path on restart for migrated sessions (de0ce3e)
  • backup: address PR review - mktemp staging, kill on interrupt, proxy_jump, archived_paths in manifest, test coverage (97e11a1)
  • backup: create detached dir as admin so run_detached can scp wrapper script (e08338d)
  • backup: secure mktemp -d for run_detached base, rename scp_base_args public, assert success in force_tty test (3f81ad2)
  • batch quoting, ensure_pid consistency, rehome strictness, admin PID safety, status-aware delete (54f2761)
  • batch status checks per VM (not per workspace) with parallel execution (62a60f9)
  • batch stop/restart error on unknown sessions after auto-repair (34a37eb)
  • be sure to logs timeouts (fbc117a)
  • best-effort PID capture (check=False), document PID reuse non-goal with math (97d884c)
  • boot_id truthiness -> is not None, cache _get_boot_id per target (37d547b)
  • broken session warning wording (2ee5af0)
  • BrokenSessionError replaces string matching, require boot_id with positive PID (604e4cc)
  • catch ConfigError at top level for clean error output (fbc60e6)
  • check both socket and default server for legacy session migration (b92ca8b)
  • check for existing socket on session create and clean up or fail (37af519)
  • check force_kill return in delete paths, fix UNKNOWN messages and list display, update docstring (ee1c74d)
  • check kill_session return in restart path (e557adb)
  • clean up agent socket after successful stop (43fba5e)
  • clean up azure start/stop logic (6b10ffb)
  • clean up failed init prompt (7457d94)
  • clean up waiting for tailscale reconnect on azure public ip operations (d7afe62)
  • cli: address PR feedback for resilient provisioning (17c9ed5)
  • cli: address PR review comments on test_exec/test_file/test_dir (19bf95a)
  • cli: address PR review feedback for SSH config (35917af)
  • cli: address second round of PR feedback (bdbcde6)
  • cli: call nerftools Python API directly instead of subprocess (281dc1a)
  • cli: check for limactl before local provisioning, suggest --vm-host (4112cd7)
  • cli: clean up provisioning console output, suppress verbose lima logs (2b32db2)
  • cli: co-locate config commands, fix trailing newline in sample output (b6a4472)
  • cli: expand tilde to $HOME in test paths so shell expansion works (49c42e8)
  • cli: fix nerf dir permissions and double-sudo on VM deploy (70f586c)
  • cli: fix sudo escalation in nerf tools deploy (f20249f)
  • cli: log full traceback on vm create errors for debugging (96b0b91)
  • cli: rebuild SSH config after DB delete so deleted VM is excluded (2549c28)
  • cli: remove rsync dependency -- use copy_dir_to (tar+scp) for all dir transfers (5624b6d)
  • cli: run test_exec checks in login shell so PATH additions are visible (91be879)
  • cli: separate error handling for provisioning, init, and post-init (7fc269b)
  • cli: set +x on nerf scripts and add zsh PATH support (2965636)
  • cli: use Command result type for PS subcommand completions to suppress file fallback (a55a463)
  • cli: use forward slashes in SSH config paths for Windows compatibility (019c8ed)
  • cli: use interactive login shell for test_exec checks (-lic not -lc) (a0136f1)
  • cli: use short timeout for install test checks, handle timeout gracefully (ab04120)
  • cli: use tilde for home directory in SSH config paths (b1f0696)
  • cli: warn on unexpected keys in vm.config and agent.config sections (359874e)
  • compute socket_path before INSERT, add constraint tests (9c22b40)
  • confirm before force-kill in delete, _get_boot_id returns None on failure, get_tmux_server_pid validates > 0 (edc466c)
  • consistent singular labels in doctor summary (f6d8df8)
  • Copilot round 2 -- auto-repair in batch paths, SSH logger, honest UNKNOWN on ambiguous recovery (d121b06)
  • correct E501 line-length on session restart-all workspace option (8e7ab7c)
  • correct missing force_tty logic (b8b18b6)
  • decouple _check_completions from CLI import, mark smoke test as integration (06b43fe)
  • delete uses prompts for running/unknown, --force only for BROKEN (2eb9acb)
  • derive socket path for migrated agent sessions with NULL socket_path (0a1405e)
  • detect SSH transport failure (returncode 255) in has-session checks (025a057)
  • disable git safe directory failures by default (aeaf101)
  • distinguish unknown (NULL) from known-stopped (PID=-1) sessions (13ebb20)
  • docstring inaccuracy (6c89ef7)
  • doctor: don't warn on false file perms for ssh key on windows (8da3431)
  • don't output log for successful reinit (cf7d7df)
  • don't warn on missing socket dir on vm create (only reinit) (dc3f529)
  • dont force tty for detached ops (fd3f757)
  • ensure acl package is installed and delete workspaces as root (8590dc7)
  • ensure existing apt sources are correct (e10d4eb)
  • ensure we are redacting secrets in vm reinit logs (bd6688f)
  • ensure_pids_batch catches SSH errors per-VM, rehome wraps status check errors (ac96ee1)
  • explicitly remove tmux socket file on session delete (bae1e88)
  • fix agent shell with workspace arg (f27ea22)
  • fix comment on socket test (86a5cc6)
  • fix doctor for agent git creds (e327c82)
  • fix inheritence to match adr (5b46ba9)
  • fix nerf home and claude plugin permissions (b30d20f)
  • fix other windows character encoding issues (1209f2e)
  • fix two rename bugs and deduplicate describe_session status reconciliation (e9c5b55)
  • fix windows-specific test issues (7bc8a9f)
  • fix workspace copy and deletion (736caab)
  • fix workspace rehome and create filesystem permissions (628f355)
  • fold tar failure context into BackupError instead of stdout detail (3df0a9e)
  • force an interactive shell for tasks (d68dcd0)
  • force task session to resize based on latest attached client (71207ce)
  • force tty for windows (e20d88b)
  • force utf8 encodings to avoid windows charset issues (4917860)
  • fully decouple doctor from CLI, consolidate config error, CI-level test filtering (feca4c5)
  • guard all update_session_pid calls against None boot_id, remove stale comment (177eebb)
  • handle EOF/Ctrl-C in default handler, ValidationError for choose, consistent output usage (0b80513)
  • handle existing dotfiles clone on agent reinit (0df9570)
  • hide stale PID in session describe (only show if current boot) (004b9e1)
  • idempotently ensure that socket directories are in place for session ops (5012a86)
  • include error in claude check warning, add sample config notes, add tests (afd03a7)
  • include exception in completions warning, align labels, exclude integration tests (c20ecfa)
  • include info count in doctor summary (742b8d8)
  • incorporate pr feedback (0cc7026)
  • increase timeout and add retries for resource fetch (b7e82d7)
  • kill agent socket sessions during workspace delete (a17955b)
  • lingering unit test and lint errors (3d4a90f)
  • load creds (inc. prompting) before creating agent, same as vm (2ce2d63)
  • make all create commands consistent w.r.t. prompting for targets and non-interactive behavior (7dfe803)
  • make run_detached fully SSH-resilient end-to-end (ae9df9a)
  • move ipaddress import to function/file top-level per convention (5a2e5b3)
  • null boot_id triggers UNKNOWN and auto-repair (both pid + boot_id required) (4691ef0)
  • only remove socket file after confirming tmux server has exited (f154a72)
  • only remove socket when post-delete status is definitively STOPPED (0e0aa9d)
  • pass args directly to ssh instead of shlex.join (07736cc)
  • PID validation, boot_id cache failures, kill_session return checks, stale terminology (a58fe2c)
  • PID_STOPPED excluded from unknown detection in batch stop/restart (f11a99e)
  • PID_STOPPED is definitively stopped -- skip repair, show stopped not unknown (ebd6403)
  • preserve arg quoting via shlex.join, pass single-string commands as-is (9871835)
  • prevent cloud-init for regenerating ssh keys on vm stop/start (7ce36de)
  • properly handle multiple git creds per provider (241c4cb)
  • properly report config issues in doctor (e8e9261)
  • protect agent deletion and clean up task/agent tables (e34ef6a)
  • raise ProxmoxAPIError on unexpected network-get-interfaces shape (5e1983a)
  • recheck status after failed kill (race condition), check kill return in delete_session (df9c3f4)
  • reconcile stopped tasks back to running when session is alive (4f0428c)
  • record vm template in db and show in command output (92eb8f5)
  • rekey uses run_detached for resilient logout+rejoin on Azure (fae1d7d)
  • rekey uses simple synchronous run, not run_detached (03acbb2)
  • reliable rekey sequence -- restart, logout, login, restart with stabilization pauses (cdd7a00)
  • reliable rekey sequence for Azure and Lima VMs (cef6a6b)
  • remove ANSI escape codes from prompt_secret masking (819511d)
  • remove boot_id cache, use sudo=True for socket rm, validate all PID values in DB, stale comment (21f34ba)
  • remove claude from sample user_install_commands, add config validation tests (1d4a8ef)
  • remove dead _effective_socket_path, fix ensure_pids_batch re-fetch and ambiguity, SSH error handling (020cf6c)
  • remove marketplace prior to installing for nerf claude plugin (0810e30)
  • remove stale sample config, log claude check, add agent template test (27cc6bc)
  • remove sudo from tmux session commands (BROKEN detection needs real permissions), fix kill propagation (abd9719)
  • rename catalog local vars to avoid ambiguous user terminology (c90c269)
  • rename prompt_bool back to confirm, handle Ctrl-C in choose (ff16620)
  • rename task to session in vm backup module (2367962)
  • replace warnings.warn with stderr print for clean user-facing config warnings (3f1cb41)
  • resolve all pre-existing lint, type, spelling, and markdown errors (234096f)
  • respect dotfiles ref on reinit pull path (f002687)
  • restart --all is atomic -- cancel aborts entirely, not partial (27afff2)
  • restore indent=2 on backup archive path details (2a32f0d)
  • retry message wording, extract stabilize_secs constant (f1a25e5)
  • run tailscale logout on azure via nohup (21bb259)
  • run task commands in a login shell (cf98a40)
  • separate --yes (skip prompts) from --force (kill broken) on restart (caf17b6)
  • separate file and dir acls workspace repair and rehome (608b4d5)
  • set SGID on workspace subdirectories for correct group inheritance (016893b)
  • shell quoting, type validation, and consistent config issue reporting (9b31d55)
  • show '-' for sessions with no status available (VM unreachable) (0f92fb3)
  • show agent name in session list mode column (789547f)
  • skip BROKEN without force, abort delete on unstoppable sessions, safe survivor check (3725798)
  • strict dispatch in batch_check_status, PID capture is best-effort (no orphaned sessions) (dfe56d4)
  • stub Proxmox admin_exec_target with NotImplementedError (1067c18)
  • sudo on socket existence check, tailor --force hint, validate socket path prefix before rm (8b701a6)
  • suppress legacy warning during stop and restart (fd8d30d)
  • supress socket dir warning on new stuff (ead3e00)
  • supress socket dir warning on new stuff (df4d649)
  • surface config issues as warnings via load_config(warn_issues=True) (6cf4078)
  • type _check_config as Config, add doctor unit tests (c4705e6)
  • TyperHandler.choose re-prompts on invalid input instead of exiting (e3e49df)
  • UNKNOWN when boot_id unreadable (no unsafe BROKEN), batch boot_id handling, tests for edge cases (6614db7)
  • use /proc for PID liveness (no sudo needed), catch active-socket error in restart (073d341)
  • use direct SSH subprocess and variadic args for vm exec (e5ba383)
  • use double-dash separator in migration for collision safety and tmux compatibility (e658c9e)
  • use force-confnew instead of force-confold for fresh VMs (4ab92de)
  • use ipaddress.IPv4Address for strict IP validation in rekey and _join_tailscale (3c3ddfc)
  • use mode 2771 on socket root so agents can traverse to their own subdirectory (034915d)
  • use noninteractive apt and force-confold to prevent dpkg prompts (f45bc5f)
  • use per-command sudo calls and add run_as_root_multi helper (47b6d0e)
  • use sudo -n su --login for correct agent shell environment (0936e2a)
  • use sudo for chmod on agent-owned socket after session creation (36186b5)
  • use sudo for has-session and sg for attach in console wrappers (0e8ec79)
  • use sudo for non-interactive tmux operations on agent sockets (263450b)
  • use usermod to set shell and avoid password prompt (172cceb)
  • verify PID dead before socket cleanup, warn about unknown sessions in stop --all (e840445)
  • warn about unknown sessions in list output, suggest repair (fc7a0a3)
  • warn instead of fail when agent dotfiles pull has local changes (a008341)
  • warn on usermod failure in ensure_agent_socket_root fast path (b535ade)
  • workspace repair bug regarding group ownership (1666788)
  • wrap compound shell commands in sh -c for sudo compatibility (70e7fae)

Performance Improvements

  • batch C-c then single grace period for stop --all (45e6315)

Reverts

  • remove sg/sudo workarounds from console wrappers (76d8e10)

Documentation

  • add missing proxmox section to config reference in README (cd8ba1f)
  • add SSH to Tightly Integrated Tools section (e70d82c)
  • align all --force/--yes semantics in code, SDD, and help text (51a99b5)
  • comment explaining remaining typer.echo in session_logs (4aacc64)
  • doc cleanup (8ebca80)
  • explain C-c vs kill-session tradeoff in stop path (4342fcf)
  • generalize vm rekey description beyond account switching (cecf7ab)
  • improve readme with additional context (1d1c5ca)
  • move Tailscale and tmux content into Tightly Integrated Tools section (a32c4b1)
  • note typer.echo layering violation as future cleanup (d922ad1)
  • remote-exec: document as_root preference and add timeout test (c227746)
  • rewrite README and completions for task-to-session rename (52e1883)
  • update docs based on latest changes (1f1a8ff)