Один JSON кормит всех: как строить data layer для агентов
Claude Code за одну сессию построил полноценную YouTube-инфраструктуру: исследовал квоты API, спроектировал схему данных, получил API-ключ через браузер, написал скрипт-коллектор и настроил ежедневный запуск. Результат — файл videos.json с 70 видео, 3360 подписчиками и 182K просмотрами. Этот файл теперь кормит данными агентов из совершенно разных проектов.
Зачем мне YouTube-база
У меня несколько агентов в разных проектах, которые работают с YouTube-данными. Видео-пайплайн при публикации урока хочет знать, какие видео уже есть на канале. Агент для идей блог-постов сканирует темы видео, чтобы не повторяться. Агент для обложек проверяет, какие thumbnail уже сгенерированы.
Раньше каждый из них дёргал YouTube API по-своему. Или вообще не дёргал — я вручную копировал данные. Это нарушает мой принцип: если процесс повторяется больше двух раз — делегировать.
Я решил: нужен единый data layer. Один файл, один коллектор, много потребителей.
Приём 1: Exa research для квот API
YouTube Data API v3 даёт 10 000 единиц квоты в день — звучит щедро, пока не узнаешь, что один search.list съедает 100 единиц.
Я попросил агента разобраться:
Промпт для Claude Code (Opus 4.6) с Exa MCP:
Проведи комплексное исследование на предмет лучших практик для этой проблемы используя exa mcp
Агент через Exa AI нашёл официальную документацию по квотам и вернул ключевое: search.list стоит 100 единиц за запрос, а playlistItems.list + videos.list — по 1 единице за 50 видео. Разница в 100 раз по эффективности.
Это и определило подход. Вместо поиска видео через search — агент берёт uploads playlist канала и пакетно запрашивает метаданные. На мои 70 видео уходит ~3-5 единиц из 10 000 доступных. Можно обновлять хоть каждый час.
Приём 2: brainstorming через skill
С квотами разобрались — теперь схема данных. У меня есть skill /brainstorming — Q&A сессия, где агент задаёт вопросы перед тем как писать код. Помогает не бросаться в реализацию, а зафиксировать решения до первой строчки.
Промпт для Claude Code (Opus 4.6):
Есть issue — там план того что надо реализовать. /brainstorming
Агент задал правильные вопросы:
- JSON vs SQLite? JSON. Потому что
cat videos.json | jqработает из любого агента без зависимостей. Аjson.load()— две строчки на Python. SQLite требует драйвер и знание SQL. - Где хранить метку обновления статистики? Отдельно в
stats.updated_at. Видео публикуется один раз, а просмотры меняются каждый день. - Как парсить главы? Regex из description:
(\d{1,2}:\d{2}(?::\d{2})?)\s+(.+). 36 из 70 видео имеют таймкоды в описании.
Зафиксировали до кода — агент не тратит время на переделки.
Архитектура: один коллектор, один файл
Вот что получилось:
┌─────────────────┐
│ YouTube API v3 │
│ (10,000 units) │
└────────┬────────┘
│ ~3-5 units/day
▼
┌─────────────────┐ ┌──────────────┐
│ update_stats.py │────▶│ videos.json │
│ (launchd 10:00) │ │ 70 videos │
└─────────────────┘ │ 3360 subs │
│ 182K views │
└──────┬───────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌───────────┐ ┌──────────────┐
│ lesson- │ │ blog- │ │ thumbnail- │
│ pipeline │ │ ideas │ │ generator │
│ │ │ │ │ │
│ cat | jq │ │ json.load │ │ cat | jq │
└─────────────┘ └───────────┘ └──────────────┘
Скрипт update_stats.py делает три вызова API за один запуск:
channels.list— подписчики, просмотры, ID плейлиста загрузокplaylistItems.list— все ID видео с каналаvideos.list(пакетами по 50) — метаданные и статистика
Новые видео получают полную запись: заголовок, описание, теги, длительность, главы. Существующие — только обновление счётчиков просмотров, лайков, комментариев.
Приём 3: Chrome DevTools MCP для API-ключа
У меня не было API-ключа YouTube. Обычно это значит: открой Google Cloud Console, создай проект, включи API, создай credentials… Минут 10 ручных кликов.
Но у меня настроен Chrome DevTools MCP — агент умеет управлять браузером: кликать, вводить текст, читать страницы.
Промпт для Claude Code (Opus 4.6) с Chrome DevTools MCP:
Нет ключа — получи его сам через девтулс мсп
Агент открыл Google Cloud Console в Chrome. Зашёл в API & Services. Включил YouTube Data API v3. Создал API key. Добавил ограничение по API (только YouTube). Скопировал ключ в .env.
Всё кликами через UI. Я смотрел в терминал, как агент делает скриншоты страниц, находит кнопки и жмёт по ним. Честно, ожидал что где-то застрянет — но нет, просто сработало. Chrome DevTools MCP — open-source проект от Google (сентябрь 2025, 27K звёзд на GitHub).
launchd, а не GitHub Actions
videos.json — локальный файл на моём MacBook. Агенты читают его через cat или json.load() прямо из файловой системы.
GitHub Actions потребовали бы: хранить ключ в secrets, пушить файл в repo, тянуть его обратно. Лишний слой для задачи, которая работает на одной машине.
launchd — встроенный планировщик macOS. Один plist-файл:
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>10</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
Каждый день в 10 утра скрипт обновляет данные. Логи пишутся в ~/Library/Logs/stats-youtube.log. Если MacBook выключен — запустится при следующем включении.
Что внутри videos.json
На канале @serejaris 70 видео, самое старое — апрель 2020. Для каждого хранится:
{
"id": "8oJQyTai2X4",
"title": "GEMINI 3.1 PRO классно вайбкодит?",
"published_at": "2026-02-19T22:42:10Z",
"duration": "PT1H36M",
"tags": ["вайбкодинг", "gemini"],
"chapters": [
{"time": "00:00", "title": "Первый запуск и SVG-анимация"},
{"time": "07:23", "title": "Тест SVG-анимаций"}
],
"stats": {
"views": 5162,
"likes": 99,
"comments": 30,
"updated_at": "2026-02-28T11:10:48Z"
}
}
Любой агент может достать нужное одной командой:
# Топ-3 видео по просмотрам
jq '.videos | sort_by(-.stats.views) | .[0:3] | .[].title' videos.json
# Видео с тегом "claude-code"
jq '.videos[] | select(.tags[] | test("claude"; "i")) | .title' videos.json
Топ канала на сегодня: OpenCode (12.5K просмотров), Claude Code гайд (10.5K), ИИ-мозг на Obsidian (10.2K).
Одна сессия — полная инфраструктура
Одна сессия Claude Code — не “за 15 минут”, а полноценная рабочая сессия с исследованием, проектированием и реализацией. Вот что агент сделал:
- Исследовал квоты YouTube API через Exa
- Спроектировал схему через brainstorming
- Получил API-ключ через Chrome DevTools MCP
- Написал
update_stats.py(184 строки Python) - Создал launchd plist для ежедневного запуска
- Запустил первый полный сбор данных
Я не открывал ни один файл. Не писал ни строчки кода. Не ходил в Google Cloud Console руками. Промпты — это весь мой вклад.
Addy Osmani из Google в декабре 2025 писал, что ~90% кода Claude Code написано самим Claude Code. По-моему, дело не в модели — а в инфраструктуре вокруг неё: skills для brainstorming, MCP для браузера, Exa для research.
Строй инфраструктуру для агентов
Агенты полезнее, когда у них есть готовые данные. Не “доступ к API” — а структурированный файл, который можно прочитать за миллисекунды.
Пайплайн для статей работает так же: агент строит инфраструктуру, которой потом пользуются другие агенты. Агент достаёт данные для агентов.
Начните с data layer. Соберите в один файл то, к чему агенты обращаются чаще всего — YouTube-статистика, список проектов, история коммитов. Один коллектор, один JSON, много потребителей.
FAQ
Почему JSON, а не SQLite?
Простота доступа. cat videos.json | jq работает без зависимостей. json.load() — две строчки Python. Любой агент из любого проекта может прочитать файл, не устанавливая драйверы. Для 70 видео реляционная база — избыточна.
Сколько стоит YouTube API?
Бесплатно. YouTube Data API v3 даёт 10 000 единиц квоты в день. Мой скрипт тратит 3-5 единиц за запуск — это 0.05% от лимита. Ключ создаётся в Google Cloud Console без привязки карты.
Можно ли повторить получение API-ключа через Chrome DevTools MCP?
Да, если у вас настроен Chrome DevTools MCP и вы авторизованы в Google Cloud Console в Chrome. Агент видит интерфейс через скриншоты и кликает по элементам. Но первоначальную авторизацию в Google нужно сделать вручную — MCP не вводит пароли.
Подписаться на обновления — @sereja_tech