taskstaka

Help

The model

A task is one thing to do. It has a title, a context (work or personal), one stored status, and a parent if it has one. Every task is a markdown note in ~/todo/notes/; ~/todo/index.md is the generated tree, readable in Obsidian.

Nesting means "first this." A subtask is a prerequisite: something that must finish before its parent can. To bake an apple pie from scratch you must first invent the universe, so "invent the universe" goes under "bake the pie". Break work down from the end result backwards; you do the deepest open leaf first.

A story spawns subtasks below it; while they are open the story is blocked and you see the subtasks. Ship the new site ▽ blocked · look down Renew the cert Point DNS at Cloud Run Write the launch note
A story spawns subtasks. While they are open, the story is blocked and out of your way.

Siblings mean "and also this." Everything under one parent is independent and can be in flight at once; the parent finishes when all of them do. Siblings do not depend on each other. If you want to write "after the one above", nest it instead.

You store a status; taskstaka computes the rest. A task with open subtasks is blocked (▽) and stays out of your way. Its last subtask closes and it comes back resurfaced (↑ ready) at the top of Next. In a flat list you had to remember to go back for it.

The last subtask closes and the story comes back to the top of Next, flagged ready. NEXT Ship the new site ▽ blocked by 1 ↑ ready Reply to the accountant Write the launch note ‹ Ship the new site
When the last subtask closes, the story comes back to the top of Next, flagged ready.

Next is what you have to do now. The plate on top is the task in hand, the last one you started, with its notes. With nothing started it shows what is up next: the first ready row you have not picked up yet. Under the plate, each story is a stack: the rows you can do right now, then … N later, everything still required and why not yet.

A story as a stack: ticking the plate in hand slides the next prerequisite into your hand, until the story itself is ready. Renew the cert ▶ in hand Ask Priya for the DNS record ▶ in hand Restart nginx ▶ in hand so that Ship the new site ↑ ready
Next shows the story as a stack. Tick the plate in hand and the next prerequisite moves into it.

The hand holds the task you are on. start takes a task in hand. done on it starts the next one in the same story: the parent if that was its last prerequisite, else the next sibling. put-back empties the hand and a different ready task comes up. First I need to… pushes a new prerequisite straight into your hand and pauses the one above it.

Waiting is on a person, and each wait carries a follow-up date (two days by default). chase records that you poked them and shortens the next one. reply records what came back: answered, declined, partial, or redirected to someone else. unblock means they answered and the task is back in your hand. A story stuck on a person shows ✉ Bo · 4d: who, and for how long. At 9:00 you get one digest of the people you are waiting on.

Someday parks a task: it does not block its parent and does not rank, but the parent cannot close until it is done or dropped.

Stored statusmeans
todo / doingnot started / started
waitingon a person, with a follow-up date
somedayparked
done / droppedclosed
Shown asmeans
▽blocked: has open prerequisites below it
✉ Priya · 3d · 2×waiting on a person, for how long, how many chases
☐actionable: open, unblocked, not parked, yours to do
↑ readyresurfaced: its last prerequisite closed
▶ in hand / ▶ up nextthe plate
🤖an agent's step, listed because you prompt it and check the result

The CLI

taskstaka next                                  # what do I have to do now?
taskstaka add "Get DNS address"
taskstaka add "Create the zone" -p <id>          # a prerequisite under <id>
taskstaka add "Log in first" -p <id> --start     # push: goes straight in hand
taskstaka start <id> · done <id> · drop <id>
taskstaka put-back <id>                         # out of your hand without finishing
taskstaka wait <id> Sam                         # waiting on someone (follow-up +2d)
taskstaka chase <id> pinged again
taskstaka reply <id> redirected --to Bo "Bo owns DNS"
taskstaka unblock <id>                          # they got back to you
taskstaka waiting                               # who am I waiting on?
taskstaka someday <id>                          # park it
taskstaka touch <id> pinged Sam                 # journal a note
taskstaka edit <id>                             # open the note in $EDITOR
taskstaka quick "renew the cert #devops @Priya +3d"
taskstaka tui                                   # the always-on panel
taskstaka status · stop · restart

Ids are six characters; any unique prefix works. --json on anything gives machine output. Context filters and does not rank: next -c work.

The web

http://127.0.0.1:7407/. The sidebar has the contexts and the views: Outline, Next, Waiting on, Someday, Done, Nudges. Outline is a nested checklist: type a line, Enter for the next, Tab makes it a subtask, ⇧Tab outdents, tick the box to finish (a parent's box finishes its subtree). End a line with @Name to wait on them, +3d for the follow-up, #project to set the project. Bake a pie > Make the filling > Buy apples captures a whole stack in one line. n opens quick add anywhere.

The Outline view: a nested checklist with a project pill and a doing chip

Next shows the plate on top with editable notes and done, put back, first I need to… and wait actions, then each story as a stack. Hover a row for start and open; open slides in a pane with properties, subtasks, notes and history. Esc closes it. The pages work at half width and on a phone.

The TUI

taskstaka tui is the always-on panel, with five views on 1–5: Next, Outline, Waiting on, Someday, Nudges. On Next the plate sits in a box at the top: d done, p put back, i first I need to…, w wait on someone, l unfolds a story's later list. In the Outline ⇧ with the arrows rearranges, A adds under, h shows completed. Waiting on groups by person: f chase, u unblock. ? lists the keys. It refreshes live as other surfaces change the tree.

The menu bar

On macOS, taskstaka-tray shows the plate in the menu bar: ▶ title for the task in hand, ○ title for up next. Its menu reads like the plate: the title, its notes, then Done and Put back or Start, each row you can do now, Quick add… ⌥Space and Open taskstaka. ⌥Space toggles the quick-add panel from any app; Esc or clicking elsewhere hides it. Install it with taskstaka setup macos (see Install).

Agents

taskstaka setup claude gives Claude Code the MCP server and a skill that turns any multi-step plan into tasks: your manual steps with the exact command or draft message in the notes, its own steps tagged agent and closed as it goes, and anything that depends on a person created waiting on them. The MCP tools are plan, next, waiting, list_tasks, tree, get_task, add_task, set_status, update_task, move_task, touch, chase, record_reply, projects and nudges. The agent drafts any message into the task's notes; you send it.

A daily routine with a messages MCP alongside it:

For each item in taskstaka.waiting(due=true): open waiting_ref if set, else search messages with the person for the task title. If they replied, call record_reply with a one-line summary. If silent, call chase with dedupe=today and draft a short follow-up for me to send.

Any MCP client can use the server: it is taskstaka mcp over stdio.