mindtask
A CLI tool that combines concept maps (mindmaps) with task dependency graphs for planning and scheduling work.
The Problem
Mindmaps are great for brainstorming and organizing ideas, but they don't capture work — dependencies, scheduling, critical paths. Task managers handle work well but lose the big-picture structure of how ideas relate. You end up maintaining both separately, with no connection between them.
The Approach
mindtask maintains two linked structures in a single JSON file:
- Concept tree — a strict tree (each node has 0 or 1 parent) for organizing ideas, like a classic mindmap
- Task DAG — a directed acyclic graph of tasks with dependencies, enabling scheduling and critical path analysis
Tasks reference concepts, creating a bridge between what you're thinking about and what you need to do. The link is directional: tasks point to concepts, not the other way around. A task can reference multiple concepts, and multiple tasks can reference the same concept.
Concept Tree Task DAG
Project 1: Design API ──→ 3: Integrate
├── Backend 2: Design DB ───┘
│ ├── API
│ └── Database task 1 concepts = [API]
└── Frontend task 2 concepts = [Database]
└── Components task 3 concepts = [API, Database]
Installation
Quick Start
# Initialize a new project (optionally with a default timezone)
# Build a concept tree
# Create tasks and link them to concepts
# Track progress
Data is stored in .mindtask.json in the current directory — human-readable, versionable with git. The CLI walks up parent directories to find the project file, so you can run commands from subdirectories.
CLI Reference
Project
Concepts
Concepts form a tree (each concept has at most one parent).
|
Removing a concept fails if it has children or is referenced by tasks — unlink or remove dependents first.
Tasks
Tasks form a dependency DAG. Each task has a workflow state (todo, in_progress, done).
||done
Due dates accept multiple formats:
- Date only:
2025-03-15(midnight in project timezone) - Datetime:
2025-03-15T14:00(uses project timezone) - Full RFC 9557:
2025-03-15T14:00:00-04:00[America/New_York]
Dependencies
Adding a dependency that would create a cycle is rejected. Removing a task automatically cleans up references from other tasks' dependency lists.
Linking Tasks to Concepts
Links are many-to-many: a task can reference multiple concepts, and a concept can be referenced by multiple tasks.
Search
Export
Generate diagrams for external renderers. Supported formats: plantuml, mermaid (stubbed).
Diagram types:
| Diagram | Description | Root ID type |
|---|---|---|
tree |
Concept tree as a mindmap | Concept ID (renders subtree) |
dag |
Task dependency graph | Task ID (renders downstream) |
gantt |
Gantt chart from tasks with due dates | — |
wbs |
Work breakdown structure (concepts + tasks) | — |
Examples:
Output is written to stdout. Pipe to a file and render with PlantUML:
Data Model
Optional fields (description, duration, due, depends_on, concepts, parent) are omitted from the JSON when empty or unset.
Key Design Decisions
| Decision | Choice | Why |
|---|---|---|
| Concept structure | Strict tree | Proven mindmap model. Simple, intuitive. |
| Task structure | DAG | Dependencies must be acyclic for scheduling to work. |
| Linking | Tasks → Concepts | Keeps the concept tree clean and independent. |
| Storage | Single JSON file | Human-readable, versionable with git, no database needed. |
| IDs | Auto-increment integers | Simple to type, context distinguishes concepts from tasks. |
| Timezones | IANA via jiff |
RFC 9557 format preserves timezone identity across serialization. |
Library
mindtask is also usable as a Rust library (use mindtask::...):
mindtask::model—Project,Concept,Task, typed IDs (ConceptId,TaskId)mindtask::graph— Tree validation, DAG cycle detection, topological sort, project validationmindtask::store— JSON persistence (load/save)mindtask::export— Diagram generation (PlantUML, Mermaid stub)
License
GPL-3.0-only