Skip to main content

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.

PyPI Python License Tests


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)

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

search — Full-text search

todoing search "auth"
# (#4) [p0] {🏃} Refactor auth module

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/anomalyco/todoing
cd todoing
uv sync
source .venv/bin/activate
python -m pytest

License

MIT © Anomaly Collective

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

todoing-1.0.0.tar.gz (4.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

todoing-1.0.0-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file todoing-1.0.0.tar.gz.

File metadata

  • Download URL: todoing-1.0.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

Hashes for todoing-1.0.0.tar.gz
Algorithm Hash digest
SHA256 9132920abf337054de44787c21809798c699b9f6f562416af47114e45b4ee9fb
MD5 3c0ab8fc6d42b4af11651404a4ca5cc8
BLAKE2b-256 970f257f50b6719849fc8356ccc0aabb356a81fd048f53dd250fc86e24d04619

See more details on using hashes here.

File details

Details for the file todoing-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: todoing-1.0.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

Hashes for todoing-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c01b307c07d4e5303f1895bdd120b9b406190c8fed8033e0aca2a5fb0107b958
MD5 f49112ac945019a7232d06a5e4768601
BLAKE2b-256 81f88cc4ebf593dfbe005cc9bcd87ad5a2c0da4a6cdd5aa72e61f30353e254b2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page