Releases: Lockyc/warden
Release list
warden 0.4.0
Features
- Window menu — a new Window submenu lists every configured window: open ones carry a checkmark and raise on select; closed ones show (closed) and reopen on select (restoring persisted size/position, tabs cold). ⌘⇧T reopens the most-recently-closed window. The menu rebuilds on any window-set change (open/close/reopen).
- Global
densitysetting —"comfortable"(default) or"compact", a proportional ~0.85× scale of the whole chrome type + spacing hierarchy. Hot-reloads live without a relaunch; mirrors curator'sdensitymechanism. notify_debugconfig flag — traces the notification path to/tmp/warden-notify-dbg.logfor diagnosing missing banners (seedocs/notifications.md).
Fixes & changes
- Probe: canonical command is now
amux --probe— delegates the agent/frame socket layout to amux instead of hand-inliningtmux has-sessionlegs that drift silently. The probe also lights for a lingering amux frame (agent exited, frame still up); the examplekillreaps the whole frame. - Tab-bar treatment converged with curator — row/header type scale, a larger leading window title, and status dots bumped to match the tab scale.
- Rust toolchain pinned to
1.96.0(rust-toolchain.toml) so formatting and lints are identical across the config-core-sharing repos.
Docs
- New
docs/notifications.md— full write-up of the macOS-26 notification path and the OS-side banner regression.
warden 0.3.1
Fixes
- GUI-launched tabs with a bare-name
shellno longer dieexec: <shell>: not found. A configshell = "fish -l"(what the shippedexamples/config.tomlseeds) failed when warden was launched from Finder/Dock/Spotlight, because a.appinherits only the minimal launchd PATH (no/opt/homebrew/bin). warden again imports the login-shell PATH at startup (restore_login_path), so bare Homebrew/nix shell names — and baretmuxin aprobe— resolve from any launch context. The absolute-$SHELLlogin-shell default for the unset case is kept; the two compose. This restores behaviour a prior refactor had regressed.
Note: non-PATH shell exports (e.g. $AGENTMUX_AGENT_SOCKET) are still not imported — keep targeting tmux's default socket (no -L) in probes/kill.
warden 0.3.0
warden 0.3.0 — session kill, login-shell terminals, and DPI/robustness fixes.
Features
kill— a companion session-kill command. New cascading optional config field (global → window → tab,""opts a level out). Triggered by a two-step confirm on a tab's cyan presence dot: a full-row red confirmation with destructive iconography (✓/✗, no timeout, disarms on ⌘W). Runs fire-and-forget, severs the session without unloading warden's terminal surface (you're left at a live shell prompt), then re-probes to drop the dot.- Default shell is now your login shell, run as login — warden behaves like a terminal. When no
shellis set, warden spawns$SHELL -l(absolute path from launchd), so GUI-launched tabs find their shell without the minimal-PATH trap. Login PATH is imported at startup. - Hot-reloaded tab metadata applied in place. A kept tab's
group/probe/killchange is now detected (set_meta) and applied live — sidebar re-section, new probe/kill picked up on the next poll — without respawning the terminal.
Fixes
- Terminal no longer mis-scaled after a DPI/monitor change. The render layer's
contentsScalenow tracks the backing scale (the deadrespawn_on_scale_changepath was removed in favour of the real fix). Verified on hardware. - A surface that fails to spawn degrades to a cold tab instead of panicking the whole app out of startup; the reason surfaces in the chrome error banner.
- Window-state is scoped per config, so the example/test config (
just run) no longer inherits your production window sizes/positions.
Docs
- README/CLAUDE.md reconciled (sign+notarize when Apple env present; probe/kill PATH guidance); CLAUDE.md footguns trimmed of past-facing narration.
Full changelog: v0.2.1...v0.3.0
warden 0.2.1
Documentation patch — no code changes.
Docs
- Reconciled
docs/FOLLOWUPS.mdandPROVENANCE.mdafter the config-core extraction: dropped stalecolour.rsreferences (that code now lives in the sharedconfig-corecrate). - Retired the obsolete "Plan 2 / Spike S / not production" planning vocabulary now that
warden-appis shipped — reframed as deferred hardening on the released app, keeping every real deferred item. Also removed a tracked-doc pointer at ephemeral scratch.
Install / update: curl -fsSL https://raw.githubusercontent.com/lockyc/warden/main/install.sh | bash (or /warden:install). macOS; unsigned local build.
warden 0.2.0
Second release. Headline: warden now installs from source with one command.
Added
- Claude-Code installer — a self-sufficient
install.sh(builds from source, installswarden.appto/Applications, manages a persistent~/.wardenclone, seeds~/.config/warden/config.toml) plus a guided/warden:installcommand that checks prerequisites and walks through setup. One-liner:curl -fsSL https://raw.githubusercontent.com/lockyc/warden/main/install.sh | bash - Click a terminal-notification banner to surface its window and focus the originating tab.
- Blank-background placeholder shown when a window has no tab selected.
Changed
- House-style TOML formatter + colour parsing extracted to the shared
config-corecrate (shared with curator). just deploynow delegates its build+install toinstall.sh(single source of truth for the deploy flow).
Docs
- README Features/badges/hero refresh; CSP-shipped and public-repo status reconciled across docs.
Install: curl -fsSL https://raw.githubusercontent.com/lockyc/warden/main/install.sh | bash (macOS; needs Xcode CLT + Rust — the installer handles the Tauri CLI). Unsigned local build, not notarized.
warden 0.1.0
First public release of warden — a config-driven terminal multiplexer for macOS. One TOML file defines your windows and the project tabs inside them; warden materializes itself from that config and hot-reloads on save.
Config core — warden-config crate + warden CLI
- TOML schema → parse / validate / resolve: defaults,
~expansion, and ashell/cmd/probecascade (global → window → tab). - Hot-reload diffing (
reconcile) and a notify-based file watcher. - House-style TOML formatter (embedded taplo) exposed as
warden fmt(with--check) and an optionalformat_on_save. warden validateprints the resolved window/tab tree + warnings.
macOS app — warden-app (Tauri + libghostty)
- A native window per
[[window]]with a colour + title banner; curator-style draggable sidebar under an overlay titlebar. - Embedded libghostty terminal surfaces behind a
TerminalSurfaceseam; tabs lazy-spawn on first focus (load_on_openspawns eagerly and stays running). - Grouped tabs (cosmetic sidebar sections), a live/cold dot with hover-✕ unload, terminal notifications (OSC 9 / OSC 777 desktop banners + bell badges), and a cyan session-presence probe dot.
- Live hot-reload (open / close / recolour / re-section), a diagnostic window for a missing/invalid config, an error banner that keeps last-good windows up on a bad edit, and per-window size/position persistence.
- Tab navigation via the app menu: ⌘⇧[ / ⌘⇧] cycle loaded tabs, ⌘1–⌘9 jump (or ⌘1/⌘2 cycle via
tab_digit_keys = "cycle"); ⌘W unloads, ⌘⇧W closes the window.
Platform & packaging
macOS only. Local builds via just build / just deploy (code-signed with a local Apple Development identity if present, otherwise unsigned; not notarized for distribution to other machines).
Notes
The vendored libghostty is a throwaway prebuilt; a controlled upstream source build is deferred (blocked on a Zig 0.15.2 / macOS 26 SDK mismatch). See docs/FOLLOWUPS.md for tracked deferrals.