@mandors/cli 0.3.9 → 0.3.11

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/README.md CHANGED
@@ -60,9 +60,9 @@ Workspace
60
60
 
61
61
  | Type | Purpose | Status Values |
62
62
  |------|---------|---------------|
63
- | **Task** | Work items within a feature | ready, in_progress, done, blocked, cancelled |
63
+ | **Task** | Work items within a feature | pending, ready, in_progress, done, blocked, cancelled |
64
64
  | **Feature** | Logical grouping of related tasks | draft, active, done, blocked, cancelled |
65
- | **Issue** | Problems, bugs, or improvement requests | ready, in_progress, resolved, wontfix, blocked |
65
+ | **Issue** | Problems, bugs, or improvement requests | open, ready, in_progress, resolved, wontfix, blocked, cancelled |
66
66
 
67
67
  ### Dependency Types
68
68
 
@@ -74,9 +74,8 @@ Workspace
74
74
 
75
75
  **Tasks:**
76
76
  ```
77
- ready → in_progress → done
78
- ready → blocked (dependency not done)
79
- blocked → ready (dependencies resolved)
77
+ pending → ready → in_progress → done
78
+ pending → ready → blocked ready
80
79
  ready → cancelled
81
80
  cancelled → ready (reopen)
82
81
  ```
@@ -91,12 +90,13 @@ cancelled → draft (reopen)
91
90
 
92
91
  **Issues:**
93
92
  ```
94
- ready → in_progress → resolved
95
- ready → in_progress → wontfix
96
- ready → blocked (dependency not done)
97
- blocked → ready (dependencies resolved)
93
+ open → ready → in_progress → resolved
94
+ open → ready → in_progress → wontfix
95
+ open → ready → blocked ready
98
96
  resolved → ready (reopen)
99
97
  wontfix → ready (reopen)
98
+ open → cancelled
99
+ cancelled → open (reopen)
100
100
  ```
101
101
 
102
102
  ---
@@ -106,15 +106,22 @@ wontfix → ready (reopen)
106
106
  ### Build from Source
107
107
 
108
108
  ```bash
109
- git clone https://github.com/budisantoso/mandor.git
109
+ git clone https://github.com/sanxzy/mandor.git
110
110
  cd mandor
111
- go build -o ./binaries/mandor ./cmd/mandor
111
+ go build -o ./mandor ./cmd/mandor
112
112
  ```
113
113
 
114
114
  ### Use from Binaries
115
115
 
116
116
  ```bash
117
- ./binaries/mandor --help
117
+ ./mandor --help
118
+ ```
119
+
120
+ ### Install from npm
121
+
122
+ ```bash
123
+ npm install -g @mandors/cli
124
+ mandor --help
118
125
  ```
119
126
 
120
127
  ---
@@ -124,7 +131,6 @@ go build -o ./binaries/mandor ./cmd/mandor
124
131
  ### 1. Initialize Workspace
125
132
 
126
133
  ```bash
127
- export MANDOR_ENV=development
128
134
  mandor init "My Project"
129
135
  ```
130
136
 
@@ -147,7 +153,7 @@ mandor feature create "Authentication" --project api \
147
153
 
148
154
  ```bash
149
155
  # Create first task (no dependencies)
150
- mandor task create api-feature-xxx "JWT Parser" \
156
+ mandor task create "JWT Parser" --feature api-feature-xxx \
151
157
  --goal "Parse and validate JWT tokens in incoming requests with expiry and signature verification" \
152
158
  --implementation-steps "Setup crypto library|Add token validation|Handle expiry|Return errors" \
153
159
  --test-cases "Valid token accepted|Expired token rejected|Invalid signature rejected" \
@@ -156,7 +162,7 @@ mandor task create api-feature-xxx "JWT Parser" \
156
162
  --priority P1
157
163
 
158
164
  # Create dependent task (depends on JWT Parser)
159
- mandor task create api-feature-xxx "Login Endpoint" \
165
+ mandor task create "Login Endpoint" --feature api-feature-xxx \
160
166
  --goal "Accept user credentials and return JWT token with refresh token flow" \
161
167
  --implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Return tokens" \
162
168
  --test-cases "Valid creds return token|Invalid creds rejected|Tokens properly formatted" \
@@ -170,16 +176,13 @@ mandor task create api-feature-xxx "Login Endpoint" \
170
176
 
171
177
  ```bash
172
178
  # See all tasks in feature
173
- mandor task list api-feature-xxx
179
+ mandor task list --feature api-feature-xxx
174
180
 
175
181
  # See tasks ready to work on
176
- mandor task ready api-feature-xxx
182
+ mandor task ready --feature api-feature-xxx
177
183
 
178
184
  # See blocked/waiting tasks
179
- mandor task blocked api-feature-xxx
180
-
181
- # See summary grouped by status
182
- mandor task summary api-feature-xxx
185
+ mandor task blocked --feature api-feature-xxx
183
186
  ```
184
187
 
185
188
  ### 6. Mark Tasks Complete
@@ -190,7 +193,7 @@ mandor task update <task-id> --status in_progress
190
193
  mandor task update <task-id> --status done
191
194
 
192
195
  # Dependent tasks auto-transition to "ready"
193
- mandor task ready api-feature-xxx # Now shows "Login Endpoint" as ready
196
+ mandor task ready --feature api-feature-xxx # Now shows "Login Endpoint" as ready
194
197
  ```
195
198
 
196
199
  ---
@@ -201,627 +204,274 @@ mandor task ready api-feature-xxx # Now shows "Login Endpoint" as ready
201
204
 
202
205
  ```bash
203
206
  # Initialize a new workspace
204
- mandor init --workspace-name "Name"
207
+ mandor init [--workspace-name <name>] [-y]
205
208
 
206
- # View workspace status
207
- mandor status
209
+ # View workspace and project status
210
+ mandor status [--project <id>] [--summary] [--json]
211
+
212
+ # Display feature summary grouped by priority
213
+ mandor summary [--project <id>]
208
214
 
209
215
  # Manage configuration
210
216
  mandor config get <key>
211
217
  mandor config set <key> <value>
218
+ mandor config list
212
219
  mandor config reset <key>
220
+
221
+ # Display all commands and best practices
222
+ mandor populate [--markdown|--json]
223
+
224
+ # Show version
225
+ mandor version
226
+
227
+ # Generate shell completions
228
+ mandor completion [bash|zsh|fish]
213
229
  ```
214
230
 
215
231
  ### Project Commands
216
232
 
217
233
  ```bash
218
234
  # Create a project
219
- mandor project create <id> --name "Name" --goal "Description"
235
+ mandor project create <id> --name <name> --goal <goal> [OPTIONS]
220
236
 
221
237
  # List projects
222
- mandor project list
238
+ mandor project list [--json]
223
239
 
224
240
  # Show project details
225
241
  mandor project detail <project-id>
226
242
 
227
- # Delete a project
228
- mandor project delete <project-id>
243
+ # Update project
244
+ mandor project update <project-id> --name <name> [--goal <goal>]
245
+
246
+ # Delete project (soft delete)
247
+ mandor project delete <project-id> [--hard]
248
+
249
+ # Reopen a soft-deleted project
250
+ mandor project reopen <project-id>
229
251
  ```
230
252
 
231
253
  ### Feature Commands
232
254
 
233
255
  ```bash
234
256
  # Create a feature
235
- mandor feature create "Name" --project <id> --goal "Description" [--scope <value>]
257
+ mandor feature create <name> --project <id> --goal <goal> [--scope <scope>] [--priority <priority>] [--depends <ids>]
236
258
 
237
259
  # List features
238
- mandor feature list --project <id> [--scope <value>]
260
+ mandor feature list --project <id> [--json] [--include-deleted]
239
261
 
240
262
  # Show feature details
241
- mandor feature detail <feature-id> --project <id> [--include-deleted]
263
+ mandor feature detail <feature-id> --project <id>
242
264
 
243
265
  # Update feature
244
- mandor feature update <id> --project <id> [--status <value>] [--cancel --reason] [--reopen]
266
+ mandor feature update <feature-id> --project <id> [--name <text>] [--goal <goal>] [--scope <scope>] [--priority <priority>] [--status <status>] [--depends <ids>] [--cancel --reason <text>] [--reopen] [--dry-run]
245
267
 
246
- # Delete feature (soft delete)
247
- mandor feature update <id> --project <id> --cancel --reason "Reason"
268
+ # List features by status filter
269
+ mandor feature list --project <id> [--status <status>]
248
270
  ```
249
271
 
250
272
  ### Task Commands
251
273
 
252
274
  ```bash
253
- # Create a task (positional arguments: feature_id, name)
254
- mandor task create <feature_id> "<name>" \
255
- --goal "Task description (min 500 chars)" \
256
- --implementation-steps "step1|step2|step3" \
257
- --test-cases "test1|test2|test3" \
258
- --derivable-files "file1.go|file2.go" \
259
- --library-needs "lib1|lib2" \
260
- [--priority <P0-P5>] \
261
- [--depends-on <task-id>]
262
-
263
- # List tasks in a feature (positional argument: feature_id)
264
- mandor task list <feature_id> [--status <value>] [--priority <value>] [--json]
275
+ # Create a task
276
+ mandor task create <name> --feature <id> --goal <goal> \
277
+ --implementation-steps <steps> --test-cases <cases> \
278
+ --derivable-files <files> --library-needs <libs> \
279
+ [--priority <priority>] [--depends-on <ids>] [-y]
265
280
 
266
- # Show ready tasks (available to work on)
267
- mandor task ready <feature_id> [--priority <P0-P5>] [--json]
281
+ # List tasks in a feature
282
+ mandor task list --feature <id> [--status <status>] [--priority <priority>] [--json] [--include-deleted] [--sort <field>] [--order <asc|desc>]
268
283
 
269
- # Show blocked tasks (waiting on dependencies)
270
- mandor task blocked <feature_id> [--priority <P0-P5>] [--json]
284
+ # Show ready tasks
285
+ mandor task ready --feature <id> [--priority <priority>] [--json]
271
286
 
272
- # Show task summary (grouped by status)
273
- mandor task summary <feature_id>
287
+ # Show blocked tasks
288
+ mandor task blocked --feature <id> [--priority <priority>] [--json]
274
289
 
275
290
  # Show task details
276
- mandor task detail <task-id> [--include-deleted] [--events] [--dependencies]
291
+ mandor task detail <task-id>
277
292
 
278
- # Update task status
279
- mandor task update <id> --status <value>
280
-
281
- # Transition task to work on it
282
- mandor task update <id> --status in_progress
283
-
284
- # Mark task complete (auto-unblocks dependents)
285
- mandor task update <id> --status done
286
-
287
- # Block task manually (external dependency)
288
- mandor task update <id> --status blocked --reason "Waiting on API response"
289
-
290
- # Cancel task
291
- mandor task update <id> --cancel --reason "Superseded by feature X"
292
-
293
- # Reopen cancelled task
294
- mandor task update <id> --reopen
293
+ # Update task
294
+ mandor task update <task-id> [--name <text>] [--goal <goal>] [--priority <priority>] \
295
+ [--implementation-steps <steps>] [--test-cases <cases>] [--derivable-files <files>] \
296
+ [--library-needs <libs>] [--status <status>] [--depends <ids>] [--depends-add <ids>] \
297
+ [--depends-remove <ids>] [--cancel --reason <text>] [--reopen] [--dry-run] [--force]
295
298
  ```
296
299
 
297
300
  ### Issue Commands
298
301
 
299
302
  ```bash
300
303
  # Create an issue
301
- mandor issue create <project_id> "<name>" \
302
- --type <type> \
303
- --goal "Issue description (min 200 chars)" \
304
- --affected-files "file1|file2" \
305
- --affected-tests "test1|test2" \
306
- --implementation-steps "step1|step2" \
307
- [--priority <P0-P5>] \
308
- [--depends-on <issue-id>]
309
-
310
- # List issues in a project
311
- mandor issue list <project_id> [--status <value>] [--type <value>] [--json]
304
+ mandor issue create <name> --project <id> --type <type> --goal <goal> \
305
+ --affected-files <files> --affected-tests <tests> \
306
+ --implementation-steps <steps> \
307
+ [--priority <priority>] [--depends-on <ids>] [--library-needs <libs>] [-y]
312
308
 
313
- # Show ready issues (available to fix)
314
- mandor issue ready <project_id> [--type <type>] [--priority <P0-P5>] [--json]
309
+ # List issues in project
310
+ mandor issue list [--project <id>] [--type <type>] [--status <status>] [--priority <priority>] [--json] [--sort <field>] [--order <asc|desc>] [--verbose]
315
311
 
316
- # Show blocked issues (waiting on dependencies)
317
- mandor issue blocked <project_id> [--type <type>] [--priority <P0-P5>] [--json]
312
+ # Show ready issues
313
+ mandor issue ready [--project <id>] [--type <type>] [--priority <priority>] [--json]
318
314
 
319
- # Show issue summary (grouped by status)
320
- mandor issue summary <project_id>
315
+ # Show blocked issues
316
+ mandor issue blocked [--project <id>] [--type <type>] [--priority <priority>] [--json]
321
317
 
322
318
  # Show issue details
323
- mandor issue detail <issue-id> [--include-deleted]
324
-
325
- # Update issue status
326
- mandor issue update <id> --status <value>
319
+ mandor issue detail <issue-id> [--project <id>]
327
320
 
328
- # Start working on an issue
329
- mandor issue update <id> --start
330
-
331
- # Mark issue resolved
332
- mandor issue update <id> --resolve
333
-
334
- # Mark issue as won't fix
335
- mandor issue update <id> --wontfix --reason "Working as intended"
336
-
337
- # Reopen a resolved/wontfix issue
338
- mandor issue update <id> --reopen
339
-
340
- # Block issue manually
341
- mandor issue update <id> --status blocked --reason "Waiting on infrastructure"
342
-
343
- # Cancel issue (duplicate/no longer relevant)
344
- mandor issue update <id> --cancel --reason "Duplicate of issue #123"
321
+ # Update issue
322
+ mandor issue update <issue-id> [--project <id>] [--name <text>] [--goal <goal>] [--type <type>] [--priority <priority>] \
323
+ [--status <status>] [--reason <text>] [--depends-on <ids>] [--depends-add <ids>] [--depends-remove <ids>] \
324
+ [--affected-files <files>] [--affected-tests <tests>] [--implementation-steps <steps>] [--library-needs <libs>] \
325
+ [--start] [--resolve] [--wontfix] [--reopen] [--cancel] [--force] [--dry-run]
345
326
  ```
346
327
 
347
- ---
348
-
349
- ## Configuration
350
-
351
- ### Available Config Keys
328
+ ### AI Commands
352
329
 
353
330
  ```bash
354
- # Default priority for new entities
355
- mandor config set default_priority P3
356
-
357
- # Strict mode for dependency rules
358
- mandor config set strict_mode true
331
+ # Generate AGENTS.md for multi-agent coordination
332
+ mandor ai agents
359
333
 
360
- # View current config
361
- mandor config get default_priority
362
- mandor config get strict_mode
363
-
364
- # Reset to defaults
365
- mandor config reset default_priority
334
+ # Generate CLAUDE.md for the project
335
+ mandor ai claude
366
336
  ```
367
337
 
368
- ### Priority Values
369
-
370
- | Priority | Use Case |
371
- |----------|----------|
372
- | P0 | Critical / Security |
373
- | P1 | High / Blocker |
374
- | P2 | Medium-High |
375
- | P3 | Medium (default) |
376
- | P4 | Medium-Low |
377
- | P5 | Low / Nice to have |
378
-
379
- ### Scope Values
380
-
381
- Valid scope values for features: `frontend`, `backend`, `fullstack`, `cli`, `desktop`, `android`, `flutter`, `react-native`, `ios`, `swift`
382
-
383
- ### Issue Types
384
-
385
- Valid issue types: `bug`, `improvement`, `debt`, `security`, `performance`
386
-
387
338
  ---
388
339
 
389
- ## Dependency Management
390
-
391
- ### Creating Dependencies
392
-
393
- ```bash
394
- # Task depends on another task
395
- mandor task create "Task B" --feature f1 \
396
- --depends-on task-a-id
397
-
398
- # Issue depends on another issue
399
- mandor issue create "Issue B" --project p1 \
400
- --depends-on issue-a-id
401
-
402
- # Feature depends on another feature
403
- mandor feature create "Feature B" --project p1 \
404
- --depends-on feature-a-id
405
- ```
406
-
407
- ### Managing Dependencies
408
-
409
- ```bash
410
- # Add dependencies
411
- mandor task update <task-id> --depends-add "id1|id2"
412
-
413
- # Replace all dependencies
414
- mandor task update <task-id> --depends "id1|id2"
415
-
416
- # Remove dependencies
417
- mandor task update <task-id> --depends-remove "id1"
418
- ```
419
-
420
- ### Dependency Behaviors
421
-
422
- - **Auto-blocking**: Entities start `blocked` if dependencies aren't `done`
423
- - **Auto-unblocking**: When a dependency becomes `done`, dependents automatically transition to `ready`
424
- - **Cross-project**: Dependencies can span projects if enabled in project config
340
+ ## Common Workflows
425
341
 
426
- ### Cross-Project Dependencies
342
+ ### Replace This (Markdown Plan Files)
427
343
 
428
- Projects can be configured to allow or disallow cross-project dependencies:
429
-
430
- ```bash
431
- # Allow cross-project task dependencies
432
- mandor project create p1 --task-dep cross_project_allowed
433
-
434
- # Restrict to same-project only (default)
435
- mandor project create p2 --task-dep same_project_only
436
- ```
437
-
438
- ### Circular Dependency Prevention
439
-
440
- Mandor automatically prevents:
441
- - Self-dependencies (A → A)
442
- - Two-node cycles (A → B → A)
443
- - N-node cycles (A → B → C → A)
444
- - Cross-project cycles
445
-
446
- ---
447
-
448
- ## Status Management
449
-
450
- ### Checking Status
451
-
452
- ```bash
453
- # List blocked tasks
454
- mandor task list --feature <id> --status blocked
455
-
456
- # List ready tasks
457
- mandor task list --feature <id> --status ready
458
-
459
- # List all tasks
460
- mandor task list --feature <id>
461
- ```
462
-
463
- ### Transitioning Status
464
-
465
- ```bash
466
- # Task workflow
467
- mandor task update <id> --status in_progress
468
- mandor task update <id> --status done
469
-
470
- # Feature workflow
471
- mandor feature update <id> --project <pid> --status active
472
- mandor feature update <id> --project <pid> --status done
473
-
474
- # Issue workflow
475
- mandor issue update <id> --start
476
- mandor issue update <id> --resolve
477
- # or
478
- mandor issue update <id> --wontfix --reason "Reason"
479
- ```
480
-
481
- ### Cancel and Reopen
482
-
483
- ```bash
484
- # Cancel (soft delete)
485
- mandor task update <id> --cancel --reason "Why cancelled"
486
- mandor feature update <id> --project <pid> --cancel --reason "Why cancelled"
487
- mandor issue update <id> --wontfix --reason "Why wontfix"
488
-
489
- # Reopen
490
- mandor task update <id> --reopen
491
- mandor feature update <id> --project <pid> --reopen
492
- mandor issue update <id> --reopen
493
- ```
494
-
495
- **Note**: Cancelled entities can be viewed with `--include-deleted` flag.
496
-
497
- ---
498
-
499
- ## Filtering and Querying
500
-
501
- ### Filter by Status
344
+ ```markdown
345
+ # PLAN.md
346
+ ## Phase 1: Authentication
347
+ - [ ] JWT parser (depends on cryptography)
348
+ - [ ] Login endpoint (depends on JWT parser)
349
+ - [ ] Refresh token (depends on JWT parser)
502
350
 
503
- ```bash
504
- mandor task list --feature <id> --status ready
505
- mandor task list --feature <id> --status blocked
506
- mandor task list --feature <id> --status done
351
+ Status: Last updated 3 days ago (probably stale!)
507
352
  ```
508
353
 
509
- ### Filter by Priority
354
+ ### With This (Mandor)
510
355
 
511
356
  ```bash
512
- mandor task list --feature <id> --priority P0
513
- mandor task list --feature <id> --priority P2
514
- ```
515
-
516
- ### Filter by Scope (Features)
357
+ # Create structured plan
358
+ mandor feature create "Authentication" --project api \
359
+ --goal "Implement JWT and login endpoints" \
360
+ --scope backend
517
361
 
518
- ```bash
519
- mandor feature list --project <id> --scope backend
520
- mandor feature list --project <id> --scope frontend
521
- ```
362
+ # Create tasks with explicit dependencies
363
+ mandor task create "JWT Parser" --feature auth-feature-id \
364
+ --goal "Validate JWT tokens..." \
365
+ --implementation-steps "Step 1|Step 2" \
366
+ --test-cases "Test invalid tokens|Test expired" \
367
+ --derivable-files "jwt.go|jwt_test.go" \
368
+ --library-needs "jsonwebtoken" \
369
+ --priority P1
522
370
 
523
- ### Filter by Type (Issues)
371
+ mandor task create "Login Endpoint" --feature auth-feature-id \
372
+ --goal "Accept credentials and return JWT..." \
373
+ --depends-on jwt-parser-task-id \
374
+ --priority P1
524
375
 
525
- ```bash
526
- mandor issue list --project <id> --type bug
527
- mandor issue list --project <id> --type security
376
+ # Real-time progress queries
377
+ mandor task ready --feature auth-feature-id # See what's available now
378
+ mandor task blocked --feature auth-feature-id # See what's waiting
528
379
  ```
529
380
 
530
- ---
531
-
532
- ## Event System
533
-
534
- ### Event Log Location
535
-
536
- All events are stored in `.mandor/events.jsonl` in your workspace.
537
-
538
- ### Event Types
539
-
540
- | Event | Description |
541
- |-------|-------------|
542
- | entity_created | New entity created |
543
- | status_changed | Status transitioned |
544
- | dependency_added | Dependency added |
545
- | dependency_removed | Dependency removed |
546
- | dependent_unblocked | Dependent entity became ready |
547
- | entity_reopened | Cancelled entity reopened |
548
- | entity_cancelled | Entity cancelled |
381
+ **Benefits:**
382
+ - No file sync required
383
+ - Dependencies auto-validated
384
+ - Blocking tasks auto-detected
385
+ - Reproducible state (`events.jsonl`)
386
+ - Queryable via CLI or JSON
387
+ - Works in CI/CD pipelines
549
388
 
550
- ### Viewing Events
389
+ ### Dependency Management
551
390
 
552
391
  ```bash
553
- # View events for a specific entity
554
- mandor task detail <id> --events
555
-
556
- # Events are also shown in default detail view
557
- mandor task detail <id>
558
- ```
559
-
560
- ---
392
+ # View all projects and their status
393
+ mandor status
561
394
 
562
- ## JSONL Format
395
+ # Check a specific project
396
+ mandor status --project api
563
397
 
564
- Mandor uses JSONL (JSON Lines) for event storage:
398
+ # View feature dependencies
399
+ mandor feature list --project api
565
400
 
566
- ```json
567
- {"timestamp":"2026-02-01T10:00:00Z","type":"entity_created","entity":"task","id":"task-abc","name":"JWT Parser"}
568
- {"timestamp":"2026-02-01T10:01:00Z","type":"status_changed","entity":"task","id":"task-abc","from":"ready","to":"in_progress"}
569
- {"timestamp":"2026-02-01T10:02:00Z","type":"status_changed","entity":"task","id":"task-abc","from":"in_progress","to":"done"}
570
- {"timestamp":"2026-02-01T10:02:00Z","type":"dependent_unblocked","entity":"task","id":"task-xyz","dependency":"task-abc"}
571
- ```
401
+ # Create tasks with dependencies
402
+ mandor task create "Step 2" --feature feature-id \
403
+ --goal "..." \
404
+ --implementation-steps "..." \
405
+ --test-cases "..." \
406
+ --derivable-files "..." \
407
+ --library-needs "..." \
408
+ --depends-on task-id-1|task-id-2
572
409
 
573
- ### Parsing Events
410
+ # See what's blocking progress
411
+ mandor task blocked --feature feature-id
574
412
 
575
- ```bash
576
- # View all events
577
- cat .mandor/events.jsonl
413
+ # Mark as done (auto-unblocks dependents)
414
+ mandor task update task-id --status done
578
415
 
579
- # Filter for specific entity
580
- grep "task-abc" .mandor/events.jsonl
581
-
582
- # Count events by type
583
- grep '"type":"status_changed"' .mandor/events.jsonl | wc -l
416
+ # Dependents auto-transition to ready
417
+ mandor task ready --feature feature-id
584
418
  ```
585
419
 
586
- ---
587
-
588
- ## Examples
589
-
590
- ### Complete Feature Workflow
420
+ ### Issue Tracking
591
421
 
592
422
  ```bash
593
- # Initialize and create project
594
- export MANDOR_ENV=development
595
- mandor init "API Project"
596
- mandor project create api --name "REST API" --goal "Build production REST API with authentication"
597
-
598
- # Create feature (structured epic)
599
- mandor feature create "Authentication" --project api \
600
- --goal "Implement JWT-based auth with login, logout, and token refresh flows" \
601
- --scope backend
602
-
603
- # Create first task (no dependencies)
604
- mandor task create api-feature-xxx "JWT Parser" \
605
- --goal "Parse and validate JWT tokens with signature verification and expiry checks" \
606
- --implementation-steps "Import crypto library|Implement token parsing|Add signature validation|Handle expiry" \
607
- --test-cases "Valid token accepted|Invalid signature rejected|Expired token rejected" \
608
- --derivable-files "jwt_parser.go|jwt_parser_test.go" \
609
- --library-needs "golang-jwt" \
610
- --priority P1
611
-
612
- # Create dependent task
613
- mandor task create api-feature-xxx "JWT Validator" \
614
- --goal "Create middleware to validate JWT tokens in incoming requests" \
615
- --implementation-steps "Create middleware|Validate token|Check expiry|Return errors" \
616
- --test-cases "Valid requests pass|Invalid requests rejected|Error responses correct" \
617
- --derivable-files "auth_middleware.go|auth_middleware_test.go" \
618
- --library-needs "none" \
619
- --depends-on <jwt-parser-id> \
620
- --priority P1
621
-
622
- # Create another dependent task
623
- mandor task create api-feature-xxx "Login Endpoint" \
624
- --goal "Accept credentials and return JWT token pair with refresh token" \
625
- --implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Store refresh token|Return tokens" \
626
- --test-cases "Valid creds return tokens|Invalid creds rejected|Tokens formatted correctly" \
627
- --derivable-files "login_handler.go|login_handler_test.go" \
628
- --library-needs "none" \
629
- --depends-on <jwt-parser-id> \
630
- --priority P1
423
+ # Create a bug issue
424
+ mandor issue create "Fix memory leak in auth" \
425
+ --project api \
426
+ --type bug \
427
+ --priority P0 \
428
+ --goal "Goroutine leak in token refresh handler..." \
429
+ --affected-files "src/handlers/auth.go|src/middleware/auth.go" \
430
+ --affected-tests "src/handlers/auth_test.go" \
431
+ --implementation-steps "Identify leak|Add cleanup|Test|Verify"
631
432
 
632
- # View progress and blocking status
633
- mandor task list api-feature-xxx # See all tasks
634
- mandor task ready api-feature-xxx # Only JWT Parser is ready
635
- mandor task blocked api-feature-xxx # Validator and Login waiting on Parser
636
- mandor task summary api-feature-xxx # Grouped summary
433
+ # List open issues
434
+ mandor issue list --project api --status open
637
435
 
638
- # Execute workflow
639
- mandor task update <jwt-parser-id> --status in_progress
640
- mandor task update <jwt-parser-id> --status done
436
+ # Filter by type and priority
437
+ mandor issue list --project api --type bug --priority P0
641
438
 
642
- # Now Validator and Login auto-transition to ready
643
- mandor task ready api-feature-xxx # Both now ready to start
439
+ # See ready issues
440
+ mandor issue ready --project api --type bug
644
441
 
645
- # Work on dependent tasks
646
- mandor task update <jwt-validator-id> --status in_progress
647
- mandor task update <jwt-validator-id> --status done
442
+ # Start working
443
+ mandor issue update issue-id --start
648
444
 
649
- mandor task update <login-endpoint-id> --status in_progress
650
- mandor task update <login-endpoint-id> --status done
445
+ # Mark as resolved
446
+ mandor issue update issue-id --resolve
651
447
 
652
- # Mark feature complete
653
- mandor feature update api-feature-xxx --project api --status active
654
- mandor feature update api-feature-xxx --project api --status done
448
+ # Mark as won't fix with reason
449
+ mandor issue update issue-id --wontfix --reason "Working as intended"
655
450
  ```
656
451
 
657
- ### Multi-Project Dependencies
452
+ ### Configuration
658
453
 
659
454
  ```bash
660
- # Create projects with cross-project dependencies enabled
661
- mandor project create core --name "Core Library" \
662
- --goal "Shared database and utility libraries"
663
- mandor project create api --name "API Service" \
664
- --goal "REST API service" --task-dep cross_project_allowed
665
-
666
- # Create shared library feature and task
667
- mandor feature create "Database Layer" --project core \
668
- --goal "Connection pool and query builder for database access" \
669
- --scope backend
670
-
671
- mandor task create core-feature-xxx "Database Connection Pool" \
672
- --goal "Implement connection pool with health checks and auto-reconnect" \
673
- --implementation-steps "Create pool|Setup health check|Auto-reconnect|Connection limits" \
674
- --test-cases "Pool creates connections|Health check works|Reconnect on failure" \
675
- --derivable-files "db_pool.go|db_pool_test.go" \
676
- --library-needs "pgx|pgxpool" \
677
- --priority P0
678
-
679
- # Create API feature depending on core library task
680
- mandor feature create "User Endpoints" --project api \
681
- --goal "User CRUD endpoints backed by database" \
682
- --scope backend
683
-
684
- mandor task create api-feature-xxx "User API Handler" \
685
- --goal "Create REST endpoints for user CRUD operations" \
686
- --implementation-steps "Setup handler|Implement GET|Implement POST|Implement DELETE" \
687
- --test-cases "GET returns user|POST creates user|DELETE removes user" \
688
- --derivable-files "user_handler.go|user_handler_test.go" \
689
- --library-needs "gin|none" \
690
- --depends-on <db-pool-task-id> \
691
- --priority P0
692
-
693
- # Check progress
694
- mandor task list core-feature-xxx # DB Pool ready to start
695
- mandor task blocked api-feature-xxx # User Handler blocked on DB Pool
696
-
697
- # Complete core task, dependents auto-unblock
698
- mandor task update <db-pool-task-id> --status in_progress
699
- mandor task update <db-pool-task-id> --status done
700
-
701
- # API task now ready
702
- mandor task ready api-feature-xxx # User Handler now ready
703
- ```
704
-
705
- ### Issue Tracking with Dependencies
706
-
707
- ```bash
708
- # Create blocker issues
709
- mandor issue create api "Data Validation Bug" \
710
- --type bug \
711
- --goal "Fix data validation allowing invalid emails to pass through" \
712
- --affected-files "validate.go|email_validator.go" \
713
- --affected-tests "validate_test.go|email_validator_test.go" \
714
- --implementation-steps "Add email regex|Add domain check|Add test cases" \
715
- --priority P0
716
-
717
- mandor issue create api "Cache Consistency Issue" \
718
- --type bug \
719
- --goal "Fix race condition in cache invalidation causing stale data" \
720
- --affected-files "cache.go|invalidation.go" \
721
- --affected-tests "cache_test.go" \
722
- --implementation-steps "Add mutex|Refactor invalidation|Add concurrency tests" \
723
- --priority P0
724
-
725
- # Create dependent issue (depends on blockers)
726
- mandor issue create api "High Memory Usage in Production" \
727
- --type bug \
728
- --goal "Fix memory leak causing OOM errors in production due to cache and validation issues" \
729
- --affected-files "main.go|memory.go" \
730
- --affected-tests "memory_test.go" \
731
- --implementation-steps "Profile memory|Identify leaks|Fix validation and cache" \
732
- --depends-on <data-validation-bug-id>|<cache-issue-id> \
733
- --priority P0
734
-
735
- # Check status
736
- mandor issue ready api # Both blockers ready
737
- mandor issue blocked api # Memory issue blocked
738
-
739
- # Resolve blocking issues (order doesn't matter)
740
- mandor issue update <data-validation-bug-id> --start
741
- mandor issue update <data-validation-bug-id> --resolve
742
-
743
- mandor issue update <cache-issue-id> --start
744
- mandor issue update <cache-issue-id> --resolve
745
-
746
- # Check progress
747
- mandor issue ready api # Memory issue now ready
748
- mandor issue summary api # See all status groups
749
-
750
- # Fix dependent issue
751
- mandor issue update <memory-issue-id> --start
752
- mandor issue update <memory-issue-id> --resolve
753
- ```
455
+ # Set default priority
456
+ mandor config set default_priority P2
754
457
 
755
- ### Cancel and Reopen Workflow
458
+ # Enable strict mode
459
+ mandor config set strict_mode true
756
460
 
757
- ```bash
758
- # Create experimental feature and tasks
759
- mandor feature create "OAuth2 Investigation" --project api \
760
- --goal "Research OAuth2 integration options" \
761
- --scope backend
461
+ # View all configuration
462
+ mandor config list
762
463
 
763
- mandor task create api-feature-xxx "Compare OAuth2 Libraries" \
764
- --goal "Research and compare auth0, okta, and open-source options" \
765
- --implementation-steps "Create comparison spreadsheet|Evaluate pros/cons|Estimate effort" \
766
- --test-cases "Evaluation complete|Team consensus reached" \
767
- --derivable-files "oauth2_comparison.md" \
768
- --library-needs "none" \
769
- --priority P2
464
+ # Get specific value
465
+ mandor config get default_priority
770
466
 
771
- mandor task create api-feature-xxx "Proof of Concept" \
772
- --goal "Build minimal OAuth2 integration demo" \
773
- --implementation-steps "Setup oauth lib|Create login flow|Test flow" \
774
- --test-cases "Login works|Token refresh works" \
775
- --derivable-files "poc_oauth.go|poc_oauth_test.go" \
776
- --library-needs "none" \
777
- --priority P2
778
-
779
- # List tasks
780
- mandor task list api-feature-xxx # Show feature tasks
781
-
782
- # Change requirements, decide not to pursue OAuth2
783
- mandor feature update api-feature-xxx --project api \
784
- --cancel --reason "Sticking with JWT, OAuth2 adds too much complexity"
785
-
786
- # Try to create new task (fails)
787
- mandor task create api-feature-xxx "Integration Tests" \
788
- --goal "Add integration tests" \
789
- --implementation-steps "none" \
790
- --test-cases "none" \
791
- --derivable-files "none" \
792
- --library-needs "none"
793
- # Error: "Cannot create task for cancelled feature"
794
-
795
- # Change mind - reopen the feature to continue research
796
- mandor feature update api-feature-xxx --project api --reopen
797
-
798
- # Can now create tasks again
799
- mandor task list api-feature-xxx # Previous tasks still exist
800
- mandor task create api-feature-xxx "Hybrid Approach" \
801
- --goal "Combine JWT with optional OAuth2 for third-party apps" \
802
- --implementation-steps "Design hybrid flow|Implement dual auth|Test both flows" \
803
- --test-cases "JWT still works|OAuth2 works|Both interoperable" \
804
- --derivable-files "hybrid_auth.go" \
805
- --library-needs "oauth2lib" \
806
- --priority P3
467
+ # Reset to default
468
+ mandor config reset default_priority
807
469
  ```
808
470
 
809
471
  ---
810
472
 
811
473
  ## Best Practices
812
474
 
813
- ### Mandor vs. Markdown Plan Files
814
-
815
- | Problem | Markdown Plans | Mandor |
816
- |---------|---|---|
817
- | Single source of truth | ❌ Scattered across multiple files | ✓ Centralized `events.jsonl` |
818
- | Dependency tracking | ❌ Manual, often wrong | ✓ Automatic status transitions |
819
- | Progress visibility | ❌ Requires manual updates | ✓ Real-time status queries |
820
- | Audit trail | ❌ Git history only | ✓ Immutable event log |
821
- | Blocking detection | ❌ Must review files | ✓ `mandor task blocked <id>` |
822
- | Schema validation | ❌ Free-form text | ✓ Enforced structure |
823
- | Automation | ❌ Parse text with regex | ✓ JSON queryable for scripts |
824
-
825
475
  ### 1. Use Meaningful IDs
826
476
 
827
477
  Project and feature IDs should be:
@@ -839,17 +489,27 @@ mandor project create p1
839
489
  mandor feature create f123
840
490
  ```
841
491
 
842
- ### 2. Set Default Priority
492
+ ### 2. Write Clear Goals
843
493
 
844
- Configure default priority in workspace:
494
+ Goals should include:
495
+ - What is being built/fixed
496
+ - Why it matters
497
+ - Technical requirements
498
+ - Acceptance criteria
845
499
 
846
500
  ```bash
847
- mandor config set default_priority P3
501
+ # Good
502
+ --goal "Implement JWT-based authentication with login and refresh flows for secure API access"
503
+
504
+ # Avoid
505
+ --goal "Add authentication"
848
506
  ```
849
507
 
850
508
  ### 3. Use Scopes for Features
851
509
 
852
- Assign scopes to help filter and organize:
510
+ Organize by scope:
511
+ - `frontend`, `backend`, `fullstack`
512
+ - `cli`, `desktop`, `android`, `flutter`, `react-native`, `ios`, `swift`
853
513
 
854
514
  ```bash
855
515
  mandor feature create "Login UI" --project api --scope frontend
@@ -858,83 +518,91 @@ mandor feature create "Login API" --project api --scope backend
858
518
 
859
519
  ### 4. Keep Dependencies Shallow
860
520
 
861
- Deep dependency chains (>5 levels) can be hard to manage. Consider breaking into smaller features.
521
+ Deep dependency chains (>5 levels) are hard to manage. Consider breaking into smaller features.
522
+
523
+ ```bash
524
+ # Good: tasks depend on other tasks in same feature
525
+ mandor task create "Task B" --feature feature-id --depends-on task-a-id
862
526
 
863
- ### 5. Use Issues for Bugs, Tasks for Work
527
+ # Consider splitting if: task chains exceed 5 levels
528
+ ```
864
529
 
865
- - **Tasks**: Work to be done (implementations, refactoring)
866
- - **Issues**: Problems to be fixed or improvements to be made
530
+ ### 5. Use Issues for Bugs, Tasks for Features
531
+
532
+ - **Tasks**: Feature work, implementation, refactoring
533
+ - **Issues**: Bugs, improvements, technical debt, security, performance
534
+
535
+ ```bash
536
+ # Feature work
537
+ mandor task create "Add OAuth2" --feature api-auth
538
+
539
+ # Bug fix
540
+ mandor issue create "Fix auth timeout" --project api --type bug
541
+ ```
867
542
 
868
543
  ### 6. Document Cancellation Reasons
869
544
 
870
545
  Always provide clear reasons when cancelling:
871
546
 
872
547
  ```bash
873
- mandor task update <id> --cancel --reason "Superseded by feature X"
548
+ mandor task update task-id --cancel --reason "Superseded by feature X"
549
+ mandor feature update feature-id --project api --cancel --reason "Sticking with JWT, OAuth2 adds too much complexity"
874
550
  ```
875
551
 
876
- ### 7. Review Blocked Tasks Regularly
552
+ ### 7. Use Pipe-Separated Lists
553
+
554
+ For flags accepting multiple values, use pipe separators:
877
555
 
878
556
  ```bash
879
- mandor task list --feature <id> --status blocked
557
+ # Implementation steps
558
+ --implementation-steps "Step 1|Step 2|Step 3"
559
+
560
+ # Test cases
561
+ --test-cases "Case 1|Case 2|Case 3"
562
+
563
+ # Dependencies
564
+ --depends-on task-1|task-2|task-3
880
565
  ```
881
566
 
882
- ### 8. Use Configuration for Consistency
567
+ ### 8. Use --dry-run to Preview Changes
883
568
 
884
- Set up workspace configuration early:
569
+ Before making significant updates, preview with `--dry-run`:
885
570
 
886
571
  ```bash
887
- mandor config set default_priority P2
888
- mandor config set strict_mode true
572
+ mandor task update task-id --status done --cancel --dry-run
573
+ mandor feature update feature-id --project api --cancel --reason "..." --dry-run
889
574
  ```
890
575
 
891
- ### 9. Stop Writing Markdown Plan Files
576
+ ### 9. Set Configuration Early
892
577
 
893
- Replace this workflow:
578
+ Configure workspace defaults at the start:
894
579
 
895
- ```markdown
896
- # PLAN.md
897
- ## Phase 1: Authentication
898
- - [ ] JWT parser (depends on cryptography)
899
- - [ ] Login endpoint (depends on JWT parser)
900
- - ...
901
- # Status: Last updated 3 days ago
580
+ ```bash
581
+ mandor init "Project Name"
582
+ mandor config set default_priority P2
583
+ mandor config set strict_mode true
902
584
  ```
903
585
 
904
- With this:
586
+ ### 10. Review Status Regularly
905
587
 
906
588
  ```bash
907
- # Create structured plan
908
- mandor feature create "Authentication" --project api \
909
- --goal "Implement JWT and login endpoints" \
910
- --scope backend
589
+ # Workspace overview
590
+ mandor status
911
591
 
912
- # Create tasks with explicit dependencies
913
- mandor task create "JWT Parser" --feature auth-xxx \
914
- -g "Validate JWT tokens..." \
915
- --implementation-steps "Step 1|Step 2" \
916
- --test-cases "Test invalid tokens|Test expired" \
917
- --library-needs "jsonwebtoken" \
918
- --priority P1
592
+ # Project summary
593
+ mandor status --project api
919
594
 
920
- mandor task create "Login Endpoint" --feature auth-xxx \
921
- -g "Accept credentials and return JWT..." \
922
- --depends-on jwt-parser-id \
923
- --priority P1
595
+ # Feature priorities
596
+ mandor summary --project api
924
597
 
925
- # Real-time progress queries
926
- mandor task ready auth-xxx # See what's available now
927
- mandor task blocked auth-xxx # See what's waiting
928
- mandor task summary auth-xxx # See grouped status
929
- ```
598
+ # See ready work
599
+ mandor task ready --feature feature-id
600
+ mandor issue ready --project api
930
601
 
931
- Benefits:
932
- - No file sync required
933
- - Dependencies auto-validated
934
- - Blocking tasks auto-detected
935
- - Reproducible state (`events.jsonl`)
936
- - Queryable via CLI or JSON
937
- - Works in CI/CD pipelines
602
+ # See blockers
603
+ mandor task blocked --feature feature-id
604
+ mandor issue blocked --project api
605
+ ```
938
606
 
939
607
  ---
940
608
 
@@ -950,7 +618,7 @@ export PATH="$HOME/.local/bin:$PATH"
950
618
 
951
619
  ### "Project not found"
952
620
 
953
- Check the project ID and ensure you're in the correct workspace.
621
+ Check the project ID and ensure you're in the correct workspace:
954
622
 
955
623
  ```bash
956
624
  mandor project list
@@ -962,6 +630,7 @@ Verify the entity ID exists:
962
630
 
963
631
  ```bash
964
632
  mandor task list --feature <feature-id>
633
+ mandor issue list --project <project-id>
965
634
  ```
966
635
 
967
636
  ### "Cross-project dependency detected"
@@ -973,7 +642,7 @@ The project doesn't allow cross-project dependencies:
973
642
  mandor project detail <project-id>
974
643
 
975
644
  # Create new project with cross-project enabled
976
- mandor project create <id> --task-dep cross_project_allowed
645
+ mandor project create <id> --name "..." --goal "..." --task-dep cross_project_allowed
977
646
  ```
978
647
 
979
648
  ### "Invalid status transition"
@@ -981,8 +650,9 @@ mandor project create <id> --task-dep cross_project_allowed
981
650
  The transition isn't allowed by the state machine:
982
651
 
983
652
  ```bash
984
- # Tasks: ready -> in_progress -> done
985
- # Features: draft -> active -> done
653
+ # Tasks: pending → ready in_progress done
654
+ # Features: draft active done
655
+ # Issues: open → ready → in_progress → resolved
986
656
  ```
987
657
 
988
658
  ### "Cannot create task for cancelled feature"
@@ -995,37 +665,37 @@ mandor feature update <id> --project <pid> --reopen
995
665
 
996
666
  ---
997
667
 
668
+ ## Configuration Keys
669
+
670
+ | Key | Type | Default | Description |
671
+ |-----|------|---------|-------------|
672
+ | `default_priority` | string | P3 | Default priority for new entities (P0-P5) |
673
+ | `strict_mode` | boolean | false | Enable strict dependency validation |
674
+
675
+ ---
676
+
998
677
  ## File Structure
999
678
 
1000
679
  ```
1001
- mandor/
1002
- ├── cmd/
1003
- │ └── mandor/ # CLI entry point
1004
- ├── internal/
1005
- │ ├── cmd/ # Command implementations
1006
- ├── domain/ # Domain models
1007
- ├── service/ # Business logic
1008
- ├── repository/ # Data access
1009
- │ └── events/ # Event handling
1010
- ├── .mandor/ # Workspace (created by init)
1011
- │ ├── workspace.json # Workspace config
1012
- │ └── projects/ # Projects directory
1013
- │ └── <project>/
1014
- │ ├── project.json
1015
- │ ├── features/
1016
- │ ├── tasks/
1017
- │ ├── issues/
1018
- │ └── events.jsonl
1019
- └── binaries/
1020
- └── mandor # Built binary
680
+ .mandor/
681
+ ├── workspace.json # Workspace metadata
682
+ ├── config.json # Workspace configuration
683
+ └── projects/
684
+ └── <project-id>/
685
+ ├── project.json # Project metadata
686
+ ├── features.jsonl # Feature event log
687
+ ├── tasks.jsonl # Task event log
688
+ ├── issues.jsonl # Issue event log
689
+ └── events.jsonl # All events
1021
690
  ```
1022
691
 
1023
692
  ---
1024
693
 
1025
694
  ## Support
1026
695
 
1027
- - Issues: https://github.com/budisantoso/mandor/issues
696
+ - Issues: https://github.com/sanxzy/mandor/issues
1028
697
  - Documentation: `/docs` directory
698
+ - Repository: https://github.com/sanxzy/mandor
1029
699
 
1030
700
  ---
1031
701
 
Binary file
Binary file
Binary file
Binary file
package/mandor-cli CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mandors/cli",
3
- "version": "0.3.9",
3
+ "version": "0.3.11",
4
4
  "description": "Event-based task manager CLI for AI agent workflows",
5
5
  "main": "npm/lib/index.js",
6
6
  "bin": {