Skip to Content
Introduction

Markdown Projects

A CLI tool that stores your entire project — issues, milestones, docs — as plain markdown files in a .mdp/ folder. No database, no server. Just files on disk that you can read, edit, and commit with git.

All Data is Stored Locally as Files

project-root/ └── .mdp/ ├── project.json ├── issues/ │ ├── ISS-1-add-authentication/ │ │ └── ISS-1-add-authentication.md │ └── ISS-2-database-schema/ │ └── ISS-2-database-schema.md ├── milestones/ │ └── M-1-v1-release/ │ └── M-1-v1-release.md ├── docs/ └── templates/

Each issue and milestone lives in its own folder. The folder can hold extra files — screenshots, design docs, logs — alongside the main markdown file.

What’s in a File

Every issue is a markdown file with YAML frontmatter for structured fields and a free-form body:

--- id: ISS-2 title: Implement JWT tokens type: task status: In Progress priority: High labels: - backend - security assignee: agent-1 milestone: M-1 checklist: - text: Access token generation done: true - text: Refresh token rotation done: false --- Implement JWT-based authentication with access and refresh tokens.

See Issues for the full field reference, file naming rules, and all commands. Milestones follow the same structure — grouping issues toward a shared goal.

Designed for AI Agents

The CLI is non-interactive. All input comes from flags and stdin, all output is structured JSON. This makes it ideal for AI agents and automation that need to manage project state programmatically.

  • Markdown is the source of truth. All project state lives in .mdp/ as human-readable files.
  • Git-compatible by design. File-per-issue storage means clean diffs, meaningful merge conflicts, and natural branch-based workflows.
  • Convention over configuration. Presets populate your configuration at project creation, so you can start immediately.

JSON Output

All commands return a JSON envelope:

// Success { "ok": true, "data": { ... }, "warnings": [] } // Error (written to stderr) { "ok": false, "error": { "code": "ISSUE_NOT_FOUND", "message": "Issue ISS-42 not found", "details": { "id": "ISS-42" } } }

The warnings array contains non-fatal issues. Table format is available via --format table.

Exit Codes

CodeMeaning
0Success
1General error (invalid input, file not found, etc.)
2Project not found (no .mdp/ directory)

Command Groups

  • Projectsproject create, add, list, remove, tag, settings, stats, fix
  • Issuesissue create, list, get, update, delete, log {add,list,get,update,delete}, batch-create, batch-update
  • Milestonesmilestone create, list, get, update, delete, progress, log {add,list,get,update,delete}
Last updated on