workspacelisted
Install: claude install-skill kauffj/agent-config
# Parallel workspaces
Owns the lifecycle of isolated working environments. Each workspace = git worktree + dev-server port + state record. The `feature`, `propose`, and `review-pr` skills use these primitives; they don't reimplement them.
**State files** (relative to repo root):
- `.workspaces/workspaces.json` — `{ workspaces: [...] }`
- `.workspaces/project.json` — derived project-profile cache (see `lib/project.mjs`)
- `.workspaces/plans/<slug>.md` — saved plans from `propose`
- `.workspaces/worktrees/<name>/` — the worktrees themselves
Worktrees live INSIDE the repo (not as `../<repo>-<name>` siblings — those bloated `~/projects`). The whole `.workspaces/` dir is kept out of git via `.git/info/exclude`, not `.gitignore`: an exclude entry needs no commit, and on self-deploying projects a `.gitignore` commit pushed to main would deploy. The dot-prefixed path also keeps `tsc`/lint wildcard globs in the main checkout from descending into nested worktrees.
On first run after upgrading, the helpers auto-relocate any legacy state from `.claude/` to `.workspaces/`. Old `.claude/features.json` (legacy format) is also transformed.
**Helper:** `$HOME/.config/agent-config/lib/workspace.mjs` — all state reads/writes and
direct-delivery Git mutations go through this. Do not inline state mutations or
reimplement its integrate/publish/verify/finish guards in other skills.
**Record shape:**
```json
{
"name": "member-event-rsvp",
"kind": "feature",
"description": "...",
"branc