@flydocs/cli 0.6.0-alpha.13 → 0.6.0-alpha.20

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.
Files changed (152) hide show
  1. package/dist/cli.js +281 -256
  2. package/package.json +1 -1
  3. package/template/.claude/CLAUDE.md +62 -66
  4. package/template/.claude/agents/implementation-agent.md +1 -1
  5. package/template/.claude/agents/pm-agent.md +1 -1
  6. package/template/.claude/commands/activate.md +1 -1
  7. package/template/.claude/commands/attach.md +1 -1
  8. package/template/.claude/commands/block.md +2 -2
  9. package/template/.claude/commands/capture.md +1 -1
  10. package/template/.claude/commands/close.md +1 -1
  11. package/template/.claude/commands/flydocs-setup.md +261 -58
  12. package/template/.claude/commands/flydocs-upgrade.md +26 -27
  13. package/template/.claude/commands/implement.md +1 -1
  14. package/template/.claude/commands/new-project.md +1 -1
  15. package/template/.claude/commands/onboard.md +275 -0
  16. package/template/.claude/commands/project-update.md +1 -1
  17. package/template/.claude/commands/refine.md +1 -1
  18. package/template/.claude/commands/review.md +1 -1
  19. package/template/.claude/commands/start-session.md +1 -1
  20. package/template/.claude/commands/status.md +1 -1
  21. package/template/.claude/commands/validate.md +1 -1
  22. package/template/.claude/commands/wrap-session.md +1 -1
  23. package/template/.claude/hooks/auto-approve.py +132 -0
  24. package/template/.claude/hooks/post-pr-check.py +108 -0
  25. package/template/.claude/hooks/post-transition-check.py +94 -0
  26. package/template/{.flydocs → .claude}/hooks/prompt-submit.py +167 -17
  27. package/template/.claude/hooks/session-start.py +146 -0
  28. package/template/.claude/hooks/stop-gate.py +109 -0
  29. package/template/.claude/settings.json +41 -4
  30. package/template/.claude/skills/README.md +23 -25
  31. package/template/.claude/skills/flydocs-workflow/SKILL.md +121 -34
  32. package/template/.claude/skills/flydocs-workflow/cursor-rule.mdc +9 -8
  33. package/template/.claude/skills/flydocs-workflow/reference/golden-rules.md +28 -17
  34. package/template/.claude/skills/flydocs-workflow/reference/graph-schema.md +116 -0
  35. package/template/.claude/skills/flydocs-workflow/reference/pr-workflow.md +30 -15
  36. package/template/.claude/skills/flydocs-workflow/reference/priority-estimates.md +1 -1
  37. package/template/.claude/skills/flydocs-workflow/reference/service-descriptor-schema.md +251 -0
  38. package/template/.claude/skills/flydocs-workflow/reference/status-workflow.md +26 -26
  39. package/template/.claude/skills/flydocs-workflow/scripts/_local/__init__.py +0 -0
  40. package/template/.claude/skills/{flydocs-local/scripts/flydocs_api.py → flydocs-workflow/scripts/_local/file_store.py} +133 -46
  41. package/template/.claude/skills/flydocs-workflow/scripts/flydocs_api.py +693 -0
  42. package/template/{.flydocs → .claude/skills/flydocs-workflow}/scripts/generate_manifest.py +4 -4
  43. package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_build.py +132 -1
  44. package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_query.py +18 -5
  45. package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_session.py +1 -1
  46. package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_update.py +4 -4
  47. package/template/.claude/skills/{flydocs-context-graph → flydocs-workflow}/scripts/graph_utils.py +2 -1
  48. package/template/.claude/skills/flydocs-workflow/scripts/issues.py +489 -0
  49. package/template/.claude/skills/flydocs-workflow/scripts/projects.py +144 -0
  50. package/template/.claude/skills/flydocs-workflow/scripts/pull_services.py +128 -0
  51. package/template/.claude/skills/flydocs-workflow/scripts/push_service.py +132 -0
  52. package/template/.claude/skills/flydocs-workflow/scripts/session.py +54 -0
  53. package/template/.claude/skills/flydocs-workflow/scripts/workspace.py +860 -0
  54. package/template/.claude/skills/flydocs-workflow/session.md +16 -11
  55. package/template/.claude/skills/flydocs-workflow/stages/activate.md +13 -8
  56. package/template/.claude/skills/flydocs-workflow/stages/capture.md +4 -4
  57. package/template/.claude/skills/flydocs-workflow/stages/close.md +1 -1
  58. package/template/.claude/skills/flydocs-workflow/stages/implement.md +7 -7
  59. package/template/.claude/skills/flydocs-workflow/stages/refine.md +5 -5
  60. package/template/.claude/skills/flydocs-workflow/stages/review.md +2 -2
  61. package/template/.claude/skills/flydocs-workflow/stages/validate.md +3 -1
  62. package/template/.claude/skills/flydocs-workflow/templates/pr/default.md +33 -0
  63. package/template/.cursor/agents/implementation-agent.md +1 -1
  64. package/template/.cursor/agents/pm-agent.md +2 -2
  65. package/template/.cursor/hooks.json +10 -3
  66. package/template/.env.example +6 -6
  67. package/template/.flydocs/config.json +2 -1
  68. package/template/.flydocs/templates/README.md +13 -14
  69. package/template/.flydocs/templates/quick-capture.md +4 -8
  70. package/template/.flydocs/version +1 -1
  71. package/template/AGENTS.md +39 -32
  72. package/template/flydocs/README.md +1 -3
  73. package/template/flydocs/context/project.md +6 -3
  74. package/template/flydocs/design-system/README.md +3 -3
  75. package/template/manifest.json +17 -19
  76. package/template/.claude/skills/flydocs-cloud/SKILL.md +0 -138
  77. package/template/.claude/skills/flydocs-cloud/cursor-rule.mdc +0 -50
  78. package/template/.claude/skills/flydocs-cloud/scripts/assign.py +0 -28
  79. package/template/.claude/skills/flydocs-cloud/scripts/assign_cycle.py +0 -28
  80. package/template/.claude/skills/flydocs-cloud/scripts/assign_milestone.py +0 -22
  81. package/template/.claude/skills/flydocs-cloud/scripts/comment.py +0 -29
  82. package/template/.claude/skills/flydocs-cloud/scripts/create_issue.py +0 -83
  83. package/template/.claude/skills/flydocs-cloud/scripts/create_milestone.py +0 -35
  84. package/template/.claude/skills/flydocs-cloud/scripts/create_project.py +0 -33
  85. package/template/.claude/skills/flydocs-cloud/scripts/create_team.py +0 -39
  86. package/template/.claude/skills/flydocs-cloud/scripts/delete_milestone.py +0 -21
  87. package/template/.claude/skills/flydocs-cloud/scripts/estimate.py +0 -33
  88. package/template/.claude/skills/flydocs-cloud/scripts/flydocs_api.py +0 -241
  89. package/template/.claude/skills/flydocs-cloud/scripts/generate_config.py +0 -125
  90. package/template/.claude/skills/flydocs-cloud/scripts/get_estimate_scale.py +0 -23
  91. package/template/.claude/skills/flydocs-cloud/scripts/get_issue.py +0 -24
  92. package/template/.claude/skills/flydocs-cloud/scripts/get_me.py +0 -103
  93. package/template/.claude/skills/flydocs-cloud/scripts/link.py +0 -28
  94. package/template/.claude/skills/flydocs-cloud/scripts/list_cycles.py +0 -28
  95. package/template/.claude/skills/flydocs-cloud/scripts/list_issues.py +0 -44
  96. package/template/.claude/skills/flydocs-cloud/scripts/list_labels.py +0 -19
  97. package/template/.claude/skills/flydocs-cloud/scripts/list_milestones.py +0 -28
  98. package/template/.claude/skills/flydocs-cloud/scripts/list_projects.py +0 -31
  99. package/template/.claude/skills/flydocs-cloud/scripts/list_providers.py +0 -19
  100. package/template/.claude/skills/flydocs-cloud/scripts/list_statuses.py +0 -19
  101. package/template/.claude/skills/flydocs-cloud/scripts/list_teams.py +0 -19
  102. package/template/.claude/skills/flydocs-cloud/scripts/priority.py +0 -29
  103. package/template/.claude/skills/flydocs-cloud/scripts/project_update.py +0 -45
  104. package/template/.claude/skills/flydocs-cloud/scripts/refresh_labels.py +0 -87
  105. package/template/.claude/skills/flydocs-cloud/scripts/set_identity.py +0 -54
  106. package/template/.claude/skills/flydocs-cloud/scripts/set_labels.py +0 -54
  107. package/template/.claude/skills/flydocs-cloud/scripts/set_preferences.py +0 -49
  108. package/template/.claude/skills/flydocs-cloud/scripts/set_provider.py +0 -31
  109. package/template/.claude/skills/flydocs-cloud/scripts/set_status_mapping.py +0 -57
  110. package/template/.claude/skills/flydocs-cloud/scripts/set_team.py +0 -28
  111. package/template/.claude/skills/flydocs-cloud/scripts/transition.py +0 -26
  112. package/template/.claude/skills/flydocs-cloud/scripts/update_description.py +0 -36
  113. package/template/.claude/skills/flydocs-cloud/scripts/update_issue.py +0 -100
  114. package/template/.claude/skills/flydocs-cloud/scripts/update_milestone.py +0 -42
  115. package/template/.claude/skills/flydocs-cloud/scripts/validate_setup.py +0 -120
  116. package/template/.claude/skills/flydocs-context-graph/SKILL.md +0 -94
  117. package/template/.claude/skills/flydocs-context-graph/schema.md +0 -78
  118. package/template/.claude/skills/flydocs-context-graph/scripts/graph_context.py +0 -338
  119. package/template/.claude/skills/flydocs-context7/SKILL.md +0 -105
  120. package/template/.claude/skills/flydocs-context7/cursor-rule.mdc +0 -49
  121. package/template/.claude/skills/flydocs-context7/scripts/context7.py +0 -293
  122. package/template/.claude/skills/flydocs-estimates/SKILL.md +0 -384
  123. package/template/.claude/skills/flydocs-figma/SKILL.md +0 -377
  124. package/template/.claude/skills/flydocs-figma/references/PROMPTING.md +0 -108
  125. package/template/.claude/skills/flydocs-figma/references/TROUBLESHOOTING.md +0 -112
  126. package/template/.claude/skills/flydocs-local/SKILL.md +0 -103
  127. package/template/.claude/skills/flydocs-local/cursor-rule.mdc +0 -43
  128. package/template/.claude/skills/flydocs-local/scripts/assign.py +0 -29
  129. package/template/.claude/skills/flydocs-local/scripts/comment.py +0 -27
  130. package/template/.claude/skills/flydocs-local/scripts/create_issue.py +0 -44
  131. package/template/.claude/skills/flydocs-local/scripts/estimate.py +0 -37
  132. package/template/.claude/skills/flydocs-local/scripts/get_issue.py +0 -20
  133. package/template/.claude/skills/flydocs-local/scripts/link.py +0 -41
  134. package/template/.claude/skills/flydocs-local/scripts/list_issues.py +0 -50
  135. package/template/.claude/skills/flydocs-local/scripts/priority.py +0 -37
  136. package/template/.claude/skills/flydocs-local/scripts/project_update.py +0 -67
  137. package/template/.claude/skills/flydocs-local/scripts/status_summary.py +0 -16
  138. package/template/.claude/skills/flydocs-local/scripts/transition.py +0 -24
  139. package/template/.claude/skills/flydocs-local/scripts/update_description.py +0 -35
  140. package/template/.claude/skills/flydocs-local/scripts/update_issue.py +0 -84
  141. package/template/.flydocs/hooks/auto-approve.py +0 -71
  142. package/template/.flydocs/scripts/skill_manager.py +0 -541
  143. package/template/.flydocs/templates/bug.md +0 -166
  144. package/template/.flydocs/templates/chore.md +0 -110
  145. package/template/.flydocs/templates/feature.md +0 -173
  146. package/template/.flydocs/templates/idea.md +0 -122
  147. /package/template/{.flydocs → .claude}/hooks/post-edit.py +0 -0
  148. /package/template/.claude/skills/{flydocs-estimates/references → flydocs-workflow/reference}/provider-costs.md +0 -0
  149. /package/template/.claude/skills/flydocs-workflow/templates/{bug.md → issues/bug.md} +0 -0
  150. /package/template/.claude/skills/flydocs-workflow/templates/{chore.md → issues/chore.md} +0 -0
  151. /package/template/.claude/skills/flydocs-workflow/templates/{feature.md → issues/feature.md} +0 -0
  152. /package/template/.claude/skills/flydocs-workflow/templates/{idea.md → issues/idea.md} +0 -0
@@ -4,7 +4,7 @@ Initial project onboarding — define project context, connect to provider, and
4
4
  create an initial backlog. This command handles two scenarios: new projects
5
5
  and FlyDocs version updates (including legacy content migration).
6
6
 
7
- Read the active mechanism skill's `SKILL.md` for script calling conventions
7
+ Read the workflow skill's `SKILL.md` for script calling conventions
8
8
  before executing any scripts.
9
9
 
10
10
  Triggers: "setup flydocs", "onboard project", "flydocs init"
@@ -48,7 +48,7 @@ Example:
48
48
 
49
49
  ```
50
50
  Detected: New project setup (cloud tier)
51
- I'll walk you through project definition, Linear setup, and initial backlog.
51
+ I'll walk you through project definition, provider setup, and initial backlog.
52
52
  Ready to begin?
53
53
  ```
54
54
 
@@ -73,13 +73,99 @@ If the directory exists and contains files:
73
73
  5. Offer to add relevant rules to `flydocs/context/project.md` (Standards
74
74
  section) or note them for the user to review.
75
75
  6. Skip rules that conflict with or duplicate FlyDocs workflow rules (e.g.,
76
- skill-led reasoning, mechanism scripts, session management).
76
+ skill-led reasoning, workflow scripts, session management).
77
77
 
78
78
  This is agent-guided — review and suggest, let the user confirm. No automated
79
79
  merging. If no backup directory exists, skip this phase silently.
80
80
 
81
81
  ---
82
82
 
83
+ ## Phase 0c: Topology Detection
84
+
85
+ Detect the project's physical layout. This affects Phase 1.5 (service
86
+ descriptor generation) and cross-repo context assembly.
87
+
88
+ **Step 1: Check for workspace config files.**
89
+
90
+ Look for these in the project root (in order):
91
+
92
+ - `pnpm-workspace.yaml` → Type 3 (monorepo multi-service)
93
+ - `nx.json` → Type 3
94
+ - `turbo.json` → Type 3
95
+ - `lerna.json` → Type 3
96
+ - `Cargo.toml` with `[workspace]` section → Type 3
97
+ - `go.work` → Type 3
98
+
99
+ If any found → **Type 3: Monorepo, multi-service**. Record which config file
100
+ was detected.
101
+
102
+ **Step 2: Check parent directory for sibling repos.**
103
+
104
+ If no workspace config found, check one directory up from the project root:
105
+
106
+ - List subdirectories of the parent directory
107
+ - Check which ones contain a `.git` directory
108
+ - If 2+ sibling directories (including this one) have `.git` → **Type 4: Sibling repos**
109
+ - Record the sibling repo directory names
110
+
111
+ **Step 3: Determine single-app vs monorepo-single.**
112
+
113
+ If neither workspace config nor sibling repos detected:
114
+
115
+ - Check if the project has multiple `package.json` files in subdirectories
116
+ (e.g., `apps/*/package.json`, `packages/*/package.json`)
117
+ - If yes → **Type 2: Monorepo, single app** (monorepo tooling without workspace config)
118
+ - If no → **Type 1: Single repo, single app**
119
+
120
+ **Step 4: Report and store.**
121
+
122
+ Tell the user what was detected:
123
+
124
+ ```
125
+ Topology: Monorepo multi-service (Type 3)
126
+ Detected via: pnpm-workspace.yaml
127
+ ```
128
+
129
+ Update `.flydocs/config.json` with the `topology` field:
130
+
131
+ ```json
132
+ {
133
+ "topology": {
134
+ "type": 3,
135
+ "label": "monorepo-multi",
136
+ "detectedVia": "pnpm-workspace.yaml"
137
+ }
138
+ }
139
+ ```
140
+
141
+ For Type 4 (sibling repos), also include:
142
+
143
+ ```json
144
+ {
145
+ "topology": {
146
+ "type": 4,
147
+ "label": "sibling-repos",
148
+ "detectedVia": "parent directory scan",
149
+ "siblingRepos": ["flydocs-core", "flydocs-app", "flydocs-marketing"]
150
+ }
151
+ }
152
+ ```
153
+
154
+ For Type 3 with a workspace root different from project root:
155
+
156
+ ```json
157
+ {
158
+ "topology": {
159
+ "type": 3,
160
+ "label": "monorepo-multi",
161
+ "detectedVia": "turbo.json",
162
+ "workspaceRoot": "."
163
+ }
164
+ }
165
+ ```
166
+
167
+ ---
168
+
83
169
  ## Phase 1: Project Definition
84
170
 
85
171
  The goal is to fill every section of `flydocs/context/project.md` with real
@@ -283,6 +369,114 @@ may be useful:
283
369
 
284
370
  ---
285
371
 
372
+ ## Phase 1.5: Service Descriptor Generation
373
+
374
+ Generate `flydocs/context/service.json` — the dual-purpose descriptor that
375
+ provides cross-repo context AND intra-repo orientation. This phase uses the
376
+ topology detected in Phase 0c and stack detected in Phase 1.
377
+
378
+ Read `.claude/skills/flydocs-context-graph/service-descriptor-schema.md` for
379
+ the full schema reference before proceeding.
380
+
381
+ **Step 1: Scan for cross-repo export surface.**
382
+
383
+ Identify what this repo exposes to the outside world:
384
+
385
+ - **REST/GraphQL APIs** — scan for route definitions, API directories, endpoint
386
+ patterns. Look in common locations: `src/app/api/`, `src/routes/`,
387
+ `pages/api/`, `server/routes/`, `api/`.
388
+ - **Published packages** — check `package.json` for `name` field if it looks
389
+ like a library (`@scope/package` or explicitly `"private": false`).
390
+ - **Events/messages** — check for pub/sub, message queue, or webhook patterns.
391
+ - **gRPC** — check for `.proto` files.
392
+
393
+ For each API surface found, capture: type, path, description, and methods
394
+ (for REST).
395
+
396
+ **Step 2: Scan for dependencies on other services.**
397
+
398
+ Identify what this repo consumes from external services:
399
+
400
+ - Check environment variables (`.env.example`, `.env.local`) for service URLs,
401
+ API keys, or connection strings that reference other internal services.
402
+ - Check `package.json` for internal package references (`workspace:*`).
403
+ - Check import patterns for cross-service API clients.
404
+ - Check config files for external service endpoints.
405
+
406
+ For each dependency, capture: service name, interface type, and description.
407
+
408
+ **Step 3: Scan for intra-repo structure.**
409
+
410
+ Help the agent orient within THIS repo:
411
+
412
+ - **Entry points** — where does request handling or app logic start?
413
+ - Web frameworks: `src/app/`, `pages/`, `src/routes/`
414
+ - CLI tools: `src/cli.ts`, `src/index.ts`, `src/main.ts`
415
+ - Workers: `src/worker/`, `src/jobs/`
416
+ - **Shared types** — where do type definitions live?
417
+ - `src/types/`, `src/lib/types.ts`, `types/`, `packages/shared/`
418
+ - **Build system** — what builds the project?
419
+ - Read from `package.json` scripts, config files: turbo, nx, next, vite,
420
+ tsup, webpack, cargo, go
421
+ - **Packages** (monorepo Type 3 only) — scan workspace packages:
422
+ - Read `pnpm-workspace.yaml`, `turbo.json`, or `nx.json` for package list
423
+ - For each package: name, path, one-line purpose
424
+
425
+ **Step 4: Compose and confirm the descriptor.**
426
+
427
+ Build the `service.json` from scan results. Show the user the complete
428
+ descriptor and ask for confirmation or corrections:
429
+
430
+ ```
431
+ Service Descriptor for [repo name]:
432
+
433
+ Purpose: [one-sentence description]
434
+ Stack: [technology list]
435
+
436
+ APIs exposed:
437
+ - REST /api/relay/* — Relay API for CLI operations
438
+ - package @flydocs/cli — npm CLI binary
439
+
440
+ Dependencies:
441
+ - plastrlab/flydocs-app (REST /api/relay/*) — cloud tier operations
442
+
443
+ Structure:
444
+ - Entry: src/cli.ts
445
+ - Types: src/lib/types.ts
446
+ - Build: tsup
447
+
448
+ Write to flydocs/context/service.json?
449
+ ```
450
+
451
+ **Step 5: Write the descriptor.**
452
+
453
+ After user approval, write `flydocs/context/service.json` with the confirmed
454
+ content. Use the schema version `1`.
455
+
456
+ **Step 6: Push to relay (cloud tier only).**
457
+
458
+ For cloud tier projects, push the descriptor to the relay:
459
+
460
+ ```bash
461
+ python3 .claude/skills/flydocs-context-graph/scripts/push_service.py
462
+ ```
463
+
464
+ This calls `PUT /api/relay/workspace/service` with the descriptor content
465
+ (excluding the `structure` section which is local-only).
466
+
467
+ **Step 7: Pull workspace composite (cloud tier only).**
468
+
469
+ After pushing, pull the workspace composite to see sibling descriptors:
470
+
471
+ ```bash
472
+ python3 .claude/skills/flydocs-context-graph/scripts/pull_services.py
473
+ ```
474
+
475
+ This calls `GET /api/relay/workspace/services` and caches the result for
476
+ graph building and prompt hook orientation.
477
+
478
+ ---
479
+
286
480
  ## Phase 2: Provider Setup — Cloud Only
287
481
 
288
482
  > **Local tier:** Skip this phase entirely. Print: "Local tier — no provider
@@ -306,7 +500,7 @@ Do not proceed until the key is available.
306
500
  Query connected providers:
307
501
 
308
502
  ```bash
309
- python3 .claude/skills/flydocs-cloud/scripts/list_providers.py
503
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py list-integrations
310
504
  ```
311
505
 
312
506
  This returns `[{type, name, connected}]`. Handle based on results:
@@ -320,7 +514,7 @@ This returns `[{type, name, connected}]`. Handle based on results:
320
514
  After selection, store the preference:
321
515
 
322
516
  ```bash
323
- python3 .claude/skills/flydocs-cloud/scripts/set_provider.py <provider_type>
517
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py set-provider <provider_type>
324
518
  ```
325
519
 
326
520
  This stores the provider type on the relay (for routing) and updates
@@ -334,7 +528,7 @@ This stores the provider type on the relay (for routing) and updates
334
528
  If `provider.teamId` in config is null, discover available teams:
335
529
 
336
530
  ```bash
337
- python3 .claude/skills/flydocs-cloud/scripts/list_teams.py
531
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py teams
338
532
  ```
339
533
 
340
534
  Present the teams to the user as a numbered list showing name and key.
@@ -351,7 +545,7 @@ If the user selects **"Create a new team/project"**:
351
545
  3. Create via:
352
546
 
353
547
  ```bash
354
- python3 .claude/skills/flydocs-cloud/scripts/create_team.py --name "Team Name" [--key KEY] [--parent <parent_team_id>]
548
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py set-team --name "Team Name" [--key KEY] [--parent <parent_team_id>]
355
549
  ```
356
550
 
357
551
  > The `--parent` flag is Linear-only (sub-teams). Omit for Jira.
@@ -360,7 +554,7 @@ After selection or creation, store the preference on the relay and in local
360
554
  config:
361
555
 
362
556
  ```bash
363
- python3 .claude/skills/flydocs-cloud/scripts/set_team.py <team_id>
557
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py set-team <team_id>
364
558
  ```
365
559
 
366
560
  This stores the team preference server-side (the relay uses it for all
@@ -375,22 +569,35 @@ For Jira, this sets the active Jira project.
375
569
  Query existing projects:
376
570
 
377
571
  ```bash
378
- python3 .claude/skills/flydocs-cloud/scripts/list_projects.py
572
+ python3 .claude/skills/flydocs-workflow/scripts/projects.py list-projects
379
573
  ```
380
574
 
381
575
  If matching projects exist, let the user select one. Otherwise, offer to
382
576
  create a new project:
383
577
 
384
578
  ```bash
385
- python3 .claude/skills/flydocs-cloud/scripts/create_project.py --name "Project Name"
579
+ python3 .claude/skills/flydocs-workflow/scripts/projects.py create-project --name "Project Name"
580
+ ```
581
+
582
+ **Step 4b: Set active project.**
583
+
584
+ After selecting or creating a project, store it as the active project:
585
+
586
+ ```bash
587
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py set-active-project <project_id>
386
588
  ```
387
589
 
590
+ This writes `workspace.activeProjects` in `.flydocs/config.json`. All
591
+ subsequent operations (issue listing, captures, milestones, project updates)
592
+ use this to scope work to the active project. This is a critical step —
593
+ without it, product scope filtering and project-update targeting won't work.
594
+
388
595
  **Step 5: Configure labels.**
389
596
 
390
597
  Fetch available labels from the provider:
391
598
 
392
599
  ```bash
393
- python3 .claude/skills/flydocs-cloud/scripts/list_labels.py
600
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py labels
394
601
  ```
395
602
 
396
603
  **Auto-detect type mapping:** Scan the returned labels for common names
@@ -412,7 +619,7 @@ available labels as options.
412
619
  Store the configuration on the relay:
413
620
 
414
621
  ```bash
415
- python3 .claude/skills/flydocs-cloud/scripts/set_labels.py \
622
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py set-labels \
416
623
  --defaults '["app"]' \
417
624
  --type-map '{"feature":["Feature"],"bug":["Bug"],"chore":["Chore"],"idea":["Improvement"]}'
418
625
  ```
@@ -425,7 +632,7 @@ user to correct them.
425
632
  Map provider workflow states to FlyDocs statuses. Run auto-mapping first:
426
633
 
427
634
  ```bash
428
- python3 .claude/skills/flydocs-cloud/scripts/set_status_mapping.py --auto
635
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py set-status-mapping --auto
429
636
  ```
430
637
 
431
638
  The relay auto-maps by case-insensitive name matching (e.g., "In Progress"
@@ -452,13 +659,13 @@ If the user wants to fix unmapped statuses, fetch available provider states
452
659
  and let them map manually:
453
660
 
454
661
  ```bash
455
- python3 .claude/skills/flydocs-cloud/scripts/list_statuses.py
662
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py statuses
456
663
  ```
457
664
 
458
665
  Then store the corrected mapping:
459
666
 
460
667
  ```bash
461
- python3 .claude/skills/flydocs-cloud/scripts/set_status_mapping.py \
668
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py set-status-mapping \
462
669
  --mapping '{"BACKLOG":"Backlog","IMPLEMENTING":"In Progress","BLOCKED":"On Hold",...}'
463
670
  ```
464
671
 
@@ -476,7 +683,7 @@ The setup scripts in Steps 2-7 all POST to the relay — they no longer write
476
683
  to local config. After all setup steps complete, pull the canonical config:
477
684
 
478
685
  ```bash
479
- python3 .claude/skills/flydocs-cloud/scripts/generate_config.py
686
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py config
480
687
  ```
481
688
 
482
689
  This calls `GET /config/generate` which returns all server-owned fields
@@ -494,7 +701,7 @@ but don't block — they can fix in the dashboard and re-run later.
494
701
  **Step 9: Fetch user identity.**
495
702
 
496
703
  ```bash
497
- python3 .claude/skills/flydocs-cloud/scripts/get_me.py
704
+ python3 .claude/skills/flydocs-workflow/scripts/workspace.py get-me
498
705
  ```
499
706
 
500
707
  This calls `GET /auth/me` (no workspace required) and writes
@@ -514,7 +721,7 @@ This enables `--mine` filters and personalizes session output.
514
721
  **Step 1: Check existing milestones.**
515
722
 
516
723
  ```bash
517
- python3 .claude/skills/flydocs-cloud/scripts/list_milestones.py
724
+ python3 .claude/skills/flydocs-workflow/scripts/projects.py list-milestones
518
725
  ```
519
726
 
520
727
  **Step 2: If milestones exist** — show them and confirm they'll be used for
@@ -540,7 +747,7 @@ Let the user customize names, descriptions, and target dates.
540
747
  For each approved milestone, pass the project ID from Phase 2 Step 3:
541
748
 
542
749
  ```bash
543
- python3 .claude/skills/flydocs-cloud/scripts/create_milestone.py \
750
+ python3 .claude/skills/flydocs-workflow/scripts/projects.py create-milestone \
544
751
  --name "Phase 1: Foundation" --project <project_id> --target-date YYYY-MM-DD
545
752
  ```
546
753
 
@@ -569,11 +776,11 @@ For each work item, follow the capture procedure from
569
776
  `.claude/skills/flydocs-workflow/stages/capture.md`:
570
777
 
571
778
  - Determine type (feature, bug, chore, idea)
572
- - Create via the mechanism script (cloud: pass `--project` from Phase 2 for
779
+ - Create via the workflow script (cloud: pass `--project` from Phase 2 for
573
780
  Linear; omit `--project` for Jira — issues are scoped to the team/project
574
781
  selected in Phase 2 Step 3):
575
782
  ```bash
576
- python3 .claude/skills/flydocs-{tier}/scripts/create_issue.py \
783
+ python3 .claude/skills/flydocs-workflow/scripts/issues.py create \
577
784
  --title "Issue title" --type feature --priority 3 --estimate 2 \
578
785
  --project <project_id>
579
786
  ```
@@ -587,7 +794,7 @@ For each work item, follow the capture procedure from
587
794
  After creating issues, assign them to milestones:
588
795
 
589
796
  ```bash
590
- python3 .claude/skills/flydocs-cloud/scripts/assign_milestone.py \
797
+ python3 .claude/skills/flydocs-workflow/scripts/projects.py assign-milestone \
591
798
  <issue-ref> <milestone-id>
592
799
  ```
593
800
 
@@ -599,7 +806,7 @@ based on the issue content.
599
806
  **Step 1: Check if backlog is populated.**
600
807
 
601
808
  ```bash
602
- python3 .claude/skills/flydocs-{tier}/scripts/list_issues.py --limit 10
809
+ python3 .claude/skills/flydocs-workflow/scripts/issues.py list --limit 10
603
810
  ```
604
811
 
605
812
  If issues exist, skip this phase:
@@ -625,7 +832,7 @@ Only if the user wants to add more.
625
832
  List all issues in Backlog status:
626
833
 
627
834
  ```bash
628
- python3 .claude/skills/flydocs-cloud/scripts/list_issues.py --status BACKLOG
835
+ python3 .claude/skills/flydocs-workflow/scripts/issues.py list --status BACKLOG
629
836
  ```
630
837
 
631
838
  **Step 2: Set priorities.**
@@ -638,10 +845,10 @@ For each issue, suggest a priority and let the user confirm or adjust:
638
845
  - **4 (Low)** — Nice to have, no urgency
639
846
 
640
847
  ```bash
641
- python3 .claude/skills/flydocs-cloud/scripts/priority.py <issue-ref> <0-4>
848
+ python3 .claude/skills/flydocs-workflow/scripts/issues.py priority <issue-ref> <0-4>
642
849
  ```
643
850
 
644
- Note: Linear uses 0=No priority, 1=Urgent, 2=High, 3=Medium, 4=Low.
851
+ Note: Priority scale is 0=No priority, 1=Urgent, 2=High, 3=Medium, 4=Low.
645
852
 
646
853
  **Step 3: Set estimates.**
647
854
 
@@ -654,13 +861,13 @@ For each issue, suggest a t-shirt size estimate:
654
861
  - **5** — XL (1+ week, consider breaking down)
655
862
 
656
863
  ```bash
657
- python3 .claude/skills/flydocs-cloud/scripts/estimate.py <issue-ref> <1-5>
864
+ python3 .claude/skills/flydocs-workflow/scripts/issues.py estimate <issue-ref> <1-5>
658
865
  ```
659
866
 
660
867
  **Step 4: Identify dependencies.**
661
868
 
662
869
  Ask about blocking relationships between issues. If any exist, note them
663
- (Linear handles dependency tracking natively).
870
+ (most providers handle dependency tracking natively).
664
871
 
665
872
  **Step 5: Recommend implementation order.**
666
873
 
@@ -678,7 +885,7 @@ Recommended implementation order:
678
885
 
679
886
  ## Phase 6: Completion & Onboarding
680
887
 
681
- Summarize what was accomplished and provide a guided onboarding experience.
888
+ Summarize what was accomplished and guide the developer to onboarding.
682
889
 
683
890
  ### Step 1: Completion summary
684
891
 
@@ -690,7 +897,7 @@ Tier: [local / cloud]
690
897
 
691
898
  ✓ Project context: flydocs/context/project.md
692
899
  ✓ Stack detected: [framework list]
693
- ✓ Provider: [Linear connected / Local file-based] (if applicable)
900
+ ✓ Provider: [Connected / Local file-based] (if applicable)
694
901
  ✓ Milestones: [N created] (cloud only)
695
902
  ✓ Backlog: [N issues captured]
696
903
  ✓ Priorities set (cloud only)
@@ -699,9 +906,9 @@ Tier: [local / cloud]
699
906
  **Mark setup as complete.**
700
907
 
701
908
  For **cloud tier**: Setup completion is determined by the relay. The
702
- `generate_config.py` call in Phase 2 Step 8 already sets `setupComplete`
909
+ `workspace.py config` call in Phase 2 Step 8 already sets `setupComplete`
703
910
  based on the relay's validation result. If the relay returns `valid: true`,
704
- config will have `setupComplete: true`. If not, run `validate_setup.py` to
911
+ config will have `setupComplete: true`. If not, run `workspace.py validate` to
705
912
  check what's still missing.
706
913
 
707
914
  For **local tier**: Update `.flydocs/config.json` to set `setupComplete` to
@@ -711,27 +918,23 @@ For **local tier**: Update `.flydocs/config.json` to set `setupComplete` to
711
918
  { "setupComplete": true }
712
919
  ```
713
920
 
714
- ### Step 2: Quick-start guide
921
+ ### Step 2: Direct to /onboard
715
922
 
716
- Present the core workflow commands with brief descriptions:
923
+ Check `.flydocs/config.json` for the `onboardComplete` field. If it is not
924
+ `true`, direct the developer to run `/onboard` for full project orientation:
717
925
 
718
926
  ```
719
- Here's how to work with FlyDocs:
927
+ Setup is done! Next step:
720
928
 
721
- Getting started:
722
- /start-session Begin a work session (sets focus, loads context)
723
- /activate Pick your next issue to work on
724
- /capture Capture a new issue or idea anytime
929
+ Run /onboard to get oriented to the codebase, active work, and available
930
+ commands. This is especially helpful for new team members joining the project.
931
+ ```
725
932
 
726
- During development:
727
- /implement Start implementation on your active issue
728
- /status Check current session and issue status
729
- /block Flag a blocker on the current issue
933
+ If `onboardComplete` is already `true` (developer has onboarded before),
934
+ skip the nudge and go straight to the quick-start reminder:
730
935
 
731
- Wrapping up:
732
- /review Submit work for code review
733
- /validate Run QE validation on completed work
734
- /wrap-session End your session (posts summary, saves progress)
936
+ ```
937
+ Setup refreshed. Run /start-session to begin working.
735
938
  ```
736
939
 
737
940
  ### Step 3: Tier-specific notes
@@ -739,7 +942,7 @@ Wrapping up:
739
942
  **For cloud tier:**
740
943
 
741
944
  - Provider project URL (if available from create_project response)
742
- - For Linear: recommend reviewing milestones in Linear's UI for timeline view
945
+ - Recommend reviewing milestones in your provider's UI for timeline view
743
946
 
744
947
  **For local tier:**
745
948
 
@@ -793,7 +996,7 @@ Docs and updates: https://www.flydocs.ai
793
996
 
794
997
  Throughout the setup flow:
795
998
 
796
- - **Script failures** — If any mechanism script returns exit code 1, show the
999
+ - **Script failures** — If any workflow script returns exit code 1, show the
797
1000
  error message from stderr and ask the user how to proceed. Do not retry
798
1001
  silently.
799
1002
  - **Missing API key** — For cloud tier, cannot proceed past Phase 2 without
@@ -808,18 +1011,18 @@ Throughout the setup flow:
808
1011
 
809
1012
  ## Key Rules
810
1013
 
811
- 1. **Always read the mechanism skill's `SKILL.md`** before running any script.
812
- Script calling conventions may differ between tiers.
1014
+ 1. **Always read the workflow skill's `SKILL.md`** before running any script.
1015
+ Script calling conventions are documented there.
813
1016
  2. **All script paths** follow the pattern:
814
- `python3 .claude/skills/flydocs-{tier}/scripts/<script>.py`
815
- where `{tier}` is read from `.flydocs/config.json`.
1017
+ `python3 .claude/skills/flydocs-workflow/scripts/<dispatcher>.py <subcommand>`
1018
+ The unified client auto-detects tier from `.flydocs/config.json`.
816
1019
  3. **Never skip user confirmation** on project.md content. This is their
817
1020
  project definition — they must approve it.
818
- 4. **Never hardcode tier** — always read from config. A project can switch
819
- tiers via `flydocs --tier <tier>`.
820
- 5. **Cloud scripts only for cloud tier.** Extended scripts (estimate, priority,
821
- milestones, projects) only exist in `flydocs-cloud`. Do not attempt to call
822
- them for local tier.
1021
+ 4. **Never hardcode tier** — the dispatcher scripts auto-detect tier from
1022
+ config. A project can switch tiers via `flydocs --tier <tier>`.
1023
+ 5. **Cloud-only operations.** Extended operations (estimate, priority,
1024
+ milestones, projects) are cloud-only. The dispatchers will error if called
1025
+ on local tier for unsupported operations.
823
1026
  6. **Capture procedure** — when creating issues during Phase 4, follow the
824
1027
  full capture procedure from `.claude/skills/flydocs-workflow/stages/capture.md`.
825
1028