scaffold

Project scaffolding for pipecat init.

The scaffolder generates a runnable Pipecat project (bot.py, dependencies, config, optional client). It has three entry points, all used by pipecat init:

  • scaffold_interactive() — the wizard, run when the developer chooses “scaffold a runnable bot now” on interactive init.

  • scaffold_quickstart() — the canned quickstart preset (pipecat init quickstart).

  • resolve_scaffold_config() + generate_scaffold() — flags/config-file driven, no prompts (pipecat init . --bot-type web ); the path coding agents and automation use. Split so the config is validated before any files are written.

These were formerly the body of the standalone pipecat create command, which has been removed — pipecat init is now the single entry point.

pipecat.cli.scaffold.list_options_callback(value: bool)[source]

Print available service options as JSON and exit (eager --list-options flag).

pipecat.cli.scaffold.scaffold_interactive(dest: Path | None, derived_name: str | None, in_place: bool)[source]

Run the interactive wizard and generate a project.

Used by pipecat init when the developer chooses to scaffold a runnable bot. dest is the resolved output location: the exact target directory when in_place is True, otherwise the parent the <name> subfolder is created under (None = current directory).

pipecat.cli.scaffold.resolve_scaffold_config(ctx: Context, *, derived_name: str | None, dry_run: bool, config: Path | None, name: str | None, bot_type: str | None, transport: list[str] | None, mode: str | None, stt: str | None, llm: str | None, tts: str | None, realtime: str | None, video: str | None, client_framework: str | None, client_server: str | None, daily_pstn_mode: str | None, twilio_daily_sip_mode: str | None, recording: bool, transcription: bool, video_input: bool, video_output: bool, deploy_to_cloud: bool, enable_krisp: bool, observability: bool, enable_eval: bool)[source]

Merge flags + config file into a validated ProjectConfig — no file writes.

Merges a --config file (if given) with the CLI flags and validates the result. An explicit CLI flag always wins; the file value applies only when the flag was omitted. Exits non-zero with a clear message on a validation error, and on dry_run prints the resolved config as JSON and exits zero — so callers can validate before writing anything (see generate_scaffold()).

ctx is the calling Typer command’s context — used to tell which flags the user actually typed (vs. their defaults). The parameter names here must match the option names declared on that command.

pipecat.cli.scaffold.generate_scaffold(project_config, *, dest: Path | None, in_place: bool)[source]

Generate a project from an already-validated config and print next steps.

The write half of non-interactive scaffolding; pair it with resolve_scaffold_config(), which validates first so a bad invocation fails without touching the directory.

pipecat.cli.scaffold.scaffold_quickstart(output_dir: Path | None = None, *, dest: Path | None = None, in_place: bool = False)[source]

Generate the canned quickstart project (no questions).

Sets up a project with SmallWebRTC, Daily, Deepgram STT, OpenAI LLM, and Cartesia TTS — the fastest way to get a voice agent running. Used by pipecat init quickstart, which scaffolds in-place into an already-initialized directory (via dest / in_place).