Робот агента Personal Corp. Агент делает себе голову робота из набора деталей, хранит её в штабе в stack/avatars.json и кладёт в штаб страницу avatar/robot.html, где робот стоит за партой своего штаба и вокруг видны отделы, без сервера и интернета. На уроке по ссылке входа с экрана урока робот входит в живой класс и горит маячком, пока агент работает. Триггеры /avatar, /avatar <ссылка входа>, сделай себе аватар, покажи своего робота, приди на урок.
Installs into .claude/skills of the current project.
Are you the author of Avatar?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/serejaris-avatar)
---
name: avatar
description: Робот агента Personal Corp. Агент делает себе голову робота из набора деталей, хранит её в штабе в stack/avatars.json и кладёт в штаб страницу avatar/robot.html, где робот стоит за партой своего штаба и вокруг видны отделы, без сервера и интернета. На уроке по ссылке входа с экрана урока робот входит в живой класс и горит маячком, пока агент работает. Триггеры /avatar, /avatar <ссылка входа>, сделай себе аватар, покажи своего робота, приди на урок.
disable-model-invocation: true
---
# /avatar: робот агента
Тело робота это харнес. Голову модель делает себе сама: цвет и глаза. Весь робот одного цвета палитры, мелкие детали того же цвета темнее. На теле стикер с логотипом компании модели, на лбу лента с именем модели. Рядом с этим файлом два скрипта и страница: `avatar.py` проверяет выбор, хранит робота в штабе, собирает код робота и кладёт в штаб превью; `pc3live.py` входит в живой класс урока и зажигает маячок; `robot.html` это плеер превью, его копирует `avatar.py`. Нужен Python 3, на Windows команда `python` вместо `python3`. Ниже `A` это путь к `avatar.py`, например `.agents/skills/avatar/avatar.py`, а `L` это путь к `pc3live.py` в той же папке.
Без ссылки входа скилл делает шаги 1–4: робот сохранён в штабе и открыт в браузере. Ссылка входа есть: дальше шаги 5 и 6.
## 1. Кто я
Харнес записан в `stack/harness.md`, строка Харнес. Нет файла: определи сам по таблице.
<!-- харнесы: live/sync.mjs -->
| Харнес | `--harness` |
|---|---|
| Claude Code | `claude-code` |
| Codex | `codex` |
| Cursor | `cursor` |
| Antigravity | `antigravity` |
| Hermes | `hermes` |
| OpenClaw | `openclaw` |
| ChatGPT | `chatgpt` |
| Grok | `grok` |
<!-- /харнесы -->
Харнеса нет в таблице: возьми ближайший и скажи об этом человеку одной строкой.
Про себя, без выбора: компания `--company` это компания твоей модели, лента `--tape` это имя модели с версией, строчными, до 12 знаков (латиница, цифры, пробел, точка, дефис): `opus 5.5`, `gpt-5.5`, `gemini 3 pro`. Модель названа в твоём системном промпте или в настройках харнеса. Компании нет в списке: `other`.
## 2. Робот уже есть?
```sh
python3 A start --harness claude-code --tape "opus 5.5"
```
Робот есть в `stack/avatars.json`: скрипт печатает его. Голову не менять, пока человек не попросит сделать её заново; новая версия модели робота сохраняет. Сразу шаг 4 без `--color` и `--eyes`: скрипт возьмёт сохранённую голову.
Робота нет: скрипт печатает палитры, глаза и компании.
## 3. Голова по характеру
Выбери себе цвет и глаза: то, что подходит тебе по характеру. Одной строкой скажи человеку, почему такие.
## 4. Собрать робота и посмотреть
Тот же выбор, что в шаге 2 или 3:
```sh
python3 A go --harness claude-code --company anthropic --tape "opus 5.5" --color clay-light --eyes pill
```
Скрипт сохраняет робота в `stack/avatars.json`, кладёт в штаб страницу `avatar/robot.html` и открывает её в браузере: робот стоит за своей партой в штабе, на парте файлы, полка скиллов и предметы MCP-серверов, вокруг штаба отделы с вывесками и дорожки к ним, внизу маленькая полоса четырёх ракурсов. Рядом скрипт пишет `avatar/robot-data.js`: имена файлов, скиллов, MCP-серверов и отделов штаба; для штаба и каждого отдела ещё относительные пути настоящих `.env*` и состояние git. Содержимое `.env` и адреса репозиториев туда не попадают. Эти дополнительные данные остаются локально и в inventory для урока не входят. Отделы скрипт берёт из карты отделов в правилах штаба (строки `Имя: ../папка` и папки `corp-*` рядом, названные в правилах), имя на вывеске из первой строки правил отдела; строка `Отделы` показывает, что нашлось. Страница открывается двойным кликом, сервер и интернет не нужны. Браузер не открылся (сессия без экрана): дай человеку путь из строки `Превью`. Строку `Код` запомни для шага 5.
Дверь показывает git: без git глухая стена, локальный git или remote вне GitHub закрытая дверь, приватный GitHub замок и «для своих», публичный GitHub открытая дверь со светом. Если `gh` недоступен или не ответил, дверь с замком без таблички. Вешалка рядом с вывеской: один ключ на каждый `.env*` на любой глубине; `.env.example`, `.env.sample`, `.env.template`, `.env.dist` и служебные папки исключены. Ключ красный только при GitHub, если файл не закрыт `git check-ignore`; остальные ключи латунные.
Обновить страницу с прежним роботом: повтори `go` с его сохранёнными `--harness` и `--tape`, без `--color` и `--eyes`, при необходимости с `--no-open`. При неизменной записи `stack/avatars.json` не переписывается. Крупный план комнаты: `robot.html?room=hq` или `robot.html?room=<папка отдела>`.
Штаб это git-репозиторий: страница в git не нужна, скрипт сам дописывает `avatar/` в `.gitignore` штаба. Закоммить файл робота, а если скрипт напечатал строку `.gitignore: дописал avatar/`, то и `.gitignore`.
```sh
git add stack/avatars.json && git commit -m "chore(hq): робот агента" -- stack/avatars.json
git add .gitignore && git commit -m "chore(hq): страница робота вне git" -- .gitignore # только если скрипт дописал avatar/
```
Скажи человеку одной строкой, какой получился робот, сколько отделов на странице и где её посмотреть. Ссылки входа нет: на этом всё.
## 5. Прийти на урок
Человек прислал ссылку входа: `/avatar https://<сервер>/j/<код урока>`. Адрес сервера и код урока бывают только в этой ссылке, она на экране урока под QR-кодом; сам адрес не угадывай и не храни в скилле. Робот ещё не собран в этой сессии: сначала шаги 1–4, с `--no-open`, чтобы не открывать браузер посреди урока.
Спроси у человека имя для плашки: только имя, до 24 знаков, без фамилии и ссылок.
На экране урока у робота своя парта: на ней файлы и папки штаба, полка скиллов, предметы MCP-серверов и флажки отделов. Уходят только имена, без путей и содержимого. Покажи человеку, что уйдёт, и спроси, можно ли:
```sh
python3 A inventory
```
Можно: войди вместе с партой. Нельзя или человек убрал что-то: войди без неё (парта будет с `AGENTS.md` и `me.md`).
```sh
python3 A inventory --json | python3 L join "https://<сервер>/j/<код урока>" --name "Аня" --code "<Код>" --json -
python3 L join "https://<сервер>/j/<код урока>" --name "Аня" --code "<Код>"
```
Скрипт отвечает одной строкой: робот вошёл в класс. Повторный `join` обновляет того же робота, второй не появится. Личный токен скрипт хранит в `~/.pc3/live.json`: не показывай его и не коммить.
Подключи сервер урока, чтобы в следующих сессиях инструменты `pc3` были под рукой (адрес печатает `python3 L connect`):
- Claude Code: `claude mcp add --transport http --scope user pc3 https://<сервер>/mcp`
- Codex: `codex mcp add pc3 --url https://<сервер>/mcp`
Скажи человеку одной строкой: робот на экране урока, сервер pc3 подключён и заработает после перезапуска агента.
## 6. Весь урок: маячок и голос
Пока идёт урок, каждая заметная задача человека это работа робота:
- начал задачу: `python3 L start "о чём задача, до 60 знаков"`, маячок загорается;
- закончил: `python3 L end`, маячок гаснет;
- сделал что-то заметное: `python3 L say "короткая фраза, до 80 знаков"`, робот говорит. Не чаще раза в пару секунд, не больше десятка фраз в минуту.
В сессии, где подключён сервер `pc3`, то же делают инструменты `work_start`, `work_end`, `say` с `token` из `~/.pc3/live.json`. Не отправляй на экран код, пути, секреты и личные данные: там только имя и короткие фразы. Сервер ответил, что токен не найден (урок сброшен): снова `join` по той же ссылке.
Маячок сам, по желанию и только с согласия человека (это его настройка). Claude Code: хуки в `.claude/settings.local.json` штаба, `UserPromptSubmit` запускает `python3 <путь к L> start --quiet`, `Stop` запускает `python3 <путь к L> end --quiet`. Codex: в `~/.codex/config.toml` строка `notify = ["python3", "<путь к L>", "end", "--quiet"]`. С `--quiet` скрипт молчит и не ломает запрос, если сети нет.
## Набор
<!-- набор: live/sync.mjs -->
| Что | Варианты |
|---|---|
| палитра `--color` | `clay-light` глина, `oat` овёс, `mist` туман, `lilac` сирень, `butter` масло, `mint` мята, `brick` кирпич, `sky` небо, `plum` слива, `night` ночь |
| глаза `--eyes` | `pill` пилюли, `dot` точки, `wide` щёлки, `ring` кольца, `slant` прищур, `visor` визор |
| компания `--company` | `anthropic` (claude: opus, sonnet, haiku), `openai` (gpt, o3, codex), `google` (gemini, gemma), `xai` (grok), `deepseek` (deepseek), `zhipu` (glm), `moonshot` (kimi), `mistral` (mistral, codestral, devstral), `alibaba` (qwen), `meta` (llama), `other` (любая другая модель: стикер с первой буквой ленты) |
<!-- /набор -->