FastAI runner

Тонкий WebSocket-клиент, который держит постоянное соединение с FastAI и выполняет Claude CLI на твоём сервере.

Требования

Установка (foreground, для проверки)

curl -fsSL https://fst-runner.fstai.xyz/install.sh \
  | FASTAI_URL=https://app.fst.ac \
    FASTAI_RUNNER_TOKEN=<твой_токен> \
    bash

Скрипт скачает runner.py + protocol.py + requirements.txt, создаст venv в ~/fastai-runner, поставит websockets/claude-agent-sdk и запустит runner в текущем терминале. Ctrl+C — выход. Если в логе видишь «connected: runner_id=…» — всё работает, можно идти в UI и привязать его (кнопка «Привязать»).

Установка как systemd-сервис (автозапуск)

curl -fsSL https://fst-runner.fstai.xyz/install.sh \
  | SYSTEMD=1 \
    FASTAI_URL=https://app.fst.ac \
    FASTAI_RUNNER_TOKEN=<твой_токен> \
    bash

Поставит в /opt/fastai-runner, юнит — fastai-runner.serviceNoNewPrivileges, ProtectSystem=full, ProtectHome=read-only). Логи: sudo journalctl -u fastai-runner -f. После обновления зависимостей: sudo systemctl restart fastai-runner.

macOS (Python.org build)

Если ставил Python через python.org installer, системный CA-стор пуст и TLS ломается на pip и WS. install.sh это обнаруживает и подставляет certifi автоматически. Если хочешь руками — выполни один раз:

/Applications/Python\ 3.13/Install\ Certificates.command

Альтернатива — поставь Python через brew: brew install python@3.11.

Что если runner упал с auth-ошибкой

Если в логе auth/protocol error 4401 — abort или 4403 — токен не подошёл. Проверь что:

Если потерял токен — пересоздай runner в UI, старый можно удалить.

Файлы