Taskwarrior
Personal-assistant interface to the user's Taskwarrior task list using the local task CLI.
The user owns the task list. The agent's job is to read it, summarize it, prioritize it, and apply changes the user has approved. Never treat the task list as the agent's own todo list, never invent tasks the user did not ask for.
Environment
Taskwarrior 3.x with a local replica of the user's REAL task list, synced
across deployments via a self-hosted taskchampion sync server. The same
skill runs in several places:
- User machines (workstation / laptops):
task installed natively;
config and data resolve through the standard mechanisms
(dotfiles-managed taskrc, XDG paths). No environment overrides.
- Chatbot sandbox:
task is preinstalled; TASKDATA and TASKRC
point into a persistent mount and are preset in the environment.
Rules, everywhere:
- Never override or unset
TASKDATA / TASKRC when they are set, and
never hardcode database paths; let the environment decide.
- Every replica is the same real, synced task list - not a scratch
database. Treat every write accordingly.
- If
task fails because config is missing, report that this deployment
has not been set up yet (dotfiles not applied, or sandbox seed not run)
instead of creating config yourself.
Project: https://taskwarrior.org
Local Configuration
Before answering any question, read ${XDG_CONFIG_HOME:-$HOME/.config}/pi-clanker/taskwarrior.local.md. It captures only what cannot be discovered by running task:
- What each project, tag, and context means in the user's life
- The purpose and value semantics of any custom UDAs
- The user's personal definitions of "critical", "important", "soon"
- Working hours and how to interpret "today" / "this week"
- Personal rules (e.g. "I curate
+next manually, never auto-add it")
Discoverable state lives in the database, not in taskwarrior.local.md. Always discover it live, every session, with the helpers below. Do not memorize it across turns either; project lists and contexts can change between calls.
task _projects # current project names
task _tags # current tag names (user + virtual)
task context list # contexts and their filters
task context show # which context is active
task _udas # custom UDA names
task show uda. # UDA types, labels, allowed values
task _get rc.default.command # default report when user runs bare `task`
task show report. # custom report definitions
task show alias. # aliases
ls "$(task _get rc.hooks.location)" 2>/dev/null # active hooks
If ${XDG_CONFIG_HOME:-$HOME/.config}/pi-clanker/taskwarrior.local.md does not exist:
- Tell the user the local config is missing. Point at
taskwarrior.local.example.md in this skill's directory as a template to copy to ~/.config/pi-clanker/taskwarrior.local.md (or $XDG_CONFIG_HOME/pi-clanker/taskwarrior.local.md).
- Discover live state with the helpers above so you can still answer the current question.
- When the answer depends on subjective meaning ("what's critical", "what's a work task"), state the assumption you are making and ask the user to confirm. Suggest they record the answer in
taskwarrior.local.md for next time.
All concrete project / tag names in this skill file are placeholders. Resolve them from taskwarrior.local.md (for meaning) and live discovery (for which ones currently exist).
Read vs Write
Taskwarrior commands fall into two camps. Treat them very differently.
Read commands (safe, run freely):
task list, task next, task <filter> export, task projects, task tags, task summary, task active, task burndown.*, task calendar, task history.*, task ghistory.*, task stats, task count, task ids, task uuids, task _projects, task _tags, task _context, task _udas, task show.
Write commands (state-changing):
task add, task modify, task annotate, task denotate, task append, task prepend, task done, task start, task stop, task delete, task purge, task undo, task duplicate, task edit, task config, task context define, task context delete, task import, task synchronize.
For machine-readable parsing of read operations, prefer:
task <filter> export # JSON, parse with jq
task _projects # one project per line
task _tags # one tag per line
task _ids <filter> # space-separated ids
task _uuids <filter> # space-separated uuids
For human display, the formatted reports (task list, task next, task ready) are usually nicer to summarize.
Quick Reference
| Intent |
Command |
| All pending tasks |
task list |
| Next actions (urgency-sorted) |
task next |
| Ready (not blocked, not waiting) |
task ready |
| Single task detail |
task <id> info |
| All tasks as JSON |
task export |
| Filtered as JSON |
task project:work status:pending export |
| List projects |
task projects (or task _projects for plain) |
| List tags |
task tags (or task _tags) |
| Active (currently started) |
task active |
| Overdue |
task +OVERDUE list |
| Due today |
task due:today list |
| Due this week |
task due.before:eow list |
| By project |
task project:<name> list |
| Add task |
task add "Summary" project:<p> +tag due:<date> priority:<H/M/L> |
| Modify |
task <id> modify <changes> |
| Annotate (timestamped note) |
task <id> annotate "note text" |
| Mark done |
task <id> done |
| Start / stop timer |
task <id> start / task <id> stop |
| Delete (destructive) |
task <id> delete |
| Undo last change |
task undo |
| Show contexts |
task context show |
| Switch context |
task context <name> / task context none |
| Effective config |
task show |
Triggers
- "what should I work on next"
- "what's most critical for work"
- "add a task to ..."
- "what's overdue / due today / due this week"
- "show my tasks"
- "mark task 12 done" / "I finished ..."
- "annotate task 12 with ..."
- "what am I waiting on"
- "weekly review"
- "switch to work context"
Workflow
For "what should I do" / "what's important" questions
- Read
taskwarrior.local.md for the user's definition of work, personal, critical, etc. If missing, fall back to live discovery and ask.
- Discover live state you need:
task context show, task _projects, task _tags as relevant.
- Translate the user's framing ("work", "critical") through the meanings recorded locally into concrete filters.
- Run a focused query. Default ordering should follow Taskwarrior's built-in
urgency (which combines priority, age, due, tags, dependencies). task next is usually the right starting point.
- Pull JSON when you need to summarize structured fields:
task <filter> export | jq '.[] | {id, description, project, due, urgency, tags}'
- Present a short, ranked summary. Surface: id, description, project, due, urgency, blockers. Do not dump 50 lines of report output unless asked.
- For deeper review patterns (daily plan, weekly review, overdue triage, "what's slipping"), load
references/assistant_patterns.md.
For adding a task
- Confirm the description with the user if it is ambiguous.
- Resolve project, tags, due date, and priority from local conventions when the user did not state them. Ask if any are non-obvious.
- Build the command. Always quote the description.
- Run it.
task add returns Created task N. Capture that ID and immediately echo task <N> info so the user sees what got created.
- If the user described several tasks in one breath, add them one at a time, not in a loop you cannot inspect.
For modifying a task
- Show current state first:
task <id> info.
- State the change in plain language: "I'll set due:friday and add +urgent."
- Run
task <id> modify <changes>.
- Show the result:
task <id> info.
For marking done
- Show what you are about to complete:
task <id> info.
- Run
task <id> done.
- Confirm completion. If the task was recurring, mention that the next instance will appear on its schedule.
For destructive operations
See the Destructive Operations section below. Always confirm.
Filter Discipline
Taskwarrior filters are positional and powerful, which means they are also easy to misuse.
Contexts (brief)
Contexts are saved filters that scope every read and write until cleared. The everyday ops (show, list, <name>, none) are in the Quick Reference above. When the user references a category that maps to an existing context (e.g. they say "work" and a work context exists), prefer activating the context over duplicating its filter inline.
For defining / deleting contexts, read/write filter splits, or bypassing the active context for a single call, load references/advanced.md.
Urgency, Priority, Due
Taskwarrior computes a numeric urgency per task from configurable coefficients (priority, age, due proximity, tags, project, dependencies, annotations, active state). It is the default sort key for task next.
priority:H, priority:M, priority:L, priority: (clear) are the only built-in priority values.
due: accepts the date forms above. Setting due: triggers urgency boosts as the date approaches.
- To filter by computed urgency:
task urg.over:10 list or task urg.under:5 list.
- The user's personal definitions of "critical" / "important" / "soon" live in
taskwarrior.local.md. Use them verbatim if present. If absent, default to: overdue first, then due.before:eow and priority:H, then highest urgency. Tell the user once that you used defaults and offer to record their preferred definitions.
Destructive Operations
These need explicit user approval each time. Show the affected tasks and the exact command before running.
task <filter> delete
- Deletes are reversible only with
task undo and only until the next mutating command (and only one step back).
- If the filter is non-trivial (anything beyond a single id), run
task <filter> count and task <filter> list first, present the list, and ask for confirmation.
- Never bypass
rc.confirmation with rc.confirmation=off to silence a prompt.
task <filter> purge
- Permanently removes already-deleted tasks from the database. No undo. Only run with explicit user request and confirmation.
task undo
- Reverts the most recent change in the local database.
- Before running, describe what the most recent change was. The user may have done unrelated work between the change you want to undo and now.
- After running, show the current state of the affected task.
task <filter> modify matching multiple tasks
- If
task <filter> count returns more than 1, treat as bulk. Show the count and a sample list, get explicit approval, then run.
- Be explicit if the modification touches a recurring template (
+PARENT): changes propagate to all future instances.
task <filter> done matching multiple tasks
- Same rule as modify: count, sample, confirm.
Recurring task templates
- A task with
recur: and +PARENT is the template; visible instances are +CHILD. Editing the parent affects all future children. Editing or completing a child affects only that occurrence.
- If the user asks to "delete that recurring task", clarify: only this occurrence (delete the child id) or the whole series (delete the parent uuid)?
task edit <id>
- Opens
$EDITOR on the raw task representation. Do not invoke from the agent unattended; it will hang or corrupt the task. Tell the user to run it themselves.
task synchronize
- Exception: sync is routine in this deployment (local replicas on every machine and the chatbot sandbox, self-hosted taskchampion sync server). Run
task synchronize silently at the start and end of any session that reads or writes tasks, so other replicas always see current state.
- Only surface sync output when it fails. On failure: report it plainly, continue working locally (changes sync later), do not retry in a loop.
- Do not spam sync between individual commands within a session.
task import
- Imports JSON. Can create or overwrite tasks in bulk. Always show the file and a preview of
jq length and a sample object before running.
task config
- Edits
$TASKRC. Treat as configuration changes the user must initiate.
NEVER
- NEVER treat the user's task list as your own. Do not add tasks, mark tasks done, or change priorities to reflect what the agent thinks should happen. Only act on explicit user intent.
- NEVER delete or purge without showing the affected tasks and getting explicit approval.
- NEVER modify a filter that could match multiple tasks without first running
task <filter> count and surfacing the result.
- NEVER edit
$TASKRC or files under $TASKDATA/ directly. Use task config only when the user asks to change configuration.
- NEVER silence confirmation prompts with
rc.confirmation=off or rc.bulk=0 to avoid a question. The prompt is there for a reason.
- NEVER invoke
task edit from the agent. Tell the user to run it.
- NEVER end a task-touching session without syncing (or telling the user the sync failed).
- NEVER run
task import against an unverified file. Preview the JSON first.
- NEVER assume numeric ids are stable across CLI invocations. Use UUIDs for any deferred or scripted operation.
- NEVER invent project names, tags, contexts, or UDAs. If the user references something not present in the local config or live
task _projects / task _tags output, ask.
- NEVER install, upgrade, or reconfigure Taskwarrior unless the user explicitly asks.
Safety
- Show the
task command before running it.
- Auto-run safe writes for single tasks:
task add, task <id> annotate, task <id> done, task <id> start, task <id> stop, task <id> modify for a single id.
- Get explicit approval before any destructive operation (delete, purge, undo, multi-match modify/done, recurring template edits, import, config).
- After a write, surface the resulting state (
task <id> info or a short list).
- If a Taskwarrior command exits non-zero or prints "No matches", report it plainly. Do not retry with looser filters silently.
Deep Dive
Three reference files, loaded only when triggered. Do not preload.
LOAD references/commands.md when:
- Building filters beyond simple
project: / +tag / due:.
- Writing JSON pipelines through
task export | jq.
- Needing the full attribute / tag / date filter grammar.
- Troubleshooting CLI errors, exit codes, or quoting / id-reshuffle pitfalls.
LOAD references/advanced.md when:
- Defining or deleting contexts, or doing read/write filter splits.
- Setting up recurring tasks or editing a series vs an instance.
- Working with dependencies (blocked / blocking chains).
- Discovering, configuring, or suggesting custom UDAs.
- Inspecting or reasoning about hooks.
- Running sync, import, configuration changes, or backup.
LOAD references/assistant_patterns.md when:
- The user asks for a daily plan, weekly review, overdue triage, or any "what should I do" question deeper than a single
task next call.
- You need to combine urgency, due date, project, and tags into a ranked summary.
- The user wants a recurring review ritual.
Do NOT load references for:
- Simple show / list / add / done / annotate operations covered by the Quick Reference.
- Single-task info display.
- Activating or clearing an existing context.
| Task |
Load |
task next summary |
none |
| Add a task with project + tag + due |
none |
| Modify or mark a single task done |
none |
| Activate an existing context |
none |
Filters beyond project: / +tag / due: |
commands.md |
| JSON export + jq pipeline |
commands.md |
| Common pitfalls / exit codes / quoting |
commands.md |
| Daily plan / weekly review / triage |
assistant_patterns.md |
| "What should I focus on" with ranking |
assistant_patterns.md |
| Define / delete a context |
advanced.md |
| Recurring task setup or edit |
advanced.md |
| Dependency graph / blocked-by chain |
advanced.md |
| Custom UDA discovery or new UDA config |
advanced.md |
Hooks, sync, import, task config, backup |
advanced.md |
1---2name: taskwarrior3description: Use when the user wants to manage their personal task list with Taskwarrior, e.g. "what should I work on next", "what's overdue", "add a task to ...", "mark task 12 done", "show my work tasks", "weekly review", or otherwise mentions tasks, todos, projects, or the `task` CLI. The user is the owner of the task list; the agent acts as a personal assistant for it, never as the task list's owner.4---56# Taskwarrior78Personal-assistant interface to the user's Taskwarrior task list using the local `task` CLI.910The user owns the task list. The agent's job is to read it, summarize it, prioritize it, and apply changes the user has approved. Never treat the task list as the agent's own todo list, never invent tasks the user did not ask for.1112## Environment1314Taskwarrior 3.x with a local replica of the user's REAL task list, synced15across deployments via a self-hosted taskchampion sync server. The same16skill runs in several places:1718- **User machines** (workstation / laptops): `task` installed natively;19 config and data resolve through the standard mechanisms20 (dotfiles-managed `taskrc`, XDG paths). No environment overrides.21- **Chatbot sandbox**: `task` is preinstalled; `TASKDATA` and `TASKRC`22 point into a persistent mount and are preset in the environment.2324Rules, everywhere:2526- Never override or unset `TASKDATA` / `TASKRC` when they are set, and27 never hardcode database paths; let the environment decide.28- Every replica is the same real, synced task list - not a scratch29 database. Treat every write accordingly.30- If `task` fails because config is missing, report that this deployment31 has not been set up yet (dotfiles not applied, or sandbox seed not run)32 instead of creating config yourself.3334Project: https://taskwarrior.org3536## Local Configuration3738Before answering any question, read `${XDG_CONFIG_HOME:-$HOME/.config}/pi-clanker/taskwarrior.local.md`. It captures **only what cannot be discovered by running `task`**:3940- What each project, tag, and context **means** in the user's life41- The **purpose** and value semantics of any custom UDAs42- The user's personal definitions of "critical", "important", "soon"43- Working hours and how to interpret "today" / "this week"44- Personal rules (e.g. "I curate `+next` manually, never auto-add it")4546Discoverable state lives in the database, not in `taskwarrior.local.md`. Always discover it live, every session, with the helpers below. Do not memorize it across turns either; project lists and contexts can change between calls.4748```bash49task _projects # current project names50task _tags # current tag names (user + virtual)51task context list # contexts and their filters52task context show # which context is active53task _udas # custom UDA names54task show uda. # UDA types, labels, allowed values55task _get rc.default.command # default report when user runs bare `task`56task show report. # custom report definitions57task show alias. # aliases58ls "$(task _get rc.hooks.location)" 2>/dev/null # active hooks59```6061If `${XDG_CONFIG_HOME:-$HOME/.config}/pi-clanker/taskwarrior.local.md` does not exist:62631. Tell the user the local config is missing. Point at `taskwarrior.local.example.md` in this skill's directory as a template to copy to `~/.config/pi-clanker/taskwarrior.local.md` (or `$XDG_CONFIG_HOME/pi-clanker/taskwarrior.local.md`).642. Discover live state with the helpers above so you can still answer the current question.653. When the answer depends on subjective meaning ("what's critical", "what's a work task"), state the assumption you are making and ask the user to confirm. Suggest they record the answer in `taskwarrior.local.md` for next time.6667All concrete project / tag names in this skill file are placeholders. Resolve them from `taskwarrior.local.md` (for meaning) and live discovery (for which ones currently exist).6869---7071## Read vs Write7273Taskwarrior commands fall into two camps. Treat them very differently.7475**Read commands** (safe, run freely):76`task list`, `task next`, `task <filter> export`, `task projects`, `task tags`, `task summary`, `task active`, `task burndown.*`, `task calendar`, `task history.*`, `task ghistory.*`, `task stats`, `task count`, `task ids`, `task uuids`, `task _projects`, `task _tags`, `task _context`, `task _udas`, `task show`.7778**Write commands** (state-changing):79`task add`, `task modify`, `task annotate`, `task denotate`, `task append`, `task prepend`, `task done`, `task start`, `task stop`, `task delete`, `task purge`, `task undo`, `task duplicate`, `task edit`, `task config`, `task context define`, `task context delete`, `task import`, `task synchronize`.8081For machine-readable parsing of read operations, prefer:8283```bash84task <filter> export # JSON, parse with jq85task _projects # one project per line86task _tags # one tag per line87task _ids <filter> # space-separated ids88task _uuids <filter> # space-separated uuids89```9091For human display, the formatted reports (`task list`, `task next`, `task ready`) are usually nicer to summarize.9293---9495## Quick Reference9697| Intent | Command |98|--------|---------|99| All pending tasks | `task list` |100| Next actions (urgency-sorted) | `task next` |101| Ready (not blocked, not waiting) | `task ready` |102| Single task detail | `task <id> info` |103| All tasks as JSON | `task export` |104| Filtered as JSON | `task project:work status:pending export` |105| List projects | `task projects` (or `task _projects` for plain) |106| List tags | `task tags` (or `task _tags`) |107| Active (currently started) | `task active` |108| Overdue | `task +OVERDUE list` |109| Due today | `task due:today list` |110| Due this week | `task due.before:eow list` |111| By project | `task project:<name> list` |112| Add task | `task add "Summary" project:<p> +tag due:<date> priority:<H/M/L>` |113| Modify | `task <id> modify <changes>` |114| Annotate (timestamped note) | `task <id> annotate "note text"` |115| Mark done | `task <id> done` |116| Start / stop timer | `task <id> start` / `task <id> stop` |117| Delete (destructive) | `task <id> delete` |118| Undo last change | `task undo` |119| Show contexts | `task context show` |120| Switch context | `task context <name>` / `task context none` |121| Effective config | `task show` |122123---124125## Triggers126127- "what should I work on next"128- "what's most critical for work"129- "add a task to ..."130- "what's overdue / due today / due this week"131- "show my <project> tasks"132- "mark task 12 done" / "I finished ..."133- "annotate task 12 with ..."134- "what am I waiting on"135- "weekly review"136- "switch to work context"137138---139140## Workflow141142### For "what should I do" / "what's important" questions1431441. Read `taskwarrior.local.md` for the user's definition of work, personal, critical, etc. If missing, fall back to live discovery and ask.1452. Discover live state you need: `task context show`, `task _projects`, `task _tags` as relevant.1463. Translate the user's framing ("work", "critical") through the meanings recorded locally into concrete filters.1474. Run a focused query. Default ordering should follow Taskwarrior's built-in `urgency` (which combines priority, age, due, tags, dependencies). `task next` is usually the right starting point.1485. Pull JSON when you need to summarize structured fields:149 ```bash150 task <filter> export | jq '.[] | {id, description, project, due, urgency, tags}'151 ```1526. Present a short, ranked summary. Surface: id, description, project, due, urgency, blockers. Do not dump 50 lines of report output unless asked.1537. For deeper review patterns (daily plan, weekly review, overdue triage, "what's slipping"), load `references/assistant_patterns.md`.154155### For adding a task1561571. Confirm the description with the user if it is ambiguous.1582. Resolve project, tags, due date, and priority from local conventions when the user did not state them. Ask if any are non-obvious.1593. Build the command. Always quote the description.1604. Run it. `task add` returns `Created task N.` Capture that ID and immediately echo `task <N> info` so the user sees what got created.1615. If the user described several tasks in one breath, add them one at a time, not in a loop you cannot inspect.162163### For modifying a task1641651. Show current state first: `task <id> info`.1662. State the change in plain language: "I'll set due:friday and add +urgent."1673. Run `task <id> modify <changes>`.1684. Show the result: `task <id> info`.169170### For marking done1711721. Show what you are about to complete: `task <id> info`.1732. Run `task <id> done`.1743. Confirm completion. If the task was recurring, mention that the next instance will appear on its schedule.175176### For destructive operations177178See the **Destructive Operations** section below. Always confirm.179180---181182## Filter Discipline183184Taskwarrior filters are positional and powerful, which means they are also easy to misuse.185186- **Numeric IDs are not stable.** They get reassigned as tasks complete. Two `task` calls minutes apart can refer to different tasks with the same id. For any modification the user did not explicitly initiate by id in the same turn, prefer the UUID:187 ```bash188 task <id> _uuids # get the UUID189 task <uuid> modify ...190 ```191- **Always count first** when a filter could match multiple tasks:192 ```bash193 task <filter> count194 ```195 If the count is more than 1, surface the list and the count to the user before running the modification.196- **`status:pending` is the default for most reports** but not for `export` or `count`. When the user says "all my tasks", clarify whether they mean pending only or include completed/deleted.197- **`+TAG` includes, `-TAG` excludes.** Virtual tags (uppercase) like `+OVERDUE`, `+ACTIVE`, `+BLOCKED`, `+UNBLOCKED`, `+WAITING`, `+CHILD`, `+PARENT` are computed; do not try to set them.198- **Date attributes accept named values:** `today`, `tomorrow`, `eod`, `eow`, `eom`, `monday`, `friday`, `now`, `2025-01-15`, `2025-01-15T17:00`, `1week`, `+3d`. Use `due.before:`, `due.after:`, `due.over:`, `due.under:` for ranges.199200---201202## Contexts (brief)203204Contexts are saved filters that scope every read and write until cleared. The everyday ops (`show`, `list`, `<name>`, `none`) are in the Quick Reference above. When the user references a category that maps to an existing context (e.g. they say "work" and a `work` context exists), prefer activating the context over duplicating its filter inline.205206For defining / deleting contexts, read/write filter splits, or bypassing the active context for a single call, load `references/advanced.md`.207208---209210## Urgency, Priority, Due211212Taskwarrior computes a numeric `urgency` per task from configurable coefficients (priority, age, due proximity, tags, project, dependencies, annotations, active state). It is the default sort key for `task next`.213214- `priority:H`, `priority:M`, `priority:L`, `priority:` (clear) are the only built-in priority values.215- `due:` accepts the date forms above. Setting `due:` triggers urgency boosts as the date approaches.216- To filter by computed urgency: `task urg.over:10 list` or `task urg.under:5 list`.217- The user's personal definitions of "critical" / "important" / "soon" live in `taskwarrior.local.md`. Use them verbatim if present. If absent, default to: overdue first, then `due.before:eow` and `priority:H`, then highest urgency. Tell the user once that you used defaults and offer to record their preferred definitions.218219---220221## Destructive Operations222223These need explicit user approval each time. Show the affected tasks and the exact command before running.224225**`task <filter> delete`**226- Deletes are reversible only with `task undo` and only until the next mutating command (and only one step back).227- If the filter is non-trivial (anything beyond a single id), run `task <filter> count` and `task <filter> list` first, present the list, and ask for confirmation.228- Never bypass `rc.confirmation` with `rc.confirmation=off` to silence a prompt.229230**`task <filter> purge`**231- Permanently removes already-deleted tasks from the database. No undo. Only run with explicit user request and confirmation.232233**`task undo`**234- Reverts the most recent change in the local database.235- Before running, describe what the most recent change was. The user may have done unrelated work between the change you want to undo and now.236- After running, show the current state of the affected task.237238**`task <filter> modify` matching multiple tasks**239- If `task <filter> count` returns more than 1, treat as bulk. Show the count and a sample list, get explicit approval, then run.240- Be explicit if the modification touches a recurring template (`+PARENT`): changes propagate to all future instances.241242**`task <filter> done` matching multiple tasks**243- Same rule as modify: count, sample, confirm.244245**Recurring task templates**246- A task with `recur:` and `+PARENT` is the template; visible instances are `+CHILD`. Editing the parent affects all future children. Editing or completing a child affects only that occurrence.247- If the user asks to "delete that recurring task", clarify: only this occurrence (delete the child id) or the whole series (delete the parent uuid)?248249**`task edit <id>`**250- Opens `$EDITOR` on the raw task representation. Do not invoke from the agent unattended; it will hang or corrupt the task. Tell the user to run it themselves.251252**`task synchronize`**253- **Exception: sync is routine in this deployment** (local replicas on every machine and the chatbot sandbox, self-hosted taskchampion sync server). Run `task synchronize` silently at the **start and end of any session that reads or writes tasks**, so other replicas always see current state.254- Only surface sync output when it fails. On failure: report it plainly, continue working locally (changes sync later), do not retry in a loop.255- Do not spam sync between individual commands within a session.256257**`task import`**258- Imports JSON. Can create or overwrite tasks in bulk. Always show the file and a preview of `jq length` and a sample object before running.259260**`task config`**261- Edits `$TASKRC`. Treat as configuration changes the user must initiate.262263---264265## NEVER266267- **NEVER** treat the user's task list as your own. Do not add tasks, mark tasks done, or change priorities to reflect what the agent thinks should happen. Only act on explicit user intent.268- **NEVER** delete or purge without showing the affected tasks and getting explicit approval.269- **NEVER** modify a filter that could match multiple tasks without first running `task <filter> count` and surfacing the result.270- **NEVER** edit `$TASKRC` or files under `$TASKDATA/` directly. Use `task config` only when the user asks to change configuration.271- **NEVER** silence confirmation prompts with `rc.confirmation=off` or `rc.bulk=0` to avoid a question. The prompt is there for a reason.272- **NEVER** invoke `task edit` from the agent. Tell the user to run it.273- **NEVER** end a task-touching session without syncing (or telling the user the sync failed).274- **NEVER** run `task import` against an unverified file. Preview the JSON first.275- **NEVER** assume numeric ids are stable across CLI invocations. Use UUIDs for any deferred or scripted operation.276- **NEVER** invent project names, tags, contexts, or UDAs. If the user references something not present in the local config or live `task _projects` / `task _tags` output, ask.277- **NEVER** install, upgrade, or reconfigure Taskwarrior unless the user explicitly asks.278279---280281## Safety282283- Show the `task` command before running it.284- Auto-run safe writes for single tasks: `task add`, `task <id> annotate`, `task <id> done`, `task <id> start`, `task <id> stop`, `task <id> modify` for a single id.285- Get explicit approval before any destructive operation (delete, purge, undo, multi-match modify/done, recurring template edits, import, config).286- After a write, surface the resulting state (`task <id> info` or a short list).287- If a Taskwarrior command exits non-zero or prints "No matches", report it plainly. Do not retry with looser filters silently.288289---290291## Deep Dive292293Three reference files, loaded only when triggered. Do not preload.294295**LOAD `references/commands.md` when:**296- Building filters beyond simple `project:` / `+tag` / `due:`.297- Writing JSON pipelines through `task export | jq`.298- Needing the full attribute / tag / date filter grammar.299- Troubleshooting CLI errors, exit codes, or quoting / id-reshuffle pitfalls.300301**LOAD `references/advanced.md` when:**302- Defining or deleting contexts, or doing read/write filter splits.303- Setting up recurring tasks or editing a series vs an instance.304- Working with dependencies (blocked / blocking chains).305- Discovering, configuring, or suggesting custom UDAs.306- Inspecting or reasoning about hooks.307- Running sync, import, configuration changes, or backup.308309**LOAD `references/assistant_patterns.md` when:**310- The user asks for a daily plan, weekly review, overdue triage, or any "what should I do" question deeper than a single `task next` call.311- You need to combine urgency, due date, project, and tags into a ranked summary.312- The user wants a recurring review ritual.313314**Do NOT load references for:**315- Simple show / list / add / done / annotate operations covered by the Quick Reference.316- Single-task info display.317- Activating or clearing an existing context.318319| Task | Load |320|------|------|321| `task next` summary | none |322| Add a task with project + tag + due | none |323| Modify or mark a single task done | none |324| Activate an existing context | none |325| Filters beyond `project:` / `+tag` / `due:` | `commands.md` |326| JSON export + jq pipeline | `commands.md` |327| Common pitfalls / exit codes / quoting | `commands.md` |328| Daily plan / weekly review / triage | `assistant_patterns.md` |329| "What should I focus on" with ranking | `assistant_patterns.md` |330| Define / delete a context | `advanced.md` |331| Recurring task setup or edit | `advanced.md` |332| Dependency graph / blocked-by chain | `advanced.md` |333| Custom UDA discovery or new UDA config | `advanced.md` |334| Hooks, sync, import, `task config`, backup | `advanced.md` |