Simple terminal todo manager built with Go and Bubble Tea.
Warning: 100% vibe coded.
Install directly from GitHub:
go install github.com/andreas-taranetz/td@latestOr install from a local checkout after cloning the repository:
git clone https://github.com/andreas-taranetz/td.git
cd td
go install .By default this installs the binary into $(go env GOPATH)/bin unless GOBIN is set.
For most setups that means:
~/go/binIf that directory is not already on your PATH, add it in your shell config file such as .zshrc or .bashrc:
export PATH="$HOME/go/bin:$PATH"Then reload your shell.
td --help
td
td vibe code features
td -t fix bugs
td -l
td -la
td -d 2
td -p -l
td -L fix bugs
td -g -ltdopens interactive modetd --helpshows helptd textadds a new item at the bottom (multi-word, no quotes needed)td -t textortd --top textadds at the toptd -b textortd --bottom textadds at the bottomtd -lortd --listlists open itemstd -laortd --list-alllists all items including done onestd -d <N>ortd --delete <N>deletes open item #N (matches numbering fromtd -l)td -portd --plainoutputs a plain numbered list — no colors, no timestamps, no header; useful for piping or agent usetd -Lortd --localuses the todo list of the current folder; the list is created by the first item you addtd --create-localuses the local list of exactly this folder and creates it on first add, even if a parent folder already has a local listtd -gortd --globaluses the global list, even if the current folder has a local listtd --remove-localdeletes the local list of the current folder (and its todos) from the file; the global list is untouchedtd --install-skillinstalls the agent skill vianpx skills(interactive agent selector)
After non-interactive add commands, the current open todo list is printed in a formatted, colorized view.
Open-only output omits checkboxes; -la includes them.
j/kor arrow keys: move selectiong: jump to topG: jump to bottomi: edit the current item from the beginninga: edit the current item from the endo: create a new item below the current itemO: create a new item above the current itemx,Enter, orSpace: toggle done/undoneJorShift+Down: move selected item downKorShift+Up: move selected item upd: delete the selected itemD: delete all done itemsu/Ctrl+R: undo / redo the last change (up to 50 steps, also in the overview); a message shows what was undone, or that nothing is left. The history is cleared when you switch lists or enter/leave the overviewy: yank (copy) the current item's text to the clipboard — the line flashes to confirmp: paste clipboard text as a new item below the cursorl: open all URLs found in the current item in the default browserh: toggle hidden vs visible done items and persist that preferencew: toggle text wrapping for long itemsCtrl+L: switch to the local list of the current folder (created on the first item you add)Ctrl+G: switch to the global listCtrl+A: overview of all open todos from every list, grouped into sections (current folder, global, other folders);x/Enter/Spacetoggles,ddeletes,i/a/o/Oedit or add items in the list under the cursor,J/Kmove an item within its list,Ddeletes done items of the list under the cursor,y/p/lyank, paste and open links,wwraps text,}/]]and{/[[jump to the next/previous list,Ctrl+AorEscreturns;htoggles hidden vs visible done items there too (same persisted setting as the normal view)Ctrl+X: remove the current folder's local list after ayconfirmation (an empty local list shows a hint for this)?: expand helpEsc: cancel editing or add modeq: quit
Install the td skill so AI agents (Claude Code, Copilot, etc.) can manage todos non-interactively:
td --install-skillWrites the embedded SKILL.md to a temp dir and hands off to npx skills for agent selection. Requires npx (Node.js) on your PATH.
- macOS:
~/Library/Application Support/td/todos.json - fallback:
.td.json
Folder-local lists live in the same file as the global list, in a folders section keyed by absolute directory path. There are no per-project files.
- If the current folder or one of its parents already has a local list,
tduses the nearest one automatically. The title shows the list's folder in local view, e.g.Todo: ~/projects/td. - The home directory never matches for its subfolders, so a list at
~doesn't capture everything below it. - Otherwise
tdopens the global list and shows a hint thatCtrl+Lcreates a local list for the folder. Ctrl+L/Ctrl+Gswitch between local and global while running. A local list is only written once you add an item.Ctrl+Xortd --remove-localdeletes the local list again.--create-localis for a separate list in a subfolder: it ignores parents and uses (or creates) the exact folder's list.-L/-goverride the automatic choice for non-interactive use.-Lwith no list in the current folder or any parent creates one for the current folder.

0 comments
log in to comment.