v0.4.0

$ tsk · a task board in your terminal · herdr plugin, runs standalone

A task board
for you and
your agents

One board where you both plan, pick up work, and move it through ready, started, blocked, review, done. Agents move tasks. Only a human marks them done.

binary
tsk
store
~/.tsk/tsk.json
pane
78×24 · operable to 40×10
done is
a human verb
built with
Rust 1.96
runs on
Linux · macOS
license
MIT

Live demo

tsk
drag the divider · jk move · peek or slide · + capture · ? help

Two real layouts. Beside an agent, tsk is the 78-column board herdr opens by default, and peeks. Give it the whole terminal, or drag the divider past 110 columns, and the same board becomes the four-stage slider: slides the task page in. The demo takes bare s d b o because browsers keep the control chords. In the app, every mutating verb needs Ctrl.

01 status

Agents move work. You call it done.

Five states shared by everyone on the board. Today you set them from the board, and agents capture and step work from the CLI; pick-up and hand-off are next. done is the one verb reserved for a human, and checking every step never flips it.

  1. ready on deck ctrl+o
  2. started in motion ctrl+s
  3. blocked waiting ctrl+b
  4. review check it :
  5. done in the drawer ctrl+d
ON DECK T14 Ship the landing page tsk · 2m
you press ctrl+s started
  • next
  • assign a task to an agent
  • start the agent from the board
  • agents move status through the CLI
  • in progress · not in the current build
02 why

Not another to-do app.

tsk is the shared surface between a developer and the agents working beside them. It lives in the pane you already have open. No browser tab, no sync service, no form takeover.

Capture never leaves the list.

+ opens one line on the status row. Enter saves, Shift+Enter keeps the line open, Tab expands onto the task page. Two tokens set project and thread from inside the title.

+ Fix the flaky bench !p tsk !t ci
enter save · shift+enter stay · tab page · esc close

Nothing completes itself.

Every mutating verb needs Ctrl. Bare letters do nothing, so a stray keystroke in a focused board cannot finish or delete work. Undo is one chord away.

enter open · ctrl+d done · ctrl+b block · : palette
ctrl+x delete · ctrl+u undo · ? help · + capture

One store. Everyone at the table.

You, herdr's quick-capture overlay, and your agents edit the same ~/.tsk. An agent drops a plan in as JSON and the board shows it on the next tick.

$ cat plan.json | tsk add
{ "created": [T33, T34, T35], "existing": [], "failed": [] }
$ herdr plugin action invoke quick-capture --plugin herdr-tsk
03 board

One list, ordered by urgency.

Sections are computed, never navigated. Home is three tabs. desk is your own space for planning, loose ends, and future projects. projects holds the repos you and your agents work in. threads follows work that crosses them. Give the board 110 columns and it becomes a slider.

  1. 1
    Home tabs. 1 2 3 switch desk, projects, threads. P focuses one project and hides them.
  2. 2
    IN MOTION. Everything you have started, from any project, always on top.
  3. 3
    A row. Status glyph, a dim T-number you can click to copy, the title, then project and age.
  4. 4
    Peek. Below 110 columns, or a click shows up to five wrapped note lines under the row. Wide, slides the task page in instead. Enter opens the full page either way.
  5. 5
    Thread headers. Open desk work groups under dim #name headers with a count. Unthreaded rows follow.
  6. 6
    Done drawer. Finished work stays out of the way. z pulls the drawer open.
  7. 7
    Verb bar. The chords that apply right now. Below 78 columns it folds into a compact board that still works at 40×10.

Wide: the four-stage slider.

At 110 columns and up, focus and geometry are the same thing. One rule, one footer, no colour.

  1. Board
    full width · board has focus
  2. Split
    board 40%, task page beside it · board has focus
  3. Rail
    dim 32-column rail, task page · task has focus
  4. Page
    full width · task has focus

one stage right one stage left Enter jump to the page and remember where you were Esc go back there

04 keys

Learn it in a minute. Keep it in your hands.

Navigation is bare. Anything that changes a task takes Ctrl. Esc always closes one layer.

jkmove
Enteropen the task page
peek · slide the stage when wide
+capture
ctrl+sstart · reopen if done
ctrl+ddone
ctrl+btoggle blocked
ctrl+oreopen
ctrl+eedit title
ctrl+xctrl+udelete · undo
:command palette
?help card
zdone drawer
123desk · projects · threads
Pproject picker
Escclose one layer

Full chord tables for the board, task page, and capture form live in the keys reference.

05 cli

Built for agents from the first commit.

Headless add, list, and steps against the same store. An agent drops a plan in as JSON and it lands as ready tasks. It can check off steps and report progress. It cannot mark anything done.

$ tsk add -t "Draft release notes" -p tsk --thread release --json
{"outcome":"created","id":"5c1e…","number":32,"title":"Draft release notes","project":"tsk"}
$ tsk steps T32 add "Write the failing test"
added 9f Write the failing test
$ tsk list T32
READY
 - 32 Draft release notes #release
   [ ] 9f Write the failing test
$ cat plan.json | tsk add
{ "created": [...], "existing": [...], "failed": [] }

Exit contract

0listed, created, existed, or applied
1one or more item refusals. Retry the failed subset.
2usage or parse error. Nothing persisted.
3store I/O. Indeterminate. tsk list before retrying.

Adds are idempotent on title, project, and thread. --json is flat and stable. CLI reference →

06 install

Build it. Open the board.

One binary, built from source. State lives in ~/.tsk whether you run it bare or inside herdr.

$ git clone git@github.com:smarzban/herdr-tsk.git
$ cd herdr-tsk
$ cargo build --release
$ ./target/release/tsk

Add target/release to your PATH and tsk add -t "First task" from anywhere. The board reads it on the next tick.