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. There's no YAML frontmatter — 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.0rc1.tar.gz (41.4 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.0rc1-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.0rc1-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.0rc1-cp314-cp314-win_amd64.whl (866.9 kB view details)

Uploaded CPython 3.14Windows x86-64

taskmd-1.0.0rc1-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.0rc1-cp314-cp314-macosx_11_0_arm64.whl (928.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

taskmd-1.0.0rc1-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.0rc1-cp313-cp313-macosx_11_0_arm64.whl (928.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

taskmd-1.0.0rc1-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.0rc1-cp312-cp312-macosx_11_0_arm64.whl (929.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

taskmd-1.0.0rc1-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.0rc1-cp311-cp311-macosx_11_0_arm64.whl (931.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: taskmd-1.0.0rc1.tar.gz
  • Upload date:
  • Size: 41.4 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.0rc1.tar.gz
Algorithm Hash digest
SHA256 930bb09a169242683e2b81ea2051164dd71188096d823028b9735d3bc98f4207
MD5 4dc5f9386c5f58720eadd7959cad0284
BLAKE2b-256 c88c551513c8fab0b20e6921720bf0021828b5d451dd56c2abfd6f046c43437e

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1.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.0rc1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ea9a9dcff3eb6168c4c5d8aa2513381532122c84e1d30b27f35e0571f732aefe
MD5 82c98335c73fda5e138dacc77105459c
BLAKE2b-256 386219818d5c544cf38851b30b6999fe08b56f72105403820c59f717752fc9bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 21f8b3c264957a7a35ff40bfac09198448864153337f35503760fcde9afc3231
MD5 8b9e3cea047d91e9406c0814600ad1de
BLAKE2b-256 a87ffb96033600f7c1de44805a43147ec1ecbbfa1bae5e7d72fdf00ca3cc7d94

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0rc1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 866.9 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.0rc1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 7a9ae2140a843f3ac08e6c744ca0db6b50f38c38f346fc3e4b7903270e1b9f5d
MD5 716168ae69be85f8c4acca8bdb78ef30
BLAKE2b-256 5a1e91f9f17379ea89c176aa954a156c1ff4e42129ca5634638c8d897f836e57

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b57a9563837ce5807a32ef38d4c70989a641b6b7635de00f69d07d739ac068fb
MD5 49a8d788731421a160155dcd7dae2ff5
BLAKE2b-256 2c5acc5111c0a3c834c2fb02fec576515aed6623290a68ceb269d848bd8e6e8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c1593cbfa65378629d2978893f3c5cece43a5557e9aa11c1a9d22a9db4fe9b8d
MD5 3c3abe0e859ccb99c7f15ed709bc685d
BLAKE2b-256 35b9f1145d812d5e98c18e8ff49e80dae9c73d9a00f9cee8d35d45cb89bf9803

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0rc1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 866.9 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.0rc1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4b73eb66343bbd95192cb2aa6e5d54e769248185139d801b2746d78509aed537
MD5 ba8b0168744821d3eb8a2b18f292247b
BLAKE2b-256 7d70130f1fb26281dd760ebdde6ec137ee3901f223135b59fbddd52008cf1bb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c79697ed35ea1468fa2cc345438491e7e54754003fbcc1b206ed7a914f9aa2d8
MD5 ddde8c355a140ce6ce98369e5a7d1ad5
BLAKE2b-256 a80ab451090197b0e8041af8b5ec38d85e395291be208a6a22f84a9a322af79f

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e225c7bae6aeec0062b59645bb5bc1e90e1ecad2baea2e0e2c23ebb0446ee0a
MD5 978367c9278516a718d293b01ed7e6c6
BLAKE2b-256 a886cbf813fc5301beb63ed98c990417203b7768dcd2951581630a0401812b32

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0rc1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 867.3 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.0rc1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f92614df379fde4cb72c1312ff411f190387815f1c53a5517cf39447834d87be
MD5 b0af4484da73be8baa4e1775412acd81
BLAKE2b-256 c3a27ed70e3688d53a02a03133c37c04ade17cd26fe8f09033bbabff8ff53578

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 be8afea68e0763ef36c5132cef324be8b6fb59b8999996c39b46a76a69be9826
MD5 fdfa7842ab29fc9d01da64ff66f12980
BLAKE2b-256 a29d964d7e56a0ca49982951e8044903260eb6bff4ad07d89c8dce403cf23246

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8dbc329302e2480649be3aee70009fd955bd5c4eb39c547aa7a9505ae8e0c828
MD5 50ac42bc656a08a1391359251d06e6b2
BLAKE2b-256 ed5bf150f5a907c78dc9b1b4280f679a194195a657d523861dccf8fae3cf58e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: taskmd-1.0.0rc1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 868.9 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.0rc1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8e88902d7ed38a1f64a0ca39dd9fcac9ae98b40d6a5bc8048d97d22b59e2b4e3
MD5 10f91fca3197e2f4b715d2cd1ef93117
BLAKE2b-256 2b06d78cc0ab0898072df6e8a55c28757d8aebf97f9639c151ccf62b16ac6315

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12368f846081102a0ebaebe7dad2fb75fa04a330ce10d0db22e3e522100c5cde
MD5 871ed67c79a21947f4e32bb5b7b6dde0
BLAKE2b-256 ee2cb9365e49b58483013c1b3a9fa7d9dc1d20ea6907497bb044d00b5acb0364

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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.0rc1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for taskmd-1.0.0rc1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 99fd1bc2920bde3c4f576611d7c0e9c9c4998d3736ed3da8612cfc51553d7e79
MD5 8f72064d4e7ebc3be3eae2438ff2d7e6
BLAKE2b-256 9dfcfeb83f7a6bd8654674e3171b0ee3a41fa8d7ead60e6fe3063eef393843b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for taskmd-1.0.0rc1-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