guide · computers

Hermes Agent CLI Tools: List and What Each One Does

The Hermes Agent CLI surface today: chat, config, sessions list --source, cron, skills, plugins, memory, fact_store, curator. The --toolsets flag for per-call scoped tool loading.

July 14, 2026 · By Alastair Fraser

...

The CLI surface in one sentence

Hermes Agent’s CLI today: chat, config, sessions, cron, skills, plugins, memory, fact_store, curator. Each is one subcommand with subcommand-specific flags. The --toolsets flag scopes the loaded tools for any single call.

The full command tree starts at hermes --help and goes two levels deep. Group the commands by their role.

The chat subcommand

hermes chat is the primary agent invocation. Modes:

  • hermes chat -q "Reply with OK" — single-shot query. Useful for cron and tooling.
  • hermes chat (no -q) — interactive REPL. Useful for exploration.
  • hermes chat --provider <name> — pick a specific provider. Useful when testing a model switch.
  • hermes chat --model <name> — pick a specific model within the chosen provider.
  • hermes chat --toolsets web,terminal — load only the listed toolsets; the rest stay unloaded. Smaller model context, faster response.
  • hermes chat --resume <session_id> — continue a prior session.

Three flag patterns worth memorizing:

  1. -q "..." — query mode. The most useful for cron and tests.
  2. --toolsets ... — tool loading is per-call. Default loads every toolset.
  3. --toolsets="" — load nothing; the agent is just the bare LLM with no tools.

The config subcommand

hermes config reads and writes ~/.hermes/config.yaml. Modes:

  • hermes config show — print the active config.
  • hermes config show --provider <name> — print one provider’s config (api_key masked).
  • hermes config set <key> <value> — set a single config key. Persists.
  • hermes config get <key> — read a single key.

The config keys are dotted paths: provider.openai.api_key, provider.anthropic.default_model, default_provider. Setting a key requires the right section to exist; if it doesn’t, hermes config set errors.

The sessions subcommand

hermes sessions reads ~/.hermes/sessions.sqlite (or analogous). Modes:

  • hermes sessions list --source <backend> — list sessions from one backend (default: local).
  • hermes sessions search <query> — full-text search across session content.
  • hermes sessions resume <session_id> — resume a prior session.
  • hermes sessions continue <session_id> — alias for resume; matches the --continue flag on chat.

The --source flag is mandatory for list (without it, you get the union of all backends which can be huge).

The cron subcommand

hermes cron manages scheduled jobs. Modes:

  • hermes cron list — list jobs with their schedules.
  • hermes cron create --prompt "..." --schedule "30 11 * * *" — create a new job.
  • hermes cron pause <job_id> — pause a job.
  • hermes cron resume <job_id> — resume a paused job.
  • hermes cron update <job_id> --prompt "..." — change the prompt.
  • hermes cron run <job_id> — fire the job immediately (single-shot).
  • hermes cron remove <job_id> — delete.

The create and update modes take a self-contained prompt. The cron-run session is fresh — no memory, no skills, no session history. The prompt must include all context the job needs.

The skills subcommand

hermes skills lists and inspects skills. Modes:

  • hermes skills list — all installed skills.
  • hermes skills browse — interactive skill browser (prompts for filter).
  • hermes skills view <name> — show the SKILL.md frontmatter and content.
  • hermes skills create — start a new skill (writes a SKILL.md stub).

The view and create modes operate on ~/.hermes/profiles/<active>/skills/.

The plugins subcommand

hermes plugins lists and inspects plugins. Modes:

  • hermes plugins list — installed plugins.
  • hermes plugins load <name> — re-load a plugin at runtime.
  • hermes plugins unload <name> — unload.

Plugins live at /opt/hermes/plugins/<name>/ and use the register(ctx) entry-point. The plugins listing includes the version, the entry point, and whether it’s currently active.

The memory subcommand

hermes memory reads and writes the persistent memory file. Modes:

  • hermes memory list — show current memory entries.
  • hermes memory add "<text>" — add an entry. Goes through Johnny5 routing gate.
  • hermes memory remove <id> — remove.
  • hermes memory search "<query>" — search across memory entries.

The add mode is the Johnny5 gate: an entry must be a stable, cross-cutting fact (not a per-task note, not an in-progress todo).

The fact_store subcommand

hermes fact_store reads and writes the deeper-structured memory. Modes:

  • hermes fact_store add --category <cat> --content "..." — store a fact.
  • hermes fact_store search "<query>" — search facts.
  • hermes fact_store probe <entity> — all facts about an entity.
  • hermes fact_store reason "<entities>" — compositional reasoning across entities.
  • hermes fact_store contradict — find conflicting facts.
  • hermes fact_store list — list all facts.

fact_store is for facts that need composition across entities (e.g. user + project + tool). memory is for facts that are always-loaded in any session.

The curator subcommand

hermes curator is the drift detector. Modes:

  • hermes curator list — show installed skills + recent diffs.
  • hermes curator pin <name> — pin a skill to prevent deletion.
  • hermes curator unpin <name> — unpin.
  • hermes curator absorb <from> --into <to> — merge one skill into another.
  • hermes curator prune — delete unpinned skills older than threshold.

The curator is the operator’s tool for the weekly skill sweep. It doesn’t auto-prune; it surfaces candidates.

The cross-cutting flags

Three flags appear across multiple subcommands:

  1. --toolsets ... — scope tool loading. Default loads everything.
  2. --provider <name> — pick the provider for the call. Most subcommands default to the active config’s default_provider.
  3. --json — emit JSON instead of human-readable text. Useful for piping.

What NOT to do

  • Don’t run hermes with no subcommand hoping for an interactive default. Each subcommand is its own mode.
  • Don’t --toolsets "" without understanding the trade-off — agents without tools can’t act on the world.
  • Don’t hermes memory add per-session preferences. The Johnny5 gate will reject; if you bypass the gate, the entry rots.
  • Don’t hermes cron remove while a job is running. Pause first; the scheduler respects pause on the next tick.

Sources

Last verified: 2026-07-14 against Hermes v0.18.2 (2026.7.7.2). CLI surface is stable across minor versions.

Sources

#hermes#cli#tools#surface#operator

Submit a take

Have a different read on this? Drop a comment below — your email isn't published, and I read every one. Nothing leaves the site until I approve it.

Your email address will not be published. Required fields are marked.