> This page is for NeMo Fabric, version v0.6.0.
> For other versions, use one of these documentation indexes:
> - Latest (v0.6.0) (default): https://docs.nvidia.com/nemo/fabric/latest/llms.txt
> - dev: https://docs.nvidia.com/nemo/fabric/dev/llms.txt
> - v0.6.0: https://docs.nvidia.com/nemo/fabric/v0.6.0/llms.txt
> - v0.5.0: https://docs.nvidia.com/nemo/fabric/v0.5.0/llms.txt
> - v0.4.0: https://docs.nvidia.com/nemo/fabric/v0.4.0/llms.txt
> - v0.3.0: https://docs.nvidia.com/nemo/fabric/v0.3.0/llms.txt
> - v0.2.0: https://docs.nvidia.com/nemo/fabric/v0.2.0/llms.txt
> - v0.1.1: https://docs.nvidia.com/nemo/fabric/v0.1.1/llms.txt
> - v0.1.0: https://docs.nvidia.com/nemo/fabric/v0.1.0/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/fabric/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/fabric/_mcp/server.

# Use the Hermes Agent Adapter

> Install and configure the NeMo Fabric harness integration for Hermes Agent.

The NVIDIA NeMo Fabric `nvidia.fabric.hermes` adapter runs Hermes Agent through
its Python SDK. The adapter maps normalized NeMo Fabric configuration into
Hermes Agent models, tools, skills, Model Context Protocol (MCP) servers,
sessions, and Relay telemetry.

## Install the Adapter

The adapter package supports Python 3.11 through 3.14. Use [Hermes Agent v0.22.5](https://github.com/NousResearch/hermes-agent/releases/tag/v0.22.5) with Python 3.14. This release includes dependency security fixes absent from v2026.9.24 and supports Relay telemetry and streaming. Hermes Agent 0.20 and later is not installable from PyPI. Follow the [Hermes Agent installation guide](https://hermes-agent.nousresearch.com/docs/installation) and select v0.22.5.

Install the NeMo Fabric runtime and bare Hermes adapter into the Python
environment that runs Hermes Agent:

```bash
pip install "nemo-fabric[hermes-agent]"
```

These packages do not install Hermes Agent. If a different environment runs
NeMo Fabric, install only the bare adapter in the Hermes Agent environment:

```bash
python -m pip install nemo-fabric-adapters-hermes
```

The adapter's `relay` and `full` extras install `nemo-relay>=0.10,<0.11`. Install Hermes Agent separately in the same environment. Keep that environment separate from applications that use Relay 0.11 for other NeMo Fabric adapters. The adapter reports a compatibility error at startup if Relay telemetry is enabled with an unsupported Hermes or Relay installation.

For local NeMo Fabric development, run the following command from the repository root. The recipe checks out Hermes Agent v0.22.5 at commit `bf0203a794a07aac3ff764972ab9087baa4e4f4e` and creates an isolated Python 3.14 environment with the adapter's `relay` extra. Hermes declares its Python package version as `0.0.0`; use the Git tag and commit to identify the release when reviewing scanner results.

```bash
just install-hermes-agent
export ADAPTER_PYTHON="$PWD/.venv-hermes/bin/python"
```

For separate environments, set `ADAPTER_PYTHON` in the runtime environment to
the adapter environment's Python interpreter. Use
matching NeMo Fabric release versions for the runtime and adapter package
unless a different pairing has been explicitly validated.

## Configure the Adapter

Select the Hermes Agent harness integration in `HarnessConfig`:

```python
from nemo_fabric import HarnessConfig

harness = HarnessConfig(adapter_id="nvidia.fabric.hermes")
```

Use normalized `FabricConfig` fields to configure the model, workspace, skills,
MCP servers, replacement system instructions, turn limit, and native tool
selectors, and telemetry. The adapter rejects `append` system instructions.

During run-plan resolution, NeMo Fabric Core validates the
`models.<role>.top_p` (from 0 through 1) and positive
`models.<role>.max_tokens` fields against the Hermes descriptor before
runtime startup. Hermes reads these prevalidated values from `AgentConfig`. A
model-level `max_tokens` overrides the harness-level default for the selected
model role.

The Hermes descriptor validates the following `harness.settings` fields:

| Setting             | Type                      | Default              | Description                                                                                                                                                                          |
| ------------------- | ------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `reasoning_config`  | object                    | `{"effort": "none"}` | Configures Hermes model reasoning. The closed object accepts an optional `enabled` boolean and an optional `effort` value of `none`, `minimal`, `low`, `medium`, `high`, or `xhigh`. |
| `plugins_enabled`   | array of nonempty strings | `[]`                 | Enables Hermes plugins by identifier. Relay telemetry uses the generated `plugins.toml`; do not list the removed `observability/nemo_relay` plugin.                                  |
| `save_trajectories` | boolean                   | `false`              | Enables Hermes-native JSONL conversation trajectory saving. This is separate from normalized NeMo Fabric telemetry.                                                                  |
| `max_tokens`        | positive integer          | `512`                | Limits the number of tokens in each Hermes model response.                                                                                                                           |
| `terminal_timeout`  | positive number           | `60`                 | Limits a Hermes terminal operation in seconds.                                                                                                                                       |

For example:

```python
from nemo_fabric import HarnessConfig

harness = HarnessConfig(
    adapter_id="nvidia.fabric.hermes",
    settings={
        "reasoning_config": {"enabled": True, "effort": "medium"},
        "plugins_enabled": ["disk-cleanup"],
        "save_trajectories": True,
        "max_tokens": 1024,
        "terminal_timeout": 90,
    },
)
```

Use `runtime.max_turns` to set the Hermes agent-loop budget. The adapter maps
that normalized field to `AIAgent.max_iterations`; `max_iterations` is not a
Hermes harness setting.

## Understand the Runtime Lifecycle

Each NeMo Fabric runtime creates one Hermes Agent `AIAgent` and one `SessionDB`.
Ordered invocations reuse those objects and the conversation history until the
runtime stops. The adapter finalizes and flushes Relay subscriber output after
each invocation so ATOF and ATIF artifacts are complete when it returns.

With a live Relay runtime, Hermes emits `compaction` when a tracked compaction
rewrites history or provider state. It emits `compaction.attempt` when the
attempt is blocked, skipped, fails, or aborts without a rewrite.

For the complete configuration and lifecycle reference, refer to the
[Hermes Agent adapter guide](https://github.com/NVIDIA/NeMo-Fabric/tree/v0.6.0/adapters/python/hermes).

## Runtime Health

`Fabric.check()` supports `live`, `active`, and `ready`. The adapter checks native agent and database ownership, the initialized invocation interface, and a fresh `get_activity_summary()` diagnostic response.

Refer to the [SDK health-check overview](/nemo/fabric/sdk/health-checks) for shared behavior and a comparison of native evidence across adapters.