Skip to main content

Markdown-native task management for developer projects

Project description

task.md

A structured but simple task management system. Tasks work as prompts for LLM agents or tickets for humans.

Each task is a markdown file. Metadata lives in the filename and YAML frontmatter. No database, no config file — the filesystem is the data store, git is the audit trail.

tasks/
  34001-p1-done--initial-setup.md
  34002-p2-ready--add-feature.md
  34003-p3-blocked--waiting-on-api.md

Task IDs are 5-digit numbers (e.g., 34042) where the first digit is derived from the machine's hostname and the second from the tasks directory path. This avoids ID conflicts across machines and git worktrees without coordination.

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

CLI

Run directly with uvx — no install needed:

uvx --from "git+https://github.com/scottopell/taskmd.git" taskmd validate
uvx --from "git+https://github.com/scottopell/taskmd.git" taskmd fix
uvx --from "git+https://github.com/scottopell/taskmd.git" taskmd next

Or install as a persistent tool:

uv tool install git+https://github.com/scottopell/taskmd.git
taskmd init         # create tasks directory with a template file
taskmd validate     # check all task files for consistency
taskmd fix          # auto-repair (missing dates, mismatched filenames, legacy ID formats)
taskmd next         # print the next available task ID
taskmd list         # list all tasks with metadata

All commands auto-detect ./tasks or ./tasksmd as the default directory. Pass a path to override.

Agent mode

When run inside an LLM coding agent (Claude Code, Cursor, Codex, etc.), taskmd auto-detects the environment and switches to JSON output. You can also force it:

taskmd --agent validate        # structured JSON envelope
taskmd --agent --help          # self-documenting schema for agents
taskmd --agent --compact --help  # minimal schema (fewer tokens)

Library

Install as a dependency:

uv pip install git+https://github.com/scottopell/taskmd.git
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 (e.g., dev.py)

#!/usr/bin/env -S uv run
# /// script
# requires-python = ">=3.11"
# dependencies = ["taskmd @ git+https://github.com/scottopell/taskmd.git"]
# ///

from taskmd import validate

result = validate("tasks")
if not result.ok:
    print(f"Task validation failed: {len(result.errors)} errors")

Task file format

Filename: DDNNN-pX-status--slug.md

---
created: 2026-03-04
priority: p2
status: ready
artifact: src/feature.py
---

# Task Title

## Summary
What needs to be done.

## Done When
- [ ] First criterion
- [ ] Second criterion

Statuses: ready, in-progress, blocked, done, wont-do, brainstorming

Priorities: p0 (critical) through p4 (polish)

Artifact: the concrete output this task produces (file path, config change, commit). Required.

Only the four fields above are allowed in frontmatter — unknown fields are rejected by validation.

To change status: edit the status: field in frontmatter, then taskmd fix to rename the file to match. You can also rename the file directly.

Legacy migration: files using old formats (4-digit NNNN or alpha-prefix AANNN) are auto-migrated by taskmd fix.

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-0.1.0.tar.gz (39.8 kB view details)

Uploaded Source

Built Distributions

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

taskmd-0.1.0-cp313-cp313-win_amd64.whl (892.7 kB view details)

Uploaded CPython 3.13Windows x86-64

taskmd-0.1.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-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (971.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for taskmd-0.1.0.tar.gz
Algorithm Hash digest
SHA256 86e762c583739690fcc1786586b0061b4489391854d80128900650c18ef8e922
MD5 ac849e6beb28b89c4fac63c496b20a30
BLAKE2b-256 0683d9cb12dbd488b76d63db6cc2477a341c614d35a1fb9396d4db6c52b58d6e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: taskmd-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 892.7 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-0.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7f2f174e666c209dc31b9486eb7880d4d7c1cd14389abb67fe62ed4a1cf5c4e9
MD5 c785af3f0aba7e866899ef6f0e7701f8
BLAKE2b-256 bdfa520e0754f4375210b9219615e66b02d1d0aa4e314bb05aff7d8bdfd3fa62

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6871f068cdacfd57f17e1ed3a337be59ebbe1b24ddc7b0153078078b25fe7363
MD5 e4f85c7d6a693cf4125875248ac5df95
BLAKE2b-256 5dd8172bb96cced200a5929951bd41b3639c7438b80d62a8d981412d4943b29a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for taskmd-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8264667fd0045219225d2bf821824c56cb77b42cece8378faa48628fe3381527
MD5 5f3587623512f99c1cc4147e6579a616
BLAKE2b-256 4495082efd7b6497a5e4f4feaa6ec3957890f1d06ec1b49ec948d83347f5a902

See more details on using hashes here.

Provenance

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

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