Бесплатный интерактивный курс · aicoding.space

skills-news: новости, которые можно проверить

Курс по пакету @dzhechkov/skills-news: как собрать новостной дайджест со ссылками на каждый источник, как между дайджестами дешёво ловить только новое, и почему в этом пакете ни одно утверждение не попадает в отчёт без подписанного происхождения.

Содержание курса

1. Зачем нужен пакет skills-news

Какую проблему решает пакет и кто такая Мира

Ключевая мысль: новостной дайджест со ссылками на источники

Привет! Этот курс — про пакет @dzhechkov/skills-news: два навыка для Claude Code, которые превращают вопрос «что нового по теме X?» в ответ, который можно проверить.

Знакомься: Мира, участница harness-мастерской. Пакеты dz она уже ставила, а свою первую функцию провела через конвейер feature-adr. Теперь ей поручили ежемесячный обзор новостей по генеративному ИИ. Первая попытка была простой: «расскажи, что нового». Ассистент выдал гладкий текст на две страницы — без единой ссылки. Руководитель прочитал и спросил: «А откуда цифра про 40%?» Ответить было нечем.

Вот эту дыру пакет и закрывает. Он делает новостной дайджест со ссылками на источники: рядом с каждым утверждением стоит ссылка, а в конце отчёта — указатель всех использованных адресов по категориям. Проверяемость здесь не украшение, а смысл всей конструкции.

Что внутри:
- news-digest — полный отчёт за период: исследование по потокам, отбор источников, аудит покрытия, сборка в Markdown (и по желанию .docx);
- news-monitor — дешёвая «дельта»: только то, что появилось с прошлого раза;
- goap-research-ed25519 — обязательный проверяющий бэкенд, который фиксирует происхождение каждого источника.

Исходники и публичное зеркало: github.com/djd1m/dz-harness.

Компромиссы. Сильная сторона: отчёт можно перепроверить по ссылкам, не веря автору на слово. Слабая: полный дайджест делает десятки поисковых запросов и занимает время — для одного точного вопроса это чрезмерно.

💬 Просто попроси.
- «Что умеет пакет skills-news?» → ассистент откроет README пакета и перескажет таблицу навыков.
- «Сделай AI-дайджест за февраль» → ассистент включит навык news-digest и уточнит период и профиль темы.

2. Установка пакета

Два пути установки и почему навыки не нужно «запускать»

Ключевая мысль: установка пакета через dz init

Мира открыла терминал. Пакет надо поставить, и путей два — они не равнозначны.

Путь первый, рекомендуемый. Установка пакета через dz init кладёт выбранные навыки прямо в конфигурацию Claude Code, и ассистент видит их сразу:

dz init --target claude-code --select news-digest,news-monitor

Разберём по частям: --target claude-code указывает, в какую среду ставим, а --select перечисляет навыки через запятую, без пробела после неё.

Путь второй, обычный npm. Команда npm install @dzhechkov/skills-news просто кладёт файлы пакета в проект. Регистрация навыков в ассистенте остаётся на тебе — годится, если ты собираешь конфигурацию вручную.

Дальше Миру ждало самое неожиданное: отдельной команды «запусти дайджест» не существует. Навыки включаются сами, когда твоя фраза совпадает с их триггерами из SKILL.md. «Сделай AI-дайджест за февраль» — и news-digest уже работает. Чтобы увидеть точные триггеры и файлы навыка, спроси dz info news-digest.

Страница пакета — npmjs.com/package/@dzhechkov/skills-news, зеркало исходников — github.com/djd1m/dz-harness.

Компромиссы. Сильная сторона dz init: одна строка — и навыки зарегистрированы. Слабая: нужен установленный dz. У npm install наоборот — никаких лишних зависимостей, зато подключение ручное.

💬 Просто попроси.
- «Поставь навыки новостей в этот проект» → ассистент выполнит установку через dz init --target claude-code --select news-digest,news-monitor.
- «Покажи триггеры news-monitor» → ассистент вызовет dz info news-monitor и перечислит фразы, по которым навык включается.

3. Два навыка: дайджест и монитор

Когда нужен полный отчёт, а когда хватит дельты

Ключевая мысль: выбор между дайджестом и монитором

Теперь у Миры два инструмента, и типичную ошибку новичка она совершила сразу: начала каждый день запускать тяжёлый.

news-digest — это полный отчёт за период. Он делает десятки поисков, проходит по всем потокам темы, проверяет покрытие и собирает документ с разделами, сводной таблицей и указателем источников. Дорого, зато исчерпывающе.

news-monitor — это дельта: «что появилось с прошлого раза?». Он смотрит узко, сравнивает найденное с тем, что уже показывал, и выдаёт короткий список новых пунктов. Дёшево, зато без общей картины.

Правильный ритм, к которому Мира пришла, выглядит так:

  1. монитор — часто (ежедневно или раз в неделю), как пульс темы;
  2. дайджест — периодически (раз в месяц или квартал), как полноценный обзор;
  3. решение о запуске дайджеста принимается по монитору: накопилось достаточно нового — значит, пора.

То есть выбор между дайджестом и монитором — это не вопрос вкуса, а вопрос того, что тебе нужно на выходе: полная картина за период или список изменений с прошлого раза.

Компромиссы. Сильная сторона пары: дорогой инструмент запускается только тогда, когда дешёвый показал, что есть повод. Слабая: два навыка надо держать в голове, и соблазн «сделать дайджест на всякий случай» никуда не девается.

💬 Просто попроси.
- «Что нового по генеративному ИИ с прошлой недели?» → ассистент включит news-monitor и покажет только новые пункты.
- «Собери полный обзор рынка электромобилей за первый квартал для руководства» → ассистент включит news-digest в квартальном режиме.

4. Профиль темы — то, что делает движок универсальным

Почему один и тот же движок работает и по ИИ, и по электромобилям

Ключевая мысль: профиль темы

Вторая задача пришла быстро: такой же обзор, но по рынку электромобилей. Мира уже приготовилась искать другой инструмент — и он не понадобился.

Движок дайджеста не знает ничего про генеративный ИИ. Всю предметную специфику несёт профиль темы — отдельный файл, который подставляется в один и тот же конвейер. В профиле лежат:

  • потоки исследования — направления, по которым ведётся поиск;
  • обязательные сущности — компании и продукты, которые нельзя не упомянуть, разбитые по важности;
  • списки наблюдения — что отслеживаем прицельно;
  • мета-источники — официальные журналы изменений и ленты релизов.

В пакете лежит готовый профиль genai-world для новостей об ИИ и шаблон _template.md, чтобы описать любую другую тему. Профиля нет вовсе? Движок выведет 4–8 потоков из самой темы и продолжит работу — просто менее прицельно.

Важная граница, и она не техническая: корпоративный и конкурентный контекст в опубликованный профиль не кладут. Такой профиль держат локально и не публикуют — то же правило, что и для внешних коммуникаций.

Компромиссы. Сильная сторона: одна методика обслуживает любую тему, а знание предметной области живёт в данных, а не в коде. Слабая: качество обзора прямо упирается в качество профиля — слабый профиль даёт слабый дайджест, и виноват будет «инструмент».

💬 Просто попроси.
- «Заведи профиль темы для рынка электромобилей» → ассистент возьмёт _template.md и заполнит потоки, сущности и мета-источники.
- «Покажи, какие потоки в профиле genai-world» → ассистент откроет профиль и перечислит их.

5. Режимы QUICK, STANDARD и QUARTERLY

Как длина периода задаёт объём работы и число чекпоинтов

Ключевая мысль: режимы quick standard quarterly

Мира спросила ровно то, что спрашивают все: «а сколько это будет длиться?» Ответ зависит от длины периода, и режим выбирается автоматически.

В навыке заданы три режима: QUICK, STANDARD и QUARTERLY. Режим определяется длиной периода, и от него зависят три вещи разом: сколько будет разделов, сколько поисковых запросов и сколько раз тебя спросят «продолжаем?».

| Режим | Период | Разделов | Поисков | Чекпоинтов |
|---|---|---|---|---|
| QUICK | до 2 недель | 3–6 | 15–35 | нет |
| STANDARD | 1–3 месяца | до максимума профиля | 40–90 | 2 |
| QUARTERLY | больше 3 месяцев | максимум профиля, топ-5 за квартал | 80–120 | 2 |

Правила проверки входа простые и жёсткие: период не назван — навык спросит; конец периода в будущем — обрежет его сегодняшним днём и скажет об этом; период больше трёх месяцев — предложит квартальный режим; две недели и меньше — сам перейдёт в QUICK.

Чекпоинт — это пауза, на которой тебе показывают промежуточный результат (сколько поисков сделано, сколько источников по уровням, какие пробелы) и ждут решения: «продолжай», «копни глубже вот здесь», «убери раздел». В QUICK пауз нет намеренно: короткий обзор не окупает остановок.

Компромиссы. Сильная сторона: объём работы соразмерен запросу, и ты не платишь за 120 поисков ради двух недель. Слабая: автоматический выбор иногда промахивается — за бурные две недели QUICK может оказаться тесноват, и режим стоит назвать вручную.

💬 Просто попроси.
- «Что нового по ИИ за последние две недели» → ассистент сам перейдёт в режим QUICK и обойдётся без чекпоинтов.
- «Сделай обзор за полгода, но подробный» → ассистент предложит режим QUARTERLY с топ-5 за квартал.

6. Четыре фазы дайджеста

Вход, исследование, синтез, вывод — и что живёт в каждой

Ключевая мысль: четыре фазы конвейера дайджеста

Мира заметила, что навык не бросается искать сразу. Сначала он выясняет, что именно ищет.

Работа разложена на четыре фазы конвейера дайджеста, и порядок здесь не украшение: каждая фаза опирается на результат предыдущей.

  1. Фаза 0 — вход. Определяются тема, профиль, период, режим, аудитория и форматы вывода; вход проверяется (нет периода — спросят, конец в будущем — обрежут).
  2. Фаза 1 — исследование. Загружается профиль, выполняются два обязательных сплошных прохода, отрабатывают потоки, источники распределяются по уровням, проверяется покрытие. В конце — первый чекпоинт.
  3. Фаза 2 — синтез. Источники сводятся вместе, разделы подбираются под объём найденного, пишутся резюме и сводная таблица. В конце — второй чекпоинт.
  4. Фаза 3 — вывод. Пишется Markdown (всегда) и, если попросили, .docx — со ссылками внутри текста и указателем источников.

Одна тонкость про фазу 2, которую легко пропустить: разделы адаптивные. Пять и больше источников — полноценный раздел с подразделами и таблицей; два-четыре — краткая заметка; ноль или один — раздел пропускается или помечается «без обновлений». Раздел не раздувается, чтобы «выглядеть солидно».

Компромиссы. Сильная сторона: у отчёта предсказуемая форма, а пропуск фазы сразу заметен. Слабая: строгий порядок мешает срезать угол, даже когда ты точно знаешь ответ заранее.

💬 Просто попроси.
- «Покажи, из каких фаз состоит дайджест» → ассистент перескажет раздел Workflow из SKILL.md.
- «Сделай обзор, но без .docx» → ассистент выполнит фазы 0–3 и остановится на Markdown.

7. Два обязательных сплошных прохода и аудит покрытия

Почему поиск по потокам недостаточен и что ловят сплошные проходы

Ключевая мысль: аудит покрытия

Мира считала, что хороший поиск — это хорошие запросы. Первый же прогон показал слабое место: она нашла всё, что искала, и не нашла того, чего не искала.

Поэтому до потоков идут два обязательных сплошных прохода:

  • проход по журналам изменений — детерминированная загрузка мета-источников профиля: официальных списков релизов и лент обновлений. Ключевые слова часто пропускают продуктовые изменения, а журнал изменений — нет;
  • широкий проход — 5–7 запросов вида «самое важное в теме за месяц» плюс агрегаторы. Он ловит сюрпризы, которые не попали ни в один поток.

После потоков включается аудит покрытия. Он проверяет по списку: каждая обязательная сущность профиля, каждое измерение темы и каждый мета-источник — либо освещены, либо явно помечены «без обновлений». Пробелы закрываются двумя-тремя дополнительными запросами.

Обрати внимание на форму этой проверки. Она не спрашивает «достаточно ли мы нашли?» — на такой вопрос всегда хочется ответить «да». Она спрашивает про каждый пункт списка отдельно, и молчание про сущность считается пробелом, а не отсутствием новостей.

Компромиссы. Сильная сторона: два прохода и аудит закрывают провал «не знаю, чего я не знаю». Слабая: они стоят запросов из общего бюджета, а на узкой теме иногда дублируют потоки.

💬 Просто попроси.
- «Проверь, что в обзоре не забыты ключевые компании» → ассистент выполнит аудит покрытия по обязательным сущностям профиля.
- «Сначала пройдись по официальным журналам изменений» → ассистент сделает проход по мета-источникам до потоков.

8. Четыре уровня достоверности источников

Как уровень источника влияет на число подтверждений

Ключевая мысль: четыре уровня достоверности источников

Мира собрала пятнадцать ссылок и хотела просто перечислить их. Навык устроен иначе: он сначала спрашивает, сколько каждая из них весит.

В методике заданы четыре уровня достоверности источников:

  1. официальный — сайт компании, релиз, журнал изменений, документация;
  2. ведущие агентства — крупные новостные агентства с редакционным контролем;
  3. качественная отраслевая пресса — специализированные издания;
  4. блоги и прочее — личные заметки, форумы, агрегаторы.

Правило простое и полезное: чем выше уровень, тем меньше подтверждений нужно. Официальный релиз о выходе продукта не требует трёх независимых пересказов. Утверждение из блога — требует.

Отдельно стоит запрет: выдумывать нельзя ни при каких условиях. Если после пяти поисков набралось меньше трёх источников, полагается переформулировать запрос, сходить на известные площадки напрямую или честно написать «без обновлений» / «ограниченные данные». Пустой честный раздел — нормальный результат.

И ещё: уровень — не единственный фильтр. Каждый оставленный источник обязан пройти ещё и проверку бэкендом, о котором пойдёт речь в следующем разделе. Уровень и подпись работают вместе, а не по очереди.

Компромиссы. Сильная сторона: у отчёта появляется явная шкала веса, и слабый источник не выглядит как сильный. Слабая: разметка по уровням стоит времени и иногда спорна — отраслевое издание бывает точнее агентства.

💬 Просто попроси.
- «Разложи найденные источники по уровням достоверности» → ассистент применит четыре тира и покажет, где не хватает подтверждений.
- «Тут только блоги — что делать?» → ассистент предложит поискать первоисточник или явно пометить данные ограниченными.

9. Обязательный проверяющий бэкенд

Почему сбор источников идёт только через goap-research-ed25519

Ключевая мысль: goap-research-ed25519 как обязательный бэкенд

Остановись на секунду и спроси себя: откуда ты знаешь, что ассистент действительно открыл ссылку, а не пересказал её по памяти? Мира этого вопроса сначала не задавала — и зря.

В этом пакете сбор источников идёт только через третий, встроенный навык: goap-research-ed25519 как обязательный бэкенд. Он планирует исследование и на каждый источник выпускает запись о происхождении, подписанную ключом Ed25519 — это криптографическая подпись, которая ломается при любом изменении подписанного текста.

Что это даёт на практике:

  • источник без подписи не попадает в отчёт — он либо исключается, либо помечается как непроверенный;
  • подмена записи задним числом видна — изменённая запись перестаёт проходить проверку;
  • цепочка ссылок связана — каждая производная запись помнит содержимое родительской, поэтому перестановка, замена или редактирование факта в цепочке обнаруживаются.

Чего это НЕ даёт — и это важнее, чем список возможностей. Подпись доказывает, что запись не менялась после подписания. Она не доказывает, что источник авторитетен, что вывод следует из текста и что автор его понял. Происхождение — не истина.

Важная деталь про доверенных издателей: список закреплённых ключей по умолчанию пуст. Домен сам по себе никогда не считается доверенным — доверие возникает только из явного сопоставления «издатель → закреплённый открытый ключ».

Компромиссы. Сильная сторона: пропасть между «я это видел» и «я это помню» становится различимой для машины. Слабая: цена — дополнительная работа на каждый источник, а пустой список ключей означает, что высший уровень доверия ещё нужно настроить руками.

💬 Просто попроси.
- «Проверь, все ли источники обзора подписаны» → ассистент прогонит записи через проверку и покажет непроверенные.
- «Почему этот факт помечен как непроверенный?» → ассистент покажет, какого именно свойства не хватило: подписи, загрузки или закреплённого ключа.

10. Две оси доверия и слабое звено

Класс доверия, класс свидетельства и правило самого слабого потолка

Ключевая мысль: две оси доверия и слабое звено

Здесь живёт самая тонкая идея пакета, и Мира поняла её только со второго раза. Речь про две оси доверия и слабое звено.

Первая ось — класс доверия. Она отвечает на вопрос «меняли ли запись после подписания?». Подписано закреплённым ключом издателя — потолок уверенности 0,95. Подписано самим исследователем — потолок 0,60, это лишь защита журнала от подделки. Не проверено вовсе — 0,0.

Вторая ось — класс свидетельства. Она отвечает на совсем другой вопрос: «а кто-нибудь вообще открывал источник?». Загрузка состоялась и байты получены — потолок 1,0. Адрес известен из списка, но никто по нему не ходил — 0,50. Сказано по памяти — 0,0.

Опасная комбинация видна сразу, как только оси разведены: запись может быть безупречно подписана и при этом пересказана по памяти. Криптографически идеальная запись пустоты. Пока ось была одна, такое состояние вообще нельзя было выразить.

Итоговая уверенность считается так:

уверенность = min(потолок доверия, потолок свидетельства, потолок класса источника)

Решает самое слабое звено, а не среднее. Подписанный, но никем не открытый факт получает 0,0 — и это не сбой, а весь смысл второй оси. Усреднение здесь замаскировало бы ровно ту ошибку, ради которой ось заведена.

Есть и третья величина, которую сознательно НЕ загнали в общую цифру: применимость (кому именно относится измерение). Её сообщают рядом с уверенностью, потому что разные вопросы, слипшиеся в одно число, делают интересные состояния невыразимыми.

Компромиссы. Сильная сторона: правило слабого звена не даёт красивой подписи прикрыть непрочитанный источник. Слабая: две шкалы плюс отдельная применимость — это более высокий порог входа, и читателю отчёта их приходится объяснять.

💬 Просто попроси.
- «Почему у этого факта уверенность ноль, он же подписан?» → ассистент покажет вторую ось: подпись есть, загрузки не было.
- «Покажи факты, которые никто не открывал» → ассистент отберёт записи, у которых загрузки не было.

11. Водяной знак: как монитор помнит увиденное

Файл состояния, правила отсева дубликатов и честный пустой результат

Ключевая мысль: водяной знак и дельта

Мира запустила монитор во второй раз и получила те же пять новостей, что и в первый. Логично: чтобы показать новое, надо помнить старое.

Память монитора — это водяной знак: файл .news/monitor-<тема>.json с двумя полями. last_run — момент прошлого запуска, отсечка по дате. seen — список уже показанных адресов, чтобы та же новость, пересказанная другим изданием, не всплыла снова.

Петля выглядит так:

[водяной знак] → сканирование → дельта: отбросить старое → отчёт → [водяной знак обновлён]
        ↑                                                                    │
        └────────────────────────────────────────────────────────────────────┘

Правил отсева дубликатов всего три, и они дают экономию:

  1. тот же адрес (после очистки от меток отслеживания и якорей) — дубликат;
  2. то же событие в разных изданиях — оставить источник высшего уровня, остальные отбросить;
  3. обновление того же события — показывать заново только если изменение существенное, и пометить как обновление.

Самое важное правило — последнее: пустая дельта — это правильный ответ. «Ничего нового с такой-то даты» — валидный и полезный результат, и водяной знак всё равно продвигается вперёд. Монитор, который придумывает изменения, чтобы выглядеть занятым, хуже монитора, который честно молчит.

И обратная ловушка: монитор, который забыл продвинуть водяной знак, будет повторять одно и то же вечно — ровно то, с чего у Миры всё началось.

Компромиссы. Сильная сторона: состояние лежит в простом читаемом файле, его можно открыть и починить руками. Слабая: файл привязан к рабочему каталогу и теме — на другой машине монитор начнёт с чистого листа.

💬 Просто попроси.
- «Что нового по ИИ с прошлого раза?» → ассистент прочитает водяной знак, соберёт дельту и продвинет отсечку.
- «Покажи, что монитор уже считает увиденным» → ассистент откроет файл водяного знака и перечислит адреса из seen.

12. Ограничения и антипаттерны

Где пакет не помогает и какие привычки ломают результат

Ключевая мысль: ограничения и антипаттерны

Последний раздел — про честные границы. Мира прошла весь путь и теперь может сказать, где пакет помогает, а где нет.

Ограничения и антипаттерны, названные прямо:

  • Пакет не отвечает на один глубокий вопрос. Он делает обзор темы за период. Для одного точного вопроса нужен другой инструмент.
  • Пакет не разворачивает робота-сборщика. Регулярный сбор по расписанию — не его задача.
  • Пакет не следит за доступностью сайта. Это мониторинг работоспособности, совсем другая история.
  • Пакет не гарантирует истину. Он гарантирует происхождение: у каждого утверждения есть проверяемый адрес и подписанная запись.

Привычки, которые ломают результат:

  1. выдумывать факты, цифры или цитаты — прямой запрет; пробелы помечают честно;
  2. обходить проверяющий бэкенд — источник без подписи в отчёт не идёт;
  3. восстанавливать адреса задним числом — адрес записывают в момент находки, потом он не воспроизводится;
  4. класть корпоративный контекст в публикуемый профиль — такой профиль держат локально;
  5. доверять зашитым адресам журналов изменений — поставщики переименовывают страницы, адрес подтверждают на месте;
  6. блокировать выдачу из-за .docx — не получилось со второй попытки, отдай Markdown и скажи об этом;
  7. идти вширь, но неглубоко, когда не хватает контекста — семь проработанных потоков лучше десяти поверхностных.

Теперь твоя очередь: возьми свою тему, опиши для неё профиль, поставь ритм «монитор часто, дайджест периодически» — и посмотри, какое из семи правил нарушится у тебя первым. Однозначного ответа тут нет, и это нормально.

Компромиссы. Сильная сторона: границы названы вслух, поэтому пакет не обещает того, чего не делает. Слабая: часть запретов держится на дисциплине исполнителя, а не на автоматической проверке.

💬 Просто попроси.
- «Проверь мой черновик обзора на антипаттерны» → ассистент пройдёт по списку запретов и покажет нарушения.
- «Нужен один глубокий ответ, а не обзор» → ассистент честно скажет, что это задача не для news-digest, и предложит подходящий путь.

Частые вопросы

Нужен ли dz, чтобы пользоваться навыками?

Нет. dz даёт удобную установку (dz init --target claude-code --select …) и просмотр триггеров (dz info news-digest), но сами навыки — это файлы SKILL.md, которые можно поставить и обычным npm install.

Можно ли отключить проверяющий бэкенд goap-research-ed25519 ради скорости?

Нет, он объявлен обязательным. Источник без подписанной записи о происхождении либо исключается из отчёта, либо помечается как непроверенный — тихо включить его нельзя.

Что делать, если по теме за период реально ничего не произошло?

Написать это прямо: «без обновлений» или «ограниченные данные». Пустой честный результат — валидный ответ и для дайджеста, и для монитора; выдумывать факты запрещено правилом навыка.

Подпись Ed25519 значит, что факт правдив?

Нет. Она значит, что запись не менялась после подписания. Авторитетность источника, корректность вывода и понимание текста подписью не проверяются — это происхождение, а не истина.

Как завести дайджест по своей теме, если готового профиля нет?

Взять _template.md из профилей news-digest и описать потоки, обязательные сущности, списки наблюдения и мета-источники. Без профиля движок выведет 4–8 потоков из формулировки темы, но обзор будет менее прицельным.

Куда класть внутренний конкурентный контекст?

В локальный, не публикуемый профиль. В пакете, который публикуется в npm, корпоративных данных быть не должно — это то же правило, что действует для внешних коммуникаций.

Почему монитор второй раз показал те же новости?

Скорее всего, не продвинулся водяной знак .news/monitor-<тема>.json. Отсечка last_run и список seen обновляются в конце каждого запуска — без этого дельта считается от той же старой даты.