> ## Documentation Index
> Fetch the complete documentation index at: https://docs.velesagent.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Конфигурация Велеса

> Справочник по основным разделам config.json: agents, providers, gateway, channels, tools, secrets и skills.

# Конфигурация Велеса

Основной файл конфигурации Велеса обычно находится в `~/.veles/config.json`. При запуске с `--config` можно использовать другой файл.

Ключи принимаются в `camelCase` и `snake_case`, но в пользовательском JSON лучше держаться `camelCase`.

## Редактирование через интерфейс

В настройках Nerve есть раздел «Конфиг». Он читает текущий `config.json` через шлюз Велеса, строит поля по той же схеме, которую использует сервер, и поэтому автоматически подхватывает новые поля после изменения `veles/config/schema.py`.

Разделы `agents`, `providers`, `gateway`, `channels`, `tools`, `secrets` и `skills` выбираются через выпадающий список. Если внутри раздела есть вложенные объекты, например `channels.telegram` или `channels.email`, рядом появляется второй список подразделов. Такие объекты редактируются обычными полями формы, а не как сырой JSON. Кнопка «Сохранить и перезапустить» записывает файл и сразу планирует перезапуск шлюза, чтобы изменения применились без отдельного ручного действия.

Названия полей в форме показываются как обычный текст: например, `blockPrivateNetworks` отображается как «Block private networks». Если строковое значение в JSON содержит управляющую escape-последовательность вроде `\b`, поле показывает её явно, чтобы путь или логин не выглядели обрезанными.

`gateway.token` в этом разделе не показывается и не редактируется. При сохранении Велес сохраняет прежнее значение из исходной конфигурации. Значения, которые вынесены в зашифрованные секреты или представлены объектом-ссылкой на секрет, показываются как заглушки; сам секрет через этот раздел не раскрывается.

Кнопка «Править JSON» открывает полный физический `config.json` в обычной вкладке файлового редактора Nerve. Этот режим показывает `gateway.token` и секреты, если они записаны в файле открытым текстом. Сохранение проверяет JSON и схему Велеса, но не планирует перезапуск шлюза; после такой правки перезапустите шлюз вручную, когда захотите применить изменения.

## Общая структура

```json theme={null}
{
  "agents": {},
  "providers": {},
  "gateway": {},
  "channels": {},
  "tools": {},
  "secrets": {},
  "skills": {}
}
```

## agents

Раздел `agents.defaults` задаёт поведение Велеса по умолчанию.

`agents.defaults` остаётся глобальной конфигурацией по умолчанию. Конкретная [личность](/basics/personalities_ru) может иметь собственные `model` и `thinkingLevel` в `personality.json`; это не создаёт отдельную рабочую область, память или набор сессий.

```json theme={null}
{
  "agents": {
    "defaults": {
      "workspace": "~/.veles/workspace",
      "model": "anthropic/claude-opus-4-5",
      "provider": "auto",
      "maxTokens": 8192,
      "contextWindowTokens": 65536,
      "temperature": 0.1,
      "maxToolIterations": 40,
      "reasoningEffort": "medium",
      "compression": {
        "enabled": true,
        "threshold": 0.5,
        "targetRatio": 0.2,
        "protectLastN": 20,
        "maxSummaryTokens": 3000,
        "summaryModel": ""
      },
      "models": [
        {
          "id": "openrouter/openai/gpt-5.4",
          "label": "GPT 5.4",
          "modalities": ["text", "image"],
          "reasoningEfforts": ["off", "low", "medium", "high", "xhigh"]
        },
        { "id": "custom/minimax-m2.7", "label": "MiniMax M2.7", "modalities": ["text"] }
      ]
    }
  }
}
```

Важные поля:

| Поле                  | Назначение                                                                                                                                                          |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `workspace`           | Рабочая область Велеса                                                                                                                                              |
| `model`               | Модель по умолчанию                                                                                                                                                 |
| `models`              | Список моделей для переключателя в интерфейсе Велеса; у записи можно указать виды входных данных в `modalities` и доступные уровни рассуждения в `reasoningEfforts` |
| `provider`            | Явный провайдер или `auto`                                                                                                                                          |
| `maxTokens`           | Максимальный размер ответа модели; это не размер истории беседы                                                                                                     |
| `contextWindowTokens` | Оценка доступного контекста                                                                                                                                         |
| `maxToolIterations`   | Максимум циклов «модель — средства» для обычного ответа и каждого отдельного запуска исполнителя проекта                                                            |
| `reasoningEffort`     | Уровень рассуждения для моделей, которые это поддерживают                                                                                                           |
| `compression`         | Сжатие контекста для длинных бесед (см. ниже)                                                                                                                       |

### compression — сжатие контекста

Блок `agents.defaults.compression` управляет сжатием контекста: когда беседа
разрастается, Велес заменяет старые ходы одним структурированным резюме, а
свежие сообщения и системный промпт сохраняет дословно. Подробное описание —
на странице [Сжатие контекста](/dive-deeper/context_compression_ru).

| Поле               | По умолчанию | Назначение                                                                            |
| ------------------ | ------------ | ------------------------------------------------------------------------------------- |
| `enabled`          | `true`       | Включает сжатие. Если выключить, действует прежняя посегментная выгрузка в память     |
| `threshold`        | `0.5`        | Доля контекстного окна, при превышении которой запускается сжатие (диапазон 0.2–0.95) |
| `targetRatio`      | `0.2`        | Бюджет защищённого «хвоста» свежих сообщений как доля порога (диапазон 0.05–0.8)      |
| `protectLastN`     | `20`         | Сколько последних сообщений по возможности сохраняются дословно                       |
| `maxSummaryTokens` | `3000`       | Верхний предел размера резюме                                                         |
| `summaryModel`     | `""`         | Модель для генерации резюме; пусто — модель сессии                                    |

Если `provider` равен `auto`, префиксы в `models` работают как маршруты к поставщикам. Например, `openrouter/...` использует OpenRouter, а `custom/...` использует собственный совместимый адрес и передает ему имя модели без префикса.

Если запись модели не содержит `modalities` или модель не перечислена в списке, Велес считает её текстовой. Вложения-изображения передаются как данные только в модели, где явно указана поддержка `image` или `vision`; для остальных моделей Велес убирает данные изображения из запроса и оставляет текстовое описание вложения.

`reasoningEfforts` задаёт точный набор значений в переключателе уровня рассуждения для одной модели. Допустимы `off`, `minimal`, `low`, `medium`, `high`, `xhigh` и `max`; устаревшее имя `uhigh` приводится к `xhigh`. Для моделей с обязательным рассуждением не добавляйте `off`. Если поле не задано, Nerve получает доступные уровни из каталога OpenRouter. Идентификаторы `openrouter/openai/<модель>` и `openai-codex/<модель>` сопоставляются с одной записью `openai/<модель>` в этом каталоге. Явно заданное поле всегда имеет приоритет и позволяет сохранить нужный набор при недоступности внешнего каталога.

Если каталог возвращает `supported_efforts: null`, модель принимает все уровни шлюза. Если поле `supported_efforts` отсутствует, модель не предоставляет ручной выбор уровня: Nerve показывает фиксированное значение `auto` и не передаёт уровень поставщику. При смене модели Nerve одновременно сохраняет новую модель и совместимый с ней уровень, поэтому, например, `max` от предыдущей модели не переносится в модель без такого уровня.

## providers

Каждый провайдер обычно имеет `apiKey`, `apiBase` и иногда `extraHeaders`.

```json theme={null}
{
  "providers": {
    "openrouter": {
      "apiKey": "sk-or-..."
    },
    "ollama": {
      "apiBase": "http://localhost:11434"
    },
    "custom": {
      "apiKey": "no-key",
      "apiBase": "http://localhost:8000/v1"
    }
  }
}
```

OAuth-провайдеры вроде `openaiCodex` и `githubCopilot` не требуют обычного `apiKey` в `config.json`. Для `openaiCodex` используется пустой блок-маркер, а токены доступа и обновления остаются только в зашифрованном хранилище:

```json theme={null}
{
  "providers": {
    "openaiCodex": {}
  }
}
```

Сам блок не означает, что вход уже выполнен. Велес считает поставщика подключённым только после успешной проверки его учётных данных. Если поставщик реализует получение баланса или ограничений, его показатели автоматически появляются в панели «Баланс» Nerve и в выборе показателя компактного значка.

Интерактивный мастер может показать рекомендуемый адрес `apiBase` для выбранного провайдера. Это только черновое значение внутри открытого раздела: если выйти назад или отменить раздел, конфигурация не считается изменённой и адрес не сохраняется.

Подробнее: [Провайдеры и модели](/providers_ru).

## gateway

Раздел `gateway` настраивает сервер Велеса: интерфейс, внутренние вызовы, каналы, расписания и периодические проверки.

```json theme={null}
{
  "gateway": {
    "host": "0.0.0.0",
    "port": 18790,
    "token": "длинный-секрет",
    "heartbeat": {
      "enabled": true,
      "intervalS": 1800
    }
  }
}
```

`gateway.token` обязателен для запуска сервера. Не публикуйте его и не вставляйте в чат. Если токен удобнее передавать через окружение, используйте `VELES_GATEWAY_TOKEN`: это значение переопределяет `gateway.token` из `config.json`.

Nerve может запускаться без собственного `GATEWAY_TOKEN`: после входа пользователя он вызывает `auth.login` у Велеса, получает текущий токен только в серверный процесс и использует его для внутренних запросов. Пароль Nerve хранится в зашифрованном хранилище Велеса, а не в окружении Nerve.

## channels

`channels` содержит настройки встроенных каналов и каналов-расширений. Общие поля:

```json theme={null}
{
  "channels": {
    "sendProgress": true,
    "sendToolHints": false,
    "telegram": {
      "enabled": true,
      "token": "123456:...",
      "allowFrom": ["123456789"]
    }
  }
}
```

`allowFrom` — белый список отправителей. Пустой список означает запрет всем. Чтобы разрешить всех, укажите `["*"]`.

Подробнее: [Каналы и интеграции](/channels_ru).

## tools

Раздел `tools` управляет встроенными инструментами, веб-поиском, MCP, памятью, распознаванием текста, аудио и глубоким исследованием.

```json theme={null}
{
  "tools": {
    "blockPrivateNetworks": true,
    "restrictToWorkspace": true,
    "exec": {
      "enable": true,
      "timeout": 60,
      "pathAppend": ""
    },
    "web": {
      "proxy": "http://127.0.0.1:7890",
      "search": {
        "provider": "duckduckgo",
        "maxResults": 5
      }
    }
  }
}
```

`blockPrivateNetworks` управляет сетевой защитой инструментов. По умолчанию значение `true`: Велес блокирует адреса, которые указывают на частные сети, loopback и служебные локальные диапазоны. Если поставить `false`, `exec` и загрузка страниц смогут обращаться к внутренним доменам и частным адресам, если среда Велеса видит эту сеть.

Для постоянной установки включайте `restrictToWorkspace`, особенно если включён `exec` или внешние MCP-серверы.

Подробнее: [Инструменты, веб-поиск и MCP](/dive-deeper/tools_web_mcp_ru).

## sessionMemory и memoryFlush

`sessionMemory` управляет сохранением итогов завершённых сессий в память.

```json theme={null}
{
  "tools": {
    "sessionMemory": {
      "enabled": true,
      "maxMessages": 20,
      "minUserMessages": 3,
      "deleteBehavior": "hide"
    },
    "memoryFlush": {
      "enabled": true,
      "thresholdTokens": 4000
    }
  }
}
```

`deleteBehavior: "hide"` скрывает сессии из списков интерфейса Велеса, но оставляет точный поиск и возможность повторной активации. `delete` физически удаляет файлы через обычные пути удаления.

## vectorMemory

Векторная память индексирует файлы внутри `workspace/docs/<project>`. Документация самого Велеса при старте копируется в `workspace/docs/agent` рекурсивно, включая `.md` и `.mdx`, поэтому её можно искать как проект `agent`.

Векторная память индексирует документы для поиска по проекту.
Пустые файлы и фрагменты, состоящие только из пробелов, пропускаются и не отправляются в модель эмбеддингов.

```json theme={null}
{
  "tools": {
    "vectorMemory": {
      "enabled": true,
      "embeddingModel": "openrouter/openai/text-embedding-3-small",
      "chunkTokens": 512,
      "chunkOverlap": 64,
      "syncIntervalSeconds": 60
    }
  }
}
```

Используйте её для больших папок `docs/` и материалов, которые Велес должен находить по смыслу.

## secrets

`secrets` описывает источники `SecretRef`: окружение, файл или команду.

```json theme={null}
{
  "secrets": {
    "providers": {
      "env": {
        "source": "env",
        "allowlist": ["OPENROUTER_API_KEY"]
      }
    },
    "defaults": {
      "providers.openrouter.apiKey": "env:OPENROUTER_API_KEY"
    }
  }
}
```

Для локального зашифрованного хранилища нужен `VELES_SECRETS_MASTER_KEY`.

Подробнее: [Секреты и токены](/basics/secrets_ru).

## skills

`skills.entries` включает настройки отдельных навыков.

```json theme={null}
{
  "skills": {
    "entries": {
      "github": {
        "enabled": true,
        "env": {
          "GH_TOKEN": { "source": "local", "target": "skills.github.env.GH_TOKEN" }
        }
      }
    }
  }
}
```

Секреты окружения, объявленные навыком, могут появляться автоматически из метаданных `SKILL.md`, даже если вы не добавляли их вручную в `config.json`. `requires.env` делает секрет обязательным для доступности навыка, а `secrets.env` создаёт опциональную цель в панели секретов.
