
Beads
Keep agent-driven issue tracking with Beads (`bd`) reliable by avoiding JSONL and ID anti-patterns that corrupt routing and the database.
Overview
beads is an agent skill most often used in Build (also Operate iterate) that documents Beads tracker anti-patterns so agents query live `bd` state and valid issue IDs.
Install
npx skills add https://github.com/boshu2/agentops --skill beadsWhat is this skill?
- Critical anti-pattern: do not treat `.beads/issues.jsonl` as canonical when live `bd` is available—use `bd ready --json`
- Critical anti-pattern: reject molecule-style dot IDs; use `prefix-hash` beads IDs only
- Documents why stale JSONL breaks autonomous routing when export lags Dolt live state
- Explains prefix validation failures and `bd doctor --fix` invalid-suffix errors from bad IDs
- Hard-won production lessons framed as explicit DO/DON'T command examples
- 2 documented critical anti-patterns with DO/DON'T command pairs in the opening sections
Adoption & trust: 775 installs on skills.sh; 384 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
Your agent keeps reading stale `.beads/issues.jsonl` or creating invalid dot-style issue IDs, so ready-work routing and the beads database break in production.
Who is it for?
Repos already using Beads with `bd` where coding agents pick up issues, update status, or run autonomous ready-queue loops.
Skip if: Greenfield projects not using Beads, or teams that only need a generic GitHub Issues workflow without `bd`.
When should I use this skill?
Setting up or debugging Beads (`bd`) in an agent repo, especially before autonomous ready-queue or bulk issue creation.
What do I get? / Deliverables
Agents default to live `bd` JSON queries and standard prefix-hash IDs, avoiding corrupted imports and bad autonomous scheduling decisions.
- Correct `bd` query habits documented for agents
- Issue IDs conforming to prefix-hash format
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Issue tracking discipline is first adopted while building and coordinating agent work, before production operations. Beads governs how tasks are represented, queried, and reconciled—core project-management hygiene for agent ops repos.
Where it fits
Before an agent claims work, invoke the skill so it calls `bd ready --json` instead of parsing `.beads/issues.jsonl`.
After a failed import, use the ID-format rules to rebuild issues with `prefix-hash` IDs and avoid molecule-style dots.
Review autonomous PRs that touch `.beads` exports and verify they did not introduce non-standard issue IDs.
How it compares
Operational checker for beads usage—not a task planner skill and not a replacement for your PM methodology doc.
Common Questions / FAQ
Who is beads for?
Solo and indie builders using Beads issue tracking with coding agents who need hard rules so automation does not corrupt IDs or trust stale exports.
When should I use beads?
In Build pm when wiring agent issue pickup; in Operate iterate after tracker drift; whenever you audit autonomous `bd` usage or onboard a new agent to a beads repo.
Is beads safe to install?
The skill advises safe `bd` CLI patterns; confirm install trust via the Security Audits panel on this Prism page and your org policy before agents run shell commands.
SKILL.md
READMESKILL.md - Beads
# Beads Anti-Patterns Hard-won lessons from production beads usage. Avoid these mistakes. --- ## Critical Anti-Patterns ### 1. Treating `.beads/issues.jsonl` as the Canonical Tracker **DON'T**: Use `.beads/issues.jsonl` as your primary source for what is ready or what notes say when live `bd` commands are available ```bash # WRONG jq '.[] | select(.status=="open")' .beads/issues.jsonl ``` **DO**: Use live `bd` queries first ```bash # CORRECT bd ready --json bd show <id> --json ``` **Why it breaks**: - Export files can lag behind live tracker state - Autonomous runs make bad routing decisions when they trust stale JSONL - Parent notes and status can already be reconciled in Dolt even if the export was not refreshed --- ### 2. Molecule-Style Issue IDs **DON'T**: Create issues with dot-separated hierarchical IDs ```bash # WRONG - These IDs corrupt the database code-map-validation.calculate-coverage etl-throughput-optimization.enable-parallel-sync kagent-openwebui-bridge.admin-functions ``` **DO**: Use standard `prefix-xxxx` format ```bash # CORRECT - Standard beads ID format ap-7tc6 ap-euoy ap-cr7k ``` **Why it breaks**: - bd expects IDs in `prefix-hash` format - Dot-separated IDs fail prefix validation during import - JSONL-based repair via `bd doctor --fix --source=jsonl` errors with "invalid suffix" - Database becomes corrupted, requiring full rebuild **Root cause**: Early formula/molecule templates created non-standard IDs. This was a design mistake. **Fix**: If you have molecule-style IDs, filter them out or rebuild: ```bash # Filter to standard format only grep -E '"id":"[a-z]+-[a-z0-9]+' .beads/issues.jsonl > clean.jsonl mv clean.jsonl .beads/issues.jsonl bd doctor --fix --source=jsonl --yes ``` --- ### 3. Prefix Proliferation **DON'T**: Mix multiple prefixes in one database ```bash # WRONG - Multiple prefixes in same .beads/ code-map-validation etl-throughput-optimization kagent-openwebui-bridge ap-1234 ``` **DO**: One prefix per beads database ```bash # CORRECT - Single prefix ap-1234 ap-5678 ap-abcd ``` **Why it breaks**: - JSONL-based repair fails with "prefix mismatch detected" - Database configured for one prefix rejects others - Cross-prefix dependencies don't resolve correctly **Root cause**: Formulas/molecules created issues with their own prefixes instead of the database's prefix. **Fix**: Enforce single prefix policy: ```bash # Check for prefix violations grep -o '"id":"[^-]*' .beads/issues.jsonl | sort -u # Should show only ONE prefix ``` --- ### 4. Assuming Tracked JSONL Stays Synced Automatically **DON'T**: Mutate tracker state and assume `.beads/issues.jsonl` will stay current by itself ```bash # WRONG bd update ap-1234 --notes "Remaining gap narrowed to CLI parity" # keep working without exporting tracked JSONL ``` **DO**: Refresh the tracked export explicitly after tracker writes ```bash # CORRECT bd update ap-1234 --notes "Remaining gap narrowed to CLI parity" bd export -o .beads/issues.jsonl # if tracked ``` **Why it matters**: - The export is a git artifact, not a guaranteed live mirror - Git history becomes misleading when tracked exports are stale - Other agents may diff the export and see outdated state --- ### 5. Closing Child Issues Without Reconciling the Parent **DON'T**: Close a child bead and leave the parent's stale "remaining gap" notes untouched ```bash # WRONG bd close pl-vnu.4 --reason "Fixed the exact remaining gap" # parent still says the gap is open ``` **DO**: Reconcile the open parent in the same session ```bash # CORRECT bd close <child-id> --reason "Closed concrete remaining gap" bd show <parent-id> bd update <parent-id> --notes "Remaining gap now ..." # or bd close <parent-id> when nothing real remains ``` **Why it matters**: - Stale parent notes create false backlog - `bd ready` can surface umbrella work that is already effectively done - Autonomous loops lose trust in tracker state --- ### 6. Implementing Broad Parent Beads Directly *