Skip to main content

Hermes Agent with mittwald AI Hosting

Hermes Agent is a command-line agent with file, shell and web tools, a built-in skill library, and MCP support. It reaches mittwald AI Hosting through a custom provider entry.

Installation

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

Check the install:

hermes --version

Pointing Hermes at mittwald AI Hosting

Hermes reads ~/.hermes/config.yaml. Add a custom_providers entry and make it the default:

model:
default: Qwen3.5-122B-A10B-FP8
provider: mittwald
base_url: https://llm.aihosting.mittwald.de/v1
custom_providers:
- name: mittwald
base_url: https://llm.aihosting.mittwald.de/v1
api_key: sk-...
models:
- Qwen3.5-122B-A10B-FP8
- Qwen3.8-27B-NVFP4
- Qwen3.6-35B-A3B-FP8
context_length: 245760

Replace sk-... with your AI Hosting API key. You create it in the AI-Hosting section of your mStudio project — see Gaining access. An mStudio API token from your profile settings is a different credential and will not work here.

A custom_providers entry accepts these keys: name, base_url, api_key, api_mode, model, models, context_length, rate_limit_delay, extra_body, ssl_ca_cert, ssl_verify and key_env. An unrecognised key isn't reliably caught before you reach a chat session — see Checking the config and the endpoint separately — so check spelling against this list if the provider misbehaves.

Instead of pasting the key into config.yaml as api_key, you can keep it out of the file entirely with key_env and read it from an environment variable:

key_env: MITTWALD_LLM_API_KEY

Verifying the connection

Run hermes doctor as a first check:

hermes doctor

doctor surfaces common environment and setup problems, but its output varies by installation, and it does not reliably validate custom_providers field names — an unrecognised key may simply be ignored rather than reported. If the provider doesn't behave as expected, check spelling against the key list in Pointing Hermes at mittwald AI Hosting rather than trusting doctor to catch it.

Then run one turn that forces a tool call, because a plain chat reply would succeed even if tool calling were broken:

hermes chat --model Qwen3.5-122B-A10B-FP8 \
-q "Create a file called hello.txt containing the word hello, then read it back."

Two things about this command differ from what you might expect:

  • There is no -p flag. The non-interactive flag is -q/--query.
  • Don't pass --provider mittwald. Hermes' --provider flag only accepts its built-in provider names (auto, openrouter, nous, anthropic, and so on) — a custom provider name is rejected with error: argument --provider: invalid choice. Leave it unset; Hermes picks up mittwald from model.provider in config.yaml automatically, so -m/--model is all you need to add.

A successful run shows the agent preparing a write_file call, printing a diff of what it's about to write, then preparing a read_file call, then a final message confirming the round trip:

┊ ✍️ preparing write_file…
┊ review diff
a/hello.txt → b/hello.txt
@@ -0,0 +1 @@
+hello
┊ 📖 preparing read_file…

╭─ ⚕ Hermes ──────────────────────────────────────────────────╮
Done! Created `hello.txt` with the word "hello" and read it back:

```
hello
```
╰─────────────────────────────────────────────────────────────╯

Two separate tool calls, write_file then read_file, both against the mittwald endpoint — that is tool calling working end to end.

Recommended skills, plugins and MCP servers

Skills

Hermes ships a skill library — nothing to install. List what is available:

hermes skills list

Useful for development work:

  • codebase-inspection — structured exploration of an unfamiliar repository
  • github-pr-workflow, github-code-review, github-issues — GitHub workflows
  • native-mcp, mcporter — working with MCP servers from inside a session

More skills come from registries:

hermes skills search <term>
hermes skills inspect <name> # preview before installing
hermes skills install <name>
hermes skills audit # re-scan installed skills

Plugins

Plugins install from Git repositories:

hermes plugins install owner/repo
hermes plugins list

Nothing is required for mittwald AI Hosting to work — the provider config above is sufficient.

MCP servers

MCP servers give the agent tools beyond files and shell. Add one, then test it:

hermes mcp add context7 --command npx --args -y @upstash/context7-mcp
hermes mcp test context7
hermes mcp list

A useful starting set:

ServerCommand
Library documentationnpx -y @upstash/context7-mcp
URL fetchinguvx mcp-server-fetch
Browser automationnpx -y @playwright/mcp
Filesystem accessnpx -y @modelcontextprotocol/server-filesystem <path>

mittwald's own MCP server exposes your infrastructure to the agent:

hermes mcp add mittwald --url https://mcp.mittwald.de/mcp --auth oauth
hermes mcp test mittwald

For the API-token alternative and troubleshooting, see Getting Connected with Hermes Agent.

Troubleshooting

error: argument --provider: invalid choice: 'mittwald'

hermes chat --provider only accepts Hermes' built-in provider names — auto, openrouter, nous, openai-codex, copilot-acp, copilot, anthropic, gemini, huggingface, zai, kimi-coding, minimax, minimax-cn, kilocode — not the name of a custom_providers entry. Passing --provider mittwald fails with this error before the agent even starts. Omit --provider; with model.provider: mittwald set in config.yaml, Hermes uses it as the default and -m Qwen3.5-122B-A10B-FP8 is enough to select the model.

Checking the config and the endpoint separately

hermes doctor and a forced tool call cover two different failure modes, and it's worth knowing which one you're diagnosing:

  • hermes doctor surfaces common setup problems, but it does not reliably validate custom_providers field names — a misspelled or unsupported key may simply be ignored instead of reported. Check spelling against the key list in Pointing Hermes at mittwald AI Hosting rather than relying on doctor to catch it.
  • If the config parses but the endpoint, key or model is wrong, doctor won't catch it either, because it doesn't call the endpoint. A forced tool call (as in Verifying the connection) is what confirms the mittwald endpoint is actually reachable and returning tool calls.

Next steps

Disclaimer

Third-party tools, MCP servers and external links are provided for convenience without endorsement or warranty. Use them at your own risk, review licenses and privacy policies, and scope access conservatively (least privilege). Avoid sending sensitive data to external services unless required and permitted.