beads

package module
v1.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 15, 2026 License: MIT Imports: 7 Imported by: 3

README

bd - Beads

Distributed graph issue tracker for AI agents, powered by Dolt.

Platforms: macOS, Linux, Windows, FreeBSD

License Go Report Card Release npm version PyPI

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

# Install beads CLI (system-wide - don't clone this repo into your project)
curl -fsSL https://raw.githubusercontent.com/gastownhall/beads/main/scripts/install.sh | bash

# Initialize in YOUR project
cd your-project
bd init

# Optional: refresh or install richer instructions for your agent
bd setup codex    # Codex CLI - installs skill, AGENTS.md guidance, and hooks
bd setup claude   # Claude Code - installs hooks/settings
bd setup factory  # Factory.ai Droid - creates/updates AGENTS.md

Note: Beads is a CLI tool you install once and use everywhere. You don't need to clone this repository into your project.

bd init creates or updates AGENTS.md by default so agents can discover the beads workflow, and also installs project Claude/Codex integrations unless you pass --skip-agents or --stealth. Use bd setup --list to see supported integrations, including bd setup codex, bd setup factory, bd setup claude, bd setup mux, bd setup cursor, and more. See Agent and IDE setup.

Manual copy-paste is only for unsupported agents, existing projects where you cannot rerun bd init/bd setup, or custom instruction files. In those cases, run bd onboard and paste the printed snippet into the file your agent reads.

If your agent is not covered by bd setup, add this minimal AGENTS.md section:

This project uses bd (beads) for issue tracking.

- Run `bd prime` for workflow context and command guidance.
- Use `bd ready`, `bd show <id>`, `bd update <id> --claim`, and `bd close <id>`.
- Use `bd remember "insight"` for persistent project memory; do not create MEMORY.md files.
- Do not use markdown TODO lists for task tracking.

🛠 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, and replies_to for 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.
bd prime Print agent workflow context and persistent memories.
bd remember "insight" Store project memory that bd prime injects later.

🔗 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 --contributor to 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 maintainer if using GitHub HTTPS without credentials but you have write access.

📦 Installation

brew install beads           # macOS / Linux (recommended)
npm install -g @beads/bd     # Node.js users

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.

Upgrading? Replacing the binary is not always the whole story: releases can carry schema migrations, and a database that syncs to a Dolt remote must be migrated by exactly one designated clone. Back up first (bd export --all), then follow the upgrade guide (also summarized in docs/INSTALLING.md).

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)
bd init

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.

When the git repo has an origin remote, bd init configures a Dolt remote named origin automatically. Cross-machine sync uses bd dolt push and bd dolt pull against refs/dolt/data; .beads/issues.jsonl is an export for viewers and interchange, not the source of truth or a full database backup.

Server Mode
bd init --server

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)

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.

Backup & Migration

Back up your database and migrate between modes using bd backup:

# Set up a backup destination and push
bd backup init /path/to/backup
bd backup sync

# Restore into a new project (any mode)
bd init           # or bd init --server
bd backup restore --force /path/to/backup

See docs/DOLT.md for full migration instructions.

bd export and .beads/issues.jsonl are issue-table exports. They are useful for review, migration, and interoperability, but they do not capture Dolt branches, commit history, working-set state, or non-issue tables. Use bd backup or a manual Dolt backup when you need a restorable database backup.

🌐 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.

# Initialize without git
export BEADS_DIR=/path/to/your/project/.beads
bd init --quiet --stealth

# All core commands work with zero git calls
bd create "Fix auth bug" -p 1 -t bug
bd ready --json
bd update bd-a1b2 --claim
bd prime
bd close bd-a1b2 "Fixed"

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_DIR at 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

Overview

Package beads provides a minimal public API for extending bd with custom orchestration.

Most extensions should use direct SQL queries against bd's database. This package exports only the essential types and functions needed for Go-based extensions that want to use bd's storage layer programmatically.

For a working extension example, see examples/bd-example-extension-go.

Index

Constants

View Source
const (
	StatusOpen       = types.StatusOpen
	StatusInProgress = types.StatusInProgress
	StatusBlocked    = types.StatusBlocked
	StatusDeferred   = types.StatusDeferred
	StatusClosed     = types.StatusClosed
)

Status constants

View Source
const (
	TypeBug     = types.TypeBug
	TypeFeature = types.TypeFeature
	TypeTask    = types.TypeTask
	TypeEpic    = types.TypeEpic
	TypeChore   = types.TypeChore
)

IssueType constants

View Source
const (
	DepBlocks            = types.DepBlocks
	DepRelated           = types.DepRelated
	DepParentChild       = types.DepParentChild
	DepDiscoveredFrom    = types.DepDiscoveredFrom
	DepConditionalBlocks = types.DepConditionalBlocks // B runs only if A fails (bd-kzda)
)

DependencyType constants

View Source
const (
	SortPolicyHybrid   = types.SortPolicyHybrid
	SortPolicyPriority = types.SortPolicyPriority
	SortPolicyOldest   = types.SortPolicyOldest
)

SortPolicy constants

View Source
const (
	EventCreated           = types.EventCreated
	EventUpdated           = types.EventUpdated
	EventStatusChanged     = types.EventStatusChanged
	EventCommented         = types.EventCommented
	EventClosed            = types.EventClosed
	EventReopened          = types.EventReopened
	EventDependencyAdded   = types.EventDependencyAdded
	EventDependencyRemoved = types.EventDependencyRemoved
	EventLabelAdded        = types.EventLabelAdded
	EventLabelRemoved      = types.EventLabelRemoved
	EventCompacted         = types.EventCompacted
)

EventType constants

Variables

This section is empty.

Functions

func FindBeadsDir added in v0.24.0

func FindBeadsDir() string

FindBeadsDir finds the .beads/ directory in the current directory tree. Returns empty string if not found.

func FindDatabasePath

func FindDatabasePath() string

FindDatabasePath finds the beads database in the current directory tree

Types

type BlockedIssue added in v0.12.0

type BlockedIssue = types.BlockedIssue

Core types from internal/types

type Comment added in v0.12.0

type Comment = types.Comment

Core types from internal/types

type CommitInfo added in v0.63.0

type CommitInfo = storage.CommitInfo

Replication and version control types from internal/storage

type Conflict added in v0.63.0

type Conflict = storage.Conflict

Replication and version control types from internal/storage

type DatabaseInfo added in v0.17.0

type DatabaseInfo = beads.DatabaseInfo

DatabaseInfo contains information about a beads database

func FindAllDatabases added in v0.17.0

func FindAllDatabases() []DatabaseInfo

FindAllDatabases finds all beads databases in the system

type Dependency added in v0.12.0

type Dependency = types.Dependency

Core types from internal/types

type DependencyCounts added in v0.22.1

type DependencyCounts = types.DependencyCounts

Core types from internal/types

type DependencyType added in v0.12.0

type DependencyType = types.DependencyType

Core types from internal/types

type EpicStatus added in v0.12.0

type EpicStatus = types.EpicStatus

Core types from internal/types

type Event added in v0.12.0

type Event = types.Event

Core types from internal/types

type EventType added in v0.12.0

type EventType = types.EventType

Core types from internal/types

type Issue

type Issue = types.Issue

Core types from internal/types

type IssueFilter added in v0.12.0

type IssueFilter = types.IssueFilter

Core types from internal/types

type IssueType

type IssueType = types.IssueType

Core types from internal/types

type IssueWithCounts added in v0.22.1

type IssueWithCounts = types.IssueWithCounts

Core types from internal/types

type IssueWithDependencyMetadata added in v0.54.0

type IssueWithDependencyMetadata = types.IssueWithDependencyMetadata

Core types from internal/types

type Label added in v0.12.0

type Label = types.Label

Core types from internal/types

type RedirectInfo added in v0.39.1

type RedirectInfo = beads.RedirectInfo

RedirectInfo contains information about a beads directory redirect

func GetRedirectInfo added in v0.39.1

func GetRedirectInfo() RedirectInfo

GetRedirectInfo checks if the current beads directory is redirected. Returns RedirectInfo with IsRedirected=true if a redirect is active.

type RemoteInfo added in v0.63.0

type RemoteInfo = storage.RemoteInfo

Replication and version control types from internal/storage

type RemoteStore added in v0.63.0

type RemoteStore = storage.RemoteStore

RemoteStore provides dolt remote management and replication operations. Use type assertion on a Storage value to access these methods:

if rs, ok := store.(beads.RemoteStore); ok {
    rs.Push(ctx)
}

type SortPolicy added in v0.17.7

type SortPolicy = types.SortPolicy

Core types from internal/types

type StaleFilter added in v0.22.1

type StaleFilter = types.StaleFilter

Core types from internal/types

type Status

type Status = types.Status

Core types from internal/types

type StatusEntry added in v0.63.0

type StatusEntry = storage.StatusEntry

Replication and version control types from internal/storage

type Storage

type Storage = beads.Storage

Storage is the interface for beads storage operations

func Open added in v0.51.0

func Open(ctx context.Context, dbPath string) (Storage, error)

Open opens a Dolt-backed beads database at the given path. This always opens in embedded mode. Use OpenFromConfig to respect server mode settings from metadata.json.

func OpenBestAvailable added in v1.0.1

func OpenBestAvailable(ctx context.Context, beadsDir string) (Storage, error)

OpenBestAvailable opens a beads database using the best available backend for the given .beads directory. It reads metadata.json to determine the configured mode:

  • Embedded mode (default): Opens via the CGo embedded Dolt engine.
  • Server mode: Connects to an external dolt sql-server via OpenFromConfig.

The returned Storage must be closed when no longer needed.

beadsDir is the path to the .beads directory.

func OpenFromConfig added in v0.53.0

func OpenFromConfig(ctx context.Context, beadsDir string) (Storage, error)

OpenFromConfig opens a beads database using configuration from metadata.json. Unlike Open, this respects Dolt server mode settings and database name configuration, connecting to the Dolt SQL server when dolt_mode is "server". beadsDir is the path to the .beads directory.

type SyncResult added in v0.63.0

type SyncResult = storage.SyncResult

Replication and version control types from internal/storage

type SyncStatus added in v0.63.0

type SyncStatus = storage.SyncStatus

Replication and version control types from internal/storage

type SyncStore added in v0.63.0

type SyncStore = storage.SyncStore

SyncStore provides high-level sync operations with peers.

type Transaction added in v0.24.5

type Transaction = beads.Transaction

Transaction provides atomic multi-operation support within a database transaction. Use Storage.RunInTransaction() to obtain a Transaction instance.

type TreeNode added in v0.12.0

type TreeNode = types.TreeNode

Core types from internal/types

type VCStatus added in v0.63.0

type VCStatus = storage.Status

Replication and version control types from internal/storage

type VersionControlReader added in v0.63.0

type VersionControlReader interface {
	CurrentBranch(ctx context.Context) (string, error)
	ListBranches(ctx context.Context) ([]string, error)
	CommitExists(ctx context.Context, commitHash string) (bool, error)
	GetCurrentCommit(ctx context.Context) (string, error)
	Status(ctx context.Context) (*VCStatus, error)
	Log(ctx context.Context, limit int) ([]CommitInfo, error)
}

VersionControlReader provides read-only version control operations. Write operations (Branch, Checkout, Merge, DeleteBranch) are not yet part of the public API. If you need them, please open an issue.

type WispFilter added in v1.0.0

type WispFilter = types.WispFilter

Core types from internal/types

type WorkFilter

type WorkFilter = types.WorkFilter

Core types from internal/types

Directories

Path Synopsis
cmd
bd command
Package main provides the bd CLI commands.
Package main provides the bd CLI commands.
bd/doctor
Package doctor provides health check and repair functionality for beads.
Package doctor provides health check and repair functionality for beads.
examples
go-agent module
monitor-webui module
Package format provides public formatting functions for beads issues.
Package format provides public formatting functions for beads issues.
internal
ado
Package ado provides client and data types for the Azure DevOps REST API.
Package ado provides client and data types for the Azure DevOps REST API.
atomicfile
Package atomicfile provides atomic file writes via temp-file + rename.
Package atomicfile provides atomic file writes via temp-file + rename.
beads
Package beads provides a minimal public API for extending bd with custom orchestration.
Package beads provides a minimal public API for extending bd with custom orchestration.
compact
Package compact provides AI-powered issue compaction using Claude Haiku.
Package compact provides AI-powered issue compaction using Claude Haiku.
doltserver
Package doltserver manages the lifecycle of a local dolt sql-server process.
Package doltserver manages the lifecycle of a local dolt sql-server process.
formula
Package formula provides advice operators for step transformations.
Package formula provides advice operators for step transformations.
git
github
Package github provides client and data types for the GitHub REST API.
Package github provides client and data types for the GitHub REST API.
gitlab
Package gitlab provides client and data types for the GitLab REST API.
Package gitlab provides client and data types for the GitLab REST API.
hooks
Package hooks provides a hook system for extensibility.
Package hooks provides a hook system for extensibility.
jira
Package jira provides client, types, and utilities for Jira integration.
Package jira provides client, types, and utilities for Jira integration.
linear
Package linear provides client and data types for the Linear GraphQL API.
Package linear provides client and data types for the Linear GraphQL API.
molecules
Package molecules handles loading template molecules from molecules.jsonl catalogs.
Package molecules handles loading template molecules from molecules.jsonl catalogs.
query
Package query implements a simple query language for filtering beads.
Package query implements a simple query language for filtering beads.
recipes
Package recipes provides recipe-based configuration for bd setup.
Package recipes provides recipe-based configuration for bd setup.
storage
Package storage defines the interface for issue storage backends.
Package storage defines the interface for issue storage backends.
storage/conformance
Package conformance provides backend-agnostic tests for Storage implementations.
Package conformance provides backend-agnostic tests for Storage implementations.
storage/dbproxy/util
Package util provides shared utilities for the db storage backends.
Package util provides shared utilities for the db storage backends.
storage/depid
Package depid derives the deterministic primary-key id of a dependency edge.
Package depid derives the deterministic primary-key id of a dependency edge.
storage/dolt
Package dolt — iter_dependents.go
Package dolt — iter_dependents.go
storage/doltutil
Package doltutil provides shared utilities for Dolt operations.
Package doltutil provides shared utilities for Dolt operations.
storage/embeddeddolt
Package embeddeddolt — iter_stubs.go
Package embeddeddolt — iter_stubs.go
storage/issueops
Package issueops provides shared transaction-scoped SQL operations for issue creation and management.
Package issueops provides shared transaction-scoped SQL operations for issue creation and management.
storage/kvkeys
Package kvkeys defines the config-table key prefixes that the cmd/bd KV and memory commands write and that the storage-layer merge resolver reads, so the "kv.memory.* config rows are convergent persistent memories" contract has a single source of truth.
Package kvkeys defines the config-table key prefixes that the cmd/bd KV and memory commands write and that the storage-layer merge resolver reads, so the "kv.memory.* config rows are convergent persistent memories" contract has a single source of truth.
storage/rowid
Package rowid derives deterministic, clone-stable primary-key ids for the auxiliary history tables (events, comments, issue_snapshots, compaction_snapshots).
Package rowid derives deterministic, clone-stable primary-key ids for the auxiliary history tables (events, comments, issue_snapshots, compaction_snapshots).
storage/sqlbuild
Package sqlbuild holds the pure SQL-text builders shared by the classic issueops stack (production, *sql.Tx) and the domain/db repository stack (proxied-server, Runner).
Package sqlbuild holds the pure SQL-text builders shared by the classic issueops stack (production, *sql.Tx) and the domain/db repository stack (proxied-server, Runner).
storage/versioncontrolops
Package versioncontrolops provides shared implementations for Dolt version control operations (branches, status, log, merge, remotes).
Package versioncontrolops provides shared implementations for Dolt version control operations (branches, status, log, merge, remotes).
telemetry
Package telemetry provides OpenTelemetry integration for beads.
Package telemetry provides OpenTelemetry integration for beads.
templates
Package templates provides embedded files that bd writes into user workspaces.
Package templates provides embedded files that bd writes into user workspaces.
templates/agents
Package agents provides embedded AGENTS.md templates for bd init and setup.
Package agents provides embedded AGENTS.md templates for bd init and setup.
testutil/fixtures
Package fixtures provides realistic test data generation for benchmarks and tests.
Package fixtures provides realistic test data generation for benchmarks and tests.
timeparsing
Package timeparsing provides layered time parsing for relative date/time expressions.
Package timeparsing provides layered time parsing for relative date/time expressions.
tracker
Package tracker provides a plugin framework for external issue tracker integrations.
Package tracker provides a plugin framework for external issue tracker integrations.
types
Package types defines core data structures for the bd issue tracker.
Package types defines core data structures for the bd issue tracker.
ui
Package ui provides terminal styling and pager support for beads CLI output.
Package ui provides terminal styling and pager support for beads CLI output.
uimd
Package uimd provides markdown rendering for beads CLI output.
Package uimd provides markdown rendering for beads CLI output.
utils
Package utils provides utility functions for issue ID parsing and resolution.
Package utils provides utility functions for issue ID parsing and resolution.
plugins
scripts
repro-dolt-hang command
repro-dolt-hang: Compare old vs new Dolt transaction patterns under concurrent load
repro-dolt-hang: Compare old vs new Dolt transaction patterns under concurrent load
repro-dolt-prod-timeouts command
repro-dolt-prod-timeouts runs production-shaped bd CLI timeout scenarios.
repro-dolt-prod-timeouts runs production-shaped bd CLI timeout scenarios.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL