A plain-text personal task system. Either work from the command line or manually edit tasks.md; all other files are generated and managed by the CLI and scripts.
Zero dependencies — pure Python 3 stdlib.
- Clone the repo:
git clone https://github.com/YOUR_USERNAME/tasks-cli.git ~/tasks-cli- Copy the template to create your task file:
cp ~/tasks-cli/tasks.template.md ~/tasks-cli/tasks.md- Add this alias to
~/.zshrc(or~/.bashrc):
alias tasks='python3 ~/tasks-cli/bin/tasks.py'- Reload your shell:
source ~/.zshrc- Verify:
tasksIf the alias isn't active yet, invoke directly:
python3 ~/tasks-cli/bin/tasks.pyNote:
tasks.md,archive.md,week_overview.md, andweek_state.jsonare gitignored — your personal task data stays local and never gets committed.
tasks.md— source of truth (the only file you edit manually). Gitignored.tasks.template.md— starter structure to copy from.bin/tasks.py— unified CLI.archive.md— append-only completed task history (generated). Gitignored.week_overview.md— regenerated on everytasks sync. Gitignored.week_state.json— current week state and completed-this-week cache. Gitignored.com.devlog.tasksync.plist— optional launchd template (macOS).
- Just run "tasks" for a run down of usage flags and options.
Interactive guided mode:
tasks addInline mode:
tasks add "Description" -pj ProjectName -pr high -due 2026-03-20Optional flags:
-pj|--project PROJECT-pr|--priority high|med|low-due|--due YYYY-MM-DD-rep|--repeat Mon-Sun-st|--status hold|backburner
tasks syncBackfill/test for a specific date:
tasks sync --date YYYY-MM-DDtasks today
tasks overdue
tasks high
tasks med
tasks low
tasks hold
tasks backburner
tasks week
tasks next
tasks myproject # any project name — case-insensitive- Project:
#proj/<Project> - Priority:
p:high|med|low - Due date:
due:YYYY-MM-DD - Repeating:
repeat:weekly day:Mon|Tue|Wed|Thu|Fri|Sat|Sun - Status:
status:hold|backburner
- Non-repeating completed tasks (
- [x]) are archived toarchive.md. - Repeating completed tasks are reset back to unchecked so they recur.
tasks syncupdatesweek_state.jsonand rebuildsweek_overview.md.- Week rollover is automatic (no manual reset required).
tasks --base /path/to/your/tasks/dircp ~/tasks-cli/com.devlog.tasksync.plist ~/Library/LaunchAgents/
launchctl unload ~/Library/LaunchAgents/com.devlog.tasksync.plist 2>/dev/null || true
launchctl load -w ~/Library/LaunchAgents/com.devlog.tasksync.plistEnsure the plist runs:
python3 ~/tasks-cli/bin/tasks.py sync