@mhd-ghaith-abtah/flow 0.8.0-beta.1 → 0.8.0-beta.3

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/CHANGELOG.md CHANGED
@@ -6,6 +6,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.8.0-beta.3] — 2026-05-23
10
+
11
+ ### Fixed
12
+ - **`flow doctor` now finds `flow.config.yaml` at the canonical `.claude/flow.config.yaml` path** — surfaced by a real install into kaizenpro. Doctor was checking only the legacy root-level `flow.config.yaml` path while `scaffold()` writes to `.claude/flow.config.yaml`. Result: every fresh install reported `Config ℹ not present (run /flow-init)` even though the file was sitting right there, AND the entire Adapters section was suppressed (it depends on a parsed config). Fix: `probeConfig` checks `.claude/flow.config.yaml` first then falls back to the root path for backward compat. 3 new tests pin the behavior (canonical-found / legacy-fallback / canonical-wins-when-both-exist).
13
+ - **`flow uninstall` now removes `.claude/flow.config.yaml`** — same root cause as the doctor bug. `PROJECT_PATHS` listed only the legacy root-level `flow.config.yaml`, leaving the actually-written canonical file in place after uninstall. Fix: PROJECT_PATHS extended with `.claude/flow.config.yaml` + `.claude/flow.config.local.yaml`; legacy root paths kept for backward compat with pre-`.claude/`-convention installs.
14
+
15
+ ### Changed
16
+ - **Docs now recommend `npm install -g` + `flow install-skills --scope project` as the canonical slash-command setup** — surfaced by dogfooding the `npx`-only path into kaizenpro. The pure-npx flow produces symlinks pointing at `~/.npm/_npx/<hash>/node_modules/...` which npm rotates over time; when the cache entry is purged, slash commands silently stop resolving with no error. Single `npm install -g` provides a stable symlink target at `/opt/homebrew/lib/node_modules/...` that survives until `npm uninstall`. README install section + `docs/quickstart.md` + `docs/usage.md §1` all rewritten to lead with the project-scope pattern and demote pure-npx to a "works but with caveats" section (§1d). Rationale: project-scope keeps slash commands out of unrelated Claude Code sessions; stable symlinks mean no broken-pointer debugging when the npx cache rotates. `npx -y ... install-skills --scope project` still works for one-off use, just less durable.
17
+
18
+ ## [0.8.0-beta.2] — 2026-05-23
19
+
20
+ ### Fixed
21
+ - **Headless `flow init --yes` now drops `.caveman-enable` marker** — closes a parity gap between the slash workflow and the headless orchestrator. The slash `/flow-init` (skills/flow-init/workflow.md step 8b) has always dropped a zero-byte `.caveman-enable` in the project root when Caveman is requested, so allowlist-mode users (`~/.config/caveman/config.json` = `{"defaultMode": "off"}`) get Caveman activated there automatically. The headless orchestrator skipped this step despite README + usage.md both claiming the installer "drops a `.caveman-enable` marker". Surfaced by a user dogfooding the v0.8.0-beta.1 npm tarball into their actual project. Fix: `lib/init/orchestrate.js` now writes the marker after the Caveman dispatcher runs (skipped under `dryRun: true`, idempotent if the file already exists, non-fatal on write failure). 3 new tests cover the marker-written / no-marker-when-subset-none / no-marker-in-dry-run cases. docs/usage.md §16d updated — the manual `touch .caveman-enable` workaround is no longer needed on either install path. 191/191 tests pass.
22
+
23
+ ### Changed
24
+ - **Docs audit + greenfield/Caveman sections** — full sweep of every doc file for staleness post-v0.8.0-beta.1. `docs/quickstart.md` rewritten: bootstrap order now includes the `flow install-skills` step (was missing — same gap users hit before the install-skills command shipped), Q count corrected to 9 (was 8 pre-Q7c), ECC install snippet updated from the dead `./install.sh` path to the github-pin form, `/flow-doctor --fix` (which doesn't exist) replaced with `--repair-upstream`, retro output path corrected from `<date>.md` to `<epic-id>-retro.md`. `docs/migrate-from-bmad.md` stops naming specific BMad slash commands (`/bmad-create-prd`, `/bmad-create-story`) since those changed between BMad versions; now points at the BMad 6+ `/bmad:bmm:<step>` namespace as the current shape. `docs/profiles.md` clarifies that tokens-per-story figures assume Caveman = `full`. README's "When to use which command" table swapped specific BMad slash names for a version-agnostic pointer; the install diagram shows the actual github pin + Caveman fork commands. `docs/usage.md` gains two new sections: §2c "Starting from zero (greenfield + BMad planning)" — the PRD → architecture → stories → import-bmad → /flow-story arc for users with only an idea; and §17 "How Caveman enhances Flow" — the token-math justification, mode reference, fork-pin story, opt-out paths.
25
+
9
26
  ## [0.8.0-beta.1] — 2026-05-23
10
27
 
11
28
  ### Added
package/README.md CHANGED
@@ -20,18 +20,21 @@ Existing per-story workflows are token-heavy. BMad's create-story re-reads epics
20
20
 
21
21
  ## Install
22
22
 
23
- > **Status (v0.7.2-beta.0, published 2026-05-19):** Flow is live on npm as a **beta channel**. Stable `latest` will be promoted from beta after a soak period. Expect minor breaking changes between beta releases until then.
23
+ > **Status (v0.8.0-beta.2, published 2026-05-23):** Flow is live on npm via the `@beta` dist-tag. `@latest` still points at the older `0.7.2-beta.0` and gets promoted from `@beta` after a soak window with no critical issues. Pin to `@beta` for the new headless install + project-scope ECC + bug fixes.
24
24
 
25
25
  ```bash
26
- # 1. Install the Node CLI + bootstrap the Claude Code surface
26
+ # 1. Install the Node CLI (once per machine)
27
27
  npm install -g @mhd-ghaith-abtah/flow@beta
28
- flow install-skills # one-time; symlinks 4 skills into ~/.claude/skills/
28
+ flow --version # → 0.8.0-beta.2
29
29
 
30
- # 2. Then EITHER (interactive):
31
- /flow-init # inside Claude Code
30
+ # 2. Per project — symlink the 4 skills into THIS project's .claude/skills/
31
+ cd /path/to/project
32
+ flow install-skills --scope project --force # ← recommended scope for slash commands
32
33
 
33
- # OR (headless, no Claude Code needed):
34
- flow init --profile standard --yes # chains detect → upstreams → MCPs → scaffold
34
+ # 3. Pick an install path:
35
+ flow init --profile standard --yes # headless: detect → upstreams → MCPs → scaffold
36
+ # OR, inside Claude Code opened in this project:
37
+ /flow-init # interactive
35
38
 
36
39
  # Useful at any point:
37
40
  flow plan --profile standard # preview without executing
@@ -42,7 +45,12 @@ git clone https://github.com/mhd-ghaith-abtah/flow.git
42
45
  cd flow && npm install && tools/dev-link.sh # dev-mode equivalent of install-skills + PATH link
43
46
  ```
44
47
 
45
- The `flow install-skills` step is what makes `/flow-init` resolve in Claude Code npm puts the package in your global node_modules, but Claude Code only scans `~/.claude/skills/`. After install-skills, both paths (interactive slash or headless CLI) reach the same orchestrator and write the same files. Override individual knobs via `--ecc-scope`, `--bmad-subset`, `--ecc-subset`. Full guide: [docs/usage.md](docs/usage.md).
48
+ The `flow install-skills --scope project` step is what makes `/flow-init` resolve in Claude Code when opened inside the project. Two reasons project scope is the recommended default:
49
+
50
+ 1. **Reliable symlinks.** They point at the stable `/opt/homebrew/lib/node_modules/...` path (or your equivalent npm prefix), so they don't break the way `npx`-based symlinks do when the npx cache rotates.
51
+ 2. **No skill pollution elsewhere.** Slash commands only resolve inside this project, not in every Claude Code session you ever open.
52
+
53
+ If you'd rather have `/flow-*` available globally on your machine, swap step 2 for `flow install-skills` (no `--scope` flag — defaults to `home` / `~/.claude/skills/`). For `npx`-only / no-global-install setups, see [docs/usage.md §1d](docs/usage.md#d-npx--no-install-but-with-a-caveat) — works but requires re-linking before each session. Full guide: [docs/usage.md](docs/usage.md).
46
54
 
47
55
  The installer detects your project shape, then:
48
56
  - Installs Flow's four skills (`flow-init`, `flow-sprint`, `flow-story`, `flow-doctor`)
@@ -97,7 +105,8 @@ flow install
97
105
  ├── Phase B: install Flow's own skills + adapters + templates
98
106
  ├── Phase C: delegate to upstream installers
99
107
  │ ├── npx bmad-method install --modules <curated subset>
100
- └── ECC ./install.sh --profile <curated subset>
108
+ ├── npx -y -p "github:affaan-m/ECC#<commit>" ecc-install --target <user|project> --profile <curated subset>
109
+ │ └── npx -y "github:mhd-ghaith-abtah/caveman#flow-pin-v0.1" # temporary fork, see Caveman FAQ
101
110
  ├── Phase D: install MCP servers (context7, playwright, linear, …)
102
111
  ├── Phase E: scaffold flow.config.yaml + docs/flow/
103
112
  └── Phase F: smoke test (flow doctor)
@@ -111,8 +120,8 @@ After `/flow-init` you'll have slash commands from all three projects active. Us
111
120
 
112
121
  | Goal | Command | Owner |
113
122
  |---|---|---|
114
- | Write a PRD, architecture doc, or epic list | `/bmad-create-prd`, `/bmad-create-architecture`, `/bmad-create-epic` | BMad |
115
- | Generate a fresh story from a BMad epic | `/bmad-create-story` (then `/flow-sprint import-bmad`) | BMad → Flow |
123
+ | Plan a brand-new project (PRD architecture stories) | BMad's own workflow (slash names vary by version — BMad 6 uses `/bmad:bmm:2-plan-workflow`, `/bmad:bmm:3-solutioning`, `/bmad:bmm:4-implementation`) | BMad |
124
+ | Import BMad's planning output into Flow | `/flow-sprint import-bmad` or `flow sprint import-bmad` | BMad → Flow |
116
125
  | Add a story to the current sprint | `/flow-sprint add "<title>" --epic E1` | Flow |
117
126
  | Pick the next story to work on | `/flow-sprint next` | Flow |
118
127
  | **Implement → review → verify → commit → PR** | `/flow-story` | Flow (orchestrates ECC) |
@@ -120,11 +129,11 @@ After `/flow-init` you'll have slash commands from all three projects active. Us
120
129
  | Just run a code review | `/code-review` | ECC |
121
130
  | Just run the documentation updater | `/update-docs` | ECC |
122
131
  | Health-check the whole install | `/flow-doctor` | Flow |
123
- | End-of-sprint retro | `/flow-sprint retro` | Flow |
132
+ | End-of-sprint retro | `/flow-sprint retro E1` (epic-scoped) | Flow |
124
133
 
125
134
  **Rule of thumb:** if you're moving a story through its lifecycle (plan → code → review → ship), use `/flow-story` — it dispatches to the right ECC primitive at the right phase. If you want to invoke an ECC primitive directly (e.g., to re-review uncommitted code without advancing the story), call it by name; Flow won't get in the way.
126
135
 
127
- **Don't mix:** `/bmad-create-story` and `/flow-sprint add` both create story files. Pick one per project — Flow's import-bmad subcommand bridges the two if you start with BMad and want Flow to take over.
136
+ **Don't double-create:** BMad's create-story slash command and `/flow-sprint add` both produce story files. Pick one per project — Flow's `import-bmad` subcommand bridges the two if you start with BMad and want Flow to take over per-story orchestration.
128
137
 
129
138
  ## FAQ
130
139
 
@@ -6,7 +6,7 @@ Flow doesn't replace BMad — it sits on top of it and adds a lightweight per-st
6
6
 
7
7
  - Your BMad PRD, architecture, and epic documents — `/flow-init` does NOT touch these
8
8
  - Your BMad story files in `docs/_bmad-output/stories/` — Flow reads them as references
9
- - The BMad slash commands — `/bmad-create-prd`, `/bmad-create-epic`, `/bmad-create-story` still work
9
+ - The BMad slash commands keep working Flow doesn't remove or rename them. The exact slash names depend on which BMad version is installed (BMad 6+ uses the `/bmad:bmm:<step>` namespace, e.g. `/bmad:bmm:2-plan-workflow`, `/bmad:bmm:3-solutioning`, `/bmad:bmm:4-implementation`; older releases used a flatter `/bmad-*` form). Check `~/.claude/skills/` after install to see what BMad registered.
10
10
  - `_bmad/_config/manifest.yaml` — Flow records the BMad version for repair
11
11
 
12
12
  ## What changes
@@ -17,7 +17,7 @@ Flow doesn't replace BMad — it sits on top of it and adds a lightweight per-st
17
17
  - `journeys/`, `retros/`, `archive/`, `deferred.md`, `artifacts/`
18
18
  - `flow.config.yaml` — adapter + profile config (committed; team-share safe)
19
19
  - A new branch convention: `flow/<story-id>-<slug>` — used by `/flow-story` for auto-branching
20
- - `/flow-story` becomes the per-story orchestrator instead of `/bmad-create-story` + manual stepping
20
+ - `/flow-story` becomes the per-story orchestrator instead of BMad's own per-story workflow + manual stepping
21
21
 
22
22
  ## Migration
23
23
 
@@ -68,14 +68,15 @@ Then create one story stub per entry — `templates/story.md.tmpl` is the shape.
68
68
 
69
69
  ## Coexistence
70
70
 
71
- Once migrated, you can still create new BMad stories with `/bmad-create-story` and import them into Flow:
71
+ Once migrated, you can still create new stories through BMad's own slash commands (whatever your BMad version exposes) and re-import:
72
72
 
73
73
  ```
74
- /bmad-create-story # writes docs/_bmad-output/stories/E1-002-<slug>.md
75
- /flow-sprint import-bmad # detects new BMad story files, generates Flow stubs
74
+ # Run BMad's create-story flow — exact command depends on your BMad version.
75
+ # Then back into Flow:
76
+ /flow-sprint import-bmad # detects new BMad story files, generates Flow stubs
76
77
  ```
77
78
 
78
- The reverse — Flow → BMad — isn't supported. Flow's story stubs are deliberately lighter than BMad's, so round-tripping would lose information. If you need a full BMad-shape story file later, run `/bmad-create-story` and Flow will detect + link it.
79
+ The reverse — Flow → BMad — isn't supported. Flow's story stubs are deliberately lighter than BMad's, so round-tripping would lose information. If you need a full BMad-shape story file later, run BMad's create-story flow and Flow will detect + link it on the next `import-bmad`.
79
80
 
80
81
  ## Rollback
81
82
 
package/docs/profiles.md CHANGED
@@ -4,13 +4,15 @@ Profiles are named bundles that pick the right adapters + upstream subsets + MCP
4
4
 
5
5
  ## At a glance
6
6
 
7
- | Profile | Best for | Tokens/story | Review | E2E | PR | Issue tracker | ECC scope |
7
+ | Profile | Best for | Tokens/story* | Review | E2E | PR | Issue tracker | ECC scope |
8
8
  |---|---|---:|---|---|---|---|---|
9
9
  | `mini` | Solo, one repo, light review | ~20k | `code-review` only | none | GitHub | GitHub Issues | user |
10
10
  | `standard` | Solo/small team, formal review | ~40k | `code-review` + language reviewer + security on risk tags | Playwright MCP | GitHub | GitHub Issues | user |
11
11
  | `team` | Multi-repo, multi-LLM review | ~60k | + adversarial + edge-case + separate-model reviewer | Playwright MCP | GitHub (sibling PRs) | Linear | **project** |
12
12
  | `minimal` | Bare Flow, no upstreams | <10k | none | none | none | none | user |
13
13
 
14
+ *Tokens-per-story figures assume **Caveman is active in `full` mode** — Caveman compresses Claude Code's responses ~46% on input and ~75% on output, which is the only way these numbers are realistic. Without Caveman, multiply by ~3–4×. See [usage.md §17](usage.md#17-how-caveman-enhances-flow) for the math.
15
+
14
16
  ## What each profile changes
15
17
 
16
18
  ### `minimal`
@@ -4,28 +4,49 @@ A 10-minute path from zero to first shipped story.
4
4
 
5
5
  ## Prerequisites
6
6
 
7
- - [Claude Code](https://claude.com/claude-code) installed (`claude` on PATH)
8
- - Node 20+ (for the `flow` CLI; not strictly required if you only use slash commands)
7
+ - [Claude Code](https://claude.com/claude-code) installed (`claude` on PATH) — only required if you want the `/flow-*` slash commands. The headless CLI works without it.
8
+ - Node 20+
9
9
  - Git repo, with `origin` set if you want PRs
10
10
 
11
11
  ## Install
12
12
 
13
- Inside Claude Code, in your project root:
13
+ ```bash
14
+ # 1. Install the Node CLI (once per machine)
15
+ npm install -g @mhd-ghaith-abtah/flow@beta
16
+ flow --version # → 0.8.0-beta.2 (or newer)
14
17
 
18
+ # 2. Per project — symlink the 4 skills into THIS project's .claude/skills/
19
+ cd /path/to/your/project
20
+ flow install-skills --scope project --force # ← recommended for slash commands
21
+
22
+ # 3. Pick a path:
23
+ flow init --profile mini --yes # headless (no Claude Code needed)
24
+ # OR, inside Claude Code opened in this project:
25
+ /flow-init # interactive Q&A
15
26
  ```
16
- /flow-init
17
- ```
18
27
 
19
- This launches an interactive installer. It will:
28
+ `flow install-skills --scope project` is the bridge — npm puts Flow in `/opt/homebrew/lib/node_modules/...` but Claude Code only resolves slash commands from a scanned path (`~/.claude/skills/` for home scope, `<project>/.claude/skills/` for project scope). Per-project scope is the recommended default because:
29
+
30
+ - Symlinks point at a stable path that survives until you `npm uninstall`
31
+ - Slash commands only appear inside this project, not in every unrelated Claude Code session
32
+
33
+ Re-run `flow install-skills --scope project --force` after every Flow upgrade (`npm install -g @mhd-ghaith-abtah/flow@beta`) to refresh the symlinks. It's idempotent.
34
+
35
+ If you'd rather have `/flow-*` available globally on your machine instead of per-project, omit the `--scope` flag — `flow install-skills` defaults to `home` scope (`~/.claude/skills/`). See [usage.md §1](usage.md#1-installation-paths) for the full breakdown.
36
+
37
+ ## What the installer does
38
+
39
+ Either path (slash or headless `--yes`) walks the same chain:
20
40
 
21
41
  1. **Detect project shape** — package manager, framework, existing BMad/ECC install, CLAUDE.md presence
22
- 2. **Ask ~8 questions** — profile (mini/standard/team), adapters (issue tracker, PR platform, E2E, verify), upstream subsets (BMad, ECC, Caveman)
23
- 3. **Delegate to upstream installers** `npx bmad-method install --modules <curated>`, `ECC ./install.sh --profile <curated>`, plus Caveman
24
- 4. **Set up MCP servers** — context7, playwright, linear (if selected)
25
- 5. **Scaffold docs/flow/ + flow.config.yaml** — sprint.yaml, stories/, journeys/, retros/, deferred.md
42
+ 2. **Ask ~9 questions** (interactive only `--yes` pre-fills from profile defaults):
43
+ - Q1 profile · Q2–Q5 adapters (issue tracker, PR, E2E, verify) · Q6 BMad subset · Q7 ECC subset · Q7c ECC install scope (user/project) · Q7b Caveman mode · Q8 BMad migration (if detected) · Q9 secrets store
44
+ 3. **Delegate to upstream installers** — `npx bmad-method install --modules <curated>`, `npx -y -p "github:affaan-m/ECC#<commit>" ecc-install --target <user|project>`, Caveman from a Flow-maintained fork pinned at `flow-pin-v0.1` (see [usage.md §6](usage.md#6-ecc-install-scope) for the fork-pin story)
45
+ 4. **Register MCPs** — context7, playwright, linear, etc. (per profile)
46
+ 5. **Scaffold `docs/flow/` + `flow.config.yaml` + `install-state.json`**
26
47
  6. **Optionally migrate** an existing BMad `sprint-status.yaml`
27
48
 
28
- Re-running is idempotent `/flow-init --update` will diff against the recorded state and apply only deltas.
49
+ Re-running is idempotent. To re-resolve against an existing install, see [`flow init --update`](usage.md#8-updating-an-existing-install). To restore deleted scaffold files, see [`flow init --repair`](usage.md#9-repairing-a-broken-install).
29
50
 
30
51
  ## First story
31
52
 
@@ -37,12 +58,12 @@ Re-running is idempotent — `/flow-init --update` will diff against the recorde
37
58
 
38
59
  `/flow-story` auto-detects the current phase (plan / implement / review / verify / e2e / docs / commit / pr) from `sprint.yaml` + git branch + commit state, and invokes the right ECC primitive at each step. It chains phases automatically until it hits a destructive boundary (commit, PR) or a CRITICAL/HIGH review finding, then pauses for your CONFIRM.
39
60
 
40
- **Useful flags:**
61
+ **Useful `/flow-story` flags:**
41
62
 
42
63
  | Flag | Effect |
43
64
  |---|---|
44
65
  | `--auto` | No CONFIRM gates. Use for low-risk stories. |
45
- | `--auto-merge` | After PR opens, poll `gh pr merge --auto` until CI passes (15-min cap). |
66
+ | `--auto-merge` | After PR opens, poll `gh pr merge --auto` until CI passes (90-second wait cap per attempt; longer CI ends the turn + handoff). |
46
67
  | `--hard-review` | Force adversarial + edge-case reviewers regardless of tags. |
47
68
  | `--no-review` | Skip code review. Risky. Use for trivial config tweaks. |
48
69
  | `--no-verify` | Skip the verify command. Risky. |
@@ -53,30 +74,54 @@ Re-running is idempotent — `/flow-init --update` will diff against the recorde
53
74
 
54
75
  ## Closing out a story
55
76
 
56
- After a PR merges, `/flow-story` auto-detects the `merge-done` phase and asks for CONFIRM to flip the story to `done`. Or you can do it manually:
77
+ After a PR merges, `/flow-story` auto-detects the `merge-done` phase and asks for CONFIRM to flip the story to `done`. Or do it manually:
57
78
 
58
- ```
79
+ ```bash
80
+ # Inside Claude Code:
59
81
  /flow-sprint done E1-001
82
+
83
+ # Or headless:
84
+ flow sprint done E1-001 --note "Merged via auto-merge"
60
85
  ```
61
86
 
62
87
  ## End-of-sprint
63
88
 
64
89
  ```
65
- /flow-sprint retro
90
+ /flow-sprint retro E1
66
91
  ```
67
92
 
68
- Generates `docs/flow/retros/<date>.md` from your last sprint's stories: what shipped, what got deferred, review-finding rollup, verify failure rate.
93
+ Generates `docs/flow/retros/E1-retro.md` (one file per epic, not per date) from the epic's archived story files: shipped count, cycle time, deferred carry-forward, plus blank "What worked / What didn't / Carry into next epic" sections for you to edit.
69
94
 
70
95
  ## Health check
71
96
 
72
- ```
97
+ ```bash
98
+ # Inside Claude Code:
73
99
  /flow-doctor
100
+
101
+ # Headless:
102
+ flow doctor
103
+ flow doctor --json
104
+ flow doctor --verbose
105
+ ```
106
+
107
+ Verifies catalog / state / adapter files / MCP registration / required CLIs / upstream installations. Surfaces an ECC scope-collision section when both user-scope and project-scope ECC content exist.
108
+
109
+ To get repair commands for a specific upstream (BMad / ECC / Caveman pin drift):
110
+
111
+ ```bash
112
+ flow doctor --repair-upstream ecc # prints the reinstall command
113
+ flow doctor --repair-upstream bmad
114
+ flow doctor --repair-upstream caveman
74
115
  ```
75
116
 
76
- Verifies catalog / state / adapter files / MCP registration / required CLIs / upstream installations. Probes for known bugs (caveman-shrink mis-registered, severity-label stripping, loose marker matches). Add `--fix` for safe auto-repairs (prints the commands; doesn't auto-run anything destructive).
117
+ The `--repair-upstream` path prints commands but does NOT auto-run them upstream installs touch user-scope state, so the user runs them deliberately.
77
118
 
78
- ## Next
119
+ ## Where to go next
79
120
 
80
- - [profiles.md](profiles.md) choosing mini vs standard vs team
81
- - [adapters.md](adapters.md) — picking + swapping integrations
82
- - [migrate-from-bmad.md](migrate-from-bmad.md) — porting an existing BMad project
121
+ | Goal | Link |
122
+ |---|---|
123
+ | Comprehensive how-to (every flag, every scenario) | [usage.md](usage.md) |
124
+ | Choosing a profile (mini vs standard vs team) | [profiles.md](profiles.md) |
125
+ | Picking + swapping integrations | [adapters.md](adapters.md) |
126
+ | Porting an existing BMad project | [migrate-from-bmad.md](migrate-from-bmad.md) |
127
+ | Starting from zero with planning (PRD → architecture → stories) | [usage.md §2c](usage.md#2c-starting-from-zero-greenfield--bmad-planning) |
package/docs/usage.md CHANGED
@@ -26,6 +26,7 @@ This is the long-form reference. For the 10-minute first-install path, see [quic
26
26
  - [14. Environment variables](#14-environment-variables)
27
27
  - [15. Files Flow writes](#15-files-flow-writes)
28
28
  - [16. Troubleshooting](#16-troubleshooting)
29
+ - [17. How Caveman enhances Flow](#17-how-caveman-enhances-flow)
29
30
 
30
31
  ---
31
32
 
@@ -33,51 +34,73 @@ This is the long-form reference. For the 10-minute first-install path, see [quic
33
34
 
34
35
  Flow ships in two surfaces: a Claude Code skill bundle (interactive) and a Node CLI (`flow`, headless). Both invoke the same underlying installers and write the same files.
35
36
 
36
- **Bootstrap order matters.** Claude Code discovers slash commands by scanning `~/.claude/skills/<name>/`. The npm package puts skill files in the install location (typically `~/.npm-global/lib/node_modules/...`), NOT in `~/.claude/skills/`. So `/flow-init` does NOT work after a bare `npm install -g`. You need to run `flow install-skills` once to symlink the four skills into Claude Code's discovery path.
37
+ **Bootstrap order matters.** Claude Code discovers slash commands by scanning `~/.claude/skills/<name>/` (home scope) or `<project>/.claude/skills/<name>/` (project scope). The npm package puts skill files in the install location (typically `/opt/homebrew/lib/node_modules/...` on macOS Homebrew node, or `~/.npm-global/lib/node_modules/...` on other setups), NOT in any of Claude Code's discovery paths. You need to run `flow install-skills` once to symlink the four skills into a discovery path.
37
38
 
38
- ### a. From npm (recommended)
39
+ ### a. Recommended: `npm install -g` + `flow install-skills --scope project` (per project)
40
+
41
+ This is the right shape if you want **reliable slash commands** in one or more projects without polluting Claude Code's global skill set.
39
42
 
40
43
  ```bash
41
- # 1. Install the Node CLI
44
+ # 1. Once on your machine — installs the `flow` CLI + provides a stable symlink target
42
45
  npm install -g @mhd-ghaith-abtah/flow@beta
43
- flow --version
46
+ flow --version # → 0.8.0-beta.2 (or newer)
44
47
 
45
- # 2. Bootstrap Claude Code surface (links 4 skills into ~/.claude/skills/)
46
- flow install-skills
48
+ # 2. Per project symlink the four skills into the project's .claude/skills/
49
+ cd /path/to/project
50
+ flow install-skills --scope project --force
47
51
 
48
- # 3. Now both paths work — pick one per project:
49
- flow init --profile mini --yes # headless
50
- # OR, inside Claude Code:
51
- /flow-init # interactive
52
+ # 3. Pick your install path
53
+ flow init --profile mini --yes # headless
54
+ # OR, inside Claude Code opened in this project:
55
+ /flow-init # interactive
52
56
  ```
53
57
 
54
- `flow install-skills` is idempotent — re-run safely after every upgrade to refresh the symlinks. It refuses to clobber existing real directories at the target without `--force`.
58
+ Why this combination is the best default for slash commands:
55
59
 
56
- ### b. install-skills scope flag
60
+ - The symlinks point at `/opt/homebrew/lib/node_modules/@mhd-ghaith-abtah/flow/skills/...` a stable path that persists until you `npm uninstall`. **Never breaks** under normal use.
61
+ - Project-scope means `/flow-*` only resolves when Claude Code is opened inside the project. No skill pollution in unrelated projects.
62
+ - One `npm install -g` covers any number of projects — install-skills per project is the only per-project bootstrap step.
63
+ - Upgrading Flow (`npm install -g @mhd-ghaith-abtah/flow@beta` again later) automatically refreshes every project's symlinks. No re-bootstrap needed.
57
64
 
58
- By default `flow install-skills` writes to `~/.claude/skills/` (home scope). Override:
65
+ ### b. Variant: `npm install -g` + `flow install-skills` (user-wide)
66
+
67
+ If you'd rather have slash commands available **everywhere** on your machine instead of per-project:
59
68
 
60
69
  ```bash
61
- flow install-skills # default: --scope home
62
- flow install-skills --scope home # user-wide ~/.claude/skills/
63
- flow install-skills --scope project # team-commit: <cwd>/.claude/skills/
64
- flow install-skills --scope both # both
65
- flow install-skills --dry-run # preview
66
- flow install-skills --force # replace existing real dirs
70
+ npm install -g @mhd-ghaith-abtah/flow@beta
71
+ flow install-skills # default scope: home (~/.claude/skills/)
67
72
  ```
68
73
 
69
- The `--scope project` mode is for teams that want every contributor to get Flow's slash commands the moment they `git clone` the repo — commit `<project>/.claude/skills/flow-*` so Claude Code picks them up automatically when the session is opened inside the project. The user still needs the npm package installed because the symlinks point at it.
74
+ Now `/flow-init` resolves in every Claude Code session. Re-run `flow install-skills` after each `npm install -g` upgrade.
70
75
 
71
- ### c. `npx` no install
76
+ ### c. install-skills scope flag
72
77
 
73
78
  ```bash
74
- npx -y @mhd-ghaith-abtah/flow@beta install-skills # one-time bootstrap
79
+ flow install-skills # default: --scope home
80
+ flow install-skills --scope home # user-wide ~/.claude/skills/
81
+ flow install-skills --scope project # team-commit: <cwd>/.claude/skills/
82
+ flow install-skills --scope both # both
83
+ flow install-skills --dry-run # preview
84
+ flow install-skills --force # replace existing real dirs
85
+ ```
86
+
87
+ `--scope project` is the team-commit pattern. Commit `<project>/.claude/skills/flow-*` so any contributor cloning the repo gets the slash commands automatically once they `npm install -g @mhd-ghaith-abtah/flow@beta` on their own machine. The symlinks point at each contributor's local npm install location, so the path is per-machine; what's committed is the four symlink files themselves.
88
+
89
+ ### d. `npx` — no install, but with a caveat
90
+
91
+ ```bash
92
+ npx -y @mhd-ghaith-abtah/flow@beta install-skills --scope project --force
75
93
  npx -y @mhd-ghaith-abtah/flow@beta init --profile mini --yes
76
94
  ```
77
95
 
78
- `npx` works but the symlink targets the npx cache path, which can disappear when the cache rotates. For ongoing use, prefer `npm install -g`.
96
+ Works for an immediate session, BUT the symlinks point at the npx cache (`~/.npm/_npx/<hash>/node_modules/...`), which npm rotates over time. When the cache entry is purged, the symlinks become broken pointers and `/flow-init` stops resolving with no error. Two ways to handle this:
97
+
98
+ - **Re-run `npx ... install-skills --scope project --force` before each session that needs slash commands.** Refreshes the symlinks against whatever the current npx cache hash is. Easy to forget.
99
+ - **Or just use path (a) — single `npm install -g` + per-project `flow install-skills`.** Stable symlinks, slash commands always resolve.
79
100
 
80
- ### d. Development clone
101
+ `npx` is fine for one-shot use (`flow plan`, `flow doctor`, one-off `flow init`), but for ongoing slash-command access prefer the npm-install-g path.
102
+
103
+ ### e. Development clone (contributors)
81
104
 
82
105
  ```bash
83
106
  git clone https://github.com/mhd-ghaith-abtah/flow.git
@@ -86,8 +109,6 @@ cd flow && npm install && tools/dev-link.sh
86
109
 
87
110
  `tools/dev-link.sh` is the dev-mode equivalent of `flow install-skills --scope home` — symlinks the four `skills/flow-*` dirs into `~/.claude/skills/` AND puts `flow` on `$PATH` from your clone. Use when you're contributing so changes to skill workflows take effect immediately.
88
111
 
89
- `tools/dev-link.sh` symlinks your clone into `$HOME/.claude/skills/flow-*` and onto `$PATH` as `flow`. Use when you're contributing.
90
-
91
112
  ### e. Verifying the install
92
113
 
93
114
  ```bash
@@ -191,6 +212,89 @@ Plus, depending on profile:
191
212
  - MCPs registered with Claude Code via `claude mcp add`
192
213
  - Secrets in `~/.claude/.env.flow` (chmod 600) if any `api_token` MCP was selected
193
214
 
215
+ ### 2c. Starting from zero (greenfield + BMad planning)
216
+
217
+ If you have only an idea and no code yet, Flow uses BMad's planning workflow to get you from concept → PRD → architecture → stories → first execution, then takes over per-story orchestration.
218
+
219
+ **Setup:**
220
+
221
+ ```bash
222
+ mkdir my-idea && cd my-idea
223
+ git init && echo "# My idea" > README.md
224
+
225
+ npm install -g @mhd-ghaith-abtah/flow@beta
226
+ flow install-skills
227
+
228
+ # Pick a profile that ships BMad full. `standard` is enough for solo dev:
229
+ flow init --profile standard --yes --bmad-subset full
230
+ ```
231
+
232
+ `--bmad-subset full` installs BMad's `bmm` module (Project Manager, Architect, Product Owner, dev workflows) plus its planning-artifacts directory under `docs/_bmad-output/planning-artifacts/`.
233
+
234
+ **The planning loop (inside Claude Code):**
235
+
236
+ Once Flow finishes installing, BMad's slash commands become available. Exact names depend on your BMad version — BMad 6+ uses a `/bmad:bmm:<step>` namespace:
237
+
238
+ ```
239
+ /bmad:bmm:1-analysis # Optional — competitive research / scope scan
240
+ /bmad:bmm:2-plan-workflow # PRD (Project Manager agent)
241
+ /bmad:bmm:3-solutioning # Architecture + tech stack (Architect)
242
+ /bmad:bmm:4-implementation # Story decomposition (Scrum Master + PO)
243
+ ```
244
+
245
+ Each step writes to `docs/_bmad-output/planning-artifacts/`:
246
+ - `prd.md` — product requirements
247
+ - `architecture.md` — system design
248
+ - `epics.md` — high-level work breakdown
249
+ - `stories/E1-S1-*.md` etc. — individual story files
250
+
251
+ **Convert BMad's plan into Flow's sprint:**
252
+
253
+ After BMad produces stories, import them:
254
+
255
+ ```bash
256
+ flow sprint import-bmad
257
+ # OR inside Claude Code:
258
+ /flow-sprint import-bmad
259
+ ```
260
+
261
+ The migrator reads `docs/_bmad-output/implementation-artifacts/sprint-status.yaml`, maps BMad statuses → Flow statuses, and writes `docs/flow/sprint.yaml` with backup-first / rollback-on-failure semantics. BMad's content stays in place — Flow doesn't delete `_bmad/`. See [migrate-from-bmad.md](migrate-from-bmad.md) for the migration mechanics.
262
+
263
+ **Run the first story through Flow:**
264
+
265
+ ```
266
+ /flow-story E1-S1
267
+ ```
268
+
269
+ Flow takes BMad's story file, runs plan → implement → review → ship on it. BMad gave you the **why** (PRD/architecture); Flow drives the **how** (per-story execution, lighter ceremony, ~5× fewer tokens than BMad's own per-story workflow).
270
+
271
+ **The whole greenfield arc in one diagram:**
272
+
273
+ ```
274
+ Idea
275
+
276
+
277
+ flow init --profile standard --yes --bmad-subset full
278
+
279
+
280
+ /bmad:bmm:2-plan-workflow ── PRD
281
+
282
+
283
+ /bmad:bmm:3-solutioning ── architecture, tech stack
284
+
285
+
286
+ /bmad:bmm:4-implementation ── stories + sprint-status.yaml
287
+
288
+
289
+ flow sprint import-bmad ── stories now live in docs/flow/sprint.yaml
290
+
291
+
292
+ /flow-story E1-S1 ── per-story chain
293
+ /flow-story (no args) ── advance whatever's active
294
+ ```
295
+
296
+ You can also stay in BMad's per-story workflow if you prefer its ceremony. Flow's `/flow-story` is the lighter alternative — same outcome, fewer tokens, slightly less hand-holding.
297
+
194
298
  ---
195
299
 
196
300
  ## 3. Daily story workflow
@@ -863,15 +967,19 @@ Workaround: pass `--continue-on-error` to skip past upstream failures and inspec
863
967
 
864
968
  Both `~/.claude/rules/ecc/` and `<project>/.claude/rules/ecc/` exist. Cause: you changed `--ecc-scope` between installs without uninstalling first. The doctor probe reads `install-state.json` to identify the active scope and prints the exact `rm -rf` command for the stale one.
865
969
 
866
- ### d. Caveman MCP not active in this session
970
+ ### d. Caveman not active in this session
971
+
972
+ Caveman activates via `~/.claude/hooks/caveman-config.js` on `SessionStart`. Both the slash `/flow-init` and the headless `flow init --yes` (since v0.8.0-beta.2) drop a `.caveman-enable` marker file in your project root when you pick a non-`none` Caveman subset, so allowlist-mode users (`~/.config/caveman/config.json` = `{"defaultMode": "off"}`) get Caveman activated here automatically.
867
973
 
868
- Caveman activates via `~/.claude/hooks/caveman-config.js` on `SessionStart`. If you have `~/.config/caveman/config.json` set to `{"defaultMode": "off"}` (the recommended allowlist mode), drop a `.caveman-enable` marker in the project root:
974
+ If you're on an older Flow version OR you picked `--caveman-subset none` at install time and changed your mind:
869
975
 
870
976
  ```bash
871
977
  touch .caveman-enable
872
978
  ```
873
979
 
874
- Flow's `/flow-init` drops this automatically. Restart your Claude Code session for the hook to re-fire.
980
+ Then restart your Claude Code session for the hook to re-fire.
981
+
982
+ If the marker exists and Caveman still doesn't activate, run `flow doctor` and look at the Caveman row — `version=not pinned` plus an `installed=false` state record means the upstream installer never ran. Re-run `flow init --update` to fix.
875
983
 
876
984
  ### e. `flow sprint done E1-002` says "expects 'review' or 'doing'"
877
985
 
@@ -930,6 +1038,111 @@ This blows away Flow + Flow's project content + project-scope ECC. Does NOT remo
930
1038
 
931
1039
  ---
932
1040
 
1041
+ ## 17. How Caveman enhances Flow
1042
+
1043
+ [Caveman](https://github.com/JuliusBrussee/caveman) is an output-compression layer that runs at the Claude Code session level. It rewrites Claude's responses to use dense prose patterns while preserving full technical content. Code, error messages, commits, and security-relevant text stay normal. Filler — pleasantries, hedging, articles, restating the question — gets dropped.
1044
+
1045
+ Flow expects Caveman to be active. The token budgets advertised throughout these docs assume Caveman is on. Without it, the realistic numbers are roughly 3–4× higher.
1046
+
1047
+ ### a. The concrete numbers
1048
+
1049
+ - **~46% input token savings** — Caveman compresses your conversation history before sending it to Claude
1050
+ - **~75% output token savings** — Caveman post-processes Claude's responses on the way out
1051
+
1052
+ ### b. Why Flow needs it specifically
1053
+
1054
+ Flow's per-story phase chain runs many small phases (plan → implement → review → docs → commit → PR). Each phase reads context (story file, code diff, review notes) and generates output. Without compression:
1055
+
1056
+ - One `/flow-story` invocation pulls ~30–50k of context per phase
1057
+ - Chained across phases, a single story costs ~100k input + ~50k output ≈ **~150k tokens**
1058
+ - A 10-story sprint ≈ **~1.5M tokens**
1059
+
1060
+ With Caveman in `full` mode:
1061
+
1062
+ - Per-story cost drops to ~30k tokens
1063
+ - 10-story sprint ≈ **~300k tokens**
1064
+
1065
+ Flow's "token-light per-story workflow" tagline only works because Caveman compresses both directions.
1066
+
1067
+ ### c. What it looks like in practice
1068
+
1069
+ Without Caveman, a typical assistant response:
1070
+
1071
+ > Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by a race condition in the authentication middleware where the token expiry check uses a strict less-than comparison instead of less-than-or-equal-to.
1072
+
1073
+ With Caveman in `full` mode:
1074
+
1075
+ > Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:
1076
+
1077
+ Same technical content, ~75% fewer tokens. Code blocks render normally — Caveman doesn't touch them.
1078
+
1079
+ ### d. Modes Flow ships
1080
+
1081
+ | Mode | Compression | Use when |
1082
+ |---|---|---|
1083
+ | `none` | 0 | Disabled. Only if you have a specific reason. |
1084
+ | `lite` | ~20% | Most readable. Demo / pairing sessions. |
1085
+ | `full` | ~75% | **Default for every stock profile.** Recommended baseline. |
1086
+ | `ultra` | ~85% | Aggressive — occasionally harder to skim. |
1087
+ | `wenyan-*` | varies | Classical Chinese variants (experimental). |
1088
+
1089
+ The chosen mode lives in `flow.config.yaml > upstreams.caveman.subset` (the catalog uses the `caveman_subset` field name for the same setting). Override during install via the interactive Q7b prompt; override per-session via Caveman's own `/caveman <mode>` slash command (if installed).
1090
+
1091
+ ### e. Project-scope gating — the fork story
1092
+
1093
+ Caveman's default install activates it **globally** — every Claude Code session on your machine gets compressed output, including unrelated projects. Most users want Caveman only in Flow-managed projects.
1094
+
1095
+ Caveman's `.caveman-enable` / `.caveman-disable` marker files solve this, but the feature is in [JuliusBrussee/caveman#407](https://github.com/JuliusBrussee/caveman/pull/407) — filed 2026-05-19 and still waiting in an upstream queue with ~134 open PRs and ~5 merges/month, so months of wait.
1096
+
1097
+ Flow's catalog pins Caveman to a **temporary fork** ([mhd-ghaith-abtah/caveman @ `flow-pin-v0.1`](https://github.com/mhd-ghaith-abtah/caveman/tree/flow-pin-v0.1)) with the patches applied. The bootstrap order in Flow-managed projects:
1098
+
1099
+ 1. Flow installs Caveman from the fork (transparent — happens during `/flow-init` or `flow init --yes`).
1100
+ 2. Flow's `/flow-init` drops a `.caveman-enable` marker file in the project root.
1101
+ 3. If the user has set `~/.config/caveman/config.json` to `{"defaultMode": "off"}` (allowlist mode), Caveman stays silent everywhere EXCEPT projects with the marker.
1102
+
1103
+ You don't have to do anything — Flow's installer handles all of this. The marker file works identically against upstream Caveman and the fork, so when upstream #407 merges, the catalog swap is a no-op at the project level.
1104
+
1105
+ ### f. How to turn Caveman off in one project
1106
+
1107
+ ```bash
1108
+ touch .caveman-disable # in the project root
1109
+ ```
1110
+
1111
+ Restart your Claude Code session. Caveman ignores this project. Remove the file to re-enable.
1112
+
1113
+ ### g. How to opt OUT entirely on this machine
1114
+
1115
+ Caveman's CLI (`caveman` on your $PATH after install):
1116
+
1117
+ ```bash
1118
+ caveman off # global default off
1119
+ caveman on # global default on
1120
+ caveman <mode> # switch active mode
1121
+ ```
1122
+
1123
+ If you want zero Caveman exposure but still want Flow, install with `--caveman-subset none` (interactive Q7b → `none`) and Flow won't invoke the Caveman installer at all. Flow still works — your tokens-per-story figures go up ~3–4×.
1124
+
1125
+ ### h. Trade-offs Flow accepts
1126
+
1127
+ | Pro | Con |
1128
+ |---|---|
1129
+ | 3–5× lower token bill for the same outcome | Dense responses can be harder to skim for new users |
1130
+ | Phase-chain orchestration becomes affordable | Caveman has its own bug surface; `/flow-doctor` probes for known issues |
1131
+ | Caveman skill bundle is small (~kB-scale) | Adds another dependency the catalog tracks + Flow has to keep current |
1132
+ | The marker-file gating means Caveman doesn't leak into non-Flow projects | The fork pin is temporary — adds a swap-back step when upstream merges #407 |
1133
+
1134
+ ### i. Tracking the upstream merge
1135
+
1136
+ Flow's catalog comments mark Caveman as a temporary fork explicitly. To check upstream merge status yourself:
1137
+
1138
+ ```bash
1139
+ gh pr view 407 --repo JuliusBrussee/caveman --json state,mergedAt
1140
+ ```
1141
+
1142
+ When `state` flips to `MERGED`, Flow's next release will swap `catalog.yaml > upstreams.caveman.installer.cmd` back to the upstream npx command and remove the SWAP PLAN comment block.
1143
+
1144
+ ---
1145
+
933
1146
  ## See also
934
1147
 
935
1148
  - [Quickstart](quickstart.md) — 10-minute first-install path
@@ -131,9 +131,17 @@ function probeJson(path, scope) {
131
131
  }
132
132
 
133
133
  function probeConfig(ctx) {
134
- const path = join(ctx.cwd, 'flow.config.yaml');
134
+ // Canonical path is .claude/flow.config.yaml (where scaffold writes).
135
+ // Legacy root-level flow.config.yaml is checked as a fallback for installs
136
+ // done before the .claude/ convention. First-match-wins.
137
+ const canonicalPath = join(ctx.cwd, '.claude', 'flow.config.yaml');
138
+ const legacyPath = join(ctx.cwd, 'flow.config.yaml');
139
+ const path = existsSync(canonicalPath) ? canonicalPath : legacyPath;
135
140
  const r = { path, status: '✗', error: null, parsed: null };
136
141
  if (!existsSync(path)) {
142
+ // Surface the canonical path in the "not present" hint so users know
143
+ // where to look (or where the install would write to next time).
144
+ r.path = canonicalPath;
137
145
  r.status = 'ℹ';
138
146
  r.error = 'not present (run /flow-init)';
139
147
  return r;
@@ -26,7 +26,9 @@ const HOME_PATHS = [
26
26
 
27
27
  const PROJECT_PATHS = [
28
28
  '.claude/flow',
29
- 'flow.config.yaml',
29
+ '.claude/flow.config.yaml', // canonical (where scaffold writes)
30
+ '.claude/flow.config.local.yaml',
31
+ 'flow.config.yaml', // legacy root-level (for backward compat)
30
32
  'flow.config.local.yaml'
31
33
  ];
32
34
 
@@ -24,6 +24,8 @@
24
24
  // files. Integration tests use --dry-run to exercise the full path
25
25
  // without polluting the developer's MCP config / installed upstreams.
26
26
 
27
+ import { existsSync, writeFileSync } from 'node:fs';
28
+ import { join } from 'node:path';
27
29
  import { resolveProfile } from '../catalog.js';
28
30
  import { detect } from './detect.js';
29
31
  import { askAll } from './questions.js';
@@ -114,6 +116,24 @@ export async function runInit(opts) {
114
116
  return halt('caveman upstream failed', { detection, state, upstreamResults });
115
117
  }
116
118
 
119
+ // 4b. Drop the .caveman-enable marker in the project root.
120
+ // Matches what skills/flow-init/workflow.md does on the slash path: when
121
+ // Caveman is requested for this project (subset !== 'none'), put a
122
+ // zero-byte marker so Caveman activates here even when the user has
123
+ // ~/.config/caveman/config.json set to {"defaultMode": "off"} (allowlist
124
+ // mode). Idempotent — if the marker already exists, leave it alone.
125
+ // Headless parity with the slash path; closes the gap where docs claimed
126
+ // the marker landed automatically but only the slash workflow did it.
127
+ const cavemanRequested = (state.answers.cavemanSubset || profile.caveman_subset) !== 'none';
128
+ if (cavemanRequested && !opts.dryRun) {
129
+ const markerPath = join(cwd, '.caveman-enable');
130
+ if (!existsSync(markerPath)) {
131
+ try { writeFileSync(markerPath, ''); } catch {
132
+ // Non-fatal — the install still works; user can `touch .caveman-enable` manually.
133
+ }
134
+ }
135
+ }
136
+
117
137
  // 5. MCP registration. Resolved from profile.mcps; idempotent per mcp.js.
118
138
  const mcpIds = Array.isArray(profile.mcps) ? profile.mcps : [];
119
139
  const mcpDefs = mcpModule.resolveMcps(catalog, mcpIds);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhd-ghaith-abtah/flow",
3
- "version": "0.8.0-beta.1",
3
+ "version": "0.8.0-beta.3",
4
4
  "description": "Token-light per-story workflow for Claude Code. Delegates to BMad + ECC.",
5
5
  "license": "MIT",
6
6
  "type": "module",