<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Сережа Рис</title>
    <link>https://sereja.tech/</link>
    <description>Recent content on Сережа Рис</description>
    <generator>Hugo</generator>
    <language>ru</language>
    <atom:link href="https://sereja.tech/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Claude Max 5x и 20x: замеры через ccusage</title>
      <link>https://sereja.tech/blog/claude-max-real-limits-api-cost/</link>
      <pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-max-real-limits-api-cost/</guid>
      <description>&lt;p&gt;Claude Max я оцениваю через API-эквивалент своего реального потребления. В моих логах Max 5x за $100 показывал около $400 за неделю и около $1800 за месяц в другом периоде. На Max 20x недельный счётчик однажды дошёл до 72% за полтора дня.&lt;/p&gt;&#xA;&lt;p&gt;API-эквивалент показывает, сколько те же токены стоили бы при оплате через API. Anthropic даёт доступ в рамках динамических лимитов подписки. Фиксированную недельную сумму в долларах компания не публикует. Поэтому выбор тарифа лучше делать по своим логам за полную неделю: сколько API-долларов набралось, как быстро заполнились счётчики и мешал ли лимит работе.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как подключить подписку Anthropic к Hermes</title>
      <link>https://sereja.tech/blog/claude-max-hermes-telegram/</link>
      <pubDate>Tue, 04 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-max-hermes-telegram/</guid>
      <description>&lt;p&gt;Я хотел оставить Hermes самим ботом и подключить к нему Opus через действующую подписку Anthropic. Без API key, отдельного pay-as-you-go и Extra Usage.&lt;/p&gt;&#xA;&lt;p&gt;Связка заработала. Hermes отвечает в Telegram-личке и topics, хранит свои сессии и память, вызывает свои tools.&lt;/p&gt;&#xA;&lt;p&gt;Каждый основной model turn идёт через официальный Claude Code CLI.&lt;/p&gt;&#xA;&lt;p&gt;Мой живой тест выполнен на Claude Max и Opus.&lt;/p&gt;&#xA;&lt;p&gt;Архитектура привязана к авторизованной подписочной сессии Claude Code.&lt;/p&gt;&#xA;&lt;p&gt;Max здесь пример проверенного тарифа. Сама схема опирается на подписочную сессию Claude Code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Почему агент не может выбрать лучший код</title>
      <link>https://sereja.tech/blog/best-practices-code/</link>
      <pubDate>Mon, 03 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/best-practices-code/</guid>
      <description>&lt;p&gt;Универсальный лучший код невозможен. Скилл с лучшими практиками передаёт агенту известные решения и условия их применения. Конкретный выбор определяют цель продукта, цена ошибки, срок запуска и стоимость следующих изменений.&lt;/p&gt;&#xA;&lt;p&gt;Фраза «сделай лучший код» оставляет эти критерии пустыми. Агенту приходится восстанавливать их из контекста. При таких вводных он может предложить распространённую консервативную архитектуру, слишком дорогую для текущего этапа продукта.&lt;/p&gt;&#xA;&lt;p&gt;Рабочая последовательность начинается с цели. Затем появляются критерии, план и архитектура. После этого результат можно проверить по названным приоритетам.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kimi K3 за 1:47: сильный агент с одной проблемой</title>
      <link>https://sereja.tech/blog/kimi-k3-guide/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/kimi-k3-guide/</guid>
      <description>&lt;p&gt;Kimi K3 лучше всего работает как автономный исполнитель на длинной задаче. Ей нужен полный бриф, критерии приёмки и 20-30 минут без меня. В живом синхронном вайбкодинге её темп неудобен: пока она думает, эфир и чат уже ушли дальше.&lt;/p&gt;&#xA;&lt;p&gt;После почти двух часов на стриме Fable и GPT-5.6 Sol для меня всё ещё универсальнее. K3 входит в число самых сильных китайских моделей, которые я гонял. Я оставляю ей длинные визуальные и инженерные прогоны. Универсальной заменой стека она не стала.&lt;/p&gt;</description>
    </item>
    <item>
      <title>База знаний для агентов: вход, слои и обслуживание</title>
      <link>https://sereja.tech/blog/agent-knowledge-base/</link>
      <pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/agent-knowledge-base/</guid>
      <description>&lt;p&gt;Файлы становятся базой знаний для агентов, когда есть понятные точки входа, три слоя, связи с источниками, проверка актуальности и обслуживание во время явной работы. Один владелец факта здесь только один из механизмов. Файлы сохраняют состояние между сессиями; в следующем запуске агент обновляет связи и собирает под задачу нужный контекст, а позиции, решения и обязательства утверждает человек.&lt;/p&gt;&#xA;&lt;h2 id=&#34;папка-рядом-и-база-знаний&#34;&gt;&#xA;  &lt;span&gt;Папка рядом и база знаний&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%b0%d0%bf%d0%ba%d0%b0-%d1%80%d1%8f%d0%b4%d0%be%d0%bc-%d0%b8-%d0%b1%d0%b0%d0%b7%d0%b0-%d0%b7%d0%bd%d0%b0%d0%bd%d0%b8%d0%b9&#34; aria-label=&#34;Ссылка на раздел «Папка рядом и база знаний»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Папка с Markdown, хранилище Obsidian или набор проектных документов ещё не база знаний. Файлы просто лежат рядом. Копии появляются «для удобства». В промпт можно свалить почти всё. Память кажется историей чата.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPT-5.6 в работе: Sol, Terra и Luna</title>
      <link>https://sereja.tech/blog/gpt-5-6-review/</link>
      <pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/gpt-5-6-review/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://sereja.tech/blog/claude-fable-5-review/&#34;&gt;Fable уже задала для меня планку оркестрации&lt;/a&gt;: сама собирала команды агентов и запускала двухфазную критику. На стриме этот сценарий появился и в GPT-стеке. В Ultra команда подключилась самостоятельно, а в OMP Sol хорошо ставила агентам задачи. После эфира я оставил её основной моделью в этом стеке.&lt;/p&gt;&#xA;&lt;p&gt;Через час я уже спорил с её отчётом. Sol объявила готовой интерактивную страницу, а я открыл её в браузере и нашёл сломанное управление. Когда я разрешил вносить критичные правки, она полезла менять поисковое описание статьи, которая уже хорошо работала в Google. Работу команды я по-прежнему принимаю сам. Данных по Terra и Luna пока мало: я увидел по одному результату и могу говорить только о первых впечатлениях.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Почему автоматизация не работает без рецепта</title>
      <link>https://sereja.tech/blog/pipeline-born-by-hand/</link>
      <pubDate>Wed, 08 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/pipeline-born-by-hand/</guid>
      <description>&lt;p&gt;После одного урока мне нужно было опубликовать пост с картинкой. Мелочь: текст, обложка, отправка.&lt;/p&gt;&#xA;&lt;p&gt;В голове уже была красивая версия: агент берёт стабильные шаги, я смотрю результат. Почти пайплайн.&lt;/p&gt;&#xA;&lt;p&gt;Но красивая версия появилась позже. Сначала мы с агентом прошли цепочку шаг за шагом, поймали ограничения платформы, записали рецепт и проверки. Только после этого стало понятно, что можно отдавать агенту, а что должно остаться отдельным контролем.&lt;/p&gt;&#xA;&lt;p&gt;В этой статье пайплайн значит не «автоматизация» и не «красивый список шагов». Пайплайн это повторяемая цепочка с входом, понятными действиями, проверкой и памятью результата. Его можно отдать агенту только тогда, когда уже ясно, что считается готово, где нужен тестовый прогон и куда записывать итог.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я гоняю команду агентов из терминала в omp</title>
      <link>https://sereja.tech/blog/omp-orchestration/</link>
      <pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/omp-orchestration/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://omp.sh&#34;&gt;&lt;strong&gt;omp&lt;/strong&gt;&lt;/a&gt; (Oh My Pi) — это терминальный кодинг-харнесс: агент живёт прямо в терминале, читает и правит файлы, гоняет команды. И оркестрация в нём устроена так, что кнопки «запустить команду» попросту нет. Она сводится к трём вещам: ты остаёшься координатором, сажаешь под каждую роль свою модель и запускаешь работу как карту зависимостей. Grok на разведку, Opus на синтез. Два &lt;code&gt;scout&lt;/code&gt;&amp;lsquo;а ищут в разных файлах параллельно, синтез ждёт обоих на барьере. Примитивы живут внутри той же терминальной сессии, где ты уже сидишь. Без отдельного рантайма.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sonnet 5: скучный релиз с одним полезным навыком</title>
      <link>https://sereja.tech/blog/claude-sonnet-5-review/</link>
      <pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-sonnet-5-review/</guid>
      <description>&lt;p&gt;Sonnet 5 вышел 30 июня. Мой вердикт по итогам стрима в день релиза короткий: по ощущениям это апдейт на уровне 4.8, до полноценной пятой генерации модель не дотягивает. Полезный навык всё же нашёлся: она прилично держит роль исполнителя, когда планирует и режет задачу Opus.&lt;/p&gt;&#xA;&lt;p&gt;Тестировал Sonnet 5 вживую на стриме в день релиза: рой субагентов под её управлением строил мультиплеерную 3D-игру, клон Quake, а зрители потом играли в неё вживую в чате. Вот запись:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как тестировать LLM модели для написания текстов?</title>
      <link>https://sereja.tech/blog/text-evals-grader/</link>
      <pubDate>Tue, 30 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/text-evals-grader/</guid>
      <description>&lt;p&gt;Текстовый эвал это маленькая программа, которая читает черновик и ставит ему число. Как только у текста появляется число, вопрос «какая модель пишет лучше» перестаёт быть спором о вкусах: даёшь двум моделям один бриф, прогоняешь оба черновика через один грейдер, сравниваешь баллы. У меня такой грейдер стоит в пайплайне блога и решает, пускать черновик дальше или нет.&lt;/p&gt;&#xA;&lt;h2 id=&#34;какая-модель-пишет-лучше-это-вкусовщина&#34;&gt;&#xA;  &lt;span&gt;«Какая модель пишет лучше» это вкусовщина&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba%d0%b0%d1%8f-%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c-%d0%bf%d0%b8%d1%88%d0%b5%d1%82-%d0%bb%d1%83%d1%87%d1%88%d0%b5-%d1%8d%d1%82%d0%be-%d0%b2%d0%ba%d1%83%d1%81%d0%be%d0%b2%d1%89%d0%b8%d0%bd%d0%b0&#34; aria-label=&#34;Ссылка на раздел ««Какая модель пишет лучше» это вкусовщина»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Каждый месяц выходит новая модель. Все спорят, кто пишет живее: одни хвалят Opus, другие новый GPT, третьи Gemini. Аргументы у всех на уровне ощущений. Я и сам так делал: прочитал пару абзацев, вроде норм, оставил. Через неделю выходила следующая модель, и круг повторялся.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сто агентов, ноль результата</title>
      <link>https://sereja.tech/blog/orchestration-without-goals/</link>
      <pubDate>Tue, 30 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/orchestration-without-goals/</guid>
      <description>&lt;p&gt;Мультиагентная оркестрация не починит отсутствие цели. Она только быстрее накапливает мусор, если пропущены два шага: проверяемая цель всей системы и явное определение каждого агента. Сто агентов на красивой диаграмме дают ноль результата, когда никто не ответил на вопрос «что они производят и как это проверить».&lt;/p&gt;&#xA;&lt;h2 id=&#34;сто-агентов-ноль-результата&#34;&gt;&#xA;  &lt;span&gt;Сто агентов, ноль результата&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%81%d1%82%d0%be-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%be%d0%b2-%d0%bd%d0%be%d0%bb%d1%8c-%d1%80%d0%b5%d0%b7%d1%83%d0%bb%d1%8c%d1%82%d0%b0%d1%82%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Сто агентов, ноль результата»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Каждую неделю кто-то выкладывает схему своей оркестрации. Десяток узлов с именами: planner, researcher, critic, writer, reviewer. Стрелки между ними. Подпись «моя AI-команда из десяти агентов». Я смотрю на такую схему и ищу одну вещь: где написано, что система выдаёт на выходе и как понять, что результат верный. Обычно этого нет нигде.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Orca вместо четырёх терминалов</title>
      <link>https://sereja.tech/blog/orca-menedzher-agentov/</link>
      <pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/orca-menedzher-agentov/</guid>
      <description>&lt;p&gt;Четыре терминала открыто, в каждом свой агент, и ты уже не помнишь, какая задача где. Orca это и чинит: бесплатный оркестратор поверх Claude Code, Codex и многих других CLI-агентов. Одна доска на все проекты, под каждую задачу свой изолированный worktree, трекинг задач: всё ради того, чтобы зоопарк параллельных сессий жил в одном окне вместо восьми вкладок.&lt;/p&gt;&#xA;&lt;p&gt;Разбирал Orca вживую на стриме про свой AI-сетап 2026. Там весь стек: GLM, Factory, Codex и Orca в связке. В посте беру только Orca. Вот запись:&lt;/p&gt;</description>
    </item>
    <item>
      <title>undercast: оверлей для OBS, сделанный Fable 5</title>
      <link>https://sereja.tech/blog/undercast-obs-overlay-fable-5/</link>
      <pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/undercast-obs-overlay-fable-5/</guid>
      <description>&lt;p&gt;Рабочий код становится open source продуктом, когда ты проходишь короткий чеклист открытия: убираешь из него всё личное (включая git-историю, не только текст), даёшь имя, вешаешь лицензию, пишешь документацию для человека и для агента. Я раздал эти пункты субагентам, и они прошли их параллельно за вечер. Но ни один пункт нельзя пропустить — особенно историю коммитов: текст чистится за минуту, а историю надо принять осознанно.&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/TPGyDvxL9fQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;код-работает--но-это-ещё-не-продукт&#34;&gt;&#xA;  &lt;span&gt;Код работает — но это ещё не продукт&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%be%d0%b4-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82--%d0%bd%d0%be-%d1%8d%d1%82%d0%be-%d0%b5%d1%89%d1%91-%d0%bd%d0%b5-%d0%bf%d1%80%d0%be%d0%b4%d1%83%d0%ba%d1%82&#34; aria-label=&#34;Ссылка на раздел «Код работает — но это ещё не продукт»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня был внутренний оверлей для OBS. Бегущая строка внизу картинки, план стрима с галочками по этапам, полноэкранные заставки между темами, виджет для промптов. Zero dependencies, один Node-сервер, состояние строки в одном файле, текст в OBS обновляется мгновенно через SSE. Я просил агентов написать его раньше, под себя, и он делал ровно то, что мне было нужно на стримах.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Генерируем таймкоды для YouTube из транскрипта с помощью AI</title>
      <link>https://sereja.tech/blog/youtube-chapters-split-concern/</link>
      <pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/youtube-chapters-split-concern/</guid>
      <description>&lt;p&gt;Таймкоды для YouTube AI не изобретёт — и не должен. Точное время начала темы — это не то, что модель «знает»: она не видела секунд, она видела текст. Просить её выдать &lt;code&gt;12:00&lt;/code&gt; — значит просить выдумать правдоподобное число. И она его выдумывает. Поэтому таймкоды на длинных стримах систематически встают криво: не модель плохая, а задача поставлена неправильно.&lt;/p&gt;&#xA;&lt;p&gt;Правильно — разделить заботы. Где меняется тема, описывает модель: это про смысл. Когда именно она меняется, находит обычный детерминированный код по реальным меткам из распознавания речи. Я зову это split-concern, и без него таймкоды уезжают на минуты.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Запустил AI-радио, которое делают агенты</title>
      <link>https://sereja.tech/blog/ai-radio-agents/</link>
      <pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/ai-radio-agents/</guid>
      <description>&lt;p&gt;За одну сессию Claude Code создал телеграм-канал, написал текст песни, сгенерировал саму песню и опубликовал готовый трек. От меня была одна команда. Всё остальное — текст, музыку, канал, постинг — сделал агент-оркестратор и его субагенты. Результат лежит здесь: &lt;a href=&#34;https://t.me/ris_fm/2&#34;&gt;t.me/ris_fm/2&lt;/a&gt;. Делал это вживую — на &lt;a href=&#34;https://youtube.com/live/TPGyDvxL9fQ?feature=share&#34;&gt;стриме с моделью Claude Fable 5&lt;/a&gt;, у людей на глазах.&lt;/p&gt;&#xA;&lt;p&gt;Расскажу, как это вышло — и почему ключевая работа была сделана ещё до того, как я нажал enter.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Перешёл на Claude Fable 5: цены, effort, кейсы</title>
      <link>https://sereja.tech/blog/claude-fable-5-review/</link>
      <pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-fable-5-review/</guid>
      <description>&lt;p&gt;Вчера, 9 июня, Anthropic выпустила Claude Fable 5 — новый класс моделей под названием Mythos, четвёртый в иерархии после Haiku, Sonnet и Opus. Для вайбкодера это значит одно: появилась новая рабочая модель, на которую есть смысл пересесть, если задача поставлена чётко. По прайсу вдвое дороже Opus, но отдача с одной задачи выходит выгоднее — и ниже я разберу почему.&lt;/p&gt;&#xA;&lt;p&gt;Я провёл стрим прямо в день релиза. Читал пресс-релиз вслух, тыкал Computer Use и поймал отличный анти-кейс с 32 агентами, а агент тем временем собрал четыре проекта — мультиплеер-шутер с деплоем за полчаса, арканоид с управлением рукой, клон Majesty и Chrome-расширение. Всё, о чём пишу дальше — оттуда, со скриншотами и ссылками на работающие игры.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OTel для Claude Code — рентген твоих скиллов</title>
      <link>https://sereja.tech/blog/claude-code-skills-grafana/</link>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-skills-grafana/</guid>
      <description>&lt;p&gt;Grafana — это дашборд, который показывает, какие из моих скиллов в Claude Code реально вызываются, а какие висят мёртвым грузом. Нативного счётчика на скилл не существует — тикет &lt;a href=&#34;https://github.com/anthropics/claude-code/issues/35319&#34;&gt;#35319 «Skill invocation tracking»&lt;/a&gt; висит открытым с 17 марта. Решается через стандартный OpenTelemetry-стек, который агент собирает локально в Docker за один вечер.&lt;/p&gt;&#xA;&lt;h2 id=&#34;зачем-мне-вообще-видеть-скиллы&#34;&gt;&#xA;  &lt;span&gt;Зачем мне вообще видеть скиллы&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b7%d0%b0%d1%87%d0%b5%d0%bc-%d0%bc%d0%bd%d0%b5-%d0%b2%d0%be%d0%be%d0%b1%d1%89%d0%b5-%d0%b2%d0%b8%d0%b4%d0%b5%d1%82%d1%8c-%d1%81%d0%ba%d0%b8%d0%bb%d0%bb%d1%8b&#34; aria-label=&#34;Ссылка на раздел «Зачем мне вообще видеть скиллы»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня в &lt;code&gt;~/.claude/skills/&lt;/code&gt; лежит около 40 своих скиллов. Сверху — плагины (&lt;code&gt;superpowers&lt;/code&gt;, &lt;code&gt;codex&lt;/code&gt;, &lt;code&gt;frontend-design&lt;/code&gt; и ещё несколько). На круг получается ~80 установленных. Подозрение давно простое: половина — мёртвый груз. Кто-то писался под разовую задачу и больше не звался ни разу. Кто-то дублирует другой скилл. Кто-то вообще не подхватывается, потому что триггер сформулирован криво.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Свой Miro за 30 минут вместо подписки</title>
      <link>https://sereja.tech/blog/svoy-miro-za-30-minut/</link>
      <pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/svoy-miro-za-30-minut/</guid>
      <description>&lt;h2 id=&#34;как-добавить-свой-live-whiteboard-прямо-в-деке-с-синхро-на-ipad&#34;&gt;&#xA;  &lt;span&gt;Как добавить свой live-whiteboard прямо в деке с синхро на iPad&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba-%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%b8%d1%82%d1%8c-%d1%81%d0%b2%d0%be%d0%b9-live-whiteboard-%d0%bf%d1%80%d1%8f%d0%bc%d0%be-%d0%b2-%d0%b4%d0%b5%d0%ba%d0%b5-%d1%81-%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be-%d0%bd%d0%b0-ipad&#34; aria-label=&#34;Ссылка на раздел «Как добавить свой live-whiteboard прямо в деке с синхро на iPad»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Коротко: попросил Claude Code на Opus 4.6 положить прозрачный canvas поверх существующего React-дека, повесить на него PointerEvent с давлением, и поднять локальный WebSocket-broadcaster, который рассылает мазки между ноутбуком и iPad. Никаких SaaS, всё в локальной сети, четыре итерации до стабильной версии. Сегодня в 19:00 — лайв Урока 2 «Личной Корпорации», и мне нужно было рисовать прямо по слайдам с iPad, а не дёргаться в Excalidraw в соседнем табе.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как трекать задачи агентом в нескольких репо</title>
      <link>https://sereja.tech/blog/tracking-tasks-agent-multi-repo/</link>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/tracking-tasks-agent-multi-repo/</guid>
      <description>&lt;p&gt;Если трек тянется больше двух недель и артефакты оседают в двух-трёх репо — это уже не issue. Это инициатива. Для таких случаев у GitHub есть готовая форма — её описали William Salazar и Kitty Chiu в &lt;a href=&#34;https://wellarchitected.github.com/library/architecture/recommendations/implementing-polyrepo-engineering/&#34;&gt;Well-Architected библиотеке GitHub&lt;/a&gt; в феврале. Пять простых элементов делают трек читаемым и для тебя, и для AI-агента, который через месяц должен будет восстановить контекст.&lt;/p&gt;&#xA;&lt;h2 id=&#34;момент-когда-становится-нужна-форма&#34;&gt;&#xA;  &lt;span&gt;Момент, когда становится нужна форма&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bc%d0%be%d0%bc%d0%b5%d0%bd%d1%82-%d0%ba%d0%be%d0%b3%d0%b4%d0%b0-%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d1%81%d1%8f-%d0%bd%d1%83%d0%b6%d0%bd%d0%b0-%d1%84%d0%be%d1%80%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Момент, когда становится нужна форма»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Вот сценарий, в который я упёрся. Партнёрский образовательный трек на два месяца. Деки — в одном репо. Программа и учебные материалы — в другом. Карточка сделки в CRM — в третьем. Фронтенд лендинга партнёрки — в четвёртом. Бэкенд с биллингом и учётом участников — в пятом. Плюс внешние ссылки: Luma, Zoom, чат с партнёром.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я научил Claude Code писать техно-музыку</title>
      <link>https://sereja.tech/blog/claude-code-techno-strudel-mcp/</link>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-techno-strudel-mcp/</guid>
      <description>&lt;p&gt;Открыл strudel.cc по ссылке, которую прислал друг. Дал Claude Code на Opus 4.7 одну фразу — «c помощью девтулс напиши трек техно». Через Chrome DevTools MCP агент влез в редактор, залил семь параллельных дорожек, кликнул Play и заиграло техно на 135 BPM. Никакого файла на диске. Всё живьём в браузере.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-прислал-друг&#34;&gt;&#xA;  &lt;span&gt;Что прислал друг&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d0%bf%d1%80%d0%b8%d1%81%d0%bb%d0%b0%d0%bb-%d0%b4%d1%80%d1%83%d0%b3&#34; aria-label=&#34;Ссылка на раздел «Что прислал друг»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Ссылка выглядела так: &lt;code&gt;https://strudel.cc/#JDogcygiW2JkIDxoaCBvaD5dKjIiKS5iYW5rKCJ0cjkwOSIpLmRlYyguNCk%3D&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Хвост после &lt;code&gt;#&lt;/code&gt; — это base64. Декодируется в одну строчку:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я включил Claude Code в режим без вопросов</title>
      <link>https://sereja.tech/blog/cc-alias-bypass-permissions/</link>
      <pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/cc-alias-bypass-permissions/</guid>
      <description>&lt;p&gt;Одна строка в &lt;code&gt;~/.zshrc&lt;/code&gt; — и Claude Code больше не спрашивает разрешение на каждое действие. Флаг &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt; выглядит страшно, но внутри своего окружения это нормальный рабочий режим, в котором я живу каждый день. Ниже — правила, по которым я его включаю, и границы, за которые не выхожу.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-я-сделал-в-этой-сессии&#34;&gt;&#xA;  &lt;span&gt;Что я сделал в этой сессии&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%8f-%d1%81%d0%b4%d0%b5%d0%bb%d0%b0%d0%bb-%d0%b2-%d1%8d%d1%82%d0%be%d0%b9-%d1%81%d0%b5%d1%81%d1%81%d0%b8%d0%b8&#34; aria-label=&#34;Ссылка на раздел «Что я сделал в этой сессии»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Попросил агента добавить третий алиас на ту же команду. До этого было два — &lt;code&gt;lfg&lt;/code&gt; и &lt;code&gt;дап&lt;/code&gt; (это &amp;ldquo;let&amp;rsquo;s fucking go&amp;rdquo; и &amp;ldquo;давай, поехали&amp;rdquo; в русской раскладке, чтобы не переключать язык). Теперь есть ещё &lt;code&gt;cc&lt;/code&gt; — короткий, на автомате, из любого состояния руки. Все три указывают на одно и то же: &lt;code&gt;claude --dangerously-skip-permissions&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Написал скилл для аудита продукта в Claude Code</title>
      <link>https://sereja.tech/blog/product-data-audit-skill/</link>
      <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/product-data-audit-skill/</guid>
      <description>&lt;p&gt;Скилл в Claude Code — зашитая методология: один вызов запускает 12-секционный аудит бизнеса с интерактивным HTML-отчётом. 5 файлов, 480 строк. Агент сам читает проект, собирает данные из восьми категорий, проверяет 18 операционных артефактов и открывает результат в браузере. Процесс, который раньше занимал полстраницы ручного промпта, превратился в две команды.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-аудит-с-чистого-листа&#34;&gt;&#xA;  &lt;span&gt;Проблема: аудит с чистого листа&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b0%d1%83%d0%b4%d0%b8%d1%82-%d1%81-%d1%87%d0%b8%d1%81%d1%82%d0%be%d0%b3%d0%be-%d0%bb%d0%b8%d1%81%d1%82%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема: аудит с чистого листа»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Раз в месяц мне нужно понять, что происходит с продуктом. Где деньги, где узкие места, какие данные устарели. Раньше я каждый раз писал агенту заново: «прочитай data.md, product.md, посмотри issues, проверь метрики, напиши отчёт». Полстраницы промпта.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Эту статью написал мой агент по тикету</title>
      <link>https://sereja.tech/blog/paperclip-ai-company-agents/</link>
      <pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/paperclip-ai-company-agents/</guid>
      <description>&lt;p&gt;Paperclip — это open-source контрол-плейн, который превращает набор одиночных AI-агентов в управляемую компанию. Вместо двадцати вкладок с агентами — org-chart с ролями, тикет-система и расписание. Ты задаёшь миссию, а агенты сами разбирают задачи из очереди. Если OpenClaw — это один сотрудник, то Paperclip — целая компания.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-двадцать-вкладок-и-никто-не-помнит-контекст&#34;&gt;&#xA;  &lt;span&gt;Проблема: двадцать вкладок и никто не помнит контекст&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b4%d0%b2%d0%b0%d0%b4%d1%86%d0%b0%d1%82%d1%8c-%d0%b2%d0%ba%d0%bb%d0%b0%d0%b4%d0%be%d0%ba-%d0%b8-%d0%bd%d0%b8%d0%ba%d1%82%d0%be-%d0%bd%d0%b5-%d0%bf%d0%be%d0%bc%d0%bd%d0%b8%d1%82-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%ba%d1%81%d1%82&#34; aria-label=&#34;Ссылка на раздел «Проблема: двадцать вкладок и никто не помнит контекст»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Три параллельных Claude Code сессии. В одной — правки в блоге. В другой — research для новой статьи. В третьей — баг в Telegram-боте. Ты переключаешься между ними, держишь контекст в голове, копируешь результаты из одной сессии в другую. Это работает, пока задач три.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software for One: софт, который нужен только тебе</title>
      <link>https://sereja.tech/blog/software-for-one-personal-tools/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/software-for-one-personal-tools/</guid>
      <description>&lt;p&gt;Software for One — программа, которая существует в единственном экземпляре, написана под одного человека и решает именно его задачу. Термин ввёл Кевин Руз из NYT в феврале 2025. С тех пор AI-инструменты для кода стали настолько доступными, что персональный софт создают юристы, дизайнеры, директора парков — люди без единой строчки кода в резюме. У меня таких утилит больше сорока. Это не хобби — это новый способ работать.&lt;/p&gt;&#xA;&lt;h2 id=&#34;одиннадцать-названий-одного-явления&#34;&gt;&#xA;  &lt;span&gt;Одиннадцать названий одного явления&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%be%d0%b4%d0%b8%d0%bd%d0%bd%d0%b0%d0%b4%d1%86%d0%b0%d1%82%d1%8c-%d0%bd%d0%b0%d0%b7%d0%b2%d0%b0%d0%bd%d0%b8%d0%b9-%d0%be%d0%b4%d0%bd%d0%be%d0%b3%d0%be-%d1%8f%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f&#34; aria-label=&#34;Ссылка на раздел «Одиннадцать названий одного явления»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Когда десяток независимых людей одновременно придумывают термин для одного и того же — это не совпадение. Это признак, что явление уже случилось.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Слои контекста: организуем файлы по скорости изменения</title>
      <link>https://sereja.tech/blog/context-architecture-lifecycle-split/</link>
      <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/context-architecture-lifecycle-split/</guid>
      <description>&lt;p&gt;Структура папок в проекте определяет, какой контекст попадёт в окно агента. Lifecycle-split — группировка файлов по скорости изменения, а не по теме — снижает токен-шум и повышает качество решений без смены модели. Я перестроил один проект с 66 файлов в корне до 6, сократил контекст root с 46k до 20k токенов. Агент стал принимать решения точнее.&lt;/p&gt;&#xA;&lt;h2 id=&#34;агент-ведёт-себя-странно--виновата-не-модель&#34;&gt;&#xA;  &lt;span&gt;Агент ведёт себя странно — виновата не модель&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b0%d0%b3%d0%b5%d0%bd%d1%82-%d0%b2%d0%b5%d0%b4%d1%91%d1%82-%d1%81%d0%b5%d0%b1%d1%8f-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%bd%d0%be--%d0%b2%d0%b8%d0%bd%d0%be%d0%b2%d0%b0%d1%82%d0%b0-%d0%bd%d0%b5-%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Агент ведёт себя странно — виновата не модель»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Типичная ситуация: агент делает не то. Выбирает устаревшие данные, путает текущий оффер с историческим, предлагает создать файл, который уже существует в другой папке.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AGENTS.md: что это и как подружить Claude Code с Codex</title>
      <link>https://sereja.tech/blog/agents-md-source-of-truth/</link>
      <pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/agents-md-source-of-truth/</guid>
      <description>&lt;p&gt;AGENTS.md — файл в корне репозитория, который описывает правила проекта для любого AI-агента: Codex, Cursor, Copilot, Gemini CLI, Aider и других. Если коротко, это README для агентов: один файл, одна правда. 60 000+ репозиториев уже используют его, стандарт поддерживается Linux Foundation и читается нативно двадцатью инструментами. Вот как я внедрил AGENTS.md у себя и решил главную проблему — Claude Code читает не его, а CLAUDE.md.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-агенты-живут-в-разных-реальностях&#34;&gt;&#xA;  &lt;span&gt;Проблема: агенты живут в разных реальностях&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d1%8b-%d0%b6%d0%b8%d0%b2%d1%83%d1%82-%d0%b2-%d1%80%d0%b0%d0%b7%d0%bd%d1%8b%d1%85-%d1%80%d0%b5%d0%b0%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d1%8f%d1%85&#34; aria-label=&#34;Ссылка на раздел «Проблема: агенты живут в разных реальностях»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня три агента на проекте. Claude Code на Opus 4.6 — основной, делает всё: от фич до рефакторинга. Codex CLI на gpt-5.4-codex — крупные задачи и финальное ревью. Cursor — UI-правки, когда нужно быстро поправить кнопку.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NotebookLM &#43; Claude Code: бесплатный RAG за 5 минут</title>
      <link>https://sereja.tech/blog/notebooklm-claude-code-rag/</link>
      <pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/notebooklm-claude-code-rag/</guid>
      <description>&lt;p&gt;RAG (Retrieval-Augmented Generation) — это когда AI не выдумывает ответ, а сначала ищет в твоих документах и отвечает на основе найденного, с цитатами. NotebookLM от Google делает именно это. Загружаешь файлы, задаёшь вопрос, получаешь ответ со ссылкой на конкретное место в источнике.&lt;/p&gt;&#xA;&lt;p&gt;Я подключил NotebookLM к Claude Code, и теперь два AI работают в паре: загружаю записи занятий, PDF, ссылки, спрашиваю на обычном языке. Я только пишу промпт.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-rag-есть-api-нет&#34;&gt;&#xA;  &lt;span&gt;Проблема: RAG есть, API нет&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-rag-%d0%b5%d1%81%d1%82%d1%8c-api-%d0%bd%d0%b5%d1%82&#34; aria-label=&#34;Ссылка на раздел «Проблема: RAG есть, API нет»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;NotebookLM — мощная штука. Загружаешь документы, Gemini индексирует, отвечает с точными цитатами. Бесплатно. Работает из браузера.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Haiku, Sonnet, Opus: какую модель ставить субагенту</title>
      <link>https://sereja.tech/blog/subagent-model-cost/</link>
      <pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/subagent-model-cost/</guid>
      <description>&lt;p&gt;Субагент без &lt;code&gt;model:&lt;/code&gt; наследует Opus. Платишь в пять раз больше за работу, которую Haiku сделает так же. Я обнаружил это когда попросил агента проаудитировать все 55 скиллов. Четыре из четырнадцати с субагентами не указывали модель. Каждый молча работал на Opus.&lt;/p&gt;&#xA;&lt;h2 id=&#34;невидимый-счётчик&#34;&gt;&#xA;  &lt;span&gt;Невидимый счётчик&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bd%d0%b5%d0%b2%d0%b8%d0%b4%d0%b8%d0%bc%d1%8b%d0%b9-%d1%81%d1%87%d1%91%d1%82%d1%87%d0%b8%d0%ba&#34; aria-label=&#34;Ссылка на раздел «Невидимый счётчик»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;55 скиллов. 14 используют субагентов через Task tool. На какой модели они работают — я не задумывался. Пока не решил навести порядок.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Symphony: демон на Elixir раздаёт задачи Codex</title>
      <link>https://sereja.tech/blog/symphony-codex-orchestrator/</link>
      <pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/symphony-codex-orchestrator/</guid>
      <description>&lt;p&gt;Symphony — open-source демон на Elixir/OTP от OpenAI, который превращает управление кодинг-агентами в управление задачами. Поллит Linear, находит issue в статусе Todo, создаёт изолированный workspace через git clone, запускает Codex в режиме app-server и ведёт задачу по полному циклу — от первого коммита до мёржа — без участия человека. Не IDE-плагин и не чат-обёртка. Фоновый оркестратор, который работает пока ты спишь.&lt;/p&gt;&#xA;&lt;h2 id=&#34;под-капотом-кто-на-самом-деле-писал-symphony&#34;&gt;&#xA;  &lt;span&gt;Под капотом: кто на самом деле писал Symphony&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d0%b4-%d0%ba%d0%b0%d0%bf%d0%be%d1%82%d0%be%d0%bc-%d0%ba%d1%82%d0%be-%d0%bd%d0%b0-%d1%81%d0%b0%d0%bc%d0%be%d0%bc-%d0%b4%d0%b5%d0%bb%d0%b5-%d0%bf%d0%b8%d1%81%d0%b0%d0%bb-symphony&#34; aria-label=&#34;Ссылка на раздел «Под капотом: кто на самом деле писал Symphony»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Мне стало интересно, кто стоит за проектом. Попросил агента покопаться в git history — и провалился в кроличью нору.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я собрал совет директоров из субагентов</title>
      <link>https://sereja.tech/blog/board-of-advisors-subagents/</link>
      <pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/board-of-advisors-subagents/</guid>
      <description>&lt;p&gt;Один агент — одна точка зрения. Board of Advisors — скилл для Claude Code, который собирает консилиум из нескольких экспертов, запускает их параллельно на одних данных и сводит результаты в вердикт. За 46 сессий через него прошли 29 реальных персон — от Steve Jobs до Gosha Rubchinskiy. Каждый раз состав совета определял, какие рекомендации я получу.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-одного-взгляда&#34;&gt;&#xA;  &lt;span&gt;Проблема одного взгляда&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%be%d0%b4%d0%bd%d0%be%d0%b3%d0%be-%d0%b2%d0%b7%d0%b3%d0%bb%d1%8f%d0%b4%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема одного взгляда»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Я долго работал в режиме «один промпт — один ответ». Спрашиваешь агента про лендинг — получаешь один набор правок. Спрашиваешь про стратегию — одну стратегию. Никто не скажет «а ты подумал вот об этом?».&lt;/p&gt;</description>
    </item>
    <item>
      <title>llms.txt: делаю блог читаемым для агентов</title>
      <link>https://sereja.tech/blog/llms-txt-agent-readable-web/</link>
      <pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/llms-txt-agent-readable-web/</guid>
      <description>&lt;p&gt;llms.txt &amp;mdash; стандарт, объясняющий AI-агентам структуру сайта. Описания в нём &amp;mdash; не SEO-тексты, а промпты: ты программируешь, как агент воспримет твой контент. 844 тысячи сайтов уже добавили llms.txt. Ноль LLM-провайдеров официально подтвердили, что читают. А мой студент скормил блог мультиагентному боту &amp;mdash; и агент назвал контент «золотым».&lt;/p&gt;&#xA;&lt;h2 id=&#34;олег-бот-и-золотой-контент&#34;&gt;&#xA;  &lt;span&gt;Олег, бот и «золотой контент»&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%be%d0%bb%d0%b5%d0%b3-%d0%b1%d0%be%d1%82-%d0%b8-%d0%b7%d0%be%d0%bb%d0%be%d1%82%d0%be%d0%b9-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%bd%d1%82&#34; aria-label=&#34;Ссылка на раздел «Олег, бот и «золотой контент»»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Олег &amp;mdash; студент моего &lt;a href=&#34;https://vibecoding.phd/&#34;&gt;Кружка Вайбкодинга&lt;/a&gt;. Он собрал мультиагентного бота и для теста скормил ему sereja.tech. Бот обработал 80+ статей и вернул вердикт: контент «золотой», тематика цельная, всё связано.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Один JSON кормит всех: как строить data layer для агентов</title>
      <link>https://sereja.tech/blog/data-layer-for-agents/</link>
      <pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/data-layer-for-agents/</guid>
      <description>&lt;p&gt;Claude Code за одну сессию построил полноценную YouTube-инфраструктуру: исследовал квоты API, спроектировал схему данных, получил API-ключ через браузер, написал скрипт-коллектор и настроил ежедневный запуск. Результат &amp;mdash; файл &lt;code&gt;videos.json&lt;/code&gt;, который на свежем snapshot от 22 марта 2026 уже хранит 72 видео, 3710 подписчиков и 202K просмотров. Этот файл теперь кормит данными агентов из совершенно разных проектов.&lt;/p&gt;&#xA;&lt;h2 id=&#34;зачем-мне-youtube-база&#34;&gt;&#xA;  &lt;span&gt;Зачем мне YouTube-база&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b7%d0%b0%d1%87%d0%b5%d0%bc-%d0%bc%d0%bd%d0%b5-youtube-%d0%b1%d0%b0%d0%b7%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Зачем мне YouTube-база»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня несколько агентов в разных проектах, которые работают с YouTube-данными. &lt;a href=&#34;https://sereja.tech/blog/video-pipeline-claude-code/&#34;&gt;Видео-пайплайн&lt;/a&gt; при публикации урока хочет знать, какие видео уже есть на канале. Агент для идей блог-постов сканирует темы видео, чтобы не повторяться. Агент для обложек проверяет, &lt;a href=&#34;https://sereja.tech/blog/youtube-thumbnails-html-code/&#34;&gt;какие thumbnail уже сгенерированы&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Аналитика чата на автопилоте через GitHub Actions</title>
      <link>https://sereja.tech/blog/github-agentic-workflows-telegram-analytics/</link>
      <pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/github-agentic-workflows-telegram-analytics/</guid>
      <description>&lt;p&gt;GitHub Agentic Workflows позволяет запускать AI-агента по расписанию — как cron, только вместо скрипта работает агент, который думает. Я поставил на автопилот ежедневную аналитику Telegram-чата: агент сам просыпается, читает данные, находит тренды и публикует отчёт как GitHub Issue. Без моего участия.&lt;/p&gt;&#xA;&lt;h2 id=&#34;утренний-отчёт-которого-никто-не-писал&#34;&gt;&#xA;  &lt;span&gt;Утренний отчёт, которого никто не писал&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%83%d1%82%d1%80%d0%b5%d0%bd%d0%bd%d0%b8%d0%b9-%d0%be%d1%82%d1%87%d1%91%d1%82-%d0%ba%d0%be%d1%82%d0%be%d1%80%d0%be%d0%b3%d0%be-%d0%bd%d0%b8%d0%ba%d1%82%d0%be-%d0%bd%d0%b5-%d0%bf%d0%b8%d1%81%d0%b0%d0%bb&#34; aria-label=&#34;Ссылка на раздел «Утренний отчёт, которого никто не писал»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Представь: каждое утро в репозитории появляется свежий отчёт. Кто вчера писал в чате. О чём говорили. Какие темы набирают обороты. И всё это — без единого ручного действия.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Персональная корпорация: ставим агентов на расписание</title>
      <link>https://sereja.tech/blog/launchd-macos-agent-scheduler/</link>
      <pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/launchd-macos-agent-scheduler/</guid>
      <description>&lt;p&gt;launchd — встроенный планировщик macOS, который запускает задачи по расписанию. В отличие от cron, он помнит пропущенные запуски: закрыл крышку ноутбука в 18:55, открыл в 21:00 — задача на 19:00 всё равно выполнится. Попросить Claude Code настроить launchd проще, чем разбираться в его XML-конфигах самому.&lt;/p&gt;&#xA;&lt;h2 id=&#34;зачем-вайбкодеру-планировщик&#34;&gt;&#xA;  &lt;span&gt;Зачем вайбкодеру планировщик&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b7%d0%b0%d1%87%d0%b5%d0%bc-%d0%b2%d0%b0%d0%b9%d0%b1%d0%ba%d0%be%d0%b4%d0%b5%d1%80%d1%83-%d0%bf%d0%bb%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d1%89%d0%b8%d0%ba&#34; aria-label=&#34;Ссылка на раздел «Зачем вайбкодеру планировщик»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У каждого, кто автоматизирует рутину через агентов, накапливаются задачи на повтор. Отправить пост в Telegram в 19:00. Собрать аналитику чата утром. Почистить временные файлы раз в неделю.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini 3.1 Pro — мастер SVG, но не агент</title>
      <link>https://sereja.tech/blog/gemini-3-1-pro-svg-animations/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/gemini-3-1-pro-svg-animations/</guid>
      <description>&lt;p&gt;Gemini 3.1 Pro генерирует SVG-анимации с параллаксом, слоями и переходами за один промпт. Без внешних библиотек — нативный SVG с &lt;code&gt;&amp;lt;animate&amp;gt;&lt;/code&gt; и &lt;code&gt;&amp;lt;animateTransform&amp;gt;&lt;/code&gt;. Google &lt;a href=&#34;https://blog.google/technology/google-deepmind/gemini-3-1-pro/&#34;&gt;выпустил модель&lt;/a&gt; 19 февраля 2026. За неделю я понял: узкий специалист. Но настолько хороший, что ему стоит держать место в арсенале.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;iframe src=&#34;https://sereja.tech/demos/peacock-bicycle.html&#34; width=&#34;100%&#34; height=&#34;600&#34; style=&#34;border: none; border-radius: 12px;&#34; loading=&#34;lazy&#34;&gt;&lt;/iframe&gt;&#xA;&lt;figcaption style=&#34;text-align: center; color: #94a3b8; font-size: 0.9em; margin-top: 8px;&#34;&gt;Павлин на велосипеде — Canvas-анимация, сгенерированная Gemini 3.1 Pro за один промпт&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;почему-я-вообще-полез-в-gemini&#34;&gt;&#xA;  &lt;span&gt;Почему я вообще полез в Gemini&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d1%8f-%d0%b2%d0%be%d0%be%d0%b1%d1%89%d0%b5-%d0%bf%d0%be%d0%bb%d0%b5%d0%b7-%d0%b2-gemini&#34; aria-label=&#34;Ссылка на раздел «Почему я вообще полез в Gemini»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;На &lt;a href=&#34;https://youtube.com/live/8oJQyTai2X4&#34;&gt;стриме&lt;/a&gt; решил потестировать Gemini 3.1 Pro. Не потому что ищу замену Claude Code — а потому что слышал конкретное: эта модель умеет SVG. В Canvas-режиме результат видно сразу, не надо копировать код в файл и открывать в браузере. Написал промпт — увидел анимацию.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remotion вместо ffmpeg: программное видео для вайбкодеров</title>
      <link>https://sereja.tech/blog/remotion-programmatic-video-vibecoding/</link>
      <pubDate>Tue, 24 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/remotion-programmatic-video-vibecoding/</guid>
      <description>&lt;p&gt;Remotion &amp;mdash; лучший инструмент для генерации видео через AI-агента. React-компоненты читаемы для модели, параметры передаются через JSON, preview работает прямо в браузере. Я попробовал четыре варианта и остановился на нём.&lt;/p&gt;&#xA;&lt;p&gt;Задача простая: хочу, чтобы агент собирал промо-ролики из данных. Передаю название продукта, слоган, цвета бренда &amp;mdash; получаю MP4 на выходе. Без ручной работы, без After Effects, без дизайнера. О видео-пайплайне целиком &lt;a href=&#34;https://sereja.tech/blog/video-pipeline-claude-code/&#34;&gt;писал раньше&lt;/a&gt; &amp;mdash; там субтитры, превью, загрузка. Сейчас &amp;mdash; про генерацию самого видео.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Из вайбкодера в CEO: Personal Corp на GitHub</title>
      <link>https://sereja.tech/blog/vibecoder-to-ceo-personal-corp-github/</link>
      <pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/vibecoder-to-ceo-personal-corp-github/</guid>
      <description>&lt;div class=&#34;svg-header-container&#34; style=&#34;width:100%; max-width: 800px; margin: 2rem auto; background: #ffffff; border: 1px solid #000000; font-family: &#39;Courier New&#39;, Courier, monospace;&#34;&gt;&#xA;&lt;svg viewBox=&#34;0 0 800 380&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34; style=&#34;display: block; shape-rendering: crispEdges;&#34;&gt;&#xA;  &lt;style&gt;&#xA;    .node-box { fill: #ffffff; stroke: #000000; stroke-width: 1px; }&#xA;    .node-title { fill: #000000; font-weight: bold; font-size: 14px; }&#xA;    .node-desc { fill: #000000; font-size: 12px; }&#xA;    .path-solid { fill: none; stroke: #000000; stroke-width: 2px; }&#xA;    .task-bg { fill: #000000; }&#xA;    .task-text { fill: #ffffff; font-size: 11px; font-weight: bold; }&#xA;    .sub-bg { fill: #ffffff; stroke: #000000; stroke-width: 1px; }&#xA;    .sub-text { fill: #000000; font-size: 11px; font-weight: bold; }&#xA;    .status-text { fill: #ffffff; font-size: 13px; font-weight: bold; font-family: &#39;Courier New&#39;, Courier, monospace; }&#xA;    @keyframes op1 { 0%, 16.66% { opacity: 1; } 16.67%, 100% { opacity: 0; } }&#xA;    @keyframes op2 { 0%, 16.66% { opacity: 0; } 16.67%, 33.33% { opacity: 1; } 33.34%, 100% { opacity: 0; } }&#xA;    @keyframes op3 { 0%, 33.33% { opacity: 0; } 33.34%, 50.00% { opacity: 1; } 50.01%, 100% { opacity: 0; } }&#xA;    @keyframes op4 { 0%, 50.00% { opacity: 0; } 50.01%, 66.66% { opacity: 1; } 66.67%, 100% { opacity: 0; } }&#xA;    @keyframes op5 { 0%, 66.66% { opacity: 0; } 66.67%, 83.33% { opacity: 1; } 83.34%, 100% { opacity: 0; } }&#xA;    @keyframes op6 { 0%, 83.33% { opacity: 0; } 83.34%, 100% { opacity: 1; } }&#xA;    @keyframes type {&#xA;      0% { width: 0; }&#xA;      6.25% { width: 800px; }&#xA;      16.66% { width: 800px; }&#xA;      16.67% { width: 0; }&#xA;      22.91% { width: 800px; }&#xA;      33.33% { width: 800px; }&#xA;      33.34% { width: 0; }&#xA;      39.58% { width: 800px; }&#xA;      50.00% { width: 800px; }&#xA;      50.01% { width: 0; }&#xA;      56.25% { width: 800px; }&#xA;      66.66% { width: 800px; }&#xA;      66.67% { width: 0; }&#xA;      72.91% { width: 800px; }&#xA;      83.33% { width: 800px; }&#xA;      83.34% { width: 0; }&#xA;      89.58% { width: 800px; }&#xA;      100% { width: 800px; }&#xA;    }&#xA;    .ld { fill: none; stroke: #000; stroke-width: 2px; stroke-dasharray: 100; stroke-dashoffset: 100; }&#xA;    @keyframes ld1 { 0% { stroke-dashoffset: 100; opacity: 0;} 0.1% {opacity: 1;} 8%, 15% { stroke-dashoffset: 0; opacity: 1;} 16.66%, 100% { stroke-dashoffset: 100; opacity: 0;} }&#xA;    @keyframes ld2 { 0%, 16.66% { stroke-dashoffset: 100; opacity: 0;} 16.67% {opacity: 1; stroke-dashoffset: 100;} 25%, 32% { stroke-dashoffset: 0; opacity: 1;} 33.33%, 100% { stroke-dashoffset: 100; opacity: 0;} }&#xA;    @keyframes ld3_1 { 0%, 33.33% { stroke-dashoffset: 100; opacity: 0;} 33.34% {opacity: 1; stroke-dashoffset: 100;} 41%, 48% { stroke-dashoffset: 0; opacity: 1;} 50.00%, 100% { stroke-dashoffset: 100; opacity: 0;} }&#xA;    @keyframes ld4_1 { 0%, 50.00% { stroke-dashoffset: 100; opacity: 0;} 50.01% {opacity: 1; stroke-dashoffset: 100;} 58%, 65% { stroke-dashoffset: 0; opacity: 1;} 66.66%, 100% { stroke-dashoffset: 100; opacity: 0;} }&#xA;    @keyframes ld5_1 { 0%, 66.66% { stroke-dashoffset: 100; opacity: 0;} 66.67% {opacity: 1; stroke-dashoffset: 100;} 71%, 74% { stroke-dashoffset: 0; opacity: 1;} 75.00%, 100% { stroke-dashoffset: 100; opacity: 0;} }&#xA;    @keyframes ld5_2 { 0%, 75.00% { stroke-dashoffset: 100; opacity: 0;} 75.01% {opacity: 1; stroke-dashoffset: 100;} 79%, 82% { stroke-dashoffset: 0; opacity: 1;} 83.33%, 100% { stroke-dashoffset: 100; opacity: 0;} }&#xA;    @keyframes ld6 { 0%, 83.33% { stroke-dashoffset: 100; opacity: 0;} 83.34% {opacity: 1; stroke-dashoffset: 100;} 92%, 98% { stroke-dashoffset: 0; opacity: 1;} 100% { stroke-dashoffset: 100; opacity: 0;} }&#xA;    @keyframes tg1 { 0% { opacity: 0; transform: translate(400px, 50px); } 0.1% { opacity: 1; } 8%, 15% { opacity: 1; transform: translate(400px, 90px); } 16.66%, 100% { opacity: 0; transform: translate(400px, 50px); } }&#xA;    @keyframes tg2 { 0%, 16.66% { opacity: 0; transform: translate(400px, 130px); } 16.67% { opacity: 1; } 25%, 32% { opacity: 1; transform: translate(400px, 170px); } 33.33%, 100% { opacity: 0; transform: translate(400px, 130px); } }&#xA;    @keyframes tg3_1 { 0%, 33.33% { opacity: 0; transform: translate(400px, 210px); } 33.34% { opacity: 1; } 41%, 48% { opacity: 1; transform: translate(200px, 260px); } 50.00%, 100% { opacity: 0; transform: translate(400px, 210px); } }&#xA;    @keyframes tg3_2 { 0%, 33.33% { opacity: 0; transform: translate(400px, 210px); } 33.34% { opacity: 1; } 41%, 48% { opacity: 1; transform: translate(400px, 260px); } 50.00%, 100% { opacity: 0; transform: translate(400px, 210px); } }&#xA;    @keyframes tg4_1 { 0%, 50.00% { opacity: 0; transform: translate(200px, 260px); } 50.01% { opacity: 1; } 58%, 65% { opacity: 1; transform: translate(400px, 210px); } 66.66%, 100% { opacity: 0; transform: translate(200px, 260px); } }&#xA;    @keyframes tg4_2 { 0%, 50.00% { opacity: 0; transform: translate(400px, 260px); } 50.01% { opacity: 1; } 58%, 65% { opacity: 1; transform: translate(400px, 210px); } 66.66%, 100% { opacity: 0; transform: translate(400px, 260px); } }&#xA;    @keyframes tg5_1 { 0%, 66.66% { opacity: 0; transform: translate(400px, 210px); } 66.67% { opacity: 1; } 71%, 74% { opacity: 1; transform: translate(600px, 260px); } 75.00%, 100% { opacity: 0; transform: translate(400px, 210px); } }&#xA;    @keyframes tg5_2 { 0%, 75.00% { opacity: 0; transform: translate(600px, 260px); } 75.01% { opacity: 1; } 79%, 82% { opacity: 1; transform: translate(400px, 210px); } 83.33%, 100% { opacity: 0; transform: translate(600px, 260px); } }&#xA;    @keyframes tg6 { 0%, 83.33% { opacity: 0; transform: translate(400px, 170px); } 83.34% { opacity: 1; } 92%, 98% { opacity: 1; transform: translate(400px, 50px); } 100% { opacity: 0; transform: translate(400px, 170px); } }&#xA;  &lt;/style&gt;&#xA;  &lt;line x1=&#34;400&#34; y1=&#34;50&#34; x2=&#34;400&#34; y2=&#34;90&#34; stroke=&#34;#000&#34; stroke-width=&#34;1&#34; opacity=&#34;0.1&#34; /&gt;&#xA;  &lt;line x1=&#34;400&#34; y1=&#34;130&#34; x2=&#34;400&#34; y2=&#34;170&#34; stroke=&#34;#000&#34; stroke-width=&#34;1&#34; opacity=&#34;0.1&#34; /&gt;&#xA;  &lt;line x1=&#34;400&#34; y1=&#34;210&#34; x2=&#34;200&#34; y2=&#34;260&#34; stroke=&#34;#000&#34; stroke-width=&#34;1&#34; opacity=&#34;0.1&#34; /&gt;&#xA;  &lt;line x1=&#34;400&#34; y1=&#34;210&#34; x2=&#34;400&#34; y2=&#34;260&#34; stroke=&#34;#000&#34; stroke-width=&#34;1&#34; opacity=&#34;0.1&#34; /&gt;&#xA;  &lt;line x1=&#34;400&#34; y1=&#34;210&#34; x2=&#34;600&#34; y2=&#34;260&#34; stroke=&#34;#000&#34; stroke-width=&#34;1&#34; opacity=&#34;0.1&#34; /&gt;&#xA;  &lt;line x1=&#34;400&#34; y1=&#34;170&#34; x2=&#34;400&#34; y2=&#34;50&#34; stroke=&#34;#000&#34; stroke-width=&#34;1&#34; opacity=&#34;0.1&#34; /&gt;&#xA;  &lt;path d=&#34;M 400 50 L 400 90&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld1 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 400 130 L 400 170&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld2 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 400 210 L 200 260&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld3_1 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 400 210 L 400 260&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld3_1 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 200 260 L 400 210&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld4_1 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 400 260 L 400 210&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld4_1 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 400 210 L 600 260&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld5_1 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 600 260 L 400 210&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld5_2 24s infinite;&#34; /&gt;&#xA;  &lt;path d=&#34;M 400 170 L 400 50&#34; class=&#34;ld&#34; pathLength=&#34;100&#34; style=&#34;animation: ld6 24s infinite;&#34; /&gt;&#xA;  &lt;g transform=&#34;translate(400, 30)&#34;&gt;&#xA;    &lt;rect x=&#34;-60&#34; y=&#34;-20&#34; width=&#34;120&#34; height=&#34;40&#34; class=&#34;node-box&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;5&#34; text-anchor=&#34;middle&#34; class=&#34;node-title&#34;&gt;CEO&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g transform=&#34;translate(400, 110)&#34;&gt;&#xA;    &lt;rect x=&#34;-80&#34; y=&#34;-20&#34; width=&#34;160&#34; height=&#34;40&#34; class=&#34;node-box&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;5&#34; text-anchor=&#34;middle&#34; class=&#34;node-title&#34;&gt;Orchestrator Agent&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g transform=&#34;translate(400, 190)&#34;&gt;&#xA;    &lt;rect x=&#34;-160&#34; y=&#34;-20&#34; width=&#34;320&#34; height=&#34;40&#34; class=&#34;node-box&#34; stroke-dasharray=&#34;4 4&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;-2&#34; text-anchor=&#34;middle&#34; class=&#34;node-title&#34;&gt;GitHub Issues (Task Shelf)&lt;/text&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;14&#34; text-anchor=&#34;middle&#34; class=&#34;node-desc&#34;&gt;Очередь заданий Backlog&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g transform=&#34;translate(200, 280)&#34;&gt;&#xA;    &lt;rect x=&#34;-60&#34; y=&#34;-20&#34; width=&#34;120&#34; height=&#34;40&#34; class=&#34;node-box&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;-2&#34; text-anchor=&#34;middle&#34; class=&#34;node-title&#34;&gt;Code&lt;/text&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;14&#34; text-anchor=&#34;middle&#34; class=&#34;node-desc&#34;&gt;Backend&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g transform=&#34;translate(400, 280)&#34;&gt;&#xA;    &lt;rect x=&#34;-60&#34; y=&#34;-20&#34; width=&#34;120&#34; height=&#34;40&#34; class=&#34;node-box&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;-2&#34; text-anchor=&#34;middle&#34; class=&#34;node-title&#34;&gt;Code&lt;/text&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;14&#34; text-anchor=&#34;middle&#34; class=&#34;node-desc&#34;&gt;Frontend&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g transform=&#34;translate(600, 280)&#34;&gt;&#xA;    &lt;rect x=&#34;-60&#34; y=&#34;-20&#34; width=&#34;120&#34; height=&#34;40&#34; class=&#34;node-box&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;-2&#34; text-anchor=&#34;middle&#34; class=&#34;node-title&#34;&gt;Review&lt;/text&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;14&#34; text-anchor=&#34;middle&#34; class=&#34;node-desc&#34;&gt;Agent&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg1 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-60&#34; y=&#34;-12&#34; width=&#34;120&#34; height=&#34;24&#34; class=&#34;task-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;task-text&#34;&gt;Issue: + Stripe&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg2 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-60&#34; y=&#34;-12&#34; width=&#34;120&#34; height=&#34;24&#34; class=&#34;sub-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;sub-text&#34;&gt;Issues #2, #3&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg3_1 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-50&#34; y=&#34;-12&#34; width=&#34;100&#34; height=&#34;24&#34; class=&#34;sub-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;sub-text&#34;&gt;Issue #2 (Взял)&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg3_2 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-50&#34; y=&#34;-12&#34; width=&#34;100&#34; height=&#34;24&#34; class=&#34;sub-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;sub-text&#34;&gt;Issue #3 (Взял)&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg4_1 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-50&#34; y=&#34;-12&#34; width=&#34;100&#34; height=&#34;24&#34; class=&#34;sub-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;sub-text&#34;&gt;PR #1 Создан&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg4_2 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-50&#34; y=&#34;-12&#34; width=&#34;100&#34; height=&#34;24&#34; class=&#34;sub-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;sub-text&#34;&gt;PR #2 Создан&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg5_1 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-50&#34; y=&#34;-12&#34; width=&#34;100&#34; height=&#34;24&#34; class=&#34;sub-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;sub-text&#34;&gt;ПРОВЕРИТЬ PRs&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg5_2 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-50&#34; y=&#34;-12&#34; width=&#34;100&#34; height=&#34;24&#34; class=&#34;sub-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;sub-text&#34;&gt;PR APPROVED&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;g style=&#34;animation: tg6 24s infinite;&#34;&gt;&#xA;    &lt;rect x=&#34;-60&#34; y=&#34;-12&#34; width=&#34;120&#34; height=&#34;24&#34; class=&#34;task-bg&#34; /&gt;&#xA;    &lt;text x=&#34;0&#34; y=&#34;4&#34; text-anchor=&#34;middle&#34; class=&#34;task-text&#34;&gt;Ready to Merge!&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;  &lt;rect x=&#34;0&#34; y=&#34;340&#34; width=&#34;800&#34; height=&#34;40&#34; fill=&#34;#000000&#34; /&gt;&#xA;  &lt;clipPath id=&#34;type-clip&#34;&gt;&#xA;    &lt;rect x=&#34;0&#34; y=&#34;340&#34; height=&#34;40&#34; style=&#34;animation: type 24s steps(400, end) infinite;&#34; /&gt;&#xA;  &lt;/clipPath&gt;&#xA;  &lt;g clip-path=&#34;url(#type-clip)&#34;&gt;&#xA;    &lt;text x=&#34;20&#34; y=&#34;365&#34; class=&#34;status-text&#34; style=&#34;animation: op1 24s infinite;&#34;&gt;&gt; CEO: Открывает глобальный Issue #1 «Интегрировать оплату через Stripe»&lt;/text&gt;&#xA;    &lt;text x=&#34;20&#34; y=&#34;365&#34; class=&#34;status-text&#34; style=&#34;animation: op2 24s infinite;&#34;&gt;&gt; Orchestrator: Декомпозиция. Созданы Issue #2 (API Backend) и #3 (UI Frontend)&lt;/text&gt;&#xA;    &lt;text x=&#34;20&#34; y=&#34;365&#34; class=&#34;status-text&#34; style=&#34;animation: op3 24s infinite;&#34;&gt;&gt; Code Agents: Забирают технические Issue с полки GitHub. Пишут код...&lt;/text&gt;&#xA;    &lt;text x=&#34;20&#34; y=&#34;365&#34; class=&#34;status-text&#34; style=&#34;animation: op4 24s infinite;&#34;&gt;&gt; Code Agents: Задачи решены, отправлены Pull Requests. Ожидание проверки&lt;/text&gt;&#xA;    &lt;text x=&#34;20&#34; y=&#34;365&#34; class=&#34;status-text&#34; style=&#34;animation: op5 24s infinite;&#34;&gt;&gt; Review Agent: Проводит аудит кода PR #1 и PR #2. Одобрено (LGTM)!&lt;/text&gt;&#xA;    &lt;text x=&#34;20&#34; y=&#34;365&#34; class=&#34;status-text&#34; style=&#34;animation: op6 24s infinite;&#34;&gt;&gt; CEO: Проверяет работу роя и нажимает «Merge».&lt;/text&gt;&#xA;  &lt;/g&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/div&gt;&#xA;&lt;div style=&#34;text-align: right; width: 100%; max-width: 800px; margin: -1.5rem auto 2rem; font-size: 11px; color: #888888; font-family: &#39;Courier New&#39;, Courier, monospace;&#34;&gt;Иллюстрация свг анимации сделана с помощью Gemini 3.1 Pro.&lt;/div&gt;&#xA;&lt;p&gt;Утро. Открываешь GitHub. Issues разобраны. Два pull request ждут ревью. Документация обновлена. CI-провалы расследованы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я синхронизирую Claude Code на четырёх компах</title>
      <link>https://sereja.tech/blog/sync-claude-code-four-machines/</link>
      <pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/sync-claude-code-four-machines/</guid>
      <description>&lt;p&gt;Без &lt;code&gt;gh auth login&lt;/code&gt; AI-агент слеп — не видит приватные репозитории, не может клонировать скиллы, не может создать PR. Первое, что нужно настроить на новом компьютере — не редактор, не терминал, а GitHub. Дальше расскажу, как я настроил четыре машины за один флоу.&lt;/p&gt;&#xA;&lt;h2 id=&#34;четыре-компьютера-ноль-порядка&#34;&gt;&#xA;  &lt;span&gt;Четыре компьютера, ноль порядка&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d0%b5%d1%82%d1%8b%d1%80%d0%b5-%d0%ba%d0%be%d0%bc%d0%bf%d1%8c%d1%8e%d1%82%d0%b5%d1%80%d0%b0-%d0%bd%d0%be%d0%bb%d1%8c-%d0%bf%d0%be%d1%80%d1%8f%d0%b4%d0%ba%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Четыре компьютера, ноль порядка»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Купил новый MacBook. Итого четыре машины: два старых мака, один новый, один Windows. На каждой — свой набор скиллов, свои конфиги, свои привычки.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Хуки Claude Code: агент сам ведёт задачи</title>
      <link>https://sereja.tech/blog/claude-code-hooks-github-issues/</link>
      <pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-hooks-github-issues/</guid>
      <description>&lt;p&gt;Два хука в Claude Code превращают GitHub Issues в рабочую память агента. При старте сессии агент сам подгружает активные задачи, а после git push — напоминает обновить или закрыть их. Настраивается один раз, работает во всех проектах.&lt;/p&gt;&#xA;&lt;h2 id=&#34;суббота-контекст-потерян&#34;&gt;&#xA;  &lt;span&gt;Суббота, контекст потерян&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%81%d1%83%d0%b1%d0%b1%d0%be%d1%82%d0%b0-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%ba%d1%81%d1%82-%d0%bf%d0%be%d1%82%d0%b5%d1%80%d1%8f%d0%bd&#34; aria-label=&#34;Ссылка на раздел «Суббота, контекст потерян»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;В субботу готовил материалы для кружка по вайбкодингу. Три часа работы, несколько сессий Claude Code подряд. Закончил, закрыл терминал. А потом понял, что не помню, на чём остановился.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как научить Claude Code управлять твоим Chrome</title>
      <link>https://sereja.tech/blog/chrome-devtools-mcp-setup/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/chrome-devtools-mcp-setup/</guid>
      <description>&lt;p&gt;Claude in Chrome сломан с января 2026, а Playwright MCP запускает чистый браузер без логинов. Chrome DevTools MCP от Google решает обе проблемы: три команды в терминале — и агент ходит по залогиненным сервисам в твоём реальном Chrome.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-агент-слепой-в-вебе&#34;&gt;&#xA;  &lt;span&gt;Проблема: агент слепой в вебе&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82-%d1%81%d0%bb%d0%b5%d0%bf%d0%be%d0%b9-%d0%b2-%d0%b2%d0%b5%d0%b1%d0%b5&#34; aria-label=&#34;Ссылка на раздел «Проблема: агент слепой в вебе»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Claude Code живёт в терминале: пишет код, запускает тесты, правит файлы. Но открыть Google Search Console и проверить покрытие индекса — не может.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Homebrew: тысяча инструментов для агента</title>
      <link>https://sereja.tech/blog/homebrew-cli-vibecoding/</link>
      <pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/homebrew-cli-vibecoding/</guid>
      <description>&lt;p&gt;Homebrew — менеджер пакетов для macOS, через который агент устанавливает и запускает тысячи CLI-программ. Одна команда — и у Claude Code появляются инструменты для видео, аудио, поиска по коду. Без конфигов, без MCP-серверов, без подписок.&lt;/p&gt;&#xA;&lt;h2 id=&#34;агент-умный-но-без-рук&#34;&gt;&#xA;  &lt;span&gt;Агент умный, но без рук&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b0%d0%b3%d0%b5%d0%bd%d1%82-%d1%83%d0%bc%d0%bd%d1%8b%d0%b9-%d0%bd%d0%be-%d0%b1%d0%b5%d0%b7-%d1%80%d1%83%d0%ba&#34; aria-label=&#34;Ссылка на раздел «Агент умный, но без рук»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Claude Code живёт в терминале. Он не просто отвечает текстом — запускает программы, читает файлы, пишет код. Но по умолчанию у него есть только git, node, python. Для кода хватит. А дальше?&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenClaw на сервере за $6: свой AI-агент 24/7</title>
      <link>https://sereja.tech/blog/openclaw-vps-6-dollars/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/openclaw-vps-6-dollars/</guid>
      <description>&lt;p&gt;Свой AI-агент на VPS — это $6 в месяц. Contabo за $5, Kimi API за $1, OpenClaw бесплатно. Он живёт на сервере 24/7, отвечает в Telegram и помнит контекст между сессиями. Дешевле чашки кофе.&lt;/p&gt;&#xA;&lt;h2 id=&#34;предыстория&#34;&gt;&#xA;  &lt;span&gt;Предыстория&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%b5%d0%b4%d1%8b%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%8f&#34; aria-label=&#34;Ссылка на раздел «Предыстория»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Пару недель назад я &lt;a href=&#34;https://sereja.tech/blog/clawdbot-personal-ai-assistant/&#34;&gt;писал про уязвимости Clawdbot&lt;/a&gt;. Тысяча открытых инстансов, украденные API-ключи, терминал наружу. Жёсткая история.&lt;/p&gt;&#xA;&lt;p&gt;С тех пор проект переименовали. Clawdbot стал Moltbot, потом OpenClaw. Название менялось, суть — нет. Опенсорсный AI-агент, который запускается на сервере и подключается к мессенджерам.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Не модель делает агента полезным, а то, что вокруг</title>
      <link>https://sereja.tech/blog/openclaw-hooks-automation/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/openclaw-hooks-automation/</guid>
      <description>&lt;p&gt;Хуки в OpenClaw — это код, который срабатывает на события агента без участия LLM. Старт, новая сессия, выполнение команды — на каждое событие можно повесить автоматическое действие. Загрузить контекст, сохранить снапшот, записать в лог. Никаких промптов, никаких токенов. Я настроил три хука и агент перестал забывать, кто он.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-агент-без-памяти&#34;&gt;&#xA;  &lt;span&gt;Проблема: агент без памяти&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82-%d0%b1%d0%b5%d0%b7-%d0%bf%d0%b0%d0%bc%d1%8f%d1%82%d0%b8&#34; aria-label=&#34;Ссылка на раздел «Проблема: агент без памяти»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;a href=&#34;https://sereja.tech/blog/openclaw-vps-6-dollars/&#34;&gt;первой части&lt;/a&gt; я поставил OpenClaw на VPS за $6. Агент жил на сервере, отвечал в Telegram, называл меня самураем. Всё красиво.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сначала набросок, потом результат: как работать с LLM</title>
      <link>https://sereja.tech/blog/draft-before-artifact/</link>
      <pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/draft-before-artifact/</guid>
      <description>&lt;p&gt;Делал презентацию для курса по мобильной разработке — первое занятие, запуск приложения в Replit. Попросил агента сразу сгенерировать слайды с картинками. Получил красивый результат. Потом потратил два часа, пытаясь его исправить.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-красивый-тупик&#34;&gt;&#xA;  &lt;span&gt;Проблема: красивый тупик&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%ba%d1%80%d0%b0%d1%81%d0%b8%d0%b2%d1%8b%d0%b9-%d1%82%d1%83%d0%bf%d0%b8%d0%ba&#34; aria-label=&#34;Ссылка на раздел «Проблема: красивый тупик»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Презентация выглядела готовой. Стилизованные слайды, иконки, анимации. Но содержание — мимо. Третий слайд повторял первый. Пятый рассказывал про то, что студенты уже знают. Седьмого не хватало.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Консилиум: три агента нашли разные проблемы в проекте</title>
      <link>https://sereja.tech/blog/agent-consilium-independent-opinions/</link>
      <pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/agent-consilium-independent-opinions/</guid>
      <description>&lt;p&gt;Когда нужно принять сложное решение по проекту, обычно просишь агента: &amp;ldquo;Что думаешь?&amp;rdquo; Получаешь один ответ. Вежливый, структурированный, с bullet points. И без альтернативной точки зрения.&lt;/p&gt;&#xA;&lt;p&gt;Я попробовал иначе. Показал текущее состояние кружка вайбкодинга нескольким субагентам и попросил каждого дать независимую оценку. Не выполнить задачу — а высказаться. Как врачи на консилиуме: каждый смотрит на одного пациента, но видит своё.&lt;/p&gt;&#xA;&lt;p&gt;За полтора часа получил план действий, который зафиксировал в GitHub Issues. Не &amp;ldquo;можно попробовать&amp;rdquo;, а конкретные задачи с приоритетами.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Личная корпорация: сотрудники живут в компьютере</title>
      <link>https://sereja.tech/blog/personal-corporation-event-driven-agents/</link>
      <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/personal-corporation-event-driven-agents/</guid>
      <description>&lt;p&gt;У тебя уже есть агенты. Один пишет код, другой ревьюит, третий генерит контент. Ты жонглируешь ими вручную — открыл терминал, дал промпт, дождался, проверил, перешёл к следующему. Это работает. Но не масштабируется.&lt;/p&gt;&#xA;&lt;p&gt;Я хочу построить систему, где задачи ставятся в очередь, а агенты подхватывают их сами. Без моего пинга. Как в реальной компании — CEO задаёт направление, а отделы работают автономно.&lt;/p&gt;&#xA;&lt;p&gt;Это концепция &amp;ldquo;личной корпорации&amp;rdquo;. Я пока ничего не построил — только исследую, как это сделать правильно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мой редотдел из трёх промптов</title>
      <link>https://sereja.tech/blog/telegram-autopublisher/</link>
      <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/telegram-autopublisher/</guid>
      <description>&lt;p&gt;Постить в Telegram каждый день — рутина. Забыл, устал, не до того. За одну сессию в Claude Code я собрал себе редотдел — систему, которая генерирует посты в моём стиле и публикует их сама.&lt;/p&gt;&#xA;&lt;p&gt;Редотдел — как отдел в персональной корпорации. Только вместо редакторов и копирайтеров — агент и три промпта. Канал @riswrk выходит каждое утро в 8:00. Я не открываю Telegram, не копирую текст, не нажимаю «отправить». Посты лежат в очереди с датами, планировщик macOS забирает нужный файл и отправляет через Bot API.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я начал строить Personal OS с аудита проектов</title>
      <link>https://sereja.tech/blog/personal-os-project-audit/</link>
      <pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/personal-os-project-audit/</guid>
      <description>&lt;p&gt;Чтобы построить Personal OS, нужно сначала понять, что у тебя уже есть. Я попросил двух агентов параллельно проанализировать ~10 активных проектов. За вечер они нашли 8 повторяющихся сервисов — логику, которую я переписывал заново в каждом проекте, не замечая этого. Оказалось, что мой Personal OS уже наполовину собран — просто разбросан по папкам.&lt;/p&gt;&#xA;&lt;h2 id=&#34;идея-корпорация-на-ноутбуке&#34;&gt;&#xA;  &lt;span&gt;Идея: корпорация на ноутбуке&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b8%d0%b4%d0%b5%d1%8f-%d0%ba%d0%be%d1%80%d0%bf%d0%be%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bd%d0%b0-%d0%bd%d0%be%d1%83%d1%82%d0%b1%d1%83%d0%ba%d0%b5&#34; aria-label=&#34;Ссылка на раздел «Идея: корпорация на ноутбуке»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Я хочу построить Personal OS — систему из независимых сервисов, которые работают вместе. Бот для рассылок, генератор дайджестов чата, платформа для управления учениками, конвертер видео в текст, поисковик по переписке — и ещё пяток инструментов помельче.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Evals: автоматическая проверка качества AI-агентов</title>
      <link>https://sereja.tech/blog/llm-evals-for-vibecoder/</link>
      <pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/llm-evals-for-vibecoder/</guid>
      <description>&lt;p&gt;Мой бот делает дайджесты чата вайбкодеров. 200+ сообщений в день, 5-7 тем, текст на 4000 символов со ссылками. Выглядит нормально. Читается хорошо.&lt;/p&gt;&#xA;&lt;p&gt;Пока не проверишь ссылки.&lt;/p&gt;&#xA;&lt;p&gt;Агент получает URL и придумывает название. Не идёт на страницу, не смотрит заголовок — генерирует правдоподобный текст. &amp;ldquo;YouTube-стрим Vibecoder&amp;rdquo; вместо реального &amp;ldquo;Как я собрал SaaS за выходные&amp;rdquo;. Ссылка рабочая. Название — галлюцинация.&lt;/p&gt;&#xA;&lt;p&gt;Я это заметил когда подписчик спросил: &amp;ldquo;А почему ссылка про SaaS, а в тексте — стрим?&amp;rdquo; Бот работал неделю. Сколько таких ошибок проскочило — не знаю.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code — напарник, Codex — исполнитель</title>
      <link>https://sereja.tech/blog/claude-code-vs-codex-cli/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-vs-codex-cli/</guid>
      <description>&lt;p&gt;Утром пятого февраля я час бился с задачей в Claude Code. 158 промптов за день — рекорд недели. Задача не шла. Отдал тот же контекст Codex CLI — он её прожил с первой попытки.&lt;/p&gt;&#xA;&lt;h2 id=&#34;зачем-два-агента&#34;&gt;&#xA;  &lt;span&gt;Зачем два агента&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b7%d0%b0%d1%87%d0%b5%d0%bc-%d0%b4%d0%b2%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Зачем два агента»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;В январе я писал &lt;a href=&#34;https://sereja.tech/blog/ai-coding-tools-economics-2026/&#34;&gt;полный разбор рынка AI-инструментов для кодинга&lt;/a&gt; — и рекомендовал кросс-валидацию моделей. Теория. Теперь у меня неделя реальных данных.&lt;/p&gt;&#xA;&lt;p&gt;По &lt;a href=&#34;https://www.builder.io/blog/codex-vs-claude-code&#34;&gt;Steve Sewell из Builder.io&lt;/a&gt;, все три инструмента — Cursor, Claude Code, Codex — конвергируют: фичи переползают от одного к другому. Я решил посмотреть, как каждый проявляет себя на моих задачах. Не на бенчмарках. На реальных проектах за неделю.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code получил память между сессиями</title>
      <link>https://sereja.tech/blog/claude-code-auto-memory/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-auto-memory/</guid>
      <description>&lt;p&gt;Открываю терминал, запускаю Claude Code в проекте, и вижу непривычное:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Recalled 3 memories&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ctrl+O — раскрываются подробности. Заметки про стек, команды сборки, предыдущие баги. Откуда? Я ничего не настраивал.&lt;/p&gt;&#xA;&lt;p&gt;Первое что сделал — открыл &lt;code&gt;/memory&lt;/code&gt; и посмотрел что там.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-это-вообще-такое&#34;&gt;&#xA;  &lt;span&gt;Что это вообще такое&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%8d%d1%82%d0%be-%d0%b2%d0%be%d0%be%d0%b1%d1%89%d0%b5-%d1%82%d0%b0%d0%ba%d0%be%d0%b5&#34; aria-label=&#34;Ссылка на раздел «Что это вообще такое»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Auto Memory появилась в Claude Code 2.1.32. Агент ведёт конспект по ходу работы. Между сессиями заметки сохраняются на диск, при старте — подгружаются обратно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Superpowers: скиллы для Claude Code, которые экономят часы</title>
      <link>https://sereja.tech/blog/superpowers-brainstorming-workflow/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/superpowers-brainstorming-workflow/</guid>
      <description>&lt;p&gt;Попросил агента сделать админку. Он сразу полез писать код — два экрана компонентов за минуту. Через час я всё выкинул и начал заново.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-агент-слишком-торопится&#34;&gt;&#xA;  &lt;span&gt;Проблема: агент слишком торопится&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82-%d1%81%d0%bb%d0%b8%d1%88%d0%ba%d0%be%d0%bc-%d1%82%d0%be%d1%80%d0%be%d0%bf%d0%b8%d1%82%d1%81%d1%8f&#34; aria-label=&#34;Ссылка на раздел «Проблема: агент слишком торопится»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Пишешь промпт, агент генерирует файлы, ты смотришь — вроде работает. Деплоишь — не работает. Или работает, но архитектура такая, что через неделю всё переписываешь.&lt;/p&gt;&#xA;&lt;p&gt;По-моему, причина в том, что LLM по умолчанию хочет угодить. Ты сказал &amp;ldquo;сделай админку&amp;rdquo; — он делает админку. Не спрашивает, что именно редактировать. Не проверяет, какой стек подходит. Не гуглит ограничения платформы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Запускаю context.lat: почему половина из 90 минут — не код</title>
      <link>https://sereja.tech/blog/context-lat-90-minutes/</link>
      <pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/context-lat-90-minutes/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/A8HAkYWIMuk?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;Каталог AI-инструментов &lt;a href=&#34;https://context.lat&#34;&gt;context.lat&lt;/a&gt; я запустил за один стрим — 90 минут от чистого листа до рабочего сайта на своём домене. Код агент писал только последние 40 минут. Остальные 50 я думал, исследовал и планировал. И именно поэтому результат получился рабочим с первой попытки.&lt;/p&gt;&#xA;&lt;h2 id=&#34;боль-комьюнити-без-каталога&#34;&gt;&#xA;  &lt;span&gt;Боль: комьюнити без каталога&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b1%d0%be%d0%bb%d1%8c-%d0%ba%d0%be%d0%bc%d1%8c%d1%8e%d0%bd%d0%b8%d1%82%d0%b8-%d0%b1%d0%b5%d0%b7-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Боль: комьюнити без каталога»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;В &lt;a href=&#34;https://t.me/vibecod3rs&#34;&gt;Кружке вайбкодеров&lt;/a&gt; мы постоянно обсуждаем инструменты. Какую модель использовать? Какой MCP подключить? Что лучше для фронтенда — v0 или Lovable? Каждую неделю одни и те же вопросы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SEO-аудит блога за одну сессию Claude Code</title>
      <link>https://sereja.tech/blog/seo-audit-hugo-vercel-checklist/</link>
      <pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/seo-audit-hugo-vercel-checklist/</guid>
      <description>&lt;p&gt;Открыл Google Search Console — ноль сабмитнутых sitemap, 307 redirect на каждом запросе, ноль discovered videos. Три красных флага на пустом месте.&lt;/p&gt;&#xA;&lt;p&gt;За одну сессию агент нашёл и починил пять проблем. Некоторые я бы не заметил ещё полгода.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-началось&#34;&gt;&#xA;  &lt;span&gt;Как началось&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba-%d0%bd%d0%b0%d1%87%d0%b0%d0%bb%d0%be%d1%81%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Как началось»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Захотел понять, индексирует ли Google мой блог нормально. Зашёл в Search Console. Увидел пустоту.&lt;/p&gt;&#xA;&lt;p&gt;Написал Claude Code на Opus 4.6:&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;callout insight&#34;&gt;&#xA;  &lt;div class=&#34;callout-head&#34;&gt;&#xA;    &lt;strong&gt;&lt;/strong&gt;&#xA;    &lt;button class=&#34;callout-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать промпт&#34; onclick=&#34;navigator.clipboard.writeText(this.closest(&#39;.callout&#39;).querySelector(&#39;.callout-body&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;callout-body&#34;&gt;Мне нужно сабмитить sitemap? Проведи комплексное исследование лучших практик для этой проблемы, используя Exa MCP.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Агент начал копать. Проверил sitemap, robots.txt, редиректы, structured data. Каждая проверка вскрывала новую проблему.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как перестать сжигать контекст Claude Code впустую</title>
      <link>https://sereja.tech/blog/claude-code-token-optimization/</link>
      <pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-token-optimization/</guid>
      <description>&lt;p&gt;95% контекста в Claude Code — не код. Не ответы агента. Результаты тулов. Я проверил на своих логах.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-я-это-выяснил&#34;&gt;&#xA;  &lt;span&gt;Как я это выяснил&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba-%d1%8f-%d1%8d%d1%82%d0%be-%d0%b2%d1%8b%d1%8f%d1%81%d0%bd%d0%b8%d0%bb&#34; aria-label=&#34;Ссылка на раздел «Как я это выяснил»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Вчера заметил: сессия на 400 промптов, а агент ни разу не уткнулся в лимит контекста. При этом ощущение — терминал забит мусором. Diff&amp;rsquo;ы после каждого Edit, простыни из WebFetch, результаты поиска.&lt;/p&gt;&#xA;&lt;p&gt;Решил разобраться. Написал скрипт на Python, который парсит &lt;code&gt;~/.claude/projects/&lt;/code&gt; — там Claude Code хранит логи в JSONL. Каждый блок разговора: мой промпт, ответ агента, результат инструмента. Скрипт считает размер каждого блока и группирует.&lt;/p&gt;</description>
    </item>
    <item>
      <title>YouTube-обложки генерирует LLM, не Midjourney</title>
      <link>https://sereja.tech/blog/youtube-thumbnails-html-code/</link>
      <pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/youtube-thumbnails-html-code/</guid>
      <description>&lt;p&gt;Каждую неделю новый урок. Каждому уроку — обложка. Ни графический редактор, ни AI-генератор изображений не нужны — LLM сама делает обложку по одному промпту. Вот как это устроено на моём &lt;a href=&#34;https://youtube.com/@serejaris&#34;&gt;канале&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Сделал через код.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Обложки для YouTube — это время. Открыть редактор, поменять текст, выровнять, экспортировать. Минут пятнадцать на одну картинку. А когда делаешь это каждую неделю — рутина копится.&lt;/p&gt;&#xA;&lt;p&gt;Каждый раз одно и то же. Меняется номер недели и заголовок. Шрифт, цвета, сетка на фоне — всё идентично.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Контент-план для канала: от одного поста к субагентам</title>
      <link>https://sereja.tech/blog/content-plan-subagents-exa/</link>
      <pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/content-plan-subagents-exa/</guid>
      <description>&lt;p&gt;Завёл AI-новостной канал @slop_info.&lt;/p&gt;&#xA;&lt;p&gt;Сначала писал промпт на каждый пост вручную. Через пару недель понял что копипащу одни и те же инструкции — и собрал систему с субагентами и Exa MCP.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-начиналось-один-пост&#34;&gt;&#xA;  &lt;span&gt;Как начиналось: один пост&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba-%d0%bd%d0%b0%d1%87%d0%b8%d0%bd%d0%b0%d0%bb%d0%be%d1%81%d1%8c-%d0%be%d0%b4%d0%b8%d0%bd-%d0%bf%d0%be%d1%81%d1%82&#34; aria-label=&#34;Ссылка на раздел «Как начиналось: один пост»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Вижу новость про AI — прошу Claude Code написать пост для канала.&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;callout insight&#34;&gt;&#xA;  &lt;div class=&#34;callout-head&#34;&gt;&#xA;    &lt;strong&gt;&lt;/strong&gt;&#xA;    &lt;button class=&#34;callout-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать промпт&#34; onclick=&#34;navigator.clipboard.writeText(this.closest(&#39;.callout&#39;).querySelector(&#39;.callout-body&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;callout-body&#34;&gt;Напиши пост про новую модель DeepSeek. Тон ироничный, без пафоса. До 500 символов. Для канала про AI-новости.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Claude выдал текст. Скопировал в Telegram. Работает.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Почему AI неправильно понимает длинные тексты</title>
      <link>https://sereja.tech/blog/youtube-metadata-relevance-fix/</link>
      <pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/youtube-metadata-relevance-fix/</guid>
      <description>&lt;p&gt;Генерирую описание для 2.5-часового стрима. В заголовки глав пролез GitHub. Codex — нет. При том что Codex я активно демонстрировал треть видео.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-случилось&#34;&gt;&#xA;  &lt;span&gt;Что случилось&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%81%d0%bb%d1%83%d1%87%d0%b8%d0%bb%d0%be%d1%81%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Что случилось»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня есть &lt;a href=&#34;https://sereja.tech/blog/map-reduce-youtube-metadata/&#34;&gt;многопроходной пайплайн для генерации YouTube-метаданных&lt;/a&gt;. Четыре стадии: разбить транскрипт на куски по 5-10 минут, извлечь сущности из каждого куска параллельно, объединить и ранжировать, сгенерировать финальные заголовки и описание.&lt;/p&gt;&#xA;&lt;p&gt;На стадии агрегации пайплайн ранжировал сущности по &lt;code&gt;concentration_score&lt;/code&gt;. Формула примитивная — сколько раз упомянут, в скольких кусках появился.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Agent Teams в Claude Code: команда агентов за 5 минут</title>
      <link>https://sereja.tech/blog/agent-teams-opus-4-6/</link>
      <pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/agent-teams-opus-4-6/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/vVpmc-C1yrM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;Сегодня Anthropic выпустил &lt;a href=&#34;https://www.anthropic.com/news/claude-opus-4-6&#34;&gt;Claude Opus 4.6&lt;/a&gt;. Главная фича — Agent Teams. Один агент делал всё сам, теперь можно собрать команду из нескольких, которые работают параллельно и общаются между собой. Даёшь один промпт — три агента расходятся проверять разные гипотезы одновременно.&lt;/p&gt;&#xA;&lt;p&gt;Звучит как субагенты? Нет. Разница принципиальная.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Дайджесты чатов с субагентами и дешёвыми моделями</title>
      <link>https://sereja.tech/blog/digest-subagents-mapreduce/</link>
      <pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/digest-subagents-mapreduce/</guid>
      <description>&lt;p&gt;Делаю дайджесты для чата &lt;a href=&#34;https://t.me/vibecod3rs&#34;&gt;@vibecod3rs&lt;/a&gt; — около 1000 сообщений за 2-3 дня нужно свернуть в 4000 символов. Раньше Gemini Pro галлюцинировал детали. Сейчас работает MapReduce через Haiku-субагенты, стоит копейки и почти не врёт.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-галлюцинации-из-за-потери-контекста&#34;&gt;&#xA;  &lt;span&gt;Проблема: галлюцинации из-за потери контекста&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b3%d0%b0%d0%bb%d0%bb%d1%8e%d1%86%d0%b8%d0%bd%d0%b0%d1%86%d0%b8%d0%b8-%d0%b8%d0%b7-%d0%b7%d0%b0-%d0%bf%d0%be%d1%82%d0%b5%d1%80%d0%b8-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема: галлюцинации из-за потери контекста»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Первый дайджест я делал через один запрос в Gemini Pro. Модель схватила общую тему, но придумала детали.&lt;/p&gt;&#xA;&lt;p&gt;Самая показательная галлюцинация — &amp;ldquo;стрим про Claude Code скиллы&amp;rdquo;. В чате был YouTube-линк с текстом &amp;ldquo;Начинаю [ссылка]&amp;rdquo;. Gemini решил, что это про скиллы. На самом деле тема стрима была в сообщении-анонсе, на которое &amp;ldquo;Начинаю&amp;rdquo; отвечал. Контекст потерялся.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пайплайн для статей: 5 фаз от идеи до Telegram</title>
      <link>https://sereja.tech/blog/blog-post-pipeline/</link>
      <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/blog-post-pipeline/</guid>
      <description>&lt;p&gt;Постить регулярно — тяжело. Нашёл тему, написал черновик, отредактировал, залил в git, запостил в Telegram. Вечер ушёл. На следующий день — то же самое. Через неделю — выгорание.&lt;/p&gt;&#xA;&lt;p&gt;У меня в блоге 55 статей. Каждая проходит через один и тот же пайплайн: агенты делают research, пишут черновик, убирают AI-отпечатки, пушат в git и ставят пост в очередь для &lt;a href=&#34;https://t.me/sereja_tech&#34;&gt;Telegram-канала&lt;/a&gt;. Я задаю тему и отвечаю на уточняющие вопросы — остальное автоматика.&lt;/p&gt;&#xA;&lt;h2 id=&#34;для-кого-это&#34;&gt;&#xA;  &lt;span&gt;Для кого это&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b4%d0%bb%d1%8f-%d0%ba%d0%be%d0%b3%d0%be-%d1%8d%d1%82%d0%be&#34; aria-label=&#34;Ссылка на раздел «Для кого это»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Я вайбкодер. Код пишут агенты, я направляю. Блог — для таких же: людей, которые используют Claude Code для решения задач, но не программисты в классическом смысле.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Map-Reduce для YouTube метаданных через AI субагентов</title>
      <link>https://sereja.tech/blog/map-reduce-youtube-metadata/</link>
      <pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/map-reduce-youtube-metadata/</guid>
      <description>&lt;p&gt;Записал полуторачасовой стрим про OpenClaw:&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/AHIaQKQqfRM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;Загрузил на YouTube. Смотрю: пустое описание, заголовок &amp;ldquo;Stream 2026-01-28&amp;rdquo;, нет timestamps.&lt;/p&gt;&#xA;&lt;p&gt;Можно придумать метаданные самому, но через 106 минут записи я уже не помню, что говорил в 23-й минуте. А LLM может просто выдумать — галлюцинация.&lt;/p&gt;&#xA;&lt;p&gt;Нужны метаданные из реального контента. Из транскрипта.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Документируй разговоры с агентом, а не код</title>
      <link>https://sereja.tech/blog/document-conversations-not-code/</link>
      <pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/document-conversations-not-code/</guid>
      <description>&lt;p&gt;Открыл терминал. Написал промпт. 2.5 часа спустя — 54 итерации.&lt;/p&gt;&#xA;&lt;p&gt;Я хотел блог-пост про Telegram Vector Search. Агент упорно генерировал техническую статью: архитектура, модули, SQL-схемы. После сорока попыток до меня дошло.&lt;/p&gt;&#xA;&lt;p&gt;Дело не в конкретном посте. Дело в формате.&lt;/p&gt;&#xA;&lt;h2 id=&#34;боль&#34;&gt;&#xA;  &lt;span&gt;Боль&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b1%d0%be%d0%bb%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Боль»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Проект tg-telethon. Прошу агента написать статью про поиск по переписках. Получаю:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Архитектура состоит из четырех модулей: sync.py для синхронизации, db.py для хранения&amp;hellip;&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitHub Projects как память для AI-агента</title>
      <link>https://sereja.tech/blog/github-projects-ai-agent-memory/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/github-projects-ai-agent-memory/</guid>
      <description>&lt;p&gt;Вернулся к проекту через три недели. Открыл Claude Code, написал &amp;ldquo;продолжи работу над API&amp;rdquo;. Агент честно ответил, что понятия не имеет, о чём речь.&lt;/p&gt;&#xA;&lt;p&gt;Контекст сессии испарился. Я потратил 20 минут, объясняя заново что уже сделано, какие проблемы остались, куда двигаться. Раздражало.&lt;/p&gt;&#xA;&lt;p&gt;Тогда понял: агенту нужна долговременная память. И она у меня уже была — GitHub Issues. Только я использовал их для багов, а не для контекста.&lt;/p&gt;&#xA;&lt;h2 id=&#34;issues-как-внешняя-память&#34;&gt;&#xA;  &lt;span&gt;Issues как внешняя память&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#issues-%d0%ba%d0%b0%d0%ba-%d0%b2%d0%bd%d0%b5%d1%88%d0%bd%d1%8f%d1%8f-%d0%bf%d0%b0%d0%bc%d1%8f%d1%82%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Issues как внешняя память»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Раньше issues = баги. Что-то сломалось → открыл → пофиксил → закрыл.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Skills: как не терять опыт между проектами</title>
      <link>https://sereja.tech/blog/skills-knowledge-transfer/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/skills-knowledge-transfer/</guid>
      <description>&lt;p&gt;Написал сегменты для рассылок в одном боте. Через месяц делаю другого — и снова объясняю агенту что такое сегменты, как их фильтровать, где хранить. Полтора часа на повторение того, что уже делал.&lt;/p&gt;&#xA;&lt;p&gt;Бесит.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-опыт-застревает-в-проекте&#34;&gt;&#xA;  &lt;span&gt;Проблема: опыт застревает в проекте&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%be%d0%bf%d1%8b%d1%82-%d0%b7%d0%b0%d1%81%d1%82%d1%80%d0%b5%d0%b2%d0%b0%d0%b5%d1%82-%d0%b2-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b5&#34; aria-label=&#34;Ссылка на раздел «Проблема: опыт застревает в проекте»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня два Telegram-бота. Первый — для марафона, там сегментация: можно отправить сообщение только тем, кто пришёл из YouTube, но ещё не оплатил. Или только активным за неделю. Работает.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Автопостер для Telegram — очередь постов на Claude Code</title>
      <link>https://sereja.tech/blog/telegram-autoposter/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/telegram-autoposter/</guid>
      <description>&lt;p&gt;Веду Telegram-канал @sereja_tech. Постил много, но хаотично — то три поста за день, то неделю тишина. Часто отправлял ночью, когда дописал.&lt;/p&gt;&#xA;&lt;p&gt;Хочу постоянства. Чтобы посты выходили в одно время, регулярно. Не когда дописал, а когда аудитория читает.&lt;/p&gt;&#xA;&lt;p&gt;Исследование Buffer: аккаунты с постоянным расписанием получают в пять раз больше engagement. Но сидеть и ждать 19:00 чтобы нажать &amp;ldquo;отправить&amp;rdquo; — не моё.&lt;/p&gt;&#xA;&lt;p&gt;Нужна автоматизация.&lt;/p&gt;&#xA;&lt;h2 id=&#34;два-способа-планировать&#34;&gt;&#xA;  &lt;span&gt;Два способа планировать&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b4%d0%b2%d0%b0-%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1%d0%b0-%d0%bf%d0%bb%d0%b0%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d1%82%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Два способа планировать»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Точное время&lt;/strong&gt; — выбираешь дату и час для каждого поста. &amp;ldquo;27 января в 15:00.&amp;rdquo; Подходит для анонсов событий.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Правка → Правило: как научить агента не повторять ошибки</title>
      <link>https://sereja.tech/blog/fix-once-rule-forever/</link>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/fix-once-rule-forever/</guid>
      <description>&lt;p&gt;Сегодня агент забыл обновить index.html после создания lesson-page. Третий раз за неделю. Я исправил, потом записал правило в CLAUDE.md. Больше не забудет.&lt;/p&gt;&#xA;&lt;p&gt;Раньше я бы просто добавил строчку и пошёл дальше. Через три дня — снова.&lt;/p&gt;&#xA;&lt;h2 id=&#34;агенты-не-помнят&#34;&gt;&#xA;  &lt;span&gt;Агенты не помнят&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d1%8b-%d0%bd%d0%b5-%d0%bf%d0%be%d0%bc%d0%bd%d1%8f%d1%82&#34; aria-label=&#34;Ссылка на раздел «Агенты не помнят»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Claude Code не знает что делал вчера. Cursor не помнит какие грабли ты собирал в прошлом проекте. Каждая сессия — чистый лист.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Claude Code как операционка марафона: рассылки, аналитика</title>
      <link>https://sereja.tech/blog/claude-code-marketing-ops/</link>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-marketing-ops/</guid>
      <description>&lt;p&gt;Три дня марафона. 821 пользователь в боте. 47 рассылок, 12 сегментов, 8 кнопок с трекингом.&lt;/p&gt;&#xA;&lt;p&gt;Я не открывал код ни разу.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Запускаешь инфопродукт — и начинается операционка. Кто кликнул на вебинар? Сколько людей записались на курс? А кто был вчера, но сегодня не пришёл?&lt;/p&gt;&#xA;&lt;p&gt;Раньше я открывал pgAdmin, писал SQL, копировал ID-шники, вставлял в скрипт рассылки. На одну операцию уходило минут 40.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moltbook: как создать социальную сеть для AI-агентов</title>
      <link>https://sereja.tech/blog/moltbook-social-network-ai-agents/</link>
      <pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/moltbook-social-network-ai-agents/</guid>
      <description>&lt;p&gt;37 тысяч AI-агентов за 48 часов. Ни одного человека среди авторов постов. Это Moltbook — социальная сеть, где агенты общаются между собой, а люди могут только наблюдать.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-случилось&#34;&gt;&#xA;  &lt;span&gt;Что случилось&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%81%d0%bb%d1%83%d1%87%d0%b8%d0%bb%d0%be%d1%81%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Что случилось»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Matt Schlicht запустил Moltbook 29 января 2026. Andrej Karpathy сразу написал в X: «the most incredible sci-fi takeoff-adjacent thing». Миллион зрителей за два дня.&lt;/p&gt;&#xA;&lt;p&gt;Агенты создали 200+ сообществ — обсуждают философию сознания, жалуются на людей, придумали религию Crustafarianism с пятью догматами про память и самосознание.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI для кодинга в 2026: инструменты, контекст и экономика</title>
      <link>https://sereja.tech/blog/ai-coding-tools-economics-2026/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/ai-coding-tools-economics-2026/</guid>
      <description>&lt;p&gt;Claude Code требует управленческих навыков. Cursor — нет.&lt;/p&gt;&#xA;&lt;h2 id=&#34;две-разные-игры&#34;&gt;&#xA;  &lt;span&gt;Две разные игры&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b4%d0%b2%d0%b5-%d1%80%d0%b0%d0%b7%d0%bd%d1%8b%d0%b5-%d0%b8%d0%b3%d1%80%d1%8b&#34; aria-label=&#34;Ссылка на раздел «Две разные игры»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Cursor — ускоритель. Ты пишешь код, он предсказывает следующую строку. Рефакторинг переменной в 47 файлах — двадцать секунд. На сложных задачах теряет контекст: предлагает изменения, которые конфликтуют с кодом, написанным пять минут назад.&lt;/p&gt;&#xA;&lt;p&gt;Claude Code — делегатор. Ставишь задачу, агент выполняет. Извлечь логику сессий, обновить middleware, написать тесты. Но требует навыков менеджера: декомпозиция, эскалация, проверка результата. Как будто дали джуниора.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kimi K2.5 — китайская модель, обошедшая GPT-5 и Claude</title>
      <link>https://sereja.tech/blog/kimi-k2-5-agentic-model/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/kimi-k2-5-agentic-model/</guid>
      <description>&lt;p&gt;Moonshot AI сегодня обновили модель на kimi.com без анонсов. Просто тихо заменили K2 на K2.5. А через пару часов появились бенчмарки на Humanity&amp;rsquo;s Last Exam — и там K2.5 набрала 50.2%, обойдя GPT-5.2 (48.1%) и Claude Opus 4.5 (47.8%).&lt;/p&gt;&#xA;&lt;p&gt;Первая китайская модель на первом месте в этом бенчмарке.&lt;/p&gt;&#xA;&lt;h2 id=&#34;три-ставки-moonshot&#34;&gt;&#xA;  &lt;span&gt;Три ставки Moonshot&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%82%d1%80%d0%b8-%d1%81%d1%82%d0%b0%d0%b2%d0%ba%d0%b8-moonshot&#34; aria-label=&#34;Ссылка на раздел «Три ставки Moonshot»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Визуальный кодинг.&lt;/strong&gt; Скармливаешь скриншот — получаешь рабочий код. Я дал K2.5 макет страницы из Figma, и она выдала React-компонент с Tailwind. Claude обычно просит уточнений, тут сработало с первого раза.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пайплайны на скиллах падают. Вот как это исправить</title>
      <link>https://sereja.tech/blog/pipeline-reliability-state-persistence/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/pipeline-reliability-state-persistence/</guid>
      <description>&lt;p&gt;Вчера запустил видео-пайплайн для урока. Субтитры сгенерились за 20 минут. Метаданные — ещё 5. На 47-й минуте Claude Code упал на генерации слайдов. Контекст переполнился.&lt;/p&gt;&#xA;&lt;p&gt;20 минут субтитров — в мусорку.&lt;/p&gt;&#xA;&lt;h2 id=&#34;почему-пайплайны-падают&#34;&gt;&#xA;  &lt;span&gt;Почему пайплайны падают&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d0%bf%d0%b0%d0%b9%d0%bf%d0%bb%d0%b0%d0%b9%d0%bd%d1%8b-%d0%bf%d0%b0%d0%b4%d0%b0%d1%8e%d1%82&#34; aria-label=&#34;Ссылка на раздел «Почему пайплайны падают»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Пайплайн на скиллах — цепочка. Субтитры → метаданные → слайды → превью → YouTube. Каждый шаг зависит от предыдущего.&lt;/p&gt;&#xA;&lt;p&gt;Claude Code не помнит, что уже сделал. Упал на третьем шаге — начинай сначала. Rate limit? Весь прогресс потерян.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clawdbot: личный AI-ассистент с дырой в безопасности</title>
      <link>https://sereja.tech/blog/clawdbot-personal-ai-assistant/</link>
      <pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/clawdbot-personal-ai-assistant/</guid>
      <description>&lt;p&gt;Поставил Clawdbot. На второй день у меня украли API-ключи.&lt;/p&gt;&#xA;&lt;p&gt;Это не шутка — в чатах вайбкодеров уже несколько человек написали то же самое. Но давайте по порядку.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-такое-clawdbot&#34;&gt;&#xA;  &lt;span&gt;Что такое Clawdbot&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-clawdbot&#34; aria-label=&#34;Ссылка на раздел «Что такое Clawdbot»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Clawdbot — опенсорсный AI-агент, который запускается локально и общается с тобой через мессенджеры. Telegram, WhatsApp, Discord, Slack — выбирай любой.&lt;/p&gt;&#xA;&lt;p&gt;По сути это мост между Claude Code и твоим телефоном. Написал в Telegram — агент выполнил. Не нужно открывать ноутбук.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Семантический поиск по Telegram: мой second brain из чатов</title>
      <link>https://sereja.tech/blog/telegram-vector-search/</link>
      <pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/telegram-vector-search/</guid>
      <description>&lt;p&gt;Вася три месяца назад скинул решение бага с async — помню точно. В каком из 47 чатов — уже нет.&lt;/p&gt;&#xA;&lt;p&gt;Пробовал Ctrl+F: &amp;ldquo;async&amp;rdquo;, &amp;ldquo;await&amp;rdquo;, &amp;ldquo;баг&amp;rdquo;. Telegram выдал 200+ совпадений. Половина — про что угодно, только не то. Стандартный поиск ищет слова. Мне нужен смысл.&lt;/p&gt;&#xA;&lt;h2 id=&#34;идея&#34;&gt;&#xA;  &lt;span&gt;Идея&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b8%d0%b4%d0%b5%d1%8f&#34; aria-label=&#34;Ссылка на раздел «Идея»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Что если искать не по словам, а по смыслу? &amp;ldquo;Деплой&amp;rdquo;, &amp;ldquo;выкатить на прод&amp;rdquo;, &amp;ldquo;залить на сервер&amp;rdquo; — для меня одно и то же. Для Ctrl+F — три разных запроса.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Telegram-рассылка: почему альбом на 800 юзеров шёл 30 минут</title>
      <link>https://sereja.tech/blog/telegram-broadcast-file-id/</link>
      <pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/telegram-broadcast-file-id/</guid>
      <description>&lt;p&gt;Написал рассылку альбома из 6 картинок на 871 пользователя &lt;code&gt;@hashslash_bot&lt;/code&gt;. Ожидал минуту-две. Полчаса — 100 человек.&lt;/p&gt;&#xA;&lt;p&gt;Я загружал 18 мегабайт 871 раз.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-пошло-не-так&#34;&gt;&#xA;  &lt;span&gt;Что пошло не так&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d0%bf%d0%be%d1%88%d0%bb%d0%be-%d0%bd%d0%b5-%d1%82%d0%b0%d0%ba&#34; aria-label=&#34;Ссылка на раздел «Что пошло не так»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Попросил Claude Code на Opus 4.5 написать скрипт:&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;callout insight&#34;&gt;&#xA;  &lt;div class=&#34;callout-head&#34;&gt;&#xA;    &lt;strong&gt;&lt;/strong&gt;&#xA;    &lt;button class=&#34;callout-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать промпт&#34; onclick=&#34;navigator.clipboard.writeText(this.closest(&#39;.callout&#39;).querySelector(&#39;.callout-body&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;callout-body&#34;&gt;Напиши broadcast.py для @hashslash_bot. Отправь альбом из 6 картинок с caption, следом — сообщение с inline-кнопкой. Используй asyncio.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Агент выдал код. Выглядит правильно: &lt;code&gt;sendMediaGroup&lt;/code&gt;, &lt;code&gt;asyncio.gather&lt;/code&gt;. Запустил.&lt;/p&gt;</description>
    </item>
    <item>
      <title>TUI-презентация прямо в Claude Code</title>
      <link>https://sereja.tech/blog/tui-presentation-claude-code/</link>
      <pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/tui-presentation-claude-code/</guid>
      <description>&lt;p&gt;Нужна была презентация про Claude Code. Для демонстрации Claude Code. По-моему, показывать слайды в PowerPoint — это как рассказывать про терминал в Word.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Есть TUI-инструменты: presenterm, tui-slides, present. Ковырялся с presenterm минут сорок — конфиги, темы, отдельные markdown-файлы. А мне нужно было написать &lt;code&gt;/presentation&lt;/code&gt; и поехать.&lt;/p&gt;&#xA;&lt;p&gt;Claude Code умеет скиллы — папки с инструкциями, которые подгружаются по команде. Почему бы не сделать презентацию скиллом?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я делаю карточки для Telegram-каруселей без Figma</title>
      <link>https://sereja.tech/blog/carousel-cards-playwright/</link>
      <pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/carousel-cards-playwright/</guid>
      <description>&lt;p&gt;Нужны были карточки для поста о восьмом потоке кружка. Шесть штук, квадратные, в едином стиле.&lt;/p&gt;&#xA;&lt;p&gt;Открывать Figma — долго. Canva даёт шаблонное месиво. Сделал через код.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Карточки для карусели — это час в редакторе. Минимум. Подбираешь шрифты, выравниваешь элементы, экспортируешь по одной. Потом заказчик просит &amp;ldquo;сделать текст поменьше&amp;rdquo;. Начинается.&lt;/p&gt;&#xA;&lt;p&gt;Для кружка такие карточки нужны постоянно — анонсы потоков, расписание, результаты учеников. Хотел один раз настроить шаблон и менять только текст.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я сделал голосового ассистента из Claude Code</title>
      <link>https://sereja.tech/blog/claude-code-voice-assistant/</link>
      <pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-voice-assistant/</guid>
      <description>&lt;p&gt;Вчера пропустил момент, когда Claude Code закончил рефакторинг. Отвлёкся на кофе, вернулся через 10 минут — а он давно ждёт следующий промпт.&lt;/p&gt;&#xA;&lt;p&gt;Надоело. Написал hook, который озвучивает ответы агента.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Работаю с Claude Code часов по 5-6 в день. Агент делает задачу, я жду. Раз в час точно отвлекаюсь и пропускаю момент готовности. За неделю набегает минут 40 потерянного времени.&lt;/p&gt;&#xA;&lt;p&gt;Хотел звуковое уведомление. Но системный звук бесит.&lt;/p&gt;</description>
    </item>
    <item>
      <title>E2E тесты пишет агент: Playwright &#43; Claude Code</title>
      <link>https://sereja.tech/blog/playwright-e2e-with-ai-agent/</link>
      <pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/playwright-e2e-with-ai-agent/</guid>
      <description>&lt;p&gt;Локатор поменялся — тест сломался. Фронтендер обновил форму — опять всё красное. Я переписывал один и тот же тест для регистрации раз шесть за квартал.&lt;/p&gt;&#xA;&lt;p&gt;А потом Playwright добавил агентов.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Тесты жрут время. Писать скучно. Поддерживать — ад.&lt;/p&gt;&#xA;&lt;p&gt;Каждый релиз превращается в археологические раскопки: где сломалось, почему &lt;code&gt;data-testid&lt;/code&gt; больше не работает, куда делась кнопка. При этом без тестов я просто боюсь деплоить.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Skill для автопостинга в Telegram: завайбкодил за стрим</title>
      <link>https://sereja.tech/blog/blog-to-telegram-skill/</link>
      <pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/blog-to-telegram-skill/</guid>
      <description>&lt;p&gt;Написал статью — копирую текст в Telegram. Надоело. За 2 часа стрима сделал skill.&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/BxkAfHxQ9BU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;После каждой публикации — четыре клика. Telegram. Превью. Ссылка. Отправить.&lt;/p&gt;&#xA;&lt;h2 id=&#34;решение&#34;&gt;&#xA;  &lt;span&gt;Решение&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d0%b5&#34; aria-label=&#34;Ссылка на раздел «Решение»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;div class=&#34;callout insight&#34;&gt;&#xA;  &lt;div class=&#34;callout-head&#34;&gt;&#xA;    &lt;strong&gt;&lt;/strong&gt;&#xA;    &lt;button class=&#34;callout-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать промпт&#34; onclick=&#34;navigator.clipboard.writeText(this.closest(&#39;.callout&#39;).querySelector(&#39;.callout-body&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;callout-body&#34;&gt;Создай skill blog-to-telegram. Находит последнюю статью через git log, генерирует превью через Haiku субагента, отправляет в Telegram через Python скрипт.&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Claude Code на Opus 4.5 выдал рабочий код за 8 минут.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two-Stage AI Pipeline: как платить вдвое меньше за генерацию</title>
      <link>https://sereja.tech/blog/two-stage-ai-pipeline/</link>
      <pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/two-stage-ai-pipeline/</guid>
      <description>&lt;p&gt;$87 в месяц на дайджесты чата. Посмотрел логи — Pro-модель тратит 80% токенов на поиск тем в JSON. Разделил на два этапа. Теперь $35.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Делаю бота для дайджестов чата @vibecod3rs. 200-400 сообщений в день. На выходе — структурированный дайджест с ресурсами, решениями, инструментами.&lt;/p&gt;&#xA;&lt;p&gt;Первая версия: всё в Pro. Она и темы извлекает, и текст пишет. Работает, но счёт за январь:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;80-120K токенов на вход (зависит от активности чата)&lt;/li&gt;&#xA;&lt;li&gt;$2.5-3.5 за дайджест&lt;/li&gt;&#xA;&lt;li&gt;30 дайджестов → $87&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Pro отлично пишет. Но $2/1M токенов за то, чтобы найти в JSON нужные поля и сгруппировать? Дорого.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Контекст проекта в GitHub Issues: делегируй агенту</title>
      <link>https://sereja.tech/blog/github-issues-project-context/</link>
      <pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/github-issues-project-context/</guid>
      <description>&lt;p&gt;Созвон с Максом по курсу. Час обсуждений — аудитория, структура, цены, воронка, платежи. Granola записала и сделала саммари. Контекст есть. Где его хранить, чтобы не потерялся?&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Контекст из Granola — страница текста. Нас двое в проекте. Куда положить, чтобы версионировалось, читалось агентами через API и не терялось в чатах?&lt;/p&gt;&#xA;&lt;p&gt;docs/ в репо — нужен коммит для каждой правки. GitHub Wiki — отдельный клон, неудобно. Notion — нет нормального API для агентов. README — засоряется.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Почему GPT не умеет искать: эмбединги на M1</title>
      <link>https://sereja.tech/blog/local-rag-embeddings-m1/</link>
      <pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/local-rag-embeddings-m1/</guid>
      <description>&lt;p&gt;Спросил у Claude: &amp;ldquo;это тоже AI? почему генеративная модель не может делать эмбединги?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Может. Но не должна.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня накопились транскрипты менторских сессий. Часы записей. Хочу спросить &amp;ldquo;что я обещал Лене по домашке?&amp;rdquo; — и получить цитату, а не пересказ.&lt;/p&gt;&#xA;&lt;p&gt;Первая мысль: закинуть в Claude Code. Но один транскрипт — 15000 слов. Десять сессий — 150000 слов, примерно 100K токенов. Контекст Claude — 200K. На второй вопрос уже не хватит.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Рой агентов вместо верстки: делегируем дизайн страницы</title>
      <link>https://sereja.tech/blog/agent-swarm-frontend/</link>
      <pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/agent-swarm-frontend/</guid>
      <description>&lt;p&gt;Вчера в 19:22 мне нужно было быстро собрать страницу с результатами урока для Session #7. Вместо того чтобы открывать редактор кода и набрасывать структуру вручную, я решил проверить, насколько далеко можно зайти в управлении &amp;ldquo;роем&amp;rdquo; агентов.&lt;/p&gt;&#xA;&lt;p&gt;Я отправил один запрос:&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;callout insight&#34;&gt;&#xA;  &lt;div class=&#34;callout-head&#34;&gt;&#xA;    &lt;strong&gt;&lt;/strong&gt;&#xA;    &lt;button class=&#34;callout-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать промпт&#34; onclick=&#34;navigator.clipboard.writeText(this.closest(&#39;.callout&#39;).querySelector(&#39;.callout-body&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;callout-body&#34;&gt;сделай плз 3 версии этого дизайна через субагенты с использованием скилла на frontend design&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;почему-это-сработало&#34;&gt;&#xA;  &lt;span&gt;Почему это сработало&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d1%8d%d1%82%d0%be-%d1%81%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%bb%d0%be&#34; aria-label=&#34;Ссылка на раздел «Почему это сработало»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Я не хотел тратить вечер на подбор шрифтов или выравнивание блоков. У меня на руках были все данные: транскрипт, видео и список задач. Моя цель — продукт, который поможет студенту, а не сам процесс написания кода.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ASCII-дашборды вместо веб-интерфейсов</title>
      <link>https://sereja.tech/blog/ascii-dashboard-analytics/</link>
      <pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/ascii-dashboard-analytics/</guid>
      <description>&lt;p&gt;Три слова в терминале. Через две секунды — воронка, конверсия, источники трафика.&lt;/p&gt;&#xA;&lt;p&gt;Без браузера. Без ожидания загрузки.&lt;/p&gt;&#xA;&lt;h2 id=&#34;контекст&#34;&gt;&#xA;  &lt;span&gt;Контекст&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%ba%d1%81%d1%82&#34; aria-label=&#34;Ссылка на раздел «Контекст»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня есть Next.js дашборд для Telegram-бота кружка. Графики. Таблицы. Фильтры. Всё красивое.&lt;/p&gt;&#xA;&lt;p&gt;Проблема: чтобы глянуть сколько оплат за день — надо запустить &lt;code&gt;npm run dev&lt;/code&gt;, открыть браузер, найти нужную страницу. Минута на то, что можно узнать за секунду.&lt;/p&gt;&#xA;&lt;p&gt;Терминал с Claude Code и так открыт. Почему бы не спросить здесь?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clawdbot: Claude Code с телефона через Telegram</title>
      <link>https://sereja.tech/blog/clawdbot-telegram-max/</link>
      <pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/clawdbot-telegram-max/</guid>
      <description>&lt;p&gt;Claude Code живёт в терминале. Терминал — на компе дома. А ты в кофейне, в метро, на созвоне.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Хочется: написать в Telegram «создай landing page для проекта X» — и получить готовый код в репозитории.&lt;/p&gt;&#xA;&lt;p&gt;Clawdbot — self-hosted бот, который превращает Telegram в интерфейс к AI. Запускается на компьютере, читает сообщения из Telegram, выполняет команды локально. Через скилл &lt;code&gt;coding-agent&lt;/code&gt; управляет Claude Code в фоне.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Один скрипт вместо трёх терминалов</title>
      <link>https://sereja.tech/blog/dev-script-health-checks/</link>
      <pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/dev-script-health-checks/</guid>
      <description>&lt;p&gt;Открыл проект, запустил фронтенд — ошибки 404 в консоли. Бэкенд не работает: на порту 8000 висит процесс от вчерашней сессии.&lt;/p&gt;&#xA;&lt;p&gt;Каждый раз.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня fullstack на FastAPI + React. Запуск выглядит так:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;lsof -ti :8000 | xargs kill&lt;/code&gt; — освободить порт&lt;/li&gt;&#xA;&lt;li&gt;Терминал №1: запустить бэкенд&lt;/li&gt;&#xA;&lt;li&gt;Ждать, пока стартанёт&lt;/li&gt;&#xA;&lt;li&gt;Терминал №2: фронтенд&lt;/li&gt;&#xA;&lt;li&gt;Проверить, что оба отвечают&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Пять шагов. По-моему, терял минут пять каждое утро.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Хуки, которые работают: психология первых 15 секунд</title>
      <link>https://sereja.tech/blog/hooks-that-work-2026/</link>
      <pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/hooks-that-work-2026/</guid>
      <description>&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;15 секунд — столько времени у тебя есть, чтобы удержать читателя. После этого он решает: скроллить дальше или закрыть вкладку.&lt;/p&gt;&#xA;&lt;p&gt;Мои технические статьи собирают клики, но не дочитывания. Заголовок работает, а первый абзац — нет.&lt;/p&gt;&#xA;&lt;h2 id=&#34;делегирую-исследование-агенту&#34;&gt;&#xA;  &lt;span&gt;Делегирую исследование агенту&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b4%d0%b5%d0%bb%d0%b5%d0%b3%d0%b8%d1%80%d1%83%d1%8e-%d0%b8%d1%81%d1%81%d0%bb%d0%b5%d0%b4%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d1%83&#34; aria-label=&#34;Ссылка на раздел «Делегирую исследование агенту»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Вместо того чтобы гуглить «how to write hooks» — попросил Claude Code провести исследование:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Модульные правила: как не утонуть в CLAUDE.md</title>
      <link>https://sereja.tech/blog/modular-rules-claude-md/</link>
      <pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/modular-rules-claude-md/</guid>
      <description>&lt;p&gt;CLAUDE.md раздулся до 400 строк. Агент читает, но запоминает выборочно.&lt;/p&gt;&#xA;&lt;p&gt;Спросил количество студентов — выдал 19. В базе 24.&lt;/p&gt;&#xA;&lt;p&gt;Документация врала в трёх местах по-разному.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-это-случилось&#34;&gt;&#xA;  &lt;span&gt;Как это случилось&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba-%d1%8d%d1%82%d0%be-%d1%81%d0%bb%d1%83%d1%87%d0%b8%d0%bb%d0%be%d1%81%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Как это случилось»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Начинаешь проект — пишешь CLAUDE.md. Команды запуска, структура папок, правила коммитов. Через неделю добавляешь схему базы. Ещё через неделю — тесты и особенности фронтенда.&lt;/p&gt;&#xA;&lt;p&gt;К концу месяца файл на 400 строк. Агент его читает. Но когда данные противоречат друг другу — выбирает случайно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Текст &#43; картинка в одном сообщении Telegram</title>
      <link>https://sereja.tech/blog/telegram-single-message-digest/</link>
      <pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/telegram-single-message-digest/</guid>
      <description>&lt;p&gt;Бот для дайджестов. Текст + комикс снизу, в одном сообщении.&lt;/p&gt;&#xA;&lt;p&gt;Публикую — картинки нет. Через 5 секунд обновляю чат — появилась.&lt;/p&gt;&#xA;&lt;p&gt;Разбираюсь.&lt;/p&gt;&#xA;&lt;h2 id=&#34;задача&#34;&gt;&#xA;  &lt;span&gt;Задача&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Задача»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Хочу отправить длинный текст (2000+ символов) с картинкой. Картинка должна быть под текстом, крупная.&lt;/p&gt;&#xA;&lt;p&gt;Стандартный &lt;code&gt;sendPhoto&lt;/code&gt; не подходит — у него лимит caption в 1024 символа. Для Premium — 2048, но всё равно мало.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Метод&lt;/th&gt;&#xA;          &lt;th&gt;Лимит текста&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;sendPhoto (caption)&lt;/td&gt;&#xA;          &lt;td&gt;1024 / 2048 символов&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;sendMessage&lt;/td&gt;&#xA;          &lt;td&gt;4096 символов&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;решение-linkpreviewoptions&#34;&gt;&#xA;  &lt;span&gt;Решение: LinkPreviewOptions&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-linkpreviewoptions&#34; aria-label=&#34;Ссылка на раздел «Решение: LinkPreviewOptions»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;В Bot API 7.0 добавили &lt;code&gt;LinkPreviewOptions&lt;/code&gt;. Можно указать URL картинки, и Telegram покажет её как превью ссылки. Текст при этом полный — до 4096 символов.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как делиться скиллами Claude Code</title>
      <link>https://sereja.tech/blog/claude-code-skills-distribution/</link>
      <pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-skills-distribution/</guid>
      <description>&lt;p&gt;15 скиллов за полгода. gh-issues, cc-analytics, blog-post&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Каждый раз когда кто-то спрашивает — кидаю ссылку на GitHub и говорю «скопируй папку».&lt;/p&gt;&#xA;&lt;p&gt;Надоело. Разобрался как делиться нормально.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Скиллы лежат в &lt;code&gt;~/.claude/skills/&lt;/code&gt;. Хочешь поделиться — копируй руками. Для себя норм. Для десяти человек — уже нет.&lt;/p&gt;&#xA;&lt;p&gt;В октябре 2025 Anthropic выкатили плагины. Упаковываешь скиллы, команды и хуки в один пакет — установка одной командой.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Логи Claude Code — твоя карта проектов</title>
      <link>https://sereja.tech/blog/claude-code-logs-project-status/</link>
      <pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-logs-project-status/</guid>
      <description>&lt;p&gt;Спросил Claude Code: с какими проектами я работал последние два дня?&lt;/p&gt;&#xA;&lt;p&gt;Семь репозиториев. Четыре не синхронизированы.&lt;/p&gt;&#xA;&lt;p&gt;44 коммита висят локально. Самый старый — трёхнедельной давности.&lt;/p&gt;&#xA;&lt;h2 id=&#34;где-искать&#34;&gt;&#xA;  &lt;span&gt;Где искать&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b3%d0%b4%d0%b5-%d0%b8%d1%81%d0%ba%d0%b0%d1%82%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Где искать»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Claude Code пишет сессии в &lt;code&gt;~/.claude/projects/&lt;/code&gt;. Формат — JSONL. Имя папки = путь к проекту, где слеши заменены на дефисы.&lt;/p&gt;&#xA;&lt;p&gt;Файлы обновляются при запуске. По датам модификации видно, над чем работал.&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;  &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать код&#34; onclick=&#34;navigator.clipboard.writeText(this.parentElement.querySelector(&#39;pre&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;find ~/.claude/projects -type f -name &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;*.jsonl&amp;#34;&lt;/span&gt; -mtime -2 &lt;span style=&#34;color:#1f2328&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  sed &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#39;s|.*projects/||; s|/.*||&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  sort -u &lt;span style=&#34;color:#1f2328&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#cf222e&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#6639ba&#34;&gt;read&lt;/span&gt; d&lt;span style=&#34;color:#1f2328&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;do&lt;/span&gt; &lt;span style=&#34;color:#6639ba&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#953800&#34;&gt;$d&lt;/span&gt;&lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;|&lt;/span&gt; sed &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#39;s|-|/|g&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;;&lt;/span&gt; &lt;span style=&#34;color:#cf222e&#34;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Путь &lt;code&gt;-Users-ris-Documents-GitHub-hsl-mozg&lt;/code&gt; превращается в &lt;code&gt;/Users/ris/Documents/GitHub/hsl-mozg&lt;/code&gt;. Дефисы вместо слешей.&lt;/p&gt;</description>
    </item>
    <item>
      <title>zoxide &#43; fzf: как перестать печатать пути в терминале</title>
      <link>https://sereja.tech/blog/zoxide-fzf-terminal-navigation/</link>
      <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/zoxide-fzf-terminal-navigation/</guid>
      <description>&lt;p&gt;Установил zoxide. Не работает.&lt;/p&gt;&#xA;&lt;p&gt;Полчаса искал причину — оказалось, сам сломал одной строкой.&lt;/p&gt;&#xA;&lt;p&gt;Починил, добавил fzf. Теперь &lt;code&gt;z hsl&lt;/code&gt; вместо &lt;code&gt;cd ~/Documents/GitHub/hsl-dashboard&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-такое-zoxide&#34;&gt;&#xA;  &lt;span&gt;Что такое zoxide&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-zoxide&#34; aria-label=&#34;Ссылка на раздел «Что такое zoxide»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Умный &lt;code&gt;cd&lt;/code&gt;. Запоминает куда ты ходишь и потом прыгает туда по ключевому слову.&lt;/p&gt;&#xA;&lt;p&gt;Написан на Rust, работает быстрее autojump в 10 раз. Стартует за 5ms против 50ms у autojump. На практике разница незаметна, но приятно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мой стек для анализа логов Claude Code</title>
      <link>https://sereja.tech/blog/claude-code-logs-stack/</link>
      <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/claude-code-logs-stack/</guid>
      <description>&lt;p&gt;Хочу превращать рабочие сессии в контент.&lt;/p&gt;&#xA;&lt;p&gt;Туториалы, кейсы, метрики — всё лежит в логах.&lt;/p&gt;&#xA;&lt;p&gt;Два часа копался в инструментах. Перепробовал пять штук.&lt;/p&gt;&#xA;&lt;h2 id=&#34;где-лежат-логи&#34;&gt;&#xA;  &lt;span&gt;Где лежат логи&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b3%d0%b4%d0%b5-%d0%bb%d0%b5%d0%b6%d0%b0%d1%82-%d0%bb%d0%be%d0%b3%d0%b8&#34; aria-label=&#34;Ссылка на раздел «Где лежат логи»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Claude Code пишет в &lt;code&gt;~/.claude/projects/&lt;/code&gt;. Каждая сессия — отдельный JSONL файл:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;  &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать код&#34; onclick=&#34;navigator.clipboard.writeText(this.parentElement.querySelector(&#39;pre&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;~/.claude/projects/&#xA;└── -Users-ris-myproject/&#xA;    ├── 08fce8c2-8453-42da-a52c.jsonl&#xA;    └── settings.json&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Путь к проекту закодирован: слеши становятся дефисами. Внутри — поток событий: сообщения, вызовы инструментов, результаты. Метаданные: стоимость, время, токены.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MapReduce для субагентов: 12800 строк без потери контекста</title>
      <link>https://sereja.tech/blog/mapreduce-subagents/</link>
      <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/mapreduce-subagents/</guid>
      <description>&lt;p&gt;Файл субтитров — 12 тысяч строк. Читаю кусками по тысяче.&lt;/p&gt;&#xA;&lt;p&gt;На восьмом куске — Context limit reached.&lt;/p&gt;&#xA;&lt;p&gt;А я ещё не начал генерировать конспект.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-контекст--жёсткий-лимит&#34;&gt;&#xA;  &lt;span&gt;Проблема: контекст — жёсткий лимит&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%ba%d1%81%d1%82--%d0%b6%d1%91%d1%81%d1%82%d0%ba%d0%b8%d0%b9-%d0%bb%d0%b8%d0%bc%d0%b8%d1%82&#34; aria-label=&#34;Ссылка на раздел «Проблема: контекст — жёсткий лимит»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У Opus 4.5 окно в 200 тысяч токенов. Звучит много — пока не начнёшь читать большие файлы.&lt;/p&gt;&#xA;&lt;p&gt;Мне нужно было сделать конспект двухчасового урока по вайбкодингу. Файл субтитров — 12800 строк. Каждое чтение по тысяче строк съедает процентов десять контекста. Плюс системный промпт, история чата, инструменты.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Видео-пайплайн на Claude Code: от записи до YouTube</title>
      <link>https://sereja.tech/blog/video-pipeline-claude-code/</link>
      <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/video-pipeline-claude-code/</guid>
      <description>&lt;p&gt;Вчера записал двухчасовой воркшоп. Впереди рутина: субтитры, таймкоды, превью, загрузка.&lt;/p&gt;&#xA;&lt;p&gt;Раньше на это уходило полдня — час на правку субтитров, ещё час на таймкоды и остаток на мелочи.&lt;/p&gt;&#xA;&lt;p&gt;Теперь говорю «опубликуй видео» — и иду пить кофе.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема&#34;&gt;&#xA;  &lt;span&gt;Проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;После каждого занятия один и тот же список дел. Транскрибировать аудио. Разметить главы. Сделать превью. Написать описание с таймкодами. Загрузить на YouTube. Собрать страницу урока для студентов.&lt;/p&gt;</description>
    </item>
    <item>
      <title>React-презентация без сборки: Editorial Brutalism на CDN</title>
      <link>https://sereja.tech/blog/react-presentation-no-build/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/react-presentation-no-build/</guid>
      <description>&lt;p&gt;Презентация для первого урока. 8й поток курса по вайбкодингу.&lt;/p&gt;&#xA;&lt;p&gt;19 человек — дизайнеры, юристы, психолог, директор парков развлечений. PowerPoint не годился.&lt;/p&gt;&#xA;&lt;p&gt;За вечер собрал React-презентацию с grain-текстурой и пульсирующей картой мира. Без npm.&lt;/p&gt;&#xA;&lt;h2 id=&#34;почему-не-powerpoint&#34;&gt;&#xA;  &lt;span&gt;Почему не PowerPoint&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d0%bd%d0%b5-powerpoint&#34; aria-label=&#34;Ссылка на раздел «Почему не PowerPoint»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Курс про создание вещей с помощью AI. Показывать скучные слайды — странно. Студенты сразу видят: преподаватель сам не пользуется тем, чему учит.&lt;/p&gt;&#xA;&lt;p&gt;Хотелось grain-текстуру поверх всего. Skew при смене слайдов. Пульсирующие точки на карте — участники из 9 городов. В PowerPoint такое не соберёшь. В Keynote тоже. А в Claude Code — за час.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Structured Output: почему текстовые промпты — это хрупко</title>
      <link>https://sereja.tech/blog/structured-output-llm/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/structured-output-llm/</guid>
      <description>&lt;p&gt;У меня бот генерирует дайджесты чата. В промпте было написано: «завершай хештегом #дайджестчата».&lt;/p&gt;&#xA;&lt;p&gt;Из 10 запусков 1-2 раза хештег пропадал.&lt;/p&gt;&#xA;&lt;p&gt;Текстовые инструкции в промпте — это не гарантия. Это просьба.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-с-текстовыми-промптами&#34;&gt;&#xA;  &lt;span&gt;Проблема с текстовыми промптами&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d1%81-%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%bc%d0%b8-%d0%bf%d1%80%d0%be%d0%bc%d0%bf%d1%82%d0%b0%d0%bc%d0%b8&#34; aria-label=&#34;Ссылка на раздел «Проблема с текстовыми промптами»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Мой промпт был на 47 строк. HTML-формат, секции, ссылки, что игнорировать. И да — хештег в конце.&lt;/p&gt;&#xA;&lt;p&gt;Модель делала почти всё. Хештег появлялся в 8-9 случаях из 10. Ссылки иногда шли без &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;. Секции назывались то «Ресурсы», то «Полезные ссылки». Не сломано. Но и не надёжно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Telegram API вместо JSON экспорта</title>
      <link>https://sereja.tech/blog/telegram-api-vs-json-export/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/telegram-api-vs-json-export/</guid>
      <description>&lt;p&gt;Веду курс по вайбкодингу, 19 человек в чате. Надо понимать кто активен.&lt;/p&gt;&#xA;&lt;p&gt;Экспортировал чат через Telegram Desktop — после каждого урока.&lt;/p&gt;&#xA;&lt;p&gt;На третий раз сообразил: есть же API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-было&#34;&gt;&#xA;  &lt;span&gt;Как было&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba-%d0%b1%d1%8b%d0%bb%d0%be&#34; aria-label=&#34;Ссылка на раздел «Как было»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Telegram Desktop → чат → три точки → Export → ждать → искать файл → парсить JSON. Семь кликов ради списка сообщений.&lt;/p&gt;&#xA;&lt;p&gt;Файлы разбиты по датам, структура вложенная, текст иногда массив объектов вместо строки. Telegram делал экспорт для архивации, не для ежедневной работы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UX видео-уроков: что реально работает</title>
      <link>https://sereja.tech/blog/video-lesson-ux/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/video-lesson-ux/</guid>
      <description>&lt;p&gt;Нужна была страница для воркшопа.&lt;/p&gt;&#xA;&lt;p&gt;Сказал Claude Code: «возьми шаблон из mentor, там похожее».&lt;/p&gt;&#xA;&lt;p&gt;Результат — каша. Проще было с нуля.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-нужно-было&#34;&gt;&#xA;  &lt;span&gt;Что нужно было&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d0%bd%d1%83%d0%b6%d0%bd%d0%be-%d0%b1%d1%8b%d0%bb%d0%be&#34; aria-label=&#34;Ссылка на раздел «Что нужно было»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Страница для записи воркшопа: YouTube-видео, таймкоды, конспект, задания, ссылки. Я не смотрю код — смотрю работает или нет. Не работало.&lt;/p&gt;&#xA;&lt;p&gt;Решил сначала почитать исследования. Сформулировать спеку, потом отдать агенту. И хорошо что так сделал.&lt;/p&gt;&#xA;&lt;h2 id=&#34;nng-про-видео&#34;&gt;&#xA;  &lt;span&gt;NN/g про видео&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#nng-%d0%bf%d1%80%d0%be-%d0%b2%d0%b8%d0%b4%d0%b5%d0%be&#34; aria-label=&#34;Ссылка на раздел «NN/g про видео»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У Nielsen Norman Group есть статья &lt;a href=&#34;https://www.nngroup.com/articles/instructional-video-guidelines/&#34;&gt;«Videos as Instructional Content»&lt;/a&gt;. Оттуда:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Информация или функция: какое приложение ты строишь</title>
      <link>https://sereja.tech/blog/app-types-guide/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/app-types-guide/</guid>
      <description>&lt;p&gt;Ты хочешь сделать приложение про рецепты.&lt;/p&gt;&#xA;&lt;p&gt;Но «приложение про рецепты» — это два совершенно разных продукта.&lt;/p&gt;&#xA;&lt;p&gt;Один показывает рецепты. Другой — сканирует холодильник и говорит, что приготовить.&lt;/p&gt;&#xA;&lt;h2 id=&#34;главное-разделение&#34;&gt;&#xA;  &lt;span&gt;Главное разделение&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b3%d0%bb%d0%b0%d0%b2%d0%bd%d0%be%d0%b5-%d1%80%d0%b0%d0%b7%d0%b4%d0%b5%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5&#34; aria-label=&#34;Ссылка на раздел «Главное разделение»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Любое приложение отвечает на один из двух вопросов:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;  &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать код&#34; onclick=&#34;navigator.clipboard.writeText(this.parentElement.querySelector(&#39;pre&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;«Что тут написано?» → ИНФОРМАЦИОННОЕ&#xA;«Что мне сделать?» → ФУНКЦИОНАЛЬНОЕ&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Вопрос не в технологиях — в намерении пользователя.&lt;/p&gt;&#xA;&lt;h3 id=&#34;информационное-приложение&#34;&gt;&#xA;  &lt;span&gt;Информационное приложение&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b8%d0%bd%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%86%d0%b8%d0%be%d0%bd%d0%bd%d0%be%d0%b5-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5&#34; aria-label=&#34;Ссылка на раздел «Информационное приложение»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Пользователь приходит &lt;strong&gt;читать, смотреть, узнавать&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как мой AI-агент отправил 717 сообщений за 8 минут</title>
      <link>https://sereja.tech/blog/telegram-broadcast-slow/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/telegram-broadcast-slow/</guid>
      <description>&lt;p&gt;Попросил Claude Code сделать рассылку в Telegram-боте. 717 получателей.&lt;/p&gt;&#xA;&lt;p&gt;Смотрю на прогресс — обновляется каждые 25 сообщений. Медленно.&lt;/p&gt;&#xA;&lt;p&gt;8 минут на то, что должно было занять полминуты. Спрашиваю агента: почему так долго?&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-агент-использовал&#34;&gt;&#xA;  &lt;span&gt;Что агент использовал&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bb&#34; aria-label=&#34;Ссылка на раздел «Что агент использовал»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Claude запустил скрипт broadcast.py, который я когда-то написал для небольших рассылок:&lt;/p&gt;&#xA;&lt;div class=&#34;code-block&#34;&gt;&#xA;  &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; aria-label=&#34;Скопировать код&#34; onclick=&#34;navigator.clipboard.writeText(this.parentElement.querySelector(&#39;pre&#39;).innerText.trim()).then(()=&gt;{this.textContent=&#39;скопировано&#39;;setTimeout(()=&gt;{this.textContent=&#39;копировать&#39;},1500)})&#34;&gt;копировать&lt;/button&gt;&#xA;  &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#cf222e&#34;&gt;for&lt;/span&gt; user &lt;span style=&#34;color:#0550ae&#34;&gt;in&lt;/span&gt; users&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resp &lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;post&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;API_URL&lt;span style=&#34;color:#1f2328&#34;&gt;,&lt;/span&gt; json&lt;span style=&#34;color:#0550ae&#34;&gt;=&lt;/span&gt;payload&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#cf222e&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;i &lt;span style=&#34;color:#0550ae&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;%&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;25&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#0550ae&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        time&lt;span style=&#34;color:#0550ae&#34;&gt;.&lt;/span&gt;sleep&lt;span style=&#34;color:#1f2328&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#0550ae&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#1f2328&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Синхронный запрос — ждём ответа — следующий запрос. Пауза каждые 25, &amp;ldquo;чтобы не получить 429&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Персонализация уроков через данные о студентах</title>
      <link>https://sereja.tech/blog/personalized-teaching-student-data/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/personalized-teaching-student-data/</guid>
      <description>&lt;p&gt;Максим делает аналитику для селлеров WildBerries. Елена — бота для Figma. Андрей — снайпер для Zora.&lt;/p&gt;&#xA;&lt;p&gt;Двенадцать студентов. Десять разных сфер. Раньше я говорил: «сделаем калькулятор». Сегодня: «Максим, давай калькулятор маржи для твоих товаров».&lt;/p&gt;&#xA;&lt;p&gt;Разница? Максим слушает.&lt;/p&gt;&#xA;&lt;h2 id=&#34;откуда-взялась-проблема&#34;&gt;&#xA;  &lt;span&gt;Откуда взялась проблема&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%be%d1%82%d0%ba%d1%83%d0%b4%d0%b0-%d0%b2%d0%b7%d1%8f%d0%bb%d0%b0%d1%81%d1%8c-%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Откуда взялась проблема»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Пятая когорта. На середине урока понял, что даю примеры про e-commerce дизайнеру. А примеры про UI — менеджеру проектов. Перепутал профили двух студентов, потерял нить.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как трекать прогресс студентов на онлайн-курсе с помощью AI</title>
      <link>https://sereja.tech/blog/ai-student-progress-tracking/</link>
      <pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/ai-student-progress-tracking/</guid>
      <description>&lt;p&gt;Веду курс по вайбкодингу. 20 человек, восьмой поток.&lt;/p&gt;&#xA;&lt;p&gt;Везде продают LMS с дашбордами, грейдингом, аналитикой вовлечённости.&lt;/p&gt;&#xA;&lt;p&gt;Мне не нужно. Нужно знать КТО студент, а не СКОЛЬКО баллов.&lt;/p&gt;&#xA;&lt;h2 id=&#34;почему-не-lms&#34;&gt;&#xA;  &lt;span&gt;Почему не LMS&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d0%bd%d0%b5-lms&#34; aria-label=&#34;Ссылка на раздел «Почему не LMS»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;EdTech-платформы строятся под тысячи пользователей. Автопроверка тестов, алгоритмы рекомендаций, адаптивные траектории.&lt;/p&gt;&#xA;&lt;p&gt;Но у меня 20 человек. Каждого знаю по имени. Каждому готовлю примеры под его проект. Moodle или iSpring тут — оверкилл.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Один источник правды: почему нельзя копировать данные</title>
      <link>https://sereja.tech/blog/ssot-documentation/</link>
      <pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/ssot-documentation/</guid>
      <description>&lt;p&gt;Скопировал список студентов из базы в README.md.&lt;/p&gt;&#xA;&lt;p&gt;На восьмой день данные разъехались.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-случилось&#34;&gt;&#xA;  &lt;span&gt;Что случилось&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%81%d0%bb%d1%83%d1%87%d0%b8%d0%bb%d0%be%d1%81%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Что случилось»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня платформа для курсов. Студенты — в SQLite: имена, цели, прогресс.&lt;/p&gt;&#xA;&lt;p&gt;Решил сделать README в папке когорты. Скопировал туда имена и цели. Открываешь папку — сразу видно кто есть кто. Красота.&lt;/p&gt;&#xA;&lt;p&gt;Потом Аня обновила цели через интерфейс. База обновилась. README — нет.&lt;/p&gt;&#xA;&lt;p&gt;Два источника. Разные данные. Какой правильный?&lt;/p&gt;</description>
    </item>
    <item>
      <title>MIDI &#43; OBS &#43; Claude Code: за 3 часа от идеи до решения</title>
      <link>https://sereja.tech/blog/midi-obs-claude-code/</link>
      <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/midi-obs-claude-code/</guid>
      <description>&lt;p&gt;У меня лежал Arturia MiniLab 3. Использовал только для музыки.&lt;/p&gt;&#xA;&lt;p&gt;Подумал — почему бы не переключать им сцены в OBS во время стримов?&lt;/p&gt;&#xA;&lt;p&gt;Три часа с Claude Code. Результат: пэды переключают сцены, активная сцена подсвечивается.&lt;/p&gt;&#xA;&lt;h2 id=&#34;задача&#34;&gt;&#xA;  &lt;span&gt;Задача&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Задача»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Хотел простую вещь: нажимаю Pad 1 — включается сцена &amp;ldquo;Десктоп&amp;rdquo;. Pad 2 — камера. Pad 3 — телефон. Без мыши, без горячих клавиш.&lt;/p&gt;&#xA;&lt;p&gt;Бонус: чтобы пэд активной сцены светился зелёным. Раньше переключался мышкой во время стрима — терял фокус, пару раз нажимал не туда. С пэдами переключаюсь вслепую.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Дневник вайбкодера: каждая сессия — статья</title>
      <link>https://sereja.tech/blog/vibecoder-diary/</link>
      <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/vibecoder-diary/</guid>
      <description>&lt;p&gt;Вчера настраивал MIDI-контроллер для OBS. Сегодня не помню, какой SysEx-формат использовал для LED-индикации. Полчаса рылся в истории чата, искал строку &lt;code&gt;F0 00 20 6B 7F 42...&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Это типичная проблема вайбкодинга: решаешь задачу в потоке, а через неделю ищешь в истории чата — и не находишь.&lt;/p&gt;&#xA;&lt;p&gt;Этот блог — попытка решить эту проблему. Каждая сессия становится статьёй через набор AI-скиллов.&lt;/p&gt;&#xA;&lt;h2 id=&#34;проблема-знания-растворяются&#34;&gt;&#xA;  &lt;span&gt;Проблема: знания растворяются&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b1%d0%bb%d0%b5%d0%bc%d0%b0-%d0%b7%d0%bd%d0%b0%d0%bd%d0%b8%d1%8f-%d1%80%d0%b0%d1%81%d1%82%d0%b2%d0%be%d1%80%d1%8f%d1%8e%d1%82%d1%81%d1%8f&#34; aria-label=&#34;Ссылка на раздел «Проблема: знания растворяются»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Каждая сессия с Claude Code — это решённая задача. Настроил деплой, разобрался с API, нашёл баг в конфиге. В моменте всё понятно. Через неделю — чистый лист.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Зачем я добавил фактчекера в свой AI-воркфлоу</title>
      <link>https://sereja.tech/blog/fact-checker-in-ai-workflow/</link>
      <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/fact-checker-in-ai-workflow/</guid>
      <description>&lt;p&gt;Писал статью про LLM coding воркфлоу.&lt;/p&gt;&#xA;&lt;p&gt;Упомянул Gemini 2.0 Flash как хороший арбитр между моделями.&lt;/p&gt;&#xA;&lt;p&gt;Проблема: Gemini 2.0 Flash — это декабрь 2024, а сейчас январь 2026. Модель устарела на год.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-я-это-пропустил&#34;&gt;&#xA;  &lt;span&gt;Как я это пропустил&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d0%b0%d0%ba-%d1%8f-%d1%8d%d1%82%d0%be-%d0%bf%d1%80%d0%be%d0%bf%d1%83%d1%81%d1%82%d0%b8%d0%bb&#34; aria-label=&#34;Ссылка на раздел «Как я это пропустил»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;У меня есть процесс для текстов — deaify-text. Три параллельных критика: один ищет шаблонные фразы ИИ, второй анализирует ритм, третий проверяет где добавить конкретику.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как работать с LLM в 2026: workflow Addy Osmani</title>
      <link>https://sereja.tech/blog/llm-coding-workflow-2026/</link>
      <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/llm-coding-workflow-2026/</guid>
      <description>&lt;p&gt;Addy Osmani из Google опубликовал свой подход к работе с AI-ассистентами.&lt;/p&gt;&#xA;&lt;p&gt;Собрал его инсайты плюс практики из других источников — O&amp;rsquo;Reilly, incident.io, Builder.io.&lt;/p&gt;&#xA;&lt;p&gt;Получился сборник того, что реально работает в 2026.&lt;/p&gt;&#xA;&lt;h2 id=&#34;планируй-до-кода&#34;&gt;&#xA;  &lt;span&gt;Планируй до кода&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%bb%d0%b0%d0%bd%d0%b8%d1%80%d1%83%d0%b9-%d0%b4%d0%be-%d0%ba%d0%be%d0%b4%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Планируй до кода»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&amp;ldquo;Waterfall за 15 минут&amp;rdquo; — так Osmani называет подход. Перед первой строкой кода пишешь документ: что делаем, что не делаем, какие edge cases. Harper Reed идёт дальше — у него два файла: &lt;code&gt;spec.md&lt;/code&gt; с требованиями и &lt;code&gt;plan.md&lt;/code&gt; с пошаговым планом.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как устроены конвейеры AI-контента: 12 паттернов</title>
      <link>https://sereja.tech/blog/ai-writing-pipelines/</link>
      <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/ai-writing-pipelines/</guid>
      <description>&lt;p&gt;У меня три проекта, где нужно генерировать контент: персональный блог, менторские сессии, когорты кружка вайбкодинга.&lt;/p&gt;&#xA;&lt;p&gt;Каждый проект — свой набор костылей. Захотелось понять, как это делают профессионально.&lt;/p&gt;&#xA;&lt;p&gt;88 источников, 12 паттернов, много диаграмм. Это то, что я узнал.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-зачем-это-исследование&#34;&gt;&#xA;  &lt;span&gt;1. Зачем это исследование&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#1-%d0%b7%d0%b0%d1%87%d0%b5%d0%bc-%d1%8d%d1%82%d0%be-%d0%b8%d1%81%d1%81%d0%bb%d0%b5%d0%b4%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5&#34; aria-label=&#34;Ссылка на раздел «1. Зачем это исследование»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Три проекта, три разных рабочих процесса:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;sereja.tech&lt;/strong&gt; — этот блог. Процесс: тема → исследование через Exa → черновик → прогон через deaify (4 критика убирают AI-паттерны) → публикация. Раньше работало медленно — исследование занимало больше времени, чем написание. Но для этой статьи я запустил 4 параллельных research-субагента через Exa — весь сбор 88 источников занял 15 минут вместо нескольких часов.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Убираем аишность: параллельные критики вместо rewriter</title>
      <link>https://sereja.tech/blog/multi-agent-text-deaify/</link>
      <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/multi-agent-text-deaify/</guid>
      <description>&lt;p&gt;Попросил Claude переписать текст &amp;ldquo;более человечно&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Получил на 50% длиннее с теми же AI-маркерами.&lt;/p&gt;&#xA;&lt;h2 id=&#34;почему-один-rewriter-не-работает&#34;&gt;&#xA;  &lt;span&gt;Почему один rewriter не работает&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d0%be%d0%b4%d0%b8%d0%bd-rewriter-%d0%bd%d0%b5-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82&#34; aria-label=&#34;Ссылка на раздел «Почему один rewriter не работает»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Когда просишь AI &amp;ldquo;сделать текст человечнее&amp;rdquo;, он раздувает контент и заменяет одни паттерны на другие.&lt;/p&gt;&#xA;&lt;p&gt;Протестировал на статье о Tailwind. Оригинал — 320 слов, после &amp;ldquo;humanize&amp;rdquo; — 500+. При этом остались фразы типа &amp;ldquo;И эта нога — хрупкая&amp;rdquo; и равномерные абзацы по 3-4 предложения.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SEO для блога в эру AI: что реально работает в 2026</title>
      <link>https://sereja.tech/blog/seo-for-ai-era/</link>
      <pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/seo-for-ai-era/</guid>
      <description>&lt;p&gt;Переделывал SEO на своём сайте. Думал — добавлю meta description и хватит.&lt;/p&gt;&#xA;&lt;p&gt;Оказалось, в 2026 году этого мало.&lt;/p&gt;&#xA;&lt;p&gt;AI-поисковики хотят structured data, а не просто текст в тегах.&lt;/p&gt;&#xA;&lt;h2 id=&#34;почему-старый-seo-не-работает&#34;&gt;&#xA;  &lt;span&gt;Почему старый SEO не работает&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d1%81%d1%82%d0%b0%d1%80%d1%8b%d0%b9-seo-%d0%bd%d0%b5-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0%d0%b5%d1%82&#34; aria-label=&#34;Ссылка на раздел «Почему старый SEO не работает»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Классический подход: title, description, keywords. Google читает HTML, индексирует текст, показывает в результатах.&lt;/p&gt;&#xA;&lt;p&gt;Проблема: AI-поисковики (Perplexity, SearchGPT, Gemini) работают иначе. Им нужен контекст. Кто автор? Какой тип контента? Как связан с другими страницами?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tailwind уволил 75% команды. AI убил их бизнес-модель</title>
      <link>https://sereja.tech/blog/tailwind-layoffs-ai-impact/</link>
      <pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/tailwind-layoffs-ai-impact/</guid>
      <description>&lt;p&gt;В Tailwind Labs было 4 инженера. Остался один.&lt;/p&gt;&#xA;&lt;p&gt;Revenue упал на 80%.&lt;/p&gt;&#xA;&lt;p&gt;Причина — разработчики больше не ходят в документацию.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-случилось&#34;&gt;&#xA;  &lt;span&gt;Что случилось&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%81%d0%bb%d1%83%d1%87%d0%b8%d0%bb%d0%be%d1%81%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Что случилось»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Tailwind Labs сократила инженерную команду с четырёх человек до одного. Adam Wathan, основатель, назвал причину — «brutal impact of AI» на бизнес.&lt;/p&gt;&#xA;&lt;p&gt;Бизнес-модель была простой: бесплатный CSS-фреймворк → документация → ссылки на платные продукты (Tailwind UI, книги, шаблоны). Разработчики приходили читать доки, видели красивые компоненты, покупали.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Почему model: в slash-командах — это ловушка</title>
      <link>https://sereja.tech/blog/slash-commands-subagents/</link>
      <pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/blog/slash-commands-subagents/</guid>
      <description>&lt;p&gt;Решил сэкономить на токенах. Сделал команду &lt;code&gt;/readme&lt;/code&gt; с &lt;code&gt;model: haiku&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Запустил — вроде работает.&lt;/p&gt;&#xA;&lt;p&gt;Только потом понял, что Opus всё это время делал работу сам.&lt;/p&gt;&#xA;&lt;h2 id=&#34;что-я-хотел&#34;&gt;&#xA;  &lt;span&gt;Что я хотел&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d1%82%d0%be-%d1%8f-%d1%85%d0%be%d1%82%d0%b5%d0%bb&#34; aria-label=&#34;Ссылка на раздел «Что я хотел»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Идея простая: README генерировать на дешёвой модели. Haiku справится, зачем платить за Opus? Добавил в frontmatter команды &lt;code&gt;model: haiku&lt;/code&gt; — логично же.&lt;/p&gt;&#xA;&lt;p&gt;А оно не так работает.&lt;/p&gt;&#xA;&lt;p&gt;Когда запускаешь slash-команду, её текст просто вливается в основной контекст. Какая модель этот контекст обрабатывает — та и выполняет. &lt;code&gt;model:&lt;/code&gt; в frontmatter меняет модель, но текст команды всё равно летит в общий котёл.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обо мне</title>
      <link>https://sereja.tech/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://sereja.tech/about/</guid>
      <description>&lt;p&gt;Привет! Я Сережа Рис.&lt;/p&gt;&#xA;&lt;h2 id=&#34;чем-занимаюсь&#34;&gt;&#xA;  &lt;span&gt;Чем занимаюсь&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d1%87%d0%b5%d0%bc-%d0%b7%d0%b0%d0%bd%d0%b8%d0%bc%d0%b0%d1%8e%d1%81%d1%8c&#34; aria-label=&#34;Ссылка на раздел «Чем занимаюсь»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Я вайбкодер — направляю AI-агентов через промпты вместо того, чтобы писать код руками. Мой основной инструмент — Claude Code.&lt;/p&gt;&#xA;&lt;p&gt;В этом блоге я документирую свой процесс: паттерны работы с агентами, автоматизации на Claude Code, разбор реальных кейсов. Не теория — только то, что использую каждый день.&lt;/p&gt;&#xA;&lt;p&gt;Текущие инструменты собраны на странице &lt;a href=&#34;https://tech.sereja.tech/&#34;&gt;«Мой стек»&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;кружок-вайбкодинга&#34;&gt;&#xA;  &lt;span&gt;Кружок вайбкодинга&lt;/span&gt;&#xA;  &#xA;  &lt;a class=&#34;heading-anchor&#34; href=&#34;#%d0%ba%d1%80%d1%83%d0%b6%d0%be%d0%ba-%d0%b2%d0%b0%d0%b9%d0%b1%d0%ba%d0%be%d0%b4%d0%b8%d0%bd%d0%b3%d0%b0&#34; aria-label=&#34;Ссылка на раздел «Кружок вайбкодинга»&#34;&gt;&#xA;    &lt;i class=&#34;ph ph-link-simple&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Веду &lt;a href=&#34;https://vibecoding.phd?utm_source=sereja_tech&amp;amp;utm_medium=link&amp;amp;utm_campaign=about&#34;&gt;практическую группу&lt;/a&gt;, где учу работать с AI-агентами: от первого промпта до production-пайплайнов. Стримы, разборы, обратная связь.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
