Pebble is a lightweight local issue tracker for people who want fast CLI workflows without giving up a usable UI.
It stores everything in append-only JSONL, works well in git repos, and keeps the whole system easy to inspect, script, and version.
Most issue trackers are great until you want something simpler:
- no hosted service
- no account setup
- no database to babysit
- no slow UI for everyday actions
- no hiding your data behind an API
Pebble gives you a local-first tracker that still feels like a real product, not just a pile of text files.
- local issue tracking with plain JSONL storage
- a fast CLI built for daily use
- a browser UI for browsing, editing, and visualizing work
- dependency tracking and ready queues
- parent/child issue structure for epics and tasks
- history that stays inspectable because events are append-only
Pebble requires Node 18+.
npm install -g @markmdev/pebbleAfter install, use the pb command.
Initialize a repo:
pb initCreate a few issues:
pb create "Set up auth flow" -t epic -p 1
pb create "Build login screen" --parent ISSUE-ID
pb create "Fix OAuth callback bug" -t bug -p 0See what is ready to work on:
pb ready --prettyOpen the UI:
pb uiPebble stores events in .pebble/issues.jsonl.
That means:
- issue history is append-only
- state can be rebuilt from the log
- the data format is easy to inspect and script
- there is no separate database layer to manage
Pebble also auto-discovers the nearest .pebble/ directory as you move around a repo. In git worktrees, --local forces the current worktree's local .pebble/ directory.
pb create— create tasks, bugs, or epicspb update— change title, description, priority, status, or parentpb claim— move work intoin_progresspb close— close completed workpb reopen— reopen closed work
pb ready— issues with no open blockerspb blocked— issues waiting on other workpb list— filtered issue listingpb summary— epic summary with child completion status
pb dep add— add a blockerpb dep remove— remove a blockerpb dep list— inspect dependenciespb dep tree— visualize blocker chains
pb comments add— leave notes on issuespb history— inspect recent activitypb search— search titles, descriptions, and comments
pb delete— soft delete issuespb restore— restore deleted issuespb merge— merge multiple issue logspb import— import from older Beads issue files
pb ui starts a local React app for people who want a visual layer on top of the CLI.
The UI includes:
- issue lists with filtering and sorting
- issue editing
- comments and history
- dependency graph views
- parent/child navigation
- real-time updates from CLI changes
Pebble is JSON-first by default, which makes it easy to script.
Use --pretty when you want human-readable terminal output:
pb list --pretty
pb ready --pretty
pb blocked --pretty- issues can be
open,in_progress,blocked, orclosed - issue types are
task,bug, andepic - ready issues are issues with no open blockers
- closing an epic is blocked if any child is still open
- dependency cycles are rejected
- partial IDs work, so you usually do not need to type the full identifier
# Show current work
pb list --pretty
# Claim a task
pb claim ISSUE-ID
# Add a blocker
pb dep add ISSUE-B ISSUE-A
# Show what is blocked and why
pb blocked --pretty
# Show issue details
pb show ISSUE-IDMIT