Tasks hold what is to be done. Each one has a status, which is the entire difference between this store and memory: a task can be closed, and a fact cannot.
"Remember to chase the invoice" belongs here. Written into memory it becomes a note nothing can ever close, served back to every later session as something that is true.
What your agent can do
| Read | Write |
|---|---|
tasks.list, tasks.get | tasks.add, tasks.update, tasks.remove |
Tasks are also readable as an MCP resource at tasks://task/{id}.
The six statuses
Each is a different answer to "why is this not done":
in_progress | started |
open | not started |
blocked | waiting on somebody else |
muted | you decided to stop being reminded |
done | finished |
dropped | decided against, which is not the same fact as finished |
tasks.list shows the first three and hides the rest, because the question is almost always what is
outstanding. dropped is kept separate from done on purpose: closing something because you did it
and closing it because you will not are different pieces of history, and collapsing them loses the
one you are more likely to want back.
From the CLI
$ lanes link tasks list --profile personal --workspace local
$ lanes link tasks add "chase the invoice" --due 2026-09-01 --profile personal --workspace local
$ lanes link tasks update inv-chase --status blocked --profile personal --workspace local
$ lanes link tasks remove inv-chase --profile personal --workspace localWhat is recorded
Ids, titles, tags, statuses, and due dates are kept, because they are the shape of the work rather
than its content. Task notes are withheld, and tasks.list records nothing. See
the audit log.