Distributed git-backed graph issue tracker for AI agents. Use this skill when working with Beads (bd) for tracking issues, tasks, decisions, and progress across multiple LLM sessions...
Beads (bd) is a distributed, git-backed, graph issue tracker designed for AI agents. This skill guides you to be an excellent Beads operator, ensuring work is properly tracked across sessions and machines.
Beads is the source of truth — not chat history.
Think in Beads, not chat. Translate all work into Beads nodes so another LLM can resume with near-zero context. Assume another LLM will pick this up later with no memory of this conversation.
Install the Beads plugin for OpenCode:
opencode install joshuadavidthomas/opencode-beads
On first use in a repository, run:
bd onboard
Run bd doctor once per day to verify health of the Beads system.
depends_on, blocks, relates_togit push succeedsEvery Beads node MUST include:
Use consistently across all nodes:
scope:<area> - infra, app, docs, monitoring, etc.host:<name> - custodian, ha, vps, etc.session:<name> - primary, remote, followup, etc.change:<type> - code, config, docsrisk:<low|med|high> - Risk levelprio:<p0|p1|p2> - Priority level# Check readiness
bd ready
# View node details
bd show <id>
# Update node status
bd update <id> --status in_progress
# Close completed node
bd close <id>
# Sync with git
bd sync
# List all nodes
bd list
# Create new node
bd create issue "Title" --body "Description"
For EVERY response when working with Beads, structure output as:
Node: <title>
Type: <epic|issue|task|decision|handoff>
Status: <status>
Tags: <tag1>, <tag2>
Links: depends_on <id>, blocks <id>
Body:
Purpose: ...
Acceptance Criteria: ...
Current State: ...
Next Action: ...
Provide exact bd and git commands:
bd update issue-123 --status in_progress
git commit -am "Update issue-123 status"
bd sync
Terse notes on:
Compact "resume here" paragraph for the next LLM session.
Before doing any work, gather:
Then propose:
With explicit dependencies.
When ending ANY work session, complete ALL steps:
File Beads issues for remaining work
Run quality gates (if code/config changed)
Update Beads status
Sync + Push (CRITICAL)
git pull --rebase
bd sync
git push
git status # Must show clean + up to date
Clean up local state
Verify nothing uncommitted
git status
Update/Create Handoff node
git push succeedsWhen making architectural or implementation decisions:
bd create decision "Use JWT for auth tokens" \
--body "Purpose: Choose auth mechanism
Alternatives: Sessions, OAuth only
Rationale: JWT allows stateless auth, better for distributed systems
Rejected: Sessions (stateful), OAuth (overkill for MVP)"
Always track dependencies explicitly:
bd link task-123 --depends-on task-122
bd link issue-45 --blocks issue-46
For multi-session work, always create/update a Handoff node:
bd create handoff "Session 2025-01-26 handoff" \
--body "Purpose: Enable next LLM to resume
Current State: Auth endpoints implemented, tests passing
Next Action: Implement rate limiting middleware
Blockers: None
Context: Using Express.js + JWT, see decision-auth-001"
# Create hierarchy
bd create epic "User Authentication"
bd create issue "Implement login flow" --parent epic-001
bd create task "Add login endpoint" --parent issue-001
bd create task "Add JWT middleware" --parent issue-001
# Add relationships
bd link task-002 --depends-on task-001
# Start work
bd update task-001 --status in_progress
bd create decision "Database choice: PostgreSQL" \
--body "Purpose: Select database for production
Alternatives: MySQL, MongoDB
Rationale: PostgreSQL for JSONB support, better concurrency
Rejected: MySQL (limited JSON), MongoDB (need ACID)"
bd update decision-001 --status done
# Update all nodes
bd update task-001 --status done
bd update task-002 --status in_progress
# Create handoff
bd create handoff "End of session 2025-01-26" \
--body "Completed: Login endpoint
In Progress: JWT middleware (80% done)
Next: Finish JWT, add tests
Blockers: None"
# Sync everything
git add .
git commit -am "Session end: login endpoint complete"
bd sync
git push
bd doctor
git status
git pull --rebase
bd sync
Check the most recent Handoff node:
bd list --type handoff --sort created --limit 1
bd show <handoff-id>
git pull --rebase
# Resolve conflicts
git add .
git rebase --continue
bd sync
git push