gastownhall/beads
bd - Beads
Distributed graph issue tracker for AI agents, powered by Dolt.
Platforms: macOS, Linux, Windows, FreeBSD
Docs: https://gastownhall.github.io/beads/
Beads provides a persistent, structured memory for coding agents. It replaces messy markdown plans with a dependency-aware graph, allowing agents to handle long-horizon tasks without losing context.
โก Quick Start
|
|
Note: Beads is a CLI tool you install once and use everywhere. You don’t need to clone this repository into your project.
๐ Features
- Dolt-Powered: Version-controlled SQL database with cell-level merge, native branching, and built-in sync via Dolt remotes.
- Agent-Optimized: JSON output, dependency tracking, and auto-ready task detection.
- Zero Conflict: Hash-based IDs (
bd-a1b2) prevent merge collisions in multi-agent/multi-branch workflows. - Compaction: Semantic “memory decay” summarizes old closed tasks to save context window.
- Messaging: Message issue type with threading (
--thread), ephemeral lifecycle, and mail delegation. - Graph Links:
relates_to,duplicates,supersedes, andreplies_tofor knowledge graphs.
๐ Essential Commands
| Command | Action |
|---|---|
bd ready |
List tasks with no open blockers. |
bd create "Title" -p 0 |
Create a P0 task. |
bd update <id> --claim |
Atomically claim a task (sets assignee + in_progress). |
bd dep add <child> <parent> |
Link tasks (blocks, related, parent-child). |
bd show <id> |
View task details and audit trail. |
๐ Hierarchy & Workflow
Beads supports hierarchical IDs for epics:
bd-a3f8(Epic)bd-a3f8.1(Task)bd-a3f8.1.1(Sub-task)
Stealth Mode: Run bd init --stealth to use Beads locally without committing files to the main repo. Perfect for personal use on shared projects. See Git-Free Usage below.
Contributor vs Maintainer: When working on open-source projects:
- Contributors (forked repos): Run
bd init --contributorto route planning issues to a separate repo (e.g.,~/.beads-planning). Keeps experimental work out of PRs. - Maintainers (write access): Beads auto-detects maintainer role via SSH URLs or HTTPS with credentials. Only need
git config beads.role maintainerif using GitHub HTTPS without credentials but you have write access.
๐ฆ Installation
|
|
Other methods: install script | go install | from source | Windows | Arch AUR
Requirements: macOS, Linux, Windows, or FreeBSD. See docs/INSTALLING.md for complete installation guide.
Security And Verification
Before trusting any downloaded binary, verify its checksum against the release checksums.txt.
The install scripts verify release checksums before install. For manual installs, do this verification yourself before first run.
On macOS, scripts/install.sh preserves the downloaded signature by default. Local ad-hoc re-signing is explicit opt-in via BEADS_INSTALL_RESIGN_MACOS=1.
See docs/ANTIVIRUS.md for Windows AV false-positive guidance and verification workflow.
๐พ Storage Modes
Beads uses Dolt as its database. Two modes are available:
Embedded Mode (default)
|
|
Dolt runs in-process โ no external server needed. Data lives in
.beads/embeddeddolt/. Single-writer only (file locking enforced).
This is the recommended mode for most users.
Server Mode
|
|
Connects to an external dolt sql-server. Data lives in .beads/dolt/.
Supports multiple concurrent writers. Configure the connection with flags
or environment variables:
| Flag | Env Var | Default |
|---|---|---|
--server-host |
BEADS_DOLT_SERVER_HOST |
127.0.0.1 |
--server-port |
BEADS_DOLT_SERVER_PORT |
3307 |
--server-socket |
BEADS_DOLT_SERVER_SOCKET |
(none; uses TCP) |
--server-user |
BEADS_DOLT_SERVER_USER |
root |
BEADS_DOLT_PASSWORD |
(none) | |
BEADS_DOLT_CLI_DIR |
local Dolt database path for CLI push/pull |
Unix domain sockets: Use --server-socket to connect via a Unix socket
instead of TCP. This avoids port conflicts between concurrent projects and
is useful in sandboxed environments (e.g., Claude Code) where file-level
access control is simpler than network allowlists. The Dolt server must be
started with dolt sql-server --socket <path>. Auto-start is not supported
in socket mode.
When BEADS_DOLT_SERVER_MODE=1 points at a Dolt server managed outside
Beads, set BEADS_DOLT_CLI_DIR if bd dolt push / bd dolt pull must use
the local dolt CLI (for example git-protocol remotes or credentials that
only exist in the current shell). Use the actual Dolt database directory, not
the server root.
Backup & Migration
Back up your database and migrate between modes using bd backup:
|
|
See docs/DOLT.md for full migration instructions.
๐ Community Tools
See docs/COMMUNITY_TOOLS.md for a curated list of community-built UIs, extensions, and integrationsโincluding terminal interfaces, web UIs, editor extensions, and native apps.
๐ Git-Free Usage
Beads works without git. The Dolt database is the storage backend โ git integration (hooks, repo discovery, identity) is optional.
|
|
BEADS_DIR tells bd where to put the .beads/ database directory,
bypassing git repo discovery. --stealth sets no-git-ops: true in
config, disabling all git hook installation and git operations.
This is useful for:
- Non-git VCS (Sapling, Jujutsu, Piper) โ no
.git/directory needed - Monorepos โ point
BEADS_DIRat a specific subdirectory - CI/CD โ isolated task tracking without repo-level side effects
- Evaluation/testing โ ephemeral databases in
/tmp
For daemon mode without git, use bd daemon start --local
(see PR #433).
๐ Documentation
- Documentation site (versioned) | Installing | Agent Workflow | Copilot Setup | Articles | Sync Branch Mode | Troubleshooting | FAQ