Git-native issue tracking for the age of agentic development.
Pearls is a fast, local-first issue tracker that lives in your repo, speaks in structured data, and behaves like a serious engineering tool. No cloud lock-in. No daemon circus. No mystery state.
This release adds recoverable atomic task updates and an embeddable Rust graph service. It also changes prl ready to show only unblocked Open tasks and makes the post-merge hook reject missing dependency endpoints. See the changelog for the full list.
Back up the complete .pearls directory before upgrading, and do not run older Pearls writers alongside v0.4.0. Repositories from v0.3.8 without transaction metadata are initialized automatically on the first v0.4.0 read; task files are preserved. If a repository reports schema version 1 transaction metadata, run prl init to upgrade it, or prl doctor --fix if its task data also needs repair. See the upgrade and rollback guide for recovery details.
Local-first: task records live with your code in.pearls/issues.jsonland.pearls/archive.jsonlAgent-ready: strict schema, dependency graph, finite-state transitionsGit-native: merge driver + hooks for real workflowsSingle binary:prlis all users need in their PATHSmall: example macOS release binary is ~10MB (Beadsbdis ~31MB on the same platform; sizes vary by target and build flags)Rust-fast: optimized for tight human and agent feedback loops
If markdown TODOs feel too fuzzy and SaaS trackers feel too heavy, Pearls is the middle path that actually scales.
Fastest install:
cargo install --git https://github.com/mrorigo/pearls pearls-cliInstall from local checkout:
cargo install --path /path/to/pearls/crates/pearls-cliEnsure prl is on PATH so Git hooks and merge drivers can invoke it.
git init
prl init
prl create "Ship launch page" --priority 1 --label marketing,web
prl create "Wire merge driver docs" --priority 2 --label docs
prl list --status open --sort updated_at
prl readyRun the MCP stdio server for agent clients:
prl mcp --repo .prl init: initialize.pearls, hooks, and Git merge integrationprl create,prl update,prl close: lifecycle operationsprl list,prl show,prl ready: discovery and execution flowprl mcp: MCP stdio server for agent toolingprl link,prl unlink: dependency managementprl comments: add, list, and delete issue commentsprl meta: structured per-issue metadataprl doctor: integrity checks and optional repairsprl compact: archive old closed issuesprl sync: Git sync workflow helperprl hooks: run hook actions directlyprl merge: merge-driver entrypoint for JSONL conflicts
- User guide:
docs/USER-GUIDE.md - Embedded Rust API: Graph service
- Whitepaper:
docs/WHITEPAPER.md - Deep architecture:
docs/PEARLS.md - End-to-end sample:
examples/WORKFLOW.md
There is an agent skill defined for using the CLI, see skills/pearls-cli.
Do not give your agent both the CLI skill and the MCP server, or the agent might get confused!
This workspace ships six crates:
crates/pearls-core: models, storage, graph, FSM, identitycrates/pearls-cli:prlcommand-line applicationcrates/pearls-app: shared application servicescrates/pearls-mcp: MCP stdio server implementationcrates/pearls-merge: semantic JSONL merge enginecrates/pearls-hooks: pre-commit and post-merge validations
cargo check
cargo fmt
cargo clippy -- -D warnings
cargo testPearls follows the Microsoft Pragmatic Rust Guidelines. See AGENTS.md for repository-specific coding standards.
MIT
