Skip to content
Back to skills

Morning Tab

ASecurity

«Утренняя вкладка» — ежедневная газетная страница-дайджест на любую тему пользователя: материалы из бесплатных RSS, Google News, Hacker News, arXiv и GitHub, тексты на нужном языке пишет сам агент, страница публикуется по постоянной ссылке. Use when просят утреннюю вкладку, дайджест или газету по теме, «собери главное про X за сутки», «сделай ежедневную подборку новостей по Y», «страницу с новостями темы каждое утро», «обнови вкладку», «поставь дайджест на расписание» — even if слов «morning-...

  • 6 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 16, 2026
ai-agentsgobashgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 15 files and shows the line behind each finding

Scanned October 16, 2026

npx -y skills add smixs/morning-tab --skill morning-tab --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Morning Tab?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Morning Tab
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/smixs-morning-tab/badge)](https://www.skillsdirectory.com/skills/smixs-morning-tab)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: morning-tab
description: >-
  «Утренняя вкладка» — ежедневная газетная страница-дайджест на любую тему пользователя:
  материалы из бесплатных RSS, Google News, Hacker News, arXiv и GitHub, тексты
  на нужном языке пишет сам агент, страница публикуется по постоянной ссылке. Use when
  просят утреннюю вкладку, дайджест или газету по теме, «собери главное про X за сутки»,
  «сделай ежедневную подборку новостей по Y», «страницу с новостями темы каждое утро»,
  «обнови вкладку», «поставь дайджест на расписание» — even if слов «morning-tab» и
  «вкладка» нет. Do NOT use for разового ответа на новостной вопрос в чате, постов в
  Telegram-канал, email-рассылок, мониторинга цен и упоминаний бренда.
---

# Утренняя вкладка

Страница в стиле утренней газеты: шапка, главная история с картинкой, вторая история, заметки, блок «Главное за день», альманах (погода, восход и закат, счётчики рубрик) и рубрики по источникам. Сбор и вёрстку делают скрипты, тексты пишет агент, публикация идёт на статический хостинг. Образец вида — `assets/example-ai.png`, `assets/example-urbanism.png`.

## Термины

- **Тема** — то, о чём страница; одна тема = одна рабочая папка.
- **Рабочая папка** — `~/morning-tab/<slug>/` с `config.json` (конфиг) и `out/`.
- **Выпуск** — сбор → тексты → вёрстка → проверка → публикация за один день.
- **Рутина** — ежедневный выпуск по расписанию без человека.

Ниже `<skill>` — папка этого скилла, `<ws>` — рабочая папка темы.

## Режим

| Ситуация | Режим |
|---|---|
| рабочей папки темы нет или в ней нет `config.json` | **Первый запуск** → `references/setup.md`, затем выпуск, затем предложение рутины |
| папка есть, пользователь в чате | **Выпуск** |
| запуск по расписанию (промпт говорит «режим рутины») | **Выпуск в рутине**: вопросов не задавать, при FAIL остановиться и последней строкой написать причину и что исправить |

Если пользователь назвал тему, а папок несколько, сопоставить по `title`/`topline` в их `config.json`; совпадения нет — это первый запуск новой темы.

## Шаг 0. Pre-flight — каждый запуск

```
bash <skill>/scripts/preflight.sh <ws>/config.json
```

Проверяет Bun, зависимости, браузер для скриншотов, сеть, конфиг и вход на площадку публикации. Каждый FAIL печатается со способом исправить.

- **PREFLIGHT: FAIL** → не продолжать. Показать пользователю каждый FAIL и команду исправления; ключ или вход, которые может дать только он, запросить у него. После исправления запустить pre-flight снова.
- Почему: без браузера пропадает проверка скриншотом, без входа на площадку страница не выйдет, а обходной путь (другой хостинг, «опубликую потом») даёт пользователю не ту ссылку, что он сохранил.

## Первый запуск

Тему и источники всегда спрашивать у пользователя, примеры из `config/` — только заготовка формата. Порядок: `references/setup.md`.

- [ ] тема и источники названы пользователем (или он сказал «подбери сам» и утвердил подобранный список);
- [ ] источники проверены сбором: нет `ошибка`/`ПУСТО`, материалов не меньше 12;
- [ ] площадка выбрана, pre-flight с конфигом — OK;
- [ ] пользователь сказал «ок» по итоговому списку.

## Выпуск

1. **Сбор.** `bun <skill>/scripts/fetch.ts --config <ws>/config.json --out <ws>/out` → `out/items.json`, `out/texts.template.json`. Источник с `ошибка` или `ПУСТО` назвать в отчёте; в первом запуске исправить по `references/setup.md` §5.
2. **Тексты.** Прочитать `out/items.json` (`title`, `summary`, `body` у главной и второй) и записать `out/texts.json` по образцу `out/texts.template.json`:
   - `items[].title` — короткий газетный заголовок на языке страницы, имена брендов как есть;
   - `items[].summary` — 1–2 предложения: что произошло и почему важно;
   - `digest` — 3–5 пунктов `{id, text}`, по одному предложению;
   - `lead_paragraph` — 3–5 предложений о главной (`leadId`).

   Факты брать только из `title`, `summary`, `body`: страница выходит под именем источника, и выдуманная деталь подрывает доверие ко всей подборке. Переводить сам агент; сервисы машинного перевода не подключать — это платный API и худший язык.
3. **Вёрстка.** `bun <skill>/scripts/render.ts --config <ws>/config.json --out <ws>/out` → `out/site/index.html`, `out/screenshot-top.png`, `out/screenshot.png`. Падает со списком id, если текст не заполнен, — дописать и повторить.
4. **Проверка глазами.** Открыть `out/screenshot-top.png`:
   - [ ] вёрстка как в `assets/example-*.png`, ничего не наехало;
   - [ ] все заголовки на языке страницы;
   - [ ] у главной есть картинка, у остальных битые картинки скрыты;
   - [ ] в шапке нейтральный тон: без шуток и обращений к читателю.
5. **Публикация.** Команда для `publish.target` и проверка ссылки — `references/publish.md`. Ссылка не отвечает `200` или дата в `<title>` не сегодняшняя — выпуск не готов.
6. **Отчёт.** Полная ссылка, `out/screenshot-top.png`, одна фраза о главном за день, проблемные источники (если были).

«Готово» говорить только после пунктов 4 и 5: скрипт отрабатывает и тогда, когда страница сломана визуально или выложена старая версия.

## После первого выпуска — рутина

Когда пользователь посмотрел страницу и сказал «ок», предложить ежедневный выпуск. Ставить только после его согласия: каждый запуск расходует лимит или токены агента. Как предложить, поставить и проверить — `references/routine.md`.

## Правила

- Источники только бесплатные. Платный API (X API, платный поиск, перевод) — после того как пользователь услышал цену и явно согласился.
- Токены и ключи хранить в окружении или залогиненном CLI; `config.json` и репозиторий — без секретов.
- Конфиг меняется только по слову пользователя; в рутине — никогда.

## Неполадки

| Симптом | Причина | Что делать |
|---|---|---|
| источник: `HTTP 403`/`429` | сайт режет запросы с серверов | убрать источник или заменить запросом Google News по теме |
| `Ни одного материала` | все источники пусты за окно | расширить `windowHours`, добавить запрос Google News |
| `texts.json не прошёл проверку` | не все id заполнены | дописать перечисленные id |
| `Скриншот не снят` | нет браузера | `cd <skill> && bunx playwright install chromium` |
| `Конфиг … с ошибками` | поле пропущено или раздел не описан | исправить по списку ошибок |
| на странице вчерашние новости | выложилась старая папка или кэш CDN | повторить публикацию, проверить `<title>` |

Files in this skill

  • .gitignore20 B
  • SKILL.md9.8 KB
  • config/ai.example.json2.4 KB
  • config/urbanism.example.json1.9 KB
  • package.json268 B
  • references/publish.md2.8 KB
  • references/routine.md4.5 KB
  • references/setup.md6.6 KB
  • scripts/config.ts4.7 KB
  • scripts/fetch.ts9.9 KB
  • scripts/preflight.sh4.6 KB
  • scripts/render.ts8.6 KB
  • templates/style.css4.2 KB
  • templates/texts.template.json637 B
  • tsconfig.json245 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.