omnifocus

Interact with OmniFocus task manager via the command-line interface (@stephendolan/omnifocus-cli). Use when the user wants to: (1) Add tasks or projects to OmniFocus, (2) List, view, or search tasks/projects, (3) Update or complete tasks, (4) Manage inbox items, (5) Work with tags and analyze tag usage, (6) Process or organize their OmniFocus database from the command line.

6 stars

Best use case

omnifocus is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Interact with OmniFocus task manager via the command-line interface (@stephendolan/omnifocus-cli). Use when the user wants to: (1) Add tasks or projects to OmniFocus, (2) List, view, or search tasks/projects, (3) Update or complete tasks, (4) Manage inbox items, (5) Work with tags and analyze tag usage, (6) Process or organize their OmniFocus database from the command line.

Teams using omnifocus should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/omnifocus/SKILL.md --create-dirs "https://raw.githubusercontent.com/tdhopper/dotfiles2.0/main/.claude/skills/omnifocus/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/omnifocus/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How omnifocus Compares

Feature / AgentomnifocusStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Interact with OmniFocus task manager via the command-line interface (@stephendolan/omnifocus-cli). Use when the user wants to: (1) Add tasks or projects to OmniFocus, (2) List, view, or search tasks/projects, (3) Update or complete tasks, (4) Manage inbox items, (5) Work with tags and analyze tag usage, (6) Process or organize their OmniFocus database from the command line.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# OmniFocus CLI

## Overview

Interact with OmniFocus on macOS using the `of` command-line tool. All commands output JSON by default, making it easy to filter and process with `jq`.

**Installation check:** The `@stephendolan/omnifocus-cli` package should already be installed. If the `of` command is not found, install it with:

```bash
npm install -g @stephendolan/omnifocus-cli
```

## Core Capabilities

### 1. Task Management

Create, list, update, and delete tasks with full filtering support.

**Quick examples:**

```bash
# List all tasks
of task list

# List flagged tasks only
of task list --flagged

# Create a simple task
of task create "Review pull requests"

# Create task with full details
of task create "Write documentation" \
  --project "Website" \
  --tag "writing" \
  --due "2024-12-15" \
  --estimate 60 \
  --flagged

# Complete a task
of task update "Review pull requests" --complete

# View task details
of task view "Review pull requests"
```

**Filters available:**
- `--flagged` - Show only flagged tasks
- `--project <name>` - Filter by project
- `--tag <name>` - Filter by tag
- `--completed` - Include completed tasks

### 2. Project Management

Organize work into projects with folder support.

**Quick examples:**

```bash
# List all projects
of project list

# Create a project
of project create "Website Redesign" --folder "Work"

# Create sequential project with tags
of project create "Q1 Planning" \
  --folder "Work" \
  --tag "quarterly" \
  --sequential

# View project details
of project view "Website Redesign"
```

### 3. Inbox Processing

View and count inbox items that need processing.

**Quick examples:**

```bash
# List inbox items
of inbox list

# Get inbox count
of inbox count

# Count unprocessed inbox items (no project assigned)
of inbox list | jq '[.[] | select(.project == null)] | length'
```

### 4. Tag Analysis

Analyze tag usage, find stale tags, and manage tag hierarchies.

**Quick examples:**

```bash
# List all tags with usage counts
of tag list

# Find tags unused for 30+ days
of tag list --unused-days 30

# Sort by most used
of tag list --sort usage

# View comprehensive statistics
of tag stats

# Create nested tags
of tag create "Work Meetings" --parent "Work"

# View tag details (use path for nested tags)
of tag view "Work/Work Meetings"
```

### 5. Search

Full-text search across all tasks.

**Quick examples:**

```bash
# Search for tasks
of search "documentation"
of search "meeting"
```

## Working with JSON Output

All commands return JSON. Use `jq` to filter and transform results.

**Common patterns:**

```bash
# Get task names only
of task list | jq '.[] | .name'

# Get specific fields from flagged tasks
of task list --flagged | jq '.[] | {name, project, due}'

# Count tasks
of inbox list | jq 'length'

# Find overdue tasks
of task list | jq --arg today "$(date +%Y-%m-%d)" \
  '[.[] | select(.due != null and .due < $today and .completed == false)]'

# Count tasks by project
of task list | jq 'group_by(.project) | map({project: .[0].project, count: length})'
```

**Compact output:** Add `--compact` flag for single-line JSON output.

## Task Object Fields

Tasks include these fields:
- `id` - Unique identifier
- `name` - Task name
- `note` - Notes (or null)
- `completed` - Boolean
- `flagged` - Boolean
- `project` - Project name (null for inbox)
- `tags` - Array of tag names
- `defer` - Defer date (ISO format or null)
- `due` - Due date (ISO format or null)
- `estimatedMinutes` - Time estimate (or null)
- `completionDate` - Completion timestamp (or null)
- `added` - Creation timestamp (or null)
- `modified` - Last modification timestamp (or null)

## Date Format

Use ISO format for dates: `YYYY-MM-DD` or full ISO strings like `2024-12-15T10:00:00`.

## Detailed Reference

See [commands.md](references/commands.md) for complete command reference with all options.

See [examples.md](references/examples.md) for workflow examples, automation scripts, and advanced filtering patterns.

## Common Workflows

**Daily check-in:**
```bash
of inbox count
of task list --flagged
of project list
```

**Weekly review:**
```bash
of project list
of tag list --unused-days 60
of tag stats
```

**Quick task capture:**
```bash
of task create "Task name" --tag "context" --due "2024-12-20"
```

## Requirements

- macOS (OmniFocus is Mac-only)
- OmniFocus installed and running
- Node.js 18+
- Permission granted in System Settings > Privacy & Security > Automation

Related Skills

omnifocus-triage

6
from tdhopper/dotfiles2.0

Interactively process OmniFocus inbox items using AskUserQuestion. Use when the user wants to (1) triage their inbox, (2) process inbox items, (3) organize their OmniFocus inbox, (4) clear out their inbox, (5) do a GTD-style inbox review. Triggers on "triage inbox", "process inbox", "organize inbox", "clear inbox", "inbox zero".

stop-slop

6
from tdhopper/dotfiles2.0

Use this skill when writing or editing prose to eliminate predictable AI writing patterns. Helps make writing more direct, authentic, and human.

sonos-control

6
from tdhopper/dotfiles2.0

Control Sonos speakers on Tim's home network. Use when the user wants to (1) play, pause, or stop music on Sonos speakers, (2) change volume on speakers, (3) skip tracks, (4) check what's playing, (5) see speaker status, (6) group or ungroup speakers, (7) any Sonos or music/audio playback task involving home speakers. Triggers on "sonos", "speakers", "play music", "what's playing", "volume", "turn up", "turn down", "pause music", "stop music".

slack-message

6
from tdhopper/dotfiles2.0

Draft and send Slack messages in Tim's natural voice. Use when the user wants to (1) post an update to a channel, (2) draft a Slack message, (3) share something on Slack, (4) send a DM, (5) reply in a thread. Applies Tim's Slack writing style and prose principles automatically.

skill-creator

6
from tdhopper/dotfiles2.0

Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.

sending-to-codex

6
from tdhopper/dotfiles2.0

Delegate tasks or ask questions to OpenAI's Codex CLI from within Claude Code. Use this skill when the user says "ask codex", "send to codex", "delegate to codex", "have codex do this", "get codex's opinion", "run this in codex", or wants to offload a coding task or question to the Codex agent. Supports both fire-and-forget coding tasks (fix bugs, add features, refactor) and research questions (analyze code, explain behavior, get a second opinion).

reviewing-writing

6
from tdhopper/dotfiles2.0

Review and critique writing using Michael Nielsen's principles on craft. Analyzes text for purpose focus, brevity, danger words, opening strength, originality, reader psychology, truthfulness, and title impact. Use when the user says "review my writing", "nielsen review", "writing review", "review this writing", "critique my writing", or asks for feedback on prose quality.

reviewing-code

6
from tdhopper/dotfiles2.0

Review pull requests, branch changes, or code diffs. Triggers on "review this PR", "review my changes", "code review", "review branch", or GitHub PR URLs. Focuses on bugs, tests, complexity, and performance - not linting.

resend-email

6
from tdhopper/dotfiles2.0

Send emails via Resend.com API. Use when the user wants to (1) send an email, (2) email someone, (3) send a message to an email address, (4) send email with attachments, (5) schedule an email for later. Requires RESEND_API_KEY environment variable.

refresh-dotfiles

6
from tdhopper/dotfiles2.0

Full sync of personal (yadm) and work (yadm-work) dotfiles. Pulls remote changes, commits and pushes local changes, and audits for untracked files that should be tracked. Use when the user says 'refresh yadm', 'sync dotfiles', 'dotfiles sync', or 'update dotfiles'.

Nightshift

6
from tdhopper/dotfiles2.0

Manage and interact with Nightshift, an AI-powered development automation tool that runs coding tasks during off-hours.

modal

6
from tdhopper/dotfiles2.0

Run code on Modal's cloud infrastructure via `uvx modal run`. Use whenever the user wants to (1) validate handbook tutorial shell commands on a fresh Debian container from scratch (uv, pip, build tooling, etc. with no cached state from Tim's laptop), (2) test GPU-specific Python code (torch, CUDA, cupy, transformers, CUDA wheels) on real hardware, or (3) reproduce a "does this actually work from zero?" check. Trigger on phrases like "run this on modal", "test on a fresh machine", "try this on a GPU", "validate from scratch", "does the tutorial work end-to-end", "test this without my venv state", or any mention of modal.com / cloud GPUs / ephemeral containers for verification. Also trigger when the user is writing a handbook tutorial that involves GPU installs (PyTorch, CUDA wheels) and they want to confirm the commands work.