github asheshgoplani/agent-deck v1.16.33

2 hours ago

Agent Deck v1.16.33

Terminal session manager for AI coding agents.

Installation

Homebrew (recommended):

brew install asheshgoplani/tap/agent-deck

Quick Install:

curl -fsSL https://raw.githubusercontent.com/asheshgoplani/agent-deck/main/install.sh | bash

Go Install:

go install github.com/asheshgoplani/agent-deck/cmd/agent-deck@v1.16.33

Changelog

  • e7167b6 build(deps-dev): bump vite from 8.3.1 to 8.3.4 in /tests/web in the npm_and_yarn group across 1 directory (#2829)
  • fa53c4d docs(macapp): app-side checks of the Browser panel in macapp-open.md and events.md (#2750 step 5) (#2799)
  • 7b6a294 feat(perf): opt-in local operation timings and agent-deck perf; cli.list bench guard (#2883)
  • b12b080 feat(release): release-readiness check before a tag, update path end to end (#2785)
  • 208076d feat(remote): Ctrl+V pastes a clipboard image into a remote attach (#2775)
  • e4f8ece feat(remote): opt-in require_same_profile scopes remote talkback to the remote's profile (#2831) (#2886)
  • 5251d6d feat(scripts): check-fix-has-test flags fix PRs without a regression test (#2788)
  • 0934f44 feat(session): every session gets the identity block: ssh, sandbox, opencode, copilot (#2875)
  • e92cd42 feat(session): idle sessions restart onto a newer Claude/Codex build (ASK-14) (#2787)
  • 3257182 feat: hand a session to another as a reference (ASK-111) (#2882)
  • 3f00704 feat: report a problem from the TUI and CLI, with a scrubbed preview (ASK-109) (#2887)
  • 7e38565 fix(attach): hold keys typed while an attach starts; Ctrl+Q works from the first byte; rebind gate sized from the largest copy (#2856)
  • cf922ad fix(bridge): find a renamed conductor's inbox by its conductor name (#2867)
  • 2cf6927 fix(cli): launch, fork and move resolve -g like add; the TUI heartbeats on every status tick (#2845)
  • eb9a2f7 fix(cli): self and auto-parent fallbacks match the whole tmux name, not its suffix (#2871)
  • c7aa23a fix(codex): reconcile a send the running turn took up (#2836) (#2877)
  • 2ea4bb3 fix(comms): read spool entries of one millisecond in write order (#2823) (#2859)
  • 9e47880 fix(costs): compare cost_events timestamps as datetimes in ProjectedMonthly and PurgeOlderThan (#2811)
  • 248ec99 fix(costs): start "this week" on the current Monday, not the previous one (#2812)
  • b471303 fix(events): macapp events follow-ups (undoable deletes, box exit codes, private log, lowercase kinds) (#2761)
  • 0682675 fix(inbox): say when no notify-daemon is running in drain and the fleet line (#2834) (#2863)
  • 0b423bb fix(notify): stop re-reading the bus and spawning tmux per session every pass (#2770) (#2774)
  • 2d75216 fix(opencode2): recognize newly created sessions as OpenCode (#2838)
  • 1e29e5d fix(opencode2): retain launcher identity in the main menu (#2830)
  • cc6814e fix(remote): image paste over ssh: no dropped Ctrl+V, size and timeout honest, safe paths, title restored (#2870)
  • 61815ab fix(remote): kill ssh process groups on timeout/signal, bound remote commands (#2764)
  • 9fe6c54 fix(remote): resolve single-target sessions without a full remote list (#2768)
  • 4479e50 fix(security): bridges and webhook hardening (#2884)
  • 908ab6d fix(security): private state files and sockets, per-user SSH control dir, env secrets out of argv (#2885)
  • 5d2ddbd fix(security): shell-quote launch values and log folder-trust grants (#2876)
  • ce87be9 fix(security): validate spawn-guard paths and log values; bound an args index (CodeQL) (#2891)
  • 652b2b4 fix(send): a send to a busy session with queued input queues instead of being refused (#2847)
  • 0e22bdc fix(session): a deliberate stop of a restarted child is not reported as an error (#2853) (#2888)
  • de86d05 fix(session): a queued start seeds folder trust and delivers the -m message once (#2879)
  • f0a7fdc fix(session): a restart is quiet on every path, not only the snapshot edge (#2792) (#2802)
  • 589faaa fix(session): a resume-only restart sends the parent no completion notice (#2792) (#2793)
  • fa7035b fix(session): a stop tells a restart from a dead-pane sample (#2874)
  • a897aae fix(session): a stop writes stopped right after the kill, so an error sample cannot refuse it (#2850)
  • 381bc03 fix(session): find Claude transcripts under the session's own config dir (#2769) (#2772)
  • d50e9dd fix(session): no false 'resumed session reports an error' after an idle refresh (#2869)
  • 7122aea fix(session): no false error or false finished record after a clean idle restart (#2866)
  • 3cfe06e fix(session): refuse writes to another profile's state store (#2786)
  • 868b8ca fix(session): sanitize the instance id and error in storage cleanup warnings (CodeQL) (#2892)
  • 0074d6f fix(session): shell panes start with AGENTDECK_* set instead of a typed export (#2817) (#2842)
  • fe7a604 fix(session): tell the parent when an idle child dies; send the idle-restart line when the boot flip is unseen (#2806, #2813) (#2846)
  • 681ec52 fix(session): transcript readers follow the copy the live Claude writes after an account switch (#2840)
  • cba073f fix(ssh): use %C in ControlPath so long user@host stays under sun_path (#2837) (#2849)
  • 6104b32 fix(switch): hands-free account switch: settle after restart (trust, plugins, kick, verify) (#2778)
  • 721f1bf fix(switch): keep a switch whose session came up on the target despite a start error; one-line stderr reason on every failure (#2816)
  • 9d7bcc5 fix(testutil): IsolateHome also clears the agent tools' config-dir vars (#2783)
  • 04ba77d fix(tmux): join the previous fast-death watcher before Start renames the session (#2807)
  • 4106b0b fix(tmux): read Session.Name and Command under a lock on status paths (#2808) (#2843)
  • a748737 fix(tmux): status counter normalization; tests that can fail instead of grep or log (#2794)
  • b159dc6 fix(ui): a mouse report never reaches the TUI split across reads (#2826) (#2858)
  • 6bedc7a fix(ui): attached TUI says an update waits; idle auto-compaction sends no record; ssh Ctrl+V hint (#2857)
  • c94fe64 fix(ui): back off remote polls of a slow or failing host; remote polling contract (#2763)
  • 97a1eda fix(ui): bound the web undo sweep, clear the record of an undone delete (#2776)
  • 3804651 fix(ui): remote poll backoff follow-ups (#2771) (#2773)
  • 1cc837f fix(ui): remote session preview keeps the pane's bottom (status line, footer) (#2766)
  • 973485b fix(ui): the TUI's input owns no kqueue/epoll, so attaches stop leaking descriptors (#2692) (#2815)
  • 4dd8882 fix(update): notify daemon recycles after a binary swap; every install writes one auto-update.log line (#2777)
  • 975326f fix(watcher): cap each watcher's pending deliveries and count refusals; log only the tail of setup output (#2881)
  • 7210bc7 fix: archived sessions are left out of status counts, the TUI header and desktop alerts (#2878)
  • 901c9a5 fix: code-health batch 1 (edit-paths under HOME, profile migrate tx, registration lock, cost watcher, MCP config preserve) (#2851)
  • 6b8c05f fix: code-health batch 2 (UTF-8 truncation, Gemini hooks, web group parent, plugin CLI, starting status, settings runes, ssh paste notice) (#2852)
  • b1d364f fix: code-health batch 3 (group flags, inbox stats scope, run-task profile, statusline tools, trust seed root, Cursor hooks, search index) (#2854)
  • a3a9206 fix: four small fixes from Yasir (FormatPath HOME prefix, ElectPrimary claim, add -g ambiguous name, Codex queued wrap) (#2839)
  • 21151b9 fix: nine small fixes from Yasir (netstat, watcher routing/backoff/UTF-8, jj prune, branch picker, MCP restart, web push timeout, releases-behind) (#2848)
  • 1764d27 fix: six small fixes from Yasir (shellwords, recall hint unset, inbox wake classify, current session id, StripANSI OSC, truncatePath CJK) (#2844)
  • 5449cf8 perf(list): one batched tmux capture per socket for list --json status passes (#2762)
  • 41f4960 perf(status): one ps snapshot per pass for Codex; dead rows from one tmux listing (#2880)
  • 5a2a127 perf(status): stop probing tmux per session when the session or server is gone (#2835)
  • 1599566 perf: events publish 1016 -> 13 ms; web menu status pass 948 -> 171 ms at 100 sessions (#2861)
  • adc1000 refactor(cli): split session_cmd.go into topic files (pure move) (#2865)
  • a2c1c7d refactor(costs): move the send budget gate into internal/session so the daemon can call it (#2825)
  • f1227f6 refactor: menu snapshot contract moves to internal/menudata; ui no longer imports web (#2864)
  • 8f98296 refactor: split tmux.go, instance.go and home.go into topic files (pure move) (#2872)
  • 52b553d release: v1.16.33 (#2898)
  • eb1a01b test(ci): validate tests/known-flaky.txt against real tests and the summary parser (#2784)
  • 8de0a58 test(cli): cut cmd/agent-deck from ~600 s to 290 s (race 773 s to 361 s), same assertions (#2804)
  • 4f85d1b test(cli): every subcommand answers --help and -h without side effects (#2779)
  • 6594d2c test(cli): pin profile selection across state-writing commands (#2782)
  • accf344 test(cli): remove shared eval build dir in TestMain; bound runRemoveCLI by process group (#2798)
  • edb7234 test(cli): stub launchctl and systemctl so cmd tests never touch the host's daemons (#2822)
  • 7549db2 test(core): queued-start tests wait for spawn goroutines and the events bus before cleanup (#2890)
  • 4d63303 test(inbox): pin the whole drain-target resolution matrix in one table (#2781)
  • 352c448 test(sandboxguard): clear DSH_HOME, name the leaked env var, guard home-derived tool paths (#2796)
  • 2ae021f test(send): end-to-end delivery on a real tmux pane: busy queue, foreign draft, inbox across restarts (#2789)
  • e18cf40 test(send): pin #2077 stranded-composer send end to end, both send modes (#2780)
  • 828da93 test(session): the transcript stream test waits for the stop event (#2862)
  • 5b0d9f0 test(tmux): status pane corpus with one check per detector (#2791)
  • 74a8fd0 test(tmux): two tests wait for what they assert on tmux 3.6 (#2860)

Full Changelog: v1.16.30...v1.16.33

Don't miss a new agent-deck release

NewReleases is sending notifications on new releases.