Beads Tracker

Git-backed issue tracking with hierarchy and dependencies using the bd CLI.

Beads Tracker

The Beads tracker integrates with Beads, a git-backed issue tracker. Issues are stored as JSONL in your repo and sync across team members via git.

INFO

Beads is ideal for team projects - everyone sees the same issues, and changes are tracked in git history.

Prerequisites

Install the Beads CLI from the Beads GitHub repo.

Initialize Beads in your project:

Bash
cd your-project
bd init

This creates a .beads/ directory with your issue tracker.

Basic Usage

Create an Epic

Epics group related tasks:

Bash
bd create --title "User Authentication" --type epic
# Created: beads-abc123

Add Tasks as Children of the Epic

Tasks must be children of the epic (using --parent) to appear when running with --epic:

Bash
bd create --title "Login form" --type task --parent beads-abc123
bd create --title "Auth API" --type task --parent beads-abc123
INFO

The --parent flag creates a parent-child relationship. Without it, tasks won't appear when filtering by epic.

Add Dependencies (Optional)

If tasks depend on each other, add dependencies so Ralph works on them in the right order:

Bash
# Login form depends on Auth API being done first
bd dep add beads-login beads-api

Run Ralph TUI

Run with the epic ID:

Bash
ralph-tui run --tracker beads --epic beads-abc123

Configuration

CLI Flags

Run with epic and tracker:

Bash
ralph-tui run --tracker beads --epic beads-abc123

Config File

Set defaults in TOML:

TOML
# .ralph-tui/config.toml
tracker = "beads"
 
[trackerOptions]
beadsDir = ".beads"
# labels = "frontend,backend"  # Optional: filter by labels

Options Reference

OptionTypeDefaultDescription
beadsDirstring.beadsPath to .beads directory
epicIdstring-Epic ID to filter tasks (set via --epic flag)
labelsstring(empty)Optional comma-separated label filter
workingDirstring.Working directory for bd commands
INFO

The epicId should be set via --epic flag rather than config, since you'll likely work on different epics.

Beads Concepts

Epics

Epics are top-level containers for related work:

Bash
# Create an epic
bd create --title "Feature: Dark Mode" --type epic
 
# List epics
bd list --type epic

Tasks

Tasks are individual work items, optionally under an epic:

Bash
# Create standalone task
bd create --title "Fix login bug" --type task
 
# Create task under epic
bd create --title "Add toggle switch" --type task --parent beads-xyz

Dependencies

Tasks can depend on (be blocked by) other tasks:

Bash
# Add dependency: task-b depends on task-a
bd dep add beads-task-b beads-task-a
 
# View dependencies
bd show beads-task-b

Statuses

Beads StatusRalph TUI StatusDescription
openopenReady to work
in_progressin_progressCurrently being worked on
closedcompletedFinished
cancelledcancelledWon't do

Priorities

Beads uses 0-4 priority scale (0 = critical):

PriorityMeaning
0Critical
1High
2Medium (default)
3Low
4Backlog

Task Selection

The Beads tracker selects the next task by:

  1. Filter to tasks under the specified epic
  2. Filter to tasks with status open
  3. Filter to tasks with no unresolved dependencies
  4. Sort by priority (lowest number first)
  5. Return the first matching task

Git Sync

Beads stores issues in .beads/beads.jsonl. Sync with your team:

Bash
# Export tracker state to JSONL (safe, no git side effects)
bd sync --flush-only
 
# Then commit and push manually
git add .beads/ && git commit -m "Update beads" && git push

Ralph TUI calls bd sync --flush-only automatically when you run, which exports tracker state to JSONL without performing any git operations. This prevents data loss on branches that haven't been pushed to a remote.

Label Filtering (Optional)

You can optionally filter issues by labels to separate different types of work in the same beads repo.

Adding Labels to Issues

Bash
# Add label when creating
bd create --title "My task" --type task --label frontend
 
# Add label to existing issue
bd label add beads-xyz backend

Configuring the Label Filter

TOML
# .ralph-tui/config.toml
[trackerOptions]
labels = "frontend,backend"  # Only show issues with these labels
# labels = ""                # Empty (default) = show all issues
INFO

By default, no label filter is applied - all issues are visible. Configure labels if you want to filter.

How It Works

When Ralph TUI runs with the Beads tracker:

  1. Detect: Check for .beads/ directory and bd CLI
  2. Query: Run bd list --json --parent <epic> to get tasks
  3. Select: Find next task (ready, highest priority)
  4. Update: Set task to in_progress via bd update
  5. Execute: Run agent with task prompt
  6. Complete: Set task to closed via bd update
  7. Sync: Run bd sync --flush-only to export state to JSONL

bd Commands Used

ActionCommand
List tasksbd list --json --parent <epic>
Get taskbd show <id> --json
Start taskbd update <id> --status in_progress
Complete taskbd update <id> --status closed
Syncbd sync --flush-only

Switching Epics

Change epics mid-session by pressing l in the TUI:

  1. Press l to open epic selector
  2. Choose from available epics
  3. Task list updates to show new epic's tasks

Or restart with a different --epic flag.

Troubleshooting

"Beads directory not found"

Initialize Beads in your project:

Bash
bd init

"bd binary not available"

Install the Beads CLI from the Beads GitHub repo.

"No tasks available"

Check that:

  1. Tasks are children of the epic: bd list --parent <epic> (create with --parent <epic>)
  2. Tasks are open status: bd list --status open
  3. Dependencies are met: bd show <task-id> (blocked tasks won't be selected)
  4. Label filter matches (if configured): bd list --label <your-label>

"Tasks not syncing"

Run sync manually:

Bash
bd sync --flush-only
git add .beads/ && git commit -m "Sync beads"

Check for git conflicts in .beads/beads.jsonl.

Creating Tasks from PRDs

Convert a PRD to Beads issues:

Bash
# Create PRD
ralph-tui create-prd --chat
 
# When prompted, choose "Beads" format
# Or convert manually:
ralph-tui convert --to beads ./tasks/my-prd.md

Beads vs JSON Tracker

FeatureJSONBeads
Setup complexityLowestMedium
External toolsNonebd CLI
Git syncManualAutomatic
Epic hierarchyNoYes
Team collaborationLimitedFull
Offline supportFullFull

Choose JSON for quick experiments, Beads for team projects.

Next Steps