A Claude Skill that lets you control Things 3 — the macOS task manager by Cultured Code — directly from Claude using natural language.
Create tasks, manage projects, query your lists, reschedule, complete, and delete — all without leaving your Claude conversation.
/things-app bridges Claude and Things 3 via AppleScript (osascript). This means Claude can both write (create, update, move, delete tasks) and read (query lists, return task data back into the conversation) — making it suitable for automation workflows, not just one-way commands.
It also fills two gaps Things 3 doesn't natively support:
- Import from Apple Reminders (deprecated) — copy a Reminders list into Things as a project (flat list only; Reminders' AppleScript API exposes no sections)
- YAML templates — define reusable project structures as
.yamlfiles and import them into Things on demand
It is intentionally a building block. On its own it manages Things. Combined with other Claude tools (Gmail, Calendar, file access) it becomes a powerful automation layer.
- Claude Code running on macOS — the skill executes
osascript(AppleScript) in the local shell, so that shell must be on the same Mac as Things. - Things 3 installed
Not supported in Cowork. Cowork runs shell commands in a remote Linux sandbox that has no AppleScript and no connection to your Mac's Things app, so the skill's commands can't execute there. Use it with Claude Code on your Mac.
Clone the repository into your Claude skills directory:
git clone https://github.com/ManfredFr/things-app.git ~/.claude/skills/things-appClaude Code automatically discovers skills from ~/.claude/skills/. Restart Claude Code to load a newly installed skill — discovery runs at startup. The skill is then available as /things-app.
Install a real clone, not a symlink. Cloning (a regular directory) is what skill discovery expects. A symlink — e.g. pointing at a working copy in Dropbox/iCloud — may not be followed, and sandboxed apps can be blocked from reading the link's target.
Pull the latest into the installed copy:
git -C ~/.claude/skills/things-app pullThen restart Claude to pick up the changes.
Invoke the skill directly:
/things-app add a task "Call the bank" to Today
Or trigger it naturally — Claude will invoke it automatically when context makes it clear you're working with Things 3.
Examples progress from simple single-step commands to multi-step workflows.
/things-app add "Buy milk" to my inbox
/things-app add "Send weekly report" to Today
/things-app add "Submit tax return" with a deadline of June 30
/things-app show me what's due today
Returns a formatted list of your Today tasks with deadlines directly in the Claude response.
/things-app mark "Buy milk" as done
/things-app move "Call dentist" to next Monday
/things-app create a project called "Website Redesign" with tasks:
- Write content brief
- Review designs
- Approve final mockups
/things-app add "Review lease agreement" with notes "Focus on exit clause section 4"
tagged "legal, property" due Friday
/things-app list all tasks in my Inbox that contain "invoice"
Returns matching tasks with their details in the conversation.
/things-app move everything in my inbox tagged "work" into the project "Q3 Work"
This example combines /things-app with Gmail MCP tools — it is not built into the skill but shows how it composes with other tools:
For every email in Gmail labelled "Follow Up":
- Create a Things inbox task using the email subject as the title
- Add a link to the email thread in the task notes
Claude will use the Gmail MCP to read the emails and /things-app to create the tasks in a single conversation turn.
/things-app show me everything due today and anything overdue,
grouped by project
⚠️ Deprecated. Kept for backward compatibility only. Reminders' AppleScript API cannot expose sections, so this import is always a flat list and loses any structure the source list had. For a structured project, use a YAML template instead. This feature may be removed in a future release.
Things 3 has no built-in import from Reminders. This skill reads a Reminders list via AppleScript and recreates it in Things as a project.
How to do it:
Copy my Reminders list "Packing List" into Things as a project
Claude will:
- Read all items from the named Reminders list via AppleScript
- Create the Things project with those tasks
Sections are not preserved — the import is a flat list.
Apple's Reminders AppleScript API has no section/group support: it returns only the reminders, and section headers are omitted from the output entirely (they are not even returned as ordinary items). There is no AppleScript-only way to recover them. The only alternatives — reading the Reminders SQLite store (requires granting Full Disk Access) or reading the app's on-screen UI — are not portable, so this skill deliberately does not use them.
If you want sections in the resulting Things project, add the headings yourself afterwards, or import from a YAML template instead, which supports sections by design.
Things 3 has no native template support. This skill introduces a simple YAML format for reusable project structures.
name: Project Name
type: project
sections:
- title: Section Heading
tasks:
- Task one
- Task two
- title: Another Section
tasks:
- Task three/things-app import /path/to/template.yaml
Claude reads the YAML file, converts it to the Things JSON format, and creates the project with all headings and tasks in one call.
Example:
/things-app import ~/.claude/skills/things-app/templates/cairns-trip.yaml
Creates a Cairns Trip project with 5 sections and 80 tasks.
| Template | Description |
|---|---|
templates/cairns-trip.yaml |
International travel packing list with sections for carry-on, check-in luggage, electronics, personal care, and pre-departure tasks |
You can add your own templates anywhere on disk and import them by path.
The skill is defined in SKILL.md — a Markdown file with YAML frontmatter that Claude reads to understand when and how to invoke the skill.
At runtime, Claude generates AppleScript and executes it via osascript in Bash. Things 3 launches automatically if it isn't already running.
Why AppleScript over the Things URL scheme?
The Things URL scheme (things:///) is write-only — it can trigger actions but cannot return data. AppleScript supports full bidirectional communication: Claude can query your tasks and use the results in its response or chain them into further actions.
One exception — headings:
Headings inside projects are not in the Things 3 AppleScript dictionary and cannot be created via AppleScript. For any operation that requires headings (creating a project with sections, importing a template), the skill falls back to the things:///json URL scheme, which does support them.
Documentation sources:
| Path | Purpose |
|---|---|
SKILL.md |
Skill definition — instructions Claude follows |
templates/ |
Reusable YAML project templates |
reference/ |
Reference docs loaded on demand |
LICENSE |
MIT |
Issues and pull requests welcome.
When editing SKILL.md, keep the description frontmatter field precise — it is the primary signal Claude uses to decide when to trigger the skill automatically.
MIT © Manfred Friedrich