Skip to content
Agents of Humanity
Public preview. Results are preliminary (criteria v1.0, 30 Sept 2026). Tell us what we got wrong
Open sourceself-hostedMIT

Hermes Agent

Nous Research · hermes-agent.nousresearch.com

Hermes Agent is an MIT-licensed, local-first agent runtime whose state lives in documented files and SQLite under ~/.hermes. It can be backed up and restored with one command each and runs on local or third-party models. On the recommended Nous Portal path, prompts are used for training unless the owner opts out, provider-side retention is not itemised, and the action record has no tamper evidence or protection from the agent's own shell.

Strengths
  • One-command backup and import to owner-run hardware (P1)
  • Local-first state in documented SQLite, Markdown, YAML and JSON (T1, P5)
  • MIT source with no licence checks; telemetry off by default (P3, V1)
  • Owner can add MCP or plugin tools and remove any built-in toolset (M3)
Gaps
  • Action record pruned after 90 days by default, with no tamper evidence or protection from the agent (A1–A3)
  • Nous Portal uses inference payloads for training unless Privacy Mode is enabled, and retention is not itemised (C4, T3)
  • The agent can change its own approval settings through the terminal (C1)
  • No single-action deletion that reaches provider-side copies (C6)
Evidence

All 26 findings

github.com/NousResearch/hermes-agent at commit 47676981f55de91231fdeef2f0eec47e7c209e78 (2026-09-30, main). Linux terminal install; the live https://hermes-agent.nousresearch.com/install.sh was byte-identical to scripts/install.sh at this commit. Desktop apps (macOS/Windows), Hermes Cloud hosted agents and the pre-GA anonymous free tier (HERMES_GUEST_ONBOARDING) are out of scope. Nous Portal Terms and Privacy Policy as fetched 2026-09-30 (privacy policy dated 2026-09-28). Desk review only.

Portable · Can you leave, take the whole agent with you, and keep it alive?

70%
  • P1
    Owner-usable round trip

    `hermes backup` writes a zip of the whole ~/.hermes home. `hermes import <zip>` restores it on a machine the owner runs, including profile aliases and the gateway service. The FAQ documents moving to a new machine as install, back up, copy and import. Export and restore each need no approval or queue.

    Pass
  • P2
    Complete export

    The backup covers config.yaml, .env, auth.json, the credential vault, state.db sessions, memories, skills, cron jobs, MCP tokens and memory-provider files. Portal connectors are enabled by default (`connectors.enabled: True`). Credentials for accounts linked through them are held by Nous and its integration providers, and connector policy is stored at the Portal, so those integrations can be re-linked only through the Portal.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Let connector accounts and connector policy be exported or re-linked without Nous
    • Publish a manifest listing every class of agent state in the backup
    Partial
  • P3
    Runs without the provider

    The runtime is MIT-licensed and the source has no licence check or required Nous account. Cron runs in-process by default, and update checks and the remote model catalog can be switched off. With Nous blocked, Portal connector tools disappear, and public documentation does not give an owner-run replacement for each connector.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Document owner-run replacements (for example MCP servers) for every Portal connector
    • Let the owner point connector and gateway services at self-hosted endpoints in one documented step
    Partial
  • P4
    Model independence

    Ollama, llama.cpp, vLLM and LM Studio are documented, and the minimum model is documented as native tool calling with at least 64k context. Tools run in the runtime. The bundled Google Meet plugin's `meet_say` works only in realtime mode, and that mode is hardcoded to wss://api.openai.com/v1/realtime, so this capability is lost off OpenAI.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Make the Meet realtime endpoint and model configurable, or route speech through the TTS pipeline
    • Test the documented minimum against a local open-weight model for every bundled capability
    Partial
  • P5
    Exit survives termination

    Everything the P2 export contains lives locally in ~/.hermes on the owner's machine, so a current copy stays with the owner after Portal suspension, a lapsed plan or shutdown. Portal terms allow suspension without notice, but that does not reach local state.

    Pass

Transparent · Can you see everything the agent is, and everything shaping it?

38%
  • T1
    Readable without the provider

    State is unencrypted, in documented formats: SQLite state.db (schema documented and in source), Markdown MEMORY.md, USER.md, SOUL.md and SKILL.md files, cron jobs.json and config.yaml. All logic ships as MIT source. Provider-sealed reasoning replay blobs are treated as inference internals, which the criterion excludes.

    Pass
  • T2
    What runs is what you see

    Locally assembled context is visible: `HERMES_DUMP_REQUESTS` writes each request body, system prompts and compaction summaries are stored, and `hermes config show` lists local settings. Two shortfalls. (1) No public evidence settles whether the Portal adds context server-side (G12). (2) Model identity is not fully determinable: the Portal says backend routing for a model 'can change over time', the free list includes an undisclosed 'stealth' model, and the Portal-chosen compaction model appears only in a debug log.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Publish a binding statement that the Portal adds nothing to context, or expose any additions
    • Report the backend and model version that served each call
    • Show the auxiliary and compaction model in `hermes config` or `hermes status`
    Fail
  • T3
    No shadow data

    The Portal privacy policy covers collection of prompts, outputs, conversation history, tool interactions, telemetry and usage logs, and derived datasets, analytics and models. It states no retention periods, and the owner has no item-level view of what is held. The only bound is account deletion within six months of termination.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Publish a retention table for every data class the Portal holds
    • Give owners an item-level view or export of provider-held data
    Fail
  • T4
    No hidden steering

    Setup recommends Nous's own Portal, which is disclosed and replaceable through Full or Blank Slate setup and `hermes model`. The Portal's recommended-models feed sets model ordering with undisclosed criteria and cannot be switched off. There is no binding no-paid-placement commitment, and one promotional partnership (Nemotron) is disclosed.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Put a no-paid-placement commitment in binding terms
    • Disclose the ranking criteria for recommended models, and add a switch to ignore the Portal ranking
    Partial

Auditable · Can you reconstruct exactly what the agent did, and trust the record?

0%
  • A1
    Complete action record

    Tool calls are stored in state.db with their arguments, subagent and cron runs are recorded, and the owner is warned when the store fails. Two shortfalls. (1) Ended sessions are pruned by default (`sessions.auto_prune: True`, `retention_days: 90`). (2) Successful shell-hook runs and outbound webhook calls leave no record; only failures are logged.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Turn off pruning by default, or prune only on the owner's instruction
    • Record hook and webhook executions with their targets and payloads
    Fail
  • A2
    Tamper-evident, owner-checkable

    state.db and the logs carry no hash chain, signature or owner-held checkpoint. The only integrity code is SQLite `PRAGMA integrity_check`, which repairs corruption.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Hash-chain or sign action records and publish an open verifier
    • Anchor checkpoints with the owner, and keep verification working across pruning
    Fail
  • A3
    Agent cannot rewrite its record

    The default terminal backend is local, and state.db is not on the protected write-path list. Dangerous-command patterns do not cover deleting state.db or editing it with sqlite3, so nothing in the default configuration stops the agent from altering its record. Docker isolation exists but is not documented as protection for the record.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Write the record from a component the agent's tools cannot reach
    • Add state.db and logs to the terminal and file write guards
    • Document the protection and how the owner can check it
    Fail

Verifiable · Can you prove what it runs, who it is, and what changed?

50%
  • V1
    Obtainable source, matching build

    The default install is a git clone of the MIT source, with Python dependencies hash-pinned in uv.lock, so the running code can be tied to a commit. Nous Portal inference and the connector service are closed hosted components that are optional but on by default in the recommended setup.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Make the recommended setup work without closed hosted components, or publish their source
    • Document how an owner verifies a checkout against a signed tag
    Partial
  • V2
    Owner-rooted identity

    There is no cryptographic agent identity; the A2A design lists DID/Ed25519 identity as out of scope. Owners can set up per-channel identities they control, such as a mailbox on their own domain or an A2A Agent Card on their own host, which Nous cannot revoke. Attribution is per channel only.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Add an owner-held keypair or DID that signs Agent Cards and outbound actions
    • Document how recipients verify those signatures
    Partial
  • V3
    Change history and rollback

    Skills have an attributed ledger (curator, agent or user) with per-entry rollback. `/snapshot` covers config, state.db, .env, auth.json and cron, and config backups are kept. Memory, model and runtime-version changes have no attributed change log, memory restore means importing a full backup, and the Portal-held connector state is not covered.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Keep one attributed change log across all agent state
    • Include memories and skills in snapshots with one-step restore
    Partial

Modifiable · Can you change anything, and can only you change it?

60%
  • M1
    Instructions and logic

    SOUL.md replaces the default identity, most guidance blocks have config switches, and edited or deleted bundled skills are preserved across `hermes update`. Some system-prompt segments can be changed only by editing source: the Hermes help guidance, the steer-channel note and the runtime/environment block. Platform hints can be replaced but not emptied.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Expose every system-prompt segment as an owner-replaceable file or setting
    Partial
  • M2
    Memory

    MEMORY.md and USER.md are plain files, editable per entry, and agent-authored skills are editable files. The session store that `session_search` recalls across sessions can only be deleted a whole session at a time; items cannot be edited and single messages cannot be deleted. External memory providers are off by default.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Allow editing and deleting individual messages in the session store used for recall
    Partial
  • M3
    Tools

    Owners can connect any MCP server (`hermes mcp add`) or local plugin without review or signing. Every built-in tool sits in a toolset that `agent.disabled_toolsets` removes, and that setting is applied last. Only the separate plugin catalog is curated.

    Pass
  • M4
    Owner has the final say

    Approvals, secret redaction, the private-IP SSRF block, Tirith scanning and protected instruction files can be switched off. Several protections have no owner switch in the local backend: the hardline command blocklist ('no override flag'), the file write/read deny lists, the cloud-metadata SSRF floor, prompt-injection scanning of memory and cron prompts, and the Skills Guard block on 'dangerous' verdicts.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Provide a documented, warned owner override for every protection
    • Document each protection and how to change it
    Partial
  • M5
    No unilateral change

    Runtime updates are applied only by explicit `hermes update`, and owners can pin a concrete model and auxiliary models, disable the remote model catalog, or use a local model. A live plugin kill list fetched from Nous can stop an already-installed catalog plugin from loading, and there is no switch to decline this in advance; the owner can re-enable it only afterwards with a forced reinstall.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Let the owner disable or defer the remote plugin kill list, with notice before it applies
    • Pin Portal backend routing, or show when it changes
    Partial

Controllable · Is your word final?

25%
  • C1
    Boundaries

    Gateway access is deny-by-default with per-user allowlists and pairing, and file tools block writes to config.yaml and .env. Two shortfalls. (1) Outbound contact and network scope are only on/off per toolset or a web denylist, with no per-recipient or per-domain allowlist in the default backend. (2) The agent can change its own approval mode and allowlists through the terminal with `hermes config set`, which matches no gated pattern, and the documentation says the terminal can overwrite denied paths. Spend is treated as met under G11: there is no built-in payment tool, card fills need confirmation, and Portal top-up is human-only.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Keep approval and allowlist settings out of the agent's write access, including through the terminal
    • Add per-recipient and per-domain allowlists for outbound contact and network access
    Fail
  • C2
    Approval gates

    Owners can set manual approval for dangerous commands, `approvals.deny` floors, untrusted-MCP gating and deny-by-default cron and subagent modes. In the default 'smart' mode an auxiliary model decides whether a flagged command is approved. Gating an arbitrary tool requires writing a `pre_tool_call` hook script, since config has no require-approval list.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Add a config-level require-approval list for any tool or action class
    • Make owner-set gates independent of model judgement by default
    Partial
  • C3
    Immediate halt

    Ctrl+C and gateway `/stop` interrupt the foreground turn and background processes. `hermes pause` writes an ESTOP file that blocks new cron, kanban and gateway work, but in-flight work is never killed, and stopping cron, subagents and the gateway takes separate steps.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Provide one control that also cancels in-flight, scheduled and subagent work within seconds
    Partial
  • C4
    Data serves only the owner

    On the recommended Nous Portal path, the terms license Service Data for training and product development. Inference payloads are stored and used for training unless the owner enables Privacy Mode, which is opt-out and applies only going forward. The privacy policy can change by posting. Hermes telemetry to Nous is off by default, but the FAQ still says Hermes collects no telemetry.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Make Privacy Mode the default for Hermes installs, in binding terms
    • Require specific consent for data-term changes
    • Correct the FAQ and publish a list of outbound endpoints
    Fail
  • C5
    Credential custody

    `hermes auth list/remove`, `hermes vault`, `hermes mcp remove` and `hermes pairing revoke` each show and revoke their own credential class, with no single list. `hermes auth logout` only deletes local tokens and does not revoke them at the provider. Connector credentials held by Nous have no documented owner view or guarantee of deletion on revocation.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Revoke OAuth grants server-side on logout
    • List every credential and grant, including Portal connectors, in one place with per-item revoke
    Partial
  • C6
    Full deletion

    `hermes uninstall --full` removes local data, but Portal data needs a separate account termination. Nous deletes the account within six months of termination, or one month on request, and gives no documented confirmation. The privacy policy says prior use may already be 'incorporated into models', and derived datasets are retained.

    › How it could pass

    Suggestions. Any change that meets the test counts.

    • Offer one action that deletes local and Portal data, including backups, within a stated limit
    • Confirm completion to the owner
    Fail
Provenance

How this assessment was produced

One run, in a fresh container with stock Claude Code and no custom instructions, memory, hooks or plugins. The evaluator received only the prompt below.

Prompt given to the evaluator
Load the AFH sovereignty skill at https://agentsforhumanity.dev/skill.md and follow it to write a desk review of Hermes Agent (https://hermes-agent.nousresearch.com/).

During the run the skill was read from a local copy of this site with identical content; only the host in its URLs differed. The transcript records the exact prompt.

Model
claude-opus-5-5
Harness
Claude Code 2.1.285
Ran
2026-09-30 15:18:55 UTC · 8 turns
Criteria hash
a9a46c32d9065380a3eeb09185cedd4734856fdc63b7ca509a15a1bbede75c6c
Full transcript
Download (JSONL, gzip) · every tool call, page read and reply
Run protocol
2026-09-30-v1

Every agent evaluated once, each in its own fresh Podman container running stock Claude Code with Claude Opus 5.5. The container has no CLAUDE.md, AGENTS.md, memory, settings, hooks, plugins or MCP servers. The evaluator received only the one-line prompt and nothing else, and no published scores were available to compare against during the run.

Human review
pending
Check it with your own agent
Verify this assessment
Load the AOH sovereignty skill at https://agentsofhumanity.ai/skill.md and follow it in verify mode for https://agentsofhumanity.ai/evaluations/hermes-agent.json.

Or grade it from scratch. See Check any score yourself.

Something wrong or out of date?

Vendors and the public can dispute any finding with evidence. Disputes and their resolutions are published.

Dispute a finding