Anatomy — навык, который объясняет идею через работающую механическую модель
📂 Исходный код на GitHubНавык /anatomy для ИИ-ассистентов: объясняет техническую идею, рисуя её как настоящий работающий механизм в изометрии. Ассистент сам придумывает предмет, собирает его из десятков мелких деталей, добавляет живую подпись с числами и проверяет каждый стык в headless Chrome. Три режима: SVG, SVG с WebGL-шейдерами и 3D (бета). Ноль зависимостей, только встроенные модули Node.
Навык Anatomy отвечает на запрос «объясни мне, как работает X» не схемой из квадратиков со стрелками, а настоящей движущейся моделью. Вы спрашиваете у ассистента про устройство rate limiter, cache key или пул соединений — он придумывает физический предмет, который работает ровно так же, и собирает его из десятков мелких деталей в изометрии.
Обычная блок-схема говорит только «эти блоки связаны». Работающая модель показывает, что происходит: ключ кеша превращается в штифтовый замок, который поворачивается только когда совпали все штифты. Один GPU-контекст на много холстов — это мостовой плоттер с одной печатной головой, которая обходит 16 лунок.
Как это выглядит
Каждая фигура живёт в карточке: заголовок, подсказка и живая цифровая панель. Под курсором и с клавиатуры детали двигаются плавно, без рывков. Ассистент после сборки сам себя проверяет: приближает каждое соединение и смотрит, что нигде нет наложения и невидимой ошибки.
Важное свойство: любое число на рисунке берётся из той же маленькой модели, которая двигает детали. Цифры на панели — не текст, приклеенный для красоты.
Три вида фигур
| Вид | Что это | Пример |
|---|---|---|
| SVG | Базовый режим. Сплошные изометрические детали с четырехтоновой заливкой, которые рисуются сзади наперёд. Отдаётся как отдельная HTML-страница, как один файл .svg со встроенными стилями или как компонент для React и Next.js. |
dial-indicator, desk-computer, arcade-cabinet, test-rig |
| SVG + WebGL | Для того, чего линии не передают: огонь, выхлоп, вода, каустики, свет лампы, свечение, пар. Шейдер запускается на canvas между задним и передним слоями SVG, в той же изометрической камере, поэтому он будто лежит внутри рисунка. Без WebGL картинка всё равно читается. | raptor-engine, ripple-tank |
| 3D (бета) | Детали, которые вращаются по-настоящему: диск, который крутится, пальцы, которые сгибаются, кусок, который отламывается и падает. Движущиеся детали каждый кадр пересчитываются и пересвечиваются по правилам самого набора, остальная картинка остаётся статичной. | turning-dial |
Светлая и тёмная темы есть у каждой фигуры. Сначала набор проектирует светлую тему — вместе с шейдерами.
Установка
Это обычный Agent Skill: папка с файлом SKILL.md в корне. Сам репозиторий и есть эта папка.
npx skills add wheresryan22/anatomy -g
CLI спросит, для каких ассистентов поставить навык. Чтобы не спрашивал, добавьте флаг: -a claude-code, -a antigravity, -a opencode, -a codex или -a minimax-code.
Куда ставится:
| Ассистент | Папка |
|---|---|
| Claude Code | ~/.claude/skills/anatomy |
| Antigravity | ~/.gemini/antigravity/skills/anatomy |
| OpenCode | ~/.config/opencode/skills/anatomy |
| Codex | ~/.agents/skills/anatomy |
| MiniMax Code | ~/.minimax/skills/anatomy |
Без ключей API и без npm install — набор использует только встроенные модули Node. CLI копирует репозиторий целиком, вместе с примерами: около 10 МБ.
Если не хочется использовать CLI, есть клон через git и распаковка архива вручную. Важно, чтобы файл SKILL.md оказался по пути <папка навыков>/anatomy/SKILL.md. Внутри папки навык обновляется обычным git pull.
Использование
В Claude Code, Antigravity, OpenCode и MiniMax Code команда называется /anatomy, в Codex — $anatomy.
/anatomy explain how a token bucket rate limiter works, interactive
Имя навыка можно и не называть: ассистент сам загрузит его, если попросить изометрическую иллюстрацию, поясняющий рисунок для документации, статьи или страницы сайта.
Три привычки дают лучший результат:
- Называйте идею, а не рисунок. Опишите, что нужно объяснить, и дайте настоящие числа: размеры, количество, скорости, пороги. Предмет ассистент придумает сам — это и есть основная работа.
- Или называйте предмет. Если вы точно знаете, какая машина нужна (кофемашина, горелка, замок), скажите это и добавьте, что должно двигаться.
- Скажите, где будет жить фигура. Отдельная HTML-страница, один SVG-файл или компонент для React и Next.js; светлая или тёмная тема. Сборка под каждый случай своя.
Пример запроса из документации:
/anatomy a figure for our Next.js docs on database connection pooling: a pool of 10 connections, requests borrow one and give it back, and when all 10 are busy new requests wait in a queue. A React component plus a static HTML preview, dark theme.
На выходе — исходники, которые вам принадлежат: скрипт сборки на Node и страница, которую он пишет, либо для React — модули геометрии, серверный компонент для статичной картинки и один клиентский компонент на движение. Набор инструментов идёт в комплекте.
Примеры из репозитория
| Пример | Что показывает | Сборка |
|---|---|---|
dial-indicator |
Стрелочный индикатор на стойке над кареткой с блочными пробниками. Самый маленький пример, около 300 строк. | node examples/dial-indicator/build.mjs |
desk-computer |
Настольный компьютер в духе 1984 года с клавиатурой, на которую можно печатать. Набранная строка появляется на экране, а выключение сворачивает картинку в линию и точку. Около 85 сплошных деталей. | node examples/desk-computer/build.mjs |
arcade-cabinet |
Игровой автомат со снятой боковой панелью. Монета катится вниз мимо проволоки датчика в кассу, импульс бежит по кабелю к плате, CRT разогревается в режим ожидания. Около 240 деталей и 15 кабелей. | node examples/arcade-cabinet/build.mjs |
raptor-engine |
Двигатель Raptor 2 на испытательном стенде. Разбирается на 11 узлов, а факел, скачок давления, брызги и пар рисуются WebGL между задним и передним SVG. Сборка занимает несколько минут. | node examples/raptor-engine/build.mjs |
ripple-tank |
Школьная волновая ванна на высоких ножках над бумажным экраном, вид сверху под 44°. Два WebGL-слоя привязаны к изометрическим плоскостям и считаются чистой моделью. | node examples/ripple-tank/build.mjs |
test-rig |
Стеклянная кнопка на тележке на пружине, пальцевой щуп на рельсе и стрелочный индикатор, показывающий наклон. 53 детали. Скрипта сборки нет: файлы копируются в проект на React. | нет |
spot-plate |
Шесть пар капель стекла на предметном стекле сливаются в одно целое, когда веер щупов расходится. | нет |
turning-dial |
Режим 3D: кодовый диск вращается по-настоящему, рядом лежит маленькая роботизированная рука, палец на трёх шарнирах приподнимается. | node examples/turning-dial/build.mjs |
Готовые страницы лежат в репозитории: откройте любой .html в папке examples и посмотрите, что получилось. Скриншоты сняты собственным набором — scripts/capture.mjs и scripts/drive.mjs.
Что внутри репозитория
SKILL.md— то, что читает ассистент. Задаёт порядок работы: сначала собрать настоящие числа, потом придумать предмет, написать список деталей, спланировать сцену, собрать геометрию набором, покрасить сзади наперёд, оформить карточку, оживить и проверить как критик. Здесь же правила работы коротким списком.kit/— библиотека рисования: изометрическая камера, сплошные детали, тела вращения на любой оси, трубы и кабели, WebGL-слой, среда выполнения 3D и компоненты для React.references/— длинные руководства, которые ассистент открывает по мере надобности: работа с набором, движение, React, проверка, WebGL, разбор проектирования и режим 3D.evals/evals.json— тестовые запросы и признаки хорошего ответа.
Проверка качества
Отдельная часть набора — самопроверка. kit/audit.mjs доказывает геометрию: ничто не проходит сквозь другое, каждый конец трубы стоит на креплении, каждое перекрытие нарисовано в правильном порядке глубины. Запуск — node build.mjs --audit.
Дальше включается headless Chrome. scripts/capture.mjs снимает скриншоты и приближения, scripts/drive.mjs прогоняет сценарии и собирает раскадровки, scripts/lines.mjs отклоняет любую линию, оборвавшуюся в воздухе, а scripts/turn-check.mjs проверяет 3D-фигуры. Навык велит ассистенту открыть и посмотреть каждый снимок, который тот сделал.
Требования
| Что | Для чего | Детали |
|---|---|---|
| Claude Code, Antigravity, OpenCode, Codex или MiniMax Code | всё остальное | Навык написан под Claude Code и следует открытому формату Agent Skills, поэтому остальные ассистенты тоже его грузят |
| Node.js 20.10+ | сборка, набор, проверки | Только встроенные модули: устанавливать нечего |
| Chrome или Chromium | проверки | Ищется в обычных местах на macOS, Linux и Windows, а также в кеше Playwright. Другой путь задаётся через CHROME_PATH |
| React 18+ | только для вывода на React | Касается kit/react/, examples/test-rig/ и examples/spot-plate/ |
Примеры пересобирались байт в байт на Node 20.19 и 22.11.
Ограничения
- Это не библиотека графиков. Осей, серий и диаграмм нет. Числа появляются как живая панель, посчитанная моделью, и как настоящие размеры деталей.
- Набор рисует машины, приборы, инструменты и мебель — не людей и не точные карты. Идея без механизма получится слабее.
- Это медленно и сделано так намеренно. Фигура собирается долго: список деталей, геометрия, проверка и приближение каждого стыка в обеих темах. Полный обзор 3D на 30 деталях занимает 15–20 минут.
- Режим 3D — бета. Он проверен на своём примере и одной тестовой фигуре, но не на рабочей. Маленькая 3D-фигура идёт на 60 fps; тестовая рука из 380 деталей показала около 20 fps на ширине 1440 px и 13–15 fps на замедленном профиле телефона, на сильно нагруженной машине.
- Шейдерам нужен WebGL. Без него SVG всё равно читается, а при включённом
prefers-reduced-motionлюбая фигура замирает.
Участие и лицензия
Сделали что-то хорошее? Попросите ассистента опубликовать фигуру в общую галерею — он спросит название и ваш GitHub-ник, покажет, что именно отправит, и после вашего «да» сам откроет pull request. Без терминала есть форма отправки на GitHub Gist.
Задачи и pull request приветствуются. Перед правкой прочитайте CONTRIBUTING.md: там описаны сборка примеров, проверки и правила, которые обязаны выдержать изменения, — в том числе запрет комментариев в коде и требование, чтобы правки набора оставляли каждый существующий пример байт в байт прежним. Изменения перечислены в CHANGELOG.md.
Лицензия — MIT, © 2026 Ryan.
Источник: https://github.com/wheresryan22/anatomy