Progress
A minimal CLI task manager: add, check, uncheck, rename, and remove tasks by stable ID, with a minimal output mode for the daily glance.
Why a terminal task manager
Task apps ship with windows, sync, and onboarding. I wanted one that lives in the shell: add, check, remove, and a glanceable daily view. progress is that tool, written in Rust.
A session
-- a day with progress --
~ $ progress --add "Write case study"▋
# TSK-1
~ $ progress --add "Review PR"▋
# TSK-2
~ $ progress --minimal▋
# essential info for today, pending tasks included
~ $ progress --task TSK-1 --check▋
# done
~ $ progress --task TSK-2 --remove▋
# gone
Design choices
- Stable IDs, not indexes.
TSK-1is a handle, not a position; renames and reordering never break references. The same reason databases don’t use row numbers as keys. - Two output modes.
--minimalfor the daily glance, detailed output when you need it: the CLI equivalent of collapsed vs. expanded. - Commands that read like sentences.
progress --task TSK-1 --checkis self-documenting in shell history and composes with everything else in a terminal.
Scope discipline
The README keeps the surface deliberately small, and that’s the point: it’s a tool, not a platform. The ID-based command surface leaves room to grow (due dates, priorities, export) without reworking the core. Shipping a tool that stays a tool is a feature.