Hermes Agent with an uncensored model

One providers entry in ~/.hermes/config.yaml: api, key_env, transport chat_completions and the uncensored ids. The key in .env, /model to switch, the cost of an agent turn and the errors.

Steps checked November 6, 2026 · prices as of November 9, 2026

Hermes Agent takes any OpenAI-compatible endpoint as a named entry under providers in ~/.hermes/config.yaml. One entry, and an uncensored build runs the agent with tool calls for files and shell commands, billed per token. The same ids work in OpenClaw and OpenCode.

Where the settings are

Settings live in ~/.hermes/config.yaml; secrets live in ~/.hermes/.env. Hermes reads CLI flags first, then config.yaml, then .env, then its defaults. A providers entry names its key variable with key_env, so the key never sits in config.yaml. Older guides show a custom_providers list; Hermes still reads it and hermes update migrates it, but new setups use the mapping below.

Steps

  1. Create a key in the console, one for Hermes alone so its requests sit apart on the usage page, and put it in the env file, one line:
.env
1# ~/.hermes/.env
2UNCENSOREDLLM_API_KEY=sk-ullm-live-…
  1. Add the provider to config.yaml. The ids under models are a starting list; any id on the models page goes in the same mapping:
config.yaml
1# ~/.hermes/config.yaml
2model:
3 default: glm-5.3-uncensored
4 provider: custom:uncensoredllm
5
6providers:
7 uncensoredllm:
8 api: https://api.uncensoredllm.ai/v1
9 key_env: UNCENSOREDLLM_API_KEY
10 transport: chat_completions
11 default_model: glm-5.3-uncensored
12 models:
13 glm-5.3-uncensored: {}
14 glm-5.3-flash-uncensored: {}
15 deepseek-v4.1-flash-abliterated: {}
16 deepseek-v4-pro-uncensored: {}
17 glm-5.3-abliterated: {}
18 kimi-k3.1-pro-uncensored: {}
  1. Run hermes and send a message. The request shows on the console’s usage page within seconds, with its tokens and its charge.

The same block from the shell. Dotted paths go to config.yaml; the UPPER_SNAKE name goes to .env:

shell
1hermes config set UNCENSOREDLLM_API_KEY sk-ullm-live-…
2hermes config set providers.uncensoredllm.api https://api.uncensoredllm.ai/v1
3hermes config set providers.uncensoredllm.key_env UNCENSOREDLLM_API_KEY
4hermes config set providers.uncensoredllm.transport chat_completions
5hermes config set model.provider custom:uncensoredllm
6hermes config set model.default glm-5.3-uncensored

Switch inside a session with /model; the change lasts for that session unless --global writes it back to config.yaml:

hermes
1/model custom:uncensoredllm:glm-5.3-flash-uncensored
2/model custom:uncensoredllm:deepseek-v4.1-flash-abliterated --global

What each setting does

api
https://api.uncensoredllm.ai/v1
the endpoint, with the /v1; base_url is accepted as an alias
key_env
UNCENSOREDLLM_API_KEY
the variable in .env that holds the whole sk-ullm- key
transport
chat_completions
the OpenAI chat format, which every build on the models page answers
default_model
glm-5.3-uncensored
the id this entry starts with
models
id: {}
per-model settings keyed by id; context_length under an id overrides what Hermes detects
model.provider
custom:uncensoredllm
selects the entry; model.default is the id Hermes starts with

Picking a model

Hermes needs tool calling for every file read, shell command and subagent, so before a long task on a new id send one short task and check that Hermes runs a tool. Input price decides the session cost, because Hermes sends the conversation and every tool result back on each turn. The cost column is one turn of 30,000 tokens in and 1,000 out at the catalog prices on 2026-11-09.

ModelOne turn30 turns
GLM-5.3 Uncensored$0.0093$0.28
GLM-5.3 Flash Uncensored$0.0035$0.11
DeepSeek V4.1 Flash Abliterated$0.03$0.81
DeepSeek V4 Pro Uncensored$0.03$0.93
GLM-5.3 Abliterated$0.07$2.10
Kimi K3.1 Pro Uncensored$0.04$1.26
Uncensored models and their prices per million tokens
GLM-5.3 Uncensoredglm-5.3-uncensoredUncensored$0.282$0.846
GLM-5.3 Flash Uncensoredglm-5.3-flash-uncensoredUncensored$0.1053$0.3685
DeepSeek V4.1 Flash Abliterateddeepseek-v4.1-flash-abliteratedAbliterated$0.8488$1.6975
DeepSeek V4 Pro Uncensoreddeepseek-v4-pro-uncensoredUncensored$0.97$1.94
GLM-5.3 Abliteratedglm-5.3-abliteratedAbliterated$2.1825$4.365
Kimi K3.1 Pro Uncensoredkimi-k3.1-pro-uncensoredUncensored$1.20$6.00

Prices per million tokens, read from the live catalog on 2026-11-09.

For coding specifically, the uncensored coding AI guide compares the code builds and costs a full coding day on each.

Check it

hermes status shows the model, the active provider and which providers have a credential, without printing key values. From the same shell, the key should list the models:

shell
1hermes status
2curl https://api.uncensoredllm.ai/v1/models -H "Authorization: Bearer $UNCENSOREDLLM_API_KEY"

Then send one request the way Hermes does. -i prints the headers: x-uplink-request-id names the request, and on a non-streamed answer x-uplink-charge is what it cost in USD.

shell
1curl -i https://api.uncensoredllm.ai/v1/chat/completions \
2 -H "Authorization: Bearer $UNCENSOREDLLM_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{"model": "glm-5.3-uncensored", "max_tokens": 16, "messages": [{"role": "user", "content": "Reply with the single word ok."}]}'

Errors and fixes

  • 401 invalid_api_key: the key is wrong, revoked or not reaching the request. Check ~/.hermes/.env for the line, confirm key_env names the same variable, and copy the key again from the console.
  • 402 insufficient_balance: the balance does not cover the request. Top up in the console. 402 monthly_limit_reached means the key hit the monthly spend limit you set on it.
  • 404 model_not_found: the id in model.default is not on the models page. Copy the id from the page and set it with hermes config set model.default <id>.
  • 429 rate_limited: the key hit its rate limit. The response carries retry-after.
  • A 400 on the first run: Hermes’ own FAQ puts this down to a model name mismatch. Run hermes config show and compare model.default against the models page.
  • Every custom endpoint is ignored: an old custom_providers key in config.yaml is no longer a YAML list. Move the entry to the providers mapping on this page, then run hermes doctor.

Sources

Field names follow Hermes Agent’s providers page and configuration guide, read 2026-11-06. Prices are from the live catalog at render.

Questions

Yes. Hermes Agent takes any OpenAI-compatible endpoint as a named entry under providers in ~/.hermes/config.yaml, with api, key_env and transport chat_completions. The block on this page points it at https://api.uncensoredllm.ai/v1, and every build on the models page then runs through it.

Set model.default to the model id and model.provider to custom:uncensoredllm, or run /model custom:uncensoredllm:<id> inside a session. Add --global to the /model command to write the choice back to config.yaml. Copy the id from the models page rather than typing it.

In ~/.hermes/.env, as UNCENSOREDLLM_API_KEY=... on one line. hermes config set with an UPPER_SNAKE name writes there too. The providers entry reads it through key_env, so the key never sits in config.yaml.

Per token at the model’s price, from your prepaid balance, with no subscription. The table above costs one agent-sized turn on each build at the live price; a session that repeats the same prefix bills the cached input tokens at the model’s cached rate.

Every model above is on the uncensored model list with its live price per million tokens. Per-token pricing sets the whole catalog side by side, and the family directory groups the builds by base model.

Get a keyPrepaid from $10, no subscription.

New models and price changes, once a month.

New uncensored builds with their prices, price moves, and what the daily model check found.

Join on Telegram