Script Writing
Generate a naturalistic, multi-character radio show script directly via the LLM. The script features host Paul taking calls from people around the world, with advanced audio tags.
Embedded Script
python3 skills/script-writing/scripts/generate_script.py --workspace ./workspace --style debate
Arguments
| Argument |
Default |
Description |
--workspace |
workspace |
Root workspace directory |
--style |
default |
Show format (see styles below) |
--context |
"" |
Additional tone/style notes inferred from user prompts (e.g., "emphasize the technical details", "make it sound like a late night show"). Applies to ALL styles. Keep brief. Do NOT use to specify stories/topics. |
Styles
| Style |
Callers |
Format |
Use when user says... |
debate |
2 per topic, opposing views |
Structured back-and-forth, Paul moderates |
"opposing views", "debate", "both sides" |
roundtable |
3-4, different angles |
Collaborative discussion, callers build on each other |
"roundtable", "panel", "discussion" |
interview |
1-2 with direct experience |
Q&A format, Paul asks probing questions |
"interview", "deep dive", "expert" |
explainer |
2-3, each explains an aspect |
Teach the audience, Paul asks clarifying questions |
"explain", "break it down", "what is" |
default |
Same as debate |
Default when no style specified |
(anything else) |
Examples
# HN discussion with opposing views, applying context
python3 skills/script-writing/scripts/generate_script.py \
--workspace ./workspace --style debate --context "make it sound like a late night show"
# Panel discussion about a GitHub repo with context notes
python3 skills/script-writing/scripts/generate_script.py \
--workspace ./workspace --style roundtable --context "emphasize the performance improvements"
# Interview with an expert about a paper
python3 skills/script-writing/scripts/generate_script.py \
--workspace ./workspace --style interview
# Explain a new technology
python3 skills/script-writing/scripts/generate_script.py \
--workspace ./workspace --style explainer
What it does
- Reads all research from
{workspace}/data/research/*.md.
- Builds a system prompt with the base format rules + style-specific caller/structure instructions.
- Calls Gemini via the Interactions API (
client.interactions.create()).
- Saves the script to
{workspace}/data/script.md.
Dependencies
Output
- Script File:
{workspace}/data/script.md
- Format: Plain text, each line starting with
Speaker: dialogue
Cast
| Speaker |
Role |
Personality |
| Paul |
Host |
Professional but relatable British moderator |
| Callers |
Call-ins |
Amateur, rough, natural — from various cities around the world |
Script Format Rules
- Every line:
SpeakerName: [audio tag] Dialogue text
- Must include audio tags in square brackets (e.g.,
[sighs], [excitedly]).
- Callers should sound amateurish (include "uh", "like", natural pauses).
- Short punchy sentences — spoken word, not prose.
450-500 words total (3 minutes when spoken).
1---2name: script-writing3description: Generate the AI Talk Radio show script from research using the Interactions API.4---56# Script Writing78Generate a naturalistic, multi-character radio show script directly via the LLM. The script features host Paul taking calls from people around the world, with advanced audio tags.910## Embedded Script1112```bash13python3 skills/script-writing/scripts/generate_script.py --workspace ./workspace --style debate14```1516### Arguments1718| Argument | Default | Description |19|----------|---------|-------------|20| `--workspace` | `workspace` | Root workspace directory |21| `--style` | `default` | Show format (see styles below) |22| `--context` | `""` | Additional tone/style notes inferred from user prompts (e.g., "emphasize the technical details", "make it sound like a late night show"). Applies to ALL styles. Keep brief. Do NOT use to specify stories/topics. |2324### Styles2526| Style | Callers | Format | Use when user says... |27|-------|---------|--------|----------------------|28| `debate` | 2 per topic, opposing views | Structured back-and-forth, Paul moderates | "opposing views", "debate", "both sides" |29| `roundtable` | 3-4, different angles | Collaborative discussion, callers build on each other | "roundtable", "panel", "discussion" |30| `interview` | 1-2 with direct experience | Q&A format, Paul asks probing questions | "interview", "deep dive", "expert" |31| `explainer` | 2-3, each explains an aspect | Teach the audience, Paul asks clarifying questions | "explain", "break it down", "what is" |32| `default` | Same as `debate` | Default when no style specified | *(anything else)* |3334### Examples3536```bash37# HN discussion with opposing views, applying context38python3 skills/script-writing/scripts/generate_script.py \39 --workspace ./workspace --style debate --context "make it sound like a late night show"4041# Panel discussion about a GitHub repo with context notes42python3 skills/script-writing/scripts/generate_script.py \43 --workspace ./workspace --style roundtable --context "emphasize the performance improvements"4445# Interview with an expert about a paper46python3 skills/script-writing/scripts/generate_script.py \47 --workspace ./workspace --style interview4849# Explain a new technology50python3 skills/script-writing/scripts/generate_script.py \51 --workspace ./workspace --style explainer52```5354### What it does55561. Reads all research from `{workspace}/data/research/*.md`.572. Builds a system prompt with the base format rules + style-specific caller/structure instructions.583. Calls Gemini via the **Interactions API** (`client.interactions.create()`).594. Saves the script to `{workspace}/data/script.md`.6061### Dependencies6263- `google-genai` (>= 2.0.0)6465## Output6667- **Script File**: `{workspace}/data/script.md`68- **Format**: Plain text, each line starting with `Speaker: dialogue`6970## Cast7172| Speaker | Role | Personality |73|---------|------|-------------|74| **Paul** | Host | Professional but relatable British moderator |75| **Callers** | Call-ins | Amateur, rough, natural — from various cities around the world |7677## Script Format Rules7879- Every line: `SpeakerName: [audio tag] Dialogue text`80- Must include audio tags in square brackets (e.g., `[sighs]`, `[excitedly]`).81- Callers should sound amateurish (include "uh", "like", natural pauses).82- Short punchy sentences — spoken word, not prose.83- ~450-500 words total (~3 minutes when spoken).