| name | beans |
| description | Graph-based issue tracker for task coordination. Use when the project tracks work with beans — creating, querying, claiming, and closing tasks via CLI. |
Beans
Beans is a lightweight graph-based issue tracker for AI agent coordination. Beans are nodes;
dependencies are directed edges.
Concepts
- Bean: a task-like item with
id, title, type, status, priority, body,
parent/assignee fields, and timestamps.
- Bean IDs: type-prefixed lowercase IDs such as
task-a3f2dd1c, bug-deadbeef,
epic-12345678.
- Types: configurable with
beans types; defaults are task, bug, and epic.
Creation validates configured types.
- Status:
open, in_progress, or closed.
- Priority: integer
0..4, where 0 is highest and default is 2.
- Dependencies:
A blocks B means B is not ready until A is closed.
- Parent/child: parent beans can contain child beans via
--parent.
- Ready: a bean is ready when it is not closed, has no open blockers, and has no
open children. Ready output is sorted by priority.
Project discovery and storage
beans init
beans init --name <project-name>
beans init --dir
beans migrate
beans migrate --name <project-name>
Command database resolution:
--db PATH uses an explicit SQLite database path.
--project NAME uses a named project from the registry.
- Auto-discovery checks
MAGIC_BEANS_DIR, then the registry, then walks upward for .beans/.
Related environment variables:
MAGIC_BEANS_DIR: overrides beans store directory discovery.
MAGIC_BEANS_PARENT_ID: supplies a default parent scope for create, list, and
ready; explicit --parent overrides it.
Commands
beans list
beans list --type bug --status open
beans list --parent <parent-id>
beans ready
beans ready --assignee alice
beans ready --unassigned
beans ready --parent <parent-id>
beans show <id>
beans search "query"
beans stats
beans graph
beans create "Title"
beans create "Title" --type bug --body "Details"
beans create "Title" --priority 0
beans create "Title" --parent <parent-id>
beans create "Title" --dep <blocker-id>
beans update <id> --title "New" --priority 1 --body "Updated"
beans update <id> --status open
beans close <id> --reason "Fixed in abc1234"
beans close <id> --force
beans delete <id>
beans claim <id> --actor <name>
beans release <id> --actor <name>
beans release --mine --actor <name>
beans dep add <blocker-id> <blocked-id>
beans dep add <from-id> <to-id> --type blocks
beans dep remove <from-id> <to-id>
beans types
beans types add spike --description "Investigation"
beans types remove spike
beans config
beans skill
beans --json list
beans --json show <id>
beans --json --fields id,title,status list
beans --json --fields id,title show <id>
beans --dry-run create "Try change"
beans schema
beans export-journal > journal.jsonl
beans rebuild journal.jsonl
JSON notes
--json makes command output machine-readable for successful command execution.
beans --json show <id> adds dependency arrays: blocked_by and blocks.
--fields is intended for JSON output and is most useful with show, list, ready,
and search.
- Application-level errors under
--json are shaped like {"message": "..."}; CLI
parser errors may use Typer's normal error format.