Skip to main content

Startup Flow Lab [Comprehensive]

Experiment: experiments/exp_02_startup_flow/main.py

Objective

Demonstrate how a production CLI chains fast exits, parallel prefetch, ordered initialization, and mode dispatch—the same layering you see moving from thin CLI entry to full app bootstrap.

Source mapping (Claude Code)

ConceptTypeScript (illustrative)
Early --version / help exitssrc/entrypoints/cli.tsx
Commander parse, prefetch orchestrationsrc/main.tsx
Environment, auth, tools, MCP, telemetry orderingsrc/init.ts

Architecture

Key code walkthrough

Fast paths skip heavy work (mirrors CLI early returns):

def check_fast_paths(argv: list[str]) -> bool:
"""Handle flags that should exit immediately without full init."""
if "--version" in argv:
print("claude-code-experiment v1.0.0")
return True
if "--help-all" in argv:
print("All commands: --version, --mode, --prompt, --mock")
return True
return False

Parallel prefetch uses a thread pool (similar to Promise.all in main.tsx):

def run_parallel_prefetch() -> dict[str, Any]:
"""
Run all prefetch tasks in parallel using ThreadPoolExecutor.
Mirrors the Promise.all pattern in main.tsx.
"""
results: dict[str, Any] = {}
tasks = {
"mdm_settings": prefetch_mdm_settings,
"auth_token": prefetch_auth_token,
"feature_flags": prefetch_feature_flags,
"config": prefetch_config,
}
# ... ThreadPoolExecutor + as_completed ...

Mode dispatch after run_init():

if args.mode == "headless" and args.prompt:
await launch_headless(state, args.prompt)
elif args.mode == "mcp":
await launch_mcp_server(state)
else:
await launch_repl(state)

How to run

From experiments/:

python -m exp_02_startup_flow.main --mock
python -m exp_02_startup_flow.main --provider anthropic
python -m exp_02_startup_flow.main --provider openai

Try headless and flags:

python -m exp_02_startup_flow.main --mock --mode headless -p "Hello"
python -m exp_02_startup_flow.main --version

Exercises

  1. Add a lazy import step: defer-import a heavy module only when mode=mcp.
  2. Simulate prefetch failure for one task and define fallback values in run_init().
  3. Log wall-clock per init step and compare sequential vs parallel prefetch totals.

Next experiment

Continue to Core Agent Loop Lab for the async generator loop that runs after startup.