Skip to content

v1.7.0: agent status board

Choose a tag to compare

@hubbvee hubbvee released this 09 Oct 20:04
· 26 commits to main since this release
9666136

Devbox Anywhere v1.7.0 — agent status board

devbox-session status <project> shows every agent on a project at a glance: what each one has done, who holds the turn, and which agents are safe to clean up. It's a native tmux + git implementation, with no external binary.

$ devbox-session status webapp
project=webapp session=webapp base=auto  (activity is a heuristic)
webapp-api       dirty        +3/-0  turn:alice      working
webapp-web       new          +0/-0  turn:free       idle
webapp-cli       merged       +2/-0  turn:free       idle      (reapable)

What's new

  • Git facts you can trust: new | new+dirty | clean | dirty | merged | merged+dirty, +ahead/-behind against the base branch, and the devbox-turn holder. Uncommitted work is never hidden behind another state.
  • new vs merged: a just-created agent with no commits is new, never merged. devbox-worktree add now records the fork point as an optional 4th registry column.
  • (reapable) = merged, clean, turn free, and not currently working. Only then is devbox-worktree remove <project> <agent> safe. A new or still-working agent is never reapable.
  • Activity is a labeled HEURISTIC: working | idle | blocked | unknown, read from the tmux pane.
    • working = any non-shell foreground process. An agent CLI idle at its own prompt reads working, so treat it as "a CLI is open here", not "busy".
    • blocked = a waiting-for-input prompt (y/n, password, question) stalled past DEVBOX_STATUS_STALE (default 60s).
    • An unreadable pane is unknown, never guessed.
  • --json: a schema-versioned document, one object per agent, "activity_confidence":"heuristic".
  • Fails closed: an unknown project errors. A registered worktree that no longer exists shows MISSING, and the command doesn't crash.

Upgrading from v1.6.x

No migration needed. Existing 3-column registry rows keep working. For agents created before the upgrade, status falls back to the branch reflog to tell new from merged. If that reflog is unreadable, the agent is never marked reapable (fail-safe). New agents get the 4th column automatically.

Scope

Runtime changes are limited to scripts/devbox-session (the new status subcommand) and scripts/devbox-worktree (records the fork point). Every registry reader accepts both 3- and 4-column rows. The installer, harness and other helpers are unchanged.

Testing

  • Full canonical suite green, 62/62 named mutation reds, on BOTH a macOS host without tmux and a Linux host with tmux. The activity probe is guarded by a fake-tmux test that runs everywhere, plus a real-tmux test where tmux exists.
  • Live test on a real devbox in an isolated tmux server, registry and worktree root, with legacy agents created by the shipped v1.6.1 devbox-worktree and new agents added after the upgrade into the same registry. All of these read correctly:
    • y/n prompt → blocked
    • fresh agents, idle and busy → new, not reapable
    • really merged → merged (reapable)
    • legacy agent without a reflog → not reapable
    • fresh with uncommitted work → new+dirty
    • remove/list on mixed rows work

Base: v1.6.1 (d58d3da).