Task tracking for AI-assisted development.
Pebbles is a command-line bug/task tracker designed to integrate with opencode and both Git and Jujutsu version control. It manages work items through their lifecycle while automatically handling workspaces.
git clone https://github.com/drusellers/pebbles
cd pebbles
cargo build --release
# Binary is at target/release/pebbles# Initialize pebbles in your project
pebbles init
# Create a new change
pebbles new "Fix login validation"
# View all changes
pebbles list
# Show change details
pebbles show <id>
# Start working (auto-runs /implement)
pebbles start <id>
# Or create an isolated workspace
pebbles start <id> --isolate
# Open TUI without auto-running /implement
pebbles start <id> --wait
# Create changes from text file (intake)
pebbles intake features.txt
# Plan and break down a change into actionable steps
pebbles plan <id>
# Delete a change
pebbles delete <id>
# When done, mark complete
pebbles done <id>Pebbles follows a simple status flow:
Draft → Approved → InProgress → Review → Done
↓ ↓
Blocked (reject back to InProgress)
↓
Paused
- Draft: New changes start here. Use for ideas and rough specs.
- Approved: Change is ready to be worked on. (
pebbles approve <id>) - InProgress: Work has started with
pebbles start <id>:- Default: Works in current directory, auto-runs
/implement --isolate: Creates an isolated workspace (recommended for large changes)--wait: Opens opencode TUI without auto-running/implement
- Default: Works in current directory, auto-runs
- Done: Work is complete. (
pebbles done <id>)
| Command | Description |
|---|---|
doctor |
Check for required dependencies (jj, git, EDITOR, opencode) |
init |
Initialize a new pebbles repository |
new |
Create a new change |
list |
List all changes (use --all to include done) |
show |
Show details of a change |
update |
Update a change's title, body, or priority |
approve |
Mark a change as approved for work |
start |
Start working on a change (alias: work) |
done |
Mark a change as done |
log |
Show event history for a change |
cleanup |
Clean up a workspace after work is complete |
intake |
Intake text from file or STDIN to create changes |
completions |
Generate shell completions |
current |
Show the current change (when in a workspace) |
status |
Show workspace status including change details |
edit |
Edit a change in your editor |
delete |
Delete a change (aliases: rm, del) |
block |
Add a blocking dependency to a change |
unblock |
Remove a blocking dependency from a change |
plan |
Plan and break down a change into actionable steps |
Create .pebbles/config.toml to customize behavior:
[work]
skip_permissions = true # Skip opencode permission prompts
auto_implement = true # Auto-run implement command
[vcs]
prefer = "auto" # auto, git, jujutsu
[editor]
# Uses $EDITOR environment variable by default
# command = "vim"EDITOR- Editor to use when editing changes (overrides config)PEBBLES_CHANGE- Set when running from a workspacePEBBLES_VCS- The detected version control system
Changes are stored in .pebbles/db.json as a human-readable JSON database.
When you run pebbles start <id>, it:
- Creates a workspace (
ws-<id>/) if--isolateis specified - Sets
PEBBLES_CHANGE=<id>environment variable - Launches opencode with the change context
- Auto-runs
/implement(unless--waitis specified)
The .opencode/commands/ directory contains:
implement.md- Guide for AI implementationdescribe.md- Commit message generator
The intake command allows you to create multiple related changes from a single text input. This is useful for importing feature requests, bug reports, or planning documents.
# Read from a file
pebbles intake features.txt
# Read from STDIN
cat features.txt | pebbles intakeThe text is passed to opencode, which will:
- Parse the content to identify a parent/top-level issue
- Identify all child/sub-tasks
- Create the parent change
- Create all child changes linked to the parent
This creates a hierarchical structure of related work items.
Use the block command to mark one change as dependent on another:
# Mark change-456 as blocked by change-123
pebbles block change-456 change-123Use unblock to remove a dependency:
pebbles unblock change-456 change-123The plan command uses AI to break down a change into actionable steps:
# Plan the current change or specify an ID
pebbles plan
pebbles plan <id>
# Open in TUI without auto-running /plan
pebbles plan --waitThis creates a detailed implementation plan as a child change.
When working inside a workspace:
# Show the current change
pebbles current
# Show workspace status
pebbles status
# Edit the current change in your editor
pebbles edit# Filter by status
pebbles list --status inprogress
# Filter by priority
pebbles list --priority high
# Filter by changelog type
pebbles list --changelog feature
# Sort by different fields
pebbles list --sort priority
pebbles list --sort created --reverse
# Flat list instead of tree view
pebbles list --flat# Skip permission prompts
pebbles start <id> --skip-permissions
# Verbose output
pebbles start <id> --verbose# Verify all acceptance criteria are checked
pebbles done <id> --auto
# Force mark done even if criteria not met
pebbles done <id> --forceMIT