Stick the following into a CLAUDE.md or AGENTS.md somewhere.
This project uses Beads for issue tracking instead of markdown todos. Key commands:
bd list # List all issues
bd ready # Show issues ready to work (no blockers)
bd show <issue-id> # Show issue details
bd update <issue-id> --status in_progress
bd close <issue-id>
bd dep tree <issue-id> # Visualize dependenciesCurrent epics are tracked with dependencies. Check bd list to see all issues and bd ready for unblocked work.
Always start by checking for in-progress work:
- Check for in-progress epics: Run
bd list --status in_progressto see which epics are currently being worked on - Focus on epic tasks: If an epic is in-progress, prioritize tasks that block that epic
- Check ready work: Use
bd readyto see unblocked tasks, then choose tasks related to in-progress epics - Mark epics in-progress: When starting work on an epic's tasks, mark the epic as
in_progressif not already marked
When working on individual issues, follow this workflow:
- Start work:
bd update <issue-id> --status in_progress(for both epics and tasks) - Complete the work: Implement the feature/fix
- Close the issue:
bd close <issue-id> - Commit immediately: Create a git commit after closing each issue with:
- Summary of completed issue(s) in the commit message
- List of changes made
- Reference to issue IDs that were closed
This ensures a clean audit trail where commits map directly to completed work items.
When bugs, inconsistencies, or improvements are discovered during development:
- Create an issue immediately: Use
bd createto document the problem as soon as it's discovered - Err on the side of creating issues: Better to have tracked issues than forgotten problems
- Link to relevant epics: Use
bd dep add <epic-id> <issue-id>to link the new issue to related epics - Don't let issues block current work: If the discovered issue isn't critical, create it and continue with the current task
- Document what was found: Include enough detail in the issue description for someone else (or future you) to understand the problem
Examples of when to create issues:
- User testing reveals unexpected behavior
- Inconsistent UI/UX patterns across screens
- Missing functionality that should be added for completeness
- Technical debt or code that needs refactoring
- Documentation that needs updating
BEFORE making any code changes:
-
Check current state - Run
git statusandgit branch --show-current- If there's uncommitted work or you're not on
main, ask for instructions
- If there's uncommitted work or you're not on
-
Determine the branch strategy:
- For epic subtasks: Check if an epic branch already exists (format:
<epic-id>/<description>). If so, switch to it. If not, create it. - For standalone issues (tasks/bugs not part of an epic): Create a branch with format
<issue-id>/<description>
Examples:
- Epic branch:
64o/repo-setup - Standalone issue branch:
1n7/package-installation
- For epic subtasks: Check if an epic branch already exists (format:
-
Create/switch to the branch, then begin implementation
-
Work on the branch - All subtasks of an epic happen on the same epic branch
-
Await approval - When epic/issue is complete, wait for explicit confirmation before merging to main
Whenever you create new branches or worktrees, hold off on merging them until you get my explicit approval.
When breaking down epics into subtasks, follow this pattern:
Correct Approach:
- Epics should DEPEND ON their subtasks (epic is blocked by subtasks)
- Subtasks should NOT depend on the epic
- Use this command pattern:
# Create subtask without epic dependency bd create "Subtask Title" --priority P1 --type task --description "..." # Then make epic depend on subtask bd dep add <epic-id> <subtask-id>
Dependency Direction:
bd dep add A Bmeans "A depends on B" (B blocks A)- For epic/subtask relationship:
bd dep add epic subtask - This makes subtasks show up in
bd readywhen they have no other blockers
Example:
# Wrong: subtask depends on epic (subtask won't show in bd ready)
bd create "Install SQLite" --deps "blocks:epic-id" # ❌
# Right: create subtask, then make epic depend on it
bd create "Install SQLite" --priority P1 --type task
bd dep add epic-id subtask-id # ✅