dw-startlisted
Install: claude install-skill dominikwozniak/dw-solo-skills
# dw-start — a worktree per change, claimed before building
Mechanics plus one field write: a shaped change gets its own worktree and branch, so several run at
once, each in its own session reading its own `CHANGE.md` from disk. The thinking already happened in
`dw-shape`; the building happens in `dw-next`.
## What it reads and writes
Reads `.ai/work/*/CHANGE.md` (written by `dw-shape`) to find the unclaimed changes. Writes exactly
one thing: the chosen change's `branch:` flips from `unclaimed` to the new branch — the **claim** —
committed immediately. `.ai/` is tracked in git, and an uncommitted claim is invisible to every
other session, which is the race this protocol closes.
## Workflow
### 1. Pick the change
- `$ARGUMENTS` names a slug → that change.
- Bare → list every `CHANGE.md` with `branch: unclaimed`, newest first, and ask.
- A description with no shaped change behind it → shape first: offer `dw-shape` here in the main
tree, then come back.
### 2. Check it isn't taken
Taken means any of: its `branch:` is no longer `unclaimed`; a branch named `<slug>` or
`worktree-<slug>` already exists (`git branch --list`); a worktree already sits at
`.claude/worktrees/<slug>` (`git worktree list`). If taken, say which branch owns it and **stop** —
stealing a change is the user's edit to make, never yours.
Then confirm the doc is committed: `git status --porcelain .ai/work/<slug>/`. A worktree checks out
committed state only — if `dw-shape`'s commit step was skipped, do