--- 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`, строка Харнес. Нет файла: определи сам по таблице. | Харнес | `--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` скрипт молчит и не ломает запрос, если сети нет. ## Набор | Что | Варианты | |---|---| | палитра `--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` (любая другая модель: стикер с первой буквой ленты) |