Skip to main content
Get up and running with Beads in a few minutes.

Why Beads?

Flat issue trackers (GitHub Issues, Jira, etc.) show you a list of open items. You pick one. But if that item depends on something else that isn’t done yet, you’ve wasted time. Multiply this across a team of AI agents and humans, and you get thrashing. Beads tracks dependencies between issues and computes a ready queue — only items with no active blockers appear. Here’s the difference: Flat tracker (GitHub Issues):
Beads:
The agent picks the right task every time. No wasted cycles.

Installation

Install bd using the full installation guide (Homebrew, install script, npm, or go install). Developing in a clone of this repository: use make install so the binary gets correct build metadata and a consistent install path. Avoid ad-hoc go build / go install without the Makefile unless you know what you are doing — see the repository README and AGENTS.md.

Initialize

First time in a repository:
The wizard will:
  • Create .beads/ directory and embedded Dolt database
  • Prompt for your role (maintainer or contributor) unless a flag is provided
  • Import existing issues from git (if any)
  • Install git hooks (skip with --skip-hooks)
Notes:
  • Dolt is the default (and only) storage backend. Data is stored in .beads/embeddeddolt/.
  • By default, Dolt runs in embedded mode (in-process, no server needed).
  • For multi-writer setups, use bd init --server to connect to a dolt sql-server instead.
  • To import issues from an older installation, run bd init --from-jsonl.

Role configuration

During bd init, you’ll be asked: “Contributing to someone else’s repo? [y/N]”
  • Answer Y if you’re contributing to a fork (runs contributor wizard)
  • Answer N if you’re the maintainer or have push access
This sets git config beads.role which determines how beads routes issues: You can also configure manually:
Note: If beads.role is not configured, beads falls back to URL-based detection (deprecated). Run bd doctor to check configuration status.

Your first issues

Note: Issue IDs are hash-based (e.g., bd-a1b2, bd-f14c) to prevent collisions when multiple agents/branches work concurrently.

Hierarchical issues (epics)

For large features, use hierarchical IDs to organize work:
Output:
Children inherit the epic’s labels by default — if the epic carries a size/effort label, see Labels for how to keep it off the children.

Add dependencies

Output:
Dependency visibility: bd list shows blocking dependencies inline:

Find ready work

Output:
Only bd-1 is ready because bd-2 and bd-3 are blocked. Understanding why: Use --explain to see the full graph reasoning:
Output:
Note: bd ready is not the same as bd list --status open. The list command shows all open issues regardless of blockers. The ready command computes the dependency graph and only shows truly unblocked work.

Work the queue

Now bd-2 is ready.

Track progress

Team sync

Share issues with your team using Dolt remotes. Dolt stores data under refs/dolt/data on the same Git remote, separate from standard Git refs. In repos with origin, bd init configures that Dolt remote automatically.
When a teammate clones the repo, bd bootstrap auto-detects the existing database on refs/dolt/data, clones it, and wires origin for future bd dolt push / bd dolt pull. See bd dolt for CLI details. For remote configuration, see Dolt architecture; for federation, see federation.

Optional: Notion sync

If you keep project issues in Notion, save an integration token first:
Then either create a new Beads database under a parent page or connect to an existing target:
The same auth value can also come from NOTION_TOKEN. Directly setting notion.data_source_id remains available as an escape hatch for advanced setups. Check which auth source is active and whether the target schema is ready:
Preview or run sync:

Database location

By default (embedded mode), data is stored in .beads/embeddeddolt/ within your repository. In server mode, data is managed by the external dolt sql-server.

Migrating databases

After upgrading bd, use bd migrate to check for and migrate old database files:
AI agents: Use --inspect to analyze migration safety before running. The system verifies required config keys and data integrity invariants.

Database maintenance

As your project accumulates closed issues, the database grows. Manage size with these commands:
When to compact:
  • Database file > 10MB with many old closed issues
  • After major project milestones when old issues are no longer relevant
  • Before archiving a project phase
Note: Compaction is permanent graceful decay. Original content is discarded but recoverable via bd restore <id> (from the pre-compaction snapshot, with Dolt history as fallback).

Next steps

  • Add labels: bd create "Task" -l "backend,urgent"
  • Filter ready work: bd ready --priority 1
  • Explain the graph: bd ready --explain
  • Check graph integrity: bd graph check
  • Search issues: bd list --status open
  • Detect cycles: bd dep cycles
  • Gates for PR/CI sync: bd gate
  • More sync scenarios: bd dolt
  • Full command list: CLI Reference
See the repository README for an overview and links to deeper docs.