Progressive Polyrepo Workspaces
For projects with 10+ repositories, creating all worktrees upfront wastes time and disk space — most issues only touch 1-3 repos. Progressive polyrepo workspaces solve this by starting with only essential repos (like a meta repo) and adding more on demand during work.When to Use Progressive Mode
| Project Size | Recommended Mode | Behavior |
|---|---|---|
| 1-9 repos | Standard polyrepo | All repos checked out on workspace creation |
| 10+ repos | Progressive | Only essential repos initially; agents add more as needed |
| Any project with a meta repo | Progressive | Meta repos symlinked as read-only references |
Overview
Progressive workspaces are opt-in per-project via theprogressive: true flag. When enabled:
- Workspace creation is fast — only
always_includerepos get worktrees/symlinks - Agents add repos on demand — using the
/workspace-add-reposkill or CLI command - Meta repos stay clean — they symlink to
mainwith no feature branches - Repo groups simplify addition — agents can add a named group (
simphony,aloha) instead of individual repos
Configuration
New Configuration Fields
WorkspaceConfig Additions
| Field | Type | Description |
|---|---|---|
progressive | boolean | When true, only always_include repos are created on workspace init |
always_include | string[] | Repo names to always include (typically meta/docs repos) |
groups_file | string | Path (relative to project root) to repo-groups.yaml |
pr_target | string | Default PR target branch for all repos (e.g., 'qa') |
RepoConfig Additions
| Field | Type | Description |
|---|---|---|
pr_target | string | Per-repo PR target branch override |
readonly | boolean | If true, agent should not commit to this repo |
link_type | 'worktree' | 'symlink' | How to include repo in workspace (default: 'worktree') |
Repo Groups
Repo groups let agents add multiple related repos at once. Groups are defined in arepo-groups.yaml file within your meta repo:
Adding Repos Mid-Work
CLI Command
Skill: /workspace-add-repo
Agents invoke this skill during work when they need repos not yet in the workspace:
- Reads
repo-map.mdin the meta repo for architecture context - Reads
repo-groups.yamlfor available group names - Adds only the repos needed — agents can always add more later
Meta Repos (Symlink Behavior)
Meta repos (shared skills, architecture docs, team conventions) uselink_type: symlink:
- A symlink is created:
workspaces/feature-int-123/meta → /project/team-meta - The symlink always reflects the latest state of the actual repo
readonly: truetells the agent not to commit changes there- No git worktree is created — the meta repo stays on
main
PR Target Branch
Thepr_target field surfaces in agent context so PRs get created against the right branch:
-
CLAUDE.md injection — workspace CLAUDE.md includes:
-
Polyrepo context —
buildPolyrepoContext()lists repos with theirpr_targetvalues
Per-Repo Override
Migration from Standard Polyrepo
Existing polyrepo projects (noprogressive field) work identically to before:
- Add
progressive: true - Identify
always_includerepos (typically just the meta repo) - Optionally add
groups_filefor team-defined repo groups - Optionally add
pr_targetif your project uses a non-standard PR target branch - Update meta repo
readonlyrepos withlink_type: symlink
Related Guides
- Polyrepo Configuration — Standard polyrepo setup
- Meta Repos — Meta repo pattern and team onboarding
- Setup Wizard — Interactive project setup
- Issue Tracker Integration — Rally and other tracker configuration