beads

Beads - Distributed Git-Backed Issue Tracker

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "beads" with this command: npx skills add vinnie357/claude-skills/vinnie357-claude-skills-beads

Beads - Distributed Git-Backed Issue Tracker

This skill activates when working with Beads (bd ) for task management, dependency tracking, and AI agent workflows.

When to Use This Skill

Activate when:

  • Managing tasks with dependencies in a git repository

  • Working with AI agents that need task queue access

  • Running multi-branch parallel development workflows

  • Needing collision-resistant task IDs across distributed teams

  • Tracking task hierarchies and dependency graphs

  • Integrating issue tracking directly into version control

What is Beads?

Beads is a distributed git-backed graph issue tracker designed for AI agents and modern development workflows:

  • Hash-based IDs: Collision-resistant task identifiers (8+ hex characters)

  • Git-native storage: Tasks stored as JSONL in .beads/ directory

  • Dependency-aware: Query ready tasks with bd ready

  • JSON output: Machine-readable format for AI agent integration

  • SQLite cache: Fast local queries with git sync

Installation

npm (Recommended)

npm install -g @anthropic/beads

Homebrew (macOS)

brew install anthropic/tap/beads

Go Install

go install github.com/steveyegge/beads/cmd/bd@latest

mise (Multi-Architecture)

Add to your mise.toml :

[tools."github:steveyegge/beads"] version = "latest"

[tools."github:steveyegge/beads".platforms] linux-x64 = { asset_pattern = "beads_linux_amd64.tar.gz" } macos-arm64 = { asset_pattern = "beads_darwin_arm64.tar.gz" }

See templates/multi-arch.md for platform-specific patterns.

Getting Started

Initialize Beads

Full mode - syncs to remote (shared with team)

bd init

Stealth mode - local only, no commits

bd init --stealth

Contributor mode - pull only, no push

bd init --contributor

Create Tasks

Create a task with title

bd create "Implement user authentication"

Create with description

bd create "Fix login bug" --description "Users cannot log in with special characters"

Create with labels

bd create "Add dark mode" --labels "feature,ui"

Create with assignee

bd create "Review PR" --assignee "alice"

List Tasks

List all open tasks

bd list

List ready tasks (no blockers)

bd ready

JSON output for agents

bd list --json bd ready --json

Filter by status

bd list --status open bd list --status closed

Filter by label

bd list --labels "bug"

Filter by assignee

bd list --assignee "bob"

Show Task Details

Show task by ID (use first 4+ characters)

bd show abc1

Full JSON output

bd show abc1 --json

Show with comments

bd show abc1 --comments

Manage Dependencies

Add dependency (task2 depends on task1)

bd dep add task2 task1

Remove dependency

bd dep remove task2 task1

View dependency graph

bd dep graph

List blockers for a task

bd dep blockers task2

List tasks blocked by a task

bd dep blocking task1

Update Tasks

Close a task

bd close abc1

Reopen a task

bd reopen abc1

Add a comment

bd comment abc1 "Working on this now"

Update labels

bd label abc1 --add "priority:high" bd label abc1 --remove "wip"

Assign task

bd assign abc1 alice

Unassign

bd unassign abc1

Sync with Git

Sync changes to remote

bd sync

Pull changes from remote

bd pull

Check sync status

bd status

JSON Output for AI Agents

All commands support --json for machine-readable output:

List Ready Tasks (JSON)

bd ready --json

Output:

[ { "id": "abc12345", "title": "Implement login form", "status": "open", "labels": ["feature", "frontend"], "created": "2024-01-15T10:30:00Z", "dependencies": [], "blocking": ["def67890"] } ]

Show Task Details (JSON)

bd show abc1 --json

Output:

{ "id": "abc12345", "title": "Implement login form", "description": "Create a login form with email and password fields", "status": "open", "labels": ["feature", "frontend"], "assignee": "alice", "created": "2024-01-15T10:30:00Z", "updated": "2024-01-16T14:20:00Z", "dependencies": [], "blocking": ["def67890"], "comments": [ { "author": "bob", "body": "Should we add OAuth support?", "created": "2024-01-15T11:00:00Z" } ] }

Parse JSON in Scripts

Get first ready task ID

TASK_ID=$(bd ready --json | jq -r '.[0].id')

Count open tasks

bd list --json | jq 'length'

Get task titles

bd list --json | jq -r '.[].title'

Task Hierarchies

Parent-Child Relationships

Create parent task

bd create "Authentication system"

Returns: Created task auth123

Create child tasks

bd create "Login form" --parent auth123 bd create "Password reset" --parent auth123 bd create "Session management" --parent auth123

List children

bd list --parent auth123

View hierarchy

bd tree auth123

Epic/Story/Task Pattern

Create epic

bd create "User Management Epic" --labels "epic"

Create stories under epic

bd create "User registration story" --parent epic123 --labels "story" bd create "User profile story" --parent epic123 --labels "story"

Create tasks under stories

bd create "Design registration form" --parent story456 --labels "task" bd create "Implement validation" --parent story456 --labels "task"

Dependency Management

Dependency Types

Task A blocks Task B (B depends on A)

bd dep add taskB taskA

View what blocks a task

bd dep blockers taskB

View what a task blocks

bd dep blocking taskA

Circular dependency detection

bd dep add taskA taskB # Error if creates cycle

Ready Tasks Query

The bd ready command shows tasks with no unresolved dependencies:

All ready tasks

bd ready

Ready tasks with label

bd ready --labels "priority:high"

Ready tasks for assignee

bd ready --assignee "alice"

Storage and Sync

File Structure

.beads/ ├── tasks.jsonl # Task data (append-only) ├── comments.jsonl # Comments (append-only) └── deps.jsonl # Dependencies (append-only)

.beads.sqlite # Local cache (not committed)

Sync Modes

Mode bd init Flag Commits Pushes Use Case

Full (default) Yes Yes Team shared

Stealth --stealth

No No Local only

Contributor --contributor

Yes No Pull-only

Conflict Resolution

Beads uses append-only JSONL and hash-based IDs to minimize conflicts:

Pull remote changes

bd pull

Resolve conflicts in .beads/ files

git mergetool .beads/tasks.jsonl

Rebuild cache after conflict resolution

bd rebuild

Workflow Examples

PR-Based Development Workflow

The recommended workflow for git repositories integrates beads with feature branches and pull requests:

Session Start

git checkout main && git pull # Start fresh bd ready # Find available tasks bd show <id> # Read task requirements

Task Execution

git checkout -b feature/<name> # Create feature branch bd update <id> --status in_progress # Claim task

Do the work:

- Read existing code to understand patterns

- Implement following TDD (tests first when practical)

- Run quality gates (tests, linters, formatters)

git add <files> # Stage changes git commit -m "type(scope): description" # Commit

PR Creation

git push -u origin <branch> gh pr create --title "type(scope): description" --body "- Change one

  • Change two"

Notify user: "PR created: <url>"

Watch CI & Close Tasks

Watch CI until it passes, then close tasks:

gh pr checks --watch # Wait for CI to complete bd close <id> # Close completed task git add .beads/ && git commit -m "chore(beads): close <id>" git push # Push closure to branch

Notify user: "CI passed, tasks closed. Ready for merge review."

Cleanup & Continue

After user merges:

git checkout main && git pull # Sync with merged changes git branch -d <branch> # Delete feature branch bd ready # Find next task

Key Principles

  • One task = one branch = one PR - Keep changes atomic

  • Claim before working - bd update --status in_progress

  • Close with completion - Document what was done

  • Minimal PRs - Title + bullets only, no templates

  • Wait for user - Never auto-merge or assume approval

  • Clean up - Delete local branch after merge

AI Agent Task Loop (Automated)

For automated processing without PRs:

#!/bin/bash

Agent picks up ready tasks until none remain

while true; do TASK=$(bd ready --json | jq -r '.[0] // empty')

if [ -z "$TASK" ]; then echo "No ready tasks" break fi

TASK_ID=$(echo "$TASK" | jq -r '.id') TITLE=$(echo "$TASK" | jq -r '.title')

echo "Working on: $TITLE ($TASK_ID)"

Do work...

bd close "$TASK_ID" bd sync done

Feature Branch Workflow

Create feature tasks

bd create "Feature: Dark Mode" --labels "feature" bd create "Add theme toggle" --parent feat123 bd create "Update color palette" --parent feat123 bd dep add toggle456 palette789 # Toggle depends on palette

Work on branch

git checkout -b feature/dark-mode

Complete tasks as you go

bd close palette789 bd sync

Toggle is now ready

bd ready # Shows toggle456

Sprint Planning

Create sprint container

bd create "Sprint 42" --labels "sprint"

Add sprint items

bd create "User story 1" --parent sprint42 bd create "User story 2" --parent sprint42 bd create "Bug fix 1" --parent sprint42

Assign work

bd assign story1 alice bd assign story2 bob bd assign bug1 charlie

Track progress

bd list --parent sprint42 --json | jq '[.[] | select(.status=="closed")] | length'

Claude Teams Epic Workflow

When using Claude Agent Teams (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 ) with beads, the team lead decomposes an epic into beads tasks and mirrors them into Claude's built-in task list for real-time coordination. The claude-teams skill should be available for full guidance on team setup.

Step 1: Team Lead Plans and Decomposes

Create epic with stories

bd create "Auth System Epic" --labels "epic" bd create "Login API endpoint" --parent epic123 --labels "story,skill:security" bd create "Session middleware" --parent epic123 --labels "story,skill:twelve-factor" bd create "Login UI form" --parent epic123 --labels "story,skill:accessibility"

Set dependencies

bd dep add session456 login789 # Session depends on Login API

Step 2: Mirror into Claude Task List

For each beads task, create a matching Claude task with [bd:ID] in the subject for cross-referencing:

TaskCreate subject="[bd:login789] Login API endpoint" description="Implement POST /api/auth/login. Skills: security. See bd show login789 for full spec."

TaskCreate subject="[bd:session456] Session middleware" description="JWT session management. Skills: twelve-factor. See bd show session456 for full spec."

TaskCreate subject="[bd:ui321] Login UI form" description="Login form with validation. Skills: accessibility. See bd show ui321 for full spec."

Mirror dependencies

TaskUpdate taskId="session-task" addBlockedBy=["login-task"]

Step 3: Teammates Claim and Execute

Each teammate checks both systems:

1. Find available work

TaskList # See unblocked Claude tasks bd show <id> # Get full spec from beads

2. Claim in both systems

bd update <id> --status in_progress TaskUpdate taskId="<claude-id>" status="in_progress"

3. Do the work, then close both

bd close <id> TaskUpdate taskId="<claude-id>" status="completed"

Step 4: Dual-System Sync Rules

Event Beads Action Claude Task Action

Task created bd create

TaskCreate with [bd:ID] subject

Work started bd update --status in_progress

TaskUpdate status="in_progress"

Work completed bd close (first) TaskUpdate status="completed" (second)

Work blocked bd comment with blocker TaskUpdate addBlockedBy

Beads is the persistent source of truth (git-backed). Claude's task list is the ephemeral coordination layer (session-scoped). Always update beads first.

See references/teams-integration.md for the full mirroring protocol.

Best Practices

Task ID References

  • Use at least 4 characters of the hash ID

  • Full IDs are 8+ characters (e.g., abc12345 )

  • Shorter prefixes work if unique in the repo

Commit Messages

Reference task IDs in commits:

git commit -m "Implement login form

Closes: abc12345"

Labels Convention

type:bug, type:feature, type:chore priority:high, priority:medium, priority:low status:wip, status:blocked, status:review sprint:42, epic:auth skill:git, skill:security, skill:rust # Suggested skills for task execution

Dependency Best Practices

  • Keep dependency chains shallow (< 5 levels)

  • Use bd ready to find actionable tasks

  • Avoid circular dependencies (bd detects these)

  • Document blocking reasons in comments

AI Agent Integration

  • Use --json for all programmatic access

  • Poll bd ready for task queue

  • Close tasks atomically after completion

  • Sync frequently in multi-agent scenarios

Skills-Aware Task Creation

When creating tasks, analyze the task domain and suggest relevant marketplace skills using skill: labels. This helps the beads-worker agent (and humans) know which skills to activate during execution.

How to suggest skills:

  • Identify the task domain from its title, description, and labels

  • Consult references/skill-catalog.md for the keyword-to-skill mapping (Tier 1: static catalog)

  • Check available skills in the current session for additional matches beyond the catalog (Tier 2: runtime discovery)

  • Add 1-3 skill: labels for the most relevant skills from either tier

Matching priority: explicit skill: labels > static catalog keyword match > runtime skill description match.

Note: skill: labels work with any installed skill, not just those in the static catalog. If a user has third-party skills loaded, those can be suggested and activated by the worker.

Example with skill suggestions:

bd create "Add pre-commit gitleaks scanning"
--labels "type:feature,skill:security,skill:git"
--description "## Task Integrate gitleaks pre-commit hook for secret detection.

Suggested Skills

  • security: gitleaks configuration and scanning patterns
  • git: pre-commit hook setup and git workflow integration"

Include a ## Suggested Skills block in the description when skills need context beyond the label name. This tells the worker why each skill is relevant.

IDE Integration

VS Code Extensions

Two extensions enhance the beads experience in VS Code:

Beads Extension (planet57.vscode-beads )

Core beads integration for VS Code:

  • Task list sidebar view

  • Create, edit, and close tasks from the editor

  • Syntax highlighting for .beads/ files

  • Task ID autocompletion in commit messages

Install via Extensions panel or:

code --install-extension planet57.vscode-beads

Beads Kanban (DavidCForbes.beads-kanban )

Visual kanban board for beads tasks:

  • Drag-and-drop task management

  • Status columns (open, in-progress, closed)

  • Filter by labels and assignees

  • Dependency visualization

Install via Extensions panel or:

code --install-extension DavidCForbes.beads-kanban

Recommended VS Code Settings

Add to .vscode/settings.json for beads projects:

{ "files.associations": { "*.jsonl": "json" }, "files.exclude": { ".beads.sqlite": true } }

Troubleshooting

Cache Issues

Rebuild SQLite cache from JSONL

bd rebuild

Clear and rebuild

rm .beads.sqlite bd rebuild

Sync Conflicts

Check status

bd status

Manual conflict resolution

git status .beads/ git mergetool .beads/tasks.jsonl bd rebuild

ID Collisions

Hash collisions are rare but possible:

Use more characters if ambiguous

bd show abc1234 # Instead of abc1

Full IDs are always unique

bd show abc12345678

References

  • references/skill-catalog.md : Skill catalog with keyword triggers for task matching

  • references/teams-integration.md : Full protocol for mirroring beads tasks into Claude's task list for Agent Teams coordination

Key Principles

  • Git-native: Tasks live in the repo, versioned with code

  • Collision-resistant: Hash IDs work across branches and forks

  • Dependency-aware: Query ready tasks, manage blockers

  • AI-friendly: JSON output for programmatic access

  • Distributed: No central server, sync via git

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

nushell

No summary provided by upstream source.

Repository SourceNeeds Review
General

elixir-anti-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

anti-fabrication

No summary provided by upstream source.

Repository SourceNeeds Review