v1.38.0
feat(ws): list every AI agent in its own dashboard section, with its state and coder
Finding the agent that needed you in dg ws meant reading dot colors across the
whole tree, including windows that only ran Neovim or a shell. The dashboard now
has two sections: SPACES (repos, worktrees and sessions, with no status markers)
and AGENTS, one flat list of every Claude Code and OpenCode pane, most urgent
first, each with a state word and the coder's name.
- Agents are sorted blocked > error > done > working > idle. "Done" is new: the
agent finished and you haven't looked yet; it becomes "idle" once you have.
enterjumps straight to the agent's pane, and the right pane shows that
agent's worktree diff. - Each coder now says what it is: the Claude hooks and the OpenCode plugin
write a@dg_agent_kindpane option on start and with every state write,
and remove it on exit (ADR-0055). A pane that is back to a plain shell is
never listed. afolds agents andwfolds spaces, in any order. A folded section becomes
a one-line bar at the bottom of the column (the agents bar keeps a count per
state), and the last open section can't fold.+/-or dragging the AGENTS
header moves the split; a section that needs less space gives the rest to the
other. Folds and split are saved with the rest of the view state./searches only the open sections; in agents it matches location, coder
name and state word, so/blockedand/opencodework. Headers show
"1 of 4" while filtering.- The dashboard takes its pane-move keys from tmux (
list-keys), so your
ctrl+h/j/k/lmove between sections and the diff pane, and hand off to the
next tmux pane at an edge (ADR-0057). The shipped tmux config passes those
keys through todevgeta ws. - Repos with no open window start folded; unfolding one is remembered.
Fixes
- A working agent no longer shows as idle. Picking it in
dg wswiped its
busystate, and answering a permission prompt left nothing to setbusy
again. Looking at a pane now only clears states that ask for you
(done/blocked/error), and both coders mark themselves busy again when a tool
finishes (ClaudePostToolUse, OpenCodetool.execute.after). - The cursor can no longer move invisibly inside a folded section, and reopening
the dashboard with spaces folded lands on the agent in the window you came
from. - A selected idle agent row, and the folded bars, no longer render as an empty
gray bar: dim text on the selection background was the same color as the
background. - The OpenCode plugin's tests could write
@dg_agent_kind opencodeonto the
real tmux pane they ran in; they now never see the real pane.
Behavior changes: space rows no longer show agent status dots; agent state is
shown only in the AGENTS section. Selected idle agent rows show their text at
full brightness. Claude Code runs one extra hook after every tool call (one
tmux call when the agent is already busy).
Migration: after upgrading, run dg configure claude --force,
dg configure opencode --force and dg configure tmux --force, then restart
running coders so they load the new hooks. If you build devgeta from source
with uncommitted changes, run dg configure devgeta --force first: builds from
the same commit share one extracted config folder, so a later build can deploy
an earlier build's hooks.
Full Changelog: v1.37.0...v1.38.0