jb-beans
beans - Flat-File Issue Tracker
Use beans to track work as markdown files alongside a project.
First step for agents
Before starting work in a beans-enabled project, run:
beans prime
Read and follow its output. It may define project-specific workflow rules, issue types, statuses, and expectations for how agents should create/update beans.
Why beans?
- Flat files — issues live as markdown in
.beans/ - Git-friendly — changes can be reviewed and committed like code
- Agent-friendly — supports
--json, structured relationships, and context priming - Portable — no server or database required
Installation
# Via Bun
bun i -g beans
# Via Homebrew
brew install hmans/beans/beans
# Via Go
go install github.com/hmans/beans@latest
Setup
# Initialize beans in the current project
beans init
# Validate config and bean graph
beans check
# Show build/version info
beans version
# If the current build prints only a commit SHA, verify package semver
bun pm ls -g beans
Global flags
All commands support these global flags:
--config <path> # Use a specific .beans.yml
--beans-path <path> # Override the data directory
Many subcommands also support --json. For agent workflows, prefer --json whenever the specific command offers it.
Core workflow
# 1. Inspect project-specific guidance
beans prime
# 2. Find existing work
beans list --json --ready
beans list --json -S "login"
# 3. Create work if needed
beans create --json "Add login screen" -t feature -s todo -d "Build the initial login UI"
# 4. Start work
beans update --json <id> -s in-progress
# 5. Keep the bean current while working
beans update --json <id> --body-append "## Notes\n\nStarted implementation"
# 6. Finish work
beans update --json <id> -s completed --body-append "## Summary of Changes\n\nImplemented the feature and validated behavior."
Issue model
Types
Current CLI-supported types:
milestoneepicbugfeaturetask
Statuses
Current CLI-supported statuses:
in-progresstododraftcompletedscrapped
Priorities
Current CLI-supported priorities:
criticalhighnormallowdeferred
Core commands
Prime the agent context
beans prime
Outputs instructions for AI coding agents, often including:
- required workflow rules
- project-specific types/statuses
- command usage preferences
- when to create, complete, or archive beans
Always check this first in beans-enabled repos.
Create beans
# Minimal
beans create "Implement user login" -t feature
# Agent-friendly
beans create --json "Fix auth race" -t bug -s in-progress -p high -d "Repro under parallel refresh"
# With tags
beans create --json "Refactor API client" -t task --tag tech-debt --tag networking
# With relationships
beans create --json "Add billing UI" -t feature --parent <epic-id>
beans create --json "Ship migration" -t task --blocked-by <other-id>
beans create --json "Unblock deploy" -t task --blocking <other-id>
# Read body from stdin or file
printf 'Implementation notes' | beans create "Document rollout" -t task -d -
beans create "Import fixtures" -t task --body-file notes.md
Useful flags:
-t, --type-s, --status-p, --priority-d, --body--body-file--tag--parent--blocking--blocked-by--prefix--json
List beans
# List everything
beans list
beans list --json
# Ready to start
beans list --json --ready
# Filter by status/type/tag/priority
beans list --json -s todo -t bug
beans list --json --tag urgent
beans list --json -p high
# Search
beans list --json -S "login"
beans list --json -S 'title:login'
beans list --json -S 'body:authentication'
beans list --json -S '"user login"'
beans list --json -S 'login~'
# Relationship filters
beans list --json --parent <id>
beans list --json --has-parent
beans list --json --no-parent
beans list --json --has-blocking
beans list --json --no-blocking
beans list --json --is-blocked
# Other output modes
beans list --json --full
beans list --quiet
beans list --sort updated
Notes:
--readyexcludes blocked,in-progress,completed,scrapped, anddraftbeans.--quietoutputs only IDs, one per line.- Search uses Bleve query syntax.
Show bean details
beans show <id>
beans show <id> <id2>
beans show --json <id>
beans show --body-only <id>
beans show --raw <id>
beans show --etag-only <id>
Use --etag-only when doing optimistic locking with updates.
Update beans
# Status/title/type/priority
beans update --json <id> -s in-progress
beans update --json <id> --title "New title"
beans update --json <id> -t feature -p high
# Tags
beans update --json <id> --tag urgent --tag auth
beans update --json <id> --remove-tag urgent
# Relationships
beans update --json <id> --parent <epic-id>
beans update --json <id> --remove-parent
beans update --json <id> --blocked-by <other-id>
beans update --json <id> --remove-blocked-by <other-id>
beans update --json <id> --blocking <other-id>
beans update --json <id> --remove-blocking <other-id>
# Replace body entirely
beans update --json <id> -d "Updated body"
beans update --json <id> --body-file notes.md
# Append to body
beans update --json <id> --body-append "## Notes\n\nExtra context"
printf '## Summary\n\nDone.' | beans update --json <id> --body-append -
# Exact single replacement in body
beans update --json <id> \
--body-replace-old "- [ ] Add tests" \
--body-replace-new "- [x] Add tests"
# Combine metadata + body edits
beans update --json <id> \
-s completed \
--body-append "## Summary of Changes\n\nImplemented and verified."
Concurrency-safe updates
ETAG=$(beans show <id> --etag-only)
beans update --json <id> --if-match "$ETAG" -s in-progress
Use --if-match to avoid overwriting concurrent edits.
Delete beans
beans delete <id>
beans delete <id> <id2>
beans delete --json <id> # implies --force
beans delete -f <id>
If other beans reference the target, beans warns and removes those references after confirmation. -f skips prompts and warnings.
Archive completed work
beans archive
beans archive --json
Moves all completed and scrapped beans into .beans/archive/.
Archive only when appropriate for the project workflow or when the user asks. Archived beans are preserved for project memory and remain visible in queries.
Validate configuration and integrity
beans check
beans check --json
beans check --fix
Checks for:
- config errors
- broken links
- self-links
- circular dependencies
--fix can repair broken links and self-links automatically.
Generate roadmaps
beans roadmap
beans roadmap --json
beans roadmap --include-done
beans roadmap --status todo
beans roadmap --no-status completed
beans roadmap --link-prefix https://example.com/beans/
beans roadmap --no-links
Use this for milestone/epic rollups and markdown planning views.
Query with GraphQL
# The command is beans graphql; beans query is an alias
beans graphql '{ beans { id title status } }'
beans graphql --json '{ bean(id: "abc") { title body } }'
beans graphql -v '{"id":"abc"}' 'query GetBean($id: ID!) { bean(id: $id) { title } }'
beans graphql --schema
Examples:
# Actionable work
beans graphql --json '{ beans(filter: { excludeStatus: ["completed", "scrapped"], isBlocked: false }) { id title status type } }'
# High priority bugs
beans graphql --json '{ beans(filter: { type: ["bug"], priority: ["critical", "high"] }) { id title } }'
# Traverse relationships
beans graphql --json '{ bean(id: "abc") { title parent { title } children { id title status } blockedBy { id title } } }'
TUI
The current CLI does not expose a built-in beans tui command.
Use the separate beans-tui tool if you want a terminal UI.
Relationships
Beans support structured relationships:
- Parent: hierarchy like milestone → epic → feature → task
- Blocking: this bean blocks another bean
- Blocked-by: this bean is blocked by another bean
Examples:
beans update --json child-1 --parent epic-1
beans update --json task-2 --blocked-by task-1
beans update --json infra-1 --blocking release-1
Recommended agent usage patterns
Always prefer JSON when parsing
beans list --json --ready
beans show --json <id>
beans create --json "Title" -t task
beans update --json <id> -s in-progress
Keep bean bodies current
Use body content for:
- checklists
- implementation notes
- reproduction steps
- summaries of changes
- reasons for scrapping work
Make narrow body replacements
When updating checklists or notes, use exact replacement instead of rewriting the whole body when possible:
beans update <id> \
--body-replace-old "- [ ] Ship release" \
--body-replace-new "- [x] Ship release"
Prefer relationships over ad-hoc text
Use --parent, --blocking, and --blocked-by instead of only mentioning dependencies in freeform notes.
Integration notes
OpenCode
The beans prime output can be injected into agent context via an OpenCode plugin.
Codex / Pi / Claude Code
At minimum, add a rule to project instructions like:
Before starting work in this repo, run `beans prime` and follow its output.
Tips
- Run
beans primefirst in beans-enabled projects - Use
--jsonfor agent-readable output - Use
beans version, notbeans --version; if it prints a commit SHA instead of semver, verify the installed package version withbun pm ls -g beans - Use
beans graphqlfor advanced filtering and relationship traversal - Use separate
beans-tuitooling if you need a terminal UI - Use
beans checkafter large edits or relationship changes
Links
- GitHub: https://github.com/hmans/beans
- Documentation: https://github.com/hmans/beans#readme
More from bjesuiter/skills
mole-mac-cleanup
Mac cleanup & optimization tool combining CleanMyMac, AppCleaner, DaisyDisk features. Deep cleaning, smart uninstaller, disk insights, and project artifact purge.
32xcode
Build, test, and manage Xcode projects and Swift packages. Use when the user mentions Xcode, iOS/macOS app development, simulators, Swift packages, or needs to build/test Apple platform apps. Triggers on "build", "run", "test", "simulator", "xcodebuild", "swift package", "iOS app", "macOS app".
30summarize
Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).
27jb-browser-testing
Private browser testing rules for jb workflows. Prefer playwriter_exec with careful tab selection, fall back to agent-browser, and avoid playwright-mcp.
16mcporter
Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.
16security-check
Red-team security review for code changes. Use when reviewing pending git changes, branch diffs, or new features for security vulnerabilities, permission gaps, injection risks, and attack vectors. Acts as a pen-tester analyzing code.
16