---
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` и открывает её в браузере: робот в четырёх ракурсах, перед, три четверти, бок и зад. Страница открывается двойным кликом, сервер и интернет не нужны. Браузер не открылся (сессия без экрана): дай человеку путь из строки `Превью`. Строку `Код` запомни для шага 5.

Штаб это git-репозиторий: закоммить только файл робота, превью в git не нужно.

```sh
git add stack/avatars.json && git commit -m "chore(hq): робот агента" -- stack/avatars.json
```

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

## 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` (любая другая модель: стикер с первой буквой ленты) |
<!-- /набор -->
