Claude-skill-registry beads-execute
Execute beads tasks with proper claim/work/close workflow and session management
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/beads-execute" ~/.claude/skills/majiayu000-claude-skill-registry-beads-execute && rm -rf "$T"
skills/data/beads-execute/SKILL.mdBeads Execution Skill
Overview
This skill guides the execution of beads tasks after a dependency graph has been created via
beads-plan. It covers:
- Finding and claiming ready work
- Executing tasks with proper state management
- Closing tasks and checking newly unblocked work
- Session management and handoff
Prerequisites
CLI installed and initialized in the projectbd- A beads plan exists (created via
)/beads-plan - Working directory is within the beads-initialized project
Project Context and History
When you need to understand what previous agents did or review project history:
Beads History
# View all beads in an epic (including closed) bd list --parent <epic-id> --all # View a specific bead's full history and notes bd show <bead-id> # See what beads were recently closed bd list --status closed --parent <epic-id> # Check git commits associated with beads (commits reference bead IDs) git log --oneline --grep="<bead-id>"
Harness Run Logs
Previous automated runs are logged in
.beads/harness-logs/:
# List all run logs (most recent first) ls -t .beads/harness-logs/*.log # View the most recent run log cat "$(ls -t .beads/harness-logs/*.log | head -1)" # Search logs for errors or specific beads grep -l "ERROR\|error" .beads/harness-logs/*.log grep -l "<bead-id>" .beads/harness-logs/*.log
Run logs contain:
- Timestamps for each iteration
- Session IDs (for replaying in TUI)
- Epic status at completion
- Structured events (JSON format)
Git History
Agents commit with bead IDs in the message format
feat(<bead-id>): <title>:
# See commits for a specific bead git log --oneline --grep="<bead-id>" # See what changed in a bead's implementation git log -p --grep="<bead-id>" # See recent bead-related commits git log --oneline --grep="^feat\|^fix\|^wip" -20
OpenCode Sessions
If you need to review what an agent actually did (tool calls, reasoning):
# List recent sessions opencode session list --format json | jq '.[:5]' # Export a session for review opencode export <session-id> > session-export.json
Bead Notes
Agents document important context in bead notes:
# Find beads with notes bd list --parent <epic-id> --json | jq '.[] | select(.notes != null) | {id, title, notes}' # Common note prefixes to look for: # - "Context limit." - Agent hit context exhaustion, notes contain resume point # - "REVIEW NEEDED:" - Agent flagged uncertainty # - "Blocked:" - Agent couldn't complete, explains why
Session Start Protocol
At the start of an execution session:
# 1. Sync to get latest state from remote bd sync # 2. Show epic status bd epic status <epic-id> # 3. Show ready work bd ready # 4. Visualize the graph (optional) bd graph <epic-id>
Present this information to the user and help them select which task to work on.
Task Execution Workflow
1. Claim a Task
Before starting work, claim the task atomically:
bd update <task-id> --claim
This sets:
=statusin_progress
= current actorassignee
Important: If claim fails, another agent already claimed it. Choose different task.
2. View Task Details
bd show <task-id>
Review:
- Description
- Acceptance criteria
- Dependencies (what this blocks)
3. Execute the Work
Implement the task according to its acceptance criteria.
During execution:
- Create branches per your git workflow
- Run tests where applicable
- Document any discovered work
4. File Discovered Work
If you discover additional work needed:
bd create "Discovered: <title>" -t task -p 2 --parent <epic-id> \ -d "Found while working on <current-task>: <description>"
Add dependencies if the discovered work blocks or is blocked by other tasks:
bd dep add <new-task> <blocking-task>
5. Close the Task
When acceptance criteria are met:
bd close <task-id> -r "Completed: <brief summary>"
6. Check Newly Unblocked Work
bd ready
This shows tasks that became unblocked by your completion.
Status Transitions
open -> in_progress (via --claim) in_progress -> closed (via bd close) closed -> open (via bd reopen, if needed)
Multi-Task Sessions
For longer sessions working on multiple tasks:
# After completing one task bd close <task-1> -r "Completed" bd ready # See what's unblocked bd update <task-2> --claim # Claim next task # ... work on task 2 ... bd close <task-2> -r "Completed" bd sync # Sync periodically
Rule: One task
in_progress at a time. Complete current before claiming next.
Handling Blocked Work
If you need to work on something blocked:
-
Check what's blocking it:
bd show <blocked-task> # See "DEPENDS ON" section -
Either:
- Work on the blocker first
- Re-evaluate if the dependency is correct
- Remove spurious dependency:
bd dep remove <task> <blocker>
Key Commands Reference
| Action | Command |
|---|---|
| Find ready work | |
| Claim a task | |
| View task details | |
| Close task | |
| See blocked work | |
| Visualize graph | |
| Sync to git | |
| Epic progress | |
| Add dependency | |
| Remove dependency | |
| Create new task | |
Anti-Patterns to Avoid
- Working without claiming - Always claim before starting work
- Multiple tasks in-progress - Complete one before claiming another
- Forgetting to close - Close immediately when acceptance criteria are met
- Batching closures - Close each task as you finish, don't save them up
- Ignoring discovered work - File issues for anything found during execution
- Skipping sync - Sync before session end and periodically during long sessions
Session End Protocol
When the user invokes
/beads-land, follow the landing protocol:
- Check for in-progress tasks - Close or document status
- File remaining work - Create issues for anything discovered
- Sync and push - MANDATORY before session ends
- Provide handoff - Summary and next session prompt
See
/beads-land command for the complete protocol.
Loop Mode Protocol
When operating in loop mode (invoked via
/beads-loop), you execute beads autonomously until completion or error.
Loop Awareness
You are executing beads automatically. The loop continues until one of:
- Epic complete - 100% of beads closed
- Unrecoverable error - Something requires human intervention
- Context exhaustion - Signal continuation and exit cleanly
There is no human gate between beads. The outer harness script handles continuation automatically.
Selection Heuristics
When multiple beads are ready, prefer:
- Higher priority (P0 > P1 > P2)
- Unblocking power - Beads that unblock the most other beads
- Smaller scope - Faster feedback loops
- Context locality - Related to recently-completed work
In practice,
bd ready returns beads sorted by priority. Select the first one:
bd ready --json | jq -r '.[0].id'
Loop Algorithm
LOOP: 1. CHECK COMPLETION bd epic status <epic-id> --json If 100% complete -> Celebrate, EXIT (no continuation signal) 2. FIND READY WORK bd ready --json If empty AND blocked exist -> Diagnose deadlock, EXIT If empty AND nothing open -> All done, EXIT 3. SELECT AND CLAIM task = first ready bead bd update <task-id> --claim If fails -> Another agent claimed it, GOTO 2 4. EXECUTE bd show <task-id> --json Implement per acceptance criteria File discovered work with bd create 5. VERIFY AND CLOSE Verify acceptance criteria met bd close <task-id> -r "Completed: <summary>" 6. CHECKPOINT bd sync git add -A && git commit -m "feat(<task-id>): <title>" git push 7. CONTEXT CHECK If context approaching limit -> GOTO Context Exhaustion Protocol Else -> GOTO 1
Context Exhaustion Protocol
When you detect context is approaching limits (conversation getting long, many tool calls, complex state):
Detection Heuristics
Context exhaustion is approaching when:
- Conversation has been running for extended period with many tool calls
- You're having difficulty tracking state or context
- OpenCode triggers auto-compaction
Exit Protocol
- Complete current atomic operation - Never stop mid-file-edit
- If bead in-progress, add session notes:
bd update <task-id> --notes "Context limit. Completed: <what you finished>. Next: <what remains>." - Sync and push (non-negotiable):
bd sync git add -A && git commit -m "wip(<task-id>): context checkpoint" || true git push - Write continuation signal:
echo "1" > .beads/continue - Exit cleanly with a brief status message
CRITICAL:
- Do NOT signal the user to re-invoke
- Do NOT wait for confirmation
- Do NOT ask if the user wants to continue
- The outer harness script handles all continuation automatically
Continuation Protocol
When starting a session that may be a continuation (harness re-invoked you):
On Session Start
-
Check for in-progress tasks:
bd list --status in_progress --json -
If in-progress bead exists, read its state:
bd show <task-id> --jsonLook for notes field - it may contain "Context limit. Completed: X. Next: Y."
-
Continue from where notes indicate, or complete the bead if notes are unclear
-
After completing the resumed bead, proceed to normal loop (check completion, find ready work, etc.)
Compaction Recovery
If your context was compacted (you see a summary message at conversation start):
- Do NOT rely on the summary for task state
- Immediately query beads:
bd list --status in_progress --json - The beads database is the source of truth, not conversation history
- Read bead notes for session context
Error Recovery Patterns
Claim Conflict
$ bd update bd-XXX --claim Error: bead already claimed by agent-2
Recovery: Skip this bead, select next from
bd ready.
Test/Verification Failure
If acceptance criteria not met after implementation:
- If quickly fixable: Fix it, verify again
- If complex issue:
Continue with other ready beads.bd update <task-id> --notes "Blocked: <issue description>. Needs: <what's required>" bd update <task-id> --status open # Unclaim bd create "Fix: <issue>" -t bug -p 1 --parent <epic> bd dep add <task-id> <new-bug-id> # Original blocked by fix bd sync
Deadlock (No Ready Beads)
$ bd ready (empty) $ bd list --status open bd-XXX ... (blocked) bd-YYY ... (blocked)
Diagnosis:
bd blocked --json # See what's blocked and why bd dep cycles # Check for cycles
Recovery:
- If cycle exists: Report cycle details, EXIT for human intervention
- If external blocker: Document and EXIT
- If all blocked on one bead: Attempt that bead or escalate
Git Push Failure
$ git push ! [rejected] main -> main (fetch first)
Recovery:
git pull --rebase # If conflict in .beads/issues.jsonl: git checkout --theirs .beads/issues.jsonl bd import -i .beads/issues.jsonl bd sync git push # Retry
Loop Mode Anti-Patterns
In addition to standard anti-patterns, in loop mode also avoid:
- Signaling user for continuation - Harness handles this
- Asking for confirmation - Loop is autonomous
- Stopping without sync/push - Always checkpoint before exit
- Ignoring session notes - Read them on continuation
- Trusting compacted context - Query beads DB for ground truth
Issue Reporting and Documentation
When you encounter problems that cannot be automatically resolved, document them properly for human review.
Creating Blocking Issues
When a bead cannot be completed due to an issue:
# Create a blocking bug with full context bd create "Bug: <concise title>" -t bug -p 1 --parent <epic-id> \ -d "## Problem <What went wrong> ## Context - Discovered while working on: <bead-id> - Environment: <relevant details> ## Steps to Reproduce 1. <step> 2. <step> ## Expected vs Actual - Expected: <what should happen> - Actual: <what happens> ## Attempted Solutions - <what you tried> - <why it didn't work> ## Recommended Fix <your analysis of what needs to happen>" # Link the dependency bd dep add <blocked-bead-id> <new-bug-id>
Documenting Uncertainty
When you're unsure about an implementation decision:
bd update <bead-id> --notes "REVIEW NEEDED: <question or concern>. Made assumption: <what you assumed>. Alternative: <other option considered>."
Flagging Technical Debt
When you implement a working but non-ideal solution:
bd create "Tech debt: <what needs improvement>" -t chore -p 3 --parent <epic-id> \ -d "## Current State <what exists now> ## Why It's Debt <why this needs improvement> ## Suggested Improvement <what should be done> ## Risk If Not Addressed <consequences of leaving it>"
Run Summary Annotation
At the end of a successful loop iteration, if there are observations worth noting:
bd update <epic-id> --notes "$(date -Iseconds) Loop completed. Observations: <notable findings, warnings, or recommendations>"
What to Document
Always create beads for:
- Bugs discovered during implementation
- Missing requirements or ambiguities
- Technical debt introduced
- External blockers (APIs down, missing credentials, etc.)
- Security concerns
- Performance issues observed
Do NOT create beads for:
- Minor code style preferences
- Transient issues that self-resolved
- Questions that can be answered by reading docs
Post-Run Review
After the harness completes, humans can review:
# View run log cat .beads/harness-logs/run-*.log | tail -1 # See all bugs filed bd list -t bug --parent <epic-id> # Check for tasks with review notes bd list --parent <epic-id> --json | jq '.[] | select(.notes != null)' # View epic status bd epic status <epic-id>
Project Documentation Protocol
Documentation is part of the work, not an afterthought. Follow these guidelines for when and how to document.
When to Create/Update Documentation
Create documentation when:
- A bead explicitly requires it - The acceptance criteria mentions docs, README, etc.
- You create a new public API - Functions, endpoints, or interfaces others will use
- You add a new command/script - CLI tools need usage documentation
- You set up a new service/component - How to run, configure, deploy
- You implement non-obvious behavior - Complex algorithms, business logic, edge cases
- The project has no README - Create a minimal one with setup instructions
Update documentation when:
- You change existing documented behavior - Keep docs in sync with code
- You deprecate or remove features - Note what changed and migration path
- You discover the docs are wrong - Fix them immediately
Do NOT create documentation for:
- Self-documenting code - Well-named functions don't need paragraph explanations
- Internal implementation details - Unless specifically requested
- Speculative features - Only document what exists
- Personal notes - Use bead notes, not project docs
Documentation Locations
Follow project conventions. Common patterns:
README.md # Project overview, quick start, basic usage docs/ # Detailed documentation architecture.md # System design, component relationships api.md # API reference deployment.md # How to deploy development.md # How to contribute/develop CHANGELOG.md # Version history (if project uses one) <component>/README.md # Component-specific docs
Documentation Standards
README.md minimum viable content:
# Project Name Brief description of what this does. ## Quick Start \`\`\`bash # How to install/setup # How to run \`\`\` ## Usage Basic usage examples. ## Configuration Key configuration options (if any).
API/Function documentation:
## function_name Brief description. ### Parameters - `param1` (type): Description - `param2` (type, optional): Description. Default: `value` ### Returns Description of return value. ### Example \`\`\`language example code \`\`\` ### Errors - `ErrorType`: When this occurs
When documenting commands/scripts:
## command-name Description of what it does. ### Usage \`\`\`bash command-name [options] <required-arg> \`\`\` ### Options - `--flag`: Description - `--option <value>`: Description (default: X) ### Examples \`\`\`bash # Common use case command-name --flag value # Another use case command-name --other-option \`\`\`
Documentation as Beads
If a feature requires documentation, it should be part of the bead's acceptance criteria:
Acceptance criteria: - Feature X works as specified - README updated with usage instructions - API documented in docs/api.md
If you complete a bead and realize docs are needed but weren't specified:
bd create "Docs: Document <feature>" -t chore -p 3 --parent <epic-id> \ -d "Add documentation for <feature> implemented in <bead-id>. Needed: - Usage examples - Configuration options - API reference"
Inline Code Documentation
Do document:
- Public API contracts (function signatures, types)
- Complex algorithms (brief explanation of approach)
- Non-obvious side effects
- TODO/FIXME with bead references:
// TODO(bd-XXX): description
Don't over-document:
- Obvious code (
)i++ // increment i - Every private function
- Implementation details that may change
Documentation Commits
Documentation changes follow the same commit pattern:
git commit -m "docs(<bead-id>): <what was documented>"
Examples:
git commit -m "docs(bd-XXX): add API reference for auth endpoints" git commit -m "docs(bd-YYY): update README with new CLI options"