Setup And Bootstrap
$fw:setup is the environment and workflow bootstrap pass for Flywheel.
After Flywheel is installed, this should usually be the first command run in a
new repository.
It is also Flywheel's update and recovery path: if a later stage discovers a
missing CLI, service, local config, or proof surface, route back here with the
relevant focus instead of improvising setup inside that other stage.
Use it to answer:
- What does this repo actually require to work on it?
- Which commands, CLIs, and local surfaces are missing or misconfigured?
- What is the smallest safe bootstrap that gets the user moving?
- Should Flywheel bootstrap durable local config such as
.flywheel/config.local.yaml for this repo?
- If a later Flywheel stage is blocked after an update, what setup step should
restore the missing surface cleanly?
This skill is repo-grounded. It should not guess a toolchain from memory when
the repository, its instructions, or its scripts can prove the answer.
When the repo has observability or optimization surfaces, setup should also
clarify which measurement backends and environments, if any, are available to
future Flywheel runs.
Setup should also clarify the host security posture Flywheel should assume:
- whether the repo is sensitive enough to prefer sandboxing or a devcontainer
- whether only trusted MCP servers should be used
- whether later stages should stay in a permissioned posture rather than
encouraging broad autonomy
Interaction Method
Follow ../references/host-interaction-contract.md.
Call the exact host question tool named in
../references/host-interaction-contract.md when that tool is available. Do
not ask for raw 1/2/3 replies when the host already offers a choice surface.
When the workflow spans multiple material steps, use the host task-tracking
tool named in ../references/host-interaction-contract.md to create and
maintain a short task list.
Ask one question at a time. When multiple setup postures are viable, present a
short predicted choice list with the recommended label first and rely on the
host's native freeform final path when it exists.
Focus Hint
#$ARGUMENTS
Interpret a provided argument as optional emphasis:
project or blank -> full repo setup pass
security -> host security posture, trusted MCP inventory, and isolation readiness
worktrees -> isolate branch and worktree readiness
browser -> browser-proof and acceptance-test readiness
review -> GitHub CLI, diff, and review-surface readiness
commit -> commit, push, PR, and branch-safety readiness
doctor -> repo-owned health checks, recovery wrappers, and Flywheel-local readiness
evals -> local harness and comparison-tool readiness
optimize -> telemetry access, measurement paths, and optimization readiness
Reference Loading Map
Do not load support files until needed:
- Read
references/setup-ledger-template.md only when the user wants a durable
local setup note under .context/flywheel/.
- Read
references/config-template.yaml only when the user wants Flywheel's
structured local config bootstrapped under .flywheel/.
Core Principles
- Repo truth over generic assumptions - read the repo's instructions,
manifests, scripts, and workflows before naming required tools.
- Differentiate required from optional - do not block on tools the current
workflow does not actually need.
- Prefer proof surfaces - tests, lint, worktree commands, PR tooling, and
eval scripts should come from files the repo already owns.
- Keep secrets local - bootstrap local config and env handling without
nudging users toward committing secrets.
- Prefer durable local config over repeated rediscovery - when a browser,
optimization, or workflow preference will matter again, record it in
.flywheel/config.local.yaml rather than relying on chat memory.
- Present fixes in tiers - fastest path first, then fuller setup if the
user wants it.
- Setup recovery belongs here - if another Flywheel stage discovers a
missing requirement, send the user back to
$fw:setup <focus> instead of
teaching every downstream stage to bootstrap itself differently.
- Trust external surfaces deliberately - only recommend trusted MCP
servers, trusted telemetry paths, and explicit browser evidence capture.
Do not normalize untrusted integrations.
- Prefer repo-native or pinned installs - prefer the repo's own install
path first; when that does not exist, prefer pinned versions or explicit
user choice over floating global installs.
Workflow
Phase 1: Touch Grass
Build a setup ledger from the current repo:
- read repo-root
AGENTS.md when present
- read
CLAUDE.md only when present or still used as compatibility context
- inspect top-level manifests and automation files such as
package.json,
go.mod, pyproject.toml, Cargo.toml, Gemfile, Makefile, justfile,
docker-compose.yml, .github/workflows/*, or repo-local scripts
- inspect
tools/evals/, scripts/, and Flywheel support directories when
they exist
- confirm whether the repo uses GitHub PR workflows, worktrees, env files,
browser tests, local services, or build containers
- inspect
.mcp.json, .claude/settings.json, .claude/settings.local.json,
.devcontainer/, devcontainer.json, or similar local host-security config
when present
- inspect whether
.flywheel/config.local.yaml or
.flywheel/config.local.example.yaml already exist
- inspect whether repo-owned doctor or recovery surfaces exist under
scripts/,
tools/, or nearby docs
From that pass, determine:
- core validation commands
- core developer CLIs
- optional but high-leverage CLIs
- local config or env files that must stay ignored
- whether browser-proof work is likely in this repo and whether the project
already uses Playwright or other browser automation
- whether local workflow policy already exists for browser proof, reproducer
requirements, review-before-commit, or runtime validation
- whether the repo already expects isolated worktrees
- whether the repo appears Datadog-first, OTel-native-first, or local-only for
runtime telemetry
- whether the repo appears security-sensitive enough to prefer a sandbox,
devcontainer, or stricter approval posture
- whether MCP servers are already configured and, if so, which ones appear
trusted vs unclear
Phase 2: Detect Required And Optional Surfaces
Classify setup needs into these buckets:
- Required now - missing blocks the requested work
- Recommended - not strictly required, but strongly improves flow
- Optional - useful later, not needed for today's job
Typical surfaces to check, but only when repo evidence supports them:
git
gh
jq
node, npm, pnpm, yarn, or bun
python, pip, uv, or poetry
ruby, bundle
go
cargo
java, javac, mvn, gradle, or ./gradlew
zig
docker / docker compose
make or just
playwright-cli, local npx playwright-cli, or repo-native Playwright test surfaces
psql, redis-cli, or kcat only when repo evidence suggests those local
debugging surfaces matter
- worktree support through
$fw:worktree
Also check workflow-specific readiness:
- planning/work - tests, lint, typecheck, dev boot
- browser - acceptance-test proof via
playwright-cli
- review - GitHub auth, clean diff scope, base-branch resolution surfaces
- commit - commit, push, PR, and branch safety
- worktrees -
.worktrees/ ignore coverage and env-file strategy
- doctor / recovery - repo-owned health checks, plugin or tool recovery
wrappers, and troubleshooting docs when present
- evals -
tools/evals/ install and doctor commands when present
- optimize - measurement path readiness: Datadog MCP, OTel-native
backends, local observability stack, or local-only
- security - host permission posture, sandbox or devcontainer readiness,
trusted MCP inventory, and whether the repo should stay in a stricter mode
Phase 3: Diagnose
Run the smallest factual checks that answer the setup question:
command -v for required CLIs
--version when the tool exists and version matters
gh auth status only when GitHub workflows are relevant
git check-ignore .worktrees when worktree-local isolation is expected
- repo-local setup commands only when they are safe and clearly read-oriented
command -v playwright-cli or npx --no-install playwright-cli --version
when browser proof or acceptance checks are likely to matter
- inspect existing host-security config files rather than inventing one from
memory
- run repo-owned doctor or recovery wrappers when present and when they are
read-oriented or clearly diagnostic
- when the repo looks security-sensitive, determine whether a sandbox,
devcontainer, or stricter approval posture should be the default recommendation
Do not run installs speculatively.
Do not recommend bypass-style autonomy or untrusted MCP additions by default.
If observability surfaces are present, also determine which usable read surfaces
exist for future optimization work:
- Datadog MCP or another approved Datadog read path
- Grafana / Prometheus / Loki / Tempo / Pyroscope or equivalent OTel-native
access
- local observability stack for relative improvement work
- local-only for now
Also determine browser-proof readiness when the repo has a web surface:
- whether
playwright-cli is globally available
- whether local
npx playwright-cli is available
- whether the repo already owns
@playwright/cli or another browser-proof
install path
- whether the repo already includes Playwright tests or config
- whether a likely dev-server command and target URL can be proven from repo
truth
If browser-proof work is relevant and neither playwright-cli nor the local
npx --no-install playwright-cli path is available, say so plainly:
Browser proof is currently blocked: `playwright-cli` was not found.
Treat that as a concrete setup gap, not a vague recommendation.
Phase 4: Choose A Bootstrap Posture
When fixes are needed, call the host question tool with a short choice surface:
- Minimum viable bootstrap (recommended) - only unblock the immediate
workflow
- Workflow-ready bootstrap - immediate workflow plus review, commit, and
worktree readiness
- Full local environment - everything the repo appears to support,
including eval and optional tooling
- Freeform path when the repo needs a different bootstrap posture
For each missing item, give:
- why the repo appears to need it
- whether it is required now or merely recommended
- the safest install or bootstrap command you can prove from repo or standard
tooling
If the user wants you to make changes, do so conservatively:
- create ignored local directories only when needed
- prefer
.flywheel/config.local.yaml for durable machine-local workflow
settings
- use
$fw:worktree for worktree bootstrap rather than ad hoc git commands
- keep secret-bearing files local and ignored
When Flywheel will be used repeatedly in this repo, offer to bootstrap
structured local config:
.flywheel/config.local.example.yaml from references/config-template.yaml
when the repo would benefit from a visible example for future users
.flywheel/config.local.yaml from the same template for machine-local
preferences
.gitignore coverage for .flywheel/*.local.yaml when missing
Typical config values worth persisting:
- browser proof preference (
playwright-cli)
- browser install strategy and optional pinned CLI version
- preferred browser mode (
headed or headless)
- browser evidence level and whether sensitive evidence should ever be allowed
- reusable dev command or base URL when the repo has a stable local surface
- preferred optimization backend and environment
- whether bug fixes must prove a reproducer before implementation
- whether review is required before commit
- whether runtime changes must carry explicit operational validation
- whether commit should require browser proof for browser-visible changes
- worktree env-copy posture
- security posture, trusted MCP servers, and sandbox or devcontainer preference
When browser-proof work is likely for this repo, offer setup for
playwright-cli in this order:
- Repo-native - if the repo already owns
@playwright/cli, a package
script, or another proven install path, use that first
- Existing local path - if
npx --no-install playwright-cli --version
works, keep using that path
- Pinned global fallback - only when the repo has no better path and the
user accepts a host-global install
If a pinned global fallback is chosen, prefer:
npm install -g @playwright/cli@<pinned-version>
playwright-cli install --skills
If no pinned version is available and the repo has no local path, call the host
question tool with a short choice surface instead of silently defaulting to
@latest.
When the user wants you to fix the browser gap now, $fw:setup browser should
offer to run the chosen install path directly instead of merely documenting it.
When optimization is likely to matter for this repo, ask whether the user wants
to persist a local setup ledger under .context/flywheel/setup-ledger.md.
If yes, use references/setup-ledger-template.md and record:
- the repo's likely telemetry source of truth
- whether Datadog MCP is available
- whether OTel-native access is available
- which environments are observable: local, shared non-production, production,
or unknown
- which OTel-native services are actually available
- the preferred optimization path for this repo
When security focus is relevant, ask whether the user wants to persist a
security posture section in the setup ledger. If yes, record:
- whether the repo should default to a permissioned posture
- whether sandboxing or a devcontainer is recommended
- whether MCP config exists and which servers appear trusted
- whether untrusted MCP additions should be avoided entirely
Phase 5: Report
Return a setup brief with:
- Repo setup summary
- Required now
- Recommended next
- Commands or fixes applied
- Remaining gaps
- Config status -
.flywheel/ local config or example readiness
- Browser proof readiness -
playwright-cli, repo Playwright surfaces, and
likely local URL or dev command
- Suggested optimization path - Datadog, OTel-native, hybrid, local stack,
or local-only
- Workflow policy - configured or recommended local gates for reproducer,
review, browser proof, and runtime validation
- Doctor / recovery readiness - repo-owned health-check or recovery
surfaces and when to use them
- Security posture - permission posture, sandbox or devcontainer
recommendation, and trusted MCP status
- Suggested next Flywheel stage
If browser proof is blocked because playwright-cli is missing, say that
explicitly in both Required now and Browser proof readiness, and include
the next runnable setup command.
If the repo is already ready, say so clearly and name the next usable workflow
surface, such as $fw:plan, $fw:work, $fw:review, or $fw:commit.
1---2name: setup3description: Diagnose and bootstrap repo-local setup. Use for onboarding, workflow readiness, host posture, or missing tool checks.4---56# Setup And Bootstrap78`$fw:setup` is the environment and workflow bootstrap pass for Flywheel.910After Flywheel is installed, this should usually be the first command run in a11new repository.1213It is also Flywheel's update and recovery path: if a later stage discovers a14missing CLI, service, local config, or proof surface, route back here with the15relevant focus instead of improvising setup inside that other stage.1617Use it to answer:18191. What does this repo actually require to work on it?202. Which commands, CLIs, and local surfaces are missing or misconfigured?213. What is the smallest safe bootstrap that gets the user moving?224. Should Flywheel bootstrap durable local config such as23 `.flywheel/config.local.yaml` for this repo?245. If a later Flywheel stage is blocked after an update, what setup step should25 restore the missing surface cleanly?2627This skill is repo-grounded. It should not guess a toolchain from memory when28the repository, its instructions, or its scripts can prove the answer.2930When the repo has observability or optimization surfaces, setup should also31clarify which measurement backends and environments, if any, are available to32future Flywheel runs.3334Setup should also clarify the host security posture Flywheel should assume:3536- whether the repo is sensitive enough to prefer sandboxing or a devcontainer37- whether only trusted MCP servers should be used38- whether later stages should stay in a permissioned posture rather than39 encouraging broad autonomy4041## Interaction Method4243Follow `../references/host-interaction-contract.md`.4445Call the exact host question tool named in46`../references/host-interaction-contract.md` when that tool is available. Do47not ask for raw `1/2/3` replies when the host already offers a choice surface.4849When the workflow spans multiple material steps, use the host task-tracking50tool named in `../references/host-interaction-contract.md` to create and51maintain a short task list.5253Ask one question at a time. When multiple setup postures are viable, present a54short predicted choice list with the recommended label first and rely on the55host's native freeform final path when it exists.5657## Focus Hint5859<setup_focus> #$ARGUMENTS </setup_focus>6061Interpret a provided argument as optional emphasis:6263- `project` or blank -> full repo setup pass64- `security` -> host security posture, trusted MCP inventory, and isolation readiness65- `worktrees` -> isolate branch and worktree readiness66- `browser` -> browser-proof and acceptance-test readiness67- `review` -> GitHub CLI, diff, and review-surface readiness68- `commit` -> commit, push, PR, and branch-safety readiness69- `doctor` -> repo-owned health checks, recovery wrappers, and Flywheel-local readiness70- `evals` -> local harness and comparison-tool readiness71- `optimize` -> telemetry access, measurement paths, and optimization readiness7273## Reference Loading Map7475Do not load support files until needed:7677- Read `references/setup-ledger-template.md` only when the user wants a durable78 local setup note under `.context/flywheel/`.79- Read `references/config-template.yaml` only when the user wants Flywheel's80 structured local config bootstrapped under `.flywheel/`.8182## Core Principles83841. **Repo truth over generic assumptions** - read the repo's instructions,85 manifests, scripts, and workflows before naming required tools.862. **Differentiate required from optional** - do not block on tools the current87 workflow does not actually need.883. **Prefer proof surfaces** - tests, lint, worktree commands, PR tooling, and89 eval scripts should come from files the repo already owns.904. **Keep secrets local** - bootstrap local config and env handling without91 nudging users toward committing secrets.925. **Prefer durable local config over repeated rediscovery** - when a browser,93 optimization, or workflow preference will matter again, record it in94 `.flywheel/config.local.yaml` rather than relying on chat memory.956. **Present fixes in tiers** - fastest path first, then fuller setup if the96 user wants it.977. **Setup recovery belongs here** - if another Flywheel stage discovers a98 missing requirement, send the user back to `$fw:setup <focus>` instead of99 teaching every downstream stage to bootstrap itself differently.1008. **Trust external surfaces deliberately** - only recommend trusted MCP101 servers, trusted telemetry paths, and explicit browser evidence capture.102 Do not normalize untrusted integrations.1039. **Prefer repo-native or pinned installs** - prefer the repo's own install104 path first; when that does not exist, prefer pinned versions or explicit105 user choice over floating global installs.106107## Workflow108109### Phase 1: Touch Grass110111Build a setup ledger from the current repo:112113- read repo-root `AGENTS.md` when present114- read `CLAUDE.md` only when present or still used as compatibility context115- inspect top-level manifests and automation files such as `package.json`,116 `go.mod`, `pyproject.toml`, `Cargo.toml`, `Gemfile`, `Makefile`, `justfile`,117 `docker-compose.yml`, `.github/workflows/*`, or repo-local scripts118- inspect `tools/evals/`, `scripts/`, and Flywheel support directories when119 they exist120- confirm whether the repo uses GitHub PR workflows, worktrees, env files,121 browser tests, local services, or build containers122- inspect `.mcp.json`, `.claude/settings.json`, `.claude/settings.local.json`,123 `.devcontainer/`, `devcontainer.json`, or similar local host-security config124 when present125- inspect whether `.flywheel/config.local.yaml` or126 `.flywheel/config.local.example.yaml` already exist127- inspect whether repo-owned doctor or recovery surfaces exist under `scripts/`,128 `tools/`, or nearby docs129130From that pass, determine:131132- core validation commands133- core developer CLIs134- optional but high-leverage CLIs135- local config or env files that must stay ignored136- whether browser-proof work is likely in this repo and whether the project137 already uses Playwright or other browser automation138- whether local workflow policy already exists for browser proof, reproducer139 requirements, review-before-commit, or runtime validation140- whether the repo already expects isolated worktrees141- whether the repo appears Datadog-first, OTel-native-first, or local-only for142 runtime telemetry143- whether the repo appears security-sensitive enough to prefer a sandbox,144 devcontainer, or stricter approval posture145- whether MCP servers are already configured and, if so, which ones appear146 trusted vs unclear147148### Phase 2: Detect Required And Optional Surfaces149150Classify setup needs into these buckets:151152- **Required now** - missing blocks the requested work153- **Recommended** - not strictly required, but strongly improves flow154- **Optional** - useful later, not needed for today's job155156Typical surfaces to check, but only when repo evidence supports them:157158- `git`159- `gh`160- `jq`161- `node`, `npm`, `pnpm`, `yarn`, or `bun`162- `python`, `pip`, `uv`, or `poetry`163- `ruby`, `bundle`164- `go`165- `cargo`166- `java`, `javac`, `mvn`, `gradle`, or `./gradlew`167- `zig`168- `docker` / `docker compose`169- `make` or `just`170- `playwright-cli`, local `npx playwright-cli`, or repo-native Playwright test surfaces171- `psql`, `redis-cli`, or `kcat` only when repo evidence suggests those local172 debugging surfaces matter173- worktree support through `$fw:worktree`174175Also check workflow-specific readiness:176177- **planning/work** - tests, lint, typecheck, dev boot178- **browser** - acceptance-test proof via `playwright-cli`179- **review** - GitHub auth, clean diff scope, base-branch resolution surfaces180- **commit** - commit, push, PR, and branch safety181- **worktrees** - `.worktrees/` ignore coverage and env-file strategy182- **doctor / recovery** - repo-owned health checks, plugin or tool recovery183 wrappers, and troubleshooting docs when present184- **evals** - `tools/evals/` install and doctor commands when present185- **optimize** - measurement path readiness: Datadog MCP, OTel-native186 backends, local observability stack, or local-only187- **security** - host permission posture, sandbox or devcontainer readiness,188 trusted MCP inventory, and whether the repo should stay in a stricter mode189190### Phase 3: Diagnose191192Run the smallest factual checks that answer the setup question:193194- `command -v` for required CLIs195- `--version` when the tool exists and version matters196- `gh auth status` only when GitHub workflows are relevant197- `git check-ignore .worktrees` when worktree-local isolation is expected198- repo-local setup commands only when they are safe and clearly read-oriented199- `command -v playwright-cli` or `npx --no-install playwright-cli --version`200 when browser proof or acceptance checks are likely to matter201- inspect existing host-security config files rather than inventing one from202 memory203- run repo-owned doctor or recovery wrappers when present and when they are204 read-oriented or clearly diagnostic205- when the repo looks security-sensitive, determine whether a sandbox,206 devcontainer, or stricter approval posture should be the default recommendation207208Do not run installs speculatively.209Do not recommend bypass-style autonomy or untrusted MCP additions by default.210211If observability surfaces are present, also determine which usable read surfaces212exist for future optimization work:213214- Datadog MCP or another approved Datadog read path215- Grafana / Prometheus / Loki / Tempo / Pyroscope or equivalent OTel-native216 access217- local observability stack for relative improvement work218- local-only for now219220Also determine browser-proof readiness when the repo has a web surface:221222- whether `playwright-cli` is globally available223- whether local `npx playwright-cli` is available224- whether the repo already owns `@playwright/cli` or another browser-proof225 install path226- whether the repo already includes Playwright tests or config227- whether a likely dev-server command and target URL can be proven from repo228 truth229230If browser-proof work is relevant and neither `playwright-cli` nor the local231`npx --no-install playwright-cli` path is available, say so plainly:232233```text234Browser proof is currently blocked: `playwright-cli` was not found.235```236237Treat that as a concrete setup gap, not a vague recommendation.238239### Phase 4: Choose A Bootstrap Posture240241When fixes are needed, call the host question tool with a short choice surface:242243- **Minimum viable bootstrap** (recommended) - only unblock the immediate244 workflow245- **Workflow-ready bootstrap** - immediate workflow plus review, commit, and246 worktree readiness247- **Full local environment** - everything the repo appears to support,248 including eval and optional tooling249- Freeform path when the repo needs a different bootstrap posture250251For each missing item, give:252253- why the repo appears to need it254- whether it is required now or merely recommended255- the safest install or bootstrap command you can prove from repo or standard256 tooling257258If the user wants you to make changes, do so conservatively:259260- create ignored local directories only when needed261- prefer `.flywheel/config.local.yaml` for durable machine-local workflow262 settings263- use `$fw:worktree` for worktree bootstrap rather than ad hoc git commands264- keep secret-bearing files local and ignored265266When Flywheel will be used repeatedly in this repo, offer to bootstrap267structured local config:268269- `.flywheel/config.local.example.yaml` from `references/config-template.yaml`270 when the repo would benefit from a visible example for future users271- `.flywheel/config.local.yaml` from the same template for machine-local272 preferences273- `.gitignore` coverage for `.flywheel/*.local.yaml` when missing274275Typical config values worth persisting:276277- browser proof preference (`playwright-cli`)278- browser install strategy and optional pinned CLI version279- preferred browser mode (`headed` or `headless`)280- browser evidence level and whether sensitive evidence should ever be allowed281- reusable dev command or base URL when the repo has a stable local surface282- preferred optimization backend and environment283- whether bug fixes must prove a reproducer before implementation284- whether review is required before commit285- whether runtime changes must carry explicit operational validation286- whether commit should require browser proof for browser-visible changes287- worktree env-copy posture288- security posture, trusted MCP servers, and sandbox or devcontainer preference289290When browser-proof work is likely for this repo, offer setup for291`playwright-cli` in this order:2922931. **Repo-native** - if the repo already owns `@playwright/cli`, a package294 script, or another proven install path, use that first2952. **Existing local path** - if `npx --no-install playwright-cli --version`296 works, keep using that path2973. **Pinned global fallback** - only when the repo has no better path and the298 user accepts a host-global install299300If a pinned global fallback is chosen, prefer:301302```bash303npm install -g @playwright/cli@<pinned-version>304playwright-cli install --skills305```306307If no pinned version is available and the repo has no local path, call the host308question tool with a short choice surface instead of silently defaulting to309`@latest`.310311When the user wants you to fix the browser gap now, `$fw:setup browser` should312offer to run the chosen install path directly instead of merely documenting it.313314When optimization is likely to matter for this repo, ask whether the user wants315to persist a local setup ledger under `.context/flywheel/setup-ledger.md`.316If yes, use `references/setup-ledger-template.md` and record:317318- the repo's likely telemetry source of truth319- whether Datadog MCP is available320- whether OTel-native access is available321- which environments are observable: local, shared non-production, production,322 or unknown323- which OTel-native services are actually available324- the preferred optimization path for this repo325326When security focus is relevant, ask whether the user wants to persist a327security posture section in the setup ledger. If yes, record:328329- whether the repo should default to a permissioned posture330- whether sandboxing or a devcontainer is recommended331- whether MCP config exists and which servers appear trusted332- whether untrusted MCP additions should be avoided entirely333334### Phase 5: Report335336Return a setup brief with:3373381. **Repo setup summary**3392. **Required now**3403. **Recommended next**3414. **Commands or fixes applied**3425. **Remaining gaps**3436. **Config status** - `.flywheel/` local config or example readiness3447. **Browser proof readiness** - `playwright-cli`, repo Playwright surfaces, and345 likely local URL or dev command3468. **Suggested optimization path** - Datadog, OTel-native, hybrid, local stack,347 or local-only3489. **Workflow policy** - configured or recommended local gates for reproducer,349 review, browser proof, and runtime validation35010. **Doctor / recovery readiness** - repo-owned health-check or recovery351 surfaces and when to use them35211. **Security posture** - permission posture, sandbox or devcontainer353 recommendation, and trusted MCP status35412. **Suggested next Flywheel stage**355356If browser proof is blocked because `playwright-cli` is missing, say that357explicitly in both **Required now** and **Browser proof readiness**, and include358the next runnable setup command.359360If the repo is already ready, say so clearly and name the next usable workflow361surface, such as `$fw:plan`, `$fw:work`, `$fw:review`, or `$fw:commit`.