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.0rc2.tar.gz (50.0 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.0rc2-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.0rc2-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.0rc2-cp314-cp314-win_amd64.whl (874.9 kB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: taskmd-1.0.0rc2.tar.gz
  • Upload date:
  • Size: 50.0 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.0rc2.tar.gz
Algorithm Hash digest
SHA256 c58b4adbcf05f0ede921ac36661a0db8fda8bee87990b6c7b819e499a286bbea
MD5 b7bc7010fa8badaecc3f1a19a37d8fc1
BLAKE2b-256 85bc632353328034096f7a3e03ef6983bf4fe6459a5b77adb327fce11cb92899

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4b34837cf17d9d862bf9b1c2485db09d2c96ab427b299df46de334dd040ef5c4
MD5 57a33ca086593d90d54d3986e5e714af
BLAKE2b-256 5e1c3218bb38ec8882caf76907384651a323c47eee5e1e0a9a3bcfdefa2f436f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7e741bebba362e73e2ded30a22909519f88553883d32ba1e43fe7d3810663237
MD5 0d1559607b87abab97313ae7fcffccc2
BLAKE2b-256 dfd28525bf0fb327b5c937a315d000ddd1f3c4cfdf4bb13576431e5c1136c093

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.0.0rc2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 874.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.0rc2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 79a45adea180b54fd7276359a749672a14171a887e65d73d99eeb019b8206f68
MD5 97518c92cc8d173b257ce087d147573a
BLAKE2b-256 302782ec7fd716827b49c8d3719027bba4300386bf3801b9751bf07eeb7b13b0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ca8cbef973b2e34c10e1e43296ccb1a9930ef493285615e95337806e64af412f
MD5 75c8dd7a5c548def573a6d78bae3cd20
BLAKE2b-256 c722710da2072df65fcd36cd0cccc8bac4f94a15f8624f3e8421ef62a8692b81

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9852cfaab4ac136827eb3da4192ce944a1f6a9c5f6b05808c6b4f4115f1ee58c
MD5 f48a10eafbdc715f2df46d93bb5d6619
BLAKE2b-256 31c333f3e2354132a77b1f1b15a62b3bcc7eab0aed0d04a10d254242c5472993

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.0.0rc2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 875.0 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.0rc2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c220efafc7bb8fbd9ec3cd2b2d3b1c20ae2901dde9976aaf4c34e1d57c4afd00
MD5 a1df7a2858f6d386febead694d8e57ed
BLAKE2b-256 f9ea910484f00e7b49c4ba3286aef8227484fe875f8d054d8838c1865569f80b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3e8be63bae1ec7c8c49d72d46c5b2516a3ed145e9bfab9ff882c12a3c33ea586
MD5 5a0631fd5b4227d87775d9bd684cd94d
BLAKE2b-256 0dd99f8754175c164c40c04d743784cfffb4eaf87b5c3fcb81f714bc4343c37e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9b85cb4cd7203d17a90f761a0a2161f588e9017d26b393050d57efd40bc8dd9
MD5 f9db4fceb4bb40337da08e84bebd7982
BLAKE2b-256 12b0981f4b00a16d8cdb538b0489b4e6a72ed804c800bfce5ca721cad204480a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.0.0rc2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 875.4 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.0rc2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d5bd9859a69cfb2602cc9faeb0f809e4fd7dc8a727b854dd7b8fd2117841c433
MD5 3554cf75eb8b6fc92f3d2fbf04ea837a
BLAKE2b-256 352c7135a978dbab3a54460086463f374ebb9121d11020c455fe603be0c83814

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a1dc1925ba8baae77c0d0845a8bbbcb2a07c87e317901ceaa57966db4733aa4b
MD5 b1787451d2ba5a1d47f08fb873053037
BLAKE2b-256 95011def1d22767720b06a88e4eeb70a57273f63c1505e28999e8a0619807176

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89dfb2c48acc782723c2e52dfa49f4a7b467fc00b794c274601a81d98eeea17f
MD5 da5dcb15d3c25c2206f1d55fd7ee3dd8
BLAKE2b-256 60c23cde84d61b230677da16c700419720aeb631f66393dfec96e056aacf7a38

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-1.0.0rc2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 877.2 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.0rc2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d0c38bc86f51f5df0e5775242a78a2d23019dbeee18cb070e5051123736f361c
MD5 1c5699279464d94d15fe8cbbb361b089
BLAKE2b-256 ae920d05c7d800d8c6e4d0c3c7e59729604f0336001aa844b8f4df41d83d7da9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c004c58b354778bcabfc145d5cdfdfc129a76abee2d4b983a0496d53931d7bf
MD5 e645163630912b3e8c254b05e4bdaeb0
BLAKE2b-256 c317a9bc9c5ec10b17f32d738ef60a03050ae3e1b4d6d83df6476e70ad653888

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9b27328360864ad392ca4ee6818a030e5e0f26dce2656316cd6e778f3430c05d
MD5 01bb812e3d3a467cdaae7a3e19101a2b
BLAKE2b-256 0e4a10051258648df12f5a351090f7585cecd156ca5c7e1c7cf54358dc2a15ab

See more details on using hashes here.

Provenance

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