Skip to content
Back to skills

Teach Podcast

ASecurity

Учебные аудиоподкасты для Антона в NotebookLM: выбирает, чему учить (труба собеседований, дыры сверки), пишет пакет и промпт ведущим, генерирует аудио RU+EN через CLI notebooklm, кладёт в волт, ведёт учебный план и YouTube-очередь. Триггеры: /teach-podcast, /teach, сделай подкаст, обучи меня, подкаст в машину, что мне послушать. НЕ /notebooklm (общий слой артефактов).

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 25, 2026
ai-agentspythongobashsqlkubernetesgit

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned October 3, 2026

npx -y skills add tonydzi/second-brain-starter-kit --skill teach-podcast --agent claude-code

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.

Security grade badge for Teach Podcast
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tonydzi-teach-podcast/badge)](https://www.skillsdirectory.com/skills/tonydzi-teach-podcast)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…