Local, git-friendly task manager for AI agents and humans
Project description
todoing
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.
Why todoing?
| todoing | GitHub Issues | Linear | Notion | Todoist | |
|---|---|---|---|---|---|
| Stored in-repo | ✅ | ❌ | ❌ | ❌ | ❌ |
| Git-trackable | ✅ | ❌ | ❌ | ❌ | ❌ |
| Offline-first | ✅ | ❌ | ❌ | ❌ | ❌ |
| AI-agent-friendly CLI | ✅ | ❌ | ❌ | ❌ | ❌ |
| Zero setup | ✅ | ❌ | ❌ | ❌ | ❌ |
| Markdown native | ✅ | ❌ | ❌ | ❌ | ❌ |
Install
uv tool install todoing # recommended: isolated environment
pipx install todoing # or via pipx
pip install todoing # or classic pip
Requires Python 3.11+.
Quickstart
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 MVP
That's it. A .todoing/ directory is created in your repo root. Add it to git. You're done.
How it works
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.
Commands
add — Create a task
todoing add "Refactor auth module" -l p1 -l backend -s todo -b "Current approach is brittle."
# (#4) Refactor auth module
ls — List tasks
todoing 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 first
see — View a task
todoing see 4 # raw markdown to stdout
todoing see "#4" # # prefix is optional
status — Change status
todoing status 4 in_progress
todoing status 4 done
Statuses: todo ⏳ , in_progress 🏃 , done ✅ , cancelled ❌
label — Add or remove labels
todoing label 4 +p0 # add p0
todoing label 4 -- -backend # remove backend (-- separator needed)
todoing label 4 +bug --clear # clear all, then add bug
body / append — Edit descriptions
todoing body 4 "Full rewrite of the auth flow." # replace body
todoing append 4 "Also update token refresh logic." # append to body
delete — Remove a task
todoing delete 4 --force # skip confirmation
edit — Open in $EDITOR
todoing edit 4 # humans only; AI agents use body/append
reindex — Rebuild the index
todoing reindex # recovery command; rarely needed
Built for AI agents
todoing 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 task
No prompts, no TUI, no friction.
Self-dogfooding
todoing tracks its own development. Every feature, fix, and idea for todoing itself is a task inside .todoing/tasks/. The tool builds the tool.
Development
git clone https://github.com/bllyanos/todoing
cd todoing
uv sync
source .venv/bin/activate
python -m pytest
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file todoing-1.1.0.tar.gz.
File metadata
- Download URL: todoing-1.1.0.tar.gz
- Upload date:
- Size: 4.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f02249119cf7bd919a316d48259686d64ed2ec648febb5566e26e4479e01ceee
|
|
| MD5 |
44a9c08c69d1522b9d60bbb1c573661c
|
|
| BLAKE2b-256 |
51bb5de3f37e06c07438178fb8636d470765b074eea9ea17654eed810dc682da
|
File details
Details for the file todoing-1.1.0-py3-none-any.whl.
File metadata
- Download URL: todoing-1.1.0-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90b967b99e0f2084b1e52c46776d8f882378500183157858fa2ec25053626e70
|
|
| MD5 |
11810e1904add64dea160bb2cc739337
|
|
| BLAKE2b-256 |
ef9a0660e302fbbd08f6886335e92d8cd1ed1db5f5af81b101716eba66da8091
|