For agents: an index of these docs is at /docs/llms.txt, and this page as markdown is at /docs/cli.md.
CLI reference
Every dobby command and what it does.
Run dobby help for the short list and dobby help --all for everything below. dobby <command> --help prints that command's line and never runs it.
Getting started
| Command | What it does |
|---|---|
init [--ui] [--projects a,b] |
set up Dobby on this machine, with no name: checks, sign-ins, your repos, settings, background jobs (asks first); --ui does it in your browser |
add <project> "<title>" ["<done when>"] [S|M|L] [priority] |
write a ticket |
status |
the plan limits line, then what is building, shipped today and stuck |
limits |
how much of the 5-hour and weekly plan is used, and when paused work resumes |
list [--all] |
open tickets by stage (Building, Ready, Waiting, Failed), 10 per stage; --all = every open ticket (adds backlog), old format; shipped and declined are left out |
docs [topic] |
the manual: list the pages, or print one (works offline) |
--version |
print the version (the jobs run it once at install to prove node and the path work) |
doctor [--json] |
checks tools, sign-ins, background jobs and the pipeline (exit 1 on any failure) |
uninstall [--dry] |
stop and remove the background jobs; your data, config and secrets stay |
Everyday
| Command | What it does |
|---|---|
cancel <id> |
stop the ticket: kill its build, remove its worktree, close its own PR and branch, mark it declined |
pause | resume |
stop / allow builders claiming new tickets (running ones finish their step, nothing is killed) |
queue <id> |
move a backlog ticket to ready |
run <id> |
build this ticket now, in this process (no worker cap, budget gate or tick lock) |
show <id> |
every step the ticket's graph took, with tokens and cost |
cost <id> |
what the ticket's PR cost, by stage (the same table Dobby posts on the PR) |
receipt [days] |
"Shipped N PRs on your plan, $0 extra" for the last 7 days, and the card at /receipt.svg |
approve <id> | decline <id> |
answer a ticket waiting for you (decline on any other ticket = cancel) |
merge <id> |
merge a waiting ticket's PR now (a ticket at its gate is approved) |
deploy <project> |
the Deploy tap from the terminal (a migration that changes data still waits for its own tap) |
answer <id> <words> |
answer a ticket's question: your words join its done rule and it is queued again |
hint <id> <words> |
add a hint for the ticket's next build |
retry <id> |
a ticket stuck in fixing starts over (its PR is closed); a failed one is queued again |
takeover <id> |
pause one ticket and leave its branch to you |
allowround <id> |
one more automatic fix round on the ticket's PR |
unqueue <id> |
a queued ticket goes back to the backlog |
reorder <id> [before] |
move a queued ticket above another (or last) |
applyfinding <id> |
a fix ticket on the PR's branch for one review finding |
dismissfinding <id> |
a review finding is intentional (later reviews leave it out) |
findingrule <id> [words] |
a review finding becomes a rule for the repo |
ideaticket <id> |
an idea becomes a ticket and is queued |
ideadrop <id> |
drop an idea |
dashboard [--port 4710] [--host 127.0.0.1] |
local web dashboard (auto-refresh); makes DASHBOARD_TOKEN in secrets.env on first start |
add discord|dashboard|jobs |
switch on an add-on: Discord buttons, the local dashboard job, or all six background jobs |
add skill [--yes] |
copy the dobby-setup skill into ~/.claude/skills (asks first), for fixing a setup problem in your own Claude Code |
mcp |
the MCP server on stdio, so Claude can read status and file tickets; asks you before it merges, deploys or cancels. dobby add mcp [--yes] connects it to Claude Code; --http prints the command for the dashboard's /mcp instead |
jobs install|uninstall|status [--dry] |
the six background jobs (launchd on macOS, systemd --user on Linux) |
config [show|path] |
the merged config (secrets redacted) / where the private config file lives |
stats [on|off [crashes|usage]] |
opt-in crash reports and usage stats: status, or turn them on or off (both are off until you say yes) |
config set <key> <value> |
change one setting in your private config, checked against the schema (config unset |
start |
run Dobby in this terminal: the Discord listener and the queue loop (Ctrl-C stops it) |
More commands
| Command | What it does |
|---|---|
goals [app] | goals import <app> |
the goals in rank order; import turns the project file's goals into GitHub milestones |
stats show|log|reset-id|report [--days 30] |
usage stats: the next payload exactly as it would be sent / every payload sent so far / a new random install id / the report from your own Worker (needs DOBBY_STATS_REPORT_TOKEN) |
tick |
one scheduler step: run the top ticket if the budget allows (the background job calls this) |
pause [all|builders|reviews|merges|deploys|planning|scout|notify|project <name>|ticket <id>] [for 30m|2h|1d] |
one pause system with levels; resume takes the same target; all also kills the running builds; "for" auto-resumes |
pause status |
what is paused, since when, until when |
graph |
the ticket graph as a Mermaid diagram |
idea <project> "<idea>" |
drop a seed idea for the Product Manager |
ideas [project] |
idea cards, best first |
pm <project> [--area] |
Product Manager now: ranked problems by goal, PRDs for L, idea cards (--area: today's Area PM) |
dedupe <project> |
merge tickets and ideas that are the same work (Haiku); run after onboard |
tools [on|off <name>] |
agent tools (graphify, rtk, caveman, ponytail, jev): on/off, found or not, install command; on/off edits your config |
company |
distil your global Claude memory into company.md (work rules only) |
init <project> |
add one repo by name or path, without the machine setup: draft its dobby.md, then onboard it and ask which of the first backlog tickets to queue (also runs by itself before a project's first ticket; with --yes or no terminal nothing is queued) |
onboard <project> |
read all the project's docs and skills into Dobby (rules draft, backlog tickets, ideas, knowledge map) |
lead [project] [--dry] |
the Lead plans: promotes up to 3 backlog tickets, writes up to 3 new ones (all active projects if none given) |
cos [--dry] |
the Chief of Staff's morning summary (Discord #daily-update), plus Approve/Decline for waiting tickets |
brief [YYYY-MM-DD] [--dry] |
print a day's sent summary (/briefs/ |
ask <message> |
talk to the front desk from the terminal ("status" answers at once, no AI) |
listen |
always-on Discord listener (the listener background job); also runs the telemetry receiver |
telemetry-serve [port] |
only the Claude Code telemetry receiver (127.0.0.1, default 4711 or DOBBY_OTEL_PORT), for testing |
service install|uninstall [--dry] |
run start as a background service (launchd on macOS, systemd --user on Linux); refuses while the tick/listener background jobs exist |
discord invite|setup|test |
the bot invite link; create channels + webhooks (idempotent); one hello per channel |
review <owner/repo> <pr> [--full] |
the Reviewer on one PR by hand (a draft too): PR comment + "Claude Review" status; --full = the whole PR |
review-scan [--dry] |
review new heads of open PRs on the repos that matter (the listener runs this every 15 min; the tick job does when Discord is off) |
usage [days] |
Claude usage report: API-$ by model, cache hit, $ per 1% of each limit (reads this computer's ~/.claude logs, whatever DOBBY_DIR is) |
scoreboard [days] |
PRs opened, needed changes, merged (default 7 days) |
usage-log |
usage reading stored every 10 min by the listener: 5h %, weekly %, API-$ by model and token kind |
capacity |
how full the 5-hour windows got this week, and what to change |
touch <ticket|-> <decision|broke|unclear|permission> [note] |
log a fix you made by hand (counted in the autonomy line) |
api [on|off|status] |
Max plan API credits for text-only jobs |
health |
the hourly self-check |
graphify |
refresh every project's code graph (daily 05:30) |
scout |
Talent Scout now (normally once a night) |
safety explain "<ticket text>"|<pr> |
categories, rule, action and why from the safety config |
policy explain "<text or path>" |
which of your rules match, per kind, and which one wins |
migrate [--dry-run] |
move an older setup into the new config (never overwrites) |
providers [detect|models|explain] |
read-only: agent CLIs, API key env var NAMES and local servers found; live model lists; planned routing per role |
role show|save|reset <name> [text] |
read a role (your edit, else the built-in), save your edit into the config folder (text as an argument, or on stdin; without a --- block at the top it keeps the role's model line), or reset puts the built-in back |
dashboard link [--host <name>] [--port 4710] |
print the sign-in link for another device (a tunnel or Tailscale name with --host); no QR code |
dashboard --tunnel [--port 4710] |
for a phone behind an HTTPS tunnel: every request needs the token. Port 4710 is the job's, so use --port 4711 beside it |
dashboard open [--port 4710] |
open the running dashboard in your browser, signed in (the token goes in an HttpOnly cookie; this command does not print it) |