Overview
Hermes Agent is a self-hosted AI agent from Nous Research. You bring the model — an API key for Anthropic, OpenAI, or any OpenAI-compatible endpoint — and the agent brings the memory, tools, and interfaces around it. This template deploys the supervised gateway with an OpenAI-compatible API for your clients and an internal-only web dashboard, with all agent state on a persistent volume.Architecture
- Hermes Agent — A single-replica stateful workload running the supervised gateway. It serves the OpenAI-compatible API on port
8642and the web dashboard on port9119. Headless Chromium for browser automation is baked into the image and launched on demand. - Model — External. Every completion is dispatched to your LLM provider using a key you supply; the workload holds no model weights.
What Gets Created
- Stateful Hermes Agent Workload — Single replica. Gateway API on port
8642(bearer auth, optionally public); web dashboard on port9119(internal only, basic auth). - Volume Set — 10 GiB persistent storage at
/opt/datafor the SQLite memory database, sessions, learned skills, and agent config. Supports optional autoscaling. - Identity & Policy — An identity bound to the workload with
revealaccess to exactly the one prerequisite secret, and nothing else.
This template does not create a GVC. You must deploy it into an existing GVC.
Prerequisites
Hermes Agent needs an LLM API key and a dictionary secret that you create before installing. No credential is passed through values.1
Get an LLM API key
Obtain a key from your provider — Anthropic, OpenAI, or any OpenAI-compatible endpoint (OpenRouter, Ollama, vLLM, LM Studio, a proxy) reached via
provider: custom.2
Generate a gateway API key
Generate the bearer token your clients will present to the gateway API. It must be at least 16 characters — generate one with
openssl rand -hex 32.3
Create a dictionary secret
Create a dictionary secret holding the three values below. Name the keys however you like — map them with
secret.keys at install, so an existing secret works unchanged. Pass the secret’s name as secret.name.UI
Browse, install, and manage templates visually
CLI
Manage templates from your terminal
Terraform
Declare templates in your Terraform configurations
Pulumi
Declare templates in your Pulumi programs
Configuration
The defaultvalues.yaml for this template:
Model
image— The Hermes Agent container image.model.provider— The LLM provider:
model.name— Model override, e.g.claude-opus-4.6,gpt-5. Empty uses the provider default. Recommended for non-Anthropic providers.model.baseUrl— The OpenAI-compatible endpoint. Required whenprovideriscustom.model.reasoningEffort—none,low,medium, orhigh(defaultmedium).
provider: custom:
model.baseUrl has no effect with provider: anthropic — the Anthropic client ignores it. The template fails at render if you set both, so use provider: custom to route through a proxy.Secret
secret.name— Name of the dictionary secret you created. See Prerequisites.secret.keys.apiKey/secret.keys.apiServerKey/secret.keys.dashboardPassword— The key names within your secret that hold each value. Override these to match an existing secret rather than renaming its keys.
Dashboard
dashboard.enabled— Serve the web dashboard on port9119. Internal only — it is never published on the public endpoint.dashboard.username— Basic-auth username. The password comes from your secret.
Resources
resources.minCpu/resources.minMemory— The idle floor.resources.cpu/resources.memory— The burst ceiling, giving headroom for the on-demand headless browser.
cpu under 4× minCpu — the platform rejects a wider ratio.
Storage
volumeset.capacity— Initial volume size in GiB (minimum 10) for the memory database, sessions, skills, and config.volumeset.autoscaling.enabled— Automatically expand the volume as state grows. When enabled:maxCapacity— Maximum volume size in GiB.minFreePercentage— Trigger a scale-up when free space drops below this percentage.scalingFactor— Multiply the current capacity by this factor when scaling up.
Access
publicAccess.enabled— Expose the gateway API on the public canonical HTTPS endpoint. Defaults tofalse. Read the security note below before enabling.internalAccess.type— Internal firewall scope of the workload:
Connecting
Example request against the gateway API:
Messaging Platforms
Hermes supports chat-platform gateways such as Telegram, Discord, and Slack. These are configured after install using Hermes’s own interactive setup — not through this template’s values:Important Notes
- The API server key must be at least 16 characters — Hermes rejects anything shorter, and the workload will not become ready.
- The dashboard is internal-only — it is never on the public endpoint; reach it via
cpln workload port-forward. - Single replica by design — memory is a single-writer SQLite database and upstream forbids two gateways sharing one data directory. Do not scale up. State persists on the volume across restarts and the agent resumes; only in-flight work is lost.
- The model is external — cost and rate limits are governed by your LLM provider, not this workload.
- Failed model calls return HTTP 200 with the error inside the body (
"finish_reason": "error","hermes": {"failed": true}). A client that checks only the HTTP status will read a provider failure as success — inspect the body, or the agent log at/opt/data/logs/agent.log. - Keep
cpuunder 4×minCpu— the platform rejects a wider ratio; raiseminCpuif you raisecpu. - Resetting requires an uninstall — changing the secret and redeploying does not wipe existing memory or config on the volume.
cpln helm uninstalldeletes the volume set.
External References
Hermes Agent Documentation
Official Hermes Agent documentation
Hermes Agent Repository
Source, issues, and release notes
Nous Research
The team behind Hermes Agent
Hermes Agent Template
View the source files, default values, and chart definition