bears 🐻
A file-based task tracker for developers and AI agents.
Heavily inspired by Steve Yegge's Beads that didn't really fit my workflow.
Tasks live as Markdown files with YAML frontmatter in a .bears/ directory — plain text, git-friendly, no database. Run bea from the terminal or expose the same functionality as an MCP server for AI coding agents.
Install
From crates.io
Pre-built binary
Download the latest release for your platform:
|
This detects your OS and architecture, downloads the right binary from GitHub Releases, and installs it to /usr/local/bin. Set BEA_INSTALL_DIR to change the install location. Falls back to cargo install if no pre-built binary is available.
From source
The binary is named bea.
Quick start
Task format
Each task is stored as .bears/{id}-{slug}.md:
id: a1b2
title: Implement OAuth flow
status: open
priority: P1
created: 2026-03-15T10:30:00Z
updated: 2026-03-15T10:30:00Z
tags: [backend, auth]
depends_on: [f4c9]
Any Markdown body goes here.
Statuses: open · in_progress · done · blocked · cancelled
Priorities: P0 (critical) · P1 · P2 · P3 (low) — sorted P0 first everywhere. A task inherits the highest priority of any task that depends on it, so a P3 task blocking a P0 task is effectively treated as P0.
Commands
bea init
Create the .bears/ directory and .bears.yml config in the current directory.
bea create
bea list
Hides done and cancelled tasks by default. Use --all / -a to show everything.
bea ready
Show tasks that are open and have all dependencies completed. This is the key command for agent workflows — always start here.
bea show
bea update
bea start / bea done
Shortcuts for the most common status transitions:
bea dep
Adding a dependency that would create a cycle is rejected with an error.
bea delete
Permanently delete a task file.
bea graph
Show the dependency graph as a tree. Hides done and cancelled tasks by default; use --all / -a to include them.
bea search
Matches against title, body, tags, and ID. Hides done and cancelled tasks by default.
bea edit
Open a task's .md file in your $EDITOR for direct editing. Falls back to $VISUAL, then vi. After the editor exits, the file is re-parsed and validated.
bea completions
Generate shell completions for bash, zsh, or fish.
Add to your shell config to enable completions:
# zsh — add to .zshrc
# bash — add to .bashrc
# fish — add to ~/.config/fish/config.fish
|
JSON output
Every command accepts --json for machine-readable output:
MCP server
bears can run as an MCP server, exposing all task operations as tools for AI coding agents.
Available MCP tools
| Tool | Description |
|---|---|
list_ready |
Tasks ready to work on (limit?, tag?) |
list_all_tasks |
All tasks with optional filters (status?, priority?, tag?) |
get_task |
Full task details (id) |
create_task |
Create a task (title, priority?, tags?, depends_on?, body?) |
update_task |
Update fields (id, status?, priority?, tags?, assignee?, body?) |
start_task |
Set status to in_progress (id) |
complete_task |
Set status to done (id) |
add_dependency |
Add a dependency, cycle-safe (id, depends_on) |
remove_dependency |
Remove a dependency (id, depends_on) |
delete_task |
Permanently delete a task (id) |
search_tasks |
Full-text search (query) |
get_graph |
Adjacency list of all dependencies |
Register with Claude Code
Add to your Claude Code MCP config (claude mcp add):
Development
All three of fmt, clippy, and test must pass cleanly before committing.
Project layout
src/
main.rs Entry point — dispatch to CLI or MCP server
cli.rs CLI commands (clap)
mcp.rs MCP server — JSON-RPC 2.0 over stdio
store.rs Read/write .tasks/ directory
task.rs Task struct, frontmatter parse/render, ID & slug
graph.rs Dependency graph, ready computation, cycle detection
error.rs Error types
.tasks/ Task files (created by `bea init`)