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.
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:
This creates a .beads/ directory with your issue tracker.
Basic Usage
Create an Epic
Epics group related tasks:
Add Tasks as Children of the Epic
Tasks must be children of the epic (using --parent) to appear when running with --epic:
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:
Run Ralph TUI
Run with the epic ID:
Configuration
CLI Flags
Run with epic and tracker:
Config File
Set defaults in TOML:
Options Reference
| Option | Type | Default | Description |
|---|---|---|---|
beadsDir | string | .beads | Path to .beads directory |
epicId | string | - | Epic ID to filter tasks (set via --epic flag) |
labels | string | (empty) | Optional comma-separated label filter |
workingDir | string | . | Working directory for bd commands |
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:
Tasks
Tasks are individual work items, optionally under an epic:
Dependencies
Tasks can depend on (be blocked by) other tasks:
Statuses
| Beads Status | Ralph TUI Status | Description |
|---|---|---|
open | open | Ready to work |
in_progress | in_progress | Currently being worked on |
closed | completed | Finished |
cancelled | cancelled | Won't do |
Priorities
Beads uses 0-4 priority scale (0 = critical):
| Priority | Meaning |
|---|---|
| 0 | Critical |
| 1 | High |
| 2 | Medium (default) |
| 3 | Low |
| 4 | Backlog |
Task Selection
The Beads tracker selects the next task by:
- Filter to tasks under the specified epic
- Filter to tasks with status
open - Filter to tasks with no unresolved dependencies
- Sort by priority (lowest number first)
- Return the first matching task
Git Sync
Beads stores issues in .beads/beads.jsonl. Sync with your team:
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
Configuring the Label Filter
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:
- Detect: Check for
.beads/directory andbdCLI - Query: Run
bd list --json --parent <epic>to get tasks - Select: Find next task (ready, highest priority)
- Update: Set task to
in_progressviabd update - Execute: Run agent with task prompt
- Complete: Set task to
closedviabd update - Sync: Run
bd sync --flush-onlyto export state to JSONL
bd Commands Used
| Action | Command |
|---|---|
| List tasks | bd list --json --parent <epic> |
| Get task | bd show <id> --json |
| Start task | bd update <id> --status in_progress |
| Complete task | bd update <id> --status closed |
| Sync | bd sync --flush-only |
Switching Epics
Change epics mid-session by pressing l in the TUI:
- Press
lto open epic selector - Choose from available epics
- 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:
"bd binary not available"
Install the Beads CLI from the Beads GitHub repo.
"No tasks available"
Check that:
- Tasks are children of the epic:
bd list --parent <epic>(create with--parent <epic>) - Tasks are
openstatus:bd list --status open - Dependencies are met:
bd show <task-id>(blocked tasks won't be selected) - Label filter matches (if configured):
bd list --label <your-label>
"Tasks not syncing"
Run sync manually:
Check for git conflicts in .beads/beads.jsonl.
Creating Tasks from PRDs
Convert a PRD to Beads issues:
Beads vs JSON Tracker
| Feature | JSON | Beads |
|---|---|---|
| Setup complexity | Lowest | Medium |
| External tools | None | bd CLI |
| Git sync | Manual | Automatic |
| Epic hierarchy | No | Yes |
| Team collaboration | Limited | Full |
| Offline support | Full | Full |
Choose JSON for quick experiments, Beads for team projects.
Next Steps
- Beads-BV Tracker - Smart task selection with graph analysis
- JSON Tracker - Simple file-based tracking
- Configuration - Full options reference