MCPcopy Index your code
hub / github.com/driangle/taskmd

github.com/driangle/taskmd @v0.2.5

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.5 ↗ · + Follow
3,397 symbols 12,608 edges 432 files 745 documented · 22%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

taskmd

CI codecov

Markdown-based task management designed for both humans and AI coding assistants.

taskmd provides:

  1. A standardized format for task files — Tasks stored as readable .md files with YAML frontmatter, version-controlled alongside your code
  2. A CLI for managing them — Create, update, filter, validate, and visualize tasks from the terminal
  3. A web dashboard for visualization — Kanban board, dependency graphs, and project metrics in your browser
  4. A set of AI skills — Slash commands for AI assistants to create, update, and work through tasks
  5. An MCP server exposing task management tools — Direct tool access for AI assistants via the Model Context Protocol

Everything runs locally. Task data stays in your repo and is never shared externally.

Quick Start

Installation

Option 1: Homebrew (macOS and Linux)

# Add the tap
brew tap driangle/tap

# Install taskmd
brew install taskmd

# Verify installation
taskmd --version

Option 2: Download Pre-built Binary

# Download from the releases page
# https://github.com/driangle/taskmd/releases

# Extract the archive
tar -xzf taskmd-v*.tar.gz  # or unzip for Windows

# Move to PATH
sudo mv taskmd /usr/local/bin/  # macOS/Linux

Option 3: Install with Go

go install github.com/driangle/taskmd/apps/cli/cmd/taskmd@latest

Option 4: Build from Source

git clone https://github.com/driangle/taskmd.git
cd taskmd/apps/cli
make build-full

Option 5: Docker

# Web dashboard (default)
docker run --rm -p 8080:8080 -v ./tasks:/tasks:ro ghcr.io/driangle/taskmd

# CLI commands
docker run --rm -v ./tasks:/tasks ghcr.io/driangle/taskmd taskmd list

30-Second Setup

  1. Initialize taskmd in your project: bash cd my-project taskmd init # Creates tasks/ directory and .taskmd.yaml config

  2. Create your first task (tasks/001-first-task.md): ```markdown


id: "001" title: "My first task" status: pending priority: high


# My First Task

## Objective This is my first task using taskmd!

## Tasks - [ ] Learn taskmd basics - [ ] Create more tasks ```

  1. List your tasks: bash taskmd list tasks/

  2. Launch the web interface: bash taskmd web start --open

That's it! You're ready to manage tasks with taskmd.

Usage

CLI Commands

# List tasks
taskmd list tasks/

# Validate task files
taskmd validate tasks/

# View task statistics
taskmd stats tasks/

# Find next task to work on
taskmd next tasks/

# Visualize dependencies
taskmd graph tasks/ --format ascii

# Start web interface
taskmd web start --dir tasks/ --open

Web Interface

Start the web server and open your browser:

taskmd web start --open --port 8080

The web interface provides: - Task List: Sortable, filterable table view - Board View: Kanban-style board with drag-and-drop - Graph View: Interactive dependency visualization - Statistics: Project metrics and progress tracking

Documentation

Read the full documentation →

Task Format

Tasks are markdown files with YAML frontmatter:

---
id: "001"
title: "Implement feature X"
status: pending
priority: high
effort: medium
dependencies: []
tags:
  - feature
  - backend
created: 2026-02-08
---

# Implement Feature X

## Objective
Build the new feature X that allows users to...

## Tasks
- [ ] Design API endpoints
- [ ] Implement backend logic
- [ ] Write tests
- [ ] Update documentation

## Acceptance Criteria
- All tests pass
- API documentation complete
- Performance meets requirements

See the Task Specification for complete format details.

Configuration

taskmd supports .taskmd.yaml configuration files for setting default options:

# .taskmd.yaml - Place in project root or home directory
dir: ./tasks                    # Default task directory
web:
  port: 8080                   # Default web server port
  auto_open_browser: true      # Auto-open browser on web start

Config file locations (in order of precedence): 1. ./.taskmd.yaml - Project-specific settings 2. ~/.taskmd.yaml - User-wide defaults 3. Command-line flags always override config values

See docs/.taskmd.yaml.example for a complete example with all supported options.

Project Structure

my-project/
├── tasks/              # Task files
│   ├── 001-task.md
│   ├── 002-task.md
│   └── cli/           # Optional subdirectories
│       └── 003-task.md
└── .taskmd.yaml       # Optional project config

Contributing

Contributions are welcome! For development guidelines, see:

Development Setup

# Clone repository
git clone https://github.com/driangle/taskmd.git
cd taskmd

# Build CLI (from apps/cli directory)
cd apps/cli
make build

# Run tests
make test

# Run linter
make lint

# Build with embedded web UI
make build-full

Running Tests

cd apps/cli
go test ./...

All new CLI features must include comprehensive tests. See CLAUDE.md for testing requirements.

Code Coverage

Code coverage is tracked automatically via Codecov. On every push and pull request, the CI generates coverage reports for both the CLI and web app and uploads them to Codecov. The coverage badge at the top of this README reflects the latest coverage on main.

To generate coverage reports locally:

# CLI (Go)
cd apps/cli
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out    # Open in browser

# Web (TypeScript/React)
cd apps/web
pnpm test:coverage                  # Generates coverage/index.html
open coverage/index.html            # Open in browser

License

MIT License - see LICENSE for details.

Support

Claude Code Plugin

Use taskmd directly inside Claude Code with slash commands:

/taskmd:next-task              # Find next task to work on
/taskmd:do-task 015            # Pick up and work on a task
/taskmd:list-tasks --status pending  # List pending tasks
/taskmd:add-task Fix login bug       # Create a new task
/taskmd:complete-task 015      # Mark a task done
/taskmd:validate-tasks         # Validate task files

Two plugins are available — taskmd provides slash command skills for interactive workflows, and taskmd-mcp provides an MCP server for direct tool access. You can install either or both.

# Add the taskmd marketplace
claude plugin marketplace add driangle/taskmd

# Install slash command skills (/taskmd:do-task, /taskmd:next-task, etc.)
claude plugin install taskmd@taskmd-marketplace --scope project

# Optional: install the MCP server for direct tool access
claude plugin install taskmd-mcp@taskmd-marketplace --scope project

See claude-code-plugin/README.md for full details.


Built with ❤️ for developers who love markdown

Extension points exported contracts — how you extend this code

Source (Interface)
Source defines the interface that external task providers must implement. [4 implementers]
apps/cli/internal/sync/source.go
GitShowFunc (FuncType)
GitShowFunc is a function that retrieves file content at a given commit.
sdk/go/feed/feed.go
Position (Interface)
(no doc)
apps/vscode/src/frontmatter.ts
Tab (Interface)
(no doc)
apps/web/src/components/layout/NavTabs.tsx
ProjectResolverFunc (FuncType)
ProjectResolverFunc resolves a project ID to its task scan directory and phases.
apps/cli/internal/web/project_resolver.go
GitLogFunc (FuncType)
GitLogFunc is a function that runs git log with the given args.
sdk/go/feed/feed.go
Range (Interface)
(no doc)
apps/vscode/src/frontmatter.ts
HeaderActionsProps (Interface)
(no doc)
apps/web/src/components/layout/NavTabs.tsx

Core symbols most depended-on inside this repo

Error
called by 1241
sdk/go/parser/markdown.go
Scan
called by 63
sdk/go/scanner/scanner.go
formatLabel
called by 58
apps/cli/internal/cli/colors.go
NewDataProvider
called by 52
apps/cli/internal/web/data_provider.go
NewValidator
called by 50
sdk/go/validator/validator.go
GetGlobalFlags
called by 44
apps/cli/internal/cli/root.go
renderWithProviders
called by 44
apps/web/src/test-utils/render.ts
createTask
called by 38
apps/web/src/test-utils/fixtures.ts

Shape

Function 2,987
Struct 186
Method 110
Interface 88
Class 12
TypeAlias 9
FuncType 3
Enum 2

Languages

Go89%
TypeScript11%

Modules by API surface

apps/cli/internal/cli/set_test.go80 symbols
apps/cli/internal/cli/next_test.go70 symbols
apps/cli/internal/web/handlers_test.go61 symbols
sdk/go/validator/validator_test.go50 symbols
apps/cli/internal/cli/get_test.go47 symbols
apps/cli/internal/cli/validate_test.go43 symbols
apps/cli/internal/cli/status_test.go41 symbols
apps/cli/internal/cli/report_test.go40 symbols
apps/cli/internal/cli/project_init_test.go40 symbols
apps/cli/internal/cli/graph_test.go40 symbols
sdk/go/taskfile/taskfile_test.go39 symbols
apps/cli/internal/cli/commit_msg_test.go39 symbols

For agents

$ claude mcp add taskmd \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact