@mandors/cli 0.4.9 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mandor/projects/dbg2989/events.jsonl +0 -0
- package/.mandor/projects/dbg2989/features.jsonl +1 -0
- package/.mandor/projects/dbg2989/issues.jsonl +0 -0
- package/.mandor/projects/dbg2989/project.jsonl +11 -0
- package/.mandor/projects/dbg2989/schema.json +29 -0
- package/.mandor/projects/dbg2989/tasks.jsonl +0 -0
- package/.mandor/projects/dbg3995/events.jsonl +0 -0
- package/.mandor/projects/dbg3995/features.jsonl +1 -0
- package/.mandor/projects/dbg3995/issues.jsonl +0 -0
- package/.mandor/projects/dbg3995/project.jsonl +11 -0
- package/.mandor/projects/dbg3995/schema.json +29 -0
- package/.mandor/projects/dbg3995/tasks.jsonl +1 -0
- package/.mandor/projects/dbg4038/events.jsonl +0 -0
- package/.mandor/projects/dbg4038/features.jsonl +0 -0
- package/.mandor/projects/dbg4038/issues.jsonl +0 -0
- package/.mandor/projects/dbg4038/project.jsonl +11 -0
- package/.mandor/projects/dbg4038/schema.json +29 -0
- package/.mandor/projects/dbg4038/tasks.jsonl +0 -0
- package/.mandor/projects/dbg5043/events.jsonl +0 -0
- package/.mandor/projects/dbg5043/features.jsonl +0 -0
- package/.mandor/projects/dbg5043/issues.jsonl +0 -0
- package/.mandor/projects/dbg5043/project.jsonl +11 -0
- package/.mandor/projects/dbg5043/schema.json +29 -0
- package/.mandor/projects/dbg5043/tasks.jsonl +0 -0
- package/.mandor/projects/dbg6047/events.jsonl +0 -0
- package/.mandor/projects/dbg6047/features.jsonl +0 -0
- package/.mandor/projects/dbg6047/issues.jsonl +0 -0
- package/.mandor/projects/dbg6047/project.jsonl +11 -0
- package/.mandor/projects/dbg6047/schema.json +29 -0
- package/.mandor/projects/dbg6047/tasks.jsonl +0 -0
- package/.mandor/projects/dbg982/events.jsonl +0 -0
- package/.mandor/projects/dbg982/features.jsonl +0 -0
- package/.mandor/projects/dbg982/issues.jsonl +0 -0
- package/.mandor/projects/dbg982/project.jsonl +11 -0
- package/.mandor/projects/dbg982/schema.json +29 -0
- package/.mandor/projects/dbg982/tasks.jsonl +0 -0
- package/.mandor/projects/test065/events.jsonl +0 -0
- package/.mandor/projects/test065/features.jsonl +2 -0
- package/.mandor/projects/test065/issues.jsonl +0 -0
- package/.mandor/projects/test065/project.jsonl +11 -0
- package/.mandor/projects/test065/schema.json +29 -0
- package/.mandor/projects/test065/tasks.jsonl +11 -0
- package/.mandor/projects/test086/events.jsonl +0 -0
- package/.mandor/projects/test086/features.jsonl +2 -0
- package/.mandor/projects/test086/issues.jsonl +0 -0
- package/.mandor/projects/test086/project.jsonl +11 -0
- package/.mandor/projects/test086/schema.json +29 -0
- package/.mandor/projects/test086/tasks.jsonl +11 -0
- package/.mandor/projects/test105/events.jsonl +0 -0
- package/.mandor/projects/test105/features.jsonl +2 -0
- package/.mandor/projects/test105/issues.jsonl +0 -0
- package/.mandor/projects/test105/project.jsonl +11 -0
- package/.mandor/projects/test105/schema.json +29 -0
- package/.mandor/projects/test105/tasks.jsonl +11 -0
- package/.mandor/projects/test109/events.jsonl +0 -0
- package/.mandor/projects/test109/features.jsonl +2 -0
- package/.mandor/projects/test109/issues.jsonl +0 -0
- package/.mandor/projects/test109/project.jsonl +11 -0
- package/.mandor/projects/test109/schema.json +29 -0
- package/.mandor/projects/test109/tasks.jsonl +11 -0
- package/.mandor/projects/test114/events.jsonl +0 -0
- package/.mandor/projects/test114/features.jsonl +2 -0
- package/.mandor/projects/test114/issues.jsonl +0 -0
- package/.mandor/projects/test114/project.jsonl +11 -0
- package/.mandor/projects/test114/schema.json +29 -0
- package/.mandor/projects/test114/tasks.jsonl +11 -0
- package/.mandor/projects/test136/events.jsonl +0 -0
- package/.mandor/projects/test136/features.jsonl +2 -0
- package/.mandor/projects/test136/issues.jsonl +0 -0
- package/.mandor/projects/test136/project.jsonl +11 -0
- package/.mandor/projects/test136/schema.json +29 -0
- package/.mandor/projects/test136/tasks.jsonl +11 -0
- package/.mandor/projects/test140/events.jsonl +0 -0
- package/.mandor/projects/test140/features.jsonl +2 -0
- package/.mandor/projects/test140/issues.jsonl +0 -0
- package/.mandor/projects/test140/project.jsonl +11 -0
- package/.mandor/projects/test140/schema.json +29 -0
- package/.mandor/projects/test140/tasks.jsonl +11 -0
- package/.mandor/projects/test150/events.jsonl +0 -0
- package/.mandor/projects/test150/features.jsonl +2 -0
- package/.mandor/projects/test150/issues.jsonl +0 -0
- package/.mandor/projects/test150/project.jsonl +11 -0
- package/.mandor/projects/test150/schema.json +29 -0
- package/.mandor/projects/test150/tasks.jsonl +11 -0
- package/.mandor/projects/test154/events.jsonl +0 -0
- package/.mandor/projects/test154/features.jsonl +2 -0
- package/.mandor/projects/test154/issues.jsonl +0 -0
- package/.mandor/projects/test154/project.jsonl +11 -0
- package/.mandor/projects/test154/schema.json +29 -0
- package/.mandor/projects/test154/tasks.jsonl +11 -0
- package/.mandor/projects/test858/events.jsonl +0 -0
- package/.mandor/projects/test858/features.jsonl +0 -0
- package/.mandor/projects/test858/issues.jsonl +0 -0
- package/.mandor/projects/test858/project.jsonl +11 -0
- package/.mandor/projects/test858/schema.json +29 -0
- package/.mandor/projects/test858/tasks.jsonl +0 -0
- package/.mandor/projects/test865/events.jsonl +0 -0
- package/.mandor/projects/test865/features.jsonl +0 -0
- package/.mandor/projects/test865/issues.jsonl +0 -0
- package/.mandor/projects/test865/project.jsonl +11 -0
- package/.mandor/projects/test865/schema.json +29 -0
- package/.mandor/projects/test865/tasks.jsonl +0 -0
- package/.mandor/projects/test868/events.jsonl +0 -0
- package/.mandor/projects/test868/features.jsonl +0 -0
- package/.mandor/projects/test868/issues.jsonl +0 -0
- package/.mandor/projects/test868/project.jsonl +11 -0
- package/.mandor/projects/test868/schema.json +29 -0
- package/.mandor/projects/test868/tasks.jsonl +0 -0
- package/.mandor/projects/test871/events.jsonl +0 -0
- package/.mandor/projects/test871/features.jsonl +0 -0
- package/.mandor/projects/test871/issues.jsonl +0 -0
- package/.mandor/projects/test871/project.jsonl +11 -0
- package/.mandor/projects/test871/schema.json +29 -0
- package/.mandor/projects/test871/tasks.jsonl +0 -0
- package/.mandor/projects/test878/events.jsonl +0 -0
- package/.mandor/projects/test878/features.jsonl +0 -0
- package/.mandor/projects/test878/issues.jsonl +0 -0
- package/.mandor/projects/test878/project.jsonl +11 -0
- package/.mandor/projects/test878/schema.json +29 -0
- package/.mandor/projects/test878/tasks.jsonl +0 -0
- package/.mandor/projects/test884/events.jsonl +0 -0
- package/.mandor/projects/test884/features.jsonl +0 -0
- package/.mandor/projects/test884/issues.jsonl +0 -0
- package/.mandor/projects/test884/project.jsonl +11 -0
- package/.mandor/projects/test884/schema.json +29 -0
- package/.mandor/projects/test884/tasks.jsonl +0 -0
- package/.mandor/projects/test891/events.jsonl +0 -0
- package/.mandor/projects/test891/features.jsonl +0 -0
- package/.mandor/projects/test891/issues.jsonl +0 -0
- package/.mandor/projects/test891/project.jsonl +11 -0
- package/.mandor/projects/test891/schema.json +29 -0
- package/.mandor/projects/test891/tasks.jsonl +0 -0
- package/.mandor/projects/test977/events.jsonl +0 -0
- package/.mandor/projects/test977/features.jsonl +2 -0
- package/.mandor/projects/test977/issues.jsonl +0 -0
- package/.mandor/projects/test977/project.jsonl +11 -0
- package/.mandor/projects/test977/schema.json +29 -0
- package/.mandor/projects/test977/tasks.jsonl +11 -0
- package/.mandor/session-notes.jsonl +1 -5
- package/.mandor/workspace.json +7 -7
- package/README.md +383 -469
- package/binaries/darwin-arm64/mandor +0 -0
- package/binaries/darwin-arm64.tar.gz +0 -0
- package/binaries/linux-arm64/mandor +0 -0
- package/binaries/linux-arm64.tar.gz +0 -0
- package/mandor +0 -0
- package/mandor-test +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,712 +1,626 @@
|
|
|
1
|
-
# Mandor - Deterministic Task Manager
|
|
1
|
+
# Mandor - Deterministic Task Manager for AI Agent Workflows
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<img src="logo.png" alt="Mandor Logo" width="600">
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<strong>Stop writing markdown plans
|
|
8
|
+
<strong>Stop writing markdown plans that go stale.</strong>
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
<strong>
|
|
12
|
+
<strong>Deterministic task management with structured briefs, specifications, and blueprints.</strong>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
Gate-enforced | Dependency-aware | Structured storage | CLI-native
|
|
13
17
|
</p>
|
|
14
18
|
|
|
15
19
|
<p align="center">
|
|
16
|
-
<a href="#installation">Installation</a> •
|
|
17
20
|
<a href="#quick-start">Quick Start</a> •
|
|
18
21
|
<a href="#why-mandor">Why Mandor</a> •
|
|
19
|
-
<a href="#
|
|
22
|
+
<a href="#workflow">Workflow</a> •
|
|
20
23
|
<a href="#commands">Commands</a> •
|
|
21
|
-
<a href="#
|
|
24
|
+
<a href="#best-practices">Best Practices</a>
|
|
22
25
|
</p>
|
|
23
26
|
|
|
24
27
|
---
|
|
25
28
|
|
|
26
29
|
## Why Mandor
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Traditional workflows scatter task state across markdown files, spreadsheets, and Slack messages. Dependencies are manual, status is fiction, and progress is invisible until code review.
|
|
31
|
+
Traditional workflows scatter task state across markdown files, spreadsheets, and Slack. Dependencies are manual, status is fiction, and context is lost between sessions.
|
|
31
32
|
|
|
32
33
|
Mandor brings **deterministic task management** to AI agent workflows:
|
|
33
34
|
|
|
34
|
-
- **Single Source of Truth**:
|
|
35
|
-
- **
|
|
36
|
-
- **
|
|
35
|
+
- **Single Source of Truth**: Brief → Spec → Blueprint → Feature → Task pipeline
|
|
36
|
+
- **Gate-Enforced Progression**: All three gates (brief read, spec read, session notes) required before starting work
|
|
37
|
+
- **Automatic Dependency Resolution**: Mark task done → dependents auto-transition to ready
|
|
38
|
+
- **Cross-Feature Dependencies**: Task A (Feature 1) can depend on Task B (Feature 2) with cascading unblocking
|
|
39
|
+
- **Schema-Driven**: Enforce implementation steps, test cases, requirements upfront
|
|
37
40
|
- **CLI-Native**: Works in terminal, scripts, and CI/CD pipelines
|
|
38
|
-
- **Dependency Tracking**: Full support for same-project and cross-project dependencies
|
|
39
|
-
|
|
40
|
-
## Overview
|
|
41
|
-
|
|
42
|
-
Mandor is a CLI tool for managing tasks, features, and issues in AI agent workflows:
|
|
43
|
-
|
|
44
|
-
- **Structured Storage**: All data in JSONL format with full audit trail
|
|
45
|
-
- **Real-Time Status**: Query tasks/issues by status (ready, blocked, in_progress)
|
|
46
|
-
- **Dependency Tracking**: Automatic status transitions when dependencies complete
|
|
47
|
-
- **Cross-Platform**: Go binary for macOS, Linux, Windows (arm64 & x64)
|
|
48
41
|
|
|
49
42
|
---
|
|
50
43
|
|
|
44
|
+
## Alternatives
|
|
51
45
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
### Entity Types
|
|
55
|
-
|
|
56
|
-
| Type | Purpose | Status Values |
|
|
57
|
-
|------|---------|---------------|
|
|
58
|
-
| **Workspace** | Top-level container for all projects | (single instance per directory) |
|
|
59
|
-
| **Project** | Container for features and issues | (active/deleted) |
|
|
60
|
-
| **Feature** | Logical grouping of related tasks | draft, active, done, blocked, cancelled |
|
|
61
|
-
| **Task** | Work items within a feature | pending, ready, in_progress, done, blocked, cancelled |
|
|
62
|
-
| **Issue** | Problems, bugs, or improvement requests | open, ready, in_progress, resolved, wontfix, blocked, cancelled |
|
|
63
|
-
|
|
64
|
-
### Dependency Types
|
|
46
|
+
Mandor is one approach to deterministic task management. Other tools exist in this space:
|
|
65
47
|
|
|
66
|
-
- **
|
|
67
|
-
-
|
|
68
|
-
- **Issue Dependencies**: Issues can depend on other issues
|
|
48
|
+
- **Beads**: Git-backed issue tracker focusing on rapid iteration with minimal overhead
|
|
49
|
+
- GitHub: https://github.com/steveyegge/beads
|
|
69
50
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
**Tasks:**
|
|
73
|
-
```
|
|
74
|
-
pending → {ready, in_progress, cancelled}
|
|
75
|
-
ready → {in_progress, cancelled}
|
|
76
|
-
in_progress → {done, blocked, cancelled}
|
|
77
|
-
blocked → {ready, cancelled}
|
|
78
|
-
done → (terminal)
|
|
79
|
-
cancelled → (terminal)
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**Features:**
|
|
83
|
-
```
|
|
84
|
-
draft → {active, blocked, cancelled}
|
|
85
|
-
active → {done, blocked, cancelled}
|
|
86
|
-
blocked → {draft, active, done, cancelled}
|
|
87
|
-
done → {cancelled}
|
|
88
|
-
cancelled → {draft}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
**Issues:**
|
|
92
|
-
```
|
|
93
|
-
open → {ready, in_progress, blocked, resolved, wontfix, cancelled}
|
|
94
|
-
ready → {in_progress, blocked, resolved, wontfix, cancelled}
|
|
95
|
-
in_progress → {blocked, resolved, wontfix, cancelled}
|
|
96
|
-
blocked → {ready, resolved, wontfix, cancelled}
|
|
97
|
-
resolved → (terminal, can reopen to any status)
|
|
98
|
-
wontfix → (terminal, can reopen to any status)
|
|
99
|
-
cancelled → (terminal, can reopen to any status)
|
|
100
|
-
```
|
|
51
|
+
- **OpenSpec**: Fluid, iterative specs with AI tool integration (Claude Code, Cursor, Copilot)
|
|
52
|
+
- GitHub: https://github.com/Fission-AI/OpenSpec
|
|
101
53
|
|
|
102
54
|
---
|
|
103
55
|
|
|
104
|
-
|
|
105
56
|
## Installation
|
|
106
57
|
|
|
107
|
-
###
|
|
58
|
+
### Build from Source
|
|
108
59
|
|
|
109
60
|
```bash
|
|
110
|
-
|
|
111
|
-
mandor
|
|
61
|
+
cd Mandor
|
|
62
|
+
go build -o mandor ./cmd/mandor
|
|
63
|
+
./mandor --help
|
|
112
64
|
```
|
|
113
65
|
|
|
114
|
-
### Install
|
|
66
|
+
### Install to PATH
|
|
115
67
|
|
|
116
68
|
```bash
|
|
117
|
-
|
|
69
|
+
go build -o ~/.local/bin/mandor ./cmd/mandor
|
|
70
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
118
71
|
mandor --help
|
|
119
72
|
```
|
|
120
73
|
|
|
121
74
|
---
|
|
122
75
|
|
|
123
|
-
|
|
124
76
|
## Quick Start
|
|
125
77
|
|
|
126
78
|
### 1. Initialize Workspace
|
|
127
79
|
|
|
128
80
|
```bash
|
|
129
|
-
mandor init
|
|
81
|
+
mandor init -y
|
|
130
82
|
```
|
|
131
83
|
|
|
132
|
-
### 2. Create
|
|
84
|
+
### 2. Create Project
|
|
133
85
|
|
|
134
86
|
```bash
|
|
135
|
-
mandor project create api --name "API
|
|
136
|
-
--goal "
|
|
87
|
+
mandor project create api --name "API Service" \
|
|
88
|
+
--goal "REST API with JWT authentication, user management, and data endpoints"
|
|
137
89
|
```
|
|
138
90
|
|
|
139
|
-
### 3. Create
|
|
91
|
+
### 3. Create Brief (Project Intent & Capabilities)
|
|
140
92
|
|
|
141
93
|
```bash
|
|
142
|
-
mandor
|
|
143
|
-
--
|
|
144
|
-
--
|
|
94
|
+
mandor brief create -p api \
|
|
95
|
+
--name "JWT Authentication" \
|
|
96
|
+
--why "Need secure, stateless authentication for API endpoints" \
|
|
97
|
+
--capabilities "jwt-auth:JWT login flow|refresh:Token refresh endpoint" \
|
|
98
|
+
--tech-stack "golang,jwt,redis"
|
|
145
99
|
```
|
|
146
100
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
# Create first task (no dependencies)
|
|
151
|
-
mandor task create api-feature-xxxx "JWT Parser" \
|
|
152
|
-
--goal "Parse and validate JWT tokens in incoming requests with expiry and signature verification" \
|
|
153
|
-
--implementation-steps "Setup crypto library|Add token validation|Handle expiry|Return errors" \
|
|
154
|
-
--test-cases "Valid token accepted|Expired token rejected|Invalid signature rejected" \
|
|
155
|
-
--library-needs "golang-jwt" \
|
|
156
|
-
--priority P1
|
|
157
|
-
|
|
158
|
-
# Create dependent task (depends on JWT Parser)
|
|
159
|
-
mandor task create api-feature-xxxx "Login Endpoint" \
|
|
160
|
-
--goal "Accept user credentials and return JWT token with refresh token flow" \
|
|
161
|
-
--implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Return tokens" \
|
|
162
|
-
--test-cases "Valid creds return token|Invalid creds rejected|Tokens properly formatted" \
|
|
163
|
-
--depends-on api-feature-xxxx-task-xxxx \
|
|
164
|
-
--priority P1
|
|
165
|
-
```
|
|
101
|
+
Creates: `jwt-auth` (brief ID)
|
|
166
102
|
|
|
167
|
-
###
|
|
103
|
+
### 4. Create Spec (Requirements with IAE Scenarios)
|
|
168
104
|
|
|
169
105
|
```bash
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
mandor task detail <task-id>
|
|
106
|
+
mandor spec create -p api \
|
|
107
|
+
--capability jwt-auth \
|
|
108
|
+
--summary "JWT authentication specification" \
|
|
109
|
+
--requirements "Setup:Enable login:Import JWT lib|Validate:Verify token:Parse JWT|Refresh:Update token:Issue new JWT"
|
|
175
110
|
```
|
|
176
111
|
|
|
177
|
-
|
|
112
|
+
Creates: `jwt-auth-spec` (spec ID with auto-generated requirement IDs: req-0001, req-0002, etc.)
|
|
178
113
|
|
|
179
|
-
|
|
180
|
-
# Get task ID from track output
|
|
181
|
-
mandor task update <task-id> --status in_progress
|
|
182
|
-
mandor task update <task-id> --status done
|
|
114
|
+
### 5. Create Blueprint (Technical Architecture)
|
|
183
115
|
|
|
184
|
-
|
|
185
|
-
mandor
|
|
116
|
+
```bash
|
|
117
|
+
mandor blueprint create -p api \
|
|
118
|
+
--brief jwt-auth \
|
|
119
|
+
--problem "Secure API authentication without server-side session state" \
|
|
120
|
+
--decisions "Use JWT for stateless auth|HTTP-only cookies for token storage|Refresh tokens on expiry" \
|
|
121
|
+
--goals-in-scope "Authentication,Authorization,Token refresh"
|
|
186
122
|
```
|
|
187
123
|
|
|
188
|
-
|
|
189
|
-
|
|
124
|
+
Creates: `api-blueprint` (blueprint ID)
|
|
190
125
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
### Workspace Commands
|
|
126
|
+
### 6. Create Feature (from Spec)
|
|
194
127
|
|
|
195
128
|
```bash
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
# Manage configuration
|
|
203
|
-
mandor config get <key>
|
|
204
|
-
mandor config set <key> <value>
|
|
205
|
-
mandor config list
|
|
206
|
-
mandor config reset <key>
|
|
207
|
-
|
|
208
|
-
# Display all commands and best practices
|
|
209
|
-
mandor populate
|
|
129
|
+
mandor feature create "JWT Authentication" -p api \
|
|
130
|
+
--capability jwt-auth \
|
|
131
|
+
--spec-id jwt-auth-spec \
|
|
132
|
+
--scope backend \
|
|
133
|
+
-g "Implement JWT-based authentication with login flow, token validation, and refresh mechanism"
|
|
134
|
+
```
|
|
210
135
|
|
|
211
|
-
|
|
212
|
-
mandor version
|
|
136
|
+
Creates: `jwt-tokens` (feature ID, one-to-one mapping to spec-id)
|
|
213
137
|
|
|
214
|
-
|
|
215
|
-
mandor completion [bash|zsh|fish]
|
|
138
|
+
### 7. Create Tasks (with IAE Scenarios)
|
|
216
139
|
|
|
217
|
-
|
|
218
|
-
|
|
140
|
+
```bash
|
|
141
|
+
# Task 1: Setup JWT Library
|
|
142
|
+
mandor task create jwt-tokens "Setup JWT Library" \
|
|
143
|
+
--spec-id jwt-auth-spec \
|
|
144
|
+
--iae-scenarios "req-0001:scenario-0001|req-0001:scenario-0002" \
|
|
145
|
+
-g "Configure golang-jwt library with crypto setup and validation" \
|
|
146
|
+
--implementation-steps "Import library|Configure settings|Add crypto|Add validation" \
|
|
147
|
+
--test-cases "JWT creates|JWT validates|JWT signature verifies" \
|
|
148
|
+
--library-needs "golang-jwt"
|
|
219
149
|
```
|
|
220
150
|
|
|
221
|
-
|
|
151
|
+
Creates: `jwt-tokens-task-a7K2` (status=ready, all gates=false)
|
|
222
152
|
|
|
223
153
|
```bash
|
|
224
|
-
#
|
|
225
|
-
mandor
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
154
|
+
# Task 2: Token Validation (depends on Task 1)
|
|
155
|
+
mandor task create jwt-tokens "Token Validation Middleware" \
|
|
156
|
+
--spec-id jwt-auth-spec \
|
|
157
|
+
--iae-scenarios "req-0002:scenario-0001" \
|
|
158
|
+
--depends-on jwt-tokens-task-a7K2 \
|
|
159
|
+
-g "Implement middleware to validate JWT tokens on all protected endpoints" \
|
|
160
|
+
--implementation-steps "Create middleware|Extract token|Validate|Return errors" \
|
|
161
|
+
--test-cases "Valid passes|Expired rejects|Invalid rejects"
|
|
162
|
+
```
|
|
229
163
|
|
|
230
|
-
|
|
231
|
-
mandor track feature <feature-id> [--verbose]
|
|
164
|
+
Creates: `jwt-tokens-task-b3M8` (status=blocked, waiting for task-a7K2)
|
|
232
165
|
|
|
233
|
-
|
|
234
|
-
mandor track task <task-id>
|
|
166
|
+
### 8. Track Progress
|
|
235
167
|
|
|
236
|
-
|
|
237
|
-
|
|
168
|
+
```bash
|
|
169
|
+
# See feature with all tasks
|
|
170
|
+
mandor track feature jwt-tokens
|
|
238
171
|
```
|
|
239
172
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
# Add a progress note (AI agents use this to track work)
|
|
244
|
-
mandor session note "Completed v0.4.4 release and testing"
|
|
173
|
+
Output shows:
|
|
174
|
+
- Task 1: status=ready, gates=false
|
|
175
|
+
- Task 2: status=blocked (waiting for Task 1)
|
|
245
176
|
|
|
246
|
-
|
|
247
|
-
mandor session note --read
|
|
177
|
+
### 9. Set Gates & Start Work
|
|
248
178
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
179
|
+
```bash
|
|
180
|
+
# Read brief, spec, and session notes first
|
|
181
|
+
# Then set gates for Task 1:
|
|
182
|
+
mandor task set-gate jwt-tokens-task-a7K2 --is-read-brief
|
|
183
|
+
mandor task set-gate jwt-tokens-task-a7K2 --is-read-spec
|
|
184
|
+
mandor task set-gate jwt-tokens-task-a7K2 --is-read-session-notes
|
|
252
185
|
|
|
253
|
-
|
|
186
|
+
# Transition to in_progress (requires all gates=true)
|
|
187
|
+
mandor task update jwt-tokens-task-a7K2 --status in_progress
|
|
254
188
|
|
|
255
|
-
|
|
256
|
-
# Create a project
|
|
257
|
-
mandor project create <id> --name <name> --goal <goal> [OPTIONS]
|
|
189
|
+
# Work on implementation...
|
|
258
190
|
|
|
259
|
-
#
|
|
260
|
-
mandor
|
|
191
|
+
# Mark complete
|
|
192
|
+
mandor task update jwt-tokens-task-a7K2 --status done
|
|
261
193
|
|
|
262
|
-
#
|
|
263
|
-
mandor
|
|
194
|
+
# Task 2 automatically transitions: blocked → ready
|
|
195
|
+
mandor track feature jwt-tokens # Now shows Task 2 as ready
|
|
264
196
|
```
|
|
265
197
|
|
|
266
|
-
###
|
|
198
|
+
### 10. Repeat for Task 2
|
|
267
199
|
|
|
268
200
|
```bash
|
|
269
|
-
#
|
|
270
|
-
mandor
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
mandor feature list --project <id>
|
|
274
|
-
|
|
275
|
-
# Show feature details
|
|
276
|
-
mandor feature detail <feature-id> --project <id>
|
|
201
|
+
# Set gates for Task 2
|
|
202
|
+
mandor task set-gate jwt-tokens-task-b3M8 --is-read-brief
|
|
203
|
+
mandor task set-gate jwt-tokens-task-b3M8 --is-read-spec
|
|
204
|
+
mandor task set-gate jwt-tokens-task-b3M8 --is-read-session-notes
|
|
277
205
|
|
|
278
|
-
#
|
|
279
|
-
mandor
|
|
206
|
+
# Start work
|
|
207
|
+
mandor task update jwt-tokens-task-b3M8 --status in_progress
|
|
280
208
|
```
|
|
281
209
|
|
|
282
|
-
|
|
210
|
+
---
|
|
283
211
|
|
|
284
|
-
|
|
285
|
-
# Create a task
|
|
286
|
-
mandor task create <feature_id> <name> --goal <goal> \
|
|
287
|
-
--implementation-steps <steps> --test-cases <cases> \
|
|
288
|
-
--derivable-files <files> --library-needs <libs> \
|
|
289
|
-
[--priority <priority>] [--depends-on <ids>]
|
|
212
|
+
## Workflow
|
|
290
213
|
|
|
291
|
-
|
|
292
|
-
mandor task detail <task-id>
|
|
214
|
+
### Complete Pipeline
|
|
293
215
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
216
|
+
```
|
|
217
|
+
1. Brief (Intent & Capabilities)
|
|
218
|
+
↓
|
|
219
|
+
2. Spec (Requirements & IAE Scenarios)
|
|
220
|
+
↓
|
|
221
|
+
3. Blueprint (Architecture Decisions)
|
|
222
|
+
↓
|
|
223
|
+
4. Feature (Spec Mapping)
|
|
224
|
+
↓
|
|
225
|
+
5. Task (Work Items with IAE References)
|
|
297
226
|
```
|
|
298
227
|
|
|
299
|
-
###
|
|
228
|
+
### Gate Enforcement
|
|
300
229
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
--implementation-steps <steps> [--priority <priority>] [--depends-on <ids>] [--library-needs <libs>]
|
|
230
|
+
Every task has three read gates:
|
|
231
|
+
- **IsReadBrief**: Have you read the Brief?
|
|
232
|
+
- **IsReadSpec**: Have you read the Spec?
|
|
233
|
+
- **IsReadSessionNotes**: Have you read session notes?
|
|
306
234
|
|
|
307
|
-
|
|
308
|
-
mandor issue detail <issue-id> --project <id>
|
|
235
|
+
**All three gates MUST be true before ready → in_progress transition.**
|
|
309
236
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
237
|
+
Gates are NOT required for:
|
|
238
|
+
- ready → cancelled
|
|
239
|
+
- in_progress → done
|
|
240
|
+
- blocked → ready (auto-transition)
|
|
314
241
|
|
|
315
|
-
###
|
|
242
|
+
### Dependency Auto-Resolution
|
|
316
243
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
244
|
+
Tasks with `--depends-on`:
|
|
245
|
+
- Auto-assigned `status=blocked` on creation
|
|
246
|
+
- Stay blocked until ALL dependencies are `done`
|
|
247
|
+
- Auto-transition `blocked → ready` when dependencies complete
|
|
248
|
+
- Works cross-feature (Task A in Feature 1 depends on Task B in Feature 2)
|
|
249
|
+
- Cascading: Task A done → unblocks Task B → Task B done → unblocks Task C
|
|
322
250
|
|
|
323
251
|
---
|
|
324
252
|
|
|
253
|
+
## Commands
|
|
325
254
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
### Replace This (Markdown Plan Files)
|
|
255
|
+
### Essential Three Commands
|
|
329
256
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
## Phase 1: Authentication
|
|
333
|
-
- [ ] JWT parser (depends on cryptography)
|
|
334
|
-
- [ ] Login endpoint (depends on JWT parser)
|
|
335
|
-
- [ ] Refresh token (depends on JWT parser)
|
|
257
|
+
#### 1. mandor populate
|
|
258
|
+
View all available commands and usage instructions.
|
|
336
259
|
|
|
337
|
-
|
|
260
|
+
```bash
|
|
261
|
+
mandor populate # Full reference
|
|
262
|
+
mandor populate | grep "brief" # Find relevant sections
|
|
338
263
|
```
|
|
339
264
|
|
|
340
|
-
|
|
265
|
+
#### 2. mandor track
|
|
266
|
+
Check status of workspace, projects, features, tasks, issues.
|
|
341
267
|
|
|
342
268
|
```bash
|
|
343
|
-
#
|
|
344
|
-
mandor
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
# Create tasks with explicit dependencies
|
|
349
|
-
mandor task create api-feature-xxxx "JWT Parser" \
|
|
350
|
-
--goal "Validate JWT tokens..." \
|
|
351
|
-
--implementation-steps "Step 1|Step 2" \
|
|
352
|
-
--test-cases "Test invalid tokens|Test expired" \
|
|
353
|
-
--library-needs "jsonwebtoken" \
|
|
354
|
-
--priority P1
|
|
355
|
-
|
|
356
|
-
mandor task create api-feature-xxxx "Login Endpoint" \
|
|
357
|
-
--goal "Accept credentials and return JWT..." \
|
|
358
|
-
--depends-on api-feature-xxxx-task-xxxx \
|
|
359
|
-
--priority P1
|
|
360
|
-
|
|
361
|
-
# Real-time progress queries
|
|
362
|
-
mandor track feature api-feature-xxxx # See all tasks and status
|
|
363
|
-
mandor track task api-feature-xxxx-task-xxxx # See specific task details
|
|
269
|
+
mandor track # Workspace overview
|
|
270
|
+
mandor track project <project-id> # Project features
|
|
271
|
+
mandor track feature <feature-id> # Feature with tasks
|
|
272
|
+
mandor track task <task-id> # Task with gate status
|
|
273
|
+
mandor track task <task-id> --json # Machine-readable
|
|
364
274
|
```
|
|
365
275
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
- Dependencies auto-validated
|
|
369
|
-
- Blocking tasks auto-detected
|
|
370
|
-
- Structured JSONL storage
|
|
371
|
-
- Queryable via CLI or JSON
|
|
372
|
-
- Works in CI/CD pipelines
|
|
373
|
-
|
|
374
|
-
### Dependency Management
|
|
276
|
+
#### 3. mandor session note
|
|
277
|
+
Record and read session progress (for AI agents).
|
|
375
278
|
|
|
376
279
|
```bash
|
|
377
|
-
|
|
378
|
-
mandor
|
|
280
|
+
mandor session note "Completed Task 1 and dependencies"
|
|
281
|
+
mandor session note --read # Show last 50 notes
|
|
282
|
+
mandor session note --read --offset 100 # Show more notes
|
|
283
|
+
```
|
|
379
284
|
|
|
380
|
-
|
|
381
|
-
mandor status --project api
|
|
285
|
+
### Full Command Reference
|
|
382
286
|
|
|
383
|
-
|
|
384
|
-
mandor track project api
|
|
287
|
+
**For complete command documentation, run:**
|
|
385
288
|
|
|
386
|
-
|
|
387
|
-
mandor
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
--library-needs "..." \
|
|
392
|
-
--depends-on api-feature-xxxx-task-xxxx
|
|
289
|
+
```bash
|
|
290
|
+
mandor populate # Shows all commands with examples
|
|
291
|
+
mandor -h # Shows available commands
|
|
292
|
+
mandor <cmd> -h # Shows specific command help
|
|
293
|
+
```
|
|
393
294
|
|
|
394
|
-
|
|
395
|
-
mandor track feature api-feature-xxxx
|
|
295
|
+
### Quick Command List
|
|
396
296
|
|
|
397
|
-
|
|
398
|
-
|
|
297
|
+
| Category | Commands |
|
|
298
|
+
|----------|----------|
|
|
299
|
+
| **Workspace** | `init`, `config` |
|
|
300
|
+
| **Project** | `create`, `detail`, `update`, `delete`, `reopen` |
|
|
301
|
+
| **Brief** | `create`, `read`, `update`, `delete`, `validate` |
|
|
302
|
+
| **Spec** | `create`, `detail`, `update`, `delete`, `validate` |
|
|
303
|
+
| **Blueprint** | `create`, `detail`, `update`, `delete`, `validate` |
|
|
304
|
+
| **Feature** | `create`, `detail`, `update`, `delete` |
|
|
305
|
+
| **Task** | `create`, `detail`, `set-gate`, `read-gates`, `update` |
|
|
306
|
+
| **Issue** | `create`, `detail`, `update` |
|
|
307
|
+
| **Track** | `track` (workspace\|project\|feature\|task\|issue) |
|
|
308
|
+
| **Session** | `session note` |
|
|
399
309
|
|
|
400
|
-
|
|
401
|
-
mandor track feature api-feature-xxxx
|
|
402
|
-
```
|
|
310
|
+
---
|
|
403
311
|
|
|
404
|
-
|
|
312
|
+
## Best Practices
|
|
405
313
|
|
|
406
|
-
|
|
407
|
-
# Create a bug issue
|
|
408
|
-
mandor issue create "Memory leak in auth handler" \
|
|
409
|
-
--project api \
|
|
410
|
-
--type bug \
|
|
411
|
-
--priority P0 \
|
|
412
|
-
--goal "Goroutine not cleaned up in token refresh handler..." \
|
|
413
|
-
--affected-files "src/handlers/auth.go|src/middleware/auth.go" \
|
|
414
|
-
--affected-tests "src/handlers/auth_test.go" \
|
|
415
|
-
--implementation-steps "Identify|Fix|Add tests|Verify" \
|
|
416
|
-
--library-needs "none"
|
|
314
|
+
### 1. Follow the Complete Workflow
|
|
417
315
|
|
|
418
|
-
|
|
419
|
-
mandor issue detail api-issue-abc123
|
|
316
|
+
Brief → Spec → Blueprint → Feature → Task
|
|
420
317
|
|
|
421
|
-
|
|
422
|
-
mandor issue update api-issue-abc123 --start
|
|
318
|
+
Don't skip steps. Each phase builds context for the next.
|
|
423
319
|
|
|
424
|
-
|
|
425
|
-
mandor issue update api-issue-abc123 --resolve
|
|
320
|
+
### 2. Write Comprehensive Briefs
|
|
426
321
|
|
|
427
|
-
|
|
428
|
-
|
|
322
|
+
Include:
|
|
323
|
+
- Clear problem statement and motivation
|
|
324
|
+
- Well-defined capabilities with descriptions
|
|
325
|
+
- Technical stack that will be used
|
|
326
|
+
- Affected systems and dependencies
|
|
429
327
|
|
|
430
|
-
|
|
431
|
-
mandor
|
|
328
|
+
```bash
|
|
329
|
+
mandor brief create -p api \
|
|
330
|
+
--name "Authentication" \
|
|
331
|
+
--why "Secure stateless API authentication" \
|
|
332
|
+
--capabilities "login:User login|tokens:Token management" \
|
|
333
|
+
--tech-stack "golang,jwt,postgres"
|
|
432
334
|
```
|
|
433
335
|
|
|
434
|
-
###
|
|
336
|
+
### 3. Detailed Specs with IAE Scenarios
|
|
337
|
+
|
|
338
|
+
Create specs with Intent-Action-Expectation scenarios:
|
|
435
339
|
|
|
436
340
|
```bash
|
|
437
|
-
|
|
438
|
-
|
|
341
|
+
mandor spec create -p api \
|
|
342
|
+
--capability login \
|
|
343
|
+
--summary "Login specification" \
|
|
344
|
+
--requirements "Login:User enters creds:Check password|Token:Generate JWT:Return token|Refresh:Extend session:Issue new token"
|
|
345
|
+
```
|
|
439
346
|
|
|
440
|
-
|
|
441
|
-
mandor config set strict_mode true
|
|
347
|
+
Specs become reference documents for tasks and gates.
|
|
442
348
|
|
|
443
|
-
|
|
444
|
-
mandor config list
|
|
349
|
+
### 4. Link Tasks to Spec Requirements
|
|
445
350
|
|
|
446
|
-
|
|
447
|
-
mandor config get default_priority
|
|
351
|
+
Tasks reference specific requirement-scenario pairs:
|
|
448
352
|
|
|
449
|
-
|
|
450
|
-
mandor
|
|
353
|
+
```bash
|
|
354
|
+
mandor task create feature-id "Implement Login" \
|
|
355
|
+
--spec-id spec-id \
|
|
356
|
+
--iae-scenarios "req-0001:scenario-0001|req-0002:scenario-0001"
|
|
451
357
|
```
|
|
452
358
|
|
|
453
|
-
|
|
454
|
-
|
|
359
|
+
Traces implementation back to requirements.
|
|
455
360
|
|
|
456
|
-
|
|
361
|
+
### 5. Gate Enforcement Discipline
|
|
457
362
|
|
|
458
|
-
|
|
363
|
+
Always follow the gate workflow:
|
|
459
364
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
365
|
+
1. Read Brief thoroughly
|
|
366
|
+
2. Read Spec with requirements
|
|
367
|
+
3. Read session notes from previous work
|
|
368
|
+
4. Set all three gates
|
|
369
|
+
5. Transition to in_progress
|
|
370
|
+
6. Implement
|
|
371
|
+
7. Mark done (auto-unblocks dependents)
|
|
464
372
|
|
|
465
373
|
```bash
|
|
466
|
-
#
|
|
467
|
-
mandor
|
|
468
|
-
|
|
374
|
+
# Check task status
|
|
375
|
+
mandor track task <task-id>
|
|
376
|
+
|
|
377
|
+
# Set gates
|
|
378
|
+
mandor task set-gate <task-id> --is-read-brief
|
|
379
|
+
mandor task set-gate <task-id> --is-read-spec
|
|
380
|
+
mandor task set-gate <task-id> --is-read-session-notes
|
|
469
381
|
|
|
470
|
-
#
|
|
471
|
-
mandor
|
|
472
|
-
mandor feature create f123
|
|
382
|
+
# Start work
|
|
383
|
+
mandor task update <task-id> --status in_progress
|
|
473
384
|
```
|
|
474
385
|
|
|
475
|
-
###
|
|
386
|
+
### 6. Dependency Management
|
|
476
387
|
|
|
477
|
-
|
|
478
|
-
- What is being built/fixed
|
|
479
|
-
- Why it matters
|
|
480
|
-
- Technical requirements
|
|
481
|
-
- Acceptance criteria
|
|
388
|
+
Create dependent tasks with clear relationships:
|
|
482
389
|
|
|
483
390
|
```bash
|
|
484
|
-
#
|
|
485
|
-
|
|
391
|
+
# Task A (no dependencies)
|
|
392
|
+
mandor task create feature-id "Task A" \
|
|
393
|
+
--spec-id spec-id \
|
|
394
|
+
--iae-scenarios "req-0001:scenario-0001" \
|
|
395
|
+
-g "..." \
|
|
396
|
+
--implementation-steps "s1|s2" \
|
|
397
|
+
--test-cases "t1|t2"
|
|
486
398
|
|
|
487
|
-
#
|
|
488
|
-
|
|
399
|
+
# Task B (depends on Task A)
|
|
400
|
+
mandor task create feature-id "Task B" \
|
|
401
|
+
--spec-id spec-id \
|
|
402
|
+
--iae-scenarios "req-0002:scenario-0001" \
|
|
403
|
+
--depends-on <task-a-id> \
|
|
404
|
+
-g "..." \
|
|
405
|
+
--implementation-steps "s1|s2" \
|
|
406
|
+
--test-cases "t1|t2"
|
|
489
407
|
```
|
|
490
408
|
|
|
491
|
-
|
|
409
|
+
Task B auto-blocks until Task A is done.
|
|
492
410
|
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
411
|
+
### 7. Configuration for Your Team
|
|
412
|
+
|
|
413
|
+
Set defaults early, rarely change:
|
|
496
414
|
|
|
497
415
|
```bash
|
|
498
|
-
mandor
|
|
499
|
-
mandor
|
|
416
|
+
mandor config set default_priority P2
|
|
417
|
+
mandor config set strict_mode true
|
|
418
|
+
mandor config set goal.lengths.task 500
|
|
500
419
|
```
|
|
501
420
|
|
|
502
|
-
###
|
|
421
|
+
### 8. Document Status Changes
|
|
503
422
|
|
|
504
|
-
|
|
423
|
+
Always explain why you're cancelling or changing status:
|
|
505
424
|
|
|
506
425
|
```bash
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
--goal "..." \
|
|
510
|
-
--implementation-steps "..." \
|
|
511
|
-
--test-cases "..." \
|
|
512
|
-
--depends-on api-feature-xxxx-task-xxxx
|
|
513
|
-
|
|
514
|
-
# Consider splitting if: task chains exceed 5 levels
|
|
426
|
+
mandor task update <task-id> --status cancelled \
|
|
427
|
+
--reason "Superseded by feature X"
|
|
515
428
|
```
|
|
516
429
|
|
|
517
|
-
###
|
|
518
|
-
|
|
519
|
-
- **Tasks**: Feature work, implementation, refactoring
|
|
520
|
-
- **Issues**: Bugs, improvements, technical debt, security, performance
|
|
430
|
+
### 9. Use Pipe Separators for Lists
|
|
521
431
|
|
|
522
432
|
```bash
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
--test-cases "..." \
|
|
528
|
-
--library-needs "oauth2-lib"
|
|
529
|
-
|
|
530
|
-
# Bug fix
|
|
531
|
-
mandor issue create "Fix auth timeout" --project api --type bug
|
|
433
|
+
--implementation-steps "Step 1|Step 2|Step 3"
|
|
434
|
+
--test-cases "Test 1|Test 2|Test 3"
|
|
435
|
+
--iae-scenarios "req-0001:scenario-0001|req-0002:scenario-0001"
|
|
436
|
+
--depends-on "task-1|task-2|task-3"
|
|
532
437
|
```
|
|
533
438
|
|
|
534
|
-
###
|
|
439
|
+
### 10. Track Regularly Before Starting
|
|
535
440
|
|
|
536
|
-
Always
|
|
441
|
+
Always check status first:
|
|
537
442
|
|
|
538
443
|
```bash
|
|
539
|
-
mandor
|
|
540
|
-
mandor
|
|
444
|
+
mandor track feature <feature-id> # See all task states
|
|
445
|
+
mandor track task <task-id> # Check gate status and dependencies
|
|
541
446
|
```
|
|
542
447
|
|
|
543
|
-
###
|
|
448
|
+
### 11. AI Agent Session Management
|
|
544
449
|
|
|
545
|
-
|
|
450
|
+
Log your progress between sessions:
|
|
546
451
|
|
|
547
452
|
```bash
|
|
548
|
-
#
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
# Test cases
|
|
552
|
-
--test-cases "Case 1|Case 2|Case 3"
|
|
453
|
+
# End of session
|
|
454
|
+
mandor session note "Completed task setup and testing, next: validation middleware"
|
|
553
455
|
|
|
554
|
-
#
|
|
555
|
-
--
|
|
456
|
+
# Start of session
|
|
457
|
+
mandor session note --read # See what was done
|
|
556
458
|
```
|
|
557
459
|
|
|
558
|
-
|
|
460
|
+
---
|
|
559
461
|
|
|
560
|
-
|
|
462
|
+
## Status Transitions
|
|
561
463
|
|
|
562
|
-
|
|
563
|
-
mandor task update api-feature-xxxx-task-xxxx --status done --dry-run
|
|
564
|
-
mandor feature update api-feature-xxxx --project api --cancel --reason "..." --dry-run
|
|
565
|
-
```
|
|
464
|
+
### Task Lifecycle
|
|
566
465
|
|
|
567
|
-
|
|
466
|
+
```
|
|
467
|
+
New (with depends-on) New (no depends)
|
|
468
|
+
↓ ↓
|
|
469
|
+
blocked ready
|
|
470
|
+
↓ ↓
|
|
471
|
+
└──────→ ready ←──────┐ │
|
|
472
|
+
↓ ↑ │ │
|
|
473
|
+
in_progress │ │ │
|
|
474
|
+
↓ │ │ │
|
|
475
|
+
done ├──cancelled│──────┤
|
|
476
|
+
│ │ │
|
|
477
|
+
└──────────┴───────┘
|
|
478
|
+
```
|
|
568
479
|
|
|
569
|
-
|
|
570
|
-
-
|
|
571
|
-
-
|
|
480
|
+
**Rules:**
|
|
481
|
+
- New task without `--depends-on`: status=ready, all gates=false
|
|
482
|
+
- New task with `--depends-on`: status=blocked
|
|
483
|
+
- blocked → ready: auto-transition when dependencies done
|
|
484
|
+
- ready → in_progress: requires all three gates=true
|
|
485
|
+
- ready → cancelled: allowed without gates
|
|
486
|
+
- in_progress → done: allowed without gates
|
|
487
|
+
- done: immutable, no transitions out
|
|
488
|
+
- Error messages show which gates are unmet
|
|
572
489
|
|
|
573
|
-
|
|
490
|
+
---
|
|
574
491
|
|
|
575
|
-
|
|
492
|
+
## File Structure
|
|
576
493
|
|
|
577
|
-
```
|
|
578
|
-
mandor
|
|
579
|
-
|
|
580
|
-
|
|
494
|
+
```
|
|
495
|
+
.mandor/
|
|
496
|
+
├── workspace.json # Workspace metadata
|
|
497
|
+
├── config.json # Configuration
|
|
498
|
+
├── session-notes.jsonl # AI session progress (NDJSON)
|
|
499
|
+
└── projects/
|
|
500
|
+
└── <project-id>/
|
|
501
|
+
├── project.json
|
|
502
|
+
├── briefs/
|
|
503
|
+
│ └── <brief-id>.md # Brief document
|
|
504
|
+
├── specs/
|
|
505
|
+
│ └── <spec-id>.md # Spec with requirements
|
|
506
|
+
├── blueprints.jsonl # Blueprint records
|
|
507
|
+
├── features.jsonl # Feature records
|
|
508
|
+
├── tasks.jsonl # Task records
|
|
509
|
+
└── issues.jsonl # Issue records
|
|
581
510
|
```
|
|
582
511
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
```bash
|
|
586
|
-
# Workspace overview
|
|
587
|
-
mandor status
|
|
588
|
-
|
|
589
|
-
# Project summary
|
|
590
|
-
mandor status --project api
|
|
512
|
+
---
|
|
591
513
|
|
|
592
|
-
|
|
593
|
-
mandor track project api
|
|
514
|
+
## Configuration
|
|
594
515
|
|
|
595
|
-
|
|
596
|
-
|
|
516
|
+
| Key | Type | Default | Description |
|
|
517
|
+
|-----|------|---------|-------------|
|
|
518
|
+
| `default_priority` | string | P3 | Default priority for new entities (P0-P5) |
|
|
519
|
+
| `strict_mode` | boolean | false | Enable strict validation |
|
|
520
|
+
| `goal.lengths.project` | integer | 500 | Min chars for project goal |
|
|
521
|
+
| `goal.lengths.feature` | integer | 300 | Min chars for feature goal |
|
|
522
|
+
| `goal.lengths.task` | integer | 500 | Min chars for task goal |
|
|
523
|
+
| `goal.lengths.issue` | integer | 200 | Min chars for issue goal |
|
|
597
524
|
|
|
598
|
-
|
|
599
|
-
mandor
|
|
525
|
+
```bash
|
|
526
|
+
mandor config list # Show all
|
|
527
|
+
mandor config get default_priority # Get one
|
|
528
|
+
mandor config set default_priority P2 # Set one
|
|
529
|
+
mandor config reset default_priority # Reset to default
|
|
600
530
|
```
|
|
601
531
|
|
|
602
532
|
---
|
|
603
533
|
|
|
604
|
-
|
|
605
534
|
## Troubleshooting
|
|
606
535
|
|
|
607
|
-
###
|
|
536
|
+
### Gate Transition Error
|
|
608
537
|
|
|
609
|
-
|
|
538
|
+
**Error:** "Cannot transition to in_progress: gates not set"
|
|
610
539
|
|
|
611
|
-
|
|
612
|
-
export PATH="$HOME/.local/bin:$PATH"
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
### "Project not found"
|
|
616
|
-
|
|
617
|
-
Check the project ID and ensure you're in the correct workspace:
|
|
540
|
+
**Solution:** Set all three gates before transitioning
|
|
618
541
|
|
|
619
542
|
```bash
|
|
620
|
-
mandor
|
|
621
|
-
```
|
|
622
|
-
|
|
623
|
-
### "Entity not found"
|
|
543
|
+
mandor track task <task-id> # Check which gates are false
|
|
624
544
|
|
|
625
|
-
|
|
545
|
+
mandor task set-gate <task-id> --is-read-brief
|
|
546
|
+
mandor task set-gate <task-id> --is-read-spec
|
|
547
|
+
mandor task set-gate <task-id> --is-read-session-notes
|
|
626
548
|
|
|
627
|
-
|
|
628
|
-
mandor track feature <feature-id>
|
|
629
|
-
mandor track project <project-id>
|
|
549
|
+
mandor task update <task-id> --status in_progress
|
|
630
550
|
```
|
|
631
551
|
|
|
632
|
-
###
|
|
552
|
+
### Task Blocked by Dependencies
|
|
553
|
+
|
|
554
|
+
**Error:** "Task is blocked by dependencies"
|
|
633
555
|
|
|
634
|
-
|
|
556
|
+
**Solution:** Complete all blocking tasks first
|
|
635
557
|
|
|
636
558
|
```bash
|
|
637
|
-
#
|
|
638
|
-
mandor project detail <project-id>
|
|
559
|
+
mandor track task <task-id> # See which tasks are blocking
|
|
639
560
|
|
|
640
|
-
#
|
|
641
|
-
mandor
|
|
561
|
+
# Complete each blocking task
|
|
562
|
+
mandor task update <blocking-task-id> --status done
|
|
563
|
+
|
|
564
|
+
# Dependent task auto-transitions to ready
|
|
565
|
+
mandor track task <task-id>
|
|
642
566
|
```
|
|
643
567
|
|
|
644
|
-
###
|
|
568
|
+
### Feature Not Found
|
|
569
|
+
|
|
570
|
+
**Error:** "Feature not found" or "Entity not found"
|
|
645
571
|
|
|
646
|
-
|
|
572
|
+
**Solution:** Verify ID and check workspace
|
|
647
573
|
|
|
648
574
|
```bash
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
# Issues: open → ready → in_progress → resolved
|
|
575
|
+
mandor track project <project-id> # List all features
|
|
576
|
+
mandor track feature <feature-id> # Check if exists
|
|
652
577
|
```
|
|
653
578
|
|
|
654
|
-
|
|
579
|
+
---
|
|
580
|
+
|
|
581
|
+
## Development
|
|
655
582
|
|
|
656
|
-
|
|
583
|
+
### Build
|
|
657
584
|
|
|
658
585
|
```bash
|
|
659
|
-
|
|
586
|
+
cd Mandor
|
|
587
|
+
go build -o mandor ./cmd/mandor
|
|
660
588
|
```
|
|
661
589
|
|
|
662
|
-
|
|
590
|
+
### Run Tests
|
|
663
591
|
|
|
592
|
+
```bash
|
|
593
|
+
go test ./...
|
|
594
|
+
```
|
|
664
595
|
|
|
665
|
-
|
|
596
|
+
### View All Commands
|
|
666
597
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
| `goal.lengths.project` | integer | 500 | Min chars for project goal |
|
|
672
|
-
| `goal.lengths.feature` | integer | 300 | Min chars for feature goal |
|
|
673
|
-
| `goal.lengths.task` | integer | 500 | Min chars for task goal |
|
|
674
|
-
| `goal.lengths.issue` | integer | 200 | Min chars for issue goal |
|
|
598
|
+
```bash
|
|
599
|
+
./mandor --help
|
|
600
|
+
./mandor populate # Full reference with examples
|
|
601
|
+
```
|
|
675
602
|
|
|
676
603
|
---
|
|
677
604
|
|
|
605
|
+
## Key Features
|
|
678
606
|
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
└── <project-id>/
|
|
688
|
-
├── project.json # Project metadata
|
|
689
|
-
├── features.jsonl # Feature records
|
|
690
|
-
├── tasks.jsonl # Task records
|
|
691
|
-
└── issues.jsonl # Issue records
|
|
692
|
-
```
|
|
693
|
-
|
|
694
|
-
**Session Notes Format (session-notes.jsonl):**
|
|
695
|
-
```json
|
|
696
|
-
{"timestamp":"2026-02-04T12:45:00Z","note":"Completed v0.4.4 release and testing"}
|
|
697
|
-
{"timestamp":"2026-02-04T14:20:00Z","note":"Started performance optimization - blocked on benchmarks"}
|
|
698
|
-
```
|
|
607
|
+
✓ **Structured Workflow**: Brief → Spec → Blueprint → Feature → Task
|
|
608
|
+
✓ **Gate Enforcement**: Three read gates required before starting work
|
|
609
|
+
✓ **Dependency Tracking**: Auto-blocking and auto-unblocking with cascading
|
|
610
|
+
✓ **Cross-Feature Dependencies**: Tasks can depend across feature boundaries
|
|
611
|
+
✓ **Session Tracking**: Session notes for AI agent progress
|
|
612
|
+
✓ **CLI-Native**: Terminal, scripts, CI/CD pipelines
|
|
613
|
+
✓ **Deterministic**: Single source of truth in JSONL files
|
|
614
|
+
✓ **Auditable**: Full change history
|
|
699
615
|
|
|
700
616
|
---
|
|
701
617
|
|
|
702
|
-
|
|
703
618
|
## Support
|
|
704
619
|
|
|
705
|
-
-
|
|
706
|
-
-
|
|
707
|
-
- Repository
|
|
620
|
+
- **Documentation**: Run `mandor populate` for complete command reference
|
|
621
|
+
- **Help**: `mandor <command> --help` for any command
|
|
622
|
+
- **Repository**: https://github.com/budisantoso/mandor
|
|
708
623
|
|
|
709
624
|
---
|
|
710
625
|
|
|
711
|
-
|
|
712
626
|
**Built for AI Agent Workflows**
|