Replace the minimal beads workflow section with detailed documentation for all agent tooling: br (beads_rust) CLI with workflow patterns and key invariants, bv robot mode with triage/planning/graph analysis/ history/forecasting commands, hybrid semantic search, static site export, ast-grep vs ripgrep guidance, Morph WarpGrep usage, UBS static analysis, and cass cross-agent session search. Each section includes concrete command examples, jq quick references, and anti-patterns to avoid. The structure follows a discovery-first approach — agents start with triage, then drill into specifics. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
13 KiB
Agent Instructions
Guidance for Claude Code and other AI agents working in this repository.
Development Principles
Find the simplest solution that meets all acceptance criteria. Use third party libraries whenever there's a well-maintained, active, and widely adopted solution (for example, date-fns for TS date math) Build extensible pieces of logic that can easily be integrated with other pieces. DRY principles should be loosely held. Architecture MUST be clear and well thought-out. Ask the user for clarification whenever ambiguity is discovered around architecture, or you think a better approach than planned exists.
Issue Tracking with br (beads_rust)
All issue tracking goes through br (beads_rust). No other TODO systems.
Key invariants:
.beads/is authoritative state and must always be committed with code changes.- Do not edit
.beads/*.jsonldirectly; only viabr. - br is non-invasive: it NEVER executes git commands. You must manually commit
.beads/changes.
Basics
Check ready work:
br ready --json
Create issues:
br create "Issue title" -t bug|feature|task -p 0-4 --json
br create "Issue title" -p 1 --deps discovered-from:bv-123 --json
Update:
br update bv-42 --status in_progress --json
br update bv-42 --priority 1 --json
Complete:
br close bv-42 --reason "Completed" --json
Types:
bug,feature,task,epic,chore
Priorities:
0critical (security, data loss, broken builds)1high2medium (default)3low4backlog
Agent workflow:
br readyto find unblocked work.- Claim:
br update <id> --status in_progress. - Implement + test.
- If you discover new work, create a new bead with
discovered-from:<parent-id>. - Close when done.
- Sync and commit:
br sync --flush-only # Export to JSONL (no git ops) git add .beads/ # Stage beads changes git commit -m "..." # Commit with code changes
Never:
- Use markdown TODO lists.
- Use other trackers.
- Duplicate tracking.
Using bv as an AI Sidecar
bv is a graph-aware triage engine for Beads projects (.beads/beads.jsonl). Instead of parsing JSONL or hallucinating graph traversal, use robot flags for deterministic, dependency-aware outputs with precomputed metrics (PageRank, betweenness, critical path, cycles, HITS, eigenvector, k-core).
Scope boundary: bv handles what to work on (triage, priority, planning). For multi-agent coordination (messaging, work claiming, file reservations), see the optional MCP Agent Mail section above.
⚠️ CRITICAL: Use ONLY --robot-* flags. Bare bv launches an interactive TUI that blocks your session.
The Workflow: Start With Triage
bv --robot-triage is your single entry point. It returns everything you need in one call:
quick_ref: at-a-glance counts + top 3 picksrecommendations: ranked actionable items with scores, reasons, unblock infoquick_wins: low-effort high-impact itemsblockers_to_clear: items that unblock the most downstream workproject_health: status/type/priority distributions, graph metricscommands: copy-paste shell commands for next steps
bv --robot-triage # THE MEGA-COMMAND: start here
bv --robot-next # Minimal: just the single top pick + claim command
Other Commands
Planning:
| Command | Returns |
|---|---|
--robot-plan |
Parallel execution tracks with unblocks lists |
--robot-priority |
Priority misalignment detection with confidence |
Graph Analysis:
| Command | Returns |
|---|---|
--robot-insights |
Full metrics: PageRank, betweenness, HITS, eigenvector, critical path, cycles, k-core, articulation points, slack |
--robot-label-health |
Per-label health: health_level (healthy|warning|critical), velocity_score, staleness, blocked_count |
--robot-label-flow |
Cross-label dependency: flow_matrix, dependencies, bottleneck_labels |
--robot-label-attention [--attention-limit=N] |
Attention-ranked labels by: (pagerank × staleness × block_impact) / velocity |
History & Change Tracking:
| Command | Returns |
|---|---|
--robot-history |
Bead-to-commit correlations: stats, histories (per-bead events/commits/milestones), commit_index |
--robot-diff --diff-since <ref> |
Changes since ref: new/closed/modified issues, cycles introduced/resolved |
Other Commands:
| Command | Returns |
|---|---|
--robot-burndown <sprint> |
Sprint burndown, scope changes, at-risk items |
--robot-forecast <id|all> |
ETA predictions with dependency-aware scheduling |
--robot-alerts |
Stale issues, blocking cascades, priority mismatches |
--robot-suggest |
Hygiene: duplicates, missing deps, label suggestions, cycle breaks |
--robot-graph [--graph-format=json|dot|mermaid] |
Dependency graph export |
--export-graph <file.html> |
Self-contained interactive HTML visualization |
Scoping & Filtering
bv --robot-plan --label backend # Scope to label's subgraph
bv --robot-insights --as-of HEAD~30 # Historical point-in-time
bv --recipe actionable --robot-plan # Pre-filter: ready to work (no blockers)
bv --recipe high-impact --robot-triage # Pre-filter: top PageRank scores
bv --robot-triage --robot-triage-by-track # Group by parallel work streams
bv --robot-triage --robot-triage-by-label # Group by domain
Understanding Robot Output
All robot JSON includes:
data_hash— Fingerprint of source beads.jsonl (verify consistency across calls)status— Per-metric state:computed|approx|timeout|skipped+ elapsed msas_of/as_of_commit— Present when using--as-of; contains ref and resolved SHA
Two-phase analysis:
- Phase 1 (instant): degree, topo sort, density — always available immediately
- Phase 2 (async, 500ms timeout): PageRank, betweenness, HITS, eigenvector, cycles — check
statusflags
For large graphs (>500 nodes): Some metrics may be approximated or skipped. Always check status.
jq Quick Reference
bv --robot-triage | jq '.quick_ref' # At-a-glance summary
bv --robot-triage | jq '.recommendations[0]' # Top recommendation
bv --robot-plan | jq '.plan.summary.highest_impact' # Best unblock target
bv --robot-insights | jq '.status' # Check metric readiness
bv --robot-insights | jq '.Cycles' # Circular deps (must fix!)
bv --robot-label-health | jq '.results.labels[] | select(.health_level == "critical")'
Performance: Phase 1 instant, Phase 2 async (500ms timeout). Prefer --robot-plan over --robot-insights when speed matters. Results cached by data hash. Use bv --profile-startup for diagnostics.
Use bv instead of parsing beads.jsonl—it computes PageRank, critical paths, cycles, and parallel tracks deterministically.
Hybrid Semantic Search (CLI)
bv --search supports hybrid ranking (text + graph metrics).
# Default (text-only)
bv --search "login oauth"
# Hybrid mode with preset
bv --search "login oauth" --search-mode hybrid --search-preset impact-first
# Hybrid with custom weights
bv --search "login oauth" --search-mode hybrid \
--search-weights '{"text":0.4,"pagerank":0.2,"status":0.15,"impact":0.1,"priority":0.1,"recency":0.05}'
# Robot JSON output (adds mode/preset/weights + component_scores for hybrid)
bv --search "login oauth" --search-mode hybrid --robot-search
Env defaults:
BV_SEARCH_MODE(text|hybrid)BV_SEARCH_PRESET(default|bug-hunting|sprint-planning|impact-first|text-only)BV_SEARCH_WEIGHTS(JSON string, overrides preset)
Static Site Export for Stakeholder Reporting
Generate a static dashboard for non-technical stakeholders:
# Interactive wizard (recommended)
bv --pages
# Or export locally
bv --export-pages ./dashboard --pages-title "Sprint 42 Status"
The output is a self-contained HTML/JS bundle that:
- Shows triage recommendations (from --robot-triage)
- Visualizes dependencies
- Supports full-text search (FTS5)
- Works offline after initial load
- Requires no installation to view
Deployment options:
bv --pages→ Interactive wizard for GitHub Pages deploymentbv --export-pages ./dir→ Local export for custom hostingbv --preview-pages ./dir→ Preview bundle locally
For CI/CD integration:
bv --export-pages ./bv-pages --pages-title "Nightly Build"
# Then deploy ./bv-pages to your hosting of choice
ast-grep vs ripgrep
Use ast-grep when structure matters. It parses code and matches AST nodes, so results ignore comments/strings, understand syntax, and can safely rewrite code.
- Refactors/codemods: rename APIs, change patterns
- Policy checks: enforce patterns across a repo
Use ripgrep when text is enough. Fastest way to grep literals/regex.
- Recon: find strings, TODOs, config values
- Pre-filter: narrow candidates before precise pass
Go-specific examples:
# Find all error returns without wrapping
ast-grep run -l Go -p 'return err'
# Find all fmt.Println (should use structured logging)
ast-grep run -l Go -p 'fmt.Println($$$)'
# Quick grep for a function name
rg -n 'func.*LoadConfig' -t go
# Combine: find files then match precisely
rg -l -t go 'sync.Mutex' | xargs ast-grep run -l Go -p 'mu.Lock()'
Morph Warp Grep — AI-Powered Code Search
Use mcp__morph-mcp__warp_grep for exploratory "how does X work?" questions. An AI search agent automatically expands your query into multiple search patterns, greps the codebase, reads relevant files, and returns precise line ranges.
Use ripgrep for targeted searches. When you know exactly what you're looking for.
| Scenario | Tool |
|---|---|
| "How is graph analysis implemented?" | warp_grep |
| "Where is PageRank computed?" | warp_grep |
"Find all uses of NewAnalyzer" |
ripgrep |
| "Rename function across codebase" | ast-grep |
warp_grep usage:
mcp__morph-mcp__warp_grep(
repoPath: "/path/to/beads_viewer",
query: "How does the correlation package detect orphan commits?"
)
Anti-patterns:
- ❌ Using
warp_grepto find a known function name → useripgrep - ❌ Using
ripgrepto understand architecture → usewarp_grep
UBS Quick Reference
UBS = "Ultimate Bug Scanner" — static analysis for catching bugs early.
Golden Rule: ubs <changed-files> before every commit. Exit 0 = safe. Exit >0 = fix & re-run.
ubs file.go file2.go # Specific files (< 1s)
ubs $(git diff --name-only --cached) # Staged files
ubs --only=go pkg/ # Go files only
ubs . # Whole project
Output Format:
⚠️ Category (N errors)
file.go:42:5 – Issue description
💡 Suggested fix
Exit code: 1
Fix Workflow:
- Read finding → understand the issue
- Navigate
file:line:col→ view context - Verify real issue (not false positive)
- Fix root cause
- Re-run
ubs <file>→ exit 0 - Commit
Bug Severity (Go-specific):
- Critical: nil dereference, division by zero, race conditions, resource leaks
- Important: error handling, type assertions without check
- Contextual: TODO/FIXME, unused variables
cass — Cross-Agent Session Search
cass indexes prior agent conversations (Claude Code, Codex, Cursor, Gemini, ChatGPT, Aider, etc.) into a unified, searchable index so you can reuse solved problems.
NEVER run bare cass — it launches an interactive TUI. Always use --robot or --json.
Quick Start
# Check if index is healthy (exit 0=ok, 1=run index first)
cass health
# Search across all agent histories
cass search "authentication error" --robot --limit 5
# View a specific result (from search output)
cass view /path/to/session.jsonl -n 42 --json
# Expand context around a line
cass expand /path/to/session.jsonl -n 42 -C 3 --json
# Learn the full API
cass capabilities --json # Feature discovery
cass robot-docs guide # LLM-optimized docs
Key Flags
| Flag | Purpose |
|---|---|
--robot / --json |
Machine-readable JSON output (required!) |
--fields minimal |
Reduce payload: source_path, line_number, agent only |
--limit N |
Cap result count |
--agent NAME |
Filter to specific agent (claude, codex, cursor, etc.) |
--days N |
Limit to recent N days |
stdout = data only, stderr = diagnostics. Exit 0 = success.
Robot Mode Etiquette
- Prefer
cass --robot-helpandcass robot-docs <topic>for machine-first docs - The CLI is forgiving: globals placed before/after subcommand are auto-normalized
- If parsing fails, follow the actionable errors with examples
- Use
--color=neverin non-TTY automation for ANSI-free output
Pre-Flight Health Check
cass health --json
Returns in <50ms:
- Exit 0: Healthy—proceed with queries
- Exit 1: Unhealthy—run
cass index --fullfirst
Exit Codes
| Code | Meaning | Retryable |
|---|---|---|
| 0 | Success | N/A |
| 1 | Health check failed | Yes—run cass index --full |
| 2 | Usage/parsing error | No—fix syntax |
| 3 | Index/DB missing | Yes—run cass index --full |
Treat cass as a way to avoid re-solving problems other agents already handled.