Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
8809353
Update MCP version, drop the mcp extra from hermes-agent this only re…
dagardner-nv Aug 14, 2026
52838a4
Update test
dagardner-nv Aug 14, 2026
ccc64eb
Remove hermes-agent as a pip dependency since the project no longer d…
dagardner-nv Aug 14, 2026
e8b1758
Add just recipe for installing hermes-agent from source
dagardner-nv Aug 14, 2026
72d620b
First pass at installing hermes-agent from source
dagardner-nv Aug 14, 2026
1631417
Restore the hermes-agent dep extra
dagardner-nv Aug 14, 2026
fe79bb0
Update documentation and tests
dagardner-nv Aug 14, 2026
55d8e07
Merge branch 'main' of github.com:NVIDIA/NeMo-Fabric into david-rm-ha…
dagardner-nv Aug 14, 2026
619eb6e
Update tests
dagardner-nv Aug 14, 2026
44f5d61
Install hermes-agent from source in notebooks
dagardner-nv Aug 14, 2026
595ac19
Install hermes-agent with just
dagardner-nv Aug 14, 2026
2626161
Install hermes-agent first
dagardner-nv Aug 14, 2026
4886499
Cleanup hermes-agent install
dagardner-nv Aug 14, 2026
cad06ea
Create venv first
dagardner-nv Aug 14, 2026
211382b
Work-around python 3.14
dagardner-nv Aug 14, 2026
536209c
exclude hermes-agent for 3.14
dagardner-nv Aug 14, 2026
177f1c3
Add --set no_uv true
dagardner-nv Aug 14, 2026
39896e4
Update docs
dagardner-nv Aug 14, 2026
72bdc00
Fix docs in ci
dagardner-nv Aug 14, 2026
75b3c47
Fix working dir
dagardner-nv Aug 14, 2026
7175468
Merge branch 'main' of github.com:NVIDIA/NeMo-Fabric into david-rm-ha…
dagardner-nv Aug 14, 2026
faac0a4
Fix check stage
dagardner-nv Aug 14, 2026
05dbd9f
Cleanup table
dagardner-nv Aug 14, 2026
94c3f34
Cleanup docs
dagardner-nv Aug 14, 2026
131b35a
Cleanup docs
dagardner-nv Aug 14, 2026
e2a3c8d
Cleanup
dagardner-nv Aug 14, 2026
b34b4c0
Fix packages
dagardner-nv Aug 14, 2026
76f4310
Update tests
dagardner-nv Aug 14, 2026
9883ae3
Update install instructions
dagardner-nv Aug 14, 2026
5668131
Cleanup install instructions
dagardner-nv Aug 14, 2026
1a4e2cc
Fix wheels
dagardner-nv Aug 14, 2026
22b68a5
Fix test
dagardner-nv Aug 14, 2026
adc8904
Update gitlab ci
dagardner-nv Aug 14, 2026
9f3451c
Fix source install docs
dagardner-nv Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/ci_check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@ jobs:
path: ~/.cache/pre-commit
key: fabric-pre-commit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml', 'uv.lock') }}

- name: Create virtual environment
run: uv venv --python "${UV_PYTHON:-${{ 3.12 }}}" .venv

- name: Install Hermes Agent
run: just install-hermes-agent

- name: Install pre-commit
run: uv sync --frozen --no-default-groups --group dev --no-install-project

Expand Down
19 changes: 16 additions & 3 deletions .github/workflows/ci_python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,18 +89,25 @@ jobs:
with:
shared-key: fabric-rust-${{ runner.os }}-${{ runner.arch }}

- name: Create virtual environment
run: |
uv venv --python "${UV_PYTHON:-${{ matrix.python-version }}}" .venv

- name: Install Hermes Agent
if: ${{ matrix.python-version != '3.14' }}
run: just install-hermes-agent
Comment thread
coderabbitai[bot] marked this conversation as resolved.

# Exercise the supported root adapter and harness compositions. The
# adapter-tests group also keeps local test dependencies independently
# installable for leaf adapter development.
- name: Build SDK with native extension
run: |
uv venv --python "${UV_PYTHON:-${{ matrix.python-version }}}" .venv
uv sync --no-default-groups --group adapter-tests --group test --extra claude --extra codex --extra deepagents --extra mini-swe-agent ${{ matrix.python-version != '3.11' && '--extra harbor' || '' }} ${{ matrix.python-version != '3.14' && '--extra hermes-agent' || '' }} --extra relay
uv sync --no-default-groups --group adapter-tests --group test --extra claude --extra codex --extra deepagents --extra mini-swe-agent ${{ matrix.python-version != '3.11' && '--extra harbor' || '' }} ${{ matrix.python-version != '3.14' && '--extra hermes-agent' || '' }} --extra relay ${{ matrix.python-version == '3.14' && '--frozen --no-sources-package hermes-agent' || '' }}

- name: Run pytest
run: |
set -euo pipefail
just test-python
just --set no_uv true test-python

build-wheels:
name: Build wheels (${{ matrix.platform }})
Expand Down Expand Up @@ -147,6 +154,12 @@ jobs:
enable-cache: true
cache-dependency-glob: uv.lock

- name: Create virtual environment
run: uv venv --python "${UV_PYTHON:-${{ 3.12 }}}" .venv

- name: Install Hermes Agent
run: just install-hermes-agent

- name: Set version from tag
if: ${{ (inputs.ref_type || github.ref_type) == 'tag' }}
env:
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/fern-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,14 @@ jobs:
cache: npm
cache-dependency-path: source-checkout/docs/package-lock.json

- name: Create virtual environment
working-directory: source-checkout
run: uv venv --python "${UV_PYTHON:-${{ 3.12 }}}" .venv

- name: Install Hermes Agent
working-directory: source-checkout
run: just install-hermes-agent

- name: Generate and validate source docs
working-directory: source-checkout
env:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
/target/
/.tmp/
/.venv/
/external/hermes-agent/
/.env
/.env.*
!.env.example
Expand Down
4 changes: 3 additions & 1 deletion .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ publish:artifactory:wheels:
- job: collect:github-artifacts
artifacts: true
before_script:
- uv sync --locked --no-install-project --no-default-groups --group dev
- uv sync --frozen --no-install-project --no-default-groups --group dev
script:
- |
set -eu
Expand Down Expand Up @@ -248,6 +248,8 @@ publish:artifactory:cargo:
exit 1
fi

uv venv --python "${UV_PYTHON:-${NEMO_FABRIC_CI_PYTHON_VERSION}}" .venv
just install-hermes-agent
just set-version "$version"

cargo_home="${CARGO_HOME:-${HOME}/.cargo}"
Expand Down
36 changes: 3 additions & 33 deletions ATTRIBUTIONS-Python.md
Original file line number Diff line number Diff line change
Expand Up @@ -1753,7 +1753,7 @@ The above copyright notice and this permission notice shall be included in all c
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```

## cryptography (49.0.0)
## cryptography (50.0.0)

### Licenses
License: `Apache-2.0 OR BSD-3-Clause`
Expand Down Expand Up @@ -3954,36 +3954,6 @@ Apache License
limitations under the License.
```

## hermes-agent (0.19.0)

### Licenses
License: `MIT`

- `LICENSE`:
```
MIT License

Copyright (c) 2025 Nous Research

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```

## hf-xet (1.5.1)

### Licenses
Expand Down Expand Up @@ -7752,7 +7722,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```

## portalocker (3.2.0)
## portalocker (4.1.0)

### Licenses
License: `BSD-3-Clause`
Expand Down Expand Up @@ -11364,7 +11334,7 @@ Apache License
limitations under the License.
```

## pytz (2026.2)
## pytz (2026.3.post1)

### Licenses
License: `MIT`
Expand Down
16 changes: 9 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ cd NeMo-Fabric

uv venv --seed .venv --python 3.13
source .venv/bin/activate
just install-hermes-agent
uv sync --all-groups --all-extras
just no_uv=true build-all
```
Expand All @@ -70,17 +71,18 @@ packages into a virtual environment with:
uv pip install --find-links ./dist nemo-fabric
```

Adapters are distributed as optional extras. For example, install the Hermes
Agent adapter and harness with:
Hermes Agent 0.20 and later is not installable from PyPI. For local development,
check out the pinned Hermes source and synchronize it into the project
environment with:

```bash
uv pip install --find-links ./dist "nemo-fabric[hermes-agent]"
just install-hermes-agent
```

To install only the Hermes adapter and its supported harness, use
`nemo-fabric-adapters-hermes[harness]`. Install
`nemo-fabric-adapters-hermes` without an extra when the environment already
manages a compatible Hermes Agent installation.
The recipe checks out Hermes Agent under `external/hermes-agent` and installs
it as the editable source declared in `pyproject.toml`. End users should follow
the [Hermes Agent installation guide](https://hermes-agent.nousresearch.com/docs/installation)
and install `nemo-fabric-adapters-hermes` without a harness extra.

Refer to the [installation guide](docs/getting-started/install.mdx) for the
complete list of adapters and installation options.
Expand Down
60 changes: 33 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,17 @@ expressions install the components shown in each column:
| --- | --- | --- | --- |
| [Claude Code](docs/integrations/harness/claude.mdx) | `nemo-fabric[claude]` | `nemo-fabric-adapters-claude[harness]` | `nemo-fabric-adapters-claude` |
| [Codex](docs/integrations/harness/codex.mdx) | `nemo-fabric[codex]` | `nemo-fabric-adapters-codex[harness]` | `nemo-fabric-adapters-codex` |
| [Hermes Agent](docs/integrations/harness/hermes.mdx) | `nemo-fabric[hermes-agent]` | `nemo-fabric-adapters-hermes[harness]` | `nemo-fabric-adapters-hermes` |
| [Hermes Agent](docs/integrations/harness/hermes.mdx) | Install Hermes Agent separately, then install `nemo-fabric[hermes-agent]` | Install Hermes Agent separately, then install `nemo-fabric-adapters-hermes` | `nemo-fabric-adapters-hermes` |
| [LangChain Deep Agents](docs/integrations/harness/deepagents.mdx) | `nemo-fabric[deepagents]` | `nemo-fabric-adapters-deepagents[harness]` | `nemo-fabric-adapters-deepagents` |
| [mini-SWE-agent](docs/integrations/harness/mini-swe-agent.mdx) | `nemo-fabric[mini-swe-agent]` | `nemo-fabric-adapters-mini-swe-agent[harness]` | `nemo-fabric-adapters-mini-swe-agent` |

The `nemo-fabric` package always installs the runtime, and each root harness
extra adds the corresponding adapter and supported harness. Use the
adapter-package forms for split environments or environments that already
manage the harness. For `harness`, `full`, and Relay behavior, refer to the
The `nemo-fabric` package always installs the runtime. Package-installable
harnesses provide root extras that add the corresponding adapter and supported
harness. Hermes Agent 0.20 and later is not available from PyPI; install it by
following the [Hermes Agent installation guide](https://hermes-agent.nousresearch.com/docs/installation),
then install the bare Hermes adapter package. Use the adapter-package forms for
Comment thread
dagardner-nv marked this conversation as resolved.
split environments or environments that already manage the harness. For
`harness`, `full`, and Relay behavior, refer to the
[installation guide](docs/getting-started/install.mdx).

Capabilities vary by harness. Review the compatibility matrix and use plan()
Expand All @@ -71,16 +74,20 @@ Agent in one Python environment.

### Install NeMo Fabric and Hermes Agent

Hermes Agent supports Python 3.11 through 3.13. With a supported Python
version, create and activate a virtual environment, then install the required
packages:
Hermes Agent supports Python 3.11 through 3.13. Hermes Agent 0.20 and later is
not installable from PyPI. Install it with a supported method from the
[Hermes Agent installation guide](https://hermes-agent.nousresearch.com/docs/installation).
Then install NeMo Fabric and the Hermes adapter into the Python environment
that runs Hermes Agent:

```bash
python -m venv .venv
source .venv/bin/activate
pip install "nemo-fabric[hermes-agent]"
```

For local development from this repository, run `just install-hermes-agent`
instead. The recipe checks out the pinned Hermes Agent source and synchronizes
it into the project environment.

### Set the API Key

Create an API key in the [NVIDIA API Catalog](https://build.nvidia.com/), then
Expand Down Expand Up @@ -142,7 +149,8 @@ available notebooks.

This is the simplest deployment. The `nemo-fabric` package, selected adapter,
and supported harness share one Python environment. The quick start above uses
this model with `nemo-fabric[hermes-agent]`.
this model with Hermes Agent installed separately from `nemo-fabric` and
`nemo-fabric-adapters-hermes`.

### Scenario 2: Isolated Sandbox for Task Execution

Expand All @@ -152,10 +160,11 @@ selected adapter, and the harness inside an isolated task environment such as a
Docker container or Daytona sandbox. Adapter discovery and task-path resolution
occur inside that sandbox.

Install `nemo-fabric[harbor]==0.2.0` in the host environment. Install a complete
harness composition such as `nemo-fabric[claude]==0.2.0` or
`nemo-fabric[hermes-agent,relay]==0.2.0` in the task environment. For Claude or
Codex Relay streaming, also provision the external NeMo Relay CLI in the task
Install `nemo-fabric[harbor]==0.2.0` in the host environment. For a Hermes
Agent task, use a task image that installs Hermes Agent according to its
installation guide, then install `nemo-fabric`, `nemo-fabric-adapters-hermes`,
and optionally `nemo-fabric[relay]` in that environment. For Claude or Codex
Relay streaming, also provision the external NeMo Relay CLI in the task
environment. Refer to the
[Harbor execution model](examples/harbor/README.md#execution-model) for details.

Expand All @@ -171,30 +180,27 @@ Create an environment for the NeMo Fabric runtime:
```bash
python -m venv .venv-fabric
source .venv-fabric/bin/activate
pip install nemo-fabric==0.2.0
```

Create another environment for the adapter and harness. For example, install
the Hermes Agent integration:
Install Hermes Agent by following its
[installation guide](https://hermes-agent.nousresearch.com/docs/installation).
Then install the Hermes adapter into the Hermes-managed Python environment:

```bash
python -m venv .venv-hermes
source .venv-hermes/bin/activate
pip install "nemo-fabric-adapters-hermes[harness]==0.2.0"
pip install "nemo-fabric[hermes-agent]"==0.2.0
```

The adapter package keeps this environment independent from the
`nemo-fabric` distribution. Its `harness` extra installs the compatible Hermes
Agent dependency alongside the adapter. Use matching NeMo Fabric release
versions for the runtime and adapter package unless a different pairing has
been explicitly validated.
The adapter package keeps this environment independent from the `nemo-fabric`
distribution and does not install Hermes Agent. Use matching NeMo Fabric
release versions for the runtime and adapter package unless a different
pairing has been explicitly validated.

Run NeMo Fabric from its environment and set `ADAPTER_PYTHON` to the interpreter
that contains the adapter and harness:

```bash
source .venv-fabric/bin/activate
export ADAPTER_PYTHON="$PWD/.venv-hermes/bin/python"
export ADAPTER_PYTHON="${HERMES_HOME:-$HOME/.hermes}/hermes-agent/venv/bin/python"
Comment thread
dagardner-nv marked this conversation as resolved.
```

For package options and platform-specific instructions, refer to the
Expand Down
29 changes: 20 additions & 9 deletions adapters/hermes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,32 @@ This adapter runs Hermes Agent through its Python SDK.

## Install

Hermes Agent and this adapter require Python 3.11 through 3.13. The following
table shows which components each installation provides:
Hermes Agent and this adapter require Python 3.11 through 3.13. Hermes Agent
0.20 and later is not installable from PyPI. Install Hermes Agent by following
the [Hermes Agent installation guide](https://hermes-agent.nousresearch.com/docs/installation),
then install the NeMo Fabric packages into the Python environment that runs
Hermes Agent.

The following table shows which NeMo Fabric components each package expression
provides. None of these expressions installs Hermes Agent:

| Installation | Runtime | Adapter | Harness | NeMo Relay Python Package |
| --- | --- | --- | --- | --- |
| `pip install "nemo-fabric[hermes-agent]"` | Yes | Yes | Yes | No |
| `pip install "nemo-fabric[hermes-agent,relay]"` | Yes | Yes | Yes | Yes |
| `pip install "nemo-fabric-adapters-hermes[harness]"` | No | Yes | Yes | No |
| `pip install "nemo-fabric-adapters-hermes[full]"` | No | Yes | Yes | Yes |
| `pip install nemo-fabric nemo-fabric-adapters-hermes` | Yes | Yes | No | No |
| `pip install "nemo-fabric[relay]" nemo-fabric-adapters-hermes` | Yes | Yes | No | Yes |
| `pip install "nemo-fabric-adapters-hermes[full]"` | No | Yes | No | Yes |
| `pip install "nemo-fabric-adapters-hermes[relay]"` | No | Yes | No | Yes |
| `pip install nemo-fabric-adapters-hermes` | No | Yes | No | No |

For an environment-managed harness, use `hermes-agent>=0.17.0`. For split
runtime and adapter environments, configure `ADAPTER_PYTHON` and use matching
NeMo Fabric release versions. Refer to the
For local development from this repository, check out and install the pinned
Hermes Agent source into the project environment:

```bash
just install-hermes-agent
```

For split runtime and adapter environments, configure `ADAPTER_PYTHON` and use
matching NeMo Fabric release versions. Refer to the
[installation guide](https://docs.nvidia.com/nemo/fabric/getting-started/install#install-an-adapter-and-harness-without-the-runtime).

Relay is optional for ordinary runs. Relay telemetry and
Expand Down
16 changes: 11 additions & 5 deletions adapters/hermes/pypi.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,20 @@ SPDX-License-Identifier: Apache-2.0
## Install

Hermes Agent and this adapter require Python versions 3.11 through 3.13.
Installation can be performed using the `nemo-fabric` meta package with the `hermes-agent` extra, or by installing the adapter and harness packages separately. The following table shows which components each installation provides:
Hermes Agent 0.20 and later is not installable from PyPI. Install Hermes Agent
by following the
[Hermes Agent installation guide](https://hermes-agent.nousresearch.com/docs/installation),
then install the NeMo Fabric packages into the Python environment that runs
Hermes Agent.

The following table shows which NeMo Fabric components each package expression
provides. None of these expressions installs Hermes Agent:

| Installation | Runtime | Adapter | Harness | NeMo Relay Python Package |
| --- | --- | --- | --- | --- |
| `pip install "nemo-fabric[hermes-agent]"` | Yes | Yes | Yes | No |
| `pip install "nemo-fabric[hermes-agent,relay]"` | Yes | Yes | Yes | Yes |
| `pip install "nemo-fabric-adapters-hermes[harness]"` | No | Yes | Yes | No |
| `pip install "nemo-fabric-adapters-hermes[full]"` | No | Yes | Yes | Yes |
| `pip install nemo-fabric nemo-fabric-adapters-hermes` | Yes | Yes | No | No |
| `pip install "nemo-fabric[relay]" nemo-fabric-adapters-hermes` | Yes | Yes | No | Yes |
| `pip install "nemo-fabric-adapters-hermes[full]"` | No | Yes | No | Yes |
| `pip install "nemo-fabric-adapters-hermes[relay]"` | No | Yes | No | Yes |
| `pip install nemo-fabric-adapters-hermes` | No | Yes | No | No |

Expand Down
5 changes: 1 addition & 4 deletions adapters/hermes/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,11 @@ dependencies = [
]

[project.optional-dependencies]
harness = [
"hermes-agent>=0.19.0; python_version < '3.14'",
]

relay = [
"nemo-relay>=0.7.2,<0.8",
]
full = [
"hermes-agent>=0.19.0; python_version < '3.14'",
"nemo-relay>=0.7.2,<0.8",
]

Expand Down
Loading
Loading