Shirman-digest shirman-digest
Собирает дайджест AI & Tech трендов за день с shir-man.com и генерирует красивый HTML-отчёт с вкладками. Используй когда пользователь просит: дайджест, тренды, новости AI, что нового в tech, shirman, shir-man, ежедневный обзор технологий, tech digest, trend report — даже если не упоминает shir-man напрямую.
git clone https://github.com/jojoprison/shirman-digest
git clone --depth=1 https://github.com/jojoprison/shirman-digest ~/.claude/skills/jojoprison-shirman-digest-shirman-digest
SKILL.md/shirman-digest — Ежедневный дайджест AI & Tech трендов
Скилл автоматически собирает самое важное за день из мира AI и технологий с shir-man.com/homepage/ — SPA-дашборда, агрегирующего GitHub Trending, Hacker News, Lobsters и AI-новости. Результат — готовый HTML-отчёт с 4 вкладками (без дублей), темой и ссылками на оригиналы.
Зачем
shir-man.com — это единственная точка входа для обзора трендов, но сайт SPA без API, данные не парсятся обычным скрапером. Скилл решает эту проблему: навигирует SPA через headless-браузер, параллельно читает статьи, и упаковывает всё в удобный отчёт. Без скилла это занимает 30-40 минут ручной работы.
Алгоритм
Шаг 1: Навигация по SPA (PinchTab)
shir-man.com — SPA, поэтому нужен headless-браузер для навигации. PinchTab snapshot даёт accessibility tree с минимумом токенов.
pinchtab_navigate(url: "https://shir-man.com/homepage/")
— SPA грузит данные асинхронноpinchtab_wait(seconds: 3)
— получить элементы (~19 нод vs 269 в полном DOM)pinchtab_snapshot(filter: "interactive", format: "compact")- Переключить селекторы колонок:
- Первая колонка: Midjourney → GitHub (самые быстрорастущие репозитории)
- Третья колонка: Hype Replicate → Lobsters (экспертный контент)
- Пройти вкладки внизу (кружочки-переключатели):
- Собрать: Top signals, HN Best Show, GitHub Fastest rising, Popular
- Пропустить: Virality map, Topic cloud (визуализации без парсируемых ссылок)
- На каждой вкладке: snapshot → извлечь ссылки из StaticText нод
Почему StaticText, а не eval? PinchTab eval возвращает 404 (известный баг #225). Данные извлекаются из snapshot accessibility tree — менее точно, но работает стабильно.
Шаг 1.5: Извлечение URL из ссылок (ОБЯЗАТЕЛЬНО)
PinchTab compact snapshot показывает текст ссылок, но НЕ href. Для каждой карточки в отчёте ОБЯЗАТЕЛЬНА кликабельная ссылка на оригинал. Без ссылки карточка бесполезна.
Способы получения URL:
- GitHub репо — URL строится из текста ссылки:
(текст уже содержитhttps://github.com/{link_text}
)owner/repo - HN статьи — домен виден в StaticText (напр.
,GIST.GITHUB.COM
). Для получения точного URL:SAMHENRI.GOLD- WebSearch:
— быстрый поиск точного URL"{заголовок статьи}" site:{домен} - Или:
— HN API возвращаетWebFetch("https://hn.algolia.com/api/v1/search?query={title}&tags=story")
полеurl
- WebSearch:
- Lobsters статьи — аналогично HN: домен виден, искать через WebSearch по заголовку + домену
- Show HN / Top Signals — ссылки в карусели: кликнуть на link-ноду (
), snapshot → извлечь URL из адресной строки,pinchtab_click
для возвратаpinchtab_back
Правило: Если URL не удалось найти ни одним способом — пометить карточку
🔗 ссылка не найдена и указать домен-источник как текст. Но стремиться к 100% покрытию ссылками.
Параллельность: Запускать WebSearch/WebFetch для разрешения URL параллельно (до 8 одновременно), чтобы не тратить время.
Шаг 2: Чтение статей (WebFetch)
WebFetch в 5-10x эффективнее браузера для чтения контента: параллельный fetch без ожидания рендера.
- Собрать уникальные URL из Шага 1.5 + snapshot'ов
- Запустить WebFetch параллельно (до 8 одновременно)
- Извлечь из каждой статьи: заголовок, ключевые тезисы, практическую ценность
- При 404 или ошибке — пропустить без ретрая (URL может быть устаревшим)
Шаг 3: Генерация HTML-отчёта
Создать
claudedocs/shir-man-daily-report-YYYY-MM-DD.html.
4 вкладки (без дублей между разделами):
| Вкладка | Контент |
|---|---|
| GitHub Trending | Быстрорастущие репозитории с описанием |
| Hacker News | Лучшие обсуждения и статьи |
| Lobsters | Экспертный технический контент |
| AI Agents | Новые инструменты и фреймворки |
Правило дедупликации: Каждая статья/проект появляется ТОЛЬКО в одной вкладке. Приоритет размещения: AI Agents (если про AI инструмент) → GitHub Trending (если репозиторий) → Hacker News (если HN источник) → Lobsters. Если статья появилась на HN и Lobsters — оставить там где больше очков. Deep Reads, Обзор, Попробовать — УБРАНЫ, их контент распределяется по 4 основным вкладкам.
Убранные вкладки и причины:
Обзор— пересказ того что уже есть в остальных вкладкахDeep Reads— 100% дубли из HN/Lobsters/AI AgentsПопробовать— частично дубли AI Agents + GitHub Trending
Каждая карточка ОБЯЗАТЕЛЬНО содержит:
- Заголовок + кликабельная ссылка на оригинал (ОБЯЗАТЕЛЬНО! Без ссылки карточка бесполезна — см. Шаг 1.5)
- Краткое описание (2-3 предложения)
- Цветной бейдж источника
- Блок «Ключевой вывод» для важных статей (выделенный фон, 1-2 предложения)
⚠️ НЕ допускается: карточка без
<a href="..."> ссылки на оригинальный ресурс. Если URL не разрешён — использовать домен + заголовок в WebSearch.
Стиль отчёта:
CSS variables → тёмная тема по умолчанию, светлая по toggle Переключатель темы → кнопка в шапке, состояние в localStorage Бейджи источников → GitHub: зелёный, HN: оранжевый, Lobsters: красный, AI: фиолетовый Layout → responsive CSS grid, max-width: 1200px, system-ui шрифт Градиенты → заголовок страницы и заголовки вкладок
Язык: Весь текст на русском. Технические термины (GitHub, Hacker News, API и т.д.) — в оригинале.
HTML skeleton — структура отчёта:
<!DOCTYPE html> <html lang="ru" data-theme="dark"> <head> <meta charset="UTF-8"> <title>AI & Tech Дайджест — YYYY-MM-DD</title> <style> :root { --bg: #1a1a2e; --card: #16213e; --text: #e0e0e0; --accent: #7c3aed; } [data-theme="light"] { --bg: #f5f5f5; --card: #fff; --text: #1a1a2e; --accent: #6d28d9; } body { font-family: system-ui; background: var(--bg); color: var(--text); max-width: 1200px; margin: 0 auto; } .badge { padding: 2px 8px; border-radius: 12px; font-size: 0.75rem; } .badge-github { background: #22c55e20; color: #22c55e; } .badge-hn { background: #f9731620; color: #f97316; } .badge-lobsters { background: #ef444420; color: #ef4444; } .badge-ai { background: #7c3aed20; color: #7c3aed; } .takeaway { background: var(--accent)15; border-left: 3px solid var(--accent); padding: 8px 12px; margin-top: 8px; } .tabs button { background: none; border: none; color: var(--text); padding: 8px 16px; cursor: pointer; } .tabs button.active { border-bottom: 2px solid var(--accent); } .card { background: var(--card); border-radius: 8px; padding: 16px; margin: 8px 0; } </style> </head> <body> <header><!-- Заголовок + theme toggle --></header> <nav class="tabs"><!-- 4 вкладки: GitHub Trending, HN, Lobsters, AI Agents --></nav> <main><!-- CSS grid карточки --></main> <script>/* Theme toggle: localStorage.getItem/setItem('theme') */</script> </body> </html>
Шаг 4: Открыть отчёт
open claudedocs/shir-man-daily-report-YYYY-MM-DD.html
Шаг 5: Очистка
pkill -f pinchtab
PinchTab daemon и MCP-процессы остаются жить между сессиями — их нужно убивать после каждого запуска, иначе они накапливаются.
Известные ограничения
| Проблема | Причина | Workaround |
|---|---|---|
→ 404 | Баг PinchTab #225 | Парсить данные из snapshot StaticText |
не работает | macOS баг #226 | Не нужен для этого скилла (только клики) |
| WebFetch 404 на некоторых URL | Устаревшие ссылки или paywall | Пропускать, не ретраить |
| Snapshot refs меняются | Ожидаемое поведение после навигации | Пере-snapshot после каждого клика |
| shir-man.com без API | SPA рендерит всё на клиенте | Только headless-браузер (PinchTab) |