Your markdown files are already your task system
CLI task manager where checkboxes in your .md files are the database.
Tasks live inside your PRDs, READMEs, and notes. No server, no GUI, no second system. Humans and AI agents read the same format.
npm install -g mdtask content_copy # Core Features - [x] SRCH-001 Basic CLI parser - [ ] SRCH-002 Add priority filtering !high - [ ] SRCH-003 Git-hook integration @version:1.2 - [ ] SRCH-004 Documentation sweep #docs
$mdtask list ID TITLE PRIO TAGS SRCH-002 Add priority filtering HIGH - SRCH-003 Git-hook integration - @version:1.2 SRCH-004 Documentation sweep - #docs 3 tasks pending.
The format is everything
Every task is a markdown checkbox with an ID and inline metadata. Standard syntax, no extensions. Write it by hand, parse it with grep, read it with any LLM.
Status
Checkbox
ID
Unique key
Title
Plain text
Tags
#prefixed
Priority
!bang
Property
@key:val
The Three Pains
AI Visibility
LLMs and AI agents can't "see" inside your Jira or Linear without complex API setups. If your tasks are in the file, the agent already knows what to do.
# claude / codex / opencode ❯Read docs/features/search.md and complete all marked #urgent
Zero Overhead
No new accounts. No "Second Brain" apps. If you have a code editor, you have a task manager. Tasks are version controlled with your code.
$git commit \
-m "feat: finish CORE-01" Single Source
Specs and backlogs stay in sync because they are the same document.
No more "the README says one thing, Jira says another."
# PRD - Search
- [ ] API-010 Pagination
- [x] API-011 Filters Everything you need, nothing you don't
mdtask --help $ mdtask <command> [options]
list [...filters]List tasks view <id>View task details done <id>Toggle task done/open open <id>Open task in $EDITOR move <id> <file>Move task to another file validateCheck task integrity set <...args>Add metadata to tasks idsAuto-assign IDs to unidentified tasks Got questions?
Is this an Obsidian plugin?
No, it's a standalone CLI. However, because it uses standard markdown, it works perfectly inside Obsidian, Logseq, or VS Code. It just reads your files.
Does it require a database?
The markdown files are the database. mdtask scans your folder, builds an in-memory index, and performs actions. No SQLite, no JSON stores.
How do I handle multi-user conflicts?
Use Git. Since tasks are lines of text, Git's merge logic handles conflicts naturally. If two people mark a task as done, it's a simple line merge.
What about performance with large repos?
mdtask uses multi-threaded regex scanning. It can parse 10,000 markdown files in under 200ms.
Start with the files you already have
Navigate to any project with markdown files and run the indexer. It will find existing checkboxes and offer to ID them.
cd my-project && mdtask ids