tiny tidy todos = tody
Path-aware terminal task manager for global and project-local todos.
curl -fsSL https://tlo3.com/tody-install.sh | sh
tody --versionIf tody is not found, add this and restart your shell:
export PATH="$HOME/.local/bin:$PATH"Start using it:
tody add "Buy groceries" # global task (when not in a project)
cd ~/projects/my-app
tody add "Fix login bug" # auto-detected as local (you're in a git repo)
tody add "Read docs" --global # explicitly global, even inside a project
tody # interactive picker scoped to current project
tody list # pending tasks for current project
tody list --global # pending global tasks only
tody list --all # everything across all projects
tody list --done # completed tasks| If you want to... | Run | Result |
|---|---|---|
| complete a task from a picker | tody |
interactive prompt scoped to current project |
| add a task (auto-scoped) | tody add "Title" |
local when in a git repo, global otherwise |
| add an explicitly global task | tody add "Title" -g |
task is visible everywhere |
| add an explicitly local task | tody add "Title" -l |
task is tied to the current project |
| see this project's tasks | tody list |
local tasks for the current project only |
| see global tasks | tody list -g |
global tasks only |
| see everything | tody list -a |
all tasks across all projects |
| see completed tasks here | tody list -d |
completed tasks scoped to current context |
| see all completed tasks | tody list -a -d |
all completed tasks across projects |
| mark a task completed by id | tody done <id> |
marks one task as done |
| edit a task's title | tody edit <id> "New title" |
updates the task title |
| undo the last completion | tody undo |
restores the last completed task to pending |
| permanently delete a task | tody rm <id> |
removes one task after confirmation |
Other useful commands:
tody log: recently completed activity (project-scoped by default)tody log --all: completed activity across all projectstody prune: remove tasks tied to deleted folderstody update: self-update from GitHub releases
- Project-scoped by default: Inside a git repo, tasks are automatically local to that project.
- Smart auto-detection: No flags needed —
tody addandtody listjust work in context. - Zero config: Works immediately with a local SQLite database.
- Single binary: No runtime dependencies.
- Fast CLI flow: Interactive picker plus explicit commands.
- Developer-friendly:
edit,undo, project-scopedlog.
Every task is either:
- Global: visible from any folder. Created with
-gflag, or auto-detected outside a git repo. - Local: tied to a project path (nearest git root). Auto-detected when inside a git repo.
When you cd into a project and run tody, you only see that project's tasks.
Use tody list -g for global tasks, or tody list -a to see everything.
Config file (macOS/Linux): ~/.config/tody/config.toml
default_view = "auto" # auto | merged | local | global
color_local = "bright_magenta" # ANSI color name
color_global = "bright_cyan" # ANSI color nametody config set default_view local
tody config get color_local| Item | Path (macOS) |
|---|---|
| Database | ~/Library/Application Support/tody/tody.db |
| Config | ~/.config/tody/config.toml |
Paths are resolved via dirs, so Linux and Windows use their platform conventions too.
Install a specific release:
curl -fsSL https://tlo3.com/tody-install.sh | TODY_VERSION=2026.2.1 shInstall to a custom location:
curl -fsSL https://tlo3.com/tody-install.sh | BINDIR=/usr/local/bin shInstall directly from source (Rust 1.85+):
cargo install --git https://github.com/treyorr/tody.gitOr build from a clone:
git clone https://github.com/treyorr/tody.git
cd tody
cargo install --path .Requires mise or Rust 1.85+.
git clone https://github.com/treyorr/tody.git
cd tody
mise install
mise run cimise run fmt
mise run lint
mise run test
cargo run -- add "test"tody uses CalVer: YYYY.MM.COUNTER.
See CONTRIBUTING.md.
