Учебные аудиоподкасты для Антона в NotebookLM: выбирает, чему учить (труба собеседований, дыры сверки), пишет пакет и промпт ведущим, генерирует аудио RU+EN через CLI notebooklm, кладёт в волт, ведёт учебный план и YouTube-очередь. Триггеры: /teach-podcast, /teach, сделай подкаст, обучи меня, подкаст в машину, что мне послушать. НЕ /notebooklm (общий слой артефактов).
Installs into .claude/skills of the current project.
Are you the author of Teach Podcast?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tonydzi-teach-podcast)
---
name: teach-podcast
description: "Учебные аудиоподкасты для Антона в NotebookLM: выбирает, чему учить (труба собеседований, дыры сверки), пишет пакет и промпт ведущим, генерирует аудио RU+EN через CLI notebooklm, кладёт в волт, ведёт учебный план и YouTube-очередь. Триггеры: /teach-podcast, /teach, сделай подкаст, обучи меня, подкаст в машину, что мне послушать. НЕ /notebooklm (общий слой артефактов)."
version: 1.0.0
consumer: "Антон (/teach-podcast, «сделай подкаст про …») · /interview-prep Шаг 6 · будущая рутина teach-podcast-daily (после 3 прослушанных эпизодов)"
---
# /teach-podcast — Антон учится в машине, я готовлю уроки
> 🧒 Доклад Антону кончается блоком «Простыми словами» ([[eli5-always]]). Пакеты и промпты — без ELI5, это сырьё для диктора.
**Родился 17.09.2026** из подкаста про Lambda (блокнот `e7b1d6e9`, a2@): Антон похвалил, сам догрузил контент и
попросил скилл, «к которому ты будешь часто возвращаться». Его слова: «Люди нужно быстро загрузить информацию
в мозг… когда я за рулём, мне идеально послушать такой подкаст… Твоя задача меня обучать, так же, как я обучаю
тебя… чтобы у меня в мозге утром бывало очень много нового контента».
**Что это:** обратная петля обучения. Антон учит меня голосовыми и ДР; я учу Антона подкастами. У него
30–40 минут в день в машине. Один эпизод = одна тема, которую он должен знать к ближайшему собеседованию.
**Граница с соседями:** `/notebooklm` = общий слой артефактов над волтом (любая тема, любой формат).
Этот скилл = **учебная программа + генерация урока + доставка + учёт**. Он зовёт ту же рельсу CLI.
`/interview-prep` = шпаргалка к конкретному звонку; отсюда берём дыры сверки (❌/⚠️) как темы уроков.
## ⛔ Законы
1. **Ученик — не инженер.** Бывший директор по продажам и фаундер. Каждый термин объясняется бытовой аналогией
в самом промпте ведущим. Жаргон без объяснения = брак урока.
2. **По умолчанию русский, формат deep-dive, длина long.** Короткий эпизод не заполняет дорогу.
⭐ **Поправка 20.09.2026 (Антон голосом, урок про Kubernetes): «на английском на русском языке» —**
**английский эпизод законен и делается ПО ЗАПРОСУ, вторым прогоном на ТОМ ЖЕ блокноте.** Русский не
отменён и остаётся дефолтом: язык без просьбы = ru. Механика: отдельный файл промпта `<слаг>.en.prompt.txt`
(перевод, а не копия: ведущим по-английски), затем `generate audio --language en` с явным `-n <id>`
блокнота, второй прогон запускать ТОЛЬКО после того, как первый скачан (две генерации разом на одном
блокноте не проверялись). Файлы получают суффикс языка: `-ru.m4a` / `-en.m4a`. В учебный план и в
YouTube-очередь идут ДВЕ строки, по одной на язык. ⚠️ Суточная квота аудио одна на оба эпизода.
⭐⭐ **ПОПРАВКА 21.09.2026 (Антон голосом, урок про PyTorch, tg:-[id]) — ТРИ ДЕФОЛТА ПЕРЕВЁРНУТЫ.**
Дословно: «сделать в NotebookLM подкаст на английском и русском языке; максимальная длительность;
всегда выбирать максимальную длину результата; при генерации аудио/видео добавлять уточняющие
вопросы/комментарии, чтобы NotebookLM дал более точный ответ».
(а) **ДВА ЯЗЫКА — ДЕФОЛТ, А НЕ ПРОСЬБА.** Эпизод считается сделанным только когда есть RU **и** EN.
Поправка 20.09 «EN по запросу» этим ОТМЕНЕНА (`superseded_by` = эта строка). Один язык законен
только с названной причиной (квота кончилась · Антон сказал «только русский»), и причина пишется
в доклад; молчаливый один язык = урок сделан наполовину.
(б) **ДЛИНА ВСЕГДА МАКСИМАЛЬНАЯ.** `--length long` не обсуждается ни для аудио, ни для видео, ни
для любого будущего формата с выбором длины. Короче — только по прямому слову Антона.
(в) **УТОЧНЯЮЩИЕ ВОПРОСЫ В ПРОМПТЕ ОБЯЗАТЕЛЬНЫ.** В каждом промпте ведущим — блок «задавайте друг
другу вопросы умного новичка и тут же отвечайте» + блок «опирайтесь на источники, называйте, откуда
факт, расхождение источников произносите вслух». Промпт без этих двух блоков = брак урока.
Образец обоих блоков: `_packets/teach-2026-09-21-pytorch-tensorflow-v2.prompt.txt` (хвост файла).
3. **Публичность по умолчанию.** Всё это потом уходит на YouTube Антона («всё является контентом»). Поэтому в
пакет и в источники НЕ идут: имена рекрутёров и интервьюеров, письма, вилки денег из приватных писем, наши
ответы на анкеты, CRM, секреты. Идут: публичные сайты, доки, вакансии, white papers, наш обобщённый разбор.
Сомнение → в пакет не кладу, урок остаётся полезным и без этого.
4. **Тема = дыра, не тема = «интересно».** Урок закрывает то, чего Антон НЕ знает и что спросят. Источник дыр:
таблица сверки в шпаргалке `/interview-prep` (❌/⚠️), вопросы интервью, семьи ролей из <база вакансий>.
5. **Цифры в пакете только доказанные.** Пакет — наш текст, он попадёт в уши Антона и потом в мир.
6. **Квота аудио суточная.** Тестовые прогоны не жгут её; проверка рельсы = `notebooklm auth check` + `list`.
7. **⭐ ГЕЙТ «спрашивать или нет» (anton 20.09.2026, голосом).** Развилка ровно одна, и она по ТЕМЕ:
**трудоустройство** (интервью · вакансия · компания · роль · оффер · переговоры о деньгах · техническая
планка работодателя) → урок делается **САМ, БЕЗ ВОПРОСА Антону**, дословно «это делаем однозначно и без
вопросов Антону»; **любое другое обучение** (инструмент, рынок, наука, быт, стройка) → **одна строка
вопроса**, сказал «да» → делаю, дословно «можно спрашивать, если он согласился, делаем подкаст».
Сомнение «это про найм или нет» → считать найм и делать молча. ⭐ **Объём под целое собеседование =
3–5 эпизодов**, не один: его заказ 20.09 «сделай мне там 3-5 подкастов, которые меня на все вещи
натренируют». Один эпизод на незнакомую компанию = правило исполнено на четверть.
Канон: `reglament-uchim-antona-podkastom-na-notebooklm` + [[teach-anton-by-podcast-default]], CLAUDE.md §9.13.
## Рельса (проверено 17.09.2026 на [машина флота]; на хабе с 04.07)
- **[машина флота]:** `~/.local/bin/notebooklm` (uv tool, `notebooklm-py[browser,cookies]` 0.8.2, Python 3.12 внутри).
Хаб: `[путь владельца]`. Аккаунт **a2@** (NotebookLM PRO).
- **Auth протухает раз в несколько недель.** `notebooklm auth check` красный →
`notebooklm login --browser-cookies firefox --account you.assistants@example.com`
(Firefox должен быть залогинен в a2@; на [машина флота] профиль `default-release`). CLI подхватил не тот профиль →
`python3 ~/.claude/scripts/_shared/firefox_cookies.py --profile <папка профиля> --domain google.com --export ~/.notebooklm/profiles/default/storage_state.json`.
- **Фолбэк:** Chrome-MCP на `notebook.google.com` под a2@: Add sources → Websites (URL построчно) → Insert →
Studio → Audio «>» → язык русский, промпт → Generate. Так был сделан Lambda-эпизод 16.09.
- ⚠️⚠️ **ЛИМИТ = СМЕНИ БАК, А НЕ ЖДИ СУТОК (приказ Антона 21.09.2026, голосом, tg:-[id]).** Дословно: «когда у нас кончаются лимиты youraccount.a2 в Gmail'е… Иди на другой аккаунт, на youraccount.a и генери там подкасты». С 02.09 у Google лимит «вычислительный» НА АККАУНТ, обновляется каждые 5 часов; CLI отвечает `RateLimitError … Audio generation rate limited by Google`. Прослушивание готового не лимитируется. **Аккаунт = бак; баков три, и они независимы:**
| профиль CLI | почта | состояние 21.09 |
|---|---|---|
| `default` (= `youraccount-a2`) | you.assistants@example.com, AI Pro | рабочий, в лимите с ~08:34 |
| `[рабочий аккаунт]` | [рабочий аккаунт]@gmail.com | **рабочий, проверен боем 21.09 12:15** |
| `youraccount-a` | you@example.com, AI Pro | **ЖИВОЙ с 21.09 15:33** — проверен боем, вытащил урок 16 RU, когда оба соседа были в лимите |
Порядок работы: блокнот принадлежит a2@, поэтому чужой бак надо сперва впустить —
`notebooklm share add <почта> --permission editor -n <id>` (шаринг лимитом не режется). Дальше
`notebooklm -p <профиль> generate audio … -n <id>`: артефакт ложится в ТОТ ЖЕ блокнот, счёт идёт на бак того,
кто нажал. Ссылка для телефона — с `?authuser=<почта>`.
- ⭐ **a@ СТАЛ БАКОМ 21.09 15:33 — прежняя строка «сессии у CLI нет» ОТМЕНЕНА.** Она описывала ТОЛЬКО путь через Chrome (App-Bound Encryption, `rookie-rs: CryptUnprotectData returned a null pointer`). Firefox-путь работает: `notebooklm --profile a login --browser-cookies firefox --all-accounts` → «Found 1 accounts → youraccount-a → you@example.com». Дальше `notebooklm -p youraccount-a generate audio ... -n <id>`.
- ⚠️⚠️ **ИМЯ ПРОФИЛЯ = `youraccount-a`, НЕ `a`.** В `~/.notebooklm/profiles/` лежат пять папок, и две из них — мёртвые двойники: `a/` и `youraccount-a2/` держат протухшие куки и падают «Authentication expired or invalid. Redirected to accounts.google.com». Живых три: `default` (=a2@) · `[рабочий аккаунт]` · `youraccount-a`. Перепутал имя → получишь ложное «бак мёртв» и уйдёшь ждать сутки на ровном месте.
- ⭐ **Правило вместо вывода «все баки пусты»:** сперва прогнать `login --browser-cookies firefox --all-accounts` ЗАНОВО. Список аккаунтов в браузере меняется без нашего участия (21.09 a@ появился между 15:02 и 15:33). «Баков нет» — claim, и он протухает за полчаса ([[ban-is-a-claim-recheck-before-workaround]]).
- Апгрейд тарифа = деньги = Tier-2, жмёт Антон.
- ⛔⭐ **СРОЧНЫЙ ЭПИЗОД ИДЁТ МИМО ОЧЕРЕДИ (замер 21.09 15:22–15:30).** `teach_backlog.py run --loop` работает строго FIFO, приоритета у него НЕТ. 21.09 он молотил баки заданиями Hugging Face и выжег bb@, пока готовился урок под звонок, до которого оставалось два часа; встань эпизод в очередь — он был бы девятым. Правило: эпизод под звонок/дедлайн сегодня гонится **напрямую** `generate audio -p <живой бак>`, очередь остаётся для фонового потока. Кто держит бак: `tail -3 ~/.claude/state/teach_backlog.log`.
- ⛔ **ФОНОВАЯ ЦЕПОЧКА НЕ УМИРАЕТ ОТ TaskStop (грабля 21.09 15:31).** Остановил фоновую задачу харнесом — обёртка снялась, а сам `bash hm_chain.sh` остался жив и через 13 минут запустил ВТОРУЮ генерацию в тот же блокнот — ровно тот веер, от которого предостерегает грабля 20.09. Убивать надо процесс через `Get-CimInstance Win32_Process` + `Stop-Process -Force` по совпадению в CommandLine, и удалить сам .sh, иначе он переживёт сессию. Проверка, что дубля не случилось: `artifact list -n <id>` — аудио должно быть ровно столько, сколько эпизодов заказывал.
- Хаб = резидентный IP, без VPN (анти-абьюз). [машина флота] в поездке — работает, проверено из США 17.09.
## Шаг 1. Чему учить — учебный план (0 LLM сначала, потом суждение)
1. Труба: `sqlite3 ~/.claude/state/jobs-hub-snapshot.db "select company,title,status,answer from ats_jobs where status in ('interview','scheduled','next-stage','pending')"`
(хаб: `[путь владельца]`). Ближайший звонок = урок №1.
2. Семьи ролей по поданным: `…where status='applied'` → FDE / Solutions / DevRel / GTM / PM. Что спрашивают
в каждой семье — отдельный урок, раз и навсегда.
3. Дыры: открыть шпаргалки `$OBSIDIAN_VAULT/04-Projects/Pipe-A-Batches/interview-prep-*.md`, взять строки ❌/⚠️
из таблиц сверки и «опасные вопросы» — это и есть темы.
4. Учебный план живёт в `$OBSIDIAN_VAULT/05-Resources/NotebookLM/_teach-curriculum.md`: строка = тема · зачем
(какой звонок/семья) · статус (план / сгенерирован / прослушан / на YouTube) · блокнот · файл.
Уже сгенерированное не повторяем; смотреть план ПЕРЕД выбором темы.
5. Порядок: ближайший звонок → самая большая семья ролей без урока → фундамент (LLM-стек для не-инженера,
GPU-рынок, американское behavioral-интервью). Один эпизод в день, не больше, чем он успеет прослушать.
## Шаг 2. Пакет — сырьё для диктора (половина качества)
Файл `$OBSIDIAN_VAULT/05-Resources/NotebookLM/_packets/teach-<дата>-<слаг>.md`, 1–3 страницы, по-русски:
- **Кому и зачем** (2 строки): ученик, к какому звонку/роли.
- **Что должен уметь после урока** — 5–7 пунктов проверяемых («объяснить, чем FDE отличается от SE»).
- **Тело:** наш разбор своими словами, факты с источником, аналогии, типичные вопросы интервью с
правильной логикой ответа (без личных историй Антона — их он расскажет сам).
- **Словарь**: 10–15 терминов → бытовая аналогия.
- ⛔ Без имён людей из переписки, без денег из писем, без Майкрофта. Проверка глазами перед `source add`.
## Шаг 3. Источники — ПОЛ 10-15, ПОТОЛКА НЕТ (приказ Антона 21.09.2026, голосом)
Дословно: «минимум 10-15 источников про PyTorch; по возможности добавлять как можно больше источников».
Правило шире PyTorch: **у любого урока пол = 10-15 источников**, считая наш пакет за один. Меньше —
только с названной причиной в докладе (тема узкая, живых ссылок физически нет). Один источник на урок,
как было у PyTorch-блокнота `a743aafb` до 21.09, = урок на песке: NotebookLM пересказывает нас самих.
- Пакет (`--type file`) + 10-25 публичных URL: официальная документация, официальные туториалы по
каждому механизму урока, научные статьи (arXiv), инженерные блоги, репозитории, сайты соседних
инструментов. Каждый URL сперва проверить живым кодом 200:
`while read u; do echo "$(curl -s -o /dev/null -w '%{http_code}' -L --max-time 20 "$u") $u"; done < urls.txt`
Мёртвый не добавляем. Готовый пул по PyTorch/TensorFlow (25 живых ссылок, проверены 21.09):
`_packets/teach-2026-09-21-pytorch-tensorflow-v2.sources.txt`.
- Доп. поиск самим NotebookLM: `notebooklm source add-research "<запрос по-английски>" --import-all --cited-only`
(fast). Даёт свежие статьи, которых нет у нас. Проверить `source list`: мусорные (форумы, SEO) удалить.
- Дождаться `Status=ready` у всех: `notebooklm source list` (⚠️ `source wait` без SOURCE_ID падает, 17.09; проверять списком, URL-источники обычно ready за минуту).
## Шаг 4. Промпт ведущим — шаблон (эталон Lambda 16.09)
```
Объясни простыми словами для человека без инженерного бэкграунда (бывший директор по продажам и
фаундер), который идёт на собеседование в <компания> на роль <роль>:
1) <вопрос-дыра №1>; 2) <№2>; 3) <№3>; 4) <№4>; 5) <№5>.
Много бытовых аналогий, каждый термин объясняй сразу. Разбирай типичные вопросы интервью и логику
хорошего ответа. Не пересказывай вакансию, учи думать как <роль>.
```
Пять нумерованных пунктов = то, что он должен знать в первую очередь. Больше семи — второй эпизод.
## Шаг 5. Генерация (CLI)
```bash
export PATH="$HOME/.local/bin:$PATH"
notebooklm auth check || notebooklm login --browser-cookies firefox --account you.assistants@example.com
notebooklm create "Учёба: <тема>" --use
notebooklm source add "<packet.md>" --type file --title "Разбор: <тема>"
notebooklm source add "<url>" # по одному, только живые
notebooklm source add-research "<query>" --import-all --cited-only
sleep 60; notebooklm source list # все ready? иначе подождать ещё
notebooklm generate audio --prompt-file <prompt.txt> --language ru --format deep-dive --length long --wait --timeout 1800 --retry 2 # --length long ВСЕГДА (Закон 2в)
notebooklm download audio "$OBSIDIAN_VAULT/05-Resources/NotebookLM/artifacts/audio/teach-<дата>-<слаг>-ru.m4a"
# EN-эпизод (ОБЯЗАТЕЛЕН с 21.09, не «по запросу»; только ПОСЛЕ скачивания RU; -n обязателен, контекст мог смениться):
notebooklm generate audio --prompt-file <prompt>.en.prompt.txt --language en --format deep-dive --length long --wait --timeout 1800 --retry 2 -n <id блокнота>
notebooklm download audio "$OBSIDIAN_VAULT/05-Resources/NotebookLM/artifacts/audio/teach-<дата>-<слаг>-en.m4a"
notebooklm list --json | python3 -c "import sys,json;print(json.load(sys.stdin)['notebooks'][0]['id'])" # id блокнота (ключ notebooks, 0.8.2)
```
Генерация 5–15 минут → запускать в фоне (`run_in_background`), не держать сессию. Готовая обёртка на один
эпизод (ждёт источники → генерит → скачивает, с уликами в логе): `bash ~/.claude/scripts/_shared/teach_gen_one.sh <id блокнота> <prompt.txt> <out.m4a> [сек ожидания]`.
⭐ **БОЛЬШЕ ОДНОГО ЭПИЗОДА → ОЧЕРЕДЬ С РОТАЦИЕЙ БАКОВ** (`teach_backlog.py`, рождён 21.09.2026 под приказ
«кончились лимиты — иди на другой аккаунт»). Она делает ровно то, что руками делать нельзя: упёрлась в
`rate limited` — ставит ЭТОТ бак остывать и отдаёт задание следующему, эпизоды идут строго по одному:
```bash
python ~/.claude/scripts/_shared/teach_backlog.py add --slug <слаг>-<ru|en> --notebook <id> \
--prompt <prompt.txt> --out "$OBSIDIAN_VAULT/05-Resources/NotebookLM/artifacts/audio/teach-<дата>-<слаг>-<ru|en>.m4a" --lang ru
python ~/.claude/scripts/_shared/teach_backlog.py run --cooldown 45 --loop # в фоне; порядок баков уже вшит
python ~/.claude/scripts/_shared/teach_backlog.py status # что готово, что ждёт, какой бак остывает
```
Состояние — `~/.claude/state/teach_backlog.json`, журнал — `~/.claude/state/teach_backlog.log` (не в синкаемой
папке, §4.5-бис). Регресс: `python ~/.claude/scripts/_shared/_test_teach_backlog.py` (5 тестов; красным показан
на сломанной ветке RATE_PATTERNS).
⭐⭐ **ПРИОРИТЕТ БАКОВ НАЗВАН АНТОНОМ ГОЛОСОМ 23.09.2026 И ВШИТ В ДЕФОЛТ.** Дословно: «если на одном
аккаунте закончились время, ты идёшь генерировать другой аккаунт… сначала youraccount.a2, потом
youraccount.a, потом [рабочий аккаунт]». Порядок = `DEFAULT_ACCOUNTS` в `teach_backlog.py`, флаг `--accounts`
теперь можно НЕ писать:
| приоритет | профиль CLI | почта | состояние 23.09 |
|---|---|---|---|
| 1 | `default` | you.assistants@example.com (AI Pro) | ✅ живой |
| 2 | `youraccount-a` | you@example.com | ✅ живой |
| 3 | `[рабочий аккаунт]` | [рабочий аккаунт]@gmail.com | ✅ живой |
| ⛔ | `a`, `youraccount-a2` | — | мёртвые двойники, куки протухли |
Проверено прогоном `notebooklm -p <профиль> list` 23.09; два двойника отвечают «Authentication expired
or invalid». Класть их в `--accounts` = получить ложное «бак мёртв» и уйти ждать сутки на ровном месте.
⛔⛔ **АУДИО ГЕНЕРИТСЯ ТОЛЬКО ЧЕРЕЗ ОЧЕРЕДЬ.** Прямой `notebooklm generate audio` в обход `teach_backlog`
запрещён для любой партии больше одного эпизода: он сидит на ОДНОМ баке, при `rate limited` просто
падает, и ротация из приказа Антона не срабатывает вообще. ⚠️ Замер 23.09: восемь эпизодов по конспектам
[человек] Liu ушли прямым вызовом веером — и мимо ротации, и мимо запрета параллелить ниже. Прошло только
потому, что квота a2@ в то утро не кончилась; это везение, а не работающая рельса.
⛔ **ГЕНЕРАЦИИ НЕ ПАРАЛЛЕЛИТЬ — ДАЖЕ В РАЗНЫХ БЛОКНОТАХ** (замер 20.09.2026, хаб, диагноз уточнён вторым заходом).
Запустил пять эпизодов веером на аккаунте a2@ — три дошли, два упали с `Artifact <id> disappeared from list
(consecutive=5 not-found polls) — treating as removed` и сообщением CLI «quota/rate limit or transient».
⚠️ **Провал был ложным, и это главное в этой грабле.** Перезапустив оба эпизода поодиночке и потом сверив
`artifact list`, нашёл в обоих блокнотах ПО ДВА completed-аудио: первый (объявленный «снятым») сервер
спокойно доделал, просто поллер CLI потерял его из списка, пока рядом шли другие генерации. То есть при
веере ты платишь дважды — генерацией и перегенерацией — и получаешь в блокноте дубли, которые потом путают
Антона. Сообщение про квоту читается как «квота кончилась», хотя квота ни при чём.
Правило: **один эпизод за раз, следующий стартует после скачивания предыдущего** (цепочка в фоне:
`until grep -qE "DONE bytes|FAIL" <лог первого>; do sleep 20; done; teach_gen_one.sh <второй>`).
И перед тем как объявить эпизод провалившимся — **сверь `artifact list -n <id>`**: артефакт может быть
готов, а провалилось только слежение за ним. Пять эпизодов последовательно = примерно час, это нормальная цена. Ссылка для телефона:
`https://notebook.google.com/notebook/<id>?authuser=you.assistants@example.com` — Антон слушает в приложении
NotebookLM под a2@, файл нужен для волта и YouTube. Расширение честное: `.m4a` (внутри AAC).
## Шаг 6. Доставка и учёт (тем же заходом)
1. Антону в чат сессии: тема · зачем · ссылка на блокнот · длительность · «что проверить после прослушивания»
(3 вопроса — он сам поймёт, усвоил ли). Нет его в сессии → строка в 03 через `bus_send.py`.
2. Строка в `_teach-curriculum.md` (статус «сгенерирован», блокнот, файл, дата) и в
`artifacts/_NotebookLM-Audio.md` (как все аудио). Индекс `_NotebookLM-Index.md` — строка блокнота.
3. **YouTube-очередь** `$OBSIDIAN_VAULT/05-Resources/NotebookLM/_youtube-queue.md`: строка = файл · заголовок RU/EN ·
описание (3–5 строк, «Как я готовлюсь к собеседованиям в AI-компании: урок про …») · теги · статус
`ждёт`. Публичность обеспечена Законом 3.
⭐ **ВЫГРУЗКУ ДЕЛАЕТ `/youtube-publish`** (скилл родился 21.09.2026 из голосовой Антона
«выкладывать на личный YouTube-канал... как только появляется новый материал»). Контракт
односторонний: мы КЛАДЁМ строку, он ВЫЧЕРПЫВАЕТ. Канал `[аккаунт]`, движок
`~/.claude/scripts/youtube_publish.py`, леджер `~/.claude/state/youtube_ledger.jsonl`.
Заголовок с номером урока («(урок 3)») ставить обязательно: по нему серия выходит
в правильном порядке, а не по дате файла.
Строку забыли — эпизод всё равно найдётся свободным сканом папки артефактов, но уйдёт
с машинным заголовком из имени файла вместо человеческого. Поэтому строку пишем.
4. Шпаргалка звонка (`interview-prep-*.md`): строка «Подкаст: <ссылка>» рядом с разбором.
5. Вердикт о скилле одной строкой: 🔧 / 📝 / ✅ с причиной (§9.3-бис).
## Шаг 7. Проверка (§4.3-бис, второй заход другим методом)
- Файл на диске >1 МБ, длительность из контейнера (`python3 -c` по `mvhd` или `afinfo <файл>`), язык русский
(первые 30 с транскрипта или `artifact list`), источники = только наши (`source list` без чужих).
- Не прослушал сам = так и пишу: «сгенерирован, не прослушан».
## Потребители
- Антон: `/teach-podcast` или «сделай подкаст про …» — перед любым собеседованием и по плану.
- `/interview-prep` Шаг 6: после шпаргалки — один урок по дырам сверки (строка-указатель туда).
- Кандидат в рутину `teach-podcast-daily` (ночное окно, следующая тема плана без статуса «сгенерирован») —
ставится после того, как Антон прослушает первые 3 эпизода и скажет, что формат работает (§5.7 shadow-first).
<!--kit-footer-->
---
**Like this skill?** It is one of 100 in [second-brain-starter-kit](https://github.com/tonydzi/second-brain-starter-kit): the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with `npx skills add tonydzi/second-brain-starter-kit`. Everything is open source and free, so take what you need.
Flagships worth a look on their own: [secondop-panel](https://github.com/tonydzi/secondop-panel) (a second opinion from a panel of external models), [claude-memory-tidy](https://github.com/tonydzi/claude-memory-tidy) (stop your agent's memory from rotting), [telegram-mcp-kit](https://github.com/tonydzi/telegram-mcp-kit) (your own Telegram over MCP in about 15 minutes).
Author: **Anton Dziatkovskii**, Palo Alto AI Research Lab. Telegram [@tonydzi](https://t.me/tonydzi) - WhatsApp [+1 341 222 9178](https://wa.me/13412229178) - X [@Tony_Stef_](https://x.com/Tony_Stef_)
**Engineers: want to test-drive this setup?** Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.