Repository navigation
Tiled Dispatch #248
Description
Tiled Dispatch
Summary
Add a Tiled Dispatch command that lets the user enter a tile count, up to 10, and opens a multi-lane Dispatch layout where several live agents can be viewed and controlled at the same time.
Problem
Dispatch Mode is useful for managing many agents, but it currently behaves like a single command-center surface. That means the user can see the list of agents, pick one, and work with that agent, but they cannot easily keep multiple active agents visible side by side from the Dispatch workflow.
When coordinating several Claude/Codex agents, the user often wants both:
- A full Dispatch index with all worktrees, section titles, agent types, and full agent titles.
- Multiple live agent views on screen at once, each with a small local selector for switching that lane to another agent.
The existing single Dispatch surface makes that workflow too serial.
Proposed Behavior
Add a command:
Tiled Dispatch
When run, the command prompts the user for a number:
How many dispatch tiles? 1-10
After the user enters N, Agent Code enters a tiled Dispatch layout:
┌──────────────────────┬──────────────────────────────┬────────────┬──────────────────────────────┬────────────┬──────────────────────────────┐
│ DISPATCH INDEX │ AGENT VIEW 1 │ MINI LIST │ AGENT VIEW 2 │ MINI LIST │ AGENT VIEW 3 │
│ full list │ selected agent │ compact │ selected agent │ compact │ selected agent │
│ │ │ │ │ │ │
│ Worktree: app │ ┌──────────────────────────┐ │ ● Agent A │ ┌──────────────────────────┐ │ ● Agent B │ ┌──────────────────────────┐ │
│ Claude Agent A ◀ │ │ Claude/Codex transcript │ │ ● Agent B◀ │ │ Claude/Codex transcript │ │ ● Agent C◀ │ │ Claude/Codex transcript │ │
│ Codex Agent B │ │ composer / terminal │ │ ● Agent C │ │ composer / terminal │ │ ● Agent D │ │ composer / terminal │ │
│ Claude Agent C │ │ live output │ │ ● Agent D │ │ live output │ │ ● Agent E │ │ live output │ │
│ │ │ │ │ │ │ │ │ │ │ │ │
│ Worktree: issue-211 │ │ selected from index │ │ no groups │ │ selected from mini list │ │ no groups │ │ selected from mini list │ │
│ Codex Agent D │ └──────────────────────────┘ │ no cwd │ └──────────────────────────┘ │ no cwd │ └──────────────────────────┘ │
│ Claude Agent E │ │ no type │ │ no type │ │
└──────────────────────┴──────────────────────────────┴────────────┴──────────────────────────────┴────────────┴──────────────────────────────┘
For N tiled lanes, the conceptual layout is:
[full dispatch index] [agent view 1] [mini list 2] [agent view 2] ... [mini list N] [agent view N]
The first lane is special:
- It keeps the full Dispatch list UI.
- It shows full section titles.
- It shows worktree/project grouping.
- It shows agent type/provider labels.
- It acts as the global index for the whole tiled Dispatch layout.
Every later lane uses a compact local selector:
- It shows a minimal agent list.
- It omits repeated section titles.
- It omits repeated worktree labels.
- It omits repeated agent type/provider labels.
- It is only there to switch which agent is shown in that lane.
Each lane still has a real live agent view beside its list. This is not just multiple copies of the Dispatch list; the point is to make multiple agents visible and usable at the same time.
Scroll and Selection Sync
When the user scrolls a compact mini list, the full Dispatch index on the far left should follow that scroll position enough to keep the same region of the agent list/context visible. The full index remains the source of truth for rich context: section titles, worktrees, provider labels, and full agent titles.
Selection highlighting is separate from scroll sync:
- The full index still highlights the agent selected in lane 1.
- A compact mini list highlights the agent selected for its own lane.
- Scrolling mini list 3 should move the full index to the same approximate list region, but it should not make the full index pretend that lane 3's agent is selected.
- This lets the user use the full left index as context while still seeing exactly which agent belongs to lane 1.
In other words:
Lane 3 mini list scrolls
│
▼
Full left index follows scroll/context
│
└── but selected highlight remains Agent 1 / lane 1
UX Notes
- The default tile count should be conservative, probably
2or the previous value if one exists. - The max should be clamped to
10. - The layout needs horizontal overflow or responsive compression for high tile counts.
- The first/full Dispatch index should stay readable even when there are many lanes.
- Compact mini lists should be dense and stable, optimized for quick lane switching.
- The selected agent per lane should be independent.
- Switching one lane should not steal focus or selection from the other lanes.
- Scrolling a compact mini list should sync the full index's scroll context, while preserving the full index's own selected-agent highlight.
Open Questions
- Should tiled Dispatch persist across app reloads, or should it be a transient Dispatch view mode?
- Should each lane remember its selected agent by session id across normal Dispatch exits/reentries?
- Should lane widths be resizable?
- Should the full index lane be pinned/sticky while the right-side lanes horizontally scroll?
- Should tile count changes preserve current lane selections where possible?
Acceptance Criteria
- A
Tiled Dispatchcommand exists. - Running it prompts for a tile count from
1to10. - Entering a valid count opens a tiled Dispatch layout.
- The leftmost lane shows the full Dispatch index with section titles, worktree grouping, provider/agent type labels, and full titles.
- Each additional lane shows a compact mini list plus the actual selected agent view to its right.
- Each lane can select a different live agent.
- Scrolling a compact mini list scroll-syncs the full left Dispatch index to the same general list region.
- The full left Dispatch index continues to highlight lane 1's selected agent, even while its scroll position follows another lane's mini list.
- The same agent process/session is reused; switching tiled views must not respawn agents.
- Exiting tiled Dispatch returns the user to the normal workspace without killing agents.
- Invalid counts are rejected or clamped safely.
Activity
fix(dispatch): address review findings on tiled dispatch (#248)
Merge pull request #264 from Juliusolsson05/feat/tiled-dispatch
Merge pull request #269 from Juliusolsson05/feat/tiled-dispatch-chip-…
Merge pull request #271 from Juliusolsson05/fix/tiled-dispatch-comman…
Merge pull request #272 from Juliusolsson05/fix/replace-session-tiled…
Merge pull request #273 from Juliusolsson05/fix/tiled-lane-integrity
Merge pull request #274 from Juliusolsson05/fix/session-id-coherence