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 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

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.2.0.tar.gz (55.3 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.2.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.2.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.2.0-cp314-cp314-win_amd64.whl (881.4 kB view details)

Uploaded CPython 3.14Windows x86-64

taskmd-1.2.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.2.0-cp314-cp314-macosx_11_0_arm64.whl (943.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

taskmd-1.2.0-cp313-cp313-win_amd64.whl (881.6 kB view details)

Uploaded CPython 3.13Windows x86-64

taskmd-1.2.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.2.0-cp313-cp313-macosx_11_0_arm64.whl (943.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

taskmd-1.2.0-cp312-cp312-win_amd64.whl (881.9 kB view details)

Uploaded CPython 3.12Windows x86-64

taskmd-1.2.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.2.0-cp312-cp312-macosx_11_0_arm64.whl (943.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

taskmd-1.2.0-cp311-cp311-win_amd64.whl (883.3 kB view details)

Uploaded CPython 3.11Windows x86-64

taskmd-1.2.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.2.0-cp311-cp311-macosx_11_0_arm64.whl (946.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for taskmd-1.2.0.tar.gz
Algorithm Hash digest
SHA256 3f669603ed713e2477b4cd6d2afe6475daf292ba6a1f296dddc87d698808bbb8
MD5 db921796c1e6e5293161af2ba08ebcb8
BLAKE2b-256 e618f8bcfdbad798e331b7f527a95c13de7eb4ae7605ee177f7a0f48b6e738da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4959d8935b93bb48df713e2949cd98b4e14a6c672a03a34fe8f40c3ee96899da
MD5 2cbe71f77d394d0f0d48579db89543ca
BLAKE2b-256 706d452a3ad32f0197b7b174693144944ad76c4c7e23e857b4cedf3035c6205e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3b3e3c40d3d2164e9be66061602e81e68f3151219839980299620079eabc5e1
MD5 807440b8ee5cf87ad725e96c1a4cee0b
BLAKE2b-256 131b7095824bf188e6c3ccb309218dfc07a22ca1e11af6d1f4f1cf90c9663528

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.2.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 881.4 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.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b1bfc56ca08d22312340ae48979c6ceed1622ff2d7cf41368ecc8c7c65271d4d
MD5 5a73fb84970dfa004d6582e5c6c3fd79
BLAKE2b-256 5b2f522cfb51f04feae23251e1a1874ea8cb58843978dd19530854dbe309b599

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 86bb4d2a25800bde258110bb85c554098fa0ca882ad1cac1591b9cd1dde8e613
MD5 d25dc0c8ab73d70c701da78777a7cfdc
BLAKE2b-256 6cc7d581e4a1f07fda86d8566fb6175d6b89481dd10fbe50fc8f7173e5fb8b9b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee82b9033bef4d917c0f300695650f07ad2afd3ce02bbf0fe9f4ef2699656b07
MD5 73fbd272a89a16d0ee78f0faefb0bc7d
BLAKE2b-256 7c3eeb5033e8194a21600a601cfa6f070f187a9a7603623c37b493441f21a819

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.2.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 881.6 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.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2cad6e51045a640f4fb3c22eff6186994b536dfb25324b89ac1eb3f1c0a47ff3
MD5 fdfff2d2b7b77a5dc8b251a3619690c3
BLAKE2b-256 84fc6c81450733e44a9b63b851089d00763593afc941fa3729c2e25709985c2d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c9f34b1dfeae7afb613708a31ba3a7b2f30bc8d4d1ccb4a95f287cfe130f679b
MD5 f0e859ddebf1cd0274eff899ee83de43
BLAKE2b-256 a8697ddeef0824a6ab23340c8298d0018bcef45bf6a444a799c903a378e3cc54

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59ac5ac5f10aab2e1d1d82d8ff5baaf304008f030a3fd964b739290852f34f8f
MD5 7c0f1b6093029b2e81c89192c5e99607
BLAKE2b-256 8b32584c9e84392389812b5fca8161d2b2137cecbc76968f8a317da82f96c357

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 881.9 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.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a5a75fd3f2aede13902a2b1b026e5ffd4f6555a784549277df3347d25252beca
MD5 fcb4e047df44c251011cf1148c155862
BLAKE2b-256 9bdc84de8a6d91e784d63809962f6058f99b4eb1766438592a0da6d6142c593b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 662b11644336ceabc27eaa9b988cc86edd4acfbb4d0467bbde5384750eadcad0
MD5 2a3fcd9b19faf402ee175403d78478e3
BLAKE2b-256 ebca5c9976ab1f83e7adace5b0f892bd8e12c522d70aa262e3b5e9c31bd68d0e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 642d433e1a6466781bcdd3dcf5d6761414d827b7a10e1d9a5fca133b5c765810
MD5 f13050e96395308e4884d1e0f953b04f
BLAKE2b-256 66fd422ca1e2233fa40ebc2803aae12ffe52f5bd0e1466e46e14de26d929c93e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 883.3 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.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 15018ff542ac20ddb0437fe16489211396792d9778e23a16499d7a513f800b72
MD5 b2162f24c9eaf8fdf246fb09cca92b87
BLAKE2b-256 01d55ecdc9352c57f6edb1acc6ef5fb0bf49c52390bf5d142b527e4c99e5f8b8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5927c111dcf59d5c80842dc53a0f495476a17c838cf43844ce4729fe884c47a8
MD5 cbd0a3b4d4291ba11e10a67748bb9bd8
BLAKE2b-256 ddefebdb3f68d1c925513b1e0f4549919feaeda9cc6e407cff5638dcdefd500f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e285bf5cf0e44c4765a997c5f34526b4574c0d95b73b12e50a72059f2d97281
MD5 7e0d44b8911d1227d3c92fdd1c6dddfd
BLAKE2b-256 6dc776f18b5f07ba7c3e8737adf8716672475d38fdcbecb7cf411cdbc77677ec

See more details on using hashes here.

Provenance

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