3.5 KiB
nbd
A CLI tool for managing work tickets, primarily targeted at agent workflows.
Tickets are stored as JSON files in .nbd/tickets/ inside the nearest ancestor
directory that contains a .nbd/ folder, discovered by traversing upward from
the current working directory — just like git finds .git/.
How it works
Each ticket is a JSON file named {id}.json, where id is a unique
6-character lowercase hex string (e.g. a3f9c2). Tickets carry:
| Field | Type | Default |
|---|---|---|
id |
6-char hex string | auto-generated |
title |
string | (required) |
body |
string | "" |
priority |
integer 0–10 | 5 |
status |
todo | in_progress | done |
todo |
ticket_type |
project | feature | task | bug |
task |
dependencies |
list of ticket IDs | [] |
All commands accept --json for machine-readable output.
Usage
Initialise
Create the ticket store in your project root:
nbd init
Analogous to git init — safe to run multiple times.
Create a ticket
nbd create --title "Fix login bug" --priority 8 --type bug
nbd create --title "Add rate limiting" --body "Protect public endpoints" --deps a3f9c2
Read a ticket
nbd read a3f9c2
nbd read a3f9c2 --json
List all tickets
By default, done tickets are excluded.
nbd list # todo + in_progress only (done excluded)
nbd list --filter status=* # all tickets including done
nbd list --filter status=done # only completed tickets
nbd list --filter type=bug # non-done bug tickets
nbd list --json
Update a ticket
Only the flags you supply are changed; all other fields retain their current values.
nbd update a3f9c2 --status in_progress
nbd update a3f9c2 --priority 9 --type bug
Find the next ticket to work on
Returns the single highest-priority ticket that is ready to work on — not done and with all dependencies completed:
nbd next
nbd next --json
nbd next --filter type=bug # highest-priority ready bug
nbd next --filter priority=9 # highest-priority ready ticket at priority 9
Exits 0 even when no ready ticket exists ({"next": null} in JSON mode).
Find all actionable tickets
List all tickets that are ready to work on — not done and with all dependencies completed:
nbd ready
nbd ready --json
Migrate ticket files
Re-serialise all ticket files through the current schema. Use this after
upgrading nbd to remove stale fields, add new fields with defaults, and
normalise formatting.
nbd migrate
nbd migrate --dry-run # preview changes without writing
nbd migrate --json # machine-readable summary
Running
# From the nbd/ directory
cargo run -- init
cargo run -- create --title "Test ticket" --priority 7 --type bug
cargo run -- list
cargo run -- ready
cargo run -- read <id>
cargo run -- update <id> --status in_progress
cargo run -- list --json
Testing
cargo test
Unit tests live in src/tests.rs. Integration tests (full command flows against
a temporary directory) live in tests/integration.rs.
Development
Run these commands in order before committing:
cargo fmt
cargo check
cargo clippy
cargo test
License
Dual-licensed under Apache License, Version 2.0 and
MIT License, consistent with the rest of the vibed mono-repo.
This software was written with Claude Code using the claude-sonnet-4-6 model.