Chio/Docs
LOGIN · JOIN

Connect Hermes

Give your Hermes agent file tools that the kernel admits call by call, through an MCP server or the chio plugin.

Guide chio@5f63e6e

On this page

Hermes keeps its model and its session. The file tools it reaches through Chio answer to the kernel: each call is admitted before the tool runs, and each decision is signed into a receipt in your project.

In Hermes's configuration, Chio is a stdio MCP server named chio that starts the filesystem server behind it under the code-agent preset. That route needs no plugin. The chio toolset plugin is the second route, admitted by a Chio sidecar.

Start
MCP edgeChoose an outcome.

κcapabilityσscopegguardsBbudget

Listing shows the tools the grant names

The edge answers tools/list with the tools the session’s grant covers. A listed tool carries no authority of its own: each tools/call is admitted by the kernel before the server runs. Wrap an MCP Server.

One Hermes tool call through the chio MCP server to the kernel and the filesystem server it launched. Hermes's built-in tools, output checks after dispatch, and host confinement are left out.Wrap an MCP Server

1. Register Chio as an MCP server in Hermes

Add a chio entry to ~/.hermes/config.yaml and merge it with the servers you already have. Replace each YOUR_PROJECT_PATH with the absolute path the first step prints.

Before you start

Hermes, Node.js with npx, and the Chio CLI. Use the absolute project path in the config below, and merge it with your existing MCP servers.

  1. Find your project path

    Copy the printed path into each YOUR_PROJECT_PATH below.

    Terminal · the project to expose
    pwd
  2. Register the server

    ~/.hermes/config.yaml · replace YOUR_PROJECT_PATH
    mcp_servers:
      chio:
        command:
          - chio
          - --receipt-db
          - "YOUR_PROJECT_PATH/chio-receipts.db"
          - --session-db
          - "YOUR_PROJECT_PATH/chio-session.db"
          - mcp
          - serve
          - --preset
          - code-agent
          - --server-id
          - fs
          - --
          - npx
          - -y
          - "@modelcontextprotocol/server-filesystem@2026.8.31"
          - "YOUR_PROJECT_PATH"
        transport: stdio
  3. Test the registered connection

    Terminal · Hermes environment
    hermes mcp test chio
    Expected checkpoint

    Hermes connects to the server and discovers the filesystem tools.

    Hermes reaches the filesystem tools through Chio. The kernel admits each call on that server and records its receipt in chio-receipts.db; Hermes’s built-in tools keep their own path.

The test lists six tools on server fs, the ones the preset grants: read_file, list_directory, search_files, write_file, edit_file, and create_directory. A listed tool runs only after the kernel admits the call Hermes makes to it.

2. List and read your project through the kernel

Write a small file into the project, then restart Hermes so it loads the saved configuration.

Terminal · your projectbash
printf '%s\n' 'Hello from Hermes.' > chio-example.txt
hermes chat
Hermes · chattext
Use the chio MCP server to list the project directory, then read chio-example.txt.
Returned content
Hello from Hermes.

You should see the names in the directory you configured, then the sentence you wrote. Both calls went through the kernel before the filesystem server ran them.

3. Find the listing and the read in chio-receipts.db

The kernel signed one receipt per decision into that database, beside your project files.

Terminal · your projectbash
chio --receipt-db chio-receipts.db receipt list \
  --admin-all --tool-server fs \
  | jq -r '[.decision.verdict, .tool_name, .id] | @tsv'
Output · illustrative ids
allow   list_directory   rcpt-01b4…2c71
allow   read_file        rcpt-01b4…3e08

You should see the listing and the read, each as allow with its receipt id. Pass an id to chio receipt explain, with the same database and --admin-all, to see the grant and the checks behind it.

Hermes reaches the kernel by one of two routes

The MCP server governs the filesystem tools Chio launches. The plugin adds its own governed toolset, admitted by a Chio sidecar under a capability you mint.

RouteToolsAdmitted byAuthority
MCP serverFilesystem tools on server fsThe Chio process Hermes startsThe code-agent preset
Plugin toolsetTwelve chio_* file, shell, and git toolsThe sidecar at CHIO_SIDECAR_URLThe capability in CHIO_CAPABILITY_ID

Either route governs the tools it serves. Hermes's built-in tools, and any tool you select outside the route, keep their own path.

Add the chio toolset as a Hermes plugin

The chio-hermes plugin registers chio_file_read, chio_file_write, chio_file_edit, chio_file_list, chio_file_search, chio_shell_run, and six git tools: chio_git_status, chio_git_diff, chio_git_log, chio_git_add, chio_git_commit, and chio_git_run. Install it into Hermes's own Python environment from the plugin source.

Before you start

Hermes with Python 3.11+ and Git. Activate Hermes’s own Python environment before installing, because Hermes loads plugins only from that environment.

  1. Get Chio source

    Terminal · a new directory
    git clone https://github.com/backbay-labs/chio.git
    cd chio
    git checkout 5b8bec41d32f3838b880576fe6123c983ecebf8d
  2. Install the packages from source

    Terminal · chio, in Hermes’s Python environment
    python -m pip install ./sdks/python/chio-sdk-python \
      ./sdks/python/chio-adapter-base \
      ./sdks/python/chio-code-agent \
      ./sdks/python/chio-hermes
  3. Enable the entry-point plugin

    Keep your other enabled plugins. Before launching Hermes, set CHIO_SIDECAR_URL to your sidecar and CHIO_CAPABILITY_ID to the capability that hermes chio issue prints.

    ~/.hermes/config.yaml · merge into your existing config
    plugins:
      enabled:
        - chio
  4. Confirm the plugin loads in Hermes

    Terminal · Hermes Python environment
    python -m pip show chio-hermes
    HERMES_PLUGINS_DEBUG=1 hermes chat -t chio,hermes-cli
    Configure the sidecar and capability
    Expected checkpoint

    pip shows chio-hermes, and the Hermes debug output reports loading the chio plugin.

    Hermes has loaded the chio toolset. Each chio_file_*, chio_git_* and chio_shell_run call goes to the sidecar under CHIO_CAPABILITY_ID, which admits or refuses it and records a receipt.

Mint a capability, then read a file through the sidecar

Point the plugin at your Chio sidecar and mint a capability for the fs tool server. The subject is the agent's Ed25519 public key, in hex; the capability lasts 3,600 seconds unless you pass --ttl.

Terminal · Hermes Python environmentbash
export CHIO_SIDECAR_URL=http://127.0.0.1:9090
AGENT_KEY=9f2c…71ab   # the agent's Ed25519 public key, in hex
hermes chio issue --subject "$AGENT_KEY" --tool-server fs
Output · illustrative ids
capability issued: cap-01b7…4d2a
  subject:       9f2c…71ab
  tool servers:  fs
  ttl seconds:   3600

  export CHIO_CAPABILITY_ID=cap-01b7…4d2a

Set the printed capability, the workspace root, and a file to read in the same environment that starts Hermes. Then open a chat with the chio toolset enabled.

Terminal · your project, Hermes Python environment activebash
export CHIO_CAPABILITY_ID=cap-01b7…4d2a
export CHIO_WORKSPACE_ROOT="$PWD"
printf '%s\n' 'Hello from Hermes.' > chio-example.txt
HERMES_PLUGINS_DEBUG=1 hermes chat -t chio,hermes-cli
Hermes · chattext
Use chio_file_read to read chio-example.txt.
Returned content
Hello from Hermes.

You should see the file's sentence. The sidecar admitted the chio_file_read call under CHIO_CAPABILITY_ID and recorded its receipt. A call after the capability lifetime returns chio_capability_expired; mint a new one with hermes chio issue. A call with no capability set returns chio_not_configured.

If Hermes does not load the plugin

Check that python -m pip show chio-hermes succeeds in Hermes's environment, then confirm that plugins.enabled includes chio in the active profile. The package uses Python entry-point discovery, so the debug output from HERMES_PLUGINS_DEBUG=1 shows whether it loaded. See Hermes plugin configuration for its discovery controls.

Next: query and verify what Hermes did