Каталог моделей
Hermes получает курируемые списки моделей для OpenRouter и Nous Portal из манифеста JSON, размещённого рядом с сайтом документации. Это позволяет сопровождающим обновлять списки выбора без выпуска новой версии hermes-agent.
Когда манифест недоступен (офлайн, сеть заблокирована, сбой хостинга), Hermes незаметно переключается на снимок из репозитория, который поставляется вместе с CLI. Манифест никогда не ломает список выбора — в худшем случае вы увидите список, который был включён в вашу установленную версию.
Живой манифест URL
Заголовок раздела «Живой манифест URL»https://hermes-agent.nousresearch.com/docs/api/model-catalog.jsonПубликуется при каждом merge в main через существующий GitHub Pages pipeline deploy-site.yml. Источник истины находится в репозитории по адресу website/static/api/model-catalog.json.
{ "version": 1, "updated_at": "2026-04-25T22:00:00Z", "metadata": {}, "providers": { "openrouter": { "metadata": {}, "models": [ {"id": "moonshotai/kimi-k2.6", "description": "recommended", "metadata": {}}, {"id": "openai/gpt-5.4", "description": ""} ] }, "nous": { "metadata": {}, "models": [ {"id": "anthropic/claude-opus-4.7"}, {"id": "moonshotai/kimi-k2.6"} ] } }}Примечания к полям:
version— целочисленная версия схемы. Будущие схемы увеличивают это значение; Hermes отклоняет манифесты с версиями, которые не понимает, и переключается на жёстко закодированный снимок.metadata— словарь произвольной формы на уровне манифеста, провайдера и модели. Любые ключи. Hermes игнорирует неизвестные поля, поэтому вы можете добавлять аннотации к записям ("tier": "paid","tags": [...], и т. д.) без согласования изменения схемы.description— только для OpenRouter. Управляет текстом бейджа в списке выбора ("recommended","free", или пусто). Nous Portal это не использует — ограничение free-tier определяется в реальном времени по endpoint цен Portal.- Цены и длина контекста в манифесте NOT. Они берутся из live API провайдеров (
/v1/modelsendpoints, models.dev) во время получения.
Поведение при получении| Когда | Что происходит |
Заголовок раздела «Поведение при получении| Когда | Что происходит |»|---|---|
| /model или hermes model | Выполняется получение, если дисковый кэш устарел, иначе используется кэш |
| Дисковый кэш актуален (< TTL) | Сетевого запроса нет |
| Сбой сети при наличии кэша | Тихий откат к кэшу, одна строка в логе |
| Сбой сети, кэша нет | Тихий откат к snapshot в репозитории |
| Manifest не проходит валидацию схемы | Считается недоступным |
Расположение кэша: ~/.hermes/cache/model_catalog.json.
Конфигурация
Заголовок раздела «Конфигурация»model_catalog: enabled: true url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json ttl_hours: 24 providers: {}Установите enabled: false, чтобы полностью отключить удалённое получение и всегда использовать snapshot в репозитории.
URL переопределения для каждого провайдера
Заголовок раздела «URL переопределения для каждого провайдера»Сторонние участники могут самостоятельно размещать свой список кураторства, используя ту же схему. Укажите для провайдера пользовательский URL:
model_catalog: providers: openrouter: url: https://example.com/my-openrouter-curation.jsonПереопределяющий manifest должен заполнять только те блоки провайдеров, которые ему нужны. Остальные провайдеры продолжают разрешаться относительно основного URL.
Обновление manifest
Заголовок раздела «Обновление manifest»Сопровождающие:
# Re-generate from the in-repo hardcoded lists (keeps manifest in sync after# editing OPENROUTER_MODELS or _PROVIDER_MODELS["nous"] in hermes_cli/models.py).python scripts/build_model_catalog.pyЗатем отправьте PR с получившимся изменением в website/static/api/model-catalog.json для main. Сайт документации автоматически разворачивается при слиянии, и новый manifest становится доступен в течение нескольких минут.
Вы также можете вручную редактировать JSON напрямую для точечных изменений метаданных, которым не место в snapshot репозитория — скрипт генерации является удобным инструментом, а не единственным источником истины.