CLI Commands

Every command supports --help (or -h) for usage details.

dodo init

Initialize a .dodo/ directory in the current project.

dodo init

Most commands auto-initialize if .dodo/ doesn't exist, so this is optional.

dodo add <title>

Create a new task. Also available as dodo create.

dodo add "Fix login bug"
dodo add "Setup database" -d "Configure PostgreSQL" -t "setup,backend"
dodo add "Write tests" --parent abc12345 --blocked-by xyz99999
FlagShortDescription
--description <text>-dTask description (supports \n for newlines)
--parent <id>-pParent task ID
--tags <tag1,tag2>-tComma-separated tags
--blocked-by <id1,id2>-bComma-separated blocker task IDs

When blockers are specified, the task starts with blocked status.

dodo list

List tasks in a tree view. Also available as dodo ls.

dodo list
dodo list --status open --tag important
dodo list --all
FlagShortDescription
--status <status>-sFilter by status (open, in-progress, blocked, done)
--tag <tag>-tFilter by tag
--parent <id>-pFilter by parent task
--all-aInclude done tasks

Done tasks are hidden by default.

dodo show <id>

Display detailed information about a task.

dodo show abc12345
dodo show abc12345 --prompt | pbcopy
FlagDescription
--promptRender the task using the prompt template

The --prompt flag outputs the task formatted as an agent-ready prompt. Pipe it to pbcopy or redirect it to a file.

dodo update <id>

Update task properties. Also available as dodo edit.

dodo update abc12345 --title "New title"
dodo update abc12345 --status in-progress
dodo update abc12345 --add-tag urgent --remove-tag backlog
dodo update abc12345 --add-blocker xyz99999
dodo update abc12345 --parent def67890   # set parent
dodo update abc12345 --parent ""          # remove parent
FlagShortDescription
--title <text>New title
--description <text>-dNew description
--status <status>-sSet status
--parent <id>-pSet or remove ("") parent
--add-tag <tag>Add a tag
--remove-tag <tag>Remove a tag
--add-blocker <id>Add a blocking dependency
--remove-blocker <id>Remove a blocking dependency

dodo complete <id>

Mark a task as done. Also available as dodo done.

dodo complete abc12345

When a task is completed, any tasks that were blocked by it have their status automatically re-evaluated. If all their blockers are now done, they move from blocked to open.

dodo delete <id>

Delete a task and clean up all references. Also available as dodo rm.

dodo delete abc12345

This removes the task and cleans up parent/child links and blocking dependencies across all related tasks.

dodo query <text>

Fuzzy search across task titles, descriptions, and tags. Also available as dodo search.

dodo query "login"
dodo query "db" --status open --limit 10
dodo query "setup" --all
FlagShortDescription
--status <status>-sFilter by status
--all-aInclude done tasks
--limit <count>-nMax results (default: 20)

Results are ranked by relevance. Title matches are boosted 3x and tag matches 2x over description matches.

dodo api [method] <path>

Call REST API endpoints directly without starting a server.

dodo api tasks                                  # GET /api/tasks
dodo api get tasks                              # explicit GET
dodo api post tasks -d '{"title": "My task"}'   # create a task
dodo api patch tasks/abc123 -d '{"status": "done"}'
dodo api delete tasks/abc123
dodo api prompt-template                        # get the prompt template
FlagShortDescription
--body <json>-dRequest body (JSON string)

The method defaults to GET if not specified. See the REST API reference for all available endpoints.

dodo serve

Start the web UI server.

dodo serve
dodo serve --port 8080
FlagShortDescription
--port <port>-pPort number (default: 3456)

Task Statuses

StatusDescription
openDefault status for new tasks
in-progressCurrently being worked on
blockedHas incomplete blocking dependencies
doneCompleted

Environment Variables

VariableDescription
NO_COLORSet to disable terminal colors