opencode-beads
AGENTS.md266 starsChanged 2 months agoMITView on GitHub
Triggers: User says "bump the version", "cut a new release", "release a new version", "let's do a release", or similar. If the user specifies a version number (e.g., "bump to 0.4.0") or bump type (major/minor/patch), use that. Otherwise: Use this exact format: IMPORTANT: This project uses bd (beads) for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods. Check for ready work: Create new issues: Claim and update: Complete work:
- Installs packages
We split this AGENTS.md into the rules it gives an agent
21 rules. About 0 are common, 9 are distinctive, and 12 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
12
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 10
Use import type for type-only imports (verbatimModuleSyntax)
- Very specific: line 32
If the user specifies a version number (e.g., "bump to 0.4.0") or bump type (major/minor/patch), use that.
- Distinctive: line 37
Read the actual diffs: - don't rely solely on commit messages:
- Very specific: line 47
package.json: - Update "version" field - Very specific: line 50
Add new version heading: ## [X.Y.Z]
- Very specific: line 51
Update [unreleased] compare link at bottom to compare from new version
- Distinctive: line 52
Add new version release link at the end of the reference links list
- Distinctive: line 53
README.md: - Update version in the installation example JSON - Distinctive: line 57
Use this exact format:
- Distinctive: line 127
Discover new work?: Create linked issue:
- Very specific: line 130
Commit together: Always commit the .beads/issues.jsonl file together with the code changes so issue state stays in sync with code state
- Distinctive: line 144
Test references (point to test files or test_data examples)
- Distinctive: line 180
No manual export/import needed!
- Very specific: line 184
If using GitHub Copilot, also create .github/copilot-instructions.md for automatic instruction loading.
- Very specific: line 185
Run bd onboard to get the content, or see step 2 of the onboard instructions.
- Distinctive: line 189
If using Claude or MCP-compatible clients, install the beads MCP server:
- Very specific: line 195
Add to MCP config (e.g., ~/.config/claude/config.json):
- Very specific: line 217
Create a history/ directory in the project root
- Distinctive: line 219
Keep the repository root clean and focused on permanent project files
- Very specific: line 220
Only access history/ when explicitly asked to review past planning
- Very specific: line 237
Run bd <command> --help to see all available flags for any command.
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent Guidelines
Commands
- Typecheck:
bun run typecheck - Install deps:
bun install - No tests configured
Code Style
- TypeScript strict mode with ESM modules
- Use
import typefor type-only imports (verbatimModuleSyntax) - Node.js imports use
node:prefix (e.g.,node:fs/promises) - Handle undefined from indexed access (noUncheckedIndexedAccess enabled)
- camelCase for functions/variables, PascalCase for types/interfaces
- JSDoc comments for function documentation
- Async/await for async operations
Project Structure
src/plugin.ts- Main plugin entry pointsrc/vendor.ts- Vendor file loadersvendor/- Synced content from upstream beads repo (commands, agents)
Notes
- This is an OpenCode plugin integrating the beads issue tracker
- Vendor files are synced via
scripts/sync-beads.sh- don't edit directly
Releasing a New Version
Triggers: User says "bump the version", "cut a new release", "release a new version", "let's do a release", or similar.
Determining the Version
If the user specifies a version number (e.g., "bump to 0.4.0") or bump type (major/minor/patch), use that. Otherwise:
- Find the current version in
package.json - Fetch tags from remote:
git fetch origin --tags - Get commits since last release:
git log v<current>..HEAD --oneline - Read the actual diffs - don't rely solely on commit messages:
git diff v<current>..HEAD -- src/for source changesgit diff v<current>..HEAD -- vendor/for vendor syncs
- Apply semver:
- patch (0.0.x): Bug fixes, dependency updates, vendor syncs with no breaking changes
- minor (0.x.0): New features, new commands, non-breaking enhancements
- major (x.0.0): Breaking changes to plugin API or behavior
Files to Update
package.json- Update"version"fieldCHANGELOG.md:- Move content from
## [Unreleased]to new version section - Add new version heading:
## [X.Y.Z] - Update
[unreleased]compare link at bottom to compare from new version - Add new version release link at the end of the reference links list
- Move content from
README.md- Update version in the installation example JSON
Commit Convention
Use this exact format:
:bookmark: bump version X.Y.Z -> A.B.CChecklist
- All three files updated with consistent version
- CHANGELOG has actual changes listed (not empty)
- CHANGELOG links point to correct versions
- Single commit with all version bump changes
- User will cut the GitHub release after merge
Issue Tracking with bd (beads)
IMPORTANT: This project uses bd (beads) for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods.
Why bd?
- Dependency-aware: Track blockers and relationships between issues
- Git-friendly: Auto-syncs to JSONL for version control
- Agent-optimized: JSON output, ready work detection, discovered-from links
- Prevents duplicate tracking systems and confusion
Quick Start
Check for ready work:
bd ready --jsonCreate new issues:
bd create "Issue title" -t bug|feature|task -p 0-4 --json
bd create "Issue title" -p 1 --deps discovered-from:bd-123 --json
bd create "Subtask" --parent <epic-id> --json # Hierarchical subtask (gets ID like epic-id.1)Claim and update:
bd update bd-42 --status in_progress --json
bd update bd-42 --priority 1 --jsonComplete work:
bd close bd-42 --reason "Completed" --jsonIssue Types
bug- Something brokenfeature- New functionalitytask- Work item (tests, docs, refactoring)epic- Large feature with subtaskschore- Maintenance (dependencies, tooling)
Priorities
0- Critical (security, data loss, broken builds)1- High (major features, important bugs)2- Medium (default, nice-to-have)3- Low (polish, optimization)4- Backlog (future ideas)
Workflow for AI Agents
- Check ready work:
bd readyshows unblocked issues - Claim your task:
bd update <id> --status in_progress - Work on it: Implement, test, document
- Discover new work? Create linked issue:
bd create "Found bug" -p 1 --deps discovered-from:<parent-id>
- Complete:
bd close <id> --reason "Done" - Commit together: Always commit the
.beads/issues.jsonlfile together with the code changes so issue state stays in sync with code state
Writing Self-Contained Issues
Issues must be fully self-contained - readable without any external context (plans, chat history, etc.). A future session should understand the issue completely from its description alone.
Required elements:
- Summary: What and why in 1-2 sentences
- Files to modify: Exact paths (with line numbers if relevant)
- Implementation steps: Numbered, specific actions
- Example: Show before → after transformation when applicable
Optional but helpful:
- Edge cases or gotchas to watch for
- Test references (point to test files or test_data examples)
- Dependencies on other issues
Bad example:
Implement the refactoring from the planGood example:
Add timeout parameter to fetchUser() in src/api/users.ts
1. Add optional timeout param (default 5000ms)
2. Pass to underlying fetch() call
3. Update tests in src/api/users.test.ts
Example: fetchUser(id) → fetchUser(id, { timeout: 3000 })
Depends on: bd-abc123 (fetch wrapper refactor)Dependencies: Think "Needs", Not "Before"
bd dep add X Y = "X needs Y" = Y blocks X
TRAP: Temporal words ("Phase 1", "before", "first") invert your thinking!
WRONG: "Phase 1 before Phase 2" → bd dep add phase1 phase2
RIGHT: "Phase 2 needs Phase 1" → bd dep add phase2 phase1Verify: bd blocked - tasks blocked by prerequisites, not dependents.
Auto-Sync
bd automatically syncs with git:
- Exports to
.beads/issues.jsonlafter changes (5s debounce) - Imports from JSONL when newer (e.g., after
git pull) - No manual export/import needed!
GitHub Copilot Integration
If using GitHub Copilot, also create .github/copilot-instructions.md for automatic instruction loading.
Run bd onboard to get the content, or see step 2 of the onboard instructions.
MCP Server (Recommended)
If using Claude or MCP-compatible clients, install the beads MCP server:
pip install beads-mcpAdd to MCP config (e.g., ~/.config/claude/config.json):
{
"beads": {
"command": "beads-mcp",
"args": []
}
}Then use mcp__beads__* functions instead of CLI commands.
Managing AI-Generated Planning Documents
AI assistants often create planning and design documents during development:
- PLAN.md, IMPLEMENTATION.md, ARCHITECTURE.md
- DESIGN.md, CODEBASE_SUMMARY.md, INTEGRATION_PLAN.md
- TESTING_GUIDE.md, TECHNICAL_DESIGN.md, and similar files
Best Practice: Use a dedicated directory for these ephemeral files
Recommended approach:
- Create a
history/directory in the project root - Store ALL AI-generated planning/design docs in
history/ - Keep the repository root clean and focused on permanent project files
- Only access
history/when explicitly asked to review past planning
Example .gitignore entry (optional):
# AI planning documents (ephemeral)
history/Benefits:
- ✅ Clean repository root
- ✅ Clear separation between ephemeral and permanent documentation
- ✅ Easy to exclude from version control if desired
- ✅ Preserves planning history for archeological research
- ✅ Reduces noise when browsing the project
CLI Help
Run bd <command> --help to see all available flags for any command.
For example: bd create --help shows --parent, --deps, --assignee, etc.
Important Rules
- ✅ Use bd for ALL task tracking
- ✅ Always use
--jsonflag for programmatic use - ✅ Link discovered work with
discovered-fromdependencies - ✅ Check
bd readybefore asking "what should I work on?" - ✅ Store AI planning docs in
history/directory - ✅ Run
bd <cmd> --helpto discover available flags - ❌ Do NOT create markdown TODO lists
- ❌ Do NOT use external issue trackers
- ❌ Do NOT duplicate tracking systems
- ❌ Do NOT clutter repo root with planning documents
For more details, see README.md and QUICKSTART.md.
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository2 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

