Developer guide¶
This guide orients contributors to the podcast pipeline architecture, how to extend providers, how to run the quality gates, and how we track work with Beads.
Core architecture¶
The project is split into small modules that map to pipeline stages:
src/podcast_pipeline/entrypoints/: CLI commands (podcast ...) that call the pipeline runners.src/podcast_pipeline/workspace_store.py: workspace layout and read/write helpers forepisode.yaml,state.json,copy/,transcript/, andsummaries/.src/podcast_pipeline/domain/: Pydantic models forepisode.yaml, candidates, reviews, and workspace state.src/podcast_pipeline/transcript_chunker.py: chunk transcript text into overlapping segments.src/podcast_pipeline/summarization_stub.py: stub summarizer that creates chunk + episode summaries.src/podcast_pipeline/asset_candidates_stub.py: stub generator for draft copy assets.src/podcast_pipeline/review_loop_engine.py: core creator/reviewer loop, produces protocol JSON.src/podcast_pipeline/review_loop_orchestrator.py: wiring around the loop, writes workspace artifacts.src/podcast_pipeline/agent_runners.py: CLI agent runners, prompt rendering, and fake runners for tests.
Typical data flow (current MVP):
podcast summarizechunks the transcript and writessummaries/(stub today).podcast draft-candidatesgenerates asset candidates from the episode summary.podcast reviewruns the creator/reviewer loop for one asset and writes protocol + selections.podcast pickselects a candidate for export or downstream use.
For schema details, see:
../reference/episode-yaml.md../reference/review-protocol-schemas.md
Adding providers (creator/reviewer CLIs)¶
Creator and reviewer “providers” are CLI commands that accept a prompt on stdin and return JSON.
The JSON shapes are defined in ../reference/review-protocol-schemas.md.
To add or swap a provider without code changes:
Install or expose the CLI.
Add the config in
~/.config/podcast-pipeline/config.yamlor in a workspaceepisode.yaml:
agents:
creator:
command: my-creator-cli
args:
- --format
- json
reviewer:
command: my-reviewer-cli
args:
- --format
- json
If a provider needs custom parsing or different prompt wiring:
Add a new runner class in
src/podcast_pipeline/agent_runners.py.Update
build_local_cli_runnersto select it (e.g., based onAgentCliConfig.kindorcommand).Extend
_DEFAULT_HINTSinsrc/podcast_pipeline/agent_cli_config.pysopodcast statuscan show install hints.
Quality gates¶
Run these before declaring work done:
just lint
just typecheck
just test
If just is not available yet:
uv run ruff check .
uv run ruff format --check .
uv run mypy src tests
uv run pytest
Beads workflow¶
This repo uses a local Beads database under .beads/. To avoid accidentally using a global database:
export BEADS_NO_DAEMON=1
export BEADS_DIR="$PWD/.beads"
bd --no-daemon list
Recommended flow:
bd readybd show <id> --jsonbd update <id> --status in_progressImplement changes
bd close <id> --reason "Done: <summary>"
Beads is the source of truth for tracking; avoid markdown TODO lists for work items.