Skip to content

Releases: maxboettinger/omnifocus-cli

Release list

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 10:45

Added

  • AI features through OpenRouter (OPENROUTER_API_KEY, optional
    ~/.config/omnifocus-cli/config.json with ai.apiKey/ai.model, --model per run,
    $OF_AI_MODEL globally; default model google/gemini-3.8-flash). Nothing else in the CLI
    needs a key.
  • task breakdown <ref> (of t b): splits a task into granular, AuDHD-friendly nano
    subtasks using structured output, with full context (parents, project, existing and
    completed subtasks, siblings, tags) and optional --context text. Human mode previews the
    tree and loops apply / revise-with-feedback / quit; applying creates the whole nested tree,
    estimates, tags and sequential/parallel flags in one OmniFocus round-trip. --json prints
    the plan and changes nothing; --json --apply applies and reports per item.
  • task why [ref] (of t w): an interactive "five whys" coaching session about an avoided
    task, streamed turn by turn, ending only on Esc, Ctrl-C, Ctrl-D or /quit.
  • System prompts are Markdown files in src/prompts/, embedded in the binary and
    overridable per user via ~/.config/omnifocus-cli/prompts/<name>.md or $OF_PROMPTS_DIR.
  • Bridge ops task.context and task.createTree (also accepts a projectId target).
  • Status cues in human output: completed (), dropped (), blocked () and deferred
    () tasks are marked with a glyph, and finished ones have their name dimmed and struck
    through. Active items render exactly as before. task show states the status on its own
    line under the name, marking one held only through the project or parent as
    (inherited); project list/project show carry the same glyphs (on hold → ). The
    glyph rather than the color carries the meaning, so the cue survives NO_COLOR.
  • Task records now report dropped, effectivelyCompleted and effectivelyDropped. A task
    inside a done or dropped project keeps its own flags false, so until now it listed as if
    it were still actionable — in --json too.
  • of fc as a shortcut for of forecast. Standalone root commands can now carry a short
    alias of their own; fc rather than f because f is the folder noun.
  • task search --id <id> looks a single task up by id instead of by keyword, accepting
    either a short id from a listing or a raw OmniFocus id. Output stays search's list
    format (a one-element array in --json), and unlike a keyword search it finds
    completed tasks. task search now requires exactly one of <query> or --id.

Install

brew install maxboettinger/tap/omnifocus-cli

Or download a prebuilt binary (Apple Silicon shown; use of-darwin-x64.tar.gz on Intel):

curl -fsSL https://github.com/maxboettinger/omnifocus-cli/releases/download/v0.2.0/of-darwin-arm64.tar.gz | tar -xz
xattr -d com.apple.quarantine of
mv of ~/.local/bin/

Checksums (SHA-256)

d043e9415e83910203533dc0c6c8c4722685e2d1cf76ac716d7d7716dd53c0f5  of-darwin-arm64.tar.gz
b27d0e01f3f94797cc653ebc1a627cc0cd6d1c4faea129a808833d1199ae5bca  of-darwin-x64.tar.gz

Full changelog: CHANGELOG.md

v0.1.0

Choose a tag to compare

@maxboettinger maxboettinger released this 03 Sep 07:33

The first public release of of, a command-line interface for OmniFocus on macOS, built for people who live in a terminal and for the agents and scripts that work alongside them.

of talks to OmniFocus through a single Apple Events bridge, so everything you can do in the app's task, project, tag and inbox views you can now do from the shell, with output that is readable by humans on a terminal and JSON the moment it is piped.

Highlights

  • Fast by design. Every noun and every verb has a one-letter alias: of t c 42 completes task 42, of t m 42 tomorrow reschedules it, of i l lists the inbox.
  • Short task ids. Human-mode listings prefix each task with a small, stable number you can pass to any command in place of a name or OmniFocus id. Numbers are never reused.
  • Dates the way you type them. tomorrow, fri 5pm, 2d, next week, 10.9. work everywhere a date is accepted, because the text goes to OmniFocus's own parser. ISO dates are parsed locally and stay exact. Every date write is read back and verified before it is reported.
  • Agent-ready. Piped stdout is JSON, piped stderr is one JSON object per line, exit codes are stable, and JSON mode carries zero UI chrome. Ambiguous names return candidates instead of a guess.
  • Safe to script. Every destructive verb requires --confirm, and stdin-driven commands fail fast with a usage example instead of hanging on a terminal.

What's inside

Tasksadd, list, show, search, update, move, complete, tag, delete, plus subtasks via add --parent. complete takes any number of references and reports each one. move reschedules due, defer and planned dates in one call.

Notificationstask notification list|add|update|delete|clear with absolute and due-relative reminders (--offset -1h) and repeat intervals.

Projects, tags, folders — create, list, show, update, rename and delete, with status and folder filters.

Inboxinbox list --newest-first, inbox add, inbox process for single-item triage, and inbox process-many for JSON-driven batch triage.

Bulkbulk add, bulk update, bulk complete from stdin JSON.

Viewsforecast (overdue, due, planned, upcoming), review (weekly review summary), stats, and collect (recently completed tasks).

Shellof completion bash|zsh|fish generates completions from the live command tree, aliases included.

Install

Prebuilt binary (Apple Silicon shown; use of-darwin-x64.tar.gz on Intel):

curl -fsSL https://github.com/maxboettinger/omnifocus-cli/releases/download/v0.1.0/of-darwin-arm64.tar.gz | tar -xz
xattr -d com.apple.quarantine of
mv of ~/.local/bin/
of --version

The binary is not notarized, hence the xattr step to clear Gatekeeper's quarantine flag.

From source with Bun:

git clone https://github.com/maxboettinger/omnifocus-cli.git && cd omnifocus-cli
bun install && bun link

First run: macOS asks whether your terminal may control OmniFocus. If you decline, of explains how to grant it under System Settings → Privacy & Security → Automation.

Requirements

  • macOS with OmniFocus installed. of exits with a clear error on other platforms.
  • Bun ≥ 1.0 for the source install only. The prebuilt binaries have no runtime dependency.

Checksums (SHA-256)

d4e4628776f12d8a642800ec97078da4fd0d0eb8225db8dd91eb8c941199786f  of-darwin-arm64.tar.gz
25943f8deb9bf4e69571406ced35c104288df89f39a0b732e838db0eaecdbbbb  of-darwin-x64.tar.gz

Notes

  • The Intel build is cross-compiled and was verified under Rosetta 2; please report anything odd on native Intel hardware.
  • This is an unofficial community project, not affiliated with or endorsed by The Omni Group. OmniFocus is a trademark of The Omni Group.

Full changelog: CHANGELOG.md · all commits