From a34687f84435f1a4a38ba7261a62ec5874c3b7f1 Mon Sep 17 00:00:00 2001 From: Hibryda Date: Fri, 6 Mar 2026 16:54:35 +0100 Subject: [PATCH] docs: update docs for Phase 7 agent teams and subagent support --- docs/phases.md | 18 +++++++++++++++++- docs/progress.md | 20 +++++++++++++++++++- docs/task_plan.md | 8 +++++--- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/docs/phases.md b/docs/phases.md index 9400701..572ff1c 100644 --- a/docs/phases.md +++ b/docs/phases.md @@ -151,7 +151,7 @@ bterminal-v2/ - [x] Init -> model badge - [x] Cost -> USD/tokens/turns/duration summary - [x] Errors -> highlighted error card - - [ ] Subagent spawn -> tree node + optional new pane (Phase 5) + - [x] Subagent spawn -> auto-creates child agent pane with parent/child navigation (Phase 7) - [x] Agent status indicator (starting/running/done/error) - [x] Start/stop agent from UI (prompt form + stop button) - [x] Auto-scroll with scroll-lock on user scroll-up @@ -230,6 +230,22 @@ bterminal-v2/ - [x] Auto-update signing key generated, pubkey set in tauri.conf.json - [ ] TAURI_SIGNING_PRIVATE_KEY secret must be set in GitHub repo settings +--- + +## Phase 7: Agent Teams / Subagent Support [status: in progress] — Post-MVP + +- [x] Agent store parent/child hierarchy — parentSessionId, parentToolUseId, childSessionIds fields on AgentSession +- [x] Agent store functions — findChildByToolUseId(), getChildSessions(), parent-aware createAgentSession() +- [x] Agent dispatcher subagent detection — SUBAGENT_TOOL_NAMES Set ('Agent', 'Task', 'dispatch_agent') +- [x] Agent dispatcher message routing — parentId-bearing messages routed to child panes via toolUseToChildPane Map +- [x] Agent dispatcher pane spawning — spawnSubagentPane() creates child session + layout pane, auto-grouped under parent +- [x] AgentPane parent navigation — SUB badge + button to focus parent agent +- [x] AgentPane children bar — clickable chips per child subagent with status colors (running/done/error) +- [x] SessionList subagent icon — '↳' for subagent panes +- [ ] Test with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 +- [ ] Update dispatcher tests for subagent routing +- [ ] Subagent cost aggregation in parent pane + ### System Requirements - Node.js 20+ (for Agent SDK sidecar) - Rust 1.77+ (for building from source) diff --git a/docs/progress.md b/docs/progress.md index 607b1b8..8329c4a 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -211,9 +211,27 @@ Architecture decision: Uses `claude` CLI with `--output-format stream-json` inst Build status: TypeScript 0 errors, Rust 0 errors (1 pre-existing warning), all tests green. +### Session: 2026-03-06 (continued) — Agent Teams / Subagent Support + +#### Agent Teams Frontend Support +- [x] Agent store: AgentSession extended with parentSessionId?, parentToolUseId?, childSessionIds[] for parent-child hierarchy +- [x] Agent store: createAgentSession() accepts optional parent param, registers bidirectional parent/child links +- [x] Agent store: findChildByToolUseId(parentId, toolUseId), getChildSessions(parentId) query functions +- [x] Agent store: removeAgentSession() cleans up parent's childSessionIds on removal +- [x] Agent dispatcher: SUBAGENT_TOOL_NAMES detection ('Agent', 'Task', 'dispatch_agent') on tool_call events +- [x] Agent dispatcher: spawnSubagentPane() creates child session + layout pane, auto-groups under parent title +- [x] Agent dispatcher: toolUseToChildPane Map routes messages with parentId to correct child pane +- [x] Agent dispatcher: handleAgentEvent() splits messages — parentId-bearing go to child panes, rest to parent +- [x] AgentPane: parent link bar (SUB badge + navigate-to-parent button) +- [x] AgentPane: children bar (chips per child subagent, status-colored, clickable to focus) +- [x] SessionList: subagent panes show '↳' icon instead of '*' + +Design: No separate sidecar process per subagent. Parent's sidecar handles all; routing is purely frontend based on SDK's parentId field. + ### Next Steps - [ ] Set TAURI_SIGNING_PRIVATE_KEY secret in GitHub repo settings - [ ] Deno sidecar: test with real claude CLI, benchmark startup time vs Node.js - [ ] E2E testing with Playwright/WebDriver (when display server available) - [ ] Multi-machine support (remote agents via WebSocket) -- [ ] Agent Teams integration +- [ ] Test agent teams with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 +- [ ] Update dispatcher tests for new subagent routing logic diff --git a/docs/task_plan.md b/docs/task_plan.md index f8aef31..63a51e9 100644 --- a/docs/task_plan.md +++ b/docs/task_plan.md @@ -3,7 +3,7 @@ ## Goal Redesign BTerminal from a GTK3 terminal emulator into a **multi-session Claude agent dashboard** optimized for 32:9 ultrawide (5120x1440). Simultaneous visibility of all active sessions, agent tree visualization, inline markdown rendering, maximum information density. -## Status: All 6 Phases Complete + extras (MVP + post-MVP, packaging, SSH, ctx, themes — Rev 3) +## Status: Phases 1-6 Complete + Phase 7 (Agent Teams) in progress — Rev 4 --- @@ -106,7 +106,7 @@ When SDK changes its message format, only the adapter needs updating. See [phases.md](phases.md) for the full phased implementation plan (Phases 1-6). - **MVP:** Phases 1-4 (scaffolding, terminal+layout, agent SDK, session mgmt+markdown) -- **Post-MVP:** Phases 5-6 (agent tree, polish, packaging) +- **Post-MVP:** Phases 5-7 (agent tree, polish, packaging, agent teams) --- @@ -139,12 +139,14 @@ See [phases.md](phases.md) for the full phased implementation plan (Phases 1-6). | Deno-first sidecar with Node.js fallback | SidecarCommand struct abstracts runtime. resolve_sidecar_command() checks Deno first (runs TS directly, no build step), falls back to Node.js. Both bundled in tauri.conf.json resources. | 2026-03-06 | | Session groups/folders | group_name column in sessions table with ALTER TABLE migration. Pane.group field in layout store. Collapsible group headers in sidebar. Right-click to set group. | 2026-03-06 | | Auto-update signing key | Generated minisign keypair. Pubkey set in tauri.conf.json. Private key for TAURI_SIGNING_PRIVATE_KEY GitHub secret. | 2026-03-06 | +| Agent teams: frontend routing only | Subagent panes created by frontend dispatcher, not separate sidecar processes. Parent sidecar handles all messages; routing uses SDK's parentId field. Avoids process explosion for nested subagents. | 2026-03-06 | +| SUBAGENT_TOOL_NAMES detection | Detect subagent spawn by tool_call name ('Agent', 'Task', 'dispatch_agent'). Simple Set lookup, easily extensible. | 2026-03-06 | ## Open Questions 1. **Node.js or Deno for sidecar?** Resolved: Deno-first with Node.js fallback. SidecarCommand struct in sidecar.rs abstracts the choice. Deno preferred (runs TS directly, compiles to single binary). Falls back to Node.js if Deno not in PATH. 2. **Multi-machine support?** Remote agents via WebSocket. Phase 7+ feature. -3. **Agent Teams integration?** Experimental Anthropic feature. Natural fit but adds complexity. Phase 7+. +3. **Agent Teams integration?** Phase 7 — frontend routing implemented (subagent pane spawning, parent/child navigation). Needs real-world testing with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1. 4. **Electron escape hatch threshold?** If Canvas xterm.js proves >50ms latency on target system with 4 panes, switch to Electron. Benchmark in Phase 2. ## Error Handling Strategy