your tasks, managed by your agent

Local-first CLI for personal tasks. No accounts. No cloud.

macOS Linux
$ curl -fsSL https://oru.sh/install.sh | bash

Your agent already knows how to use it.

Human-readable tables when you run it. Machine-readable JSON when your agent does. Every command is non-interactive – no prompts, no confirmations, deterministic exit codes. No browser, API token, or special handling needed.

Human-friendly
oru list
$ oru list ID TITLE PRI OWNER DUE LABELS META [ ] zJ9rEsJt5xK Refactor auth middleware high 2026-02-20 [~] fP9sW3yU6rJ Write migration tests medium [ ] gQ0tX4zV7sK Update API docs low
Agent-friendly
oru list --json
$ oru list --json [ { "id": "zJ9rEsJt5xK", "title": "Refactor auth...", "status": "todo", "priority": "high" } ]

One command. Full picture.

oru context shows overdue items, today's priorities, and what is coming up. Your agent runs it and reasons about your schedule, or you run it yourself. In milliseconds.

~/.oru
$ oru context 2 overdue, 1 due soon, 1 in progress, 2 actionable Overdue (2) [ ] fP9sW3yU6rJ Write migration tests high 2026-02-14 [ ] gQ0tX4zV7sK Review PR feedback medium 2026-02-15 Due Soon (1) [ ] zJ9rEsJt5xK Refactor auth middleware high 2026-02-21 In Progress (1) [~] nP4qS7vB2hR Update API docs medium Actionable (2) [ ] mL8tX3wC9gN Set up error tracking low 2026-02-25 [ ] kH6mW1pD4jQ Draft blog post low 2026-02-28

Your data stays on your machine.

oru stores everything in a single SQLite database at ~/.oru/oru.db. No accounts. No cloud. No third-party servers between you and your tasks. Your task data is yours – readable, portable, queryable with any SQLite client.

No sign-up. No login. No tokens.

Install it. Use it. There is no onboarding flow, no email field, no OAuth redirect. The database is created on first run. That is the entire setup. Want to leave? cp ~/.oru/oru.db and you have everything.

getting started
$ npm install -g @tchayen/oru $ oru add "First task" aK4nR8tP1mE First task Status: todo Priority: medium

Two commands from install to first task.

CLI oru commands
SQLite ~/.oru/oru.db

Built for daily use.

You will run this dozens of times a day. Every rough edge matters.

Natural language dates.

Parse "tomorrow", "friday", "next week", or any date string. No rigid formats required.

due dates
$ oru add "Ship v2" --due tomorrow aK4nR8tP1mE Ship v2 Status: todo Priority: medium Due: 2026-02-19 $ oru add "Sprint review" --due friday bL5oS9uQ2nF Sprint review Status: todo Priority: medium Due: 2026-02-21

See what needs attention.

One command to surface overdue tasks, in-progress work, and what's actionable next.

oru context
$ oru context 1 overdue, 1 due soon, 1 in progress Overdue (1) [ ] hJ7kMp3nQrs Refactor auth middleware high 2026-02-16 Due Soon (1) [ ] aK4nR8tP1mE Ship v2 medium 2026-02-21 In Progress (1) [~] fP9sW3yU6rJ Write migration tests medium

Block until prerequisites are done.

Mark tasks as blocked by other tasks. Filter to what you can actually work on with --actionable.

task dependencies
$ oru add "Deploy" --blocked-by hJ7kMp3nQrs cM6pT0vR3oG Deploy Status: todo Priority: medium Blocked by: hJ7kMp3nQrs $ oru list --actionable [ ] gQ0tX4zV7sK Update API docs low

Tag and filter tasks.

Labels are freeform strings – no predefined categories to manage. Add multiple labels, then filter by any of them.

labels
$ oru add "Fix bug" -l bug frontend eO8rV2xT5qI Fix bug Status: todo Priority: medium Labels: bug, frontend $ oru list -l bug [ ] eO8rV2xT5qI Fix bug medium

Recurring tasks, handled.

Set a schedule once. When you mark a recurring task as done, the next occurrence appears automatically with the right due date.

recurring tasks
$ oru add "Water plants" -r "every 3 days" -d today rT4wK9mB2nQ Water plants Status: todo Priority: medium Due: 2026-02-18 Recurrence: every 3 days $ oru done rT4wK9mB2nQ Next occurrence: every 3 days sU5xL0nC3oR Water plants Status: todo Due: 2026-02-21

Pipe-friendly by default.

Non-interactive by design. Compose with jq, grep, and scripts – or let your agent call it directly.

json output
$ oru list --json | jq '.[].title' "Refactor auth middleware" "Write migration tests" "Update API docs"

Shell completions for everything.

Tab-complete commands, flags, and values. Ships with scripts for bash, zsh, and fish.

completions
$ oru completions Detected shell: zsh Completions written to ~/.zfunc/_oru $ oru <tab> add context delete done edit get labels list log review start update

Agents retry. oru handles it.

The --id flag makes creates idempotent – your agent can safely retry without creating duplicate tasks.

idempotent creates
$ oru add "Deploy to staging" --id hJ7kMp3nQrs hJ7kMp3nQrs Deploy to staging Status: todo Priority: medium $ oru add "Deploy to staging" --id hJ7kMp3nQrs hJ7kMp3nQrs Deploy to staging Status: todo Priority: medium

Key-value metadata on any task.

Link tasks to PRs, projects, sprints, or anything else. The --meta flag takes arbitrary key-value pairs – useful for your own organization and for agents to track provenance.

metadata
$ oru add "Review PR feedback" \ --meta agent=claude-code \ --meta pr=142 \ --meta run=a1b2c3 dN7qU1wS4pH Review PR feedback Status: todo Priority: medium Metadata: agent: claude-code pr: 142 run: a1b2c3

Get started in one command.

Your tasks. Your machine. Your agent.

macOS Linux
$ curl -fsSL https://oru.sh/install.sh | bash

Requires Node 22+.