PRD: Remove .squad/ from version control before v1.0
Author: Brady Gaster
Status: Draft
Target: v0.10.0 (release after v0.9.0, giving one full release cycle for migration)
Problem statement
The .squad/ directory is currently tracked in version control. Since SDK mode (squad.config.ts + squad build) generates .squad/ as build output, tracking it creates several problems:
- Merge conflicts on append-only files (decisions.md, history.md) across branches
- Dirty working trees when agents work on multiple branches simultaneously
- CI noise from
.squad/ state changes polluting diffs
- Privacy concerns with agent history and session logs in public repos
- Conceptual confusion —
.squad/ is runtime state, not source code
Current state
- 128 tracked files, ~889 KB across agents, templates, casting, identity, skills
- 58 agent files (charters + histories) — the bulk
- 6 CI workflows reference
.squad/team.md for label sync, triage, heartbeat
- 112 product source files in
packages/ reference .squad/ paths
.gitattributes has union merge drivers for .squad/ append-only files
- SDK mode already treats
.squad/ as generated output from squad.config.ts
Proposed approach
Phase 1: Preparation (v0.9.0 release cycle)
Phase 2: Removal (v0.10.0)
Phase 3: Validation
Migration path for users
Users who have existing .squad/ directories tracked in their repos:
- Run
squad export to save current team state
- Add
.squad/ to .gitignore
- Run
git rm -r --cached .squad/
- Commit
- Team state persists locally;
squad build regenerates from squad.config.ts
Users without SDK mode (squad.config.ts) will need to either:
- Adopt SDK mode first (
squad init --sdk)
- Or keep
.squad/ tracked (opt-in, not the default)
Risks
- Breaking change for users who depend on
.squad/ being in their repo
- CI workflows need updating — if missed, label routing breaks on fresh clones
- History loss — agent
history.md files won't persist across clones (mitigated by squad export)
Timeline
- v0.9.0 (this weekend): Announce plan, begin Phase 1 prep
- v0.10.0 (next release after v0.9.0): Execute Phase 2 removal
- v1.0:
.squad/ is fully local-only, generated by squad build
PRD: Remove
.squad/from version control before v1.0Author: Brady Gaster
Status: Draft
Target: v0.10.0 (release after v0.9.0, giving one full release cycle for migration)
Problem statement
The
.squad/directory is currently tracked in version control. Since SDK mode (squad.config.ts+squad build) generates.squad/as build output, tracking it creates several problems:.squad/state changes polluting diffs.squad/is runtime state, not source codeCurrent state
.squad/team.mdfor label sync, triage, heartbeatpackages/reference.squad/paths.gitattributeshas union merge drivers for.squad/append-only files.squad/as generated output fromsquad.config.tsProposed approach
Phase 1: Preparation (v0.9.0 release cycle)
squad exportcommand to export current.squad/state (charters, history, decisions) to a portable formatsquad initto generate.squad/locally (already does this)squad buildfully regenerates.squad/fromsquad.config.ts.squad/to.gitignoretemplate used bysquad initPhase 2: Removal (v0.10.0)
.squad/to.gitignorein this repogit rm -r --cached .squad/to untrack (files stay on disk)squad buildbefore reading.squad/team.mdsquad-heartbeat.yml— addsquad buildstepsquad-issue-assign.yml— addsquad buildstepsquad-triage.yml— addsquad buildstepsync-squad-labels.yml— addsquad buildstepsquad-preview.yml— addsquad buildstepsquad-promote.yml— addsquad buildstep.gitattributesunion merge drivers for.squad/paths.squad/is local-onlysquad initdocs to mention.gitignoresetupPhase 3: Validation
npm install+squad buildproduces working.squad/squad initon a new project creates.squad/correctly.squad/Migration path for users
Users who have existing
.squad/directories tracked in their repos:squad exportto save current team state.squad/to.gitignoregit rm -r --cached .squad/squad buildregenerates fromsquad.config.tsUsers without SDK mode (
squad.config.ts) will need to either:squad init --sdk).squad/tracked (opt-in, not the default)Risks
.squad/being in their repohistory.mdfiles won't persist across clones (mitigated bysquad export)Timeline
.squad/is fully local-only, generated bysquad build