Install
openclaw skills install things-plusPersonal task manager powered by Things 3. Trigger when the user asks to add, capture, review, organize, reprioritize, search, or manage tasks in Things. Also trigger when the user expresses a concrete personal future action or commitment, including natural planning phrases like "tomorrow I need to…", "I still need to…", "I should…", "remind me to…", "I've got to…", "don't let me forget…", or "help me note this down" — even when Things is not mentioned explicitly. Also trigger when the user asks for an end-of-day summary, work log, daily report, or asks to summarize what was done today and put it into Things.
openclaw skills install things-plusUse the things CLI to read from and write to the local Things 3 database.
Credential policy: THINGS_AUTH_TOKEN may be required for some operations in some environments (for example, certain update paths). Verify token presence via things auth; do not ask the user to paste it into chat.
brew install ossianhempel/tap/things3-cliPATH.THINGS_AUTH_TOKEN must be set in the environment visible to the execution context (prefer ~/.zshenv over ~/.zshrc for background/agent use).Run full pre-flight only on: explicit setup intent, or execution failures that suggest environment/auth/CLI issues. Do not block ordinary task capture on pre-flight.
mdfind 'kMDItemCFBundleIdentifier == "com.culturedcode.ThingsMac"' | head -5
which things && things --version
things auth
things today --json
Decision flow:
things auth fails → do not block ordinary add/read flows that still work directly; only pause token-gated operations and guide token setup if the requested action actually depends on token/auth (Things 3 → Settings → General → Things URLs). Verify presence with things auth in the same execution context before continuingthings auth alone as proof writes work — verify with a real add/delete on a disposable item if write reliability is in questionToken setup: identify the active shell/context first (echo $SHELL), then give one exact command for the appropriate environment file. Prefer replacing an existing entry over appending a duplicate. Before asking the user about setup/auth/environment problems, first inspect the current execution context and try the smallest safe command that can confirm the actual behavior.
Use the things CLI as the execution interface.
Most common reads:
things today --jsonthings upcoming --jsonthings search "query" --jsonthings show --id <UUID> --jsonMost common writes:
things add "Title" --when tomorrowthings update --id <UUID> ...things delete --id <UUID> --confirm <UUID>Use the smallest command that can safely confirm the current state.
Before risky mutations, prefer search and show to identify the exact item.
Verify every write by read-back instead of trusting exit status alone.
add: execute directly; no dry-run requiredupdate: use --dry-run first when the change is broad or riskydelete: for clearly identified single-item deletions, execute directly (recoverable via trash) and verify by read-back; for ambiguous or broad deletions, clarify firstBefore add, do a quick duplicate check when the task title is generic or was mentioned earlier in the session:
things search "key phrase" --json
things createdtoday --json
If an open match exists, prefer updating by UUID. If intent is ambiguous, ask one brief clarifying question.
--whenUse for any concrete or fuzzy time reference.
--when "YYYY-MM-DD HH:MM:SS"08:30 · noon 12:00 · afternoon 15:00 · evening 20:00 · before bed 23:00--when DATEtoday · tomorrow · evening · anytime · someday--deadlineUse for latest acceptable completion date ("by Friday", "due Monday"). Not a substitute for --when. Set both when both apply.
--tagsAdd only when tags clearly improve retrieval. Default: 0–2 tags. Reuse existing tags; do not invent new ones.
--checklist-itemAdd only when the task has 2+ concrete sub-steps executed as a bundle. Max 5 items.
--repeatUse for recurring personal tasks in Things (weekly reviews, habit reminders, etc.). Use cron for background/system automation. Do not infer recurrence unless the user asks.
For new task capture, always follow this order:
Do not add first and rewrite later unless the user explicitly asks to preserve exact wording.
Before creating a task, rewrite vague, exploratory, or topic-like titles into the next visible executable action whenever possible. Do not preserve the user's original wording if it is too vague to act on directly.
Treat titles as needing rewrite if they are mainly about:
If the title still reads like a topic, intention, or area of study rather than an action, rewrite it again before adding.
Examples:
buy groceries → make grocery list and place orderwork on presentation → draft first 5 slidesemail John → reply to John with requested detailslearn harness engineering → outline the basic concepts of harness engineeringcheck the Datawhale tutorial → decide whether the Datawhale tutorial is worth followingread the Claude skill guide → read the Claude skill guide and extract key pointsFor learning, research, review, or exploration requests, convert broad titles into a concrete next action.
Prefer titles that describe:
Only set --when, --deadline, --tags, or --checklist-item when the user's input actually warrants it. Default is a clean, simple task.
When the user asks for a daily summary, work log, end-of-day report, or asks to summarize what was done today and put it into Things:
Start with: things today --json
If output is empty or fails to parse:
run things tasks --json --limit=3
if that is still broken, report CLI/database trouble
If things auth is empty:
enter token setup flow only for operations that actually depend on token/auth
do not block ordinary add/read flows that still work directly
If a UUID is not found:
re-run things search to relocate the exact item
If a write appears to succeed but the data is unchanged:
trust the read-back, not the exit status
check in this order:
Recovery: never create a replacement task because an update failed. Fix auth/UUID first, then retry the original operation.