EGGENT документация
Свой сервер

Настройка своего сервера

Переменные окружения открытого ядра Eggent, обратный прокси с HTTPS для VPS, Telegram-вебхук, исходящий прокси и правила безопасности.

Почти всё настраивается в интерфейсе Eggent, и файл .env не обязателен. Переменные окружения нужны для того, что должно быть известно до запуска: адрес, порт, запасные ключи.

Переменные окружения

Полный список — в .env.example в репозитории. Основные:

Переменная По умолчанию Для чего
APP_BIND_HOST 127.0.0.1 На каком адресе хоста слушает Docker. 0.0.0.0 — только осознанно
APP_PORT 3000 Порт на хосте
APP_BASE_URL http://localhost:3000 Публичный адрес — для вебхуков и ссылок
EGGENT_AUTH_SECRET создаётся в data/settings/ Секрет подписи сессий
EXTERNAL_API_TOKEN не задан Запасной токен для внешнего API
TELEGRAM_BOT_TOKEN не задан Токен бота, если не хочешь вводить его в интерфейсе
TELEGRAM_WEBHOOK_SECRET не задан Секрет вебхука Telegram
TELEGRAM_DEFAULT_PROJECT_ID не задан Проект по умолчанию для Telegram
OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY, OPENROUTER_API_KEY не заданы Запасные ключи провайдеров
EGGENT_STT_ENABLED, EGGENT_STT_MODEL, EGGENT_STT_LANGUAGE 1, base, auto Распознавание речи
HTTPS_PROXY, HTTP_PROXY, NO_PROXY не заданы Исходящий трафик через прокси
EGGENT_LEARNING включено off не даёт агенту сохранять заметки и навыки из разговоров (см. «Память»); уже сохранённое тоже перестаёт читаться
EGGENT_LEARNING_MODEL модель чата Модель для фонового взгляда назад: провайдер/id или просто id — хватит и более дешёвой
EGGENT_LEARNING_DAILY_CAP, EGGENT_LEARNING_MIN_GAP_SECONDS, EGGENT_LEARNING_EVERY_TURNS 40, 60, 6 Сколько раз в сутки агент оглядывается, пауза между двумя взглядами и как часто смотрит разговор, в котором ничего не отмечено
EGGENT_TURN_WATCHDOG включено off отключает проверку, которая останавливает «замолчавший» ход (см. «Чаты»). Стоит отключить, если ты запускаешь медленную локальную модель, которая может думать дольше лимитов ниже
EGGENT_TURN_SILENCE_SOFT_SECONDS, EGGENT_TURN_SILENCE_START_SECONDS, EGGENT_TURN_SILENCE_MODEL_SECONDS, EGGENT_TURN_SILENCE_TOOL_SECONDS 90, 180, 360, 1200 Сколько ход может молчать, прежде чем чат скажет, что он ещё идёт, и прежде чем его остановят: пока он запускается, пока модель не ответила, пока выполняется команда. Команда, которая идёт рядом с другой, сохраняет весь свой запас
EGGENT_TURN_QUESTION_WAIT_SECONDS 86400 Сколько вопрос к тебе может ждать ответа, прежде чем ход остановят (см. «Чаты»). 0 или off — вопрос ждёт сколько угодно
EGGENT_VISITS_MAX, EGGENT_VISIT_TIMEOUT_MINUTES, EGGENT_VISIT_STOP_GRACE_SECONDS 2, 10, 20 Обращение к проекту через @: сколько их может идти одновременно, сколько может занять одно и сколько ему дают на остановку, прежде чем его отпускают
EGGENT_BOARD включено off — доска задач перестаёт запускать карточки; сама доска и карточки остаются
EGGENT_BOARD_MAX_RUNNING, EGGENT_BOARD_MAX_PER_PROJECT 3, 1 Сколько карточек работают одновременно на всей доске и в одном проекте. Карточки одного проекта работают в одной папке
EGGENT_BOARD_RETRY_SECONDS 60 Сколько упавшая карточка ждёт своего единственного автоматического повтора
EGGENT_ZIP_MAX_MB, EGGENT_ZIP_MAX_FILES, EGGENT_ZIP_IDLE_SECONDS 1024, 10000, 120 Размер и число файлов одного архива и сколько он может простоять, когда его никто не забирает, прежде чем его бросят
EGGENT_VERSIONS включено off — версии файлов больше не сохраняются; то, что уже сохранено, можно смотреть
EGGENT_VERSIONS_KEEP_DAYS, EGGENT_VERSIONS_DAILY_DAYS, EGGENT_VERSIONS_MAX_PER_FILE, EGGENT_VERSIONS_MAX_FILE_MB 30, 90, 200, 10 Сколько каждая версия хранится после того, как её заменили, до какого срока хранится по одной в день, сколько версий держит один файл и с какого размера у файла нет истории
EGGENT_VERSIONS_SCAN_SECONDS 120 Как часто файлы с историей проверяются на изменения, сделанные в обход Eggent: синхронизация, терминал, другая программа
EGGENT_VERSIONS_MAX_TOTAL_MB, EGGENT_VERSIONS_DISK_SHARE 1024, 0.25 Сколько может занимать вся история и какую долю диска, если развёртывание сообщает его размер; сверх этого первыми уходят версии, заменённые раньше всех
EGGENT_WEB_SEARCH_DEFAULTS включено off — Eggent не записывает при старте порядок бесплатных поисковиков в data/pi-agent/web-search.json (см. Инструменты агента)
EGGENT_CLOUD_PROMO включено 0 убирает короткую карточку про Eggent Cloud внизу страницы Настройки → Модели
EGGENT_VERSION latest Тег образа для docker-compose.ghcr.yml

После изменения .env пересоздай контейнер:

docker compose up -d --force-recreate

Обратный прокси и HTTPS

На VPS держи Eggent на 127.0.0.1 и ставь перед ним прокси с HTTPS. HTTPS нужен не только для безопасности: без него браузер не даст доступ к микрофону, а Telegram не примет вебхук.

Caddy (сертификат получит сам):

eggent.example.com {
    request_body {
        max_size 100MB
    }
    reverse_proxy 127.0.0.1:3000
}

Nginx:

server {
    server_name eggent.example.com;
    client_max_body_size 100m;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_read_timeout 600s;
    }
}

После настройки прокси пропиши публичный адрес в APP_BASE_URL.

Telegram на своём сервере

Бот подключается в Настройки → Мессенджеры, как описано в «Telegram». Режим:

  • Long Polling — работает без публичного адреса. Подходит для домашней машины. Сообщения обрабатываются по очереди, поэтому то, что ты отправляешь, пока агент занят, — включая /reset и «стоп», — прочитывается, когда этот ход закончится; «замолчавший» ход завершают лимиты EGGENT_TURN_SILENCE_* выше.
  • Webhook — нужен публичный HTTPS-адрес (APP_BASE_URL). Быстрее и надёжнее на VPS.

Режим Auto сам выберет вебхук, когда публичный HTTPS-адрес задан.

Исходящий прокси

Если сервер выходит в интернет только через прокси, задай HTTPS_PROXY (и при необходимости HTTP_PROXY, NO_PROXY). Нужен Node.js 22.23 или новее; в Docker-образе он уже такой.

Безопасность

  • Не открывай порт Eggent в интернет без HTTPS. По умолчанию он слушает только 127.0.0.1 — так и оставь, если стоит прокси.
  • Сразу смени логин и пароль по умолчанию.
  • Относись к токену внешнего API как к паролю и не используй его в коде браузера.
  • Защищай и резервируй папку data/: там чаты, файлы, память, настройки и ключи.
  • У агента есть терминал внутри контейнера. Не монтируй в контейнер папки, к которым агенту не нужен доступ.