Repository navigation
Fan-out plan: parallel work across the open backlog #39
Description
Scheduling map for running several agents at once without them fighting over the same files. Supersedes #28 as the tracking issue.
Rule for whoever picks one up: branch per issue, and stay inside your files. The overlap column names the hot files — if two issues in the same wave both touch one, the second to land rebases rather than the first blocking.
Wave 1 — correctness. These are wrong, not missing. Land first.
| Issue | Owns | Overlaps |
|---|---|---|
| #36 attachments never reach the model | routes/chat/[id]/stream/+server.ts, lib/engine/options.server.ts |
stream route (with #15, #19) |
| #30 cron is UTC-only, rejects ranges and lists | lib/automations/cron.ts, tests/automations.* |
none |
| #15 two tool surfaces at once | lib/engine/options.server.ts, lib/tools/tool-schemas.ts |
engine options (with #36) |
| #34 subagent output inlined unescaped | lib/agents/inline-subagent.ts, lib/chat/stream-slots.server.ts |
subagents (with #5) |
| #11 seven pre-existing type errors | routes/review/+page.svelte, routes/chat/[id]/+page.svelte |
chat page (with wave 3) |
| #10 drizzle-kit generate is broken | drizzle/meta/ |
every migration author — worth doing early |
Fully parallel except: #36 and #15 both touch the engine boundary, #34 and #5 both touch subagents.
Wave 2 — the categories to win. Biggest payoff, mostly independent.
| Issue | Owns | Depends on |
|---|---|---|
| #31 automation history, run-now, retry, failures | lib/automations/*, routes/automations/, new migration |
#30 lands first (same domain, avoid conflicts) |
| #33 long-horizon monitors | new lib/monitors/, jobs registration, new migration |
— |
| #5 SDK subagents | lib/engine/, lib/agents/inline-subagent.ts, deletes lib/runtime/ |
#34 |
| #32 fan-out with a concurrency cap | lib/engine/tools.server.ts, lib/chat/SubagentBlockCard.svelte, lib/costs/ |
#5 |
| #20 CI watch | lib/source-control/, routes/api/webhooks/github/ |
better after #33 — build it as a monitor, not a second poller |
| #9 gateway for non-Claude models | lib/engine/options.server.ts |
after #15 |
Three migration authors here (#31, #33, and possibly #20). Whoever goes second re-numbers — see #10.
Wave 3 — session surface. All UI, all collide on the chat page. Serialize or accept rebases.
#29 preview pane · #19 permission modes · #24 filesystem checkpoints · #21 todo list · #16 diff view · #26 terminal output · #35 background work in a turn · #14 what the right rail is for
Hot files: routes/chat/[id]/+page.svelte, lib/chat/MessageBlocks.svelte, lib/chat-console/ChatConsoleRail.svelte. Suggested order: #29 first since it defines the rail, then #16 and #26 as preview consumers, then #21 and #35 as rail content, with #19 and #24 running alongside since they are mostly server-side.
Wave 4 — long tail. Independent, pick up any time.
#17 external MCP · #18 conversation search, pin, archive, export · #37 memory management · #38 usage digest · #22 slash commands and @-mentions · #23 project instructions · #27 the dead TTS endpoint · #8 delete dead engine code · #1 fresh-install setup gate · #2 setup flow · #3 consolidate stale databases · #4 native AskUserQuestion
Standing constraints for every branch
bun run checkmust come back at the current baseline (6 pre-existing errors, all in Fix 7 pre-existing type errors #11) or better. Do not add to it.bun run buildmust pass. It broke silently for a week under a bad chunk export; a green check is not a green build.- Migrations are hand-written and hand-journalled until drizzle-kit generate is broken (snapshot collision in drizzle/meta) #10 is fixed. Claim the next number in your PR description so two branches do not both take
0064. - The NAS deploys from
mainon every push via GitHub Actions and watchtower, and the app runs pending migrations at boot. Merging is deploying.
Target state: every row in docs/structure/claude-desktop-parity.md at even or better, and the four categories that define this thing as a server — scheduling, monitoring, orchestration, accounting — at win.
Activity
Re-verdict the parity audit and lay out the fan-out waves
derekhearst commentedon Sep 24, 2026
Status: the backlog in this plan has shipped
Run of 2026-09-22 → 24: a subsystem audit (148 raw findings; each re-checked against the code before any change) plus every open feature issue, landed as 24 PRs in three waves. Stacked where they conflicted, CI-green before each merge.
Wave 1 — security & correctness
/_appas public) + first-run setup rework — closes Fresh install cannot reach /setup (401 before the setup gate) #1, Rework the setup / first-run flow #2.git/configdb:resetname guard (refs Consolidate stale AgentStudio databases #3)Wave 2 — fixes + small features
run_coderemoved (Delete dead engine code left by the Agent SDK migration #8, run_code cannot run on the engine path — it needs a runtime context only the old loop supplies #69)Wave 3 — parity features
@mentions +/palette (Composer: slash commands and @-file mentions #22) · Edit and regenerate answer the edited message; restore files on rewind (#24) #95 edit/regenerate on the SDK session + rewind files (Filesystem checkpoints so a session can be rewound #24) · Adopt the SDK's native AskUserQuestion and rebuild the ask card (#4) #96 native AskUserQuestion (Adopt the SDK's native AskUserQuestion and redesign the ask card #4) · Live shell output while a command runs; honest background tasks (#26, #35) #97 live shell output (Surface shell output as a terminal, not a tool card #26, Background work inside a chat turn #35) · Orchestration: parallel foreground subagents with a cap, per-child budget and cost, child cards (#32) #98 orchestration (Multi-agent orchestration: fan out, run in parallel, show the tree #32) · Conversations: pin, archive, full-text search and export (#18) #99 pin/archive/search/export (Conversation lifecycle: pin, archive, real search, export #18) · Connect external MCP servers over HTTP/SSE, with per-tool policy (#17) #100 external MCP connectors (Connect external MCP servers (consume, not just serve) #17)Still open
derekPostgres password (it is in the public repo's history), then decide whether to drop the stale databases. The code-side part (naming rule,db:resetguard) shipped in DB bootstrap: never auto-drop, lock migrations, guard db:reset (#3) #83.🤖 Generated with Claude Code
derekhearst commentedon Oct 12, 2026
Every planned item shipped across 24 PRs.