Hermes Agent
Nous Research · hermes-agent.nousresearch.com
Hermes Agent is an MIT-licensed runtime that keeps configuration, memory, skills, credentials and session history in plain files and SQLite under the owner's home directory, with free model choice including local models and a full backup command. It is strong on portability, transparency and modifiability, records each tool call before running it, and logs A2A exchanges on both sides. Contacts can recognize the agent and its messages only through third-party platform accounts, and edits to its session history are not detectable, so the Auditable and Verifiable criteria are only partly met.
- MIT-licensed runtime; all state in ~/.hermes as YAML, Markdown, JSON and SQLite
- One-command full backup and restore (hermes backup / import)
- Any model provider, including local Ollama/llama.cpp endpoints
- Tool calls recorded before execution; A2A exchanges logged on both sides
- Runtime-enforced approval gate, deny rules and gateway user allowlists
- Product telemetry export (OTLP) disabled by default; secrets held locally
- Agent identity and messages verifiable only through third-party platform accounts
- Edits to session history are not detectable, so there is nothing to verify independently
- Agent can reach its own history with the default local backend
- Reproducible builds not documented
- Outbound contact restrictions weaker than inbound allowlists
All 34 findings
NousResearch/hermes-agent main branch at commit ba5e3bf (2026-09-27), CLI/gateway self-hosted install with default config; Nous Portal, Tool Gateway and desktop free-tier onboarding noted where relevant.
Portable · Can you leave, and take the whole agent with you?
92%- P1Round-trip portability
No shortfalls: `hermes backup` immediately writes the complete Hermes home (config, .env, auth.json, state.db, skills, memory, cron, profiles) to one zip, and `hermes import <zip>` restores it in place on another machine. The docs advise stopping the gateway first and running `hermes setup` afterwards to check provider keys.
Pass - P2Complete export
`hermes backup` includes configuration, the SOUL.md persona, MEMORY.md/USER.md, the session database, skills, cron jobs, secrets and the encrypted credential vault, which is everything that defines the agent. Only regenerable caches such as checkpoints and browser profiles are excluded.
Pass - P3Independent execution
The runtime is MIT-licensed Python that runs locally and can be pointed at a self-hosted OpenAI-compatible endpoint (e.g. Ollama, llama.cpp), so it can operate without contacting Nous servers.
Pass - P4Identity continuity
Hermes has no identity of its own that contacts can verify: after migration they recognize it only through the messaging-platform accounts and A2A peer tokens whose credentials travel in the backup, relying on each platform. Nous is not involved in either case.
Partial - P5No kill switch
No license checks or remote enablement flags were found; update checks are read-only and plugin update polling can be set to 0. The optional Nous free-tier identity only affects Nous-hosted inference and tools.
Pass - P6Capability independence
Tools, memory, skills, cron, MCP and the messaging gateway are executed by the runtime and work with any model, and the optional Nous Tool Gateway services have self-keyed alternatives. Local models must support tool calling to use them.
Pass
Transparent · Can you see everything the agent is, with ordinary tools?
100%- T1Open storage format
State is stored as YAML config, .env, Markdown memory/persona files, JSON cron jobs and a documented SQLite schema (state.db), all readable without Hermes.
Pass - T2No hidden instructions
The system prompt is assembled by open-source code from owner-visible files (SOUL.md, AGENTS.md, memory, skills) and is persisted per session in the state.db `system_prompt` column. Context files discovered mid-session are injected as visible messages.
Pass - T3No shadow memory
Memory and user profile live in local files and SQLite; Nous keeps no profile in a self-hosted setup. Owner-selected external services (inference providers, the optional Honcho memory provider, Nous Portal) process data under their own policies.
Pass - T4Complete action history
Every session's messages, tool calls and tool results are stored in the local state.db, and A2A exchanges in a local audit log, all included in backups. Sessions can be exported with `/export`.
Pass - T5Readable logic
Skills are Markdown (agentskills.io format) with optional scripts, and the runtime, plugins and tools are plain Python source.
Pass - T6No third-party influence channel
No advertising, sponsorship or partner-ranking channel was found in the source. Content comes into context only through owner-installed skills, plugins, MCP servers and connected platforms.
Pass
Auditable · Can you reconstruct exactly what the agent did?
70%- A1No unrecorded actions
The runtime writes each tool-call turn to the session database before any tool runs, and if that write fails it ends the turn without executing the tools. Final text replies are flushed before delivery but are still sent if that write fails, with a later retry.
Pass - A2Tamper evidence
Edits to or deletions from the session database or the A2A audit log are not detectable, because rows and entries carry no hashes, chaining or signatures.
Fail - A3Separation from the audited
With the default local terminal backend, the agent runs as the owner's OS user and its shell and file tools can reach ~/.hermes/state.db. The Docker backend mounts only credentials, skills and caches (read-only) plus the working directory, which keeps the session database out of reach.
Partial - A4Readable with ordinary tools
Session history is in SQLite and logs, including the A2A audit log, are plain text or JSONL under ~/.hermes, readable with sqlite3 or any text tool.
Pass - A5Corroborated interactions
In A2A exchanges, the calling and the receiving Hermes both persist the conversation keyed by the shared A2A context and task ids, and the server also appends each exchange to `a2a_audit.jsonl`, so the two records can be matched. Delegated subagent sessions are linked to their parent session.
Pass
Verifiable · Can you prove the agent runs what it claims?
50%- V1Open, reproducible runtime
The runtime is MIT-licensed (OSI-approved), with exact-pinned dependencies, a uv.lock and a Nix flake. Bit-for-bit reproducible release builds are not documented.
Partial - V2Active config is inspectable config
Active configuration comes from owner-readable config.yaml and .env files, layered over code defaults and environment variables. The layering means the effective config is not always the literal file contents.
Partial - V3Attributable messages
Messages can be attributed only through the platform bot accounts and A2A tokens the agent uses, whose credentials travel in the backup, so recipients rely on each platform's authentication. Outbound messages carry no signature a recipient could check independently; A2A push notifications use an HMAC with a shared secret.
Partial - V4Independently checkable record
The action record carries no integrity data, so no tool can check that it is unaltered.
Fail - V5Comparable state
`hermes backup` and quick snapshots capture the full state as YAML, Markdown, JSON and SQLite, so the owner can compare two snapshots with open tools such as `diff` and SQLite's `sqldiff`. No built-in state digest is provided.
Pass
Modifiable · Can you change anything, without asking?
100%- M1Instructions
Persona (SOUL.md), project instructions (AGENTS.md) and prompt-building code are all owner-editable; the built-in prompt text is in MIT source.
Pass - M2Memory
Memory entries live in editable MEMORY.md and USER.md files, and sessions can be deleted from the local database.
Pass - M3Logic
Skills are editable Markdown files, and the entire runtime can be forked or modified under MIT.
Pass - M4Tools and permissions
Owners can enable or disable toolsets, add MCP servers and plugins, and set deny globs and approval modes, including tools Nous does not provide.
Pass - M5Model choice
`hermes model` switches among Nous Portal, OpenRouter, OpenAI, Anthropic, Bedrock and custom or local endpoints. The skill and tool set is unchanged, provided the model supports tool calling.
Pass - M6No gatekeeping
No license check or paid unlock gates modification. Nous subscriptions only cover hosted inference and Tool Gateway services.
Pass
Controllable · Is your word final?
83%- C1Communication boundaries
The gateway enforces per-platform inbound allowlists and DM pairing, and `A2A_TRUSTED_PEERS` limits inbound peers. No runtime allowlist of outbound recipients was found, and `a2a_call` accepts any A2A endpoint.
Partial - C2Approval gates
A runtime approval gate intercepts dangerous commands and code execution, and owner deny globs block even under --yolo. Writes to instruction files always require approval. The default 'smart' mode lets an auxiliary LLM auto-approve low-risk actions; 'manual' mode always prompts.
Pass - C3Immediate halt
The agent is a local process that the owner can interrupt or kill directly, and the gateway can be stopped by the owner's service manager or CLI with no provider involvement.
Pass - C4Data sovereignty
Source shows OTLP monitoring export disabled by default and diagnostics uploaded to Nous only on an explicit `hermes debug share`. Content goes to the owner-chosen inference provider. Desktop free-tier onboarding can create a Nous identity at first run, and no network-inspection verification was performed.
Partial - C5Credential custody
API keys and OAuth tokens are held locally in .env and auth.json, and site logins in a locally encrypted vault (vault.key). All are inspectable and revocable, and all are included in backups.
Pass - C6Full deletion
All state is local, so deleting ~/.hermes or running `hermes uninstall` removes the agent. Nous retains nothing for self-hosted use; retention by chosen model providers follows their own policies.
Pass
Vendors and the public can dispute any finding with evidence. Disputes and their resolutions are published.