tracker~
$ /

this is a demo. the data is invented, it is shared with everyone else looking, and it is wiped every night. don't put anything real in it. what is this?

$ task help

the command bar

Anything the bar does not recognise as a verb is read as a filter. This app has its own filter language now rather than passing the line to Taskwarrior, and it is deliberately smaller: it answers what the reports in your taskrc ask for, and it tells you when it does not understand something instead of quietly returning the wrong thing.

project:house filter by project, including everything beneath it. project.is:house is that project exactly
due.before:monday a date filter on due, end or entry. .before:, .after:, .none:, or a bare due:monday for that whole day
monday date words: today, yesterday, tomorrow, any weekday name, sow/som/soy, eow/eom/eoy, eoww, or a date as 9/20/26
milk a bare word matches the description; several words all have to appear
status:completed filters default to status:pending unless you say otherwise. status.any: for every status
add buy milk add a task; takes the full add syntax, e.g. add project:house due:tomorrow fix the sink
tap peeps.jo 9/6/26.1730 farm fest your own shorthand: project, due date, then the description. Dates are read in your taskrc's m/d/y.hn. any taskwarrior attribute works in the line too — recur:1y makes it repeat, and the unit is required
42 open that task's page. the t prefix is optional everywhere below — t 42 works too
done 42 complete the task with that id
42 d the same, in Taskwarrior's word order. t 42 d and task 42 done work too
42 d 30 minutes complete it and annotate how long it took. Anything after the verb is the note
cur back to the home view — what was task cur, under the calendar. tc and ~ work too
42 push 7 move its due date seven days out. push 42 7 works too, a bare push means tomorrow, and a negative number pulls it earlier
42 annotate rained until nineadd a note to a task, whatever its status. note works too, and both word orders. the edit page takes several at once, one per line
42 e edit a task — project, due and description. e 42 and a uuid work too, or click the pencil on a row
306,301 rm several at once, comma separated — d, push and undo take a list too. if one id is wrong nothing happens at all, and undo brings back everything the command took
42 rm delete it. rm 42 works too, and del / delete for rm. Recoverable — the row survives and undo brings it back
mv pets.chaci pets.chachi rename a project — every task under it moves, whatever its status, and sub-projects keep their tails. moving into a name that already exists merges into it, and says so. no undo. the pencil on a project's page does the same
42 denotate 30 minutes remove a note, by what it says — unnote too, and both word orders. taskwarrior has no other handle on an annotation, and it matches on part of one, so this refuses rather than removing a longer note that happens to contain what you typed. the edit page ticks the same thing
42 rm all delete it and end its recurrence. plain rm takes only that instance and the series carries on — which is how a skipped day is recorded — so the wider action needs the extra word. what was already completed is kept, and there is no undo for this one
cd history go somewhere — a page (history, projects, help, home) or a project by name. tab completes both
record peeps.april 9/6/26.1100 lunch, at the pubsomething you already did — creates it, dates it, completes it, and annotates whatever follows the comma. rec too
ls bills list what is under a project. l and ls -l too; a bare ls is the whole tree
,r reload this page, keeping whatever filter or day you were looking at. reload works too. the comma is a leader, like vim
undo put back the last task you completed here
42 undo put a named task back to pending. reopen works too
24d7a4a2 undo anywhere a task is named you can use the short uuid the history page prints, not just an id
projects the project tree. proj works too
backup write both backups — the task export and a database dump — into exports/, timestamped. Keeps the last 30
history what you have completed, by day. hist works too
help this page. h and ? work too

the row controls

complete. type a note in the box beside it first and press enter, and the note goes on as it closes — the same as 42 d 30 minutes
push the due date by the number of days in the box — 42 push 7
delete it — 42 rm. recoverable, and the flash offers an undo

Every row carries these, and each does exactly what the command beside it does — a control here is a shortcut for a command, never a separate power. The note is part of completing rather than a separate step: type and press enter. On a narrow screen the boxes and the delete control drop away, so a mis-tap cannot remove anything.

Completing something offers an undo beside the message, and every row on the history page carries a reopen. This is not Taskwarrior's undo: that reverts whichever change was last, and the terminal shares this database, so it could just as easily undo something you typed there. Reopening always names the task it is putting back.

Each row on the history page carries a copy icon beside its uuid. It copies the full uuid, not the shortened one on screen — though the short one works anywhere a task is named, so you rarely need the long form.

The home page also carries an add a task form with the same three fields, and the project box completes from your project list. In the command bar, tab completes after cd, which offers pages and projects, and after project, which offers projects.

keys

ctrl k the palette — the same bar, enlarged and centred, with its completion list in view. cmd k on a mac. It opens from anywhere, including from inside a note box, which is the one place / cannot help you: there a slash is just a slash
/ focus the bar from anywhere
esc leave the bar, or close the palette. With the completion list open it closes that first, so it never does two things at once
up / down walk back through previous commands — one history, shared by the bar and the palette

The bar starts focused, and the grammar is resolved on the server — every command above works with javascript switched off. The keys are the only thing you lose, and the palette with them: it is the bar in a bigger box, so there is nothing in it the bar cannot already do.

what this app is

This app is the source of truth. Every list is answered from its own store, and every change — adding, completing, annotating, pushing, removing — is written there directly. The task binary is no longer the store, so a change made in a terminal will not appear here and will be lost when ~/.task is next replaced from an export.

Recurring tasks are generated here now. Taskwarrior did that during garbage collection, which this app has always turned off; the next instance of a habit appears the first time anything reads after it is due.

~/.task is an archive. rake store:export writes the whole store back out in the format task import reads, which is the backup and the way out.

Two things the filter language does not do. Tags are not filterable here. And it is not Taskwarrior's language: an attribute it has never heard of is reported rather than guessed at. If you want something it turns down, that is worth saying — the list above is short on purpose.