Merge PR #81: Add Claude Code skill for beads usage patterns

Adds comprehensive skill documentation teaching Claude agents when and how
to use beads effectively, including decision criteria for bd vs TodoWrite,
workflow patterns, and integration guidance.
This commit is contained in:
Steve Yegge
2025-10-18 12:08:23 -07:00
7 changed files with 2505 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ This directory contains examples of how to integrate bd with AI agents and workf
- **[git-hooks/](git-hooks/)** - Pre-configured git hooks for automatic export/import
- **[branch-merge/](branch-merge/)** - Branch merge workflow with collision resolution
- **[claude-desktop-mcp/](claude-desktop-mcp/)** - MCP server for Claude Desktop integration
- **[claude-code-skill/](claude-code-skill/)** - Claude Code skill for effective beads usage patterns
## Quick Start

View File

@@ -0,0 +1,142 @@
# Claude Code Skill for Beads
A comprehensive Claude Code skill that teaches Claude how to use beads effectively for issue tracking in multi-session coding workflows.
## What is This?
This is a [Claude Code](https://claude.com/claude-code) skill - a markdown-based instruction set that teaches Claude AI how to use beads. While the [beads plugin](../../.claude-plugin/) provides slash commands and MCP tools for basic operations, this skill complements it by teaching the **philosophy and patterns** of effective beads usage.
## What Does It Provide?
**Main skill file:**
- Core workflow patterns (discovery, execution, planning phases)
- Decision criteria for when to use bd vs TodoWrite/markdown
- Session start protocols and ready work checks
- Issue lifecycle management
- Integration patterns with other tools
**Reference documentation:**
- `references/BOUNDARIES.md` - Detailed decision criteria for bd vs TodoWrite with examples
- `references/CLI_REFERENCE.md` - Complete command reference with all flags
- `references/DEPENDENCIES.md` - Deep dive into dependency types and relationship patterns
- `references/WORKFLOWS.md` - Step-by-step workflows with checklists
## Why is This Useful?
The skill helps Claude understand:
1. **When to use beads** - Not every task needs bd. The skill teaches when bd helps vs when markdown/TodoWrite is better (per Steve Yegge's insight about markdown "losing its way in the middle")
2. **How to structure issues** - Proper use of dependency types, issue metadata, and relationship patterns
3. **Workflow patterns** - Proactive issue creation during discovery, status maintenance during execution, dependency graphs during planning
4. **Integration with other tools** - How bd and TodoWrite can coexist, each serving its purpose
## Installation
### Prerequisites
1. Install beads CLI:
```bash
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/install.sh | bash
```
2. Have [Claude Code](https://claude.com/claude-code) installed
### Install the Skill
You can install this skill in two ways:
#### Option 1: Copy to Claude Code Skills Directory
```bash
# Clone this repo (if you haven't already)
git clone https://github.com/steveyegge/beads.git
cd beads/examples/claude-code-skill
# Create a symlink in your Claude Code skills directory
ln -s "$(pwd)" ~/.claude/skills/bd
```
#### Option 2: Copy Files Directly
```bash
# Create the skill directory
mkdir -p ~/.claude/skills/bd
# Copy the skill files
cp -r beads/examples/claude-code-skill/* ~/.claude/skills/bd/
```
### Verify Installation
Restart Claude Code, then in a new session, ask:
```
Do you have the bd skill installed?
```
Claude should confirm it has access to the bd skill and can help with beads issue tracking.
## How It Works
Claude Code automatically loads skills from `~/.claude/skills/`. When this skill is installed:
1. Claude gets the core workflow from `SKILL.md` immediately
2. Claude can read reference docs when it needs detailed information
3. The skill uses progressive disclosure - quick reference in SKILL.md, details in references/
## Usage Examples
Once installed, Claude will automatically:
- Check for ready work at session start (if `.beads/` exists)
- Suggest creating bd issues for multi-session work
- Use appropriate dependency types when linking issues
- Maintain proper issue lifecycle (create → in_progress → close)
- Know when to use bd vs TodoWrite
You can also explicitly ask Claude to use beads:
```
Let's track this work in bd since it spans multiple sessions
```
```
Create a bd issue for this bug we discovered
```
```
Show me what's ready to work on in bd
```
## Relationship to Beads Plugin
This skill complements the [beads plugin](../../.claude-plugin/):
- **Plugin** (`.claude-plugin/`): Provides slash commands (`/bd-create`, `/bd-ready`) and MCP tools for basic operations
- **Skill** (this directory): Teaches Claude the patterns, philosophy, and decision-making for effective beads usage
You can use both together for the best experience:
- Plugin for quick operations
- Skill for intelligent workflow decisions
### Why CLI Instead of MCP?
This skill teaches Claude to use the bd CLI directly (via Bash commands like `bd ready`, `bd create`, etc.) rather than relying on MCP tools. This approach has several benefits:
- **Lower context usage** - No MCP server prompt loaded into every session, saving tokens
- **Works everywhere** - Only requires bd binary installed, no MCP server setup needed
- **Explicit operations** - All bd commands visible in conversation history for transparency
- **Full functionality** - CLI supports `--json` flag for programmatic parsing just like MCP
The MCP server is excellent for interactive use, but for autonomous agent workflows where context efficiency matters, direct CLI usage is more practical. The skill provides the guidance Claude needs to use the CLI effectively.
## Contributing
Found ways to improve the skill? Contributions welcome! See [CONTRIBUTING.md](../../CONTRIBUTING.md) for guidelines.
## License
Same as beads - MIT License. See [LICENSE](../../LICENSE).

View File

@@ -0,0 +1,420 @@
---
name: bd-issue-tracking
description: Track complex, multi-session work with dependency graphs using bd (beads) issue tracker. Use when work spans multiple sessions, has complex dependencies, or requires persistent context across compaction cycles. For simple single-session linear tasks, TodoWrite remains appropriate.
---
# bd Issue Tracking
## Overview
bd is a graph-based issue tracker for persistent memory across sessions. Use for multi-session work with complex dependencies; use TodoWrite for simple single-session tasks.
## When to Use bd vs TodoWrite
### Use bd when:
- **Multi-session work** - Tasks spanning multiple compaction cycles or days
- **Complex dependencies** - Work with blockers, prerequisites, or hierarchical structure
- **Knowledge work** - Strategic documents, research, or tasks with fuzzy boundaries
- **Side quests** - Exploratory work that might pause the main task
- **Project memory** - Need to resume work after weeks away with full context
### Use TodoWrite when:
- **Single-session tasks** - Work that completes within current session
- **Linear execution** - Straightforward step-by-step tasks with no branching
- **Immediate context** - All information already in conversation
- **Simple tracking** - Just need a checklist to show progress
**Key insight**: If resuming work after 2 weeks would be difficult without bd, use bd. If the work can be picked up from a markdown skim, TodoWrite is sufficient.
**For detailed decision criteria and examples, read:** [references/BOUNDARIES.md](references/BOUNDARIES.md)
## Session Start Protocol
**bd is available when:**
- Project has a `.beads/` directory (project-local database), OR
- `~/.beads/` exists (global fallback database for any directory)
**At session start, always check for bd availability and run ready check:**
1. **Always check ready work automatically** at session start
2. **Report status** to establish shared context
### Quick Start Pattern
```bash
# At session start, run:
bd ready --json
# Report to user:
"I can see X items ready to work on: [brief summary]"
# If using global ~/.beads, note this in report
```
This gives immediate shared context about available work without requiring user prompting.
**Note**: bd auto-discovers the database:
- Uses `.beads/*.db` in current project if exists
- Falls back to `~/.beads/default.db` otherwise
- No configuration needed
### When No Work is Ready
If `bd ready` returns empty but issues exist:
```bash
bd blocked --json
```
Report blockers and suggest next steps.
### Database Selection
bd automatically selects the appropriate database:
- **Project-local** (`.beads/` in project): Used for project-specific work
- **Global fallback** (`~/.beads/`): Used when no project-local database exists
**Use case for global database**: Cross-project tracking, personal task management, knowledge work that doesn't belong to a specific project.
**For complete session start workflows, read:** [references/WORKFLOWS.md](references/WORKFLOWS.md#session-start)
## Core Operations
All bd commands support `--json` flag for structured output when needed for programmatic parsing.
### Essential Operations
**Check ready work:**
```bash
bd ready
bd ready --json # For structured output
bd ready --priority 0 # Filter by priority
bd ready --assignee alice # Filter by assignee
```
**Create new issue:**
```bash
bd create "Fix login bug"
bd create "Add OAuth" -p 0 -t feature
bd create "Write tests" -d "Unit tests for auth module" --assignee alice
bd create "Research caching" --design "Evaluate Redis vs Memcached"
```
**Update issue status:**
```bash
bd update issue-123 --status in_progress
bd update issue-123 --priority 0
bd update issue-123 --assignee bob
bd update issue-123 --design "Decided to use Redis for persistence support"
```
**Close completed work:**
```bash
bd close issue-123
bd close issue-123 --reason "Implemented in PR #42"
bd close issue-1 issue-2 issue-3 --reason "Bulk close related work"
```
**Show issue details:**
```bash
bd show issue-123
bd show issue-123 --json
```
**List issues:**
```bash
bd list
bd list --status open
bd list --priority 0
bd list --type bug
bd list --assignee alice
```
**For complete CLI reference with all flags and examples, read:** [references/CLI_REFERENCE.md](references/CLI_REFERENCE.md)
## Issue Lifecycle Workflow
### 1. Discovery Phase (Proactive Issue Creation)
**During exploration or implementation, proactively file issues for:**
- Bugs or problems discovered
- Potential improvements noticed
- Follow-up work identified
- Technical debt encountered
- Questions requiring research
**Pattern:**
```bash
# When encountering new work during a task:
bd create "Found: auth doesn't handle profile permissions"
bd dep add current-task-id new-issue-id --type discovered-from
# Continue with original task - issue persists for later
```
**Key benefit**: Capture context immediately instead of losing it when conversation ends.
### 2. Execution Phase (Status Maintenance)
**Mark issues in_progress when starting work:**
```bash
bd update issue-123 --status in_progress
```
**Update throughout work:**
```bash
# Add design notes as implementation progresses
bd update issue-123 --design "Using JWT with RS256 algorithm"
# Update acceptance criteria if requirements clarify
bd update issue-123 --acceptance "- JWT validation works\n- Tests pass\n- Error handling returns 401"
```
**Close when complete:**
```bash
bd close issue-123 --reason "Implemented JWT validation with tests passing"
```
**Important**: Closed issues remain in database - they're not deleted, just marked complete for project history.
### 3. Planning Phase (Dependency Graphs)
For complex multi-step work, structure issues with dependencies before starting:
**Create parent epic:**
```bash
bd create "Implement user authentication" -t epic -d "OAuth integration with JWT tokens"
```
**Create subtasks:**
```bash
bd create "Set up OAuth credentials" -t task
bd create "Implement authorization flow" -t task
bd create "Add token refresh" -t task
```
**Link with dependencies:**
```bash
# parent-child for epic structure
bd dep add auth-epic auth-setup --type parent-child
bd dep add auth-epic auth-flow --type parent-child
# blocks for ordering
bd dep add auth-setup auth-flow
```
**For detailed dependency patterns and types, read:** [references/DEPENDENCIES.md](references/DEPENDENCIES.md)
## Dependency Types Reference
bd supports four dependency types:
1. **blocks** - Hard blocker (issue A blocks issue B from starting)
2. **related** - Soft link (issues are related but not blocking)
3. **parent-child** - Hierarchical (epic/subtask relationship)
4. **discovered-from** - Provenance (issue B discovered while working on A)
**For complete guide on when to use each type with examples and patterns, read:** [references/DEPENDENCIES.md](references/DEPENDENCIES.md)
## Integration with TodoWrite
**Both tools can coexist in a session:**
### Recommended Pattern
1. **Use bd** for project-level issue tracking and dependencies
2. **Use TodoWrite** as "working copy" for current session's active tasks
3. **Sync status**: When completing TodoWrite items, update corresponding bd issues
### Example Flow
```
Session start:
- bd ready shows: "3 issues ready to work on"
- User chooses one: "Let's work on issue-123"
- Create TodoWrite checklist for implementation steps
- bd update issue-123 --status in_progress
- Work through TodoWrite items
- When done: bd close issue-123
- bd ready to see what unblocked
```
**For patterns on transitioning between tools mid-session, read:** [references/BOUNDARIES.md](references/BOUNDARIES.md#integration-patterns)
## Common Patterns
### Pattern 1: Knowledge Work Session
User asks for strategic document development:
1. Check if bd available: `bd ready`
2. If related epic exists, show current status
3. Create new issues for discovered research needs
4. Use discovered-from to track where ideas came from
5. Update design notes as research progresses
### Pattern 2: Side Quest Handling
During main task, discover a problem:
1. Create issue: `bd create "Found: inventory system needs refactoring"`
2. Link using discovered-from: `bd dep add main-task new-issue --type discovered-from`
3. Assess: blocker or can defer?
4. If blocker: `bd update main-task --status blocked`, work on new issue
5. If deferrable: note in issue, continue main task
### Pattern 3: Multi-Session Project Resume
Starting work after time away:
1. Run `bd ready` to see available work
2. Run `bd blocked` to understand what's stuck
3. Run `bd list --status closed --limit 10` to see recent completions
4. Run `bd show issue-id` on issue to work on
5. Update status and begin work
**For complete workflow walkthroughs with checklists, read:** [references/WORKFLOWS.md](references/WORKFLOWS.md)
## Issue Creation Guidelines
### When to Ask First vs Create Directly
**Ask the user before creating when:**
- Knowledge work with fuzzy boundaries
- Task scope is unclear
- Multiple valid approaches exist
- User's intent needs clarification
**Create directly when:**
- Clear bug discovered during implementation
- Obvious follow-up work identified
- Technical debt with clear scope
- Dependency or blocker found
**Reason**: Creating issues helps clarify thinking, but for ambiguous knowledge work, discussion refines the task structure first.
### Issue Quality
Use clear, specific titles and include sufficient context in descriptions to resume work later.
**Use --design flag for:**
- Implementation approach decisions, architecture notes, trade-offs considered
**Use --acceptance flag for:**
- Definition of done, testing requirements, success metrics
## Statistics and Monitoring
**Check project health:**
```bash
bd stats
bd stats --json
```
Returns: total issues, open, in_progress, closed, blocked, ready, avg lead time
**Find blocked work:**
```bash
bd blocked
bd blocked --json
```
Use stats to:
- Report progress to user
- Identify bottlenecks
- Understand project velocity
## Advanced Features
### Issue Types
```bash
bd create "Title" -t task # Standard work item (default)
bd create "Title" -t bug # Defect or problem
bd create "Title" -t feature # New functionality
bd create "Title" -t epic # Large work with subtasks
bd create "Title" -t chore # Maintenance or cleanup
```
### Priority Levels
```bash
bd create "Title" -p 0 # Highest priority (critical)
bd create "Title" -p 1 # High priority
bd create "Title" -p 2 # Normal priority (default)
bd create "Title" -p 3 # Low priority
```
### Bulk Operations
```bash
# Close multiple issues at once
bd close issue-1 issue-2 issue-3 --reason "Completed in sprint 5"
# Create multiple issues from markdown file
bd create --file issues.md
```
### Dependency Visualization
```bash
# Show full dependency tree for an issue
bd dep tree issue-123
# Check for circular dependencies
bd dep cycles
```
### Built-in Help
```bash
# Quick start guide (comprehensive built-in reference)
bd quickstart
# Command-specific help
bd create --help
bd dep --help
```
## JSON Output
All bd commands support `--json` flag for structured output:
```bash
bd ready --json
bd show issue-123 --json
bd list --status open --json
bd stats --json
```
Use JSON output when you need to parse results programmatically or extract specific fields.
## Troubleshooting
**If bd command not found:**
- Check installation: `bd version`
- Verify PATH includes bd binary location
**If issues seem lost:**
- Use `bd list` to see all issues
- Filter by status: `bd list --status closed`
- Closed issues remain in database permanently
**If dependencies seem wrong:**
- Use `bd show issue-id` to see full dependency tree
- Use `bd dep tree issue-id` for visualization
- Dependencies are directional: `bd dep add from-id to-id` means from-id blocks to-id
- See [references/DEPENDENCIES.md](references/DEPENDENCIES.md#common-mistakes)
**If database seems out of sync:**
- bd auto-syncs JSONL after each operation (5s debounce)
- bd auto-imports JSONL when newer than DB (after git pull)
- Manual operations: `bd export`, `bd import`
## Reference Files
Detailed information organized by topic:
| Reference | Read When |
|-----------|-----------|
| [references/BOUNDARIES.md](references/BOUNDARIES.md) | Need detailed decision criteria for bd vs TodoWrite, or integration patterns |
| [references/CLI_REFERENCE.md](references/CLI_REFERENCE.md) | Need complete command reference, flag details, or examples |
| [references/WORKFLOWS.md](references/WORKFLOWS.md) | Need step-by-step workflows with checklists for common scenarios |
| [references/DEPENDENCIES.md](references/DEPENDENCIES.md) | Need deep understanding of dependency types or relationship patterns |

View File

@@ -0,0 +1,443 @@
# Boundaries: When to Use bd vs TodoWrite
This reference provides detailed decision criteria for choosing between bd issue tracking and TodoWrite for task management.
## Contents
- [The Core Question](#the-core-question)
- [Decision Matrix](#decision-matrix)
- [Use bd for](#use-bd-for): Multi-Session Work, Complex Dependencies, Knowledge Work, Side Quests, Project Memory
- [Use TodoWrite for](#use-todowrite-for): Single-Session Tasks, Linear Execution, Immediate Context, Simple Tracking
- [Detailed Comparison](#detailed-comparison)
- [Integration Patterns](#integration-patterns)
- Pattern 1: bd as Strategic, TodoWrite as Tactical
- Pattern 2: TodoWrite as Working Copy of bd
- Pattern 3: Transition Mid-Session
- [Real-World Examples](#real-world-examples)
- Strategic Document Development, Simple Feature Implementation, Bug Investigation, Refactoring with Dependencies
- [Common Mistakes](#common-mistakes)
- Using TodoWrite for multi-session work, using bd for simple tasks, not transitioning when complexity emerges, creating too many bd issues, never using bd
- [The Transition Point](#the-transition-point)
- [Summary Heuristics](#summary-heuristics)
## The Core Question
**"Could I resume this work after 2 weeks away?"**
- If bd would help you resume → **use bd**
- If markdown skim would suffice → **TodoWrite is fine**
This heuristic captures the essential difference: bd provides structured context that persists across long gaps, while TodoWrite excels at immediate session tracking.
## Decision Matrix
### Use bd for:
#### Multi-Session Work
Work spanning multiple compaction cycles or days where context needs to persist.
**Examples:**
- Strategic document development requiring research across multiple sessions
- Feature implementation split across several coding sessions
- Bug investigation requiring experimentation over time
- Architecture design evolving through multiple iterations
**Why bd wins**: Issues capture context that survives compaction. Return weeks later and see full history, design decisions, and current status.
#### Complex Dependencies
Work with blockers, prerequisites, or hierarchical structure.
**Examples:**
- OAuth integration requiring database setup, endpoint creation, and frontend changes
- Research project with multiple parallel investigation threads
- Refactoring with dependencies between different code areas
- Migration requiring sequential steps in specific order
**Why bd wins**: Dependency graph shows what's blocking what. `bd ready` automatically surfaces unblocked work. No manual tracking required.
#### Knowledge Work
Tasks with fuzzy boundaries, exploration, or strategic thinking.
**Examples:**
- Policy proposal requiring stakeholder analysis and evidence gathering
- API design requiring research into multiple options
- Performance optimization requiring measurement and experimentation
- Documentation requiring understanding system architecture
**Why bd wins**: `design` and `acceptance_criteria` fields capture evolving understanding. Issues can be refined as exploration reveals more information.
#### Side Quests
Exploratory work that might pause the main task.
**Examples:**
- During feature work, discover a better pattern worth exploring
- While debugging, notice related architectural issue
- During code review, identify potential improvement
- While writing tests, find edge case requiring research
**Why bd wins**: Create issue with `discovered-from` dependency, pause main work safely. Context preserved for both tracks. Resume either one later.
#### Project Memory
Need to resume work after significant time with full context.
**Examples:**
- Open source contributions across months
- Part-time projects with irregular schedule
- Complex features split across sprints
- Research projects with long investigation periods
**Why bd wins**: Git-backed database persists indefinitely. All context, decisions, and history available on resume. No relying on conversation scrollback or markdown files.
---
### Use TodoWrite for:
#### Single-Session Tasks
Work that completes within current conversation.
**Examples:**
- Implementing a single function based on clear spec
- Fixing a bug with known root cause
- Adding unit tests for existing code
- Updating documentation for recent changes
**Why TodoWrite wins**: Simple checklist is perfect for linear execution. No need for persistence or dependencies. Clear completion within session.
#### Linear Execution
Straightforward step-by-step tasks with no branching.
**Examples:**
- Database migration with clear sequence
- Deployment checklist
- Code style cleanup across files
- Dependency updates following upgrade guide
**Why TodoWrite wins**: Steps are predetermined and sequential. No discovery, no blockers, no side quests. Just execute top to bottom.
#### Immediate Context
All information already in conversation.
**Examples:**
- User provides complete spec and asks for implementation
- Bug report with reproduction steps and fix approach
- Refactoring request with clear before/after vision
- Config changes based on user preferences
**Why TodoWrite wins**: No external context to track. Everything needed is in current conversation. TodoWrite provides user visibility, nothing more needed.
#### Simple Tracking
Just need a checklist to show progress to user.
**Examples:**
- Breaking down implementation into visible steps
- Showing validation workflow progress
- Demonstrating systematic approach
- Providing reassurance work is proceeding
**Why TodoWrite wins**: User wants to see thinking and progress. TodoWrite is visible in conversation. bd is invisible background structure.
---
## Detailed Comparison
| Aspect | bd | TodoWrite |
|--------|-----|-----------|
| **Persistence** | Git-backed, survives compaction | Session-only, lost after conversation |
| **Dependencies** | Graph-based, automatic ready detection | Manual, no automatic tracking |
| **Discoverability** | `bd ready` surfaces work | Scroll conversation for todos |
| **Complexity** | Handles nested epics, blockers | Flat list only |
| **Visibility** | Background structure, not in conversation | Visible to user in chat |
| **Setup** | Requires `.beads/` directory in project | Always available |
| **Best for** | Complex, multi-session, explorative | Simple, single-session, linear |
| **Context capture** | Design notes, acceptance criteria, links | Just task description |
| **Evolution** | Issues can be updated, refined over time | Static once written |
| **Audit trail** | Full history of changes | Only visible in conversation |
## Integration Patterns
bd and TodoWrite can coexist effectively in a session. Use both strategically.
### Pattern 1: bd as Strategic, TodoWrite as Tactical
**Setup:**
- bd tracks high-level issues and dependencies
- TodoWrite tracks current session's execution steps
**Example:**
```
bd issue: "Implement user authentication" (epic)
├─ Child issue: "Create login endpoint"
├─ Child issue: "Add JWT token validation" ← Currently working on this
└─ Child issue: "Implement logout"
TodoWrite (for JWT validation):
- [ ] Install JWT library
- [ ] Create token validation middleware
- [ ] Add tests for token expiry
- [ ] Update API documentation
```
**When to use:**
- Complex features with clear implementation steps
- User wants to see current progress but larger context exists
- Multi-session work currently in single-session execution phase
### Pattern 2: TodoWrite as Working Copy of bd
**Setup:**
- Start with bd issue containing full context
- Create TodoWrite checklist from bd issue's acceptance criteria
- Update bd as TodoWrite items complete
**Example:**
```
Session start:
- Check bd: "issue-auth-42: Add JWT token validation" is ready
- Extract acceptance criteria into TodoWrite
- Mark bd issue as in_progress
- Work through TodoWrite items
- Update bd design notes as you learn
- When TodoWrite completes, close bd issue
```
**When to use:**
- bd issue is ready but execution is straightforward
- User wants visible progress tracking
- Need structured approach to larger issue
### Pattern 3: Transition Mid-Session
**From TodoWrite to bd:**
Recognize mid-execution that work is more complex than anticipated.
**Trigger signals:**
- Discovering blockers or dependencies
- Realizing work won't complete this session
- Finding side quests or related issues
- Needing to pause and resume later
**How to transition:**
```
1. Create bd issue with current TodoWrite content
2. Note: "Discovered this is multi-session work during implementation"
3. Add dependencies as discovered
4. Keep TodoWrite for current session
5. Update bd issue before session ends
6. Next session: resume from bd, create new TodoWrite if needed
```
**From bd to TodoWrite:**
Rare, but happens when bd issue turns out simpler than expected.
**Trigger signals:**
- All context already clear
- No dependencies discovered
- Can complete within session
- User wants execution visibility
**How to transition:**
```
1. Keep bd issue for historical record
2. Create TodoWrite from issue description
3. Execute via TodoWrite
4. Close bd issue when done
5. Note: "Completed in single session, simpler than expected"
```
## Real-World Examples
### Example 1: Strategic Document Development
**Scenario**: Developing policy proposal requiring research, stakeholder analysis, evidence gathering.
**Why bd**:
- Multi-session research across days
- Fuzzy boundaries - scope emerges through investigation
- Side quests - discover related policies to analyze
- Dependencies - can't write recommendations until research complete
- Project memory - need to resume after interruptions
**bd structure**:
```
barb-epic: "Develop BARB metrics policy proposal"
├─ barb-1: "Research existing BARB documentation"
├─ barb-2: "Analyze stakeholder positions" (blocks recommendations)
├─ barb-3: "Gather evidence for alternative approaches"
└─ barb-4: "Draft policy recommendations" (blocked by barb-2)
```
**TodoWrite role**: None initially. Might use TodoWrite for single-session writing sprints once research complete.
### Example 2: Simple Feature Implementation
**Scenario**: Add logging to existing endpoint based on clear specification.
**Why TodoWrite**:
- Single session work
- Linear execution - add import, call logger, add test
- All context in user message
- Completes within conversation
**TodoWrite**:
```
- [ ] Import logging library
- [ ] Add log statements to endpoint
- [ ] Add test for log output
- [ ] Run tests
```
**bd role**: None. Overkill for straightforward task.
### Example 3: Bug Investigation
**Initial assessment**: Seems simple, try TodoWrite first.
**TodoWrite**:
```
- [ ] Reproduce bug
- [ ] Identify root cause
- [ ] Implement fix
- [ ] Add regression test
```
**What actually happens**: Reproducing bug reveals it's intermittent. Root cause investigation shows multiple potential issues. Needs time to investigate.
**Transition to bd**:
```
Create bd issue: "Fix intermittent auth failure in production"
- Description: Initially seemed simple but reproduction shows complex race condition
- Design: Three potential causes identified, need to test each
- Created issues for each hypothesis with discovered-from dependency
Pause for day, resume next session from bd context
```
### Example 4: Refactoring with Dependencies
**Scenario**: Extract common validation logic from three controllers.
**Why bd**:
- Dependencies - must extract before modifying callers
- Multi-file changes need coordination
- Potential side quest - might discover better pattern during extraction
- Need to track which controllers updated
**bd structure**:
```
refactor-1: "Create shared validation module"
→ blocks refactor-2, refactor-3, refactor-4
refactor-2: "Update auth controller to use shared validation"
refactor-3: "Update user controller to use shared validation"
refactor-4: "Update payment controller to use shared validation"
```
**TodoWrite role**: Could use TodoWrite for individual controller updates as implementing.
**Why this works**: bd ensures you don't forget to update a controller. `bd ready` shows next available work. Dependencies prevent starting controller update before extraction complete.
## Common Mistakes
### Mistake 1: Using TodoWrite for Multi-Session Work
**What happens**:
- Next session, forget what was done
- Scroll conversation history to reconstruct
- Lose design decisions made during implementation
- Start over or duplicate work
**Solution**: Create bd issue instead. Persist context across sessions.
### Mistake 2: Using bd for Simple Linear Tasks
**What happens**:
- Overhead of creating issue not justified
- User can't see progress in conversation
- Extra tool use for no benefit
**Solution**: Use TodoWrite. It's designed for exactly this case.
### Mistake 3: Not Transitioning When Complexity Emerges
**What happens**:
- Start with TodoWrite for "simple" task
- Discover blockers and dependencies mid-way
- Keep using TodoWrite despite poor fit
- Lose context when conversation ends
**Solution**: Transition to bd when complexity signal appears. Not too late mid-session.
### Mistake 4: Creating Too Many bd Issues
**What happens**:
- Every tiny task gets an issue
- Database cluttered with trivial items
- Hard to find meaningful work in `bd ready`
**Solution**: Reserve bd for work that actually benefits from persistence. Use "2 week test" - would bd help resume after 2 weeks? If no, skip it.
### Mistake 5: Never Using bd Because TodoWrite is Familiar
**What happens**:
- Multi-session projects become markdown swamps
- Lose track of dependencies and blockers
- Can't resume work effectively
- Rotten half-implemented plans
**Solution**: Force yourself to use bd for next multi-session project. Experience the difference in organization and resumability.
## The Transition Point
Most work starts with an implicit mental model:
**"This looks straightforward"** → TodoWrite
**As work progresses:**
**Stays straightforward** → Continue with TodoWrite, complete in session
⚠️ **Complexity emerges** → Transition to bd, preserve context
The skill is recognizing the transition point:
**Transition signals:**
- "This is taking longer than expected"
- "I've discovered a blocker"
- "This needs more research"
- "I should pause this and investigate X first"
- "The user might not be available to continue today"
- "I found three related issues while working on this"
**When you notice these signals**: Create bd issue, preserve context, work from structured foundation.
## Summary Heuristics
Quick decision guides:
**Time horizon:**
- Same session → TodoWrite
- Multiple sessions → bd
**Dependency structure:**
- Linear steps → TodoWrite
- Blockers/prerequisites → bd
**Scope clarity:**
- Well-defined → TodoWrite
- Exploratory → bd
**Context complexity:**
- Conversation has everything → TodoWrite
- External context needed → bd
**User interaction:**
- User watching progress → TodoWrite visible in chat
- Background work → bd invisible structure
**Resume difficulty:**
- Easy from markdown → TodoWrite
- Need structured history → bd
When in doubt: **Use the 2-week test**. If you'd struggle to resume this work after 2 weeks without bd, use bd.

View File

@@ -0,0 +1,365 @@
# CLI Reference
Complete command reference for bd (beads) CLI tool. All commands support `--json` flag for structured output.
## Contents
- [Quick Reference](#quick-reference)
- [Global Flags](#global-flags)
- [Core Commands](#core-commands)
- [bd ready](#bd-ready) - Find unblocked work
- [bd create](#bd-create) - Create new issues
- [bd update](#bd-update) - Update issue status, priority, assignee
- [bd close](#bd-close) - Close completed work
- [bd show](#bd-show) - Show issue details
- [bd list](#bd-list) - List issues with filters
- [Dependency Commands](#dependency-commands)
- [bd dep add](#bd-dep-add) - Create dependencies
- [bd dep tree](#bd-dep-tree) - Visualize dependency trees
- [bd dep cycles](#bd-dep-cycles) - Detect circular dependencies
- [Monitoring Commands](#monitoring-commands)
- [bd stats](#bd-stats) - Project statistics
- [bd blocked](#bd-blocked) - Find blocked work
- [Setup Commands](#setup-commands)
- [bd init](#bd-init) - Initialize database
- [bd quickstart](#bd-quickstart) - Show quick start guide
- [Common Workflows](#common-workflows)
- [JSON Output](#json-output)
- [Database Auto-Discovery](#database-auto-discovery)
- [Git Integration](#git-integration)
- [Tips](#tips)
## Quick Reference
| Command | Purpose | Key Flags |
|---------|---------|-----------|
| `bd ready` | Find unblocked work | `--priority`, `--assignee`, `--limit`, `--json` |
| `bd list` | List all issues with filters | `--status`, `--priority`, `--type`, `--assignee` |
| `bd show` | Show issue details | `--json` |
| `bd create` | Create new issue | `-t`, `-p`, `-d`, `--design`, `--acceptance` |
| `bd update` | Update existing issue | `--status`, `--priority`, `--design` |
| `bd close` | Close completed issue | `--reason` |
| `bd dep add` | Add dependency | `--type` (blocks, related, parent-child, discovered-from) |
| `bd dep tree` | Visualize dependency tree | (no flags) |
| `bd dep cycles` | Detect circular dependencies | (no flags) |
| `bd stats` | Get project statistics | `--json` |
| `bd blocked` | Find blocked issues | `--json` |
| `bd init` | Initialize bd in directory | `--prefix` |
| `bd quickstart` | Show quick start guide | (no flags) |
## Global Flags
Available for all commands:
```bash
--json # Output in JSON format
--db /path/to/db # Specify database path (default: auto-discover)
--actor "name" # Actor name for audit trail
--no-auto-flush # Disable automatic JSONL sync
--no-auto-import # Disable automatic JSONL import
```
## Core Commands
### bd ready
Find tasks with no blockers - ready to be worked on.
```bash
bd ready # All ready work
bd ready --json # JSON format
bd ready --priority 0 # Only priority 0 (critical)
bd ready --assignee alice # Only assigned to alice
bd ready --limit 5 # Limit to 5 results
```
**Use at session start** to see available work.
---
### bd create
Create a new issue with optional metadata.
```bash
bd create "Title"
bd create "Title" -t bug -p 0
bd create "Title" -d "Description"
bd create "Title" --design "Design notes"
bd create "Title" --acceptance "Definition of done"
bd create "Title" --assignee alice
```
**Flags**:
- `-t, --type`: task (default), bug, feature, epic, chore
- `-p, --priority`: 0-3 (default: 2)
- `-d, --description`: Issue description
- `--design`: Design notes
- `--acceptance`: Acceptance criteria
- `--assignee`: Who should work on this
---
### bd update
Update an existing issue's metadata.
```bash
bd update issue-123 --status in_progress
bd update issue-123 --priority 0
bd update issue-123 --design "Decided to use Redis"
bd update issue-123 --acceptance "Tests passing"
```
**Status values**: open, in_progress, blocked, closed
---
### bd close
Close (complete) an issue.
```bash
bd close issue-123
bd close issue-123 --reason "Implemented in PR #42"
bd close issue-1 issue-2 issue-3 --reason "Bulk close"
```
**Note**: Closed issues remain in database for history.
---
### bd show
Show detailed information about a specific issue.
```bash
bd show issue-123
bd show issue-123 --json
```
Shows: all fields, dependencies, dependents, audit history.
---
### bd list
List all issues with optional filters.
```bash
bd list # All issues
bd list --status open # Only open
bd list --priority 0 # Critical
bd list --type bug # Only bugs
bd list --assignee alice # By assignee
bd list --status closed --limit 10 # Recent completions
```
---
## Dependency Commands
### bd dep add
Add a dependency between issues.
```bash
bd dep add from-issue to-issue # blocks (default)
bd dep add from-issue to-issue --type blocks
bd dep add from-issue to-issue --type related
bd dep add epic-id task-id --type parent-child
bd dep add original-id found-id --type discovered-from
```
**Dependency types**:
1. **blocks**: from-issue blocks to-issue (hard blocker)
2. **related**: Soft link (no blocking)
3. **parent-child**: Epic/subtask hierarchy
4. **discovered-from**: Tracks origin of discovery
---
### bd dep tree
Visualize full dependency tree for an issue.
```bash
bd dep tree issue-123
```
Shows all dependencies and dependents in tree format.
---
### bd dep cycles
Detect circular dependencies.
```bash
bd dep cycles
```
Finds dependency cycles that would prevent work from being ready.
---
## Monitoring Commands
### bd stats
Get project statistics.
```bash
bd stats
bd stats --json
```
Returns: total, open, in_progress, closed, blocked, ready, avg lead time.
---
### bd blocked
Get blocked issues with blocker information.
```bash
bd blocked
bd blocked --json
```
Use to identify bottlenecks when ready list is empty.
---
## Setup Commands
### bd init
Initialize bd in current directory.
```bash
bd init # Auto-detect prefix
bd init --prefix api # Custom prefix
```
Creates `.beads/` directory and database.
---
### bd quickstart
Show comprehensive quick start guide.
```bash
bd quickstart
```
Displays built-in reference for command syntax and workflows.
---
## Common Workflows
### Session Start
```bash
bd ready --json
bd show issue-123
bd update issue-123 --status in_progress
```
### Discovery During Work
```bash
bd create "Found: bug in auth" -t bug
bd dep add current-issue new-issue --type discovered-from
```
### Completing Work
```bash
bd close issue-123 --reason "Implemented with tests passing"
bd ready # See what unblocked
```
### Planning Epic
```bash
bd create "OAuth Integration" -t epic
bd create "Set up credentials" -t task
bd create "Implement flow" -t task
bd dep add oauth-epic oauth-creds --type parent-child
bd dep add oauth-epic oauth-flow --type parent-child
bd dep add oauth-creds oauth-flow # creds blocks flow
bd dep tree oauth-epic
```
---
## JSON Output
All commands support `--json` for structured output:
```bash
bd ready --json
bd show issue-123 --json
bd list --status open --json
bd stats --json
```
Use when parsing programmatically or extracting specific fields.
---
## Database Auto-Discovery
bd finds database in this order:
1. `--db` flag: `bd ready --db /path/to/db.db`
2. `$BEADS_DB` environment variable
3. `.beads/*.db` in current directory or ancestors
4. `~/.beads/default.db` as fallback
**Project-local** (`.beads/`): Project-specific work, git-tracked
**Global fallback** (`~/.beads/`): Cross-project tracking, personal tasks
---
## Git Integration
bd automatically syncs with git:
- **After each operation**: Exports to JSONL (5s debounce)
- **After git pull**: Imports from JSONL if newer than DB
**Files**:
- `.beads/*.jsonl` - Source of truth (git-tracked)
- `.beads/*.db` - Local cache (gitignored)
---
## Tips
**Use JSON for parsing**:
```bash
bd ready --json | jq '.[0].id'
```
**Bulk operations**:
```bash
bd close issue-1 issue-2 issue-3 --reason "Sprint complete"
```
**Quick filtering**:
```bash
bd list --status open --priority 0 --type bug
```
**Built-in help**:
```bash
bd quickstart # Comprehensive guide
bd create --help # Command-specific help
```

View File

@@ -0,0 +1,747 @@
# Dependency Types Guide
Deep dive into bd's four dependency types: blocks, related, parent-child, and discovered-from.
## Contents
- [Overview](#overview) - Four types at a glance, which affect bd ready?
- [blocks - Hard Blocker](#blocks---hard-blocker)
- [When to Use](#when-to-use) - Prerequisites, sequential steps, build order
- [When NOT to Use](#when-not-to-use) - Soft preferences, parallel work
- [Examples](#examples) - API development, migrations, library dependencies
- [Creating blocks Dependencies](#creating-blocks-dependencies)
- [Common Patterns](#common-patterns) - Build foundation first, migration sequences, testing gates
- [Automatic Unblocking](#automatic-unblocking)
- [related - Soft Link](#related---soft-link)
- [When to Use](#when-to-use-1) - Context, related features, parallel work
- [When NOT to Use](#when-not-to-use-1)
- [Examples](#examples-1) - Feature context, research links, parallel development
- [Creating related Dependencies](#creating-related-dependencies)
- [Common Patterns](#common-patterns-1) - Context clusters, research threads, feature families
- [parent-child - Hierarchical](#parent-child---hierarchical)
- [When to Use](#when-to-use-2) - Epics/subtasks, phases
- [When NOT to Use](#when-not-to-use-2)
- [Examples](#examples-2) - Epic with subtasks, phased projects
- [Creating parent-child Dependencies](#creating-parent-child-dependencies)
- [Combining with blocks](#combining-with-blocks)
- [Common Patterns](#common-patterns-2) - Epic decomposition, nested hierarchies
- [discovered-from - Provenance](#discovered-from---provenance)
- [When to Use](#when-to-use-3) - Side quests, research findings
- [Why This Matters](#why-this-matters)
- [Examples](#examples-3) - Bug discovered during feature work, research branches
- [Creating discovered-from Dependencies](#creating-discovered-from-dependencies)
- [Common Patterns](#common-patterns-3) - Discovery during implementation, research expansion
- [Combining with blocks](#combining-with-blocks-1)
- [Decision Guide](#decision-guide)
- [Decision Tree](#decision-tree)
- [Quick Reference by Situation](#quick-reference-by-situation)
- [Common Mistakes](#common-mistakes)
- Using blocks for preferences, using discovered-from for planning, not using dependencies, over-using blocks, wrong direction
- [Advanced Patterns](#advanced-patterns)
- Diamond dependencies, optional dependencies, discovery cascade, epic with phases
- [Visualization](#visualization)
- [Summary](#summary)
## Overview
bd supports four dependency types that serve different purposes in organizing and tracking work:
| Type | Purpose | Affects `bd ready`? | Common Use |
|------|---------|---------------------|------------|
| **blocks** | Hard blocker | Yes - blocked issues excluded | Sequential work, prerequisites |
| **related** | Soft link | No - just informational | Context, related work |
| **parent-child** | Hierarchy | No - structural only | Epics and subtasks |
| **discovered-from** | Provenance | No - tracks origin | Side quests, research findings |
**Key insight**: Only `blocks` dependencies affect what work is ready. The other three provide structure and context.
---
## blocks - Hard Blocker
**Semantics**: Issue A blocks issue B. B cannot start until A is complete.
**Effect**: Issue B disappears from `bd ready` until issue A is closed.
### When to Use
Use `blocks` when work literally cannot proceed:
- **Prerequisites**: Database schema must exist before endpoints can use it
- **Sequential steps**: Migration step 1 must complete before step 2
- **Build order**: Foundation must be done before building on top
- **Technical blockers**: Library must be installed before code can use it
### When NOT to Use
Don't use `blocks` for:
- **Soft preferences**: "Should do X before Y but could do either"
- **Parallel work**: Both can proceed independently
- **Information links**: Just want to note relationship
- **Recommendations**: "Would be better if done in this order"
Use `related` instead for soft connections.
### Examples
**Example 1: API Development**
```
db-schema-1: "Create users table"
blocks
api-endpoint-2: "Add GET /users endpoint"
Why: Endpoint literally needs table to exist
Effect: api-endpoint-2 won't show in bd ready until db-schema-1 closed
```
**Example 2: Migration Sequence**
```
migrate-1: "Backup production database"
blocks
migrate-2: "Run schema migration"
blocks
migrate-3: "Verify data integrity"
Why: Each step must complete before next can safely proceed
Effect: bd ready shows only migrate-1; closing it reveals migrate-2, etc.
```
**Example 3: Library Installation**
```
setup-1: "Install JWT library"
blocks
auth-2: "Implement JWT validation"
Why: Code won't compile/run without library
Effect: Can't start auth-2 until setup-1 complete
```
### Creating blocks Dependencies
```bash
bd dep add prerequisite-issue blocked-issue
# or explicitly:
bd dep add prerequisite-issue blocked-issue --type blocks
```
**Direction matters**: `from_id` blocks `to_id`. Think: "prerequisite blocks dependent".
### Common Patterns
**Pattern: Build Foundation First**
```
foundation-1: "Set up authentication system"
blocks all of:
- feature-2: "Add user profiles"
- feature-3: "Add admin panel"
- feature-4: "Add API access"
One foundational issue blocks multiple dependent features.
```
**Pattern: Sequential Pipeline**
```
step-1 blocks step-2 blocks step-3 blocks step-4
Linear chain where each step depends on previous.
bd ready shows only current step.
```
**Pattern: Parallel Then Merge**
```
research-1: "Investigate option A"
research-2: "Investigate option B"
research-3: "Investigate option C"
All three block:
decision-4: "Choose approach based on research"
Multiple parallel tasks must complete before next step.
```
### Automatic Unblocking
When you close an issue that's blocking others:
```
1. Close db-schema-1
2. bd automatically updates: api-endpoint-2 is now ready
3. bd ready shows api-endpoint-2
4. No manual unblocking needed
```
This is why `blocks` is powerful - bd maintains ready state automatically.
---
## related - Soft Link
**Semantics**: Issues are related but neither blocks the other.
**Effect**: No impact on `bd ready`. Pure informational link.
### When to Use
Use `related` for context and discoverability:
- **Similar work**: "These tackle the same problem from different angles"
- **Shared context**: "Working on one provides insight for the other"
- **Alternative approaches**: "These are different ways to solve X"
- **Complementary features**: "These work well together but aren't required"
### When NOT to Use
Don't use `related` if:
- One actually blocks the other → use `blocks`
- One discovered the other → use `discovered-from`
- One is parent of the other → use `parent-child`
### Examples
**Example 1: Related Refactoring**
```
refactor-1: "Extract validation logic"
related to
refactor-2: "Extract error handling logic"
Why: Both are refactoring efforts, similar patterns, but independent
Effect: None on ready state; just notes the relationship
```
**Example 2: Documentation and Code**
```
feature-1: "Add OAuth login"
related to
docs-2: "Document OAuth setup"
Why: Docs and feature go together, but can be done in any order
Effect: Can work on either whenever; just notes they're connected
```
**Example 3: Alternative Approaches**
```
perf-1: "Investigate Redis caching"
related to
perf-2: "Investigate CDN caching"
Why: Both address performance, different approaches, explore both
Effect: Both show in bd ready; choosing one doesn't block the other
```
### Creating related Dependencies
```bash
bd dep add issue-1 issue-2 --type related
```
**Direction doesn't matter** for `related` - it's a symmetric link.
### Common Patterns
**Pattern: Cluster Related Work**
```
api-redesign related to:
- api-docs-update
- api-client-update
- api-tests-update
- api-versioning
Group of issues all related to API work.
Use related to show they're part of same initiative.
```
**Pattern: Cross-Cutting Concerns**
```
security-audit related to:
- auth-module
- api-endpoints
- database-access
- frontend-forms
Security audit touches multiple areas.
Related links show what areas it covers.
```
---
## parent-child - Hierarchical
**Semantics**: Issue A is parent of issue B. Typically A is an epic, B is a subtask.
**Effect**: No impact on `bd ready`. Creates hierarchical structure.
### When to Use
Use `parent-child` for breaking down large work:
- **Epics and subtasks**: Big feature split into smaller pieces
- **Hierarchical organization**: Logical grouping of related tasks
- **Progress tracking**: See completion of children relative to parent
- **Work breakdown structure**: Decompose complex work
### When NOT to Use
Don't use `parent-child` if:
- Siblings need ordering → add `blocks` between children
- Relationship is equality → use `related`
- Just discovered one from the other → use `discovered-from`
### Examples
**Example 1: Feature Epic**
```
oauth-epic: "Implement OAuth integration" (epic)
parent of:
- oauth-1: "Set up OAuth credentials" (task)
- oauth-2: "Implement authorization flow" (task)
- oauth-3: "Add token refresh" (task)
- oauth-4: "Create login UI" (task)
Why: Epic decomposed into implementable tasks
Effect: Hierarchical structure; all show in bd ready (unless blocked)
```
**Example 2: Research with Findings**
```
research-epic: "Investigate caching strategies" (epic)
parent of:
- research-1: "Redis evaluation"
- research-2: "Memcached evaluation"
- research-3: "CDN evaluation"
- decision-4: "Choose caching approach"
Why: Research project with multiple investigation threads
Effect: Can track progress across all investigations
```
### Creating parent-child Dependencies
```bash
bd dep add parent-epic-id child-task-id --type parent-child
```
**Direction matters**: `from_id` is parent, `to_id` is child.
### Combining with blocks
Parent-child gives structure; blocks gives ordering:
```
auth-epic (parent of all)
├─ auth-1: "Install library"
├─ auth-2: "Create middleware" (blocked by auth-1)
├─ auth-3: "Add endpoints" (blocked by auth-2)
└─ auth-4: "Add tests" (blocked by auth-3)
parent-child: Shows these are all part of auth epic
blocks: Shows they must be done in order
```
### Common Patterns
**Pattern: Epic with Independent Subtasks**
```
Epic with no ordering between children:
All children show in bd ready immediately.
Work on any child in any order.
Close epic when all children complete.
```
**Pattern: Epic with Sequential Subtasks**
```
Epic with blocks dependencies between children:
bd ready shows only first child.
Closing each child unblocks next.
Epic provides structure, blocks provides order.
```
**Pattern: Nested Epics**
```
major-epic
├─ sub-epic-1
│ ├─ task-1a
│ └─ task-1b
└─ sub-epic-2
├─ task-2a
└─ task-2b
Multiple levels of hierarchy for complex projects.
```
---
## discovered-from - Provenance
**Semantics**: Issue B was discovered while working on issue A.
**Effect**: No impact on `bd ready`. Tracks origin and provides context.
### When to Use
Use `discovered-from` to preserve discovery context:
- **Side quests**: Found new work during implementation
- **Research findings**: Discovered issue while investigating
- **Bug found during feature work**: Context of discovery matters
- **Follow-up work**: Identified next steps during current work
### Why This Matters
Knowing where an issue came from helps:
- **Understand context**: Why was this created?
- **Reconstruct thinking**: What led to this discovery?
- **Assess relevance**: Is this still important given original context?
- **Track exploration**: See what emerged from research
### Examples
**Example 1: Bug During Feature**
```
feature-10: "Add user profiles"
discovered-from leads to
bug-11: "Existing auth doesn't handle profile permissions"
Why: While adding profiles, discovered auth system inadequate
Context: Bug might not exist if profiles weren't being added
```
**Example 2: Research Findings**
```
research-5: "Investigate caching options"
discovered-from leads to
finding-6: "Redis supports persistence unlike Memcached"
finding-7: "CDN caching incompatible with our auth model"
decision-8: "Choose Redis based on findings"
Why: Research generated specific findings
Context: Findings only relevant in context of research question
```
**Example 3: Refactoring Reveals Technical Debt**
```
refactor-20: "Extract validation logic"
discovered-from leads to
debt-21: "Validation inconsistent across controllers"
debt-22: "No validation for edge cases"
improvement-23: "Could add validation library"
Why: Refactoring work revealed multiple related issues
Context: Issues discovered as side effect of refactoring
```
### Creating discovered-from Dependencies
```bash
bd dep add original-work-id discovered-issue-id --type discovered-from
```
**Direction matters**: `to_id` was discovered while working on `from_id`.
### Common Patterns
**Pattern: Exploration Tree**
```
spike-1: "Investigate API redesign"
discovered-from →
finding-2: "Current API mixes REST and GraphQL"
finding-3: "Authentication not consistent"
finding-4: "Rate limiting missing"
One exploration generates multiple findings.
Tree structure shows exploration process.
```
**Pattern: Bug Investigation Chain**
```
bug-1: "Login fails intermittently"
discovered-from →
bug-2: "Race condition in session creation"
discovered-from →
bug-3: "Database connection pool too small"
Investigation of one bug reveals root cause as another bug.
Chain shows how you got from symptom to cause.
```
**Pattern: Feature Implementation Side Quests**
```
feature-main: "Add shopping cart"
discovered-from →
improvement-a: "Product images should be cached"
bug-b: "Price formatting wrong for some locales"
debt-c: "Inventory system needs refactoring"
Main feature work generates tangential discoveries.
Captured for later without derailing main work.
```
### Combining with blocks
Can use both together:
```
feature-10: "Add user profiles"
discovered-from →
bug-11: "Auth system needs role-based access"
blocks →
feature-10: "Add user profiles"
Discovery: Found bug during feature work
Assessment: Bug actually blocks feature
Actions: Mark feature blocked, work on bug first
```
---
## Decision Guide
**"Which dependency type should I use?"**
### Decision Tree
```
Does Issue A prevent Issue B from starting?
YES → blocks
NO ↓
Is Issue B a subtask of Issue A?
YES → parent-child (A parent, B child)
NO ↓
Was Issue B discovered while working on Issue A?
YES → discovered-from (A original, B discovered)
NO ↓
Are Issues A and B just related?
YES → related
```
### Quick Reference by Situation
| Situation | Use |
|-----------|-----|
| B needs A complete to start | blocks |
| B is part of A (epic/task) | parent-child |
| Found B while working on A | discovered-from |
| A and B are similar/connected | related |
| B should come after A but could start | related + note |
| A and B are alternatives | related |
| B is follow-up to A | discovered-from |
---
## Common Mistakes
### Mistake 1: Using blocks for Preferences
**Wrong**:
```
docs-1: "Update documentation"
blocks
feature-2: "Add new feature"
Reason: "We prefer to update docs first"
```
**Problem**: Documentation doesn't actually block feature implementation.
**Right**: Use `related` or don't link at all. If you want ordering, note it in issue descriptions but don't enforce with blocks.
### Mistake 2: Using discovered-from for Planning
**Wrong**:
```
epic-1: "OAuth integration"
discovered-from →
task-2: "Set up OAuth credentials"
Reason: "I'm planning these tasks from the epic"
```
**Problem**: `discovered-from` is for emergent discoveries, not planned decomposition.
**Right**: Use `parent-child` for planned task breakdown.
### Mistake 3: Not Using Any Dependencies
**Symptom**: Long list of issues with no structure.
**Problem**: Can't tell what's blocked, what's related, how work is organized.
**Solution**: Add structure with dependencies:
- Group with parent-child
- Order with blocks
- Link with related
- Track discovery with discovered-from
### Mistake 4: Over-Using blocks
**Wrong**:
```
Everything blocks everything else in strict sequential order.
```
**Problem**: No parallel work possible; `bd ready` shows only one issue.
**Right**: Only use `blocks` for actual technical dependencies. Allow parallel work where possible.
### Mistake 5: Wrong Direction
**Wrong**:
```bash
bd dep add api-endpoint database-schema
Meaning: api-endpoint blocks database-schema
```
**Problem**: Backwards! Schema should block endpoint, not other way around.
**Right**:
```bash
bd dep add database-schema api-endpoint
Meaning: database-schema blocks api-endpoint
```
**Mnemonic**: "from_id blocks to_id" or "prerequisite blocks dependent"
---
## Advanced Patterns
### Pattern: Diamond Dependencies
```
setup
/ \
impl-a impl-b
\ /
testing
setup blocks both impl-a and impl-b
both impl-a and impl-b block testing
```
Both implementations must complete before testing can begin.
### Pattern: Optional Dependencies
```
core-feature (ready immediately)
related to
nice-to-have (ready immediately)
Both can be done, neither blocks the other.
Use related to show they're connected.
```
### Pattern: Discovery Cascade
```
research-main
discovered-from → finding-1
discovered-from → finding-2
discovered-from → deep-finding-3
Research generates findings.
Findings generate deeper findings.
Tree shows discovery process.
```
### Pattern: Epic with Phases
```
auth-epic
parent of phase-1-epic
parent of: setup-1, setup-2, setup-3
parent of phase-2-epic
parent of: implement-1, implement-2
parent of phase-3-epic
parent of: test-1, test-2
phase-1-epic blocks phase-2-epic blocks phase-3-epic
Nested hierarchy with phase ordering.
```
---
## Visualization
When you run `bd show issue-id` on an issue, you see:
```
Issue: feature-10
Dependencies (blocks this issue):
- setup-5: "Install library"
- config-6: "Add configuration"
Dependents (blocked by this issue):
- test-12: "Add integration tests"
- docs-13: "Document new feature"
Related:
- refactor-8: "Similar refactoring effort"
Discovered from:
- research-3: "API investigation"
```
This shows the full dependency context for an issue.
---
## Summary
**Four dependency types, four different purposes:**
1. **blocks**: Sequential work, prerequisites, hard blockers
- Affects bd ready
- Use for technical dependencies only
2. **related**: Context, similar work, soft connections
- Informational only
- Use liberally for discoverability
3. **parent-child**: Epics and subtasks, hierarchical structure
- Organizational only
- Use for work breakdown
4. **discovered-from**: Side quests, research findings, provenance
- Context preservation
- Use to track emergence
**Key insight**: Only `blocks` affects what work is ready. The other three provide rich context without constraining execution.
Use dependencies to create a graph that:
- Automatically maintains ready work
- Preserves discovery context
- Shows project structure
- Links related work
This graph becomes the persistent memory that survives compaction and enables long-horizon agent work.

View File

@@ -0,0 +1,387 @@
# Workflows and Checklists
Detailed step-by-step workflows for common bd usage patterns with checklists.
## Contents
- [Session Start Workflow](#session-start) - Check bd ready, establish context
- [Discovery and Issue Creation](#discovery) - Proactive issue creation during work
- [Status Maintenance](#status-maintenance) - Keeping bd status current
- [Epic Planning](#epic-planning) - Structuring complex work with dependencies
- [Side Quest Handling](#side-quests) - Discovery during main task, assessing blocker vs deferrable, resuming
- [Multi-Session Resume](#resume) - Returning after days/weeks away
- [Unblocking Work](#unblocking) - Handling blocked issues
- [Integration with TodoWrite](#integration-with-todowrite) - Using both tools together
- [Common Workflow Patterns](#common-workflow-patterns)
- Systematic Exploration, Bug Investigation, Refactoring with Dependencies, Spike Investigation
- [Checklist Templates](#checklist-templates)
- Starting Any Work Session, Creating Issues During Work, Completing Work, Planning Complex Features
- [Decision Points](#decision-points)
- [Troubleshooting Workflows](#troubleshooting-workflows)
## Session Start Workflow {#session-start}
**bd is available when**:
- Project has `.beads/` directory (project-local), OR
- `~/.beads/` exists (global fallback for any directory)
**Automatic checklist at session start:**
```
Session Start (when bd is available):
- [ ] Run bd ready --json
- [ ] Report: "X items ready to work on: [summary]"
- [ ] If using global ~/.beads, note this in report
- [ ] If none ready, check bd blocked --json
- [ ] Suggest next action based on findings
```
**Pattern**: Always run `bd ready` when starting work where bd is available. Report status immediately to establish shared context.
**Database selection**: bd auto-discovers which database to use (project-local `.beads/` takes precedence over global `~/.beads/`).
---
## Discovery and Issue Creation {#discovery}
**When encountering new work during implementation:**
```
Discovery Workflow:
- [ ] Notice bug, improvement, or follow-up work
- [ ] Assess: Can defer or is blocker?
- [ ] Create issue with bd create "Issue title"
- [ ] Add discovered-from dependency: bd dep add current-id new-id --type discovered-from
- [ ] If blocker: pause and switch; if not: continue current work
- [ ] Issue persists for future sessions
```
**Pattern**: Proactively file issues as you discover work. Context captured immediately instead of lost when session ends.
**When to ask first**:
- Knowledge work with fuzzy scope
- User intent unclear
- Multiple valid approaches
**When to create directly**:
- Clear bug found
- Obvious follow-up work
- Technical debt with clear scope
---
## Status Maintenance {#status-maintenance}
**Throughout work on an issue:**
```
Issue Lifecycle:
- [ ] Start: Update status to in_progress
- [ ] During: Add design notes as decisions made
- [ ] During: Update acceptance criteria if requirements clarify
- [ ] During: Add dependencies if blockers discovered
- [ ] Complete: Close with summary of what was done
- [ ] After: Check bd ready to see what unblocked
```
**Pattern**: Keep bd status current so project state is always accurate.
**Status transitions**:
- `open``in_progress` when starting work
- `in_progress``blocked` if blocker discovered
- `blocked``in_progress` when unblocked
- `in_progress``closed` when complete
---
## Epic Planning {#epic-planning}
**For complex multi-step features:**
```
Epic Planning Workflow:
- [ ] Create epic issue for high-level goal
- [ ] Break down into child task issues
- [ ] Create each child task
- [ ] Add parent-child dependencies from epic to each child
- [ ] Add blocks dependencies between children if needed
- [ ] Use bd ready to work through tasks in dependency order
```
**Example**: OAuth Integration Epic
```bash
1. Create epic:
bd create "Implement OAuth integration" -t epic -d "OAuth with Google and GitHub"
design: "Support Google and GitHub providers"
2. Create child tasks:
bd create "Set up OAuth client credentials" -t task
bd create "Implement authorization code flow" -t task
bd create "Add token storage and refresh" -t task
bd create "Create login/logout endpoints" -t task
3. Link children to parent:
bd dep add oauth-epic oauth-setup --type parent-child
bd dep add oauth-epic oauth-flow --type parent-child
bd dep add oauth-epic oauth-storage --type parent-child
bd dep add oauth-epic oauth-endpoints --type parent-child
4. Add blocks between children:
bd dep add oauth-setup oauth-flow
# Setup blocks flow implementation
```
---
## Side Quest Handling {#side-quests}
**When discovering work that pauses main task:**
```
Side Quest Workflow:
- [ ] During main work, discover problem or opportunity
- [ ] Create issue for side quest
- [ ] Add discovered-from dependency linking to main work
- [ ] Assess: blocker or can defer?
- [ ] If blocker: mark main work blocked, switch to side quest
- [ ] If deferrable: note in issue, continue main work
- [ ] Update statuses to reflect current focus
```
**Example**: During feature implementation, discover architectural issue
```
Main task: Adding user profiles
Discovery: Notice auth system should use role-based access
Actions:
1. Create issue: "Implement role-based access control"
2. Link: discovered-from "user-profiles-feature"
3. Assess: Blocker for profiles feature
4. Mark profiles as blocked
5. Switch to RBAC implementation
6. Complete RBAC, unblocks profiles
7. Resume profiles work
```
---
## Multi-Session Resume {#resume}
**Starting work after days/weeks away:**
```
Resume Workflow:
- [ ] Run bd ready to see available work
- [ ] Run bd stats for project overview
- [ ] List recent closed issues for context
- [ ] Show details on issue to work on
- [ ] Review design notes and acceptance criteria
- [ ] Update status to in_progress
- [ ] Begin work with full context
```
**Why this works**: bd preserves design decisions, acceptance criteria, and dependency context. No scrolling conversation history or reconstructing from markdown.
---
## Unblocking Work {#unblocking}
**When ready list is empty:**
```
Unblocking Workflow:
- [ ] Run bd blocked --json to see what's stuck
- [ ] Show details on blocked issues: bd show issue-id
- [ ] Identify blocker issues
- [ ] Choose: work on blocker, or reassess dependency
- [ ] If reassess: remove incorrect dependency
- [ ] If work on blocker: close blocker, check ready again
- [ ] Blocked issues automatically become ready when blockers close
```
**Pattern**: bd automatically maintains ready state based on dependencies. Closing a blocker makes blocked work ready.
**Example**:
```
Situation: bd ready shows nothing
Actions:
1. bd blocked shows: "api-endpoint blocked by db-schema"
2. Show db-schema: "Create user table schema"
3. Work on db-schema issue
4. Close db-schema when done
5. bd ready now shows: "api-endpoint" (automatically unblocked)
```
---
## Integration with TodoWrite
**Using both tools in one session:**
```
Hybrid Workflow:
- [ ] Check bd for high-level context
- [ ] Choose bd issue to work on
- [ ] Mark bd issue in_progress
- [ ] Create TodoWrite from acceptance criteria for execution
- [ ] Work through TodoWrite items
- [ ] Update bd design notes as you learn
- [ ] When TodoWrite complete, close bd issue
```
**Why hybrid**: bd provides persistent structure, TodoWrite provides visible progress.
---
## Common Workflow Patterns
### Pattern: Systematic Exploration
Research or investigation work:
```
1. Create research issue with question to answer
2. Update design field with findings as you go
3. Create new issues for discoveries
4. Link discoveries with discovered-from
5. Close research issue with conclusion
```
### Pattern: Bug Investigation
```
1. Create bug issue
2. Reproduce: note steps in description
3. Investigate: track hypotheses in design field
4. Fix: implement solution
5. Test: verify in acceptance criteria
6. Close with explanation of root cause and fix
```
### Pattern: Refactoring with Dependencies
```
1. Create issues for each refactoring step
2. Add blocks dependencies for correct order
3. Work through in dependency order
4. bd ready automatically shows next step
5. Each completion unblocks next work
```
### Pattern: Spike Investigation
```
1. Create spike issue: "Investigate caching options"
2. Time-box exploration
3. Document findings in design field
4. Create follow-up issues for chosen approach
5. Link follow-ups with discovered-from
6. Close spike with recommendation
```
---
## Checklist Templates
### Starting Any Work Session
```
- [ ] Check for .beads/ directory
- [ ] If exists: bd ready
- [ ] Report status to user
- [ ] Get user input on what to work on
- [ ] Show issue details
- [ ] Update to in_progress
- [ ] Begin work
```
### Creating Issues During Work
```
- [ ] Notice new work needed
- [ ] Create issue with clear title
- [ ] Add context in description
- [ ] Link with discovered-from to current work
- [ ] Assess blocker vs deferrable
- [ ] Update statuses appropriately
```
### Completing Work
```
- [ ] Implementation done
- [ ] Tests passing
- [ ] Close issue with summary
- [ ] Check bd ready for unblocked work
- [ ] Report completion and next available work
```
### Planning Complex Features
```
- [ ] Create epic for overall goal
- [ ] Break into child tasks
- [ ] Create all child issues
- [ ] Link with parent-child dependencies
- [ ] Add blocks between children if order matters
- [ ] Work through in dependency order
```
---
## Decision Points
**Should I create a bd issue or use TodoWrite?**
→ See [BOUNDARIES.md](BOUNDARIES.md) for decision matrix
**Should I ask user before creating issue?**
→ Ask if scope unclear; create if obvious follow-up work
**Should I mark work as blocked or just note dependency?**
→ Blocked = can't proceed; dependency = need to track relationship
**Should I create epic or just tasks?**
→ Epic if 5+ related tasks; tasks if simpler structure
**Should I update status frequently or just at start/end?**
→ Start and end minimum; during work if significant changes
---
## Troubleshooting Workflows
**"I can't find any ready work"**
1. Run bd blocked
2. Identify what's blocking progress
3. Either work on blockers or create new work
**"I created an issue but it's not showing in ready"**
1. Run bd show on the issue
2. Check dependencies field
3. If blocked, resolve blocker first
4. If incorrectly blocked, remove dependency
**"Work is more complex than expected"**
1. Transition from TodoWrite to bd mid-session
2. Create bd issue with current context
3. Note: "Discovered complexity during implementation"
4. Add dependencies as discovered
5. Continue with bd tracking
**"I closed an issue but work isn't done"**
1. Reopen with bd update status=open
2. Or create new issue linking to closed one
3. Note what's still needed
4. Closed issues can't be reopened in some systems, so create new if needed
**"Too many issues, can't find what matters"**
1. Use bd list with filters (priority, issue_type)
2. Use bd ready to focus on unblocked work
3. Consider closing old issues that no longer matter
4. Use labels for organization