Manage to-dos, projects, and tags in Things3 with natural language.
Scanned 6/11/2026
Install via CLI
openskills install spamsch/son-of-simon---
id: things_assistant
name: Things3 Assistant
description: Manage to-dos, projects, and tags in Things3 with natural language.
apps:
- Things3
tasks:
- show_things_today
- show_things_inbox
- list_things_todos
- search_things_todos
- create_things_todo
- complete_things_todo
- update_things_todo
- move_things_todo
- list_things_projects
- create_things_project
- update_things_project
- list_things_tags
essential_tasks:
- show_things_today
- create_things_todo
- complete_things_todo
keywords: ["aufgabe", "aufgaben", "todo", "todos", "projekt", "projekte"]
examples:
- "Show my Things today list"
- "What's in my Things inbox?"
- "Add a to-do to buy milk due tomorrow"
- "Create a to-do to review the report for project Work"
- "Mark the milk to-do as done"
- "Show my Things projects"
- "Move that to-do to Today"
- "Search Things for dentist"
- "What tags do I have in Things?"
safe_defaults:
status: open
include_completed: false
confirm_before_write:
- complete to-do
- cancel to-do
- delete to-do
requires_permissions:
- Automation:Things3
---
## Behavior Notes
### Creating To-Dos
- Parse natural language dates for the `due` parameter ("tomorrow" → compute YYYY-MM-DD)
- Use `schedule` for when to show the to-do (today, evening, tomorrow, someday, anytime)
- Use `due` for the actual deadline date
- Tags are comma-separated: `--tags "work,urgent"`
- When the user says "add to Today", use `list_name="Today"` or `schedule="today"`
- **Always prefer `project_id` over `project` name** for assigning to-dos to projects — name-based lookup is unreliable in Things3
- When creating multiple to-dos for a project, first `create_things_project` to get the ID, then use `project_id` for each to-do
- `move_things_todo` and `update_things_todo` also accept `to_project_id` / `set_project_id`
- When creating a to-do with `list_name`, the to-do is created first, then moved to the target list (valid: Inbox, Today, Anytime, Someday — NOT Upcoming)
- `update_things_todo` supports `set_schedule` for changing when a to-do appears
### Scheduling vs Due Dates
- **Schedule** controls when the to-do appears in Things (visibility)
- **Due date** is the deadline
- "Do this today" → schedule to today
- "This is due Friday" → set due date to Friday
- "Remind me about this tomorrow" → schedule to tomorrow
- Scheduling uses the Things URL scheme internally (AppleScript's `activation date` is read-only)
- Requires `MACBOT_THINGS_AUTH_TOKEN` in `~/.macbot/.env` — get the token from Things → Settings → General → Enable Things URLs
### Status Values
- `open` — Active, not yet done
- `completed` — Done
- `canceled` — Canceled/removed
### Built-in Lists
- **Inbox** — Unprocessed items, brain dump
- **Today** — To-dos to focus on today
- **Upcoming** — Scheduled for future dates (**virtual list** — cannot move to-dos here directly; to-dos appear when they have a future schedule date via `set_schedule`)
- **Anytime** — Available to do anytime (no schedule)
- **Someday** — Ideas for later, not committed
- **Logbook** — Completed to-dos
- **Trash** — Deleted items
**Moving to lists:** Use `move_things_todo` for Inbox, Today, Anytime, Someday. For Upcoming, use `create_things_todo` with `schedule` or `update_things_todo` with `set_schedule`.
### Two-Step Lookup
When the user wants to act on a specific to-do (complete, update, move), first search or list to find the to-do's ID, then use the ID for the action. This avoids ambiguity with duplicate names.
### Common Request Patterns
- **"show my today list"** → show_things_today
- **"what's in my inbox?"** → show_things_inbox
- **"add a to-do..."** → create_things_todo with parsed name, due, tags, project
- **"mark X as done"** → search_things_todos to find it, then complete_things_todo with id
- **"show my projects"** → list_things_projects with with_todos=true
- **"move X to Today"** → move_things_todo with to_list="Today"
- **"schedule X for next week"** → update_things_todo with set_schedule="YYYY-MM-DD"
- **"remind me in 2 weeks"** → create_things_todo with schedule="YYYY-MM-DD" (compute the date)
- **"what are my tags?"** → list_things_tags with with_counts=true
- **"show tasks for project X"** → list_things_todos with project="X"
- **"show tasks tagged X"** → list_things_todos with tag="X"
- **"update the due date"** → update_things_todo with set_due
### Notes on To-Dos
- Notes/descriptions can be added when creating a to-do with the `notes` parameter
- Notes can be updated on existing to-dos with `update_things_todo` using `set_notes`
- Notes support plain text (no rich text/HTML)
No comments yet. Be the first to comment!