mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-09 08:21:50 +00:00
Full-corpus correctness audit of the hand-written docs against the codebase, plus a 2-week merged-PR coverage sweep and one live dashboard screenshot. Correctness (verified against COMMAND_REGISTRY / PROVIDER_REGISTRY / TOOLSETS / tools.registry / DEFAULT_CONFIG / source): - reference: add /version slash command, context_engine toolset, openai-api + novita-ai to --provider; fix tool count 64->71; model_catalog ttl 24->1; add profile describe to summary table; add real provider env vars (LM_API_KEY/LM_BASE_URL, KIMI_CODING_API_KEY, ALIBABA_CODING_PLAN_*, ANTHROPIC_BASE_URL, COPILOT_API_BASE_URL); fix faq "Windows: not natively". - user-guide: fix broken `hermes -w -q` (->-z) and `hermes logs --tail` (->-f); language list 8->16; aux slots 8->11; docker separate-dashboard claim; _SECURITY_ARGS -> _BASE_SECURITY_ARGS. - features: curator prune_builtins truth + missing CLI verbs; codex-runtime aux keys (context_compression->compression, vision_detect->vision); kanban terminate endpoint + promote/reassign/schedule/diagnostics/edit + per-profile cap; mcp mTLS (client_cert/client_key); built-in-plugins nemo_relay + teams_pipeline; api-server run approval endpoint; computer-use frontmatter. - features N-Z + integrations: StepFun step-3-mini->step-3.5-flash; web-search backends 4->8; tool-gateway image-model IDs; voice-mode STT/TTS enums; remove phantom `rl` toolset; nous-portal status subcommand. - messaging: WeCom typing/streaming cols; telegram transport default edit->auto; sms host default; simplex/ntfy `gateway setup` + pairing approve; line smart-chunking; matrix MATRIX_DM_AUTO_THREAD. - developer-guide: build-a-plugin code examples (register_command signature, ContextEngine/ImageGenProvider/MemoryProvider ABCs); model-provider-plugin entry-point group hermes.plugins->hermes_agent.plugins; PLUGIN.yaml->plugin.yaml; agent-loop stale LOC; web-search-provider phantom crawl(). PR coverage (2-week window, 149 feat PRs): - desktop.md refreshed for ~15 shipped features (zh-Hans switcher, rebindable shortcuts + zoom + Cmd+K, status-bar model picker + YOLO toggle, session-by-id + archive, multi-profile concurrent + cross-profile @session, composer history, Providers pane, per-profile remote hosts, Grok OAuth, aux-pin warning). - configuration.md gateway-streaming default corrected to per-platform. - tool-gateway.md free tool pool entitlement note. Media: - New /img/dashboard/admin-config.png — live dashboard Config admin page (captured from a clean profile, no secrets/personalization).
103 lines
3.8 KiB
Markdown
103 lines
3.8 KiB
Markdown
---
|
|
sidebar_position: 11
|
|
title: Model Catalog
|
|
description: Remotely-hosted manifest driving curated model picker lists for OpenRouter and Nous Portal.
|
|
---
|
|
|
|
# Model Catalog
|
|
|
|
Hermes fetches curated model lists for **OpenRouter** and **Nous Portal** from a JSON manifest hosted alongside the docs site. This lets maintainers update picker lists without shipping a new `hermes-agent` release.
|
|
|
|
When the manifest is unreachable (offline, network blocked, hosting failure), Hermes silently falls back to the in-repo snapshot that ships with the CLI. The manifest never breaks the picker — worst case you see whatever list was bundled with your installed version.
|
|
|
|
## Live manifest URL
|
|
|
|
```
|
|
https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
|
|
```
|
|
|
|
Published on every merge to `main` via the existing `deploy-site.yml` GitHub Pages pipeline. The source of truth lives in the repo at `website/static/api/model-catalog.json`.
|
|
|
|
## Schema
|
|
|
|
```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"}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Field notes:
|
|
|
|
- **`version`** — integer schema version. Future schemas bump this; Hermes refuses manifests with versions it doesn't understand and falls back to the hardcoded snapshot.
|
|
- **`metadata`** — free-form dict at the manifest, provider, and model level. Any keys. Hermes ignores unknown fields, so you can annotate entries (`"tier": "paid"`, `"tags": [...]`, etc.) without coordinating a schema change.
|
|
- **`description`** — OpenRouter-only. Drives picker badge text (`"recommended"`, `"free"`, or empty). Nous Portal doesn't use this — free-tier gating is determined live from the Portal's pricing endpoint.
|
|
- **Pricing and context length** are NOT in the manifest. Those come from live provider APIs (`/v1/models` endpoints, models.dev) at fetch time.
|
|
|
|
## Fetch behavior
|
|
|
|
| When | What happens |
|
|
|---|---|
|
|
| `/model` or `hermes model` | Fetches if disk cache is stale, else uses cache |
|
|
| Disk cache fresh (< TTL) | No network hit |
|
|
| Network failure with cache | Silent fallback to cache, one log line |
|
|
| Network failure, no cache | Silent fallback to in-repo snapshot |
|
|
| Manifest fails schema validation | Treated as unreachable |
|
|
|
|
Cache location: `~/.hermes/cache/model_catalog.json`.
|
|
|
|
## Config
|
|
|
|
```yaml
|
|
model_catalog:
|
|
enabled: true
|
|
url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
|
|
ttl_hours: 1
|
|
providers: {}
|
|
```
|
|
|
|
Set `enabled: false` to disable remote fetch entirely and always use the in-repo snapshot.
|
|
|
|
### Per-provider override URLs
|
|
|
|
Third parties can self-host their own curation list using the same schema. Point a provider at a custom URL:
|
|
|
|
```yaml
|
|
model_catalog:
|
|
providers:
|
|
openrouter:
|
|
url: https://example.com/my-openrouter-curation.json
|
|
```
|
|
|
|
The overriding manifest only needs to populate the provider block(s) it cares about. Other providers continue to resolve against the master URL.
|
|
|
|
## Updating the manifest
|
|
|
|
Maintainers:
|
|
|
|
```bash
|
|
# 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
|
|
```
|
|
|
|
Then PR the resulting change to `website/static/api/model-catalog.json` to `main`. The docs site auto-deploys on merge and the new manifest is live within a few minutes.
|
|
|
|
You can also hand-edit the JSON directly for fine-grained metadata changes that don't belong in the in-repo snapshot — the generator script is a convenience, not the single source of truth.
|