Навык для AI-ассистента, который отправляет уведомления о завершении долгой работы и задаёт вопросы с кнопками в MAX. Сообщения приходят в ваш чат с ботом Pingvito.
Навык называется pingvito. Он использует сервис pingvito.ru
и требует Python 3.9+; дополнительных Python-пакетов нет. APM нужен только для
установки. После установки помощники работают самостоятельно.
В каталоге проекта выполните:
apm install 40ants/pingvito-skill --target codexДля Claude Code замените --target codex на --target claude. Навык устанавливается
в .agents/skills/pingvito/. Для установки на уровне пользователя:
apm install 40ants/pingvito-skill --target codex --globalЕсли репозиторий приватный, используйте учётную запись GitHub с доступом к нему.
При настроенном SSH-доступе добавьте --ssh к команде установки.
Формат пакета описан в документации APM.
AI-ассистент может выполнить эти шаги сам. Сначала склонируйте репозиторий:
git clone https://github.com/40ants/pingvito-skill.git "$HOME/projects/lisp/pingvito-skill"Для приватного репозитория с SSH-доступом:
git clone git@github.com:40ants/pingvito-skill.git "$HOME/projects/lisp/pingvito-skill"Если клон уже существует, используйте его и обновите через git pull --ff-only.
Для установки в Codex на уровне пользователя скопируйте папку навыка:
repo_dir="$HOME/projects/lisp/pingvito-skill"
skill_dir="${CODEX_HOME:-$HOME/.codex}/skills/pingvito"
mkdir -p "$(dirname "$skill_dir")"
cp -R "$repo_dir/.apm/skills/pingvito" "$skill_dir"Этот пример предполагает, что skill_dir ещё не существует. При повторной установке
обновите содержимое существующей папки, сохранив пользовательские изменения;
не копируйте новую папку внутрь старой. Вместо копирования можно создать символическую
ссылку на .apm/skills/pingvito, чтобы обновлять навык через Git.
Для Claude Code пользовательская папка — ~/.claude/skills/pingvito.
Для установки только в текущем проекте используйте .agents/skills/pingvito.
После установки перезапустите сессию ассистента, чтобы он обнаружил новый навык.
Если ваша среда не обнаруживает навыки автоматически, укажите ассистенту путь
к установленному SKILL.md и попросите прочитать его.
-
Откройте бота в MAX и нажмите «Начать».
-
Отправьте
/tokenи сохраните выданный персональный токен. -
Запустите кодовый ассистент, и попросите его: "Покажи как настроить pingvito?"
-
Он покажет команду для сохранени токена, что-то вроде такой (зависит от агента и места установки скилла)
skill_dir="$PWD/.agents/skills/pingvito" python3 "$skill_dir/scripts/configure.py" --host https://pingvito.ru/api
ВАЖНО: не вставляйте токен в чат с агентом, команду надо выполнять в отдельном терминале.
-
Введите токен в скрытом приглашении
Pingvito token:. При настройке через AI-ассистента он должен передать токен через ввод терминала после появления приглашения; токен не должен попадать в команду или её аргументы.
Конфиг хранится отдельно в ~/.config/pingvito/config.json с правами 0600.
Чтобы сменить токен, запросите новый через бота и повторите вызов configure.py.
Новый токен, выданный ботом, отзывает предыдущий.
Когда пользователь просит установить Pingvito:
- Проверьте наличие Python 3.9+ и выберите APM либо ручную установку выше.
- Определите папку, из которой ваша среда загружает навыки, и установите туда
содержимое
.apm/skills/pingvito. Прочитайте установленныйSKILL.md. - Попросите пользователя открыть бота, отправить
/tokenи предоставить токен через скрытый терминальный ввод. Если пользователь уже дал токен в чате, используйте ввод терминала, не аргументы команды. - Запустите
configure.py --host https://pingvito.ru/api. Не читайте и не печатайте содержимое рабочего конфига; помощник обрабатывает его самостоятельно. - Сообщите о завершении настройки. Отправляйте проверочное сообщение, только если пользователь попросил его. Если навыки кэшируются, предложите новую сессию.
В примерах skill_dir — папка установленного навыка, содержащая SKILL.md.
# Уведомление
python3 "$skill_dir/scripts/notify.py" 'Готово: изменения проверены и опубликованы.'
# Вопрос с кнопками
python3 "$skill_dir/scripts/notify.py" ask 'Развернуть изменения?' 'Развернуть' 'Отложить'
# Прочитать ответ на последний вопрос
python3 "$skill_dir/scripts/notify.py" get-responseНавык отправляет одно уведомление после операции длительностью от пяти минут
и умеет спрашивать пользователя о необходимом решении. get-response печатает
выбранный вариант и завершается с кодом 0; код 2 означает, что ответ ещё не
получен; код 1 — ошибка. Ожидание ответа не означает согласия. На один токен
хранится последний вопрос, поэтому вопросы с одним токеном следует задавать последовательно.
При 404 проверьте, что токен выдан этим ботом и не отозван. Для управляемого
вами другого сервера укажите его базовый URL через configure.py --host URL.
python3 -m unittest discover -s tests -vТесты используют временные конфиги и локальный HTTP-сервер. Они не отправляют
сообщения в MAX. Требования и результаты проверки находятся в specs/.