@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 +17 -0
- package/README.md +22 -13
- package/docs/migrate-from-bmad.md +7 -6
- package/docs/profiles.md +3 -1
- package/docs/quickstart.md +68 -23
- package/docs/usage.md +242 -29
- package/lib/commands/doctor.js +9 -1
- package/lib/commands/uninstall.js +3 -1
- package/lib/init/orchestrate.js +20 -0
- package/package.json +1 -1
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.
|
|
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
|
|
26
|
+
# 1. Install the Node CLI (once per machine)
|
|
27
27
|
npm install -g @mhd-ghaith-abtah/flow@beta
|
|
28
|
-
flow
|
|
28
|
+
flow --version # → 0.8.0-beta.2
|
|
29
29
|
|
|
30
|
-
# 2.
|
|
31
|
-
/
|
|
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
|
-
#
|
|
34
|
-
flow init --profile standard --yes #
|
|
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
|
|
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
|
-
│
|
|
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
|
-
|
|
|
115
|
-
|
|
|
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
|
|
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-
|
|
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
|
|
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
|
|
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
|
-
|
|
75
|
-
|
|
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
|
|
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`
|
package/docs/quickstart.md
CHANGED
|
@@ -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+
|
|
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
|
-
|
|
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
|
-
|
|
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 ~
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
##
|
|
119
|
+
## Where to go next
|
|
79
120
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- [
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
46
|
-
|
|
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.
|
|
49
|
-
flow init --profile mini --yes
|
|
50
|
-
# OR, inside Claude Code:
|
|
51
|
-
/flow-init
|
|
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
|
-
|
|
58
|
+
Why this combination is the best default for slash commands:
|
|
55
59
|
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
62
|
-
flow install-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
|
-
|
|
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.
|
|
76
|
+
### c. install-skills scope flag
|
|
72
77
|
|
|
73
78
|
```bash
|
|
74
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/lib/commands/doctor.js
CHANGED
|
@@ -131,9 +131,17 @@ function probeJson(path, scope) {
|
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
function probeConfig(ctx) {
|
|
134
|
-
|
|
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/lib/init/orchestrate.js
CHANGED
|
@@ -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);
|