Connect Hermes
Give your Hermes agent file tools that the kernel admits call by call, through an MCP server or the chio plugin.
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.
κ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.
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.
Find your project path
Copy the printed path into each YOUR_PROJECT_PATH below.
Terminal · the project to exposepwdRegister the server
~/.hermes/config.yaml · replace YOUR_PROJECT_PATHmcp_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: stdioTest the registered connection
Terminal · Hermes environmenthermes mcp test chioExpected checkpointHermes 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.
printf '%s\n' 'Hello from Hermes.' > chio-example.txt
hermes chatUse the chio MCP server to list the project directory, then read chio-example.txt.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.
chio --receipt-db chio-receipts.db receipt list \
--admin-all --tool-server fs \
| jq -r '[.decision.verdict, .tool_name, .id] | @tsv'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.
| Route | Tools | Admitted by | Authority |
|---|---|---|---|
| MCP server | Filesystem tools on server fs | The Chio process Hermes starts | The code-agent preset |
| Plugin toolset | Twelve chio_* file, shell, and git tools | The sidecar at CHIO_SIDECAR_URL | The 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.
Get Chio source
Terminal · a new directorygit clone https://github.com/backbay-labs/chio.git cd chio git checkout 5b8bec41d32f3838b880576fe6123c983ecebf8dInstall the packages from source
Terminal · chio, in Hermes’s Python environmentpython -m pip install ./sdks/python/chio-sdk-python \ ./sdks/python/chio-adapter-base \ ./sdks/python/chio-code-agent \ ./sdks/python/chio-hermesEnable 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 configplugins: enabled: - chioConfirm the plugin loads in Hermes
Configure the sidecar and capabilityTerminal · Hermes Python environmentpython -m pip show chio-hermes HERMES_PLUGINS_DEBUG=1 hermes chat -t chio,hermes-cliExpected checkpointpip 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.
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 fscapability 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.
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-cliUse chio_file_read to read chio-example.txt.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.