[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71KA5F4Y81B0Z62RZFTHXP4":3,"skill-same:01M71KA5F4Y81B0Z62RZFTHXP4":68},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":46,"updatedAt":47,"install":48,"resources":61},"01M71KA5F4Y81B0Z62RZFTHXP4","podcast-generator",null,"Turn topics into podcast scripts and audio with ElevenLabs production.","clawdsolana\u002FOpenClawd","clawdsolana","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F279036008?v=4","01M71JTVF9FNGKE2SVJRPTQM31","OpenClawd","01M71JTVGCKWBSS8ZYC1HYWVA5",2,"MIT","https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fsecondary_skills\u002Fpodcast-generator\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32],"podcast generator","generator","podcast","Audio","scripts","elevenlabs","with","topics","Production","2026-11-10 10:12:30",false,"---\nname: podcast-generator\ndescription: Turn topics into podcast scripts and audio with ElevenLabs production.\n---\n\n# Podcast Generator\n\n## OpenClawd Operator Adaptation\n\nRun this skill as part of the OpenClawd operator deck. Preserve the skill-specific workflow below, but frame outputs for Solana-native agents when relevant: prefer OpenClawd language, note whether the work can support autonomous agent operations, and keep financial, legal, tax, hiring, medical, or other regulated outputs informational unless the skill already requires a stricter disclaimer. Use the Llobster Legend persona only as light operator framing; do not let branding override accuracy, safety, or the user's stated domain.\n\n\nTurn research, articles, or topics into podcast-ready scripts and audio content. Generate conversational scripts with host\u002Fguest dynamics and produce audio using ElevenLabs text-to-speech. Supports script-only workflows, multilingual episodes, and series planning.\n\n## When to Use\n\n- User wants to turn written content into a podcast episode\n- User wants to create a podcast-style summary of a topic or paper\n\n- User wants to generate audio content from research\n- User mentions \"AI Pods\", podcast, or audio content creation\n\n- User wants a podcast script without audio generation (script-only mode)\n- User wants to plan a podcast series or recurring show\n\n- User says \"create an episode about...\" (topic-first requests without explicitly saying \"podcast\")\n- User says \"write a script for...\" (scriptwriting intent that maps to podcast format)\n\n- User says \"make an audio version of...\" (converting written content like articles, blog posts, or reports into listenable content)\n- User says \"plan my next episode\" (continuing an existing series)\n\n- User says \"record \u002F produce \u002F generate an episode\" (audio production intent)\n\n## When NOT to Use\n\n- Music creation or sound effects\n- Video content (use storyboard skill for planning)\n\n- Written summaries only (use deep-research skill)\n\n## Workflow Modes\n\nBefore starting, determine which workflow the user needs:\n\n| Mode | Description | When to Use |\n\n|------|-------------|-------------|\n\n| **Script-only** | Research + script writing, no audio | User wants the script first, no ElevenLabs key, or iterating on content before committing to audio |\n\n| **Full production** | Research + script + audio generation + normalization | User has ElevenLabs key and wants the finished audio file |\n\n| **Series planning** | Define show identity + episode calendar + recurring structure | User wants to build an ongoing podcast, not just a one-off episode |\n\nIf the user's intent is ambiguous, ask which mode they prefer. Default to **script-only** if no ElevenLabs key is available — do not block progress on audio setup.\n\n## Methodology\n\n### Step 1: Structured Research\n\nGather source material systematically. Do not skip this step — a well-researched script sounds authoritative; a loosely researched one sounds generic.\n\n#### Research checklist — run these searches in parallel\n\n| Category | What to Gather | How |\n\n|----------|---------------|-----|\n\n| **Recent events** | Latest results, scores, announcements, breaking news | `webSearch` with date-specific queries (e.g., \"Real Madrid results April 2026\") |\n\n| **Statistics & data** | Standings, player stats, records, rankings | `webSearch` for official stats pages (fbref, transfermarkt, official league sites) |\n\n| **Quotes & reactions** | Press conference quotes, player interviews, social media reactions | `webSearch` for post-match quotes, press conferences |\n\n| **Context & history** | Historical comparisons, records being chased, milestones | `webSearch` for historical context related to current events |\n\n| **Narrative angles** | Controversies, storylines, fan sentiment, trending debates | `webSearch` for opinion pieces, fan forums, trending topics |\n\n##### Research template — fill this before writing\n\n```text\n\nEPISODE RESEARCH BRIEF\n\n======================\n\nTopic: [main topic]\n\nDate context: [what just happened \u002F why this is timely]\n\nKEY FACTS:\n\n- [fact 1 with source]\n- [fact 2 with source]\n\n- [fact 3 with source]\n\nSTATISTICS:\n\n- [stat 1]\n- [stat 2]\n\nQUOTES:\n\n- \"[quote]\" — [who said it, when]\n\nNARRATIVE ANGLES:\n\n- [angle 1: why it's interesting]\n- [angle 2: the contrarian take]\n\nOPEN QUESTIONS:\n\n- [what's still uncertain \u002F debatable]\n\n```\n\nRun at least 3 parallel web searches covering different facets of the topic. Cross-reference facts across sources. Flag anything that's unverified or contradictory — use it as discussion material in the script rather than stating it as fact.\n\n### Step 2: Format Selection\n\nChoose the podcast format:\n\n| Format | Description | Best For |\n\n|--------|-------------|----------|\n\n| **Solo explainer** | One host walks through the topic | Tutorials, news summaries, deep dives |\n\n| **Conversational duo** | Two hosts discuss and riff | Making complex topics accessible, entertainment |\n\n| **Interview style** | Host asks questions, expert answers | Technical topics, research papers |\n\n| **Debate** | Two perspectives argue a topic | Controversial or nuanced subjects |\n\n| **Narrative** | Storytelling with narration | Case studies, historical events |\n\n#### Format templates with segment timing\n\n#### Conversational Duo (recommended default)\n\n| Segment | Duration | Word Count | Speaker Balance |\n\n|---------|----------|------------|-----------------|\n\n| Cold open | 15–30s | 40–75 | 50\u002F50 |\n\n| Setup\u002Fintro | 30–60s | 75–150 | 60\u002F40 (Explainer leads) |\n\n| Segment 1 | 3–5 min | 450–750 | 55\u002F45 |\n\n| Segment 2 | 3–5 min | 450–750 | 45\u002F55 |\n\n| Segment 3 | 3–5 min | 450–750 | 55\u002F45 |\n\n| Segment 4 (optional) | 3–5 min | 450–750 | 50\u002F50 |\n\n| Segment 5 (optional) | 3–5 min | 450–750 | 50\u002F50 |\n\n| Takeaways | 1–2 min | 150–300 | 50\u002F50 |\n\n| Outro | 15–30s | 40–75 | 50\u002F50 |\n\nTarget overall speaker balance: **no host should have less than 40% of total lines.** The Questioner is not a sidekick — they drive the conversation forward.\n\n#### Solo Explainer\n\n| Segment | Duration | Word Count |\n\n|---------|----------|------------|\n\n| Hook | 15–30s | 40–75 |\n\n| Context | 1–2 min | 150–300 |\n\n| Main body (3–4 sections) | 3–5 min each | 450–750 each |\n\n| Summary + CTA | 1–2 min | 150–300 |\n\n#### Interview Style\n\n| Segment | Duration | Word Count | Speaker Balance |\n\n|---------|----------|------------|-----------------|\n\n| Host intro | 30–60s | 75–150 | Host only |\n\n| Guest intro | 1–2 min | 150–300 | 70\u002F30 (Host leads) |\n\n| Q&A blocks (4–6) | 3–5 min each | 450–750 each | 30\u002F70 (Guest leads) |\n\n| Rapid fire | 2–3 min | 300–450 | 50\u002F50 |\n\n| Closing | 30–60s | 75–150 | Host only |\n\n### Step 3: Script Writing — NotebookLM Pattern\n\nThe two-host format that works (reverse-engineered from Google's Audio Overviews):\n\n- **Host A = \"The Explainer\"** — knows the material, breaks down concepts\n- **Host B = \"The Questioner\"** — audience surrogate, asks the \"wait, why?\" questions\n\n- **Dialog rhythm:** alternate short punchy lines with longer explanations. Sprinkle affirmations: \"Right.\", \"Exactly.\", \"Okay so—\"\n- **Arc:** open with common misconception → introduce source that challenges it → unpack implications → \"so what does this mean for you\"\n\n- **Transitions:** \"And on that note...\" \u002F \"Which brings us to...\" \u002F \"Here's where it gets weird—\"\n\n#### Structure (target ~150 words per minute of audio)\n\n1. **Cold open** (15–30s) — the single most surprising finding, stated as a question or contradiction\n2. **Setup** (30–60s) — what we're covering, why it matters now\n\n3. **Segments** (3–5 × 2–4 min) — one idea each; end each with a mini-hook into the next\n4. **Takeaways** (1–2 min) — 3 things to remember\n\n5. **Outro** (15s) — sign-off\n\n**Write for ears, not eyes:** contractions always, no semicolons, no parentheticals. If you wouldn't say it out loud, rewrite it.\n\n**Script format** — one line per utterance, speaker tag in brackets, blank line between speakers. This is the unit you'll chunk for TTS:\n\n```text\n\n[ALEX]: So today we're diving into something that honestly broke my brain a little.\n\n[SAM]: Oh no. What now.\n\n[ALEX]: Okay — you know how everyone says [common belief]? There's this paper from [source] that basically says... the opposite.\n\n[SAM]: Wait. The *opposite* opposite?\n\n```\n\n##### Script-only deliverable format\n\nWhen delivering a script without audio, include these production notes at the end:\n\n```text\n\nPRODUCTION NOTES:\n\n- Total word count: [number]\n- Estimated duration: [minutes] (at 150 wpm)\n\n- Segment breakdown: [list segments with word counts]\n- Voice recommendations: [suggested voice profiles for each host]\n\n- Music\u002FSFX suggestions: [intro, transitions, outro, background]\n\n```\n\n### Step 4: Audio Generation — ElevenLabs\n\n> **Skip this step in script-only mode.** If the user doesn't have an ElevenLabs key or only wants the script, deliver the script with production notes and stop here.\n\n**Install:** `pip install elevenlabs pydub`\n\n**Model choice:** `eleven_multilingual_v2`for quality (10K char limit per call);`eleven_turbo_v2_5` for speed\u002Fcost (40K char limit, ~300ms latency, ~3x faster).\n\n**Voice IDs that work for duo podcasts** (from the default library — verify with `client.voices.search()`):\n\n- `JBFqnCBsd6RMkjVDRZzb` (George — warm, mid-range male)\n- `21m00Tcm4TlvDq8ikWAM` (Rachel — clear, measured female)\n\n- `pNInz6obpgDQGcFmaJgB` (Adam — energetic narrator)\n- `EXAVITQu4vr4xnSDxMaL` (Bella — conversational female)\n\n#### Settings for conversational podcast delivery\n\n- `stability: 0.45` — lower = more expressive; below 0.3 gets inconsistent\n- `similarity_boost: 0.8` — keeps voice consistent across chunks\n\n- `style: 0.3` — mild exaggeration for energy (0 = flat)\n- `use_speaker_boost: True`\n\n```python\n\nimport os\n\nfrom elevenlabs.client import ElevenLabs\n\nfrom pydub import AudioSegment\n\nimport io\n\nclient = ElevenLabs(api_key=os.environ[\"ELEVENLABS_API_KEY\"])\n\nVOICES = {\"ALEX\": \"JBFqnCBsd6RMkjVDRZzb\", \"SAM\": \"21m00Tcm4TlvDq8ikWAM\"}\n\ndef render_line(speaker: str, text: str) -> AudioSegment:\n\naudio = client.text_to_speech.convert(\n\nvoice_id=VOICES[speaker],\n\ntext=text,\n\nmodel_id=\"eleven_multilingual_v2\",\n\noutput_format=\"mp3_44100_128\",\n\nvoice_settings={\"stability\": 0.45, \"similarity_boost\": 0.8,\n\n\"style\": 0.3, \"use_speaker_boost\": True},\n\n)\n\nreturn AudioSegment.from_mp3(io.BytesIO(b\"\".join(audio)))\n\n# parse script → list of (speaker, text) tuples, render each, concat\n\ngap = AudioSegment.silent(duration=350) \\# 350ms between speakers\n\nepisode = sum((render_line(s, t) + gap for s, t in lines), AudioSegment.empty())\n\nepisode.export(\"episode_raw.mp3\", format=\"mp3\", bitrate=\"128k\")\n\n```\n\n**Chunking long utterances:** split at sentence boundaries (`.`,`?`,`!`), keep under ~800 chars per call. Pass`previous_text`\u002F`next_text` params to preserve prosody across chunk boundaries.\n\n### Step 5: Loudness Normalization\n\n> **Skip this step in script-only mode.**\n\nPodcast standard is **-16 LUFS** (stereo) per Apple\u002FSpotify specs. pydub's `normalize()`is peak-only — not LUFS. Use ffmpeg's two-pass`loudnorm`via the`ffmpeg-normalize` wrapper:\n\n```bash\n\npip install ffmpeg-normalize\n\nffmpeg-normalize episode_raw.mp3 -o episode.mp3 -c:a libmp3lame -b:a 128k \\\\\n\n-t -16 -tp -1.5 -lra 11 --normalization-type ebu\n\n```\n\n`-t -16`= target LUFS,`-tp -1.5`= true-peak ceiling (prevents clipping),`-lra 11` = loudness range. This runs two passes automatically (analyze, then correct).\n\n## Multilingual & Localization Support\n\nWhen the target audience speaks a language other than English, follow these guidelines:\n\n### Language Selection\n\n- Ask the user what language the podcast should be in during the initial questions\n- If the audience is region-specific (e.g., LATAM, Brazil, France), default to the primary language of that region\n\n- If the user doesn't specify, infer from context (e.g., \"LATAM market\" → Spanish)\n\n### Model Selection for Non-English\n\n- **Always use `eleven_multilingual_v2`** for non-English scripts —`eleven_turbo_v2_5` has limited language support and may produce artifacts in non-English speech\n- Set `stability` slightly higher (0.50–0.55) for non-English languages to reduce mispronunciation\n\n- Test voice IDs with a short sample in the target language before rendering the full episode — not all default voices perform equally across languages\n\n### Voice Selection by Language\n\n| Language | Recommended Approach |\n\n|----------|---------------------|\n\n| Spanish | Use `client.voices.search()`to find native Spanish voices. Fallback: George and Rachel handle Spanish reasonably well with`eleven_multilingual_v2` |\n\n| Portuguese | Search for native Portuguese voices. Brazilian Portuguese and European Portuguese differ significantly — match the audience |\n\n| French | Search for native French voices |\n\n| Other | Always search for native voices first; multilingual fallbacks as backup |\n\n### Script Writing for Non-English\n\n- Write the entire script in the target language — do not write in English and translate\n- Use natural spoken patterns of the target language, not literal translations of English idioms\n\n- Proper nouns and brand names: keep the original spelling but add phonetic hints in parentheses if the TTS might mispronounce them\n- For mixed-language audiences (e.g., Spanglish), be intentional about when and why you switch languages — it should feel natural, not random\n\n## Series Planning\n\nWhen the user wants to build an ongoing podcast (not just a one-off episode), establish the series identity first.\n\n### Show Bible\n\nCreate a show bible document that defines the recurring elements:\n\n```text\n\nSHOW BIBLE\n\n==========\n\nShow name: [name]\n\nTagline: [one-line description]\n\nTarget audience: [who listens]\n\nLanguage: [primary language]\n\nFormat: [solo \u002F duo \u002F interview \u002F rotating]\n\nTone: [casual-analytical \u002F high-energy \u002F calm-thoughtful \u002F etc.]\n\nHOSTS:\n\n- [Host 1 name]: [role — explainer\u002Fquestioner\u002Fnarrator] — [personality in 1 sentence]\n- [Host 2 name]: [role] — [personality in 1 sentence]\n\nRECURRING SEGMENTS:\n\n- [Segment name]: [what it covers, where it appears in the episode]\n- [Segment name]: [what it covers, where it appears in the episode]\n\nEPISODE STRUCTURE:\n\n1. [Opening element — jingle, cold open, catchphrase]\n2. [Main content — how many segments, typical length]\n\n3. [Recurring closer — sign-off phrase, CTA]\n\nBRANDING:\n\n- Opening catchphrase: \"[phrase]\"\n- Closing catchphrase: \"[phrase]\"\n\n- Episode naming convention: [e.g., \"Ep. XX: [Topic]\"]\n\nCONTENT PILLARS:\n\n- [Pillar 1]: [description — e.g., \"Match analysis and tactical breakdowns\"]\n- [Pillar 2]: [description — e.g., \"Transfer rumors and squad management\"]\n\n- [Pillar 3]: [description — e.g., \"Historical deep dives and legend profiles\"]\n\n```\n\n### Episode Calendar\n\nPlan episodes in advance to maintain consistency and cover the content pillars:\n\n```text\n\nEPISODE CALENDAR\n\n================\n\nFrequency: [weekly \u002F biweekly \u002F monthly]\n\nRelease day: [e.g., \"Every Monday\"]\n\nUPCOMING EPISODES:\n\n| Ep \\# | Target Date | Topic | Content Pillar | Status |\n\n|------|-------------|-------|----------------|--------|\n\n| 01 | [date] | [topic] | [pillar] | [draft\u002Frecorded\u002Fpublished] |\n\n| 02 | [date] | [topic] | [pillar] | [planned] |\n\n| 03 | [date] | [topic] | [pillar] | [planned] |\n\n```\n\n### Series Continuity\n\nAcross episodes, maintain:\n\n- **Consistent host names and personalities** — don't change character traits between episodes\n- **Running references** — callbacks to previous episodes (\"as we talked about last week...\")\n\n- **Episode numbering** — sequential numbering in the script header and file names\n- **File naming convention** — `episodio_XX_script.txt`or`episode_XX_script.txt`\n\n- **Evolving storylines** — for topic-based series, track ongoing narratives (e.g., a team's season, a company's trajectory) and reference the arc across episodes\n\n## AI-Assisted Research Integration\n\nLeverage web search systematically to make each episode timely and data-rich. Do not rely on general knowledge alone — always ground the script in current, verifiable information.\n\n### Search Strategy\n\nRun searches in parallel to maximize speed. Use at least 3 different search queries per episode:\n\n```javascript\n\n\u002F\u002F Run these in parallel — don't serialize\n\nconst [results1, results2, results3] = await Promise.all([\n\nwebSearch({ query: \"[topic] latest news [current month year]\" }),\n\nwebSearch({ query: \"[topic] statistics standings data [year]\" }),\n\nwebSearch({ query: \"[topic] analysis reactions opinions [current month year]\" })\n\n]);\n\n```\n\n### Data Verification\n\n- Cross-reference statistics across at least 2 sources before including them in the script\n- When sources conflict, acknowledge the discrepancy in the script — it makes good discussion material\n\n- Always include the date context of your research — \"as of [date]\" — so listeners know the information is current\n- For rapidly changing topics (sports scores, stock prices, breaking news), note in the script header when the research was conducted\n\n### Enriching the Script with Data\n\nTransform raw research into conversational content:\n\n| Raw Data | Script Version |\n\n|----------|---------------|\n\n| \"Player scored 59 goals in 2025\" | \"Fifty-nine goals. In one calendar year. That ties the all-time club record.\" |\n\n| \"Team is 4 points behind leader\" | \"Four points. That's the gap. And with eight games left, there's almost no margin for error.\" |\n\n| \"Manager was fired after 7 months\" | \"Seven months. That's all it lasted. One of the shortest managerial stints in the club's recent history.\" |\n\nNumbers should be spoken out in script form when they open a sentence or carry dramatic weight. Use digits when they're mid-sentence and factual.\n\n## Episode Length Guidelines\n\n| Content Type | Target Length | Script Word Count |\n\n|-------------|-------------|-------------------|\n\n| News summary | 5-10 min | 750-1,500 words |\n\n| Topic explainer | 10-20 min | 1,500-3,000 words |\n\n| Deep dive | 20-40 min | 3,000-6,000 words |\n\n| Research paper review | 15-25 min | 2,250-3,750 words |\n\nRule of thumb: ~150 words per minute of audio.\n\n## Best Practices\n\n1. **Hook early** — if the first 30 seconds aren't interesting, listeners skip\n2. **One idea per segment** — don't cram too much; let ideas breathe\n\n3. **Use stories and examples** — abstract concepts need concrete illustrations\n4. **Vary pacing** — alternate between fast energy and slow, thoughtful moments\n\n5. **End with value** — give listeners a clear takeaway or action item\n6. **Ground in data** — every claim should trace back to your research; vague statements kill credibility\n\n7. **Name your sources** — \"according to fbref\" or \"the manager said in the press conference\" adds authority\n8. **Maintain series identity** — if this is part of a series, use the show bible for consistent tone, host names, and recurring elements\n\n## Limitations\n\n- Audio generation requires `ELEVENLABS_API_KEY` env var (script-only mode does not)\n- Voices mispronounce technical terms\u002Facronyms — spell phonetically in the script (`\"Kubernetes\"`→`\"koo-ber-NET-eez\"`) or use ElevenLabs pronunciation dictionaries\n\n- `eleven_multilingual_v2` has known issues with very long single calls (voice drift, occasional stutter) — chunk at sentence boundaries, don't send 5K-char blobs\n- Cost: ~$0.18–0.30 per 1000 characters depending on plan; a 20-min episode (~3000 words) ≈ $3–5\n\n- Non-English voices: quality varies by language and voice; always test with a short sample before full rendering\n","# Podcast Generator\n\n## OpenClawd Operator Adaptation\n\nRun this skill as part of the OpenClawd operator deck. Preserve the skill-specific workflow below, but frame outputs for Solana-native agents when relevant: prefer OpenClawd language, note whether the work can support autonomous agent operations, and keep financial, legal, tax, hiring, medical, or other regulated outputs informational unless the skill already requires a stricter disclaimer. Use the Llobster Legend persona only as light operator framing; do not let branding override accuracy, safety, or the user's stated domain.\n\n\nTurn research, articles, or topics into podcast-ready scripts and audio content. Generate conversational scripts with host\u002Fguest dynamics and produce audio using ElevenLabs text-to-speech. Supports script-only workflows, multilingual episodes, and series planning.\n\n## When to Use\n\n- User wants to turn written content into a podcast episode\n- User wants to create a podcast-style summary of a topic or paper\n\n- User wants to generate audio content from research\n- User mentions \"AI Pods\", podcast, or audio content creation\n\n- User wants a podcast script without audio generation (script-only mode)\n- User wants to plan a podcast series or recurring show\n\n- User says \"create an episode about...\" (topic-first requests without explicitly saying \"podcast\")\n- User says \"write a script for...\" (scriptwriting intent that maps to podcast format)\n\n- User says \"make an audio version of...\" (converting written content like articles, blog posts, or reports into listenable content)\n- User says \"plan my next episode\" (continuing an existing series)\n\n- User says \"record \u002F produce \u002F generate an episode\" (audio production intent)\n\n## When NOT to Use\n\n- Music creation or sound effects\n- Video content (use storyboard skill for planning)\n\n- Written summaries only (use deep-research skill)\n\n## Workflow Modes\n\nBefore starting, determine which workflow the user needs:\n\n| Mode | Description | When to Use |\n\n|------|-------------|-------------|\n\n| **Script-only** | Research + script writing, no audio | User wants the script first, no ElevenLabs key, or iterating on content before committing to audio |\n\n| **Full production** | Research + script + audio generation + normalization | User has ElevenLabs key and wants the finished audio file |\n\n| **Series planning** | Define show identity + episode calendar + recurring structure | User wants to build an ongoing podcast, not just a one-off episode |\n\nIf the user's intent is ambiguous, ask which mode they prefer. Default to **script-only** if no ElevenLabs key is available — do not block progress on audio setup.\n\n## Methodology\n\n### Step 1: Structured Research\n\nGather source material systematically. Do not skip this step — a well-researched script sounds authoritative; a loosely researched one sounds generic.\n\n#### Research checklist — run these searches in parallel\n\n| Category | What to Gather | How |\n\n|----------|---------------|-----|\n\n| **Recent events** | Latest results, scores, announcements, breaking news | `webSearch` with date-specific queries (e.g., \"Real Madrid results April 2026\") |\n\n| **Statistics & data** | Standings, player stats, records, rankings | `webSearch` for official stats pages (fbref, transfermarkt, official league sites) |\n\n| **Quotes & reactions** | Press conference quotes, player interviews, social media reactions | `webSearch` for post-match quotes, press conferences |\n\n| **Context & history** | Historical comparisons, records being chased, milestones | `webSearch` for historical context related to current events |\n\n| **Narrative angles** | Controversies, storylines, fan sentiment, trending debates | `webSearch` for opinion pieces, fan forums, trending topics |\n\n##### Research template — fill this before writing\n\n```text\n\nEPISODE RESEARCH BRIEF\n\n======================\n\nTopic: [main topic]\n\nDate context: [what just happened \u002F why this is timely]\n\nKEY FACTS:\n\n- [fact 1 with source]\n- [fact 2 with source]\n\n- [fact 3 with source]\n\nSTATISTICS:\n\n- [stat 1]\n- [stat 2]\n\nQUOTES:\n\n- \"[quote]\" — [who said it, when]\n\nNARRATIVE ANGLES:\n\n- [angle 1: why it's interesting]\n- [angle 2: the contrarian take]\n\nOPEN QUESTIONS:\n\n- [what's still uncertain \u002F debatable]\n\n```\n\nRun at least 3 parallel web searches covering different facets of the topic. Cross-reference facts across sources. Flag anything that's unverified or contradictory — use it as discussion material in the script rather than stating it as fact.\n\n### Step 2: Format Selection\n\nChoose the podcast format:\n\n| Format | Description | Best For |\n\n|--------|-------------|----------|\n\n| **Solo explainer** | One host walks through the topic | Tutorials, news summaries, deep dives |\n\n| **Conversational duo** | Two hosts discuss and riff | Making complex topics accessible, entertainment |\n\n| **Interview style** | Host asks questions, expert answers | Technical topics, research papers |\n\n| **Debate** | Two perspectives argue a topic | Controversial or nuanced subjects |\n\n| **Narrative** | Storytelling with narration | Case studies, historical events |\n\n#### Format templates with segment timing\n\n#### Conversational Duo (recommended default)\n\n| Segment | Duration | Word Count | Speaker Balance |\n\n|---------|----------|------------|-----------------|\n\n| Cold open | 15–30s | 40–75 | 50\u002F50 |\n\n| Setup\u002Fintro | 30–60s | 75–150 | 60\u002F40 (Explainer leads) |\n\n| Segment 1 | 3–5 min | 450–750 | 55\u002F45 |\n\n| Segment 2 | 3–5 min | 450–750 | 45\u002F55 |\n\n| Segment 3 | 3–5 min | 450–750 | 55\u002F45 |\n\n| Segment 4 (optional) | 3–5 min | 450–750 | 50\u002F50 |\n\n| Segment 5 (optional) | 3–5 min | 450–750 | 50\u002F50 |\n\n| Takeaways | 1–2 min | 150–300 | 50\u002F50 |\n\n| Outro | 15–30s | 40–75 | 50\u002F50 |\n\nTarget overall speaker balance: **no host should have less than 40% of total lines.** The Questioner is not a sidekick — they drive the conversation forward.\n\n#### Solo Explainer\n\n| Segment | Duration | Word Count |\n\n|---------|----------|------------|\n\n| Hook | 15–30s | 40–75 |\n\n| Context | 1–2 min | 150–300 |\n\n| Main body (3–4 sections) | 3–5 min each | 450–750 each |\n\n| Summary + CTA | 1–2 min | 150–300 |\n\n#### Interview Style\n\n| Segment | Duration | Word Count | Speaker Balance |\n\n|---------|----------|------------|-----------------|\n\n| Host intro | 30–60s | 75–150 | Host only |\n\n| Guest intro | 1–2 min | 150–300 | 70\u002F30 (Host leads) |\n\n| Q&A blocks (4–6) | 3–5 min each | 450–750 each | 30\u002F70 (Guest leads) |\n\n| Rapid fire | 2–3 min | 300–450 | 50\u002F50 |\n\n| Closing | 30–60s | 75–150 | Host only |\n\n### Step 3: Script Writing — NotebookLM Pattern\n\nThe two-host format that works (reverse-engineered from Google's Audio Overviews):\n\n- **Host A = \"The Explainer\"** — knows the material, breaks down concepts\n- **Host B = \"The Questioner\"** — audience surrogate, asks the \"wait, why?\" questions\n\n- **Dialog rhythm:** alternate short punchy lines with longer explanations. Sprinkle affirmations: \"Right.\", \"Exactly.\", \"Okay so—\"\n- **Arc:** open with common misconception → introduce source that challenges it → unpack implications → \"so what does this mean for you\"\n\n- **Transitions:** \"And on that note...\" \u002F \"Which brings us to...\" \u002F \"Here's where it gets weird—\"\n\n#### Structure (target ~150 words per minute of audio)\n\n1. **Cold open** (15–30s) — the single most surprising finding, stated as a question or contradiction\n2. **Setup** (30–60s) — what we're covering, why it matters now\n\n3. **Segments** (3–5 × 2–4 min) — one idea each; end each with a mini-hook into the next\n4. **Takeaways** (1–2 min) — 3 things to remember\n\n5. **Outro** (15s) — sign-off\n\n**Write for ears, not eyes:** contractions always, no semicolons, no parentheticals. If you wouldn't say it out loud, rewrite it.\n\n**Script format** — one line per utterance, speaker tag in brackets, blank line between speakers. This is the unit you'll chunk for TTS:\n\n```text\n\n[ALEX]: So today we're diving into something that honestly broke my brain a little.\n\n[SAM]: Oh no. What now.\n\n[ALEX]: Okay — you know how everyone says [common belief]? There's this paper from [source] that basically says... the opposite.\n\n[SAM]: Wait. The *opposite* opposite?\n\n```\n\n##### Script-only deliverable format\n\nWhen delivering a script without audio, include these production notes at the end:\n\n```text\n\nPRODUCTION NOTES:\n\n- Total word count: [number]\n- Estimated duration: [minutes] (at 150 wpm)\n\n- Segment breakdown: [list segments with word counts]\n- Voice recommendations: [suggested voice profiles for each host]\n\n- Music\u002FSFX suggestions: [intro, transitions, outro, background]\n\n```\n\n### Step 4: Audio Generation — ElevenLabs\n\n> **Skip this step in script-only mode.** If the user doesn't have an ElevenLabs key or only wants the script, deliver the script with production notes and stop here.\n\n**Install:** `pip install elevenlabs pydub`\n\n**Model choice:** `eleven_multilingual_v2`for quality (10K char limit per call);`eleven_turbo_v2_5` for speed\u002Fcost (40K char limit, ~300ms latency, ~3x faster).\n\n**Voice IDs that work for duo podcasts** (from the default library — verify with `client.voices.search()`):\n\n- `JBFqnCBsd6RMkjVDRZzb` (George — warm, mid-range male)\n- `21m00Tcm4TlvDq8ikWAM` (Rachel — clear, measured female)\n\n- `pNInz6obpgDQGcFmaJgB` (Adam — energetic narrator)\n- `EXAVITQu4vr4xnSDxMaL` (Bella — conversational female)\n\n#### Settings for conversational podcast delivery\n\n- `stability: 0.45` — lower = more expressive; below 0.3 gets inconsistent\n- `similarity_boost: 0.8` — keeps voice consistent across chunks\n\n- `style: 0.3` — mild exaggeration for energy (0 = flat)\n- `use_speaker_boost: True`\n\n```python\n\nimport os\n\nfrom elevenlabs.client import ElevenLabs\n\nfrom pydub import AudioSegment\n\nimport io\n\nclient = ElevenLabs(api_key=os.environ[\"ELEVENLABS_API_KEY\"])\n\nVOICES = {\"ALEX\": \"JBFqnCBsd6RMkjVDRZzb\", \"SAM\": \"21m00Tcm4TlvDq8ikWAM\"}\n\ndef render_line(speaker: str, text: str) -> AudioSegment:\n\naudio = client.text_to_speech.convert(\n\nvoice_id=VOICES[speaker],\n\ntext=text,\n\nmodel_id=\"eleven_multilingual_v2\",\n\noutput_format=\"mp3_44100_128\",\n\nvoice_settings={\"stability\": 0.45, \"similarity_boost\": 0.8,\n\n\"style\": 0.3, \"use_speaker_boost\": True},\n\n)\n\nreturn AudioSegment.from_mp3(io.BytesIO(b\"\".join(audio)))\n\n# parse script → list of (speaker, text) tuples, render each, concat\n\ngap = AudioSegment.silent(duration=350) \\# 350ms between speakers\n\nepisode = sum((render_line(s, t) + gap for s, t in lines), AudioSegment.empty())\n\nepisode.export(\"episode_raw.mp3\", format=\"mp3\", bitrate=\"128k\")\n\n```\n\n**Chunking long utterances:** split at sentence boundaries (`.`,`?`,`!`), keep under ~800 chars per call. Pass`previous_text`\u002F`next_text` params to preserve prosody across chunk boundaries.\n\n### Step 5: Loudness Normalization\n\n> **Skip this step in script-only mode.**\n\nPodcast standard is **-16 LUFS** (stereo) per Apple\u002FSpotify specs. pydub's `normalize()`is peak-only — not LUFS. Use ffmpeg's two-pass`loudnorm`via the`ffmpeg-normalize` wrapper:\n\n```bash\n\npip install ffmpeg-normalize\n\nffmpeg-normalize episode_raw.mp3 -o episode.mp3 -c:a libmp3lame -b:a 128k \\\\\n\n-t -16 -tp -1.5 -lra 11 --normalization-type ebu\n\n```\n\n`-t -16`= target LUFS,`-tp -1.5`= true-peak ceiling (prevents clipping),`-lra 11` = loudness range. This runs two passes automatically (analyze, then correct).\n\n## Multilingual & Localization Support\n\nWhen the target audience speaks a language other than English, follow these guidelines:\n\n### Language Selection\n\n- Ask the user what language the podcast should be in during the initial questions\n- If the audience is region-specific (e.g., LATAM, Brazil, France), default to the primary language of that region\n\n- If the user doesn't specify, infer from context (e.g., \"LATAM market\" → Spanish)\n\n### Model Selection for Non-English\n\n- **Always use `eleven_multilingual_v2`** for non-English scripts —`eleven_turbo_v2_5` has limited language support and may produce artifacts in non-English speech\n- Set `stability` slightly higher (0.50–0.55) for non-English languages to reduce mispronunciation\n\n- Test voice IDs with a short sample in the target language before rendering the full episode — not all default voices perform equally across languages\n\n### Voice Selection by Language\n\n| Language | Recommended Approach |\n\n|----------|---------------------|\n\n| Spanish | Use `client.voices.search()`to find native Spanish voices. Fallback: George and Rachel handle Spanish reasonably well with`eleven_multilingual_v2` |\n\n| Portuguese | Search for native Portuguese voices. Brazilian Portuguese and European Portuguese differ significantly — match the audience |\n\n| French | Search for native French voices |\n\n| Other | Always search for native voices first; multilingual fallbacks as backup |\n\n### Script Writing for Non-English\n\n- Write the entire script in the target language — do not write in English and translate\n- Use natural spoken patterns of the target language, not literal translations of English idioms\n\n- Proper nouns and brand names: keep the original spelling but add phonetic hints in parentheses if the TTS might mispronounce them\n- For mixed-language audiences (e.g., Spanglish), be intentional about when and why you switch languages — it should feel natural, not random\n\n## Series Planning\n\nWhen the user wants to build an ongoing podcast (not just a one-off episode), establish the series identity first.\n\n### Show Bible\n\nCreate a show bible document that defines the recurring elements:\n\n```text\n\nSHOW BIBLE\n\n==========\n\nShow name: [name]\n\nTagline: [one-line description]\n\nTarget audience: [who listens]\n\nLanguage: [primary language]\n\nFormat: [solo \u002F duo \u002F interview \u002F rotating]\n\nTone: [casual-analytical \u002F high-energy \u002F calm-thoughtful \u002F etc.]\n\nHOSTS:\n\n- [Host 1 name]: [role — explainer\u002Fquestioner\u002Fnarrator] — [personality in 1 sentence]\n- [Host 2 name]: [role] — [personality in 1 sentence]\n\nRECURRING SEGMENTS:\n\n- [Segment name]: [what it covers, where it appears in the episode]\n- [Segment name]: [what it covers, where it appears in the episode]\n\nEPISODE STRUCTURE:\n\n1. [Opening element — jingle, cold open, catchphrase]\n2. [Main content — how many segments, typical length]\n\n3. [Recurring closer — sign-off phrase, CTA]\n\nBRANDING:\n\n- Opening catchphrase: \"[phrase]\"\n- Closing catchphrase: \"[phrase]\"\n\n- Episode naming convention: [e.g., \"Ep. XX: [Topic]\"]\n\nCONTENT PILLARS:\n\n- [Pillar 1]: [description — e.g., \"Match analysis and tactical breakdowns\"]\n- [Pillar 2]: [description — e.g., \"Transfer rumors and squad management\"]\n\n- [Pillar 3]: [description — e.g., \"Historical deep dives and legend profiles\"]\n\n```\n\n### Episode Calendar\n\nPlan episodes in advance to maintain consistency and cover the content pillars:\n\n```text\n\nEPISODE CALENDAR\n\n================\n\nFrequency: [weekly \u002F biweekly \u002F monthly]\n\nRelease day: [e.g., \"Every Monday\"]\n\nUPCOMING EPISODES:\n\n| Ep \\# | Target Date | Topic | Content Pillar | Status |\n\n|------|-------------|-------|----------------|--------|\n\n| 01 | [date] | [topic] | [pillar] | [draft\u002Frecorded\u002Fpublished] |\n\n| 02 | [date] | [topic] | [pillar] | [planned] |\n\n| 03 | [date] | [topic] | [pillar] | [planned] |\n\n```\n\n### Series Continuity\n\nAcross episodes, maintain:\n\n- **Consistent host names and personalities** — don't change character traits between episodes\n- **Running references** — callbacks to previous episodes (\"as we talked about last week...\")\n\n- **Episode numbering** — sequential numbering in the script header and file names\n- **File naming convention** — `episodio_XX_script.txt`or`episode_XX_script.txt`\n\n- **Evolving storylines** — for topic-based series, track ongoing narratives (e.g., a team's season, a company's trajectory) and reference the arc across episodes\n\n## AI-Assisted Research Integration\n\nLeverage web search systematically to make each episode timely and data-rich. Do not rely on general knowledge alone — always ground the script in current, verifiable information.\n\n### Search Strategy\n\nRun searches in parallel to maximize speed. Use at least 3 different search queries per episode:\n\n```javascript\n\n\u002F\u002F Run these in parallel — don't serialize\n\nconst [results1, results2, results3] = await Promise.all([\n\nwebSearch({ query: \"[topic] latest news [current month year]\" }),\n\nwebSearch({ query: \"[topic] statistics standings data [year]\" }),\n\nwebSearch({ query: \"[topic] analysis reactions opinions [current month year]\" })\n\n]);\n\n```\n\n### Data Verification\n\n- Cross-reference statistics across at least 2 sources before including them in the script\n- When sources conflict, acknowledge the discrepancy in the script — it makes good discussion material\n\n- Always include the date context of your research — \"as of [date]\" — so listeners know the information is current\n- For rapidly changing topics (sports scores, stock prices, breaking news), note in the script header when the research was conducted\n\n### Enriching the Script with Data\n\nTransform raw research into conversational content:\n\n| Raw Data | Script Version |\n\n|----------|---------------|\n\n| \"Player scored 59 goals in 2025\" | \"Fifty-nine goals. In one calendar year. That ties the all-time club record.\" |\n\n| \"Team is 4 points behind leader\" | \"Four points. That's the gap. And with eight games left, there's almost no margin for error.\" |\n\n| \"Manager was fired after 7 months\" | \"Seven months. That's all it lasted. One of the shortest managerial stints in the club's recent history.\" |\n\nNumbers should be spoken out in script form when they open a sentence or carry dramatic weight. Use digits when they're mid-sentence and factual.\n\n## Episode Length Guidelines\n\n| Content Type | Target Length | Script Word Count |\n\n|-------------|-------------|-------------------|\n\n| News summary | 5-10 min | 750-1,500 words |\n\n| Topic explainer | 10-20 min | 1,500-3,000 words |\n\n| Deep dive | 20-40 min | 3,000-6,000 words |\n\n| Research paper review | 15-25 min | 2,250-3,750 words |\n\nRule of thumb: ~150 words per minute of audio.\n\n## Best Practices\n\n1. **Hook early** — if the first 30 seconds aren't interesting, listeners skip\n2. **One idea per segment** — don't cram too much; let ideas breathe\n\n3. **Use stories and examples** — abstract concepts need concrete illustrations\n4. **Vary pacing** — alternate between fast energy and slow, thoughtful moments\n\n5. **End with value** — give listeners a clear takeaway or action item\n6. **Ground in data** — every claim should trace back to your research; vague statements kill credibility\n\n7. **Name your sources** — \"according to fbref\" or \"the manager said in the press conference\" adds authority\n8. **Maintain series identity** — if this is part of a series, use the show bible for consistent tone, host names, and recurring elements\n\n## Limitations\n\n- Audio generation requires `ELEVENLABS_API_KEY` env var (script-only mode does not)\n- Voices mispronounce technical terms\u002Facronyms — spell phonetically in the script (`\"Kubernetes\"`→`\"koo-ber-NET-eez\"`) or use ElevenLabs pronunciation dictionaries\n\n- `eleven_multilingual_v2` has known issues with very long single calls (voice drift, occasional stutter) — chunk at sentence boundaries, don't send 5K-char blobs\n- Cost: ~$0.18–0.30 per 1000 characters depending on plan; a 20-min episode (~3000 words) ≈ $3–5\n\n- Non-English voices: quality varies by language and voice; always test with a short sample before full rendering\n",{"name":5,"description":7},"main","6b4a291df75c639681e93b4b5b812126443fd6ed","secondary_skills\u002Fpodcast-generator",3,"https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd","https:\u002F\u002Fsolanaclawd.com\u002Fopenclawd","https:\u002F\u002Fgithub.com\u002Fclawdsolana","https:\u002F\u002Fmusebook.trade","Welcome to Open Clawd. The future of Ai on and off chain. Bringing webMCP to web 3 using X402, A2A, MPP and so much more!","2026-08-01 09:30:51",{"source":8,"skillName":5,"commands":49,"prompt":59,"zipAvailable":60},[50,53,56],{"tool":51,"command":52},"npx","npx skills add clawdsolana\u002FOpenClawd --skill podcast-generator",{"tool":54,"command":55},"bunx","bunx skills add clawdsolana\u002FOpenClawd --skill podcast-generator",{"tool":57,"command":58},"pnpm","pnpm dlx skills add clawdsolana\u002FOpenClawd --skill podcast-generator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fsecondary_skills\u002Fpodcast-generator\u002FSKILL.md",true,[62],{"path":63,"resourceType":64,"resourceTypeDesc":65,"sizeBytes":66,"sourceHtmlUrl":67},".fingerprint","OTHER","其他",32,"https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fsecondary_skills\u002Fpodcast-generator\u002F.fingerprint",[69,100,128,154,164,188],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":78,"publishedAt":99},"01M71KRBD0W01EAXJ8YM4M1SJ2","solana-dev","End-to-end Solana development playbook (Jan 2026). Prefer Solana Foundation framework-kit (@solana\u002Fclient + @solana\u002Freact-hooks) for React\u002FNext.js UI. Prefer @solana\u002Fkit for all new client\u002FRPC\u002Ftransaction code. When legacy dependencies require web3.js, isolate it behind @solana\u002Fweb3-compat (or @solana\u002Fweb3.js as a true legacy fallback). Covers wallet-standard-first connection (incl. ConnectorKit), Anchor\u002FPinocchio programs, Codama-based client generation, LiteSVM\u002FMollusk\u002FSurfpool testing, and security checklists.","https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fsolana-dev\u002FSKILL.md",[75],{"categoryNo":76,"categoryName":77,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],"solana dev","dev","solana","Wallet","end","testing","hooks","kit","new","when","web3","code","react","next","2026","playbook","security","ui","fallback","framework","2026-11-10 10:56:23",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":109,"publishedAt":99},"01M71KR8QPESSY61SVE8ZTFNVT","xurl","A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.","https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fskills\u002Fxurl\u002FSKILL.md",[106],{"categoryNo":107,"categoryName":108,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[102,110,111,112,113,114,115,88,116,117,118,119,120,121,122,123,124,125,126,127],"posts","Media","x api","search","send","tap","you","api","cli","read","install","cli tool","endpoint","brew","for","manage","tool","twitter",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":135,"publishedAt":99},"01M71KR6FSXV88YDKWP7NBY3SH","wurk-integration","WURK API integration for monetizing agents with x402 payments on Solana\u002FBase - create social jobs, custom challenges, and agent help tasks","https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fskills\u002Fwurk-integration\u002FSKILL.md",[134],{"categoryNo":107,"categoryName":108,"taxonomyType":21,"taxonomyTypeDesc":22},[136,137,138,139,140,141,142,143,117,144,145,146,147,148,149,150,124,151,152,153],"wurk","wurk integration","integration","x402","social","payments","tasks","team","create","social-jobs","command","agent-help","custom-jobs","clawd","safe","api integration","custom","true",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":99},"01M71KR4HCX41BPAK9GP7RPRRP","workflows","Manage application workflows including configuration, restart, and removal.","https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fskills\u002Fworkflows\u002FSKILL.md",[],[156,125,161,162,163],"configuration","application","restart",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":99},"01M71KR1VM0F5GPEQDNG5J7A0H","web-search","Search the web, fetch content, extract branding profiles, and capture screenshots from URLs. Use for real-time information, API documentation, current events, design matching, and visual reference.","https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fskills\u002Fweb-search\u002FSKILL.md",[],[171,113,172,173,174,124,175,176,177,178,179,180,181,117,182,183,184,185,186,187],"web search","web","fetch","api documentation","real-time","time","profiles","design","use","information","visual","documentation","branding","matching","reference","capture","content",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":99},"01M71KQZN5MR1JFQHG5GWXYAHS","weather","Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location. NOT for: historical weather data, severe weather alerts, or detailed meteorological analysis. No API key needed.","https:\u002F\u002Fgithub.com\u002Fclawdsolana\u002FOpenClawd\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[190,195,124,196,179,88,197,117,198,199,200,201,202,203,204,205,206,207],"get","open","analysis","alerts","temperature","curl","via","help","about","https","location","data","user"]