Skip to main content

Markdown-native task management for developer projects

Project description

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 with grep. 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 log is 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 ./tasks or ./taskmds 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 digit is derived from the machine's hostname, the second from the tasks directory path. This avoids ID collisions across machines and git worktrees without any coordination.

Set TASKMD_MACHINE_ID=0 to pin the first digit on your primary machine.

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

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

taskmd-1.0.0.tar.gz (51.2 kB view details)

Uploaded Source

Built Distributions

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

taskmd-1.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

taskmd-1.0.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

taskmd-1.0.0-cp314-cp314-win_amd64.whl (876.2 kB view details)

Uploaded CPython 3.14Windows x86-64

taskmd-1.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

taskmd-1.0.0-cp314-cp314-macosx_11_0_arm64.whl (939.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

taskmd-1.0.0-cp313-cp313-win_amd64.whl (876.2 kB view details)

Uploaded CPython 3.13Windows x86-64

taskmd-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

taskmd-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (938.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

taskmd-1.0.0-cp312-cp312-win_amd64.whl (876.6 kB view details)

Uploaded CPython 3.12Windows x86-64

taskmd-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

taskmd-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (939.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

taskmd-1.0.0-cp311-cp311-win_amd64.whl (878.4 kB view details)

Uploaded CPython 3.11Windows x86-64

taskmd-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

taskmd-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (941.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: taskmd-1.0.0.tar.gz
  • Upload date:
  • Size: 51.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for taskmd-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8526458084ff0533a3dc249887d4307c809aed7782df4f6765095f9a2960565b
MD5 b7d3437fd8618add16e4c5d4af2a942c
BLAKE2b-256 f73847ab1396b54cdbea96e2620d3d742de4ddfe61919118c056e8ba04ef0463

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0.tar.gz:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 99c937563340a32f346386a8ea46f3bf13ee46121eb6bbe77277e0ac8b4c5ad9
MD5 157cb8ea7149467e00286dee79ee0595
BLAKE2b-256 9c53bea7b997864e2fe7bd6b82e01279858fc2e07928e6112a5cc705716b51c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 35e809f59f5c67304316ad981ec6240727f64c25801242e8f919ea77dba44221
MD5 dd3f27fe701fe707300f75b4b9b98d7e
BLAKE2b-256 9b0e56c6ed04086afc60d795d5ed7f5b23f4cc900305cdef4d48a7ab858c7df5

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 876.2 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for taskmd-1.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 be3570e3e46c8f0a9c990806ed7d0c75f9e9ff89e82c22d59686b1c1e58e1ed2
MD5 2f7ad139bcfc6968018ff669c6b187ea
BLAKE2b-256 57d6a8d0832cfd1773be9dbb7befd2f495a35f51b5777ddf6d14a7a0d9bb4b03

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9459df3173a5e7c6dbcd9ad376b923578aba95c2e256649c18c9cf14469eeec8
MD5 f0c477c99c11db91663473946ed4b894
BLAKE2b-256 68ff82937b9dafb5c603d0a847b7dc43878ee5eb5b47f74002b241e65fcd8660

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9acb2a20758b25c9de13cdd8a57fa84b3e82c11c19be4f3304654c13c0af2410
MD5 15e27bbf33ceba7fa489834bc0a3ce9e
BLAKE2b-256 985ffc6d170888b24476786bdd56ddbb909bd05d1c8be6cfc2ab85860727e6db

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 876.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for taskmd-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 011046883b080e0e09bcd87edbfa64aba4eea2e9116fbb73efce03aaf6221064
MD5 8a8ef1b7d25110095f862c194aa99506
BLAKE2b-256 032df926a072ca69a48345f8e454cc15e9c602ba406255b312e64f7af898e9c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9291e08ab12bb9a39484e0aa5c7c79c16600258a609d61c280505d8dc5cda464
MD5 22886699602b33923b49f60df2504f5f
BLAKE2b-256 0c3795891799fd05f992f79e5872a686a6fcf2a236cd6433155a327de7d20c28

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aa3becf03d14349be7a27597e3d48abfa0b9daf6f340f29a2d7bdb14648fed16
MD5 ea2b673f183446948701959dc2a02d2e
BLAKE2b-256 fba08a10adf58a18b576c7b0abfca62ec9389fc8e19a9dd16fc868a847e26a0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 876.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for taskmd-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 67704967ee5c1d2f0e1d7733e52e2ca3586ad72c63ca01451e6cf3f786946f35
MD5 1680df51568ef34bb21f02259854df9c
BLAKE2b-256 7f21381a9cfb9297003027e8fb8174fc5942dbed46f63348a71482a5e510feae

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a865e6ecfee7ad7a0ba7142f7bf1539a44cf4e8a80bb94fb436d39f2b232d1ae
MD5 cc9bcc795b93a641937ff3ff191700d9
BLAKE2b-256 50993c5a9f9431e13607fd7dea533e0495b78119ecc28d1af15bbc5265e5c248

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 79a62292ece3b7d844ab67d35b015ee13c0d6b8528de2941ef967e943d97d702
MD5 c1d9e79674a647825796c16b36949337
BLAKE2b-256 4e87d9dab8311ca506dd672b3e54c6a9dc9abf760b548eb516917ae64bf9a9ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 878.4 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for taskmd-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 de5392a3d3a15741e68a1b2b1be61b02596babb89fb44f67fffd7ef004cfe022
MD5 4100afc702377eca399653716fcf1c0e
BLAKE2b-256 af7d1b752d7a04318500f80728acbd13b25d50b52a0ab9d5d0f43582fda89cf9

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 68ed9e3d8fcbd5823495f2516e72e7783560213b538359d25b251ac1b98417ec
MD5 37d511230d69d9a1ecbfd3d54ccb01fa
BLAKE2b-256 e8e3329893ddf35d841d805d6969ad949b32728a48e9f757f4d2a7f6cdda250f

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file taskmd-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 23928b5043e084ac1676f7b84c547c90cd7c472a434534560b579ed2331d6578
MD5 29e174ae4b0c2d0cdfc68e0868febd32
BLAKE2b-256 fd25adcecd95fd57ff75c571349a5d42a04c1dc3229a73acdd700e705e5d3c89

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on scottopell/taskmd

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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