Things3 CLI Wrapper Skill
Overview
This skill teaches you how to use the thangs CLI tool to manage tasks in Things 3, a popular task management application for macOS. Things 3 must be installed and running on the user's system for these commands to work.
When to use this skill:
- •Managing personal or professional tasks
- •Creating, updating, or completing to-do items
- •Organizing work into projects and areas
- •Filtering and viewing tasks by various criteria
Prerequisites:
- •Things 3 must be installed on macOS
- •The
thangsCLI must be installed globally (npm install -g @dougskinner/thangs) - •Things 3 must be running (or will launch automatically when commands execute)
Key Capabilities:
- •List and filter tasks by list, project, area, or tag
- •Create new tasks with rich metadata (notes, due dates, tags, assignments)
- •Update existing tasks (rename, change dates, move between projects/areas)
- •Complete or cancel tasks
- •Create projects and areas for organization
- •Machine-readable JSON output for scripting
Core Concepts
Things 3 Hierarchy
Things 3 organizes tasks in a three-level hierarchy:
- •Areas (top level) - Major life domains like "Work", "Personal", "Health"
- •Projects (middle level) - Specific initiatives within areas like "Q1 Planning", "Website Redesign"
- •Tasks (bottom level) - Individual actionable items
Important relationships:
- •Tasks can belong to a project OR an area, but not both
- •Projects can belong to an area
- •Tasks without a project or area go to the Inbox
Built-in Lists
Things 3 provides smart lists that dynamically filter tasks:
- •Today - Tasks scheduled for today
- •Upcoming - Tasks scheduled for future dates
- •Anytime - Tasks without specific dates
- •Someday - Tasks deferred for later consideration
Task Lifecycle
Tasks progress through states:
- •Created - New task in Inbox or assigned location
- •Scheduled - Task assigned to a date (appears in Today/Upcoming)
- •Completed - Task marked as done
- •Canceled - Task moved to trash
Tags
Tasks can have multiple tags for cross-cutting organization (e.g., "urgent", "waiting", "quick-win"). Tags are comma-separated in commands.
Commands Quick Reference
Decision Tree: Which Command to Use?
Want to VIEW tasks? → Use list
- •Filter by list:
--list Today - •Filter by project:
--project "Website Redesign" - •Filter by area:
--area Work - •Filter by tag:
--tag urgent
Want to CREATE something?
- •New task → Use
add <name> - •New project → Use
add-project <name> - •New area → Use
add-area <name>
Want to MODIFY a task?
- •Update properties → Use
edit <task> - •Mark as done → Use
complete <task> - •Move to trash → Use
cancel <task>
Command Syntax Patterns
list - View Tasks
thangs list [--list <name>] [--project <name>] [--area <name>] [--tag <name>] [--json]
Options:
- •
--list- Filter by built-in list: Today, Upcoming, Anytime, Someday - •
--project- Filter by project name (case-insensitive partial match) - •
--area- Filter by area name (case-insensitive partial match) - •
--tag- Filter by tag name (case-insensitive partial match) - •
--json- Output JSON array instead of formatted table
Examples:
thangs list # All tasks thangs list --list Today # Today's tasks thangs list --project "Marketing" # Tasks in Marketing project thangs list --area Work --json # Work area tasks as JSON
add - Create Task
thangs add <name> [--notes <text>] [--due <YYYY-MM-DD>] [--tags <tag1,tag2>] [--project <name>] [--area <name>] [--json]
Required:
- •
<name>- Task name (positional argument)
Options:
- •
--notes- Task notes/description - •
--due- Due date in YYYY-MM-DD format - •
--tags- Comma-separated tags - •
--project- Assign to project by name - •
--area- Assign to area by name - •
--json- Output JSON response
Examples:
thangs add "Review budget" thangs add "Call client" --due 2025-12-15 --tags urgent,phone thangs add "Design mockups" --project "Website Redesign" --notes "Focus on mobile-first"
edit - Update Task
thangs edit <task> [--name <newName>] [--notes <text>] [--due <YYYY-MM-DD>] [--tags <tag1,tag2>] [--project <name>] [--area <name>] [--json]
Required:
- •
<task>- Current task name (must be unique)
Options:
- •
--name- Rename the task - •
--notes- Update task notes - •
--due- Change due date (YYYY-MM-DD format) - •
--tags- Replace all tags (comma-separated, empty string clears tags) - •
--project- Move to different project - •
--area- Move to different area - •
--json- Output JSON response
Examples:
thangs edit "Review budget" --due 2025-12-20 thangs edit "Call client" --tags urgent,follow-up thangs edit "Old name" --name "New name" --project "Different Project"
complete - Mark Task Done
thangs complete <task> [--json]
Required:
- •
<task>- Task name to complete (must be unique)
Examples:
thangs complete "Review budget" thangs complete "Call client" --json
cancel - Move Task to Trash
thangs cancel <task> [--json]
Required:
- •
<task>- Task name to cancel (must be unique)
Examples:
thangs cancel "Outdated task" thangs cancel "Duplicate item" --json
add-project - Create Project
thangs add-project <name> [--area <name>] [--notes <text>] [--deadline <YYYY-MM-DD>] [--json]
Required:
- •
<name>- Project name
Options:
- •
--area- Create project within specific area - •
--notes- Project notes - •
--deadline- Project deadline (YYYY-MM-DD format) - •
--json- Output JSON response
Examples:
thangs add-project "Q1 Planning" thangs add-project "Website Redesign" --area Work --deadline 2025-03-31
add-area - Create Area
thangs add-area <name> [--json]
Required:
- •
<name>- Area name
Examples:
thangs add-area "Work" thangs add-area "Health" --json
Common Workflows
Basic Operations
Daily Task Review
# See what's due today thangs list --list Today # Complete a task thangs complete "Morning standup" # Add a new task for today thangs add "Review pull requests" --due 2025-12-09
Quick Task Capture
# Add task to Inbox (default) thangs add "Call dentist" # Add task with context thangs add "Prepare presentation" --notes "Include Q4 metrics" --tags work,urgent
Task Completion
# Mark task as done thangs complete "Write report" # Cancel task that's no longer needed thangs cancel "Old meeting prep"
Intermediate Operations
Project-Based Task Management
# Create a new project thangs add-project "Website Redesign" --area Work # Add tasks to the project thangs add "Create wireframes" --project "Website Redesign" thangs add "Review designs" --project "Website Redesign" --tags review # View all project tasks thangs list --project "Website Redesign" # Complete project tasks thangs complete "Create wireframes"
Area-Based Organization
# Create areas for life domains thangs add-area "Work" thangs add-area "Personal" thangs add-area "Health" # Add tasks directly to areas (without projects) thangs add "Schedule doctor visit" --area Health thangs add "Update resume" --area Personal # View all tasks in an area thangs list --area Work
Tag-Based Filtering
# Add tasks with tags thangs add "Review contracts" --tags urgent,legal thangs add "Quick email replies" --tags quick-win # Filter by tag thangs list --tag urgent thangs list --tag quick-win
Advanced Operations
Batch Operations with JSON Output
# Get all Today tasks as JSON for processing
thangs list --list Today --json > today.json
# Parse JSON with jq (if available)
thangs list --area Work --json | jq '.[] | select(.tags | contains("urgent"))'
Task Migration Between Projects
# Move task to different project thangs edit "Update documentation" --project "New Project" # Move task from project to area directly thangs edit "General task" --area Work
Due Date Management
# Set due date for task thangs edit "Submit report" --due 2025-12-15 # View upcoming tasks thangs list --list Upcoming # Reschedule task thangs edit "Submit report" --due 2025-12-20
Complex Task Updates
# Update multiple properties at once thangs edit "Research competitors" \ --name "Competitive analysis report" \ --due 2025-12-31 \ --tags research,high-priority \ --project "Market Research" \ --notes "Focus on pricing and features"
Important Notes
Task Name Uniqueness
Critical: For complete, cancel, and edit commands, task names must be unique. If multiple tasks have the same name, you'll receive an error listing all matching tasks. In this case:
- •Rename one of the tasks to make them unique
- •Use the full task name with more specific identifiers
- •View the list of tasks to identify which one to update
Example Error:
thangs complete "Meeting" # Error: Multiple tasks found with name "Meeting": # - "Meeting" (Project: Q1 Planning, Due: 2025-12-10) # - "Meeting" (Project: Weekly Sync, Due: 2025-12-11)
Solution:
# Make names unique first thangs edit "Meeting" --name "Q1 Planning Meeting" # Edit the first one thangs complete "Q1 Planning Meeting"
Date Format
All date inputs must use YYYY-MM-DD format:
- •✅ Correct:
--due 2025-12-31 - •❌ Wrong:
--due 12/31/2025 - •❌ Wrong:
--due Dec 31, 2025
Things 3 Must Be Running
The CLI interacts with Things 3 via AppleScript, which requires Things 3 to be running. If Things 3 is not running, it will launch automatically, but there may be a brief delay on the first command.
JSON Output for Scripting
Use --json flag for machine-readable output when:
- •Building automation scripts
- •Parsing output with tools like
jq - •Integrating with other systems
JSON Output Format:
{
"success": true,
"data": { ... }
}
or on error:
{
"success": false,
"error": "Error message"
}
Error Handling Patterns
Common errors and solutions:
- •Task not found - Verify task name is correct (case-sensitive)
- •Multiple tasks found - Make task names unique (see above)
- •Invalid date format - Use YYYY-MM-DD format
- •Project/Area not found - Create the project/area first, or check spelling
- •Things 3 not accessible - Ensure Things 3 is installed and permissions are granted
Performance Considerations
- •Listing all tasks can be slow with large task databases (1000+ tasks)
- •Use filters (--list, --project, --area) to narrow results
- •JSON output is faster than table formatting for large result sets
See Also
For complete command reference with all options and examples, see:
- •reference.md - Detailed documentation for every command, flag, and option
- •examples.md - Real-world usage scenarios and workflows
For developers modifying or contributing to this skill:
- •README.md - Skill structure, testing workflow, and contribution guidelines