Dry-run mode lets you exercise the entire FlowState pipeline — interview, context generation, research, strategy, GSD, and discipline — without making a single call to theDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/8BitTacoSupreme/flowstate/llms.txt
Use this file to discover all available pages before exploring further.
claude CLI. Every adapter that normally calls the bridge checks self.dry_run first and returns a deterministic mock result instead. The state machine, file writes, and flowstate.json persistence all behave identically to a live run, making dry-run the right tool for CI/CD testing, local development, and validating the interview flow.
How to use it
Pass--dry-run to flowstate init:
What each step does in dry-run mode
Context Generation — runs normally
Context Generation — runs normally
Context generation is pure Python with no LLM calls, so it runs identically in dry-run and live mode. The five context files are written from your interview answers using deterministic templates:
.planning/PROJECT.md.planning/ROADMAP.md.planning/config.json.claude/CLAUDE.mdresearch/brief.md
Research — writes a mock report
Research — writes a mock report
The The
ResearchAdapter checks self.dry_run and, when true, formats the MOCK_REPORT template with your comma-separated research topics and writes it to research/report.md:{focus} placeholder is replaced with your actual research_focus topics joined by commas. The file path, artifact registration, and ToolResult shape are identical to a real run.Strategy — writes a mock strategy report
Strategy — writes a mock strategy report
The The
StrategyAdapter.pressure_test method checks self.dry_run and formats the MOCK_STRATEGY template with your core_problem and ten_x_vision, then writes it to research/strategy.md:{problem} and {vision} placeholders are filled from your actual interview answers.GSD — writes context files
GSD — writes context files
The GSD adapter writes the
.planning/ context files that GSD skills consume. In dry-run mode it skips any claude --print calls and returns a successful ToolResult after confirming the files exist. The .planning/PROJECT.md, .planning/ROADMAP.md, and .planning/config.json files were already written by the Context Generation step.Discipline — runs normally
Discipline — runs normally
The discipline audit is pure Python — it checks for
.git, pyproject.toml / pytest.ini / setup.cfg, .pre-commit-config.yaml, installed git hooks, a tests/ directory, a src/ directory or Python package, and a .planning/ directory. No LLM is involved, so dry-run and live mode are identical.State persistence in dry-run
flowstate.json is written after every pipeline step, just like in a live run. Tool statuses transition through ready → running → completed (or blocked on failure), and artifacts are registered against each tool entry. After a dry-run you can inspect the full state:
Automatic fallback
If FlowState starts a live run and theclaude CLI is not found on your PATH and isn’t set via FLOWSTATE_CLAUDE_BIN, the orchestrator automatically falls back to dry-run mode and prints a warning:
flowstate init never hard-fails due to a missing CLI — you always get a complete state file and context files even in environments where Claude Code isn’t installed.
The automatic fallback produces the same mock artifacts as
--dry-run. To confirm whether a run used real LLM calls, check the artifact files: mock-mode output ends with *Generated by FlowState (mock mode)*.Use cases
CI/CD testing
Run
flowstate init --dry-run in a GitHub Actions workflow to verify the pipeline, interview flow, and context file generation on every PR — no API keys needed.Local development
Iterate on prompts, context templates, or adapter logic without waiting for
claude --print calls (~30–75 seconds each in live mode).Interview validation
Test that custom interview answers produce the correct context files and roadmap phases before committing to a live research run.
Pipeline diagnosis
When a live run fails mid-pipeline, re-run with
--dry-run --skip-interview to check whether the issue is in the orchestration logic or the LLM calls.