Workspace Split — Epic
Integration branch: V1
Design doc: docs/superpowers/specs/2026-04-20-workspace-split-design.md
Why
Today the Rust source is one crate (~92k LOC, 356 files). Any edit triggers full-crate re-codegen. After switching to rust-lld (commit 620e7ad ), incremental cargo build is ~7.5s — still dominated by per-crate codegen.
Target: after splitting into a workspace, editing a single tool touches ~3s.
Dependency analysis (source: grep use crate::X;)
Leaves (zero internal deps): types, auth, observability, skills, keybindings, bootstrap
Cycles (must be broken): tools::agent↔engine::lifecycle, engine↔commands, via narrow call sites (1–3 files each)
Phased execution
Each child issue is an independently mergeable PR on V1. Build and test must pass at every phase.
[workspace-split] Phase 0: Workspace skeleton (no code moves) #69 — Phase 0: Workspace skeleton (no code moves)
[workspace-split] Phase 1: Extract leaf crates (types, observability, keybindings) #70 — Phase 1: Extract leaf crates (types, observability, keybindings)
[workspace-split] Phase 2: Extract leaf crates (auth, bootstrap, skills) #71 — Phase 2: Extract leaf crates (auth, bootstrap, skills)
[workspace-split] Phase 3: Extract level-1 crates (config, utils, mcp, services, computer-use) #72 — Phase 3: Extract level-1 crates (config, utils, mcp, services, computer-use)
[workspace-split] Phase 4: Extract level-2 crates (compact, sandbox, permissions, browser, session) #73 — Phase 4: Extract level-2 crates (compact, sandbox, permissions, browser, session)
[workspace-split] Phase 5: Break hub cycles (tools↔engine, engine↔commands) #74 — Phase 5: Break hub cycles (agent→engine, Hook trait, commands inversion)
[workspace-split] Phase 6: Extract core crates (engine, query, tools, lsp-service) #75 — Phase 6: Extract core crates (engine, query, tools, lsp-service)
[workspace-split] Phase 7: Extract high-level crates (plugins, teams, daemon, commands, ipc) #76 — Phase 7: Extract high-level crates (plugins, teams, daemon, commands, ipc)
[workspace-split] Phase 8: Thin root bin crate + final measurements #77 — Phase 8: Thin root bin crate + final measurements
Acceptance
Workspace Split — Epic
Integration branch:
V1Design doc:
docs/superpowers/specs/2026-04-20-workspace-split-design.mdWhy
Today the Rust source is one crate (~92k LOC, 356 files). Any edit triggers full-crate re-codegen. After switching to
rust-lld(commit 620e7ad), incrementalcargo buildis ~7.5s — still dominated by per-crate codegen.Target: after splitting into a workspace, editing a single tool touches ~3s.
Dependency analysis (source: grep
use crate::X;)types,auth,observability,skills,keybindings,bootstraptools::agent↔engine::lifecycle,engine↔commands, via narrow call sites (1–3 files each)Phased execution
Each child issue is an independently mergeable PR on
V1. Build and test must pass at every phase.Acceptance
cargo testgreen at every phase boundary