Концептуальные диаграммы
Создаёт плоские минималистичные учебные SVG-изображения в виде HTML.
Метаданные навыка
| Источник | Опциональный — устанавливается командой hermes skills install official/creative/concept-diagrams |
| Путь | optional-skills/creative/concept-diagrams |
| Версия | 0.1.0 |
| Автор | v1k22 (исходный PR), портирован в hermes-agent |
| Лицензия | MIT |
| Платформы | linux, macos, windows |
| Теги | diagrams, svg, visualization, education, physics, chemistry, engineering |
| Связанные навыки | architecture-diagram, excalidraw |
Справочник: полный SKILL.md
Ниже — полное определение навыка, которое Hermes загружает при его срабатывании. Именно это агент видит как инструкции, пока навык активен.
Концептуальные диаграммы
Создаёт SVG-диаграммы производственного качества в единой плоской минималистичной дизайн-системе. На выходе — один самодостаточный HTML-файл, который одинаково отображается в любом современном браузере и сам переключается между светлой и тёмной темой.
Область применения
Лучше всего подходит для:
- Схемы физических установок, химические механизмы, математические кривые, биология
- Физические объекты (самолёты, турбины, смартфоны, механические часы, клетки)
- Анатомия, разрезы, послойные взрыв-схемы
- Планы помещений, перепланировки
- Сюжетные истории («жизненный цикл X», «процесс Y»)
- Интеграции систем по схеме «центр — лучи» (умный город, сети IoT, электросети)
- Учебные материалы в стиле учебника в любой области
- Количественные графики (сгруппированные столбцы, энергетические профили)
Сначала поищите другой навык, если речь о:
- Архитектуре ПО или облачной инфраструктуры в тёмной техноэстетике (попробуйте
architecture-diagram, если он есть) - Набросках от руки в стиле маркерной доски (попробуйте
excalidraw, если он есть) - Анимированных роликах или видео (попробуйте навык для анимации)
Если для темы есть более специализированный навык, выбирайте его. Если ничего не подходит, этот навык послужит универсальной заменой для SVG-диаграмм — на выходе будет тот самый чистый учебный вид, описанный ниже, и он неплохо работает почти для любой темы.
Рабочий процесс
- Определитесь с типом диаграммы (см. раздел «Типы диаграмм» ниже).
- Расположите компоненты по правилам дизайн-системы.
- Соберите полную HTML-страницу, взяв
templates/template.htmlкак обёртку — вставьте свой SVG туда, где в шаблоне стоит<!-- PASTE SVG HERE -->. - Сохраните как самостоятельный
.html-файл (например,~/my-diagram.htmlили./my-diagram.html). - Пользователь открывает его прямо в браузере — без сервера, без зависимостей.
Дополнительно: если пользователю нужна листаемая галерея из нескольких диаграмм, см. «Локальный сервер предпросмотра» в конце.
Загрузите HTML-шаблон:
skill_view(name="concept-diagrams", file_path="templates/template.html")
Шаблон содержит всю CSS-систему дизайна (цветовые классы c-*, текстовые классы, переменные для светлой и тёмной темы, стили маркеров-стрелок). Сгенерированный SVG требует, чтобы эти классы были на странице-носителе.
Дизайн-система
Философия
- Плоско: никаких градиентов, теней, размытия, свечения или неона.
- Минимально: только суть. Никаких декоративных иконок внутри блоков.
- Согласованно: одни и те же цвета, отступы, типографика и толщины обводки во всех диаграммах.
- Готово к тёмной теме: все цвета подстраиваются через CSS-классы — отдельный SVG для каждого режима не нужен.
Цветовая палитра
9 цветовых шкал, по 7 ступеней в каждой. Имя класса ставится на элемент <g> или фигуру; CSS шаблона обрабатывает оба режима.
| Класс | 50 (самый светлый) | 100 | 200 | 400 | 600 | 800 | 900 (самый тёмный) |
|---|---|---|---|---|---|---|---|
c-purple | #EEEDFE | #CECBF6 | #AFA9EC | #7F77DD | #534AB7 | #3C3489 | #26215C |
c-teal | #E1F5EE | #9FE1CB | #5DCAA5 | #1D9E75 | #0F6E56 | #085041 | #04342C |
c-coral | #FAECE7 | #F5C4B3 | #F0997B | #D85A30 | #993C1D | #712B13 | #4A1B0C |
c-pink | #FBEAF0 | #F4C0D1 | #ED93B1 | #D4537E | #993556 | #72243E | #4B1528 |
c-gray | #F1EFE8 | #D3D1C7 | #B4B2A9 | #888780 | #5F5E5A | #444441 | #2C2C2A |
c-blue | #E6F1FB | #B5D4F4 | #85B7EB | #378ADD | #185FA5 | #0C447C | #042C53 |
c-green | #EAF3DE | #C0DD97 | #97C459 | #639922 | #3B6D11 | #27500A | #173404 |
c-amber | #FAEEDA | #FAC775 | #EF9F27 | #BA7517 | #854F0B | #633806 | #412402 |
c-red | #FCEBEB | #F7C1C1 | #F09595 | #E24B4A | #A32D2D | #791F1F | #501313 |
Правила назначения цветов
Цвет кодирует смысл, а не порядок. Никогда не перебирайте цвета как радугу.
- Группируйте узлы по категориям — все узлы одного типа делят один цвет.
- Берите
c-grayдля нейтральных и структурных узлов (начало, конец, обычные шаги, пользователи). - Используйте 2–3 цвета на диаграмму, не 6 и больше.
- Для общих категорий предпочитайте
c-purple,c-teal,c-coral,c-pink. - Оставьте
c-blue,c-green,c-amber,c-redпод семантику (информация, успех, предупреждение, ошибка).
Сопоставление ступеней со светлой и тёмной темой (обрабатывает CSS шаблона — просто примените класс):
- Светлая тема: заливка 50 + обводка 600 + заголовок 800 / подзаголовок 600
- Тёмная тема: заливка 800 + обводка 200 + заголовок 100 / подзаголовок 200
Типографика
Только два размера шрифта. Без исключений.
| Класс | Размер | Насыщенность | Применение |
|---|---|---|---|
th | 14px | 500 | Заголовки узлов, подписи областей |
ts | 12px | 400 | Подзаголовки, описания, подписи к стрелкам |
t | 14px | 400 | Обычный текст |
- Всегда как в предложении. Никогда Title Case, никогда ВЕРХНИЙ РЕГИСТР.
- У каждого
<text>ОБЯЗАТЕЛЬНО должен быть класс (t,tsилиth). Текста без класса не бывает. dominant-baseline="central"на всём тексте внутри блоков.text-anchor="middle"для текста, центрированного в блоках.
Оценка ширины (приблизительно):
- 14px насыщенность 500: ~8px на символ
- 12px насыщенность 400: ~6.5px на символ
- Всегда проверяйте:
box_width >= (char_count × px_per_char) + 48(отступ 24px с каждой стороны)
Отступы и компоновка
- ViewBox:
viewBox="0 0 680 H", где H = высота содержимого + 40px запаса. - Безопасная область: от x=40 до x=640, от y=40 до y=(H-40).
- Между блоками: минимум 60px зазора.
- Внутри блоков: 24px горизонтального отступа, 12px вертикального.
- Зазор у стрелки: 10px между остриём и краем блока.
- Однострочный блок: высота 44px.
- Двухстрочный блок: высота 56px, 18px между базовыми линиями заголовка и подзаголовка.
- Отступ контейнера: минимум 20px внутри каждого контейнера.
- Максимальная вложенность: 2–3 уровня. Глубже — нечитаемо при ширине 680px.
Обводка и фигуры
- Толщина обводки: 0.5px на всех границах узлов. Не 1px, не 2px.
- Скругление прямоугольников:
rx="8"для узлов,rx="12"для внутренних контейнеров, отrx="16"доrx="20"для внешних контейнеров. - Пути-соединители: ОБЯЗАТЕЛЬНО
fill="none". Иначе SVG по умолчанию заливает чёрным (fill: black).
Маркер-стрелка
Добавляйте этот блок <defs> в начало каждого SVG:
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5"
markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</marker>
</defs>
Применяйте marker-end="url(#arrow)" к линиям. Остриё наследует цвет линии через context-stroke.
CSS-классы (предоставляет шаблон)
Страница-шаблон даёт:
- Текст:
.t,.ts,.th - Нейтральные:
.box,.arr,.leader,.node - Цветовые шкалы:
.c-purple,.c-teal,.c-coral,.c-pink,.c-gray,.c-blue,.c-green,.c-amber,.c-red(все с автоматическим переключением светлой и тёмной темы)
Переопределять их не нужно — просто применяйте в своём SVG. Файл шаблона содержит все CSS-определения.
SVG-заготовка
Каждый SVG внутри страницы-шаблона начинается ровно с этой структуры:
<svg width="100%" viewBox="0 0 680 {HEIGHT}" xmlns="http://www.w3.org/2000/svg">
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5"
markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</marker>
</defs>
<!-- Diagram content here -->
</svg>
Замените {HEIGHT} на реально рассчитанную высоту (низ последнего элемента + 40px).
Шаблоны узлов
Однострочный узел (44px):
<g class="node c-blue">
<rect x="100" y="20" width="180" height="44" rx="8" stroke-width="0.5"/>
<text class="th" x="190" y="42" text-anchor="middle" dominant-baseline="central">Service name</text>
</g>
Двухстрочный узел (56px):
<g class="node c-teal">
<rect x="100" y="20" width="200" height="56" rx="8" stroke-width="0.5"/>
<text class="th" x="200" y="38" text-anchor="middle" dominant-baseline="central">Service name</text>
<text class="ts" x="200" y="56" text-anchor="middle" dominant-baseline="central">Short description</text>
</g>
Соединитель (без подписи):
<line x1="200" y1="76" x2="200" y2="120" class="arr" marker-end="url(#arrow)"/>
Контейнер (пунктирный или сплошной):
<g class="c-purple">
<rect x="40" y="92" width="600" height="300" rx="16" stroke-width="0.5"/>
<text class="th" x="66" y="116">Container label</text>
<text class="ts" x="66" y="134">Subtitle info</text>
</g>
Типы диаграмм
Выбирайте компоновку под тему:
- Блок-схема — конвейеры CI/CD, жизненные циклы запросов, рабочие процессы согласования, обработка данных. Поток в одном направлении (сверху вниз или слева направо). Максимум 4–5 узлов в ряду.
- Структура / вложенность — вложенность облачной инфраструктуры, многослойная архитектура систем. Крупные внешние контейнеры с внутренними областями. Пунктирные прямоугольники для логических групп.
- Карта API / эндпойнтов — REST-маршруты, схемы GraphQL. Дерево от корня с ветвлением к группам ресурсов, в каждой — узлы-эндпойнты.
- Топология микросервисов — service mesh, событийно-ориентированные системы. Сервисы как узлы, стрелки для схем взаимодействия, очереди сообщений между ними.
- Поток данных — ETL-конвейеры, потоковые архитектуры. Движение слева направо: от источников через обработку к приёмникам.
- Физика / структура — транспорт, здания, железо, анатомия. Используйте фигуры под физическую форму —
<path>для изогнутых корпусов,<polygon>для сужающихся форм,<ellipse>/<circle>для цилиндрических деталей, вложенные<rect>для отсеков. См.references/physical-shape-cookbook.md. - Инфраструктура / интеграция систем — умные города, сети IoT, многодоменные системы. Компоновка «центр — лучи»: центральная платформа соединяет подсистемы. Семантические стили линий (
.data-line,.power-line,.water-pipe,.road). См.references/infrastructure-patterns.md. - Макеты UI / дашбордов — админ-панели, дашборды мониторинга. Рамка экрана с вложенными графиками, индикаторами и шкалами. См.
references/dashboard-patterns.md.
Для физических, инфраструктурных и дашбордных диаграмм перед генерацией загрузите соответствующий справочный файл — в каждом есть готовые CSS-классы и примитивы фигур.
Контрольный список проверки
Прежде чем финализировать SVG, проверьте ВСЁ перечисленное:
- У каждого
<text>есть классt,tsилиth. - У каждого
<text>внутри блока естьdominant-baseline="central". - У каждого
<path>или<line>в роли стрелки естьfill="none". - Ни одна линия-стрелка не проходит сквозь посторонний блок.
box_width >= (longest_label_chars × 8) + 48для текста 14px.box_width >= (longest_label_chars × 6.5) + 48для текста 12px.- Высота ViewBox = самый нижний элемент + 40px.
- Всё содержимое остаётся в пределах от x=40 до x=640.
- Цветовые классы (
c-*) стоят на<g>или фигурах, никогда на путях-соединителях<path>. - Блок
<defs>со стрелкой присутствует. - Никаких градиентов, теней, размытия или свечения.
- Толщина обводки 0.5px на всех границах узлов.
Вывод и предпросмотр
По умолчанию: самостоятельный HTML-файл
Запишите один .html-файл, который пользователь откроет напрямую. Без сервера, без зависимостей, работает офлайн. Схема:
# 1. Загрузить шаблон
template = skill_view("concept-diagrams", "templates/template.html")
# 2. Подставить заголовок, подзаголовок и вставить свой SVG
html = template.replace(
"<!-- DIAGRAM TITLE HERE -->", "SN2 reaction mechanism"
).replace(
"<!-- OPTIONAL SUBTITLE HERE -->", "Bimolecular nucleophilic substitution"
).replace(
"<!-- PASTE SVG HERE -->", svg_content
)
# 3. Записать по выбранному пользователем пути (или ./ по умолчанию)
write_file("./sn2-mechanism.html", html)
Подскажите пользователю, как открыть файл:
# macOS
open ./sn2-mechanism.html
# Linux
xdg-open ./sn2-mechanism.html
Дополнительно: локальный сервер предпросмотра (галерея из нескольких диаграмм)
Используйте это, только если пользователь прямо просит листаемую галерею из нескольких диаграмм.
Правила:
- Слушайте только
127.0.0.1. Никогда0.0.0.0. Выставлять диаграммы на все сетевые интерфейсы опасно в общих сетях. - Берите свободный порт (НЕ зашивайте его жёстко) и сообщите пользователю выбранный URL.
- Сервер необязателен и включается по желанию — сначала предпочитайте самостоятельный HTML-файл.
Рекомендуемая схема (пусть ОС сама выберет свободный эфемерный порт):
# Каждую диаграмму положить в свою папку внутри .diagrams/
mkdir -p .diagrams/sn2-mechanism
# ...записать .diagrams/sn2-mechanism/index.html...
# Отдавать только на петлевом интерфейсе, на свободном порту
cd .diagrams && python -c "
import http.server, socketserver
with socketserver.TCPServer(('127.0.0.1', 0), http.server.SimpleHTTPRequestHandler) as s:
print(f'Serving at http://127.0.0.1:{s.server_address[1]}/')
s.serve_forever()
" &
Если пользователь настаивает на фиксированном порте, используйте 127.0.0.1:<port> — но всё равно никогда 0.0.0.0. Опишите, как остановить сервер (kill %1 или pkill -f "http.server").
Справочник примеров
В каталоге examples/ поставляется 15 готовых протестированных диаграмм. Прежде чем создавать новую диаграмму похожего типа, изучите их: там собраны рабочие образцы.
| Файл | Тип | Что демонстрирует |
|---|---|---|
hospital-emergency-department-flow.md | Блок-схема | Приоритетная маршрутизация с семантическими цветами |
feature-film-production-pipeline.md | Блок-схема | Поэтапный процесс, горизонтальные подпотоки |
automated-password-reset-flow.md | Блок-схема | Поток аутентификации с ветками ошибок |
autonomous-llm-research-agent-flow.md | Блок-схема | Стрелки с возвратом в цикл, ветвления по решениям |
place-order-uml-sequence.md | Последовательность | Стиль UML-диаграммы последовательности |
commercial-aircraft-structure.md | Физика | Пути, полигоны, эллипсы для реалистичных форм |
wind-turbine-structure.md | Физический разрез | Разделение подземной и наземной части, цветовое кодирование |
smartphone-layer-anatomy.md | Взрыв-схема | Подписи поочерёдно слева и справа, послойные компоненты |
apartment-floor-plan-conversion.md | План помещения | Стены, двери, предложенные изменения пунктирным красным |
banana-journey-tree-to-smoothie.md | Сюжетная история | Извилистый путь, последовательная смена состояний |
cpu-ooo-microarchitecture.md | Аппаратный конвейер | Веерное ветвление, боковая панель иерархии памяти |
sn2-reaction-mechanism.md | Химия | Молекулы, изогнутые стрелки, энергетический профиль |
smart-city-infrastructure.md | Центр — лучи | Семантические стили линий для каждой системы |
electricity-grid-flow.md | Многоэтапный поток | Иерархия напряжений, маркеры потока |
ml-benchmark-grouped-bar-chart.md | График | Сгруппированные столбцы, двойная ось |
Загрузить любой пример:
skill_view(name="concept-diagrams", file_path="examples/<filename>")
Краткая шпаргалка: что когда использовать
| Пользователь говорит | Тип диаграммы | Рекомендуемые цвета |
|---|---|---|
| «покажи конвейер» | Блок-схема | gray начало/конец, purple шаги, red ошибки, teal развёртывание |
| «нарисуй поток данных» | Конвейер данных (слева направо) | gray источники, purple обработка, teal приёмники |
| «визуализируй систему» | Структура (вложенность) | purple контейнер, teal сервисы, coral данные |
| «составь карту эндпойнтов» | Дерево API | purple корень, по одной шкале на группу ресурсов |
| «покажи сервисы» | Топология микросервисов | gray точка входа, teal сервисы, purple шина, coral воркеры |
| «нарисуй самолёт/машину» | Физика | пути, полигоны, эллипсы для реалистичных форм |
| «умный город / IoT» | Интеграция «центр — лучи» | семантические стили линий для каждой подсистемы |
| «покажи дашборд» | Макет UI | тёмный экран, цвета графиков: teal, purple, coral для алертов |
| «энергосеть / электричество» | Многоэтапный поток | иерархия напряжений (толщины линий HV/MV/LV) |
| «ветрогенератор / турбина» | Физический разрез | фундамент + разрез башни + гондола в цветовой кодировке |
| «путь X / жизненный цикл» | Сюжетная история | извилистый путь, последовательная смена состояний |
| «слои X / взрыв-схема» | Послойная взрыв-схема | вертикальный стек, поочерёдные подписи |
| «CPU / конвейер» | Аппаратный конвейер | вертикальные стадии, веер к портам исполнения |
| «план этажа / квартира» | План помещения | стены, двери, предложенные изменения пунктирным красным |
| «механизм реакции» | Химия | атомы, связи, изогнутые стрелки, переходное состояние, энергетический профиль |