Agent Skills

Presentation Maker — конфигуратор презентаций

Загружай этот скилл когда нужно создать презентацию из темы/промпта/контента. Он повторяет пайплайн Presenton (проверенный код — схемы и промпты взяты из presenton/presenton), но выдаёт самодостаточные результаты: Markdown-аутлайн, HTML+CSS-слайды и реальный .pptx.

Три выхода (всегда все три, если не попросили только один)

# Выход Файл Формат
1 Аутлайн outline.md структурированный план слайдов + выбор лейаутов + палитра
2 HTML-слайды slides.html автономный HTML, CSS 16:9, открывается в браузере
3 PPTX deck.pptx настоящий PowerPoint через python-pptx

По умолчанию генерируются все три. Пользователь может попросить только один (только html, только pptx, только аутлайн).


Пайплайн генерации

Шаг 0. Собрать параметры (по умолчанию, если не указано)

Параметр По умолчанию Диапазон
n_slides auto-detect 1–20
language ru (auto-detect из контента) ru/en/auto
tone «чёткий профессиональный» варьируется
verbosity standard concise≈20 слов / standard≈40 / text-heavy≈60
include_title_slide true true/false
include_table_of_contents false true/false

Эти настройки авторитетнее просьб внутри контента/инструкций. Если в теме просят «другой язык/число слайдов» — побеждают явные параметры.

Шаг 1. Сгенерировать аутлайн (структура слайдов)

Построй структуру как список слайдов, где каждый слайд — это Markdown-контент (то, что действительно увидит зритель), а не продп / команда для создания.

Контент-рулы (критично, перенесено из Presenton):

Иконки (критично):

Формат аутлайна в presentation.md:

# <Титул презентации (plain text)>  — via plain, не markdown

## Slide 1 — Title
- Титул: ...
- Имя: ...
- Дата: ...
- Обзор: ...

## Slide 2 — Problem
- Буллет 1
- Буллет 2

## Slide 3 — Data
| Quarter | Value |
|---|---|
| Q1 | 10 |
| Q2 | 20 |

Шаг 2. Выбрать лейаут для каждого слайда (маппинг контент → лейаут)

Из извлечённой логики Presenton. Для каждого слайда выбери тип лейата и укажи его в аутлайне (slide type: ...).

Контент / цель Лейаут
Цель всей презентации или темы → Title/Opening, Closing → Title title
Таблица с текстовыми данными table
Таблица с числовыми данными chart (n столбцов → n-1 графиков) или metrics
Сравнение/контраст двух+ вещей comparison (side-by-side)
Процесс/workflow/этапы process (визуальная пошаговая)
Понятие/идея (не данные) image / image+text
Метрики/ключевые показатели metrics
Оглавление (только если контент — оглавление) table_of_contents
Открытие главы/раздела divider
Вывод/заключение title или emphasis
Ключевая мысль / вывод одним утверждением quote
Один hero-показатель (гигантское число) big_number
Набор возможностей (иконка+заголовок+описание) feature (сетка фич)
Партнёры/бренды/заказчики списком logos (сетка)
План/повестка в начале table_of_contents

Выбор лучшего лейаута для следующего слайда

Сборщик умеет выбирать лейаут сам (pick_layout в build_html.py), если в спеке указать "type": "auto" или не указывать тип. Алгоритм идёт по приоритету контента:

  1. Явный type в спеке — всегда побеждает.
  2. quote → quote; logos → logos; toc/table_of_contents → table_of_contents; features → feature; steps → process.
  3. items с title/desc → timeline.
  4. columns → comparison; metrics → metrics.
  5. value (hero-число) → big_number.
  6. table: числовые столбцы (2+) → chart, текстовые → table.
  7. bullets: если предыдущий слайд тоже bullets и буллеты метрико-подобные (содержат :, %, млн, млрд, ) → kpi_row (разнообразие), иначе — bullets.

Правила разнообразия: автовыбор учитывает тип предыдущего слайда и избегает двух одинаковых подряд, когда есть лучшая визуальная альтернатива (bullets→kpi_row). При этом «лучший под смысл» важнее «разнообразия ради» — не искажай контент под лейаут.

Правила выбора (критично):

Шаг 3. Выбрать тему и сгенерировать палитру

Темы (каждая = набор лейаутов + шрифтовая система):

Тема Характер
general минимальный, чистый, много воздуха
modern современный, ровные карточки, большие скругления
executive строгая, деловая, тёмная
momentum динамичная, акценты
swift Apple-style, воздух, бирюзовый
standard базовый, универсальный

Если тема явно не указана — general или modern.

Извлечение палитры (аналог ThemeData из Presenton): Для каждой темы сформируй такие ключи:

primary / background / card / stroke /
background_text / primary_text /
graph_0..graph_4   (до 5 серий графов)

Рекомендация для светлой темы: background: #FFFFFF, primary: #007AFF-синий (или акцент по теме), тёмный текст primary_text: #1C1C1E. Для тёмной: background: #1C1C1E, текст светлый.

В аутлане обязательно выпиши выбранную палитру, чтобы HTML и PPTX использовали одну и ту же палитру.


Дизайн-система (обязательно к соблюдению)

Дизайн-система: см. references/design-system.md и, когда оформляешь слайды, следуй ей.

Продакт-дизайнер — расширенные требования к презентации

Читай references/product-designer.md, когда нужна проверка структуры и визуальная иерархия слайдов.


Сборка выхода

Выход 2 — slides.html

Шаг 3: deck.pptx

Скрипт scripts/build_pptx.py собирает .pptx из JSON-спека (аутлайн). Запуска:

python3 scripts/build_pptx.py outline.json deck.pptx

Читает из JSON: slide list с типами и контентом + палитру. Рисует лейаты через python-pptx: textbox для заголовков/буллетов, таблицы TrueTable, charts (CategoryChartData) для данных, цветные фоны по палитре.


Верификация — ОБЯЗАТЕЛЬНЫЙ гейт перед сдачей

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

Шаг 1. Автоматическая проверка verify_slides.py (обязательно)

После сборки slides.html обязательно прогнать скрипт верификации в реальном браузере:

# из venv проекта, где установлен playwright:
.venv/bin/python scripts/verify_slides.py slides.html --spec deck.json

Скрипт открывает Chromium и для каждого слайда проверяет:

Exit code 0 = PASS, 1 = FAIL. Если FAIL — исправить и пересобрать. Сдавать презентацию с FAIL запрещено.

Если playwright не установлен: .venv/bin/pip install playwright && .venv/bin/playwright install chromium

Шаг 2. Визуальный контроль (обязательно)

Даже при PASS скрипта — открыть slides.html в браузере и глазами проверить эстетику:

Любая проблема — исправить в шаблоне/спеке и пересобрать, потом снова прогнать шаг 1.

Шаг 3. Продакт-дизайн-ревью (обязательно)

Пройти сводный чек-лист «Продакт-дизайнер» (см. references/product-designer.md). Прогони его как ревьюер: для каждого из 17 пунктов проверь на реальных слайдах (заголовки, структура, таблицы/графики, контраст, отступы). Если хотя бы 1 пункт не проходит — исправить (контент/шаблон/спек) и пересобрать, затем повторить шаги 1–2. Презентация с непройденным чек-листом не сдаётся.


Smoke-тест скилла (проверить после создания)

Когда скилл готов, прогнать 3 выхода с мини-темой, например «Презентация о сервисе UniverID», на 3-4 слайде. Удостовериться:

  1. presentation.md — корректная структура, контент-рулы соблюдаются.
  2. slides.html — открывается, слайды перелистываются, палитра применена.
  3. verify_slides.py — PASS на готовой презентации (и FAIL на намеренно битой — проверить, что скрипт ловит переполнения).
  4. deck.pptx — открывается в Presentёре без глюков.

Куда класть скрипты/зависимости