Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
e8353bf
Document installing the nemo-relay CLI tool
dagardner-nv Jul 20, 2026
6d751ad
Fix docs url
dagardner-nv Jul 20, 2026
6319666
Refer to the nemo-relay CLI install doc for the adapters that need it…
dagardner-nv Jul 20, 2026
83096a2
Rename sections
dagardner-nv Jul 20, 2026
ef94f33
Guide the user towards the notebooks, add Google Colab link
dagardner-nv Jul 20, 2026
b6fa5d9
Guide the user to the SDK Guide and the other examples from the noteb…
dagardner-nv Jul 20, 2026
5801f92
Guide the user to the examples after the SDK doc
dagardner-nv Jul 20, 2026
0c8d708
Remove YAML specific references from the Code Concepts section
dagardner-nv Jul 20, 2026
c1e84a1
Always refer to Hermes Agent as Hermes Agent not just 'Hermes'
dagardner-nv Jul 20, 2026
a7b3840
The Codex adapter doesn't have SDK in the name
dagardner-nv Jul 20, 2026
6351c68
Formatting
dagardner-nv Jul 20, 2026
edc9588
Fix anchor tag
dagardner-nv Jul 20, 2026
e9e3576
Formatting
dagardner-nv Jul 20, 2026
f3d271e
Merge branch 'main' of github.com:NVIDIA/NeMo-Fabric into david-more-…
dagardner-nv Jul 20, 2026
1803817
NeMo Fabric, not Fabric
dagardner-nv Jul 21, 2026
d549136
Add a code rabbit check for the product name
dagardner-nv Jul 21, 2026
0158c68
NeMo Fabric not 'Fabric'
dagardner-nv Jul 21, 2026
83545f6
Clean-up
dagardner-nv Jul 21, 2026
3c9dd77
Product naming
dagardner-nv Jul 21, 2026
2db34ea
Product naming
dagardner-nv Jul 21, 2026
bcfc827
Slim down sentence about adapter packages
dagardner-nv Jul 21, 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
2 changes: 1 addition & 1 deletion .agents/skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ This table lists the maintainer skills in this set and what each covers.
| [`contribute-docs`](contribute-docs/SKILL.md) | Change documentation or examples in step with public behavior. |
| [`review-doc-style`](review-doc-style/SKILL.md) | Review documentation and public text for NVIDIA technical-writing style. |
| [`validate-change`](validate-change/SKILL.md) | Choose and run the right validation matrix for a change. |
| [`python-tests`](python-tests/SKILL.md) | Write Python tests for Fabric. |
| [`python-tests`](python-tests/SKILL.md) | Write Python tests for NeMo Fabric. |
| [`maintain-ci`](maintain-ci/SKILL.md) | Maintain GitHub Actions workflows with pinned actions and local validation. |
| [`maintain-packaging`](maintain-packaging/SKILL.md) | Maintain package metadata, native artifacts, lockfiles, and release surfaces. |
| [`update-project-version`](update-project-version/SKILL.md) | Bump and synchronize release versions across packaging. |
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/python-tests/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: python-tests
description: Python tests for Fabric; use this when writing tests
description: Python tests for NeMo Fabric; use this when writing tests
author: NVIDIA Corporation and Affiliates
license: Apache-2.0
---
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/small-fix/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: small-fix
description: Make a small, reviewable NeMo Fabric bug fix without widening scope unnecessarily. Use for narrowly scoped bug fixes or behavior corrections in Fabric.
description: Make a small, reviewable NeMo Fabric bug fix without widening scope unnecessarily. Use for narrowly scoped bug fixes or behavior corrections in NeMo Fabric.
author: NVIDIA Corporation and Affiliates
license: Apache-2.0
---
Expand Down
2 changes: 1 addition & 1 deletion .agents/skills/update-project-version/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: update-project-version
description: Update the NeMo Fabric release version across Cargo, setuptools package metadata, internal Python dependency pins, integration metadata, and lockfiles. Use when bumping, synchronizing, or auditing Fabric package versions for a release.
description: Update the NeMo Fabric release version across Cargo, setuptools package metadata, internal Python dependency pins, integration metadata, and lockfiles. Use when bumping, synchronizing, or auditing NeMo Fabric package versions for a release.
author: NVIDIA Corporation and Affiliates
license: Apache-2.0
---
Expand Down
5 changes: 4 additions & 1 deletion .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,13 @@ reviews:
Tests should cover the behavior promised by the changed API surface, including error paths, lifecycle cleanup, and SDK/native parity where relevant.
- path: "{adapters/**,examples/**}"
instructions: |
Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public Fabric contracts.
Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.
- path: "{docs/**,README.md,AGENTS.md}"
instructions: |
Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
- path: "{*.md,**/*.md,**/*.mdx,**/*.ipynb}"
instructions: |
Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercase `fabric` CLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
- path: "**/SKILL.md"
instructions: |
Do not flag SKILL.md files for missing SPDX headers. Skill entrypoints intentionally start with YAML frontmatter instead.
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci_python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ jobs:
shared-key: fabric-rust

# PyYAML is not a project dependency, but test_hermes_config_mapping
# imports it to read Hermes config fixtures, so install it for the tests.
# imports it to read Hermes Agent config fixtures, so install it for the tests.
- name: Build SDK with native extension
run: |
uv venv --python ${{ matrix.python-version }} .venv
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ just wheels
uv pip install --find-links dist nemo-fabric
```

Adapters are distributed as optional extras. For example, install the Hermes adapter with:
Adapters are distributed as optional extras. For example, install the Hermes Agent adapter with:

```bash
uv pip install --find-links dist "nemo-fabric[adapters-hermes]"
Expand Down Expand Up @@ -251,7 +251,7 @@ Examples:
```text
feat: add typed runtime diagnostics
fix: preserve adapter errors in run results
docs: clarify Hermes adapter installation
docs: clarify Hermes Agent adapter installation
test: cover concurrent Python runtime invocations
```

Expand Down
59 changes: 33 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ SPDX-License-Identifier: Apache-2.0

# NVIDIA NeMo Fabric

Fabric is a runtime execution layer for agents. It turns multiple agent
NeMo Fabric is a runtime execution layer for agents. It turns multiple agent
harnesses into one configurable, observable lifecycle surface.

<p align="center">
Expand All @@ -17,7 +17,7 @@ harnesses into one configurable, observable lifecycle surface.
NeMo Fabric standardizes how applications configure, launch, invoke, and collect
artifacts from agent harnesses.

Fabric provides:
NeMo Fabric provides:

- a versioned, typed `FabricConfig` contract constructed through the SDK;
- ordinary Python composition for harness and experiment variants;
Expand All @@ -30,8 +30,8 @@ Fabric provides:
flowchart TB
Consumer["Consumer\nCLI | Python SDK | integrations"]
Config["Typed source\nFabricConfig"]
Core["Fabric Rust core\nresolve | plan | create | invoke | destroy"]
Adapter["Selected Fabric adapter"]
Core["NeMo Fabric Rust core\nresolve | plan | create | invoke | destroy"]
Adapter["Selected NeMo Fabric adapter"]
Harness["Agent harness runtime\nHermes | Codex | custom"]
Artifacts["Artifact manifest\noutput | logs | patches | telemetry refs"]
Relay["NeMo Relay\nATOF / ATIF when enabled"]
Expand Down Expand Up @@ -74,13 +74,13 @@ intent and boundaries.

## Quick Start: Hermes Agent

This path installs Fabric, installs Hermes Agent in a separate Python environment,
This path installs NeMo Fabric, installs Hermes Agent in a separate Python environment,
and runs one input through the Hermes Agent adapter.

Prerequisites:

- Rust and Cargo
- Python 3.11+ for Fabric
- Python 3.11+ for NeMo Fabric
- Python 3.11-3.13 for Hermes Agent
- [uv](https://docs.astral.sh/uv/getting-started/installation/)
- `just` 1.50.0+
Expand All @@ -99,22 +99,22 @@ export PATH="$HOME/.cargo/bin:$PATH"

Refer to the [official installation guide](https://just.systems/man/en/installation.html) for more details.

Install Fabric from the source checkout:
Install NeMo Fabric from the source checkout:

```bash
just build-all
just wheels
```

Install Fabric, Hermes Agent, and the Hermes adapter into an environment:
Install NeMo Fabric, Hermes Agent, and the Hermes Agent adapter into an environment:

```bash
# Use any Python 3.11-3.13 interpreter for Hermes.
# Use any Python 3.11-3.13 interpreter for Hermes Agent.
python3 -m venv .tmp/hermes-venv
.tmp/hermes-venv/bin/python -m pip install --find-links dist "nemo-fabric[hermes]"
```

If you are working from a local Hermes checkout, replace the final install line
If you are working from a local Hermes Agent checkout, replace the final install line
with:

```bash
Expand All @@ -134,19 +134,25 @@ export ADAPTER_PYTHON="$PWD/.tmp/hermes-venv/bin/python"

`ADAPTER_PYTHON` selects the interpreter used to launch any Python adapter.
An explicit `harness.settings.python` or `harness.settings.python_env` takes
precedence. If none is configured and `ADAPTER_PYTHON` is unset, Fabric falls
precedence. If none is configured and `ADAPTER_PYTHON` is unset, NeMo Fabric falls
back to `python3`.

Use `ADAPTER_PYTHON` when the harness is installed in a separate environment from Fabric. The environment must have the adapter package installed, the adapters tend to be small and self-contained with minimal dependencies.
Use `ADAPTER_PYTHON` when the harness is installed in a separate environment from NeMo Fabric. The environment must have the adapter package installed. The adapters Python packages are designedto be small with minimal dependencies.

The run returns a normalized `RunResult` JSON payload and writes logs/artifacts
under `examples/code_review_agent/artifacts/hermes/`. Its complete base
config and clone-based variants live in
`examples/code_review_agent/config.py`.

### Next Steps

- Follow the [Example Notebooks](examples/notebooks/README.md) for a guided tour of the Python SDK.
Comment thread
dagardner-nv marked this conversation as resolved.
- Refer to the [Python SDK guide](docs/sdk/python.mdx): typed configuration, planning,
diagnostics, requests, multi-turn runtimes, parallelism, results, and errors.

## Claude Adapter

Build the local wheels and install Fabric with the independent Claude adapter:
Build the local wheels and install NeMo Fabric with the independent Claude adapter:

```bash
just wheels
Expand Down Expand Up @@ -175,20 +181,20 @@ authentication, and execution details.
config.block_tools("browser", "shell")
```

Hermes maps these names to disabled toolsets, Claude maps them to
`disallowed_tools`, Deep Agents enforces them with middleware, and adapters
without a native deny mechanism route the policy as unsupported.
The selected adapter interprets these names: Hermes Agent maps them to disabled
toolsets, Claude maps them to `disallowed_tools`, Deep Agents enforces them
with middleware, and adapters without a native deny mechanism route the
policy as unsupported.
- **Adapters:** harness-specific integrations selected by `harness.adapter_id`.
The Hermes adapter lives under `adapters/hermes/`; the Codex SDK
adapter lives under `adapters/codex/`; the
The Hermes Agent adapter lives under `adapters/hermes/`; the Codex adapter lives under `adapters/codex/`; the
[Claude adapter](adapters/claude/README.md)
lives under `adapters/claude/`; the LangChain Deep Agents adapter lives under
`adapters/deepagents/`. Harness-specific extensions belong under
`adapters/deepagents/`. Harness Agent-specific extensions belong under
`harness.settings` so the normalized contract can remain stable.
- **Artifacts:** normalized output, logs, patches, and telemetry references
returned through an `ArtifactManifest`.

Fabric accepts complete typed configs. Compose variants in Python before
NeMo Fabric accepts complete typed configs. Compose variants in Python before
calling the SDK. Refer to the [Python SDK guide](docs/sdk/python.mdx) for the
complete public API, type definitions, lifecycle semantics, and error behavior.

Expand All @@ -200,19 +206,20 @@ the [Python SDK guide](docs/sdk/python.mdx). Exact signatures are in the

## More Workflows

- [Example Notebooks](examples/notebooks/README.md) provide a guided tour of the Python SDK.
- [Python SDK guide](docs/sdk/python.mdx): typed configuration, planning,
diagnostics, requests, multi-turn runtimes, parallelism, results, and errors.
- [Experimentation CLI](docs/experimentation/cli.mdx): presets, maintained
examples, editable application scaffolds, and explicit non-goals.
- [Consumer integration skills](skills/README.md): repository-local coding-agent
skills for integrating Fabric into an application through the Python SDK.
skills for integrating NeMo Fabric into an application through the Python SDK.
- [Getting Started overview](docs/about-nemo-fabric/overview.mdx): interface
selection and the end-to-end Fabric workflow.
selection and the end-to-end NeMo Fabric workflow.
- [Harbor examples](examples/harbor/README.md): validate the integration with a
deterministic, credential-free calculator smoke, optionally run the same
task with Hermes or Claude, and evaluate real coding tasks with SWE-Bench.
- Adapter guides: [Hermes](adapters/hermes/README.md),
[Codex SDK](adapters/codex/README.md), and
task with Hermes Agent or Claude, and evaluate real coding tasks with SWE-Bench.
- Adapter guides: [Hermes Agent](adapters/hermes/README.md),
[Codex](adapters/codex/README.md), and
[Deep Agents](adapters/deepagents/README.md).

## Tests
Expand All @@ -225,7 +232,7 @@ source .venv/bin/activate
uv sync --all-groups --all-extras
```

Build Fabric and the Python extension. Because the virtual environment is
Build NeMo Fabric and the Python extension. Because the virtual environment is
already bootstrapped, pass `no_uv=true` to avoid reinstalling dependencies.

```bash
Expand Down
2 changes: 1 addition & 1 deletion TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ cleanup validation.
- **Upstream resolution:**
[NVIDIA/NeMo-Relay#452](https://github.com/NVIDIA/NeMo-Relay/pull/452), merged
as `fe144d0d23e483c8216537118304e306abc20837`
- **Removal condition:** A published `nemo-relay-cli` version in Fabric's
- **Removal condition:** A published `nemo-relay-cli` version in NeMo Fabric's
supported `>=0.6.0,<0.7.0` range contains the merged request-decoding fix.
- **Cleanup:** Replace the pinned source-install instructions with the released
CLI installation, run the Codex Relay end-to-end test, update both affected
Expand Down
32 changes: 14 additions & 18 deletions adapters/claude/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ SPDX-License-Identifier: Apache-2.0
# NVIDIA NeMo Fabric Claude Adapter

The `nvidia.fabric.claude` adapter uses the official Claude Agent SDK for
Python behind Fabric's normalized invocation contract. The SDK is an
Python behind NeMo Fabric's normalized invocation contract. The SDK is an
implementation detail; consumers select the Claude harness by adapter ID.

This adapter pins `claude-agent-sdk==0.2.120`. The SDK supplies its compatible
Expand All @@ -29,7 +29,7 @@ pip install "nemo-fabric[claude, runtime]"

## Authentication

Fabric preserves Claude's native credential resolution. Use an existing Claude
NeMo Fabric preserves Claude's native credential resolution. Use an existing Claude
Code login for local development, `ANTHROPIC_AUTH_TOKEN` for a gateway or proxy
bearer credential, `ANTHROPIC_API_KEY` for a static API credential, or Anthropic
Workload Identity Federation (WIF) for production and CI workloads that should
Expand All @@ -45,7 +45,7 @@ endpoint. This request-scoped mapping does not change the parent environment.
The adapter forwards the Anthropic profile and federation environment variables
that Claude Code and the Claude Agent SDK consume. This includes
`ANTHROPIC_CONFIG_DIR`, `ANTHROPIC_PROFILE`, the direct federation identifiers,
and `ANTHROPIC_IDENTITY_TOKEN` or `ANTHROPIC_IDENTITY_TOKEN_FILE`. Fabric reads
and `ANTHROPIC_IDENTITY_TOKEN` or `ANTHROPIC_IDENTITY_TOKEN_FILE`. NeMo Fabric reads
selected environment values and forwards them to the Claude runtime, but it
does not persist or log them in configuration or artifacts. Authentication is
validated when Claude starts the invocation.
Expand All @@ -58,11 +58,7 @@ Refer to the [Claude adapter authentication guide](https://nvidia-nemo-fabric.do
for mode selection, required WIF variables, and the Relay boundary. Package
installation is verified by the adapter wheel and module-entrypoint tests.

Relay-enabled runs also require the external `nemo-relay` CLI. Fabric accepts
CLI versions `>=0.6.0,<0.7.0`. Install the CLI separately:

```bash
cargo install nemo-relay-cli
Relay-enabled runs also require the external `nemo-relay` CLI. Refer to the [NeMo Relay CLI](https://docs.nvidia.com/nemo/fabric/getting-started/install#nemo-relay-cli) install guide for instructions on installing the CLI tool.
Comment thread
dagardner-nv marked this conversation as resolved.
```

The Python `nemo-relay` package does not install this executable. Refer to the
Expand All @@ -72,8 +68,8 @@ for other supported installation methods.
## Execution Model

Each `invoke` starts a fresh adapter process. The adapter persists the terminal
Claude session ID under the Fabric artifact root, keyed by `runtime_id`, and
passes it as `ClaudeAgentOptions.resume` on the next invocation. One Fabric
Claude session ID under the NeMo Fabric artifact root, keyed by `runtime_id`, and
passes it as `ClaudeAgentOptions.resume` on the next invocation. One NeMo Fabric
runtime therefore maps to one Claude session even though no adapter process
stays resident.

Expand All @@ -88,7 +84,7 @@ Configure portable capabilities through the normalized `FabricConfig` fields:
- `tools.blocked` maps to Claude `disallowed_tools` using Claude-native tool
names.
- `mcp` configures stdio, HTTP, streamable HTTP, or SSE servers. For stdio,
Fabric parses `url` as a command plus arguments.
NeMo Fabric parses `url` as a command plus arguments.
- `skills.paths` names skill directories that contain `SKILL.md`. The adapter
stages these directories as a local Claude plugin for the invocation.

Expand All @@ -108,11 +104,11 @@ field so the same consumer configuration can compose with other adapters.
The adapter filters the inherited environment before launching Claude Code.
It retains portable OS/config variables, the selected model's `api_key_env`,
and explicitly configured `settings.env` values. Raw Claude stderr is consumed
by the SDK and is not persisted as a Fabric artifact.
by the SDK and is not persisted as a NeMo Fabric artifact.

## Relay Observability

Enable Relay through the normalized Fabric configuration:
Enable Relay through the normalized NeMo Fabric configuration:

```python
config.enable_relay(
Expand All @@ -121,14 +117,14 @@ config.enable_relay(
)
```

For each Relay-enabled invocation, Fabric starts one `nemo-relay` gateway,
For each Relay-enabled invocation, NeMo Fabric starts one `nemo-relay` gateway,
waits for its health endpoint, and stops it after Claude succeeds, fails, times
out, or is canceled. Fabric passes the gateway URL to Claude Code through
out, or is canceled. NeMo Fabric passes the gateway URL to Claude Code through
`ANTHROPIC_BASE_URL` and `NEMO_RELAY_GATEWAY_URL`. It also stages an
invocation-scoped Claude plugin that forwards lifecycle hooks with
`nemo-relay hook-forward claude`.

The Fabric result includes `relay_runtime.gateway_config_path`,
The NeMo Fabric result includes `relay_runtime.gateway_config_path`,
`relay_runtime.gateway_log_path`, and the collected `relay_artifacts`. Relay
startup failures return a stable adapter error and retain the gateway log for
diagnosis. The default Claude Agent SDK dependency bundles a compatible Claude
Expand All @@ -138,7 +134,7 @@ plugin's complete hook set, including `UserPromptExpansion`.
## Typed Configuration

Build the agent configuration with the typed SDK models before invoking
Fabric:
NeMo Fabric:

```python
from pathlib import Path
Expand Down Expand Up @@ -219,5 +215,5 @@ assert first.output["session_id"] == second.output["session_id"]
```

Resume requires the same workspace and Claude state directory on the same host.
The Fabric-to-Claude correlation record alone is insufficient if Claude's
The NeMo Fabric-to-Claude correlation record alone is insufficient if Claude's
underlying transcript store is removed.
Loading