things-todo
Things 3 via things CLI: add, list, search, update, delete, verify.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Things 3 via things CLI: add, list, search, update, delete, verify.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Claude Code-only work routing: delegate implementation, fixing, exploratory subagents, rebasing, and PR merging/landing to Codex CLI while Claude specifies, decides, reviews, and verifies. Direct hands-on delegation requires ANTHROPIC_BASE_URL to be unset or neither loopback nor gorillaclaw.sheep-coho.ts.net. Codex-backed autoreview is always allowed and preferred, independent of environment.
Codex 1M context: direct OpenAI Responses API inference, safe Sol/Terra/Luna input headroom, Keychain delivery, and Mac fleet rollout.
REQUIRED before ANY `op` command or whenever a task needs an API key, token, password, credential, or secret (OPENAI_API_KEY, ANTHROPIC_API_KEY, deploy tokens, live-test keys). Prompt-free 1Password service-account reads; wrong invocations spam macOS dialogs.
Remote Macs: MacBook, Mac Studio, clawmac, megaclaw, Tailscale, SSH, OpenClaw.
Open-source maintainer orchestration: Codex app workers, work recovery, dependencies, vision, releases.
npm registry ops: login, whoami, names, publish; 1Password tmux.
| name | things-todo |
| description | Things 3 via things CLI: add, list, search, update, delete, verify. |
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.
thingshttps://github.com/ossianhempel/things3-cliGOBIN=/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=***.
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.
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-run to inspect the things:/// URL without mutating.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.
--dry-run before bulk updates/deletes.date; do not guess.UNKNOWN if the app is
absent or not visible there.update needs THINGS_AUTH_TOKEN; add does not.--tags is plural for add/update; tasks --tag is singular for filtering.today JSON may show start: Anytime plus a real start_date; use command
membership/read-back, not one field alone, to verify Today placement.