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