Imported from maddness/agent-research-radar (
SKILL.md). Install upstream withnpx skills add maddness/agent-research-radar. Copyright stays with the author.
Agent Research Radar
Радар публикаций про автономных AI-агентов в блогах лабораторий и продуктовых команд. Задача скилла — не «принести все новости», а отфильтровать шум фич и оставить фундаментальные тексты: как устроена память агента, как держать long-running цикл, как замыкать верификацию, как оркестрировать пачку агентов и сколько это стоит, как эвалить агентное поведение, что ломается на длинных горизонтах.
Ядро сбора — scripts/radar.py (stdlib-only, ходит только GET).
Каталог источников — scripts/sources.json.
Pre-flight перед первым прогоном сессии: python3 scripts/radar.py sources
должен мгновенно напечатать каталог. Если python3 отсутствует или команда
падает (битый sources.json, нет прав) — остановись и скажи об этом, не
пересобирай сбор вручную через WebFetch: ручной обход 15 индексов съест
сессию и всё равно потеряет даты.
Рабочий цикл
1. Определи окно
По умолчанию — неделя с понедельника по последнее наступившее воскресенье. В воскресенье это текущая неделя, в остальные дни — предыдущая. Окно никогда не захватывает будущие даты.
Выбор окна по формулировке запроса — не изобретай своё:
| Просят | Окно |
|---|---|
| «за прошлую неделю», дайджест без уточнений | дефолт (пн–вс), флаги не нужны |
| «что нового», «самое свежее», «сегодня» | дефолт плюс хвост: --since <понедельник прошлой недели> --until <сегодня> |
| явный период («за две недели», «с 1 июля») | --since / --until по словам пользователя |
Какое окно взял — такое и напиши в заголовке дайджеста. Скользящие «7 дней до сегодня» вместо дефолта не бери: прошлое воскресенье — граница, по которой недельные дайджесты стыкуются без дыр и перекрытий.
2. Собери кандидатов
python3 scripts/radar.py collect --json /tmp/radar-$(date +%F).json
- без флага (= все тиры) — дефолт для недельного дайджеста. Прогон 26.07.2026 показал, почему: tier 3 дал три попадания из восьми, и именно агрегатор Simon Willison вывел на первоисточник инцидента OpenAI ↔ Hugging Face, который tier 1–2 не поймал (пост лежит на
openai.com/index/*). --tier 1— только ядро (Anthropic, Claude, Cursor, OpenAI Devs, LangChain, Amp): быстро, когда нужен только сильный сигнал.--tier 2— плюс Cognition, Factory, OpenAI News, DeepMind.--source claude-blog,cursor-blog— точечно по одному-двум блогам.--all— без фильтра по датам; добирает метаданны всего индекса и может работать заметно дольше обычного прогона.
Скрипт отдаёт JSON: items[] с date, url, title, source, tier,
blurb, а также sources_failed — если источник отвалился,
скажи об этом в дайджесте, не молчи: молчание читается как «там ничего не было».
Прогон не помнит прошлые прогоны. Никакого seen-состояния нет: два запуска
по одному окну дают один и тот же набор кандидатов и один и тот же дайджест —
это свойство, а не баг. Сильный пост попадает в топ каждый раз, когда попадает
в окно, независимо от того, показывали его раньше или нет. Единственный дедуп —
внутри прогона: один и тот же URL из двух лент схлопывается в одну запись
(fragment, tracking-параметры и хвостовой / не создают дублей).
Если пользователь сам говорит, что уже видел конкретный пост или просит «без повторов», — сначала скажи прямо: seen-состояния у радара нет, повторы отсекаются решением этой сессии. Потом отсекай названное, но не выдумывай файл состояния: следующий прогон снова покажет всё. Проговорить это обязательно — иначе пользователь решит, что дедуп постоянный, и удивится повторам через неделю.
Health-check источников (когда что-то подозрительно пусто):
python3 scripts/radar.py check
3. Триаж по заголовкам
Прогони кандидатов через рубрику из references/relevance.md. Цель —
шортлист 5–10 постов, остальное в отбраковку с указанием количества.
Быстрое правило: продуктовый анонс, релиз модели, кейс заказчика, наём, сертификация, партнёрство, безопасность корпоративного контура — мимо, даже если это блог первого уровня. Оставляем то, где автор объясняет как и почему устроен агент.
4. Прочитай шортлист
WebFetch по каждому URL из шортлиста с промптом на суть и технические
утверждения. Три уровня отказоустойчивости:
WebFetch— рабочая лошадь.- HTTP 403 / пустая страница →
curl+ вырезание тегов (см.references/sources.md). - Стена JS/Cloudflare (это
openai.com/index/*) → браузерная панель:preview_startс URL,computer{action:"wait",duration:5},get_page_text.
Никогда не пересказывай пост по одному заголовку. Заголовок «Multiplayer» может оказаться и фичей чата, и архитектурой разделяемого состояния между агентами — разница принципиальная, а по названию она не видна.
5. Собери дайджест
Формат и требования — references/digest-format.md. Кратко: топ-3 «читать
обязательно» с разбором, дальше «стоит глянуть» одной строкой, в конце —
что отбраковано и какие источники молчали.
Каждому посту в топе — строка «что забрать»: конкретное следствие для собственной работы с агентами, а не пересказ абстракции.
6. Артефакт и доставка
Канонический артефакт — один Markdown-файл reports/radar-<конец окна>.md
(например reports/radar-2026-07-26.md), пишется через Write. Папка
reports/ живёт в рабочей директории сессии, не внутри папки скилла:
скилл — read-only дистрибутив, артефакты в нём потеряются при обновлении.
Один файл на прогон, накапливаются в reports/ — так видно историю и можно
грепать по темам.
Тот же текст выдаётся в чат целиком: файл нужен, чтобы отчёт жил после сессии,
а не вместо ответа.
Доставка, если попросили, — отдельным скиллом-транспортом (Telegram, почта, PDF). Радар готовит текст, транспорт его отправляет.
Проверено на живой отправке 26.07.2026, три грабли Telegram:
- Разметка — HTML, не markdown. Решётки заголовков не рендерятся:
<b>,<i>,<a href="...">. Ставьdisable_web_page_preview: true, иначе дайджест из десяти ссылок распухает превьюшками. - Лимит 4096 символов — режь сам по границе раздела. Авто-сплит может
порвать
<a href>посередине, и Telegram отвергнет всё сообщение целиком. Полный дайджест недели в HTML — это 4–5 тысяч символов: два сообщения (топ отдельно, «стоит глянуть» + хвост отдельно) плюсSendDocumentс самим.md-файлом. api.telegram.orgтаймаутит через раз. Это норма, не поломка: повторяй вызов доstatus: sent, две-три попытки хватает. Если бот общий,getUpdatesможет отдать409 Conflictиз-за активного вебхука — вебхук не удалять, иначе сломается чужая интеграция;chat_idвзять из конфигурации или спросить у пользователя.
Регулярный запуск — anthropic-skills:schedule или CronCreate, разумная
частота — утро понедельника (окно как раз закрывается воскресеньем).
Что считается фундаментальным
Полная рубрика со скорингом — references/relevance.md. Ядро тем:
| Тема | Примеры формулировок |
|---|---|
| Память и контекст | context engineering, compaction, progressive disclosure, auto-memory, retrieval для агента |
| Long-running / автономность | harness design, многодневные сессии, durable state, wake-on-event, планировщики |
| Self-improvement и петли | верификационные петли, incident-derived evals, самокоррекция, обучение на своих трассах |
| Оркестрация | мульти-агент, swarm, planner/worker, слияние результатов, конфликтующие ветки |
| Оптимизация и экономика | роутинг моделей, hybrid frontier+cheap, стоимость прогона, длина трассы |
| Достижение целей | goal-directed поведение, reward hacking, дрейф намерения на длинном горизонте |
| Эвалы агентов | контейнерные бенчмарки, нестабильность прогонов, шум инфраструктуры, eval awareness |
| Риски длинных горизонтов | trajectory-level monitoring, обход песочницы, приостановка сессии |
Полезный контекст для оценки новизны — references/canon.md: карта уже
вышедших опорных постов. Если новый пост повторяет канон — так и скажи,
это экономит время читателя сильнее, чем ещё один абзац пересказа.
Ссылки
references/relevance.md— рубрика релевантности и скорингreferences/sources.md— каталог источников, зачем каждый и где граблиreferences/digest-format.md— шаблон дайджестаreferences/canon.md— карта опорных публикаций (база для оценки новизны)references/example-digest.md— эталонный прогон за 20–26 июля 2026