Things Todo
SkillSearchLets your agent add, search, update, and delete to-dos in the Things 3 task app on a Mac.
Then ask your AI: use the Things Todo skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add it as a step in a pipeline you build on Ahel, or connect Ahel to Claude, ChatGPT, Cursor, Claude Code or Codex and ask your AI to use it.
About this skill
Things 3 via things CLI: add, list, search, update, delete, verify.
What this skill tells your AI
The instructions your AI receives, as published by steipete/agent-scripts in skills/things-todo/SKILL.md and read by Ahel’s review.
Use this for Things 3 tasks on Peter's Macs. Prefer things for Things-backed
todos; use $reminders only when the user asks for Apple Reminders.
Tool
- CLI:
things - Repo:
https://github.com/ossianhempel/things3-cli - Install:
GOBIN=/opt/homebrew/bin go install github.com/ossianhempel/things3-cli/cmd/things@latest
Auth for update URL operations:
source ~/.profile >/dev/null 2>&1 || true
things auth
THINGS_AUTH_TOKEN should come from ~/.profile or 1Password. Never print it.
things update --dry-run must redact it as auth-token=***.
Start
Use JSON for scripted reads and verification:
things tasks --format json --limit 20
things today --format json
things search "query" --format json
Things DB reads may need Full Disk Access for the calling app. Writes should go
through Things URL Scheme or AppleScript via things; do not write the SQLite DB
directly.
Add
Default: add, then search/read back.
things add "Book LHR-SFO nonstop business flight" --notes "Nonstop only." --when tomorrow --tags travel
things tasks --search "LHR-SFO" --format json
Useful flags:
--notes "text"--when today|tomorrow|evening|anytime|someday|YYYY-MM-DD--deadline YYYY-MM-DD--list "Project or Area"--tags tag1,tag2--checklist-item "text"repeatable--dry-runto inspect thethings:///URL without mutating.
Update / Delete
Find the UUID first, then mutate by id:
things tasks --search "flight" --format json
things update --id <uuid> "New title" --notes "Updated notes"
things tasks --search "New title" --format json
things delete --id <uuid> --confirm <uuid>
things tasks --search "New title" --format json
things trash --search "New title" --format json
Always read back after writes. Delete moves items to Things Trash; verify normal search is empty and trash search contains the item when cleanup matters.
Conventions
- Turn vague asks into concrete next-action titles.
- Preserve wording when the user clearly wants capture, not rewriting.
- Split unrelated actions into separate to-dos.
- Use Today only when the user implies it; otherwise use Inbox/Anytime defaults.
- Prefer
--dry-runbefore bulk updates/deletes. - For current date math, run
date; do not guess.
Gotchas
- macOS only; remote hosts may show Things.app version as
UNKNOWNif the app is absent or not visible there. updateneedsTHINGS_AUTH_TOKEN;adddoes not.--tagsis plural for add/update;tasks --tagis singular for filtering.todayJSON may showstart: Anytimeplus a realstart_date; use command membership/read-back, not one field alone, to verify Today placement.
Signals
- GitHub stars
- 7k
- Forks
- 635
- Last commit
- Oct 2026
Ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Item type
- skill
- Key
things-todo- Source
- github.com/steipete/agent-scripts
github.com/steipete/agent-scripts