ClawManager uses a TaskWarrior-compatible filter syntax for its named filters and its inline search bar. A filter expression is a space-separated list of tokens, combined with AND logic. Filters can also carry an optional ordering expression that controls how matching tasks are sorted.
Where filters run
- Named filters — created and managed from the funnel icon in the topbar. Each filter has a name, an expression, an optional ordering, a favourite flag (shows it as a chip in the filter row), and a readonly flag (used for the built-in “My Tasks”).
- Inline search — the search input in the topbar auto-detects whether its
contents are filter syntax. If a token starts with
+,-, or matches a knownkeyword:valuepattern, the whole input is parsed as a filter. Otherwise it falls back to a case-insensitive description substring search. - Built-in filters — seeded once on first launch:
- My Tasks —
status:pending, orderedpriority-,due+, readonly. - Today —
status:pending due.before:today, orderedpriority-,due+. Pending tasks due today or earlier (i.e. due today + overdue). - This Week —
status:pending due.before:eow, orderedpriority-,due+. Pending tasks due on or before the end of the current week (Sunday). - Completed —
status:completed, orderedmodified-.
- My Tasks —
Filter syntax
Tokens are space-separated and combined with AND. Unknown tokens are ignored.
Tag tokens
| Token | Meaning |
|---|---|
+<tag> |
Task has the tag. |
-<tag> |
Task does not have the tag. |
Tags are case-sensitive. If the tag name is all-uppercase and matches a known virtual tag (see below), it is resolved as a virtual tag rather than a literal tag.
Field tokens
| Token | Meaning |
|---|---|
project:<name> |
Task has the given project. Case-insensitive match. |
priority:<H|M|L> |
Task has the given priority. Case-insensitive. |
status:<pending|completed|deleted|recurring> |
Task has the given status. |
description:<text> |
Task description equals this text exactly (case-sensitive). |
description.contains:<text> |
Task description contains this text (case-insensitive). |
Notes:
description:<text>is literal equality against the whole description. For the common “search by substring” case, usedescription.contains:or plain text in the inline search bar.- There is no wildcard syntax. To match “has any project”, use the virtual tag
+PROJECT; to match “has any priority”, use+PRIORITY; and so on.
Due-date tokens
The due:, due.before:, and due.after: keys accept either an ISO date or
one of a few keywords.
| Token | Meaning |
|---|---|
due:today |
Due on today’s calendar day. |
due:tomorrow |
Due on tomorrow’s calendar day. |
due:eow |
Due on or before the end of this week (Sunday, 23:59:59). Same behaviour as due.before:eow. |
due:eom |
Due on or before the last day of this month. Same behaviour as due.before:eom. |
due:<YYYY-MM-DD> |
Due on that exact calendar day. |
due.before:<value> |
Due on or before the end of that day. Accepts today, tomorrow, eow, eom, or YYYY-MM-DD. |
due.after:<value> |
Due on or after the start of that day. Accepts the same values as due.before. |
Notes:
due:for a specific day compares on the task’s calendar day in the local time zone, not the exact timestamp. Two tasks due at different times on the same day both matchdue:today.due:eowanddue:eomare treated as before end-of-week and end-of-month respectively, rather than as exact-day matches.- Invalid dates (e.g.
2026-02-31) and unrecognized keywords cause the token to match nothing rather than being ignored. - Tasks with no due date never match any
due:/due.before:/due.after:token.
Virtual tags
Virtual tags are uppercase tag names that are computed from a task’s
properties rather than stored on the task. They are written with the same
+TAG / -TAG syntax as regular tags. Virtual-tag detection is an exact-match
check against the uppercase name, so +ACTIVE is a virtual tag and +active
is a regular user tag.
Status-based
| Tag | Matches tasks that… |
|---|---|
+PENDING |
have pending status. |
+COMPLETED |
have completed status. |
Field presence
| Tag | Matches tasks that… |
|---|---|
+TAGGED |
have at least one tag. |
+PRIORITY |
have a priority set. |
+PROJECT |
have a project set. |
+ANNOTATED |
have at least one annotation. |
Activity and state
| Tag | Matches tasks that… |
|---|---|
+ACTIVE |
are currently started (have a start time, not yet stopped). |
+WAITING |
have a wait date in the future. |
+SCHEDULED |
have a scheduled date set. |
+UNTIL |
have an until date set. |
Parent / child
| Tag | Matches tasks that… |
|---|---|
+PARENT |
are recurring template tasks (status recurring). |
+CHILD |
were generated from a recurring parent (have a parent field). |
Due-date relative
All due-date virtual tags evaluate against the task’s due date in the local time zone. Tasks with no due date never match.
| Tag | Matches tasks that… |
|---|---|
+OVERDUE |
are past their due date (before start of today). |
+DUE |
are due within the next 7 days, starting today. |
+DUETODAY / +TODAY |
are due on today’s calendar day. |
+YESTERDAY |
were due yesterday. |
+TOMORROW |
are due tomorrow. |
+WEEK |
are due this week (Monday–Sunday, based on today). |
+MONTH |
are due in the current calendar month. |
+QUARTER |
are due in the current calendar quarter. |
+YEAR |
are due in the current calendar year. |
Dependencies
| Tag | Matches tasks that… |
|---|---|
+BLOCKED |
have at least one dependency that is not completed or deleted. |
+UNBLOCKED |
have no open dependencies (or no dependencies at all). |
+BLOCKING |
are listed as a dependency by another task that is not completed or deleted. |
+READY |
are pending, unblocked, and not waiting. Convenience combination of +PENDING +UNBLOCKED -WAITING. |
Other
| Tag | Matches tasks that… |
|---|---|
+UDA |
have any user-defined attribute (a key in the task map that is not a core TaskChampion field or a known tag_ / dep_ / annotation_ prefix). |
+ORPHAN |
(reserved) always matches nothing — there is no UDA schema registry. |
+LATEST |
have the most recent entry timestamp across all tasks. |
Combining filters and virtual tags
Virtual tags compose with any other tokens via AND:
+PENDING +urgent project:work due.before:eow
+OVERDUE -someday priority:H
+READY +PROJECT
Sort ordering
Each named filter can carry an ordering expression. The ordering is a
comma-separated list of sort keys; each key is a field name optionally
suffixed with + (ascending, the default) or - (descending). The leftmost
key is the primary sort; later keys break ties.
Syntax
| Expression | Meaning |
|---|---|
priority- |
Priority descending (H, M, L, none). |
due+ |
Due date ascending (earliest first). |
priority-,due+ |
Priority descending, then due date ascending as a tie-breaker. |
project+,priority-,due+ |
Project ascending, then priority descending, then due date ascending. |
modified- |
Most recently modified first (used by the built-in Completed filter). |
A token with no suffix is treated as ascending. Empty tokens and tokens with an empty field name are skipped.
Supported fields
Known fields use type-aware comparison:
| Field | Comparison |
|---|---|
priority |
Rank-based: H > M > L > none. Direction flips the rank order. |
due |
Numeric (seconds since epoch). |
entry |
Numeric (task creation time). |
modified |
Numeric (last-modified time). |
description |
Case-insensitive string, locale-aware. |
Any other field name falls back to task.getValue(field), which makes custom
attributes (UDAs) and any other TaskChampion key sortable. Numeric values use
numeric comparison; everything else is compared as a case-insensitive string.
Null handling
Null and empty values always sort last, regardless of ascending or
descending direction. This means due+ puts tasks with no due date after all
dated tasks, and due- also puts them last rather than promoting them to the
top.
No ordering
If a filter’s ordering expression is empty or omitted, the matching tasks are returned in their underlying working-set order — no explicit sort is applied.
Examples
| Goal | Expression | Ordering |
|---|---|---|
| High-priority pending work tasks, soonest first | status:pending priority:H project:work |
due+ |
| Everything due this week that isn’t blocked | +PENDING +WEEK -BLOCKED |
due+,priority- |
| Overdue tasks, highest priority first | +OVERDUE +PENDING |
priority-,due+ |
Anything tagged urgent but not on the someday list |
+urgent -someday +PENDING |
priority- |
| Most recently completed tasks | status:completed |
modified- |
| Tasks with no project | +PENDING -PROJECT |
due+ |