One card = one deliverable. Commits are what the card produces along the way (many per card).
1 · What one card IS — four things bound together
Select the card anywhere (desktop, phone, glasses) → you continue session 9823bb6b on fix/login-bug exactly where it left off. 1 card : 1 branch : 1 session : 1 recording : many commits.
2 · What a lane move DOES — the drag is the verb
3 · Inside one card's life — session vs commits
card dispatched steer 1 "fix the redirect loop" → agent works → commit a1f "repro test" steer 2 "also cover Safari 16" → same session resumes (remembers everything) → commit b7e "cookie fix" → commit c92 "edge case" steer 3 "clean up + changelog" → resumes again → commit d10 "polish" drag → Review (diff of a1f..d10 + the full recording = the submission) drag → Done branch fix/login-bug: 4 commits, ready to merge
4 · Where HARNESS and LOOP fit
repo/ ├ CLAUDE.md / AGENTS.md the rules & runbook ├ tools/ check · evaluate · deploy… ├ hooks + permissions what's allowed, what's enforced └ MCP / data context backends, secrets, memory every card on this repo gets ALL of it for free (the session runs inside the worktree = inside the harness)
outer loop = the lanes (who has the ball) backlog → working → review → done you ⇄ agent you inner loop = quality states (inside Working) define → build → verify → commit agent self-advances; gates block rule: a card may only move → Review when its inner loop is green (gates passed)
So your instinct is right, with one refinement each: the harness is not per-branch — it's the repo's toolbox, rules and data context, and every branch inherits it by running inside a worktree of that repo. The loop is per-card, and it's two loops nested: the lanes are the outer workflow (ownership handoffs between you and the agent), while the harness's own quality loop (define → build → verify → commit) runs inside the Working lane — and the submit-to-Review move is the gate where the inner loop must be green.