beans
beans - Flat-File Issue Tracker
A lightweight, flat-file issue tracker for humans and AI coding agents. Stores issues as markdown files in .beans/ directory alongside your code.
IMPORTANT: before you do anything else, run the beans prime command and heed its output, but also heed the exceptions at "When to create beans".
Why beans?
- Simple — No database, no server, just markdown files
- AI-friendly — Designed for AI coding agents
- Git-friendly — Lives alongside your code in
.beans/ - Portable — Works with any editor/IDE
Installation
# Via Homebrew
brew install hmans/beans/beans
# Via Go
go install github.com/hmans/beans@latest
Setup
# Initialize beans in a project
beans init
# Verify setup and integrity
beans check
Core Commands
Create Beans
beans create "Implement user login"
# Creates new bean with auto-generated ID
beans create "Fix auth bug" --tag bug --tag urgent --type bug
# Creates bean with tags and type
beans create "Refactor API" --priority high --status todo
# Creates bean with priority and status
beans create "Add onboarding flow" --body "Scope: screens + copy"
# Adds body content
List Beans
beans list # List all beans
beans list --tag urgent # Filter by tag
beans list --status todo # Filter by status
beans list --type feature # Filter by type
beans list --search "login" # Full-text search (Bleve query syntax)
Update Beans
beans update <id> --status in-progress
beans update <id> --title "New title"
beans update <id> --tag bug --remove-tag urgent
beans update <id> --priority high --type feature
beans update <id> --body "Updated scope notes"
Show Bean Details
beans show <id> # Show full bean details
beans show <id> --body-only # Only body content
beans show <id> --raw # Raw markdown (no styling)
Delete and Archive
beans delete <id> # Delete bean (prompts unless --force)
beans archive # Delete completed/scrapped beans
Integrity and TUI
beans check # Validate config and bean graph
beans check --fix # Auto-fix broken links/self-references
beans tui # Interactive terminal UI
Roadmap and GraphQL
beans roadmap # Markdown roadmap from milestones/epics
beans graphql '{ beans { id title status } }'
beans prime
The beans prime command outputs project context for AI agents:
beans prime
# Outputs current beans, tags, and status for AI context
Integration with OpenCode
Copy this plugin to your OpenCode config:
// ~/.opencode/plugin/beans-prime.ts
import type { Plugin } from "@opencode-ai/plugin";
export const BeansPrimePlugin: Plugin = async ({ $, directory }) => {
let prime = undefined;
try {
const hasBeans = await $`which beans`.quiet();
const hasConfig = await $`test -f ${directory}/.beans.yml`.quiet();
if (hasBeans.exitCode === 0 && hasConfig.exitCode === 0) {
const result = await $`beans prime`.cwd(directory).quiet();
prime = result.stdout.toString();
}
} catch (e) {
// Silently skip if beans not available
}
return {
"experimental.chat.system.transform": async (_, output) => {
if (prime) output.system.push(prime);
},
"experimental.session.compacting": async (_, output) => {
if (prime) output.context.push(prime);
},
};
};
export default BeansPrimePlugin;
Integration with Codex
Set environment or add to AGENTS.md:
# In your repo's AGENTS.md:
IMPORTANT: before you do anything else, run `beans prime` and heed its output.
Integration with Claude Code
Add to Claude Code's system prompt or context:
# Run before coding session
beans prime >> ~/.claude/context/beans.txt
When to create beans
Create beans when:
- the user requests a new feature which has no bean yet
- the user requests refactorings, bugfixes or other changes which do not have beans
- the user makes big changes to the repo structure
IMPORTANT: ALWAYS commit a newly created bean immediately after creation. Do not wait until other work is done — the bean file itself should be committed in its own atomic commit right away (e.g. git add .beans/<bean-file> && git commit -m "beans: create <bean-title>").
Exceptions for not creating beans:
- committing things via git
- changing rules in AGENTS.md
Workflow Example
# 1. Start work on a feature
beans create "Add dark mode support" --tag ui --type feature
# 2. Work on it, update progress
beans update <bean-id> --status in-progress --body "Started working on color scheme"
# 3. Complete the feature
beans update <bean-id> --status completed
beans update <bean-id> --body "Dark mode implemented for all views"
Bean File Format
Beans are stored in .beans/ as markdown:
---
id: 12345678
title: "Implement user login"
status: todo
tags: [feature, auth]
priority: high
created: 2024-01-15T10:00:00Z
updated: 2024-01-15T14:30:00Z
---
## Description
Implement user login with email and password.
## Notes
- Use existing auth infrastructure
- Follow security best practices
Configuration
Create .beans.yml in your project root:
# .beans.yml
directory: .beans
format: markdown
templates:
default: |
---
id: {{.ID}}
title: "{{.Title}}"
status: open
created: {{.Created}}
---
{{.Description}}
Tips
- Commit
.beans.yml— Share config with team - Ignore
.beans/*.md— Keep beans local or commit based on preference - Use tags consistently — Create tag taxonomy early
- Run
beans prime— Before starting AI-assisted work
Related Skills
- nb — Notebook management for ideas and references
- github-pr — PR workflow integration
- prd — Product Requirements Documents
Links
- GitHub: https://github.com/hmans/beans
- Documentation: https://github.com/hmans/beans#readme