Skip to content

Машина и модели ​

Настройки делятся на две части. Всё, что относится к вам и вашей машине — модели, токены, квоты, — лежит в ~/.jarvis/config.yaml и никуда не коммитится. Всё, что относится к проекту и команде, — в .jarvis/ проекта, об этом на следующей странице.

Если одна и та же настройка есть в обоих местах, побеждает проект: команда решает, по каким правилам идёт работа.

Модели ​

Модель описывается один раз, а потом получает роли. Подойдёт любой сервер с OpenAI-совместимым API.

yaml
models:
  flash:
    provider: openai-compatible
    baseUrl: https://llm.example.com/v1
    model: deepseek-flash
    auth: { type: bearer, token: keychain:llm }
    egress: private           # где модель: private — внутри контура, cloud — у внешнего провайдера
    quotaPool: main
    contextWindow: 128000
    maxOutput: 8192
  coder:
    provider: openai-compatible
    baseUrl: https://llm.example.com/v1
    model: qwen-coder
    auth: { type: bearer, token: keychain:llm }
    egress: private
    quotaPool: main
    contextWindow: 64000
    maxOutput: 8192

egress обязателен. По нему Jarvis решает, можно ли отправлять этой модели код проекта: конфиденциальный проект (так по умолчанию) работает только с моделями внутри контура.

jarvis models probe <модель> проверяет, что модель умеет на деле: вызывать инструменты, отвечать строгим JSON. Агенту, которому нужны инструменты, модель без них не достанется.

Роли ​

Агенты не знают о конкретных моделях. Они просят роль, а роль говорит, какие модели и в каком порядке её выполняют:

yaml
roles:
  research:       { models: [flash] }          # исследование, требования, спецификация, план
  implementation: { models: [coder, flash] }   # код, тесты, документация
  review:         { models: [flash] }          # ревью и разбор замечаний
  compaction:     { models: [flash] }          # сжатие длинной истории агента

Порядок — это предпочтение. Если первая модель занята или её квота кончилась, вызов уйдёт следующей из другого пула, если она подходит: разрешена для проекта, умеет нужное и вмещает промпт.

Квоты ​

Корпоративные шлюзы обычно ограничивают токены за окно времени. Jarvis считает это сам и не выходит за предел:

yaml
quotaPools:
  main:
    window: { minutes: 20 }
    limits: { outputTokens: 60000, inputTokens: 400000, requests: 300 }
    soft: 0.8                         # после 80% окна вызовы идут по одному
    unlimited:                        # часы, когда шлюз не ограничивает
      - { from: "22:00", to: "07:00" }
      - { days: [sat, sun] }
    timezone: Europe/Moscow

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

jarvis models показывает, сколько окна потрачено в каждом пуле.

Токены ​

Секреты в YAML запрещены: вместо значения пишется ссылка keychain:имя (связка ключей ОС) или env:ПЕРЕМЕННАЯ.

sh
jarvis auth set llm       # спросит значение и положит в связку ключей
jarvis auth status        # что есть, без значений

Где связки ключей нет, используется файл с правами только для владельца.

Кто вы ​

Каждое решение — утверждение, возврат, ответ на вопрос — записывается с автором. По умолчанию это email из git config, его можно задать явно:

yaml
actor: { id: me@example.com, display: Анна }

Язык ​

Агенты пишут документы для людей на языке, который вы укажете (language: ru). Код, пути, имена и цитаты из источников остаются как есть. Лучше задать язык в проекте, чтобы он был общим для команды.

Проверить всё сразу ​

sh
jarvis doctor

Покажет всё, что помешает задаче: недоступную модель, токен, которого нет, MCP-сервер, который не отвечает, модель, которую политика данных проекта не разрешает.

Apache-2.0