@mhd-ghaith-abtah/flow 0.8.0-beta.2 → 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,15 @@ 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
+
9
18
  ## [0.8.0-beta.2] — 2026-05-23
10
19
 
11
20
  ### Fixed
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`)
@@ -11,20 +11,28 @@ A 10-minute path from zero to first shipped story.
11
11
  ## Install
12
12
 
13
13
  ```bash
14
- # 1. Install the Node CLI
14
+ # 1. Install the Node CLI (once per machine)
15
15
  npm install -g @mhd-ghaith-abtah/flow@beta
16
- flow --version # → 0.8.0-beta.1 (or newer)
16
+ flow --version # → 0.8.0-beta.2 (or newer)
17
17
 
18
- # 2. Bootstrap Claude Code's slash command discovery
19
- flow install-skills # symlinks 4 skills into ~/.claude/skills/
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
20
21
 
21
- # 3. Pick a path per project:
22
+ # 3. Pick a path:
22
23
  flow init --profile mini --yes # headless (no Claude Code needed)
23
- # OR, inside Claude Code:
24
+ # OR, inside Claude Code opened in this project:
24
25
  /flow-init # interactive Q&A
25
26
  ```
26
27
 
27
- `flow install-skills` is the bridge — npm puts Flow in `~/.npm-global/lib/node_modules/...` but Claude Code only scans `~/.claude/skills/<name>/`. Without that step, `/flow-init` won't resolve. Re-run after every Flow upgrade to refresh the symlinks (idempotent).
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.
28
36
 
29
37
  ## What the installer does
30
38
 
package/docs/usage.md CHANGED
@@ -34,51 +34,73 @@ This is the long-form reference. For the 10-minute first-install path, see [quic
34
34
 
35
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.
36
36
 
37
- **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.
38
38
 
39
- ### 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.
40
42
 
41
43
  ```bash
42
- # 1. Install the Node CLI
44
+ # 1. Once on your machine — installs the `flow` CLI + provides a stable symlink target
43
45
  npm install -g @mhd-ghaith-abtah/flow@beta
44
- flow --version
46
+ flow --version # → 0.8.0-beta.2 (or newer)
45
47
 
46
- # 2. Bootstrap Claude Code surface (links 4 skills into ~/.claude/skills/)
47
- 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
48
51
 
49
- # 3. Now both paths work — pick one per project:
50
- flow init --profile mini --yes # headless
51
- # OR, inside Claude Code:
52
- /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
53
56
  ```
54
57
 
55
- `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:
59
+
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.
64
+
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:
68
+
69
+ ```bash
70
+ npm install -g @mhd-ghaith-abtah/flow@beta
71
+ flow install-skills # default scope: home (~/.claude/skills/)
72
+ ```
56
73
 
57
- ### b. install-skills scope flag
74
+ Now `/flow-init` resolves in every Claude Code session. Re-run `flow install-skills` after each `npm install -g` upgrade.
58
75
 
59
- By default `flow install-skills` writes to `~/.claude/skills/` (home scope). Override:
76
+ ### c. install-skills scope flag
60
77
 
61
78
  ```bash
62
- flow install-skills # default: --scope home
63
- flow install-skills --scope home # user-wide ~/.claude/skills/
64
- flow install-skills --scope project # team-commit: <cwd>/.claude/skills/
65
- flow install-skills --scope both # both
66
- flow install-skills --dry-run # preview
67
- flow install-skills --force # replace existing real dirs
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
68
85
  ```
69
86
 
70
- 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.
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.
71
88
 
72
- ### c. `npx` — no install
89
+ ### d. `npx` — no install, but with a caveat
73
90
 
74
91
  ```bash
75
- npx -y @mhd-ghaith-abtah/flow@beta install-skills # one-time bootstrap
92
+ npx -y @mhd-ghaith-abtah/flow@beta install-skills --scope project --force
76
93
  npx -y @mhd-ghaith-abtah/flow@beta init --profile mini --yes
77
94
  ```
78
95
 
79
- `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:
80
97
 
81
- ### d. Development clone
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.
100
+
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)
82
104
 
83
105
  ```bash
84
106
  git clone https://github.com/mhd-ghaith-abtah/flow.git
@@ -87,8 +109,6 @@ cd flow && npm install && tools/dev-link.sh
87
109
 
88
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.
89
111
 
90
- `tools/dev-link.sh` symlinks your clone into `$HOME/.claude/skills/flow-*` and onto `$PATH` as `flow`. Use when you're contributing.
91
-
92
112
  ### e. Verifying the install
93
113
 
94
114
  ```bash
@@ -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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mhd-ghaith-abtah/flow",
3
- "version": "0.8.0-beta.2",
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",