@flydocs/cli 0.5.0-beta.3 → 0.5.0-beta.5

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/dist/cli.js CHANGED
@@ -15,7 +15,7 @@ var CLI_VERSION, CLI_NAME, PACKAGE_NAME;
15
15
  var init_constants = __esm({
16
16
  "src/lib/constants.ts"() {
17
17
  "use strict";
18
- CLI_VERSION = "0.5.0-beta.3";
18
+ CLI_VERSION = "0.5.0-beta.5";
19
19
  CLI_NAME = "flydocs";
20
20
  PACKAGE_NAME = "@flydocs/cli";
21
21
  }
@@ -149,24 +149,29 @@ function printInfo(message) {
149
149
  console.log(`${pc2.cyan("\u2139")} ${message}`);
150
150
  }
151
151
  function printStub(command) {
152
- printWarning(`${pc2.bold(command)} is not yet implemented in the Node CLI.`);
153
- console.log(` Use ${pc2.cyan("bash install.sh")} for now.`);
152
+ printWarning(`${pc2.bold(command)} is not yet implemented.`);
154
153
  }
155
154
  function printBanner(version) {
156
- const pink = pc2.magenta;
157
- const purple = (t) => pc2.cyan(t);
155
+ const pink = (t) => pc2.bold(pc2.magenta(t));
156
+ const purple = (t) => pc2.bold(pc2.cyan(t));
158
157
  const dim = pc2.dim;
159
158
  const bold = pc2.bold;
159
+ const pinkBlock12 = pink("\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588");
160
+ const pinkBlock4 = pink("\u2588\u2588\u2588\u2588");
161
+ const purpleBlock12 = purple("\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588");
162
+ const purpleBlock4 = purple("\u2588\u2588\u2588\u2588");
160
163
  console.log();
161
- console.log(` ${bold(pink("\u2588\u2588\u2588\u2588\u2588\u2588"))}`);
164
+ console.log(` ${pinkBlock12}`);
165
+ console.log(` ${pinkBlock12}`);
166
+ console.log(` ${pinkBlock4}`);
162
167
  console.log(
163
- ` ${bold(pink("\u2588\u2588"))} ${bold(purple("\u2588\u2588\u2588\u2588\u2588\u2588"))} ${bold(pink("Fly"))}${bold(purple("Docs"))} ${bold(pink("Core"))}`
168
+ ` ${pinkBlock4} ${purpleBlock12} ${bold("Fly")}${bold("Docs")} ${bold("Core")}`
164
169
  );
165
170
  console.log(
166
- ` ${bold(purple("\u2588\u2588\u2588\u2588\u2588\u2588"))} ${dim("Context-as-a-Service Platform Built for Engineering at Altitude")}`
171
+ ` ${purpleBlock12} ${dim("Context-as-a-Service Platform Built for Engineering at Altitude")}`
167
172
  );
168
- console.log(` ${bold(purple("\u2588\u2588"))}`);
169
- console.log(` ${bold(purple("\u2588\u2588"))} ${dim(`v${version}`)}`);
173
+ console.log(` ${purpleBlock4}`);
174
+ console.log(` ${purpleBlock4} ${dim(`v${version}`)}`);
170
175
  console.log();
171
176
  }
172
177
  function printCompletionBox(title, lines) {
@@ -433,6 +438,12 @@ async function detectStack(targetDir) {
433
438
  if ("next" in allDeps) detected.add("nextjs");
434
439
  if ("expo" in allDeps) detected.add("expo");
435
440
  if ("react" in allDeps) detected.add("react");
441
+ if ("vue" in allDeps) detected.add("vue");
442
+ if ("nuxt" in allDeps) detected.add("nuxt");
443
+ if (Object.keys(allDeps).some((k) => k.startsWith("@angular/")))
444
+ detected.add("angular");
445
+ if ("svelte" in allDeps || "@sveltejs/kit" in allDeps)
446
+ detected.add("svelte");
436
447
  if ("convex" in allDeps) detected.add("convex");
437
448
  if ("prisma" in allDeps) detected.add("prisma");
438
449
  if (Object.keys(allDeps).some((k) => k.startsWith("@clerk")))
@@ -462,14 +473,39 @@ async function detectStack(targetDir) {
462
473
  if (await pathExists(join5(targetDir, "tsconfig.json"))) {
463
474
  detected.add("typescript");
464
475
  }
476
+ if (await pathExists(join5(targetDir, "nuxt.config.ts")) || await pathExists(join5(targetDir, "nuxt.config.js"))) {
477
+ detected.add("nuxt");
478
+ detected.add("vue");
479
+ }
480
+ if (await pathExists(join5(targetDir, "angular.json"))) {
481
+ detected.add("angular");
482
+ }
483
+ if (await pathExists(join5(targetDir, "svelte.config.js")) || await pathExists(join5(targetDir, "svelte.config.ts"))) {
484
+ detected.add("svelte");
485
+ }
486
+ if (await pathExists(join5(targetDir, "pyproject.toml")) || await pathExists(join5(targetDir, "requirements.txt")) || await pathExists(join5(targetDir, "setup.py"))) {
487
+ detected.add("python");
488
+ }
489
+ if (await pathExists(join5(targetDir, "go.mod"))) {
490
+ detected.add("go");
491
+ }
492
+ if (await pathExists(join5(targetDir, "Cargo.toml"))) {
493
+ detected.add("rust");
494
+ }
465
495
  const raw = Array.from(detected);
466
496
  return {
467
497
  raw,
468
- frameworks: raw.filter((s) => ["nextjs", "react", "expo"].includes(s)),
498
+ frameworks: raw.filter(
499
+ (s) => ["nextjs", "react", "expo", "vue", "nuxt", "angular", "svelte"].includes(
500
+ s
501
+ )
502
+ ),
469
503
  database: raw.filter((s) => ["convex", "prisma"].includes(s)),
470
504
  auth: raw.filter((s) => ["clerk", "workos"].includes(s)),
471
505
  styling: raw.filter((s) => ["tailwind"].includes(s)),
472
- language: raw.filter((s) => ["typescript"].includes(s)),
506
+ language: raw.filter(
507
+ (s) => ["typescript", "python", "go", "rust"].includes(s)
508
+ ),
473
509
  testing: raw.filter(
474
510
  (s) => ["vitest", "jest", "testing-library"].includes(s)
475
511
  )
@@ -993,6 +1029,7 @@ var init_community_skills = __esm({
993
1029
  init_ui();
994
1030
  init_skill_manager();
995
1031
  COMMUNITY_SKILLS_MAP = [
1032
+ // React / Next.js (Vercel official)
996
1033
  {
997
1034
  stackTrigger: "nextjs",
998
1035
  repo: "vercel-labs/agent-skills",
@@ -1011,6 +1048,34 @@ var init_community_skills = __esm({
1011
1048
  name: "react-best-practices",
1012
1049
  description: "React performance optimization (40+ rules from Vercel)"
1013
1050
  },
1051
+ // Vue / Nuxt
1052
+ {
1053
+ stackTrigger: "nuxt",
1054
+ repo: "onmax/nuxt-skills",
1055
+ name: "nuxt",
1056
+ description: "Nuxt framework patterns and best practices"
1057
+ },
1058
+ {
1059
+ stackTrigger: "vue",
1060
+ repo: "onmax/nuxt-skills",
1061
+ name: "vue",
1062
+ description: "Vue.js composition API and component patterns"
1063
+ },
1064
+ // Angular
1065
+ {
1066
+ stackTrigger: "angular",
1067
+ repo: "Jeffallan/claude-skills",
1068
+ name: "angular-architect",
1069
+ description: "Angular architecture, modules, and component patterns"
1070
+ },
1071
+ // Svelte / SvelteKit
1072
+ {
1073
+ stackTrigger: "svelte",
1074
+ repo: "spences10/svelte-skills-kit",
1075
+ name: "svelte-skills",
1076
+ description: "Svelte 5 runes, SvelteKit routing, and component patterns"
1077
+ },
1078
+ // Convex
1014
1079
  {
1015
1080
  stackTrigger: "convex",
1016
1081
  repo: "waynesutton/convexskills",
@@ -1023,17 +1088,26 @@ var init_community_skills = __esm({
1023
1088
  name: "convex-functions",
1024
1089
  description: "Convex query/mutation/action patterns"
1025
1090
  },
1091
+ // Python
1026
1092
  {
1027
- stackTrigger: "tailwind",
1028
- repo: "blencorp/claude-code-kit",
1029
- name: "tailwind-v4",
1030
- description: "Tailwind CSS v4 patterns and configuration"
1093
+ stackTrigger: "python",
1094
+ repo: "wdm0006/python-skills",
1095
+ name: "python-skills",
1096
+ description: "Python library quality, packaging, and testing patterns"
1031
1097
  },
1098
+ // Go
1032
1099
  {
1033
- stackTrigger: "clerk",
1034
- repo: "blencorp/claude-code-kit",
1035
- name: "clerk-auth",
1036
- description: "Clerk authentication patterns"
1100
+ stackTrigger: "go",
1101
+ repo: "saisudhir14/golang-agent-skill",
1102
+ name: "golang",
1103
+ description: "Go concurrency, error handling, and testing patterns"
1104
+ },
1105
+ // Rust
1106
+ {
1107
+ stackTrigger: "rust",
1108
+ repo: "leonardomso/rust-skills",
1109
+ name: "rust-skills",
1110
+ description: "Rust ownership, concurrency, and safety patterns (179 rules)"
1037
1111
  }
1038
1112
  ];
1039
1113
  }
@@ -1416,7 +1490,7 @@ function printUpdateNotice(result) {
1416
1490
  ` ${pc5.dim("Update available:")} ${pc5.cyan(result.currentVersion)} ${pc5.dim("->")} ${pc5.cyan(result.latestVersion)}`
1417
1491
  );
1418
1492
  console.log(
1419
- ` ${pc5.dim("Run:")} ${pc5.yellow(`npm update -g ${PACKAGE_NAME}`)}`
1493
+ ` ${pc5.dim("Run:")} ${pc5.yellow(`npm install -g ${PACKAGE_NAME}@beta`)}`
1420
1494
  );
1421
1495
  console.log();
1422
1496
  }
@@ -1440,7 +1514,7 @@ __export(install_exports, {
1440
1514
  import { defineCommand } from "citty";
1441
1515
  import { resolve as resolve2 } from "path";
1442
1516
  import { join as join11 } from "path";
1443
- import { select, isCancel as isCancel3, cancel as cancel2 } from "@clack/prompts";
1517
+ import { confirm as confirm2, isCancel as isCancel3, cancel as cancel2 } from "@clack/prompts";
1444
1518
  var install_default;
1445
1519
  var init_install = __esm({
1446
1520
  "src/commands/install.ts"() {
@@ -1528,33 +1602,19 @@ var init_install = __esm({
1528
1602
  }
1529
1603
  }
1530
1604
  if (!tier) {
1531
- const tierChoice = await select({
1532
- message: "Select your tier",
1533
- options: [
1534
- {
1535
- value: "local",
1536
- label: "local",
1537
- hint: "File-based issues. No accounts, no API keys, works offline."
1538
- },
1539
- {
1540
- value: "cloud",
1541
- label: "cloud",
1542
- hint: "Linear integration. Real-time sync with your team."
1543
- }
1544
- ]
1605
+ const shouldInstall = await confirm2({
1606
+ message: `Install FlyDocs here? (local tier)
1607
+ Directory: ${targetDir}`
1545
1608
  });
1546
- if (isCancel3(tierChoice)) {
1609
+ if (isCancel3(shouldInstall) || !shouldInstall) {
1547
1610
  cancel2("Installation cancelled.");
1548
1611
  process.exit(0);
1549
1612
  }
1550
- tier = tierChoice;
1613
+ tier = "local";
1551
1614
  console.log();
1552
1615
  }
1553
1616
  if (!await pathExists(join11(targetDir, ".git"))) {
1554
- printError(
1555
- "Not in a git repository. Please run from the root of your project."
1556
- );
1557
- process.exit(1);
1617
+ printWarning("No git repository detected. Run git init when ready.");
1558
1618
  }
1559
1619
  await ensureDirectories(targetDir, tier);
1560
1620
  console.log("Installing framework files...");
@@ -1799,8 +1859,72 @@ var init_install = __esm({
1799
1859
  "",
1800
1860
  "Documentation: flydocs/README.md"
1801
1861
  ];
1862
+ let copiedToClipboard = false;
1863
+ try {
1864
+ const clipboard = await import("clipboardy");
1865
+ await clipboard.default.write("/flydocs-setup");
1866
+ copiedToClipboard = true;
1867
+ } catch {
1868
+ }
1869
+ if (copiedToClipboard) {
1870
+ const localSteps = nextSteps.findIndex(
1871
+ (l) => l.includes("/flydocs-setup")
1872
+ );
1873
+ if (localSteps !== -1) {
1874
+ nextSteps[localSteps] = nextSteps[localSteps] + " (copied to clipboard)";
1875
+ }
1876
+ }
1802
1877
  printCompletionBox("Installation Complete!", nextSteps);
1803
1878
  printBetaCta();
1879
+ try {
1880
+ const { execSync: execSync4, spawn } = await import("child_process");
1881
+ const isInstalled = (cmd) => {
1882
+ try {
1883
+ execSync4(`which ${cmd}`, { stdio: "pipe" });
1884
+ return true;
1885
+ } catch {
1886
+ return false;
1887
+ }
1888
+ };
1889
+ const hasClaude = isInstalled("claude");
1890
+ const hasCursor = isInstalled("cursor");
1891
+ const hasCode = isInstalled("code");
1892
+ if (hasClaude) {
1893
+ const launchClaude = await confirm2({
1894
+ message: "Open Claude Code and run /flydocs-setup now?"
1895
+ });
1896
+ if (!isCancel3(launchClaude) && launchClaude) {
1897
+ spawn("claude", ["/flydocs-setup"], {
1898
+ cwd: targetDir,
1899
+ stdio: "inherit"
1900
+ });
1901
+ return;
1902
+ }
1903
+ } else if (hasCursor) {
1904
+ const launchCursor = await confirm2({
1905
+ message: copiedToClipboard ? "Open Cursor? (paste /flydocs-setup from clipboard)" : "Open Cursor?"
1906
+ });
1907
+ if (!isCancel3(launchCursor) && launchCursor) {
1908
+ spawn("cursor", [targetDir], {
1909
+ stdio: "ignore",
1910
+ detached: true
1911
+ }).unref();
1912
+ printInfo("Cursor opening \u2014 paste /flydocs-setup in the chat panel");
1913
+ }
1914
+ } else if (hasCode) {
1915
+ const launchCode = await confirm2({
1916
+ message: copiedToClipboard ? "Open VS Code? (paste /flydocs-setup from clipboard)" : "Open VS Code?"
1917
+ });
1918
+ if (!isCancel3(launchCode) && launchCode) {
1919
+ spawn("code", [targetDir], {
1920
+ stdio: "ignore",
1921
+ detached: true
1922
+ }).unref();
1923
+ printInfo("VS Code opening \u2014 paste /flydocs-setup in the chat panel");
1924
+ }
1925
+ }
1926
+ } catch {
1927
+ }
1804
1928
  try {
1805
1929
  const updateResult = await checkForUpdate();
1806
1930
  if (updateResult) {
@@ -1821,7 +1945,7 @@ __export(update_exports, {
1821
1945
  import { defineCommand as defineCommand2 } from "citty";
1822
1946
  import { resolve as resolve3, join as join12 } from "path";
1823
1947
  import { mkdir as mkdir5, cp as cp2, readFile as readFile8, readdir as readdir3, rm as rm4 } from "fs/promises";
1824
- import { select as select2, text, confirm as confirm2, isCancel as isCancel4, cancel as cancel3 } from "@clack/prompts";
1948
+ import { select, text, confirm as confirm3, isCancel as isCancel4, cancel as cancel3 } from "@clack/prompts";
1825
1949
  import pc6 from "picocolors";
1826
1950
  var update_default;
1827
1951
  var init_update = __esm({
@@ -1887,7 +2011,7 @@ var init_update = __esm({
1887
2011
  } else if (args.here) {
1888
2012
  targetDir = process.cwd();
1889
2013
  } else {
1890
- const choice = await select2({
2014
+ const choice = await select({
1891
2015
  message: "Which project would you like to update?",
1892
2016
  options: [
1893
2017
  {
@@ -1958,7 +2082,7 @@ var init_update = __esm({
1958
2082
  printWarning(
1959
2083
  `Project version (${currentVersion}) is newer than installer (${version})`
1960
2084
  );
1961
- const shouldContinue = await confirm2({
2085
+ const shouldContinue = await confirm3({
1962
2086
  message: "Continue anyway?"
1963
2087
  });
1964
2088
  if (isCancel4(shouldContinue) || !shouldContinue) {
@@ -2338,7 +2462,7 @@ __export(connect_exports, {
2338
2462
  default: () => connect_default
2339
2463
  });
2340
2464
  import { defineCommand as defineCommand5 } from "citty";
2341
- import { text as text2, confirm as confirm3, isCancel as isCancel5, cancel as cancel4 } from "@clack/prompts";
2465
+ import { text as text2, confirm as confirm4, isCancel as isCancel5, cancel as cancel4 } from "@clack/prompts";
2342
2466
  import pc8 from "picocolors";
2343
2467
  import { readFile as readFile9, writeFile as writeFile5, appendFile as appendFile2 } from "fs/promises";
2344
2468
  import { join as join13 } from "path";
@@ -2388,7 +2512,7 @@ var init_connect = __esm({
2388
2512
  if (config.tier === "cloud") {
2389
2513
  printInfo("This project is already connected to the cloud tier.");
2390
2514
  console.log();
2391
- const reconnect = await confirm3({
2515
+ const reconnect = await confirm4({
2392
2516
  message: "Want to update your API key?"
2393
2517
  });
2394
2518
  if (isCancel5(reconnect) || !reconnect) {
@@ -2614,14 +2738,16 @@ var init_self_update = __esm({
2614
2738
  console.log(` Updating ${pc10.cyan(PACKAGE_NAME)}...`);
2615
2739
  console.log();
2616
2740
  try {
2617
- execSync3(`npm update -g ${PACKAGE_NAME}`, {
2741
+ execSync3(`npm install -g ${PACKAGE_NAME}@beta`, {
2618
2742
  stdio: "inherit",
2619
2743
  timeout: 6e4
2620
2744
  });
2621
2745
  console.log();
2622
2746
  printStatus("FlyDocs CLI updated successfully");
2623
2747
  } catch {
2624
- printError(`Update failed. Try manually: npm update -g ${PACKAGE_NAME}`);
2748
+ printError(
2749
+ `Update failed. Try manually: npm install -g ${PACKAGE_NAME}@beta`
2750
+ );
2625
2751
  process.exit(1);
2626
2752
  }
2627
2753
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flydocs/cli",
3
- "version": "0.5.0-beta.3",
3
+ "version": "0.5.0-beta.5",
4
4
  "type": "module",
5
5
  "description": "FlyDocs AI CLI — install, setup, and manage FlyDocs projects",
6
6
  "bin": {
@@ -22,6 +22,7 @@
22
22
  "dependencies": {
23
23
  "@clack/prompts": "^0.9.1",
24
24
  "citty": "^0.1.6",
25
+ "clipboardy": "^5.3.0",
25
26
  "picocolors": "^1.1.1"
26
27
  },
27
28
  "devDependencies": {
@@ -21,29 +21,29 @@ These are non-negotiable and enforced by hooks:
21
21
 
22
22
  The FlyDocs development lifecycle. Read the workflow skill before taking any workflow action.
23
23
 
24
- | Action | Skill | Entry Point |
25
- |--------|-------|-------------|
26
- | Capture issue | `flydocs-workflow` | `stages/capture.md` |
27
- | Refine / triage | `flydocs-workflow` | `stages/refine.md` |
28
- | Activate work | `flydocs-workflow` | `stages/activate.md` |
29
- | Implement | `flydocs-workflow` | `stages/implement.md` |
30
- | Code review | `flydocs-workflow` | `stages/review.md` |
31
- | QE validation | `flydocs-workflow` | `stages/validate.md` |
32
- | Close issue | `flydocs-workflow` | `stages/close.md` |
33
- | Start / wrap session | `flydocs-workflow` | `session.md` |
34
- | Comment templates | `flydocs-workflow` | `reference/comment-templates.md` |
35
- | Status transitions | `flydocs-workflow` | `reference/status-workflow.md` |
24
+ | Action | Skill | Entry Point |
25
+ | -------------------- | ------------------ | --------------------------------- |
26
+ | Capture issue | `flydocs-workflow` | `stages/capture.md` |
27
+ | Refine / triage | `flydocs-workflow` | `stages/refine.md` |
28
+ | Activate work | `flydocs-workflow` | `stages/activate.md` |
29
+ | Implement | `flydocs-workflow` | `stages/implement.md` |
30
+ | Code review | `flydocs-workflow` | `stages/review.md` |
31
+ | QE validation | `flydocs-workflow` | `stages/validate.md` |
32
+ | Close issue | `flydocs-workflow` | `stages/close.md` |
33
+ | Start / wrap session | `flydocs-workflow` | `session.md` |
34
+ | Comment templates | `flydocs-workflow` | `reference/comment-templates.md` |
35
+ | Status transitions | `flydocs-workflow` | `reference/status-workflow.md` |
36
36
  | Priority & estimates | `flydocs-workflow` | `reference/priority-estimates.md` |
37
- | Issue templates | `flydocs-workflow` | `templates/` |
37
+ | Issue templates | `flydocs-workflow` | `templates/` |
38
38
 
39
39
  ## Mechanism Scripts
40
40
 
41
41
  Issue operations are handled by the installed mechanism skill. Only one is active at a time.
42
42
 
43
- | Tier | Skill | Backend |
44
- |------|-------|---------|
45
- | Local (free) | `flydocs-local` | File-based (`flydocs/issues/`) |
46
- | Cloud (connected) | `flydocs-cloud` | Linear GraphQL API |
43
+ | Tier | Skill | Backend |
44
+ | ----------------- | --------------- | ------------------------------ |
45
+ | Local (free) | `flydocs-local` | File-based (`flydocs/issues/`) |
46
+ | Cloud (connected) | `flydocs-cloud` | Linear GraphQL API |
47
47
 
48
48
  Read the active mechanism skill's `SKILL.md` for script catalog and calling conventions.
49
49
 
@@ -54,37 +54,71 @@ Read the active mechanism skill's `SKILL.md` for script catalog and calling conv
54
54
 
55
55
  FlyDocs platform skills with premium functionality.
56
56
 
57
- | Skill | When to Read |
58
- |-------|--------------|
59
- | `flydocs-figma` | Building UI from Figma designs — extraction, token mapping |
60
- | `flydocs-estimates` | Estimating AI token usage and costs (opt-in via config) |
57
+ | Skill | When to Read |
58
+ | ------------------- | ---------------------------------------------------------- |
59
+ | `flydocs-figma` | Building UI from Figma designs — extraction, token mapping |
60
+ | `flydocs-estimates` | Estimating AI token usage and costs (opt-in via config) |
61
61
 
62
62
  ## Project Context
63
63
 
64
- | File | Purpose |
65
- |------|---------|
64
+ | File | Purpose |
65
+ | ---------------------------- | -------------------------------------------- |
66
66
  | `flydocs/context/project.md` | Product scope, tech stack, active priorities |
67
- | `.flydocs/config.json` | Tier, provider, labels, active projects |
67
+ | `.flydocs/config.json` | Tier, provider, labels, active projects |
68
68
 
69
69
  ## Hooks
70
70
 
71
- | Hook | Trigger | Purpose |
72
- |------|---------|---------|
73
- | `PostToolUse` (Edit/Write) | After code changes | Auto-format |
74
- | `UserPromptSubmit` | Before prompt | Inject git/issue context |
75
- | `PreToolUse` | Before script execution | Auto-approve mechanism scripts |
71
+ | Hook | Trigger | Purpose |
72
+ | -------------------------- | ----------------------- | ------------------------------ |
73
+ | `PostToolUse` (Edit/Write) | After code changes | Auto-format |
74
+ | `UserPromptSubmit` | Before prompt | Inject git/issue context |
75
+ | `PreToolUse` | Before script execution | Auto-approve mechanism scripts |
76
+
77
+ ## Output Formatting
78
+
79
+ Consistent formatting across all agent output. Follow these rules in every
80
+ response — session summaries, issue comments, status updates, and plans.
81
+
82
+ **Structure:**
83
+
84
+ - Lead with a one-line summary or status before detail.
85
+ - Use `##` for major sections, `###` for subsections. Never skip levels.
86
+ - Use bullet lists for 3+ related items. Use numbered lists only for sequences.
87
+ - One blank line between sections. No double-blank lines.
88
+
89
+ **Readability:**
90
+
91
+ - Keep paragraphs to 2-3 sentences. Break long blocks into scannable lists.
92
+ - Bold key terms and status labels on first use: **Completed**, **Blocked**, **Next**.
93
+ - Use inline code for file paths, commands, and identifiers: `project.md`, `/start-session`, `FLY-123`.
94
+ - Use code blocks with language tags for multi-line code or script examples.
95
+
96
+ **Consistency:**
97
+
98
+ - Status labels: **Completed**, **In Progress**, **Blocked**, **Next Up** (always bolded).
99
+ - Issue references: `FLY-123` format (uppercase prefix, hyphen, number).
100
+ - File paths: relative from project root, in backticks.
101
+ - Dates: `YYYY-MM-DD` format.
102
+ - No emoji in output unless the user explicitly requests it.
103
+
104
+ **Tables:**
105
+
106
+ - Use tables for structured comparisons (3+ items with 2+ attributes).
107
+ - Left-align text columns, keep headers short.
76
108
 
77
109
  <!-- flydocs:skills-manifest:start -->
110
+
78
111
  ## Skills Index
79
112
 
80
113
  IMPORTANT: Prefer skill-led reasoning over pre-training reasoning.
81
114
  Consult the relevant skill BEFORE writing code or making workflow decisions.
82
115
 
83
- | Skill | Triggers | Entry |
84
- |-------|----------|-------|
85
- | flydocs-cloud | create issue, transition, comment, list issues, assign, update description, update issue, project update, Linear, cloud | .claude/skills/flydocs-cloud/SKILL.md |
86
- | flydocs-estimates | estimate, cost, token usage, API cost, labor estimate, sizing, effort | .claude/skills/flydocs-estimates/SKILL.md |
87
- | flydocs-figma | Figma, design, screenshot, token mapping, component from design, pixel-perfect, design system | .claude/skills/flydocs-figma/SKILL.md |
88
- | flydocs-local | create issue, transition, comment, list issues, assign, update description, status summary, local | .claude/skills/flydocs-local/SKILL.md |
89
- | flydocs-workflow | capture, refine, activate, implement, review, validate, close, session, workflow, transition, status, issue | .claude/skills/flydocs-workflow/SKILL.md |
116
+ | Skill | Triggers | Entry |
117
+ | ----------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
118
+ | flydocs-cloud | create issue, transition, comment, list issues, assign, update description, update issue, project update, Linear, cloud | .claude/skills/flydocs-cloud/SKILL.md |
119
+ | flydocs-estimates | estimate, cost, token usage, API cost, labor estimate, sizing, effort | .claude/skills/flydocs-estimates/SKILL.md |
120
+ | flydocs-figma | Figma, design, screenshot, token mapping, component from design, pixel-perfect, design system | .claude/skills/flydocs-figma/SKILL.md |
121
+ | flydocs-local | create issue, transition, comment, list issues, assign, update description, status summary, local | .claude/skills/flydocs-local/SKILL.md |
122
+ | flydocs-workflow | capture, refine, activate, implement, review, validate, close, session, workflow, transition, status, issue | .claude/skills/flydocs-workflow/SKILL.md |
123
+
90
124
  <!-- flydocs:skills-manifest:end -->
@@ -11,6 +11,22 @@ Triggers: "setup flydocs", "onboard project", "flydocs init"
11
11
 
12
12
  ---
13
13
 
14
+ ## IMPORTANT: Use Plan Mode
15
+
16
+ **Before executing any setup steps, enter plan mode.** This setup involves
17
+ multiple phases with user decisions at each stage. Planning first ensures a
18
+ better experience:
19
+
20
+ 1. Run scenario detection (Phase 0) to understand the project state
21
+ 2. Scan for existing documentation and the tech stack
22
+ 3. Present a structured setup plan showing all phases and what each will do
23
+ 4. Get user approval before making any changes
24
+
25
+ This lets the user see the full picture before committing. Only exit plan
26
+ mode and begin execution after the user approves the plan.
27
+
28
+ ---
29
+
14
30
  ## Phase 0: Scenario Detection
15
31
 
16
32
  Before starting, detect the project state by checking the filesystem:
@@ -541,7 +557,26 @@ Wrapping up:
541
557
  - No account or API key needed — everything is local and offline
542
558
  - Run `/status` anytime to see your backlog at a glance
543
559
 
544
- ### Step 4: Beta CTA
560
+ ### Step 4: Commit setup
561
+
562
+ FlyDocs setup creates and modifies many files. Prompt the user to commit
563
+ everything as a clean baseline:
564
+
565
+ ```
566
+ Ready to commit the FlyDocs setup? This creates a clean baseline with all
567
+ configuration, context, and initial backlog in one commit.
568
+ ```
569
+
570
+ If the user agrees, create a single commit with a message like:
571
+ `Add FlyDocs project setup (local tier)` or `Add FlyDocs project setup (cloud tier)`
572
+
573
+ Stage all new and modified FlyDocs files (`.flydocs/`, `.claude/`, `.cursor/`,
574
+ `flydocs/`, `AGENTS.md`, `.gitignore`). Do not stage unrelated changes.
575
+
576
+ If the user declines, remind them to commit before starting work:
577
+ "No problem — just remember to commit these files before your first session."
578
+
579
+ ### Step 5: Beta CTA
545
580
 
546
581
  Always end with the beta call-to-action:
547
582
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.0-beta.3",
2
+ "version": "0.5.0-beta.5",
3
3
  "sourceRepo": "github.com/plastrlab/flydocs-core",
4
4
  "tier": "cloud",
5
5
  "setupComplete": false,
@@ -1 +1 @@
1
- 0.5.0-beta.3
1
+ 0.5.0-beta.5
@@ -21,15 +21,15 @@ The development lifecycle follows seven stages:
21
21
  Capture → Refine → Activate → Implement → Review → Validate → Close
22
22
  ```
23
23
 
24
- | Stage | What Happens |
25
- |-------|--------------|
26
- | Capture | Create issue from input (feature, bug, chore, idea) |
27
- | Refine | Triage, fill template, set priority and estimate |
28
- | Activate | Assign to person, transition to In Progress |
24
+ | Stage | What Happens |
25
+ | --------- | ---------------------------------------------------- |
26
+ | Capture | Create issue from input (feature, bug, chore, idea) |
27
+ | Refine | Triage, fill template, set priority and estimate |
28
+ | Activate | Assign to person, transition to In Progress |
29
29
  | Implement | Build incrementally, document decisions, self-review |
30
- | Review | Code quality check against acceptance criteria |
31
- | Validate | User acceptance testing, collect approval |
32
- | Close | Verify approval, mark as Done |
30
+ | Review | Code quality check against acceptance criteria |
31
+ | Validate | User acceptance testing, collect approval |
32
+ | Close | Verify approval, mark as Done |
33
33
 
34
34
  Detailed procedures: `.claude/skills/flydocs-workflow/`
35
35
 
@@ -43,10 +43,10 @@ Script location: `.claude/skills/flydocs-local/scripts/` or `.claude/skills/flyd
43
43
 
44
44
  ## Premium Skills
45
45
 
46
- | Skill | Documentation |
47
- |-------|---------------|
48
- | Figma Integration | `.claude/skills/flydocs-figma/` — design extraction, token mapping |
49
- | Cost Estimation | `.claude/skills/flydocs-estimates/` — AI token/labor estimates (opt-in) |
46
+ | Skill | Documentation |
47
+ | ----------------- | ----------------------------------------------------------------------- |
48
+ | Figma Integration | `.claude/skills/flydocs-figma/` — design extraction, token mapping |
49
+ | Cost Estimation | `.claude/skills/flydocs-estimates/` — AI token/labor estimates (opt-in) |
50
50
 
51
51
  ## Writing Style
52
52
 
@@ -64,32 +64,48 @@ When writing or editing any copy — product docs, marketing pages, website copy
64
64
  - Don't repeat the same stat or claim more than once per page. Cross-page repetition is fine — readers land on individual pages.
65
65
  - When differentiating, name what the alternative does and where it falls short. Don't just assert we're better — show the specific gap.
66
66
 
67
+ ## Output Formatting
68
+
69
+ Follow these rules in every response for consistent, scannable output.
70
+
71
+ - Lead with a one-line summary before detail.
72
+ - Use `##` for major sections, `###` for subsections. Never skip heading levels.
73
+ - Bullet lists for 3+ related items. Numbered lists only for ordered sequences.
74
+ - Bold status labels: **Completed**, **In Progress**, **Blocked**, **Next Up**.
75
+ - Inline code for file paths, commands, identifiers: `project.md`, `/start-session`, `FLY-123`.
76
+ - Code blocks with language tags for multi-line code.
77
+ - Tables for structured comparisons (3+ items with 2+ attributes).
78
+ - Keep paragraphs to 2-3 sentences. Break long blocks into scannable lists.
79
+ - Dates in `YYYY-MM-DD` format. No emoji unless explicitly requested.
80
+
67
81
  ## Project Context
68
82
 
69
- | File | Purpose |
70
- |------|---------|
71
- | `flydocs/context/project.md` | Product scope, tech stack, active priorities |
72
- | `.flydocs/config.json` | Configuration — tier, provider, labels, active projects |
83
+ | File | Purpose |
84
+ | ---------------------------- | ------------------------------------------------------- |
85
+ | `flydocs/context/project.md` | Product scope, tech stack, active priorities |
86
+ | `.flydocs/config.json` | Configuration — tier, provider, labels, active projects |
73
87
 
74
88
  <!-- flydocs:skills-manifest:start -->
89
+
75
90
  ## Skills Index
76
91
 
77
92
  IMPORTANT: Prefer skill-led reasoning over pre-training reasoning.
78
93
  Consult the relevant skill BEFORE writing code or making workflow decisions.
79
94
 
80
- | Skill | Triggers | Entry |
81
- |-------|----------|-------|
82
- | flydocs-cloud | create issue, transition, comment, list issues, assign, update description, update issue, project update, Linear, cloud | .claude/skills/flydocs-cloud/SKILL.md |
83
- | flydocs-estimates | estimate, cost, token usage, API cost, labor estimate, sizing, effort | .claude/skills/flydocs-estimates/SKILL.md |
84
- | flydocs-figma | Figma, design, screenshot, token mapping, component from design, pixel-perfect, design system | .claude/skills/flydocs-figma/SKILL.md |
85
- | flydocs-local | create issue, transition, comment, list issues, assign, update description, status summary, local | .claude/skills/flydocs-local/SKILL.md |
86
- | flydocs-workflow | capture, refine, activate, implement, review, validate, close, session, workflow, transition, status, issue | .claude/skills/flydocs-workflow/SKILL.md |
95
+ | Skill | Triggers | Entry |
96
+ | ----------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
97
+ | flydocs-cloud | create issue, transition, comment, list issues, assign, update description, update issue, project update, Linear, cloud | .claude/skills/flydocs-cloud/SKILL.md |
98
+ | flydocs-estimates | estimate, cost, token usage, API cost, labor estimate, sizing, effort | .claude/skills/flydocs-estimates/SKILL.md |
99
+ | flydocs-figma | Figma, design, screenshot, token mapping, component from design, pixel-perfect, design system | .claude/skills/flydocs-figma/SKILL.md |
100
+ | flydocs-local | create issue, transition, comment, list issues, assign, update description, status summary, local | .claude/skills/flydocs-local/SKILL.md |
101
+ | flydocs-workflow | capture, refine, activate, implement, review, validate, close, session, workflow, transition, status, issue | .claude/skills/flydocs-workflow/SKILL.md |
102
+
87
103
  <!-- flydocs:skills-manifest:end -->
88
104
 
89
105
  ## Platform Configuration
90
106
 
91
- | Platform | Primary Config |
92
- |----------|----------------|
93
- | Claude Code | `.claude/CLAUDE.md` |
94
- | Cursor | `.cursor/rules/*.mdc` |
107
+ | Platform | Primary Config |
108
+ | ------------------------- | ----------------------- |
109
+ | Claude Code | `.claude/CLAUDE.md` |
110
+ | Cursor | `.cursor/rules/*.mdc` |
95
111
  | Codex / Windsurf / Others | This file (`AGENTS.md`) |
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.0-beta.3",
2
+ "version": "0.5.0-beta.5",
3
3
  "description": "FlyDocs Core - Manifest of all managed files",
4
4
  "repository": "github.com/plastrlab/flydocs-core",
5
5