task.md
Most task trackers assume a human is driving. But when an LLM agent picks up a task, it needs structured metadata -- priority, status, completion criteria -- not a Jira ticket behind an OAuth wall. And when a human reviews that same task, they don't want to parse JSON. They want to read a file.
taskmd makes tasks that work for both. Each task is a markdown file. All metadata lives in the filename. The body is free-form markdown. The filesystem is the data store, git is the audit trail -- no database, no config, no coordination server.
tasks/
34001-p1-done--initial-setup.md
34002-p2-ready--add-feature.md
34003-p3-blocked--waiting-on-api.md
Three properties make this work:
- Filesystem-native. Tasks are files. Create them with your editor, move them with
mv, search them withgrep. Every tool you already have works. - Git-native. Status changes are renames, which are commits. Branches get their own task state. Merges resolve naturally.
git logis your audit trail. - Agent-native. When taskmd detects it's running inside Claude Code, Cursor, Codex, or a dozen other agents, it automatically switches to structured JSON output -- same files, same commands, zero configuration.
Install
pip install taskmd
Or run without installing:
uvx taskmd validate
uvx taskmd list
Quick start
taskmd init # create tasks/ with a template
echo "Fix the login redirect loop when JWT is expired." | taskmd new --slug fix-login
cat body.md | taskmd new --slug add-oauth --priority p1 # body from file
taskmd status 34042 in-progress # change a task's status atomically
taskmd validate # check filenames for consistency
taskmd fix # auto-repair legacy IDs and duplicate IDs
taskmd list # list tasks with metadata
taskmd list --status ready --priority p0 # filter to what matters
taskmd new is the recommended way to create tasks — it allocates the ID, formats the filename, and writes the file in one atomic step. The body is required on stdin; a task with no description is a placeholder that pollutes triage. taskmd next exists for integrations that need just an ID string, but it's a sharp edge (two concurrent callers can receive the same ID).
All commands auto-detect a single immediate child directory containing _TEMPLATE.md (for example ./tasks or ./tickets) as the default directory. Pass a path to override.
Agent mode
When run inside an LLM coding agent, taskmd auto-detects the environment and switches to JSON output. The agent gets structured data; the human reading the same file gets markdown. No separate "agent API" to maintain.
taskmd --agent validate # structured JSON envelope
taskmd --agent --help # self-documenting schema for agents
taskmd --agent --compact --help # minimal schema (fewer tokens)
Detection is automatic for Claude Code, Cursor, Codex, Windsurf, Aider, Cline, Amazon Q, Gemini Code Assist, Cody, and any tool that sets AGENT=1.
Task file format
Filename: DDNNN-pX-status--slug.md
# Task Title
## Summary
What needs to be done.
## Done When
- [ ] First criterion
- [ ] Second criterion
The filename is the only source of truth. The body is free-form markdown.
Statuses: ready, in-progress, blocked, done, wont-do, brainstorming
Priorities: p0 (critical) through p4 (polish)
To change status: taskmd status <id> <new-status> renames the file. It refuses to clobber an existing target filename and rejects invalid statuses up front.
Task IDs
IDs are 5-digit numbers (e.g., 34042). The first two digits are a hash of (machine_identity, tasks_directory_path) mod 100. Different machines and different worktrees on the same machine land in different buckets, avoiding ID collisions without coordination. Birthday-50% collision point is ~12 concurrent worktrees.
Set TASKMD_MACHINE_ID to override the machine-identity input (any string; replaces hostname in the hash). Useful in ephemeral containers where the hostname is constant across sessions.
Library
taskmd is also a Python library -- the CLI is a thin wrapper around it.
pip install taskmd
from taskmd import validate, fix, next_id, list_tasks
result = validate("tasks")
if not result.ok:
for err in result.errors:
print(err)
tasks = list_tasks("tasks")
for t in tasks:
print(f"{t.id:5s} {t.priority} {t.status:12s} {t.slug}")
n = next_id("tasks")
print(f"Next task: {n}")
Use from a PEP 723 script
#!/usr/bin/env -S uv run
# /// script
# requires-python = ">=3.11"
# dependencies = ["taskmd"]
# ///
from taskmd import validate
result = validate("tasks")
if not result.ok:
print(f"Task validation failed: {len(result.errors)} errors")
License
MIT
Release files for taskmd 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| taskmd-1.3.0.tar.gz | 55.3 kB | Details |
Built distributions (wheels)
Total release size: 13.9 MB
Release files / taskmd-1.3.0.tar.gz
| Download URL | taskmd-1.3.0.tar.gz |
|---|---|
| Size | 55.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eafe2aa42d86a3e51431a70171a9afa0f5890f56a54220b4535b5dcc1cb8ad18
|
|
BLAKE2b-256 checksum How to use checksums |
4a0a5dc7edb37b80f153fbc639852eee590edb464bbfacb1ca691ad8dba6aa4b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | taskmd-1.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Linux glibc 2.17+ x86-64 PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
2f3c078d4e66259010f122ccbb4eec8317230d5c9d433fd549cc86fa7eb7122c
|
|
BLAKE2b-256 checksum How to use checksums |
22c7944e9781aa6e21f99d200c9b1025d2ff2943fc65ca412c2d9f060f7c7854
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | taskmd-1.3.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.15 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
72214a66ffd5b05f6d1d99e03dde095b05ab4eb0cc57ed8e17cd414d24976cbd
|
|
BLAKE2b-256 checksum How to use checksums |
7281f0193d2f0b128939bb55b45695a91f0e5b9baf508de50aa6574dc93c55c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp314-cp314-win_amd64.whl
| Download URL | taskmd-1.3.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 881.1 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
62d4f134ee15dddb71aa04812fb3ccaffc55e797ef8b7403348143fe2b9e8437
|
|
BLAKE2b-256 checksum How to use checksums |
e5305227b516c0292b62708a3124927b7ee202642bcdc900c28cb0c04c28b7d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | taskmd-1.3.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
97ab829b18e2304ae5d51fe369dc890ffa3eb2376262fc8fe67d58309484dc6a
|
|
BLAKE2b-256 checksum How to use checksums |
497c52e75de8fc73044e5a6b4f47fde16721b6b57312bec0f22b6da3b203beae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | taskmd-1.3.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 943.2 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
05d872d4023b37fd1ba721731445c214c83aa03850e6bd10e5344886fa0928f3
|
|
BLAKE2b-256 checksum How to use checksums |
469e3e67806b23c39baa69903ee1a020ea9469c94024a4f1d3edb00fd7b62e1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp313-cp313-win_amd64.whl
| Download URL | taskmd-1.3.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 881.2 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bb291f2e2ce036db4d9d129b70ea41c3f5d3eca5e579b3e0440eec94cbae4305
|
|
BLAKE2b-256 checksum How to use checksums |
723e3ef7a1690a0018e7ed79c13733cf6d2ac6ecacce8a6bfd8139204e182235
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | taskmd-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
4ab91826e2b0a08bdac860af9b57308c4f84d100f48a73aa5e55e66acd1c2a49
|
|
BLAKE2b-256 checksum How to use checksums |
9ebaec3fc7d2127df1c167743bde31f9599d681425105a95ac3e1ee96280c28a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | taskmd-1.3.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 943.1 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5c8f794e04a5bdc945607fd5c46282ab65095078859680a1f98b70228a19946f
|
|
BLAKE2b-256 checksum How to use checksums |
295d3504987346580b68f16b165f98f53dd15f9ba9691f9cf94c23c92b2f7bee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp312-cp312-win_amd64.whl
| Download URL | taskmd-1.3.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 881.6 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
19fe1e54281754c3e043b95807944608b730b9b471bb5637ef7fe93abfe36aca
|
|
BLAKE2b-256 checksum How to use checksums |
89338fba38f4da6911cad13f2f43ed97967c6fa9d0512ca8ea7e9d2e8a1b3aec
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | taskmd-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
3f698a9a39670c26ba161c93a6499c7549d63ea6af18c69ac2aae61b42ba0733
|
|
BLAKE2b-256 checksum How to use checksums |
4c917f3005ab080fe0071e527e915c24b90a3c7f8143428238eb3a2ff9019850
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | taskmd-1.3.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 943.8 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
039aee12289433af8dfaa7f642d60e9b10889bcc2bfc2ab910398d655813f649
|
|
BLAKE2b-256 checksum How to use checksums |
f0870160ac512e47b222c9d67875d4f2efe2004f12963dc3ce8e3f9563aa2cab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp311-cp311-win_amd64.whl
| Download URL | taskmd-1.3.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 883.1 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d7ea76d8135497669b96ba488fd06cb17a5fe93bfc0ea85660cb9048377f5916
|
|
BLAKE2b-256 checksum How to use checksums |
a5b17b042a35c879e57103686c58add28b9fe8a4cb2e9d2216fa65374d0f8fd0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | taskmd-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 1.1 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
d831bdc70ec1516cf78cff2981f90b8976beca99222bfe46b0937404d7d3b231
|
|
BLAKE2b-256 checksum How to use checksums |
de3717bebc219388d496a526e7c0e5e42fa8a2d8c465153a39ba4bff3d6fc9ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency logRelease files / taskmd-1.3.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | taskmd-1.3.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 945.9 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1e13c5e30757f2da3255f0f15ccfbd331a500634df7b22ee1f9159275f54993b
|
|
BLAKE2b-256 checksum How to use checksums |
daf77c21a232f6fcf8f92a1ec41ab576b09142ab9f3845be0898c4435b2b0b9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 9, 2026.
Transparency log