| Crates.io | rusty-beads |
| lib.rs | rusty-beads |
| version | 0.1.0 |
| created_at | 2026-01-14 05:03:20.484302+00 |
| updated_at | 2026-01-14 05:03:20.484302+00 |
| description | Git-backed graph issue tracker for AI coding agents - a Rust implementation with context store, dependency tracking, and semantic compaction |
| homepage | https://github.com/siddharth-ghatti/rusty-beads |
| repository | https://github.com/siddharth-ghatti/rusty-beads |
| max_upload_size | |
| id | 2042214 |
| size | 306,139 |
A Git-backed graph issue tracker for AI coding agents, written in Rust.
Rusty Beads is a Rust implementation of steveyegge/beads, providing a powerful issue tracking system designed specifically for AI coding agents with features like dependency graphs, semantic compaction, and a context store for caching file summaries, symbol indexes, and project metadata.
bd-xxxx formatcargo install rusty-beads
Add to your Cargo.toml:
[dependencies]
rusty-beads = "0.1"
# Initialize a new beads repository
bd init
# Create issues
bd create -t "Implement user authentication"
bd create -t "Add login endpoint" --parent bd-a1b2
# View ready (unblocked) work
bd ready
# Add dependencies
bd dep add bd-c3d4 bd-a1b2 # bd-c3d4 is blocked by bd-a1b2
# List issues
bd list
bd list --status open --assignee alice
# Update and close issues
bd update bd-a1b2 --status in_progress
bd close bd-a1b2 --reason "Completed"
# Use the context store
bd context set "file:src/main.rs" '{"summary": "Application entry point"}'
bd context get "file:src/main.rs"
bd context list --namespace file
use rusty_beads::{SqliteStorage, Storage, Issue, generate_id};
use anyhow::Result;
fn main() -> Result<()> {
// Open or create a database
let storage = SqliteStorage::open(".beads/beads.db")?;
// Create an issue
let id = generate_id("bd");
let issue = Issue::new(&id, "Implement new feature", "developer");
storage.create_issue(&issue)?;
// Get ready work (unblocked issues)
let ready = storage.get_ready_work()?;
for issue in ready {
println!("{}: {}", issue.id, issue.title);
}
Ok(())
}
The context store helps AI agents cache and retrieve contextual information with automatic git-aware invalidation:
use rusty_beads::{ContextStore, ContextEntry, FileContext};
use serde_json::json;
use anyhow::Result;
fn main() -> Result<()> {
let store = ContextStore::open(".beads/context.db")?;
// Store file context
let file_ctx = FileContext {
path: "src/main.rs".to_string(),
summary: Some("Application entry point".to_string()),
language: Some("rust".to_string()),
..Default::default()
};
store.set_file_context("src/main.rs", &file_ctx)?;
// Store arbitrary data with TTL
let entry = ContextEntry::new("custom:cache-key", json!({"data": "value"}))
.with_ttl(3600); // Expires in 1 hour
store.set(entry)?;
// Retrieve with automatic invalidation checking
if let Some(ctx) = store.get_file_context("src/main.rs")? {
println!("Summary: {:?}", ctx.summary);
}
Ok(())
}
rusty-beads/
├── src/
│ ├── lib.rs # Public API and documentation
│ ├── main.rs # CLI entry point
│ ├── types/ # Core data types (Issue, Status, Dependency, etc.)
│ ├── storage/ # SQLite backend + JSONL import/export
│ ├── context/ # Context store with git-aware invalidation
│ ├── idgen/ # Hash-based ID generation (bd-xxxx)
│ ├── compact/ # Semantic compaction (3 levels)
│ ├── daemon/ # Background RPC server
│ ├── git/ # Git integration utilities
│ └── cli/ # Command-line interface
| Command | Description |
|---|---|
bd init |
Initialize a new .beads directory |
bd create |
Create a new issue |
bd show <id> |
Show issue details |
bd list |
List issues with filters |
bd ready |
Show unblocked issues ready for work |
bd update <id> |
Update an issue |
bd close <id> |
Close an issue |
bd delete <id> |
Soft-delete (tombstone) an issue |
bd dep add/remove/list |
Manage dependencies |
bd label add/remove/list |
Manage labels |
bd stats |
Show repository statistics |
bd compact |
Run semantic compaction |
bd daemon start/stop/status |
Manage background daemon |
bd config |
Manage configuration |
bd context get/set/list/clear |
Manage context store |
The context store organizes data into namespaces:
| Namespace | Prefix | Description |
|---|---|---|
| File | file: |
File-level context (summaries, AST, symbols) |
| Symbol | symbol: |
Symbol definitions (functions, classes, types) |
| Project | project: |
Project-level context (architecture, patterns) |
| Session | session: |
Session context (recent decisions, working files) |
| Agent | agent: |
Agent-specific context (preferences, learned patterns) |
| Custom | custom: |
User-defined context |
The context store automatically invalidates cached entries when:
Rusty Beads supports various issue types for different use cases:
bug, feature, task, epic, chore - Standard issue typesmolecule, gate, agent, role, rig - AI agent-specific typesconvoy, event, merge_request, slot - Advanced workflow typesModel complex relationships between issues:
blocks - Issue A blocks issue Bparent_child - Hierarchical relationshiprelates_to - General relationshipduplicates - Duplicate issuessupersedes - Replacement relationship# Build
cargo build
# Run tests
cargo test
# Generate documentation
cargo doc --open
# Run with debug logging
RUST_LOG=debug cargo run -- list
This project is a Rust implementation inspired by steveyegge/beads, the original Go implementation.
MIT License - see LICENSE for details.