Repository navigation
v1.4.0: multi-channel sessions with multiple agents
Devbox Anywhere v1.4.0 — Multi-channel sessions with multiple agents
Any channel Hermes is connected to (a terminal over SSH, a Telegram topic, a Slack channel) can drive the same project work, and multiple agents can work one project in parallel without colliding. The box, not any single chat, is the source of truth.
Model
project -> one tmux session shared "room"; every channel resolves to it
agent -> one window + one worktree own checkout + branch = real parallel isolation
channel -> project:window | session a control surface (channels live in Hermes config)
turn-lock -> per worktree one writer per checkout (advisory coordination)
What's new
devbox-session— resolveproject→ tmux session andproject:agent→ session/window/worktree/branch. Fails closed on unknown/off-convention/duplicate/malformed/traversal input.devbox-turn— per-worktree one-writer lock. Atomic acquire, explicit take/release, holder-only release, stale-lock reclaim pastDEVBOX_TURN_TTL, and refuses a nonexistent worktree. Advisory coordination, not a security boundary.devbox-worktree—add/list/removean agent's git worktree +agent/<agent>branch + tmux window.addrolls back atomically on failure;removerefuses a dirty worktree without--force.- Installer + harness integration —
install-devboxcopies the three helpers into the container~/.local/bin(persistent mount); the harnessverifyreportshelper.devbox-{session,turn,worktree}. - Docs + skill —
docs/13-multi-channel-multi-agent.md, an 8th skill reference, README v1.4.0 section.
Design boundaries
- Channels are Hermes configuration, not part of this repo — no channel adapters or per-channel auth code here.
- Agent ids must be
<project>-<suffix>; worktrees live under~/project/.worktrees/<agent>(persistent). - Chat surfaces show snapshots/streams, not a live TUI mirror.
- Every wired channel carries the devbox account's full terminal authority — not a sandbox.
Also fixed
- Default install on Docker Compose v2.40+ —
DEVBOX_BROWSER_PASSWORDis now generated unconditionally, socompose buildno longer fails interpolating the profile-gated browser service on a default (no-browser) install. (Latent since v1.3.0.)
Testing
- Full canonical suite; 38/38 named mutation reds.
- 10/10 live smoke PASS on Ubuntu 24.04 x86_64 / Docker 29.1.3 / Compose v2.40.3: default install, harness verify with the three new helper checks, two agents with independent worktrees/branches, resolver, turn-lock refusing a second writer, dirty-remove refused + forced teardown, loopback-only bindings.
No known blockers within the reviewed and tested scope. Base: v1.3.0 (028b3cb).