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
Important: By default, Ralph TUI only shows issues with the ralph label. Either add this label to your issues, or change the label filter during setup (leave blank to see all issues).
Create an Epic
Epics group related tasks. Add the ralph label so Ralph TUI can see it:
Add Tasks as Children of the Epic
Tasks must be children of the epic (using --parent) to appear when running with --epic. Also add the ralph label:
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 | ralph | Comma-separated label filter (issues must have these labels) |
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 automatically when you run.
Label Filtering
By default, Ralph TUI filters to issues with the ralph label. This lets you separate "Ralph-managed" work from other issues in the same beads repo.
Adding Labels to Issues
Changing the Label Filter
If no tasks appear, check that your issues have the ralph label (or whatever labels you configured).
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 syncto push changes
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 |
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 have the
ralphlabel:bd list --label ralph(or runbd label add <task> ralph) - 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)
"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