██████╗ ██████╗ ██╗ ██╗
██╔═══██╗██╔══██╗██║ ██║
██║ ██║██████╔╝██║ ██║
██║ ██║██╔══██╗██║ ██║
╚██████╔╝██║ ██║╚██████╔╝
╚═════╝ ╚═╝ ╚═╝ ╚═════╝
Personal task manager for the terminal. Designed to be operated by your AI agent.
SQLite database on your machine. No accounts. No cloud. Pass --json to any command for machine-readable output.
curl -fsSL https://oru.sh/install.sh | bashRequires Node 22+.
Or install via npm:
npm install -g @tchayen/oruoru add "Write README for release"
oru add "Fix login bug" -p high -d friday -l backend
oru add "Water plants" -r "every 3 days" -d today
oru list
oru context # what needs your attention right now
oru done <id> # recurring tasks auto-spawn the next occurrence| Command | Description |
|---|---|
add <title> |
Add a new task |
list |
List tasks (hides done by default) |
get <id> |
Get a task by ID |
update <id> |
Update a task |
edit <id> |
Open task in $EDITOR |
done <id...> |
Mark tasks as done |
start <id...> |
Mark tasks as in_progress |
review <id...> |
Mark tasks as in_review |
delete <id...> |
Delete tasks |
context |
Summary of overdue, due soon, in progress, and actionable tasks |
labels |
List all labels in use |
log <id> |
Show change history of a task |
filter add <name> |
Save a named filter (same flags as list) |
filter list |
List saved filters |
filter show <name> |
Show a filter's definition |
filter remove |
Delete a saved filter |
sync <path> |
Sync with a filesystem remote |
backup [path] |
Create a database backup snapshot |
config init |
Create a default config file |
completions |
Generate shell completions (bash, zsh, fish) |
self-update |
Update oru to the latest version |
oru is built to be operated by AI agents. Pass --json to any command for structured output. Pass --id to add for idempotent task creation. Attach --meta key=value pairs for agent-specific data.
# Agent creates a task with a known ID (idempotent)
oru add "Refactor auth module" --id A1b2C3d4E5f \
-p high -l backend --meta agent=claude --json
# Agent reads what needs attention
oru context --json
# Agent updates a task (prefix match on IDs)
oru update A1b -s in_progress --meta pr=142 --json
# Create a recurring task (auto-spawns next occurrence when done)
oru add "Weekly standup" -r "every monday" -d "next monday" --jsonSet ORU_FORMAT=json or output_format = "json" in config to default to JSON output.
oru ships with an MCP server so AI agents can manage tasks through the standardized protocol.
Add to your MCP config:
{
"mcpServers": {
"oru": {
"command": "npx",
"args": ["-p", "@tchayen/oru@latest", "oru-mcp"]
}
}
}Or if oru is installed globally (npm install -g @tchayen/oru):
{
"mcpServers": {
"oru": {
"command": "oru-mcp"
}
}
}| Tool | Description |
|---|---|
add_task |
Create a new task |
update_task |
Update fields on an existing task |
delete_task |
Delete a task by ID |
list_tasks |
List tasks with optional filters |
get_task |
Get a single task by ID |
get_context |
Summary of what needs attention |
add_note |
Append a note to a task |
list_labels |
List all labels in use |
oru config init # creates ~/.oru/config.toml with documented optionsKey options:
date_format-"mdy"(US) or"dmy"(international)first_day_of_week-"monday"or"sunday"output_format-"text"or"json"backup_path- directory for automatic backupsbackup_interval- minutes between auto-backups (default: 60)
oru syncs between machines via a shared filesystem (Dropbox, iCloud Drive, NAS, etc.):
oru sync ~/Dropbox/oru-syncConflict resolution is automatic: last-write-wins per field, updates beat deletes, notes append with dedup. The oplog is the source of truth.
Everything is stored locally in ~/.oru/oru.db (SQLite). Override with ORU_DB_PATH.