Skip to content

feat(agents): rich multi-agent status — GUI, island, Mac menu bar (Phase 1)#107

Merged
oratis merged 1 commit into
mainfrom
feat/agents-rich-status
Jun 18, 2026
Merged

feat(agents): rich multi-agent status — GUI, island, Mac menu bar (Phase 1)#107
oratis merged 1 commit into
mainfrom
feat/agents-rich-status

Conversation

@oratis

@oratis oratis commented Jun 18, 2026

Copy link
Copy Markdown
Owner

What

Layer 1 of the approved agent control plane (plans/iridescent-marinating-torvalds.md): make every claude-code / codex / … agent's progress + status visible. The observers already capture rich SessionActivity (turns, tokens, last tool·file, branch, pendingPermission); the UI just showed pip + name + time. This surfaces it everywhere.

How

  • agent-roster.ts — new pure, source-injected formatActivity(session): ⚠ pending | ✗ err · turn N · Mk tok · $ cmd · Tool file. Replaces the island's local copy (+ its basename), so island + sidebar share one tested impl (injection-safety + unit tests).
  • island — inject ${formatActivity}; header "claude code" → "agents"; row cap 5 → 8.
  • GUI sidebar (lisa-client/lisa-css/lisa-html) — a second per-row activity line (inline sbActivity mirrors the shared fn, since this client script is a documented no-interpolation template literal); "agents" header; cap 5 → 8.
  • Mac menu bar (MenuBarController) — poll /api/agents/sessions (was claude-only); aggregate state counts across all agents; the popover now lists per-agent rows (state dot + kind + branch label + activity line). New DTOs + Swift agentLabel/agentActivity mirroring the web helpers.

Verification

  • 700 tests pass (+5) (formatActivity rules + injection-safety; ISLAND_HTML/MAIN_HTML parse; snapshot updated)
  • npm run typecheck + npm run build clean; swift build clean; dist island verified (formatActivity injected, no __name, basename removed)

Next (per plan)

Phase 2 (Stage A): per-agent Cancel button + /api/agents/dispatch + prominent pendingPermission. Phase 3 (Stage B): managed agents — the real "send commands to a running agent."

🤖 Generated with Claude Code

…r (Phase 1)

Layer 1 of the agent control plane (plan: iridescent-marinating-torvalds). The
observers already capture rich progress (turns/tokens/tools/files/branch/
pendingPermission); this surfaces it everywhere instead of pip+name+time.

- agent-roster.ts: new pure, source-injected `formatActivity(session)` — one-line
  "⚠pending | ✗err · turn N · Mk tok · $cmd · Tool file". Replaces the island's
  local copy (+ its basename helper) so island + sidebar share one tested impl
  (injection-safety test + unit tests cover it).
- island: inject ${formatActivity}; header "claude code"→"agents"; cap 5→8.
- GUI sidebar (lisa-client/lisa-css/lisa-html): a second per-row activity line
  (inline sbActivity mirrors the shared fn — this client script is a
  no-interpolation template literal), "agents" header, cap 5→8.
- Mac menu bar (MenuBarController): poll /api/agents/sessions (was claude-only),
  aggregate state counts across ALL agents, and the popover now lists per-agent
  rows (state dot + kind + branch label + activity line). New DTOs + Swift
  agentLabel/agentActivity mirroring the web helpers.

700 tests pass (+5); typecheck + build clean; swift build clean; dist island
verified (formatActivity injected, no __name, basename removed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@oratis oratis merged commit d390dab into main Jun 18, 2026
1 check passed
@oratis oratis deleted the feat/agents-rich-status branch June 18, 2026 09:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant