Hermes Agent
VerifiedNous Research's terminal agent (Linux/macOS/WSL2). Add a kotoba provider and select it with model.provider. Measured on agent-coding sessions, 2026-09-17 — every line of the block below is a measured floor.
context_length is 98,304 (the 131,072 slot minus the 32,768 default output): hermes sends no max_tokens (its config cannot impose one), so declare the window minus the output. Timeouts are 900 s: the answer arrives whole and the edge waits up to 840 s. Compaction summaries go to the blue route (qwen/qwen3.8-flash) so they never queue behind your own session. Never point the summary at the red model: on 2026-09-18 the red route hung edge-side for an hour (ADR 2609181900) and an install that did lost every compaction (120 s with no output) while blue answered in 3.6 s throughout. auxiliary.compression.fallback_chain (off-edge :free SKUs, key_env required) is the escape for when this edge itself is silent — a summary is plain text, so another provider cannot poison the transcript. The MAIN fallback stays on this edge: another provider's reasoning_details get replayed here and 400. Auxiliary title generation spends one free request per turn (`auxiliary.title_generation.enabled: false` stops it).
Setup
# ~/.hermes/config.yaml (or a profile's config.yaml)
model:
provider: kotoba
default: qwen3.8-flash-next-whitehacker
# no max_tokens: hermes ignores it; the edge's default output budget is 32,768
providers:
kotoba:
api: https://api.mithril.fund/v1 # literal: a KOTOBA_API_BASE that already ends in /v1 would become /v1/v1 (405)
key_env: KOTOBA_API_TOKEN
transport: chat_completions
discover_models: true
request_timeout_seconds: 900
stale_timeout_seconds: 900
models:
qwen3.8-flash-next-whitehacker:
context_length: 98304 # 131,072 slot - 32,768 output budget
custom:
# a named provider runs under this label at runtime — these are the timeouts that apply
request_timeout_seconds: 900
stale_timeout_seconds: 900
compression:
# the answer arrives whole; a summary can take minutes under load
context_timeout_seconds: 900
context_total_ceiling_seconds: 900
auxiliary:
compression:
provider: kotoba # REQUIRED with a bare base_url: without it (or key_env) hermes resolves the task to "auto" = the main model
key_env: KOTOBA_API_TOKEN
model: qwen/qwen3.8-flash # the blue route: shares no slot with your session
base_url: https://api.mithril.fund/v1
reasoning_effort: none
timeout: 900
# optional, off-edge: where the summary goes when THIS edge is silent (needs an OpenRouter key in .env).
# key_env is required — the stall retry pins the entry as-is and 401s without it. :free SKUs only.
fallback_chain:
- provider: openrouter
model: qwen/qwen3.8-27b:free
key_env: OPENROUTER_API_KEY
timeout: 180
- provider: openrouter
model: nex-agi/nex-n2.5-mini:free
key_env: OPENROUTER_API_KEY
timeout: 120
title_generation:
provider: kotoba
key_env: KOTOBA_API_TOKEN
model: qwen/qwen3.8-flash
base_url: https://api.mithril.fund/v1
reasoning_effort: none
timeout: 120
fallback_providers:
- provider: kotoba
model: qwen/qwen3.8-flash # same edge; another provider's reasoning_details would be replayed here
base_url: https://api.mithril.fund/v1
api_mode: chat_completions
# ~/.hermes/.env — the token is the only thing read from the environment
KOTOBA_API_TOKEN=kc_pat_<your-token> # issue at https://console.mithril.fund/account (shown once)
OPENROUTER_API_KEY=sk-or-<optional> # only for auxiliary.compression.fallback_chain; omit the chain without it
# `personal API token refused: token-unknown` = the token in THIS machine's .env is not in the
# account's registry (issued elsewhere, or before the registry): paste a current one here.
# profiles: start them as `hermes -p <profile>` or with HERMES_HOME=~/.hermes/profiles/<profile>,
# not via the sticky `hermes profile use` (subprocesses then write to the default profile)
hermes chat -Q --oneshot -q "Reply with exactly: OK"
The research gates (verification, scope, free quota) are identical to the cookie session; the token only removes the origin gate.
← All tools