| name | beads |
| description | bd (beads) issue-tracking workflow; use when `.beads/` exists or when running `bd` commands. |
Beads
When to use
- A
.beads/directory exists.- If unsure:
rg --files -g '.beads/**' --hidden --no-ignore.
- If unsure:
- The user asks for
bdcommands (bd ready,bd create,bd close,bd sync, …). - The user wants beads to act as a work ledger (plan/progress/decisions recorded during implementation).
Principle: bead as work ledger
- The active bead is the canonical place for plan, progress, decisions, and verification.
- Prefer recording facts into the bead over long chat narration; the bead must survive session resets.
Molecules (workflow steps as beads)
A molecule is how beads turns “do this work” into a durable, stepwise workflow.
- Formula: workflow source file (discover via
bd formula list). - Proto: cooked template epic (solid phase).
- Mol: persistent instantiation of a proto (liquid phase) created by
bd mol pour. - Wisp: ephemeral instantiation (vapor phase) created by
bd mol wisp.
In a mol, each step is a real bead, so “log per step” becomes natural.
Per-step ledger contract (mol step beads)
For each step bead you complete:
- Ensure
noteshas current Now/Next/Blockers/Verify. - Add exactly one Markdown ChangeLog comment (template below).
- Close the step with an outcome-focused reason.
Recommended close reason:
bd close <step-id> --reason "Implemented: <one-line behavioral outcome>"
Workflow loop (implementation-aware)
- Prime context:
bd prime. - Pick the work:
bd ready(general)bd ready --mol <mol-id>(within a molecule)bd mol current <mol-id>(where am I in this molecule?) Thenbd show <id>.
- Start/claim:
bd update <id> --claim(orbd update <id> --status in_progress). - Seed a mini-plan (rolling):
- `bd update
--notes "$(cat <<'EOF'
- `bd update
Status
- Now: …
- Next: …
- Blockers: …
Verification
-
# expected: EOF )"`
- Implement in small slices; after each slice, add a durable log entry:
bd comments add <id> "…"- Update
--designwhen you make a real decision. - Update
--acceptancewhen you learn/clarify verification.
- Close with an outcome-focused reason:
bd close <id> --reason "…". - Sync when appropriate:
bd sync.
What to record during implementation
notes (rolling status board)
- Keep short and current; overwrite freely.
- Best for: Now/Next/Done, blockers, the current verification command(s).
Comments (append-only timeline)
- Use comments for incremental planning and “what changed” snapshots.
- Recommended comment types:
- Checkpoint: what you just did + next.
- Decision: decision + rationale + alternatives.
- Patch summary: paths changed + the behavioral delta.
- Verification: command(s) run + success/failure signal.
- Handoff: current state + what to do next.
Example:
bd comments add bd-123 "$(cat <<'EOF'
Checkpoint: tighten parser guardrails
- Changed: src/foo.rs (parse), src/foo_test.rs (cases)
- Decision: reject empty input early
- Verify: cargo test -p foo # pass
EOF
)"
design (durable decisions)
- Keep longer-lived architecture notes here so they don’t get lost in the scrollback.
- Update when a decision is made:
- `bd update
--design "$(cat <<'EOF'
- `bd update
Decisions
- …
Alternatives
- …
Invariants / gotchas
- … EOF )"`
Discoveries (scope control)
- File newly discovered work as new beads, don’t silently expand scope.
bd create "..." --type=task --priority=2
- Link it back so it’s traceable:
bd dep add <new-issue> <current-issue> -t discovered-from
Alternate uses (beyond tickets)
Encode “what changed” without pasting diffs
- After any meaningful slice (or before handoff/close), add a ChangeLog comment.
- Goal: a new session can answer “what changed?” and “what’s left?” in 30 seconds.
Template (Markdown-only, high-signal, no diffs):
bd comments add <id> "$(cat <<'EOF'
ChangeLog
- Intent: <what this step was trying to accomplish>
- Files: <paths, short list>
- Behavior: <what is now true / user-visible change>
- Risk: <regressions to watch>
- Verify: <exact command> # <pass/fail>
- Next: <next concrete action>
EOF
)"
Optional add-ons when they exist:
Commit: <sha>PR: <url>
Beads as agents (first-class workers)
Gas Town treats agents as beads so liveness/state is queryable and durable. You can adopt this pattern in any repo that uses beads.
Conventions (so you can find these across repos):
- Create one agent bead per durable identity.
- Always set labels that make lookup easy:
agent(broad)agent:<name>(stable lookup key)role:<role>(polecat/crew/witness/refinery/mayor/deacon)
Create:
bd create --type=agent --role-type=polecat --agent-rig <rig> \
--labels agent,agent:<name>,role:polecat \
--title "<name>"
Find later:
bd list --label agent:<name> --allbd search "agent:<name>"
As the agent works, keep its state current:
bd agent state <agent-id> working|stuck|donebd agent heartbeat <agent-id>
Track orthogonal operational dimensions (creates an event + caches label):
bd set-state <agent-id> health=healthy|failing --reason "..."bd set-state <agent-id> mode=normal|degraded --reason "..."
Monitor progress across agents/issues in real time:
bd activity --follow(add--townif you use routing)
Command quick reference
bd prime— load AI-optimized workflow context.bd ready— list unblocked work.bd show <id>— inspect issue details.bd create "Title" --type=task --priority=2— create a new issue.bd update <id> --claim— atomically claim and start work.bd update <id> --notes ...— update rolling status/plan.bd comments add <id> ...— append progress log entries.bd update <id> --design ...— update durable decisions.bd update <id> --acceptance ...— keep verification criteria correct.bd dep add <id> <depends-on> -t discovered-from|blocks|tracks|related|...— link issues.bd lint [id...]— check missing template sections.bd set-state <id> <dimension>=<value> --reason "..."— event + cached label state.bd agent state <agent-id> <state>— update agent state + last_activity.bd agent heartbeat <agent-id>— update last_activity only.bd activity --follow— watch live progress.bd close <id> --reason "..."— close with outcome + signal.bd sync— sync beads with git remote (typically end of session).
Safety notes
bd hooks install,bd init,bd config set ..., andbd syncmutate the repo (and/or git history); ask first unless explicitly requested.