Tasks that live in your repo. No servers. No databases. Just git.
todoing is a local, file-based task manager built for the AI era. It stores every task as a markdown file with YAML frontmatter — fully git-trackable, editor-friendly, and agent-native. No API keys, no cloud, no lock-in.
If your ideas, plans, and to-dos should live next to your code, todoing is for you.
| todoing | GitHub Issues | Linear | Notion | Todoist | |
|---|---|---|---|---|---|
| Stored in-repo | ✅ | ❌ | ❌ | ❌ | ❌ |
| Git-trackable | ✅ | ❌ | ❌ | ❌ | ❌ |
| Offline-first | ✅ | ❌ | ❌ | ❌ | ❌ |
| AI-agent-friendly CLI | ✅ | ❌ | ❌ | ❌ | ❌ |
| Zero setup | ✅ | ❌ | ❌ | ❌ | ❌ |
| Markdown native | ✅ | ❌ | ❌ | ❌ | ❌ |
uv tool install todoing # recommended: isolated environment
pipx install todoing # or via pipx
pip install todoing # or classic pipRequires Python 3.11+.
todoing add "Ship the MVP"
todoing add "Write integration tests" -l testing -s in_progress
todoing ls
# (#2) [testing] {🏃} Write integration tests
# (#1) [] {⏳} Ship the MVPThat's it. A .todoing/ directory is created in your repo root. Add it to git. You're done.
Each task is a markdown file in .todoing/tasks/. A JSON index makes listing and searching instantaneous. Everything is plain text — your editor, grep, and git diff all work natively.
.todoing/
tasks/
1.md # markdown with YAML frontmatter
2.md
...
index.json # auto-rebuilt, never committed alone
---
id: 1
title: Ship the MVP
added_at: 2026-05-01T10:00:00
status: in_progress
labels: [p0, feature]
---
Long-form description here. Supports
multi-paragraph markdown body.todoing add "Refactor auth module" -l p1 -l backend -s todo -b "Current approach is brittle."
# (#4) Refactor auth moduletodoing ls # all tasks, newest first
todoing ls -n 5 # latest 5
todoing ls -s in_progress # filter by status
todoing ls -l p0 -l backend # filter by labels (AND)
todoing ls -q auth # search by title/body/labels/status
todoing ls -r # oldest firsttodoing see 4 # raw markdown to stdout
todoing see "#4" # # prefix is optionaltodoing status 4 in_progress
todoing status 4 doneStatuses: todo ⏳ , in_progress 🏃 , done ✅ , cancelled ❌
todoing label 4 +p0 # add p0
todoing label 4 -- -backend # remove backend (-- separator needed)
todoing label 4 +bug --clear # clear all, then add bugtodoing body 4 "Full rewrite of the auth flow." # replace body
todoing append 4 "Also update token refresh logic." # append to bodytodoing delete 4 --force # skip confirmationtodoing edit 4 # humans only; AI agents use body/appendtodoing reindex # recovery command; rarely neededtodoing is designed for AI coding agents to drive via CLI. Commands are single-shot, output is parseable, and the $EDITOR-based edit command has scriptable alternatives (body, append, status, label).
todoing ls -n 5 # agent checks current work
todoing status 3 in_progress # agent starts a task
todoing append 3 "Fixed in a1b2c3d" # agent records progress
todoing status 3 done # agent completes taskNo prompts, no TUI, no friction.
todoing tracks its own development. Every feature, fix, and idea for todoing itself is a task inside .todoing/tasks/. The tool builds the tool.
git clone https://github.com/bllyanos/todoing
cd todoing
uv sync
source .venv/bin/activate
python -m pytestMIT