Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
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: 2 additions & 0 deletions packages/nemo_platform/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,8 @@ nemo-agents-plugin = [
"pyyaml>=6.0",
"anthropic>=0.88.0",
"rich>=13.7.1",
"nemo-fabric[claude,codex,deepagents,relay]>=0.1.0rc6,<0.2.0",
"nemo-fabric-adapters-hermes>=0.1.0rc6,<0.2.0; python_version < '3.14'",
]

# Generated from [tool.bundle-package]; do not edit by hand.
Expand Down
2 changes: 1 addition & 1 deletion plugins/nemo-agents/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ the platform seed job. For local development, create it manually:
```bash
# Store the API key as a secret
nemo secrets create ngc-api-key \
--data "$NVIDIA_API_KEY"
--value "$NVIDIA_API_KEY"

# Create the model provider
nemo inference providers create nvidia-build \
Expand Down
155 changes: 88 additions & 67 deletions plugins/nemo-agents/examples/nemo-agent-config/README.md
Original file line number Diff line number Diff line change
@@ -1,77 +1,101 @@
# NeMo Agent Config

This directory contains example Platform-owned `agent.yaml` configs for
This directory contains Platform-owned `nemo-agents-spec-v1` configs for
Fabric-backed NeMo Agents. Run the commands below from the repository root.
Comment thread
mmogallapalli marked this conversation as resolved.

Fabric dependencies are currently optional so the default workspace does not
force other Fabric consumers onto the current Fabric SDK/runtime API before they
migrate.
Fabric, Relay, Claude, Codex, and DeepAgents dependencies are installed with
the `nemo-agents` plugin. Hermes is intentionally split out because the Hermes
Agent runtime dependencies conflict with the Platform environment.

```bash
uv pip install -e "plugins/nemo-agents[fabric]"
```
Shared Fabric capabilities live at the top level:

For Codex/Claude Relay telemetry, install the Relay CLI separately:
```yaml
instructions:
system:
content: You are a concise test assistant.

```bash
cargo install nemo-relay-cli --root .venv
.venv/bin/nemo-relay --version
```
skills:
paths: []

Top-level `skills`, `mcp`, and `tools` are Platform-owned shared fields that
translate into `FabricConfig`. Prompt settings are harness-specific for now and
should be configured under `harnesses.<name>.settings`.
mcp:
servers: {}

## Local invoke
tools:
blocked: []
```

`agent.yaml` is the telemetry-neutral example. Authenticate Codex, then run:
`instructions.system` is the shared system prompt path for Claude, Codex,
DeepAgents, and Hermes. Adapter-specific options stay under
`harnesses.<name>.settings`; do not put prompt text there.
Comment thread
mmogallapalli marked this conversation as resolved.

```bash
codex login
The selected harness is controlled by `default_harness`. To try another harness
from the same config today, edit `default_harness` before creating or invoking
the agent.

nemo agents invoke \
--agent-config plugins/nemo-agents/examples/nemo-agent-config/agent.yaml \
--input "Reply with exactly: platform fabric works"
```
## Invoke

To try Claude, authenticate Claude Code first:
`agent.yaml` is the telemetry-neutral multi-harness example. Set
`default_harness` to the harness you want to validate, then create, deploy, and
invoke the agent through Platform.

```bash
claude
```
make bootstrap-python
source .venv/bin/activate

Temporarily set `default_harness: claude` in `agent.yaml`, then run the same
`nemo agents invoke` command.
export NVIDIA_API_KEY="<your NVIDIA API key>"

## Relay Local Files
nemo setup --auto --start-services --install-skills --no-deploy-agent

`agent-relay.yaml` enables Relay telemetry without Intake. It writes local ATIF
and ATOF artifacts under the deployment artifacts directory.
# If setup does not create a usable NVIDIA inference provider, follow
# Step 2 in plugins/nemo-agents/README.md before deploying.

```bash
nemo agents create \
--name fabric-relay-local-test \
--agent-config plugins/nemo-agents/examples/nemo-agent-config/agent-relay.yaml
--name fabric-agent \
--agent-config plugins/nemo-agents/examples/nemo-agent-config/agent.yaml

nemo agents deploy \
--agent fabric-relay-local-test \
--name fabric-relay-local-test-deployment \
--agent fabric-agent \
--name fabric-agent-deployment \
--mode subprocess
Comment thread
mmogallapalli marked this conversation as resolved.

nemo agents invoke \
--agent-deployment fabric-relay-local-test-deployment \
--input "Reply with exactly: relay local works"
--agent-deployment fabric-agent-deployment \
--input "Reply with exactly: platform fabric works"
```
Comment thread
mmogallapalli marked this conversation as resolved.

Confirm Relay emitted both ATIF and ATOF files:
Use a unique `--name` / deployment name for each harness, or delete the previous
agent and deployment before recreating them.

## Harness Notes

### Codex

Set `default_harness: codex` in `agent.yaml`. Authenticate Codex before
invoking:

```bash
find ~/.local/share/nemo/agents/system/default/fabric-relay-local-test-deployment-fabric/artifacts \
\( -name "*atif*" -o -name "*atof*" \) \
-exec ls -lh {} \;
codex login
```

In this example, Codex uses the shared Nemotron model through Platform IGW.

### DeepAgents

Set `default_harness: deepagents` in `agent.yaml`. In this example, DeepAgents
uses the shared Nemotron model through Platform IGW.

### Claude

Set `default_harness: claude` in `agent.yaml`. Authenticate Claude Code before
invoking:

```bash
claude
```

## Hermes
In this example, Claude uses its harness-local Anthropic model config.

### Hermes

Hermes Agent has dependencies that conflict with the Platform environment, so
install it with the Fabric adapter in a separate Python 3.12 environment:
Expand All @@ -80,43 +104,40 @@ install it with the Fabric adapter in a separate Python 3.12 environment:
uvx uv@0.9.14 venv --python 3.12 .venv-hermes
uvx uv@0.9.14 --no-config pip install \
--python .venv-hermes/bin/python \
"nemo-fabric[relay]>=0.1.0rc4,<0.2.0" \
"nemo-fabric-adapters-hermes>=0.1.0rc4,<0.2.0" \
"nemo-fabric[relay]>=0.1.0rc6,<0.2.0" \
"nemo-fabric-adapters-hermes>=0.1.0rc6,<0.2.0" \
"hermes-agent==0.19.0"

export HERMES_ADAPTER_PYTHON="$PWD/.venv-hermes/bin/python"
export NVIDIA_API_KEY="<your NVIDIA API key>"
export ADAPTER_PYTHON="$PWD/.venv-hermes/bin/python"
```

Temporarily set `default_harness: hermes` in `agent.yaml`, then run:
Set `default_harness: hermes` in `agent.yaml`. For subprocess deployments,
export `ADAPTER_PYTHON` before starting Platform, or restart Platform after
exporting it. The Platform service launches the agent subprocess, so exporting
`ADAPTER_PYTHON` only in the later CLI shell is not enough.

## Relay Local Files

`agent-relay.yaml` enables Relay telemetry without Intake. It writes local ATIF
and ATOF artifacts under the deployment artifacts directory. Use
`agent-relay.yaml` with the invoke directions above.

Confirm Relay emitted both ATIF and ATOF files:

```bash
nemo agents invoke \
--agent-config plugins/nemo-agents/examples/nemo-agent-config/agent.yaml \
--input "Reply with exactly: platform hermes works"
find ~/.local/share/nemo/agents/system/default/fabric-relay-local-test-deployment-fabric/artifacts \
Comment thread
mmogallapalli marked this conversation as resolved.
Outdated
\( -name "*atif*" -o -name "*atof*" \) \
-exec ls -lh {} \;
```

## Relay to Intake (Local)
## Relay to Intake

`agent-relay-intake.yaml` enables Relay ATIF export to a locally running
Platform Intake API. Start ClickHouse for Intake, start Platform, then create
and deploy the agent:
Platform Intake API. Start ClickHouse for Intake, then use
`agent-relay-intake.yaml` with the invoke directions above.

```bash
services/intake/scripts/spans/run_clickhouse.sh

nemo agents create \
--name fabric-relay-intake \
--agent-config plugins/nemo-agents/examples/nemo-agent-config/agent-relay-intake.yaml

nemo agents deploy \
--agent fabric-relay-intake \
--name fabric-relay-intake-deployment \
--mode subprocess

nemo agents invoke \
--agent-deployment fabric-relay-intake-deployment \
--input "Reply with exactly: platform fabric works"
```

Confirm Intake received ATIF-derived spans:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,47 @@ config_format: nemo-agents-spec-v1
name: test-agent
description: Test agent config

instructions:
system:
content: You are a concise test assistant.

default_harness: codex

harnesses:
claude:
kind: claude
model:
provider: anthropic
model: anthropic/claude-sonnet-4-5
settings:
permission_mode: dontAsk
hermes:
kind: hermes
model:
provider: nvidia
model: nvidia/nemotron-3-nano-30b-a3b
api_key_env: NVIDIA_API_KEY
base_url: https://integrate.api.nvidia.com/v1
temperature: 0.0
settings:
python_env: HERMES_ADAPTER_PYTHON
base_url: https://integrate.api.nvidia.com/v1
max_iterations: 1
max_tokens: 512
reasoning_config:
effort: none
enabled_toolsets: []
system_prompt: You are a concise test assistant.
deepagents:
kind: deepagents
settings:
deepagents: {}
codex:
kind: codex
settings:
sandbox: workspace-write
system_prompt: You are a concise test assistant.
config_overrides:
model_reasoning_effort: high
reasoning_effort: high

models:
default:
provider: openai
model: openai/gpt-5.4
provider: nvidia
model: nvidia-nemotron-3-nano-30b-a3b
api_key_env: NVIDIA_API_KEY

skills:
paths: []
Expand Down
30 changes: 20 additions & 10 deletions plugins/nemo-agents/examples/nemo-agent-config/agent-relay.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,47 @@ config_format: nemo-agents-spec-v1
name: test-agent
description: Test agent config

instructions:
system:
content: You are a concise test assistant.

default_harness: codex

harnesses:
claude:
kind: claude
model:
provider: anthropic
model: anthropic/claude-sonnet-4-5
settings:
permission_mode: dontAsk
hermes:
kind: hermes
model:
provider: nvidia
model: nvidia/nemotron-3-nano-30b-a3b
api_key_env: NVIDIA_API_KEY
base_url: https://integrate.api.nvidia.com/v1
temperature: 0.0
settings:
python_env: HERMES_ADAPTER_PYTHON
base_url: https://integrate.api.nvidia.com/v1
max_iterations: 1
max_tokens: 512
reasoning_config:
effort: none
enabled_toolsets: []
system_prompt: You are a concise test assistant.
deepagents:
kind: deepagents
settings:
deepagents: {}
codex:
kind: codex
settings:
sandbox: workspace-write
system_prompt: You are a concise test assistant.
config_overrides:
model_reasoning_effort: high
reasoning_effort: high

models:
default:
provider: openai
model: openai/gpt-5.4
provider: nvidia
model: nvidia-nemotron-3-nano-30b-a3b
api_key_env: NVIDIA_API_KEY

skills:
paths: []
Expand Down
23 changes: 13 additions & 10 deletions plugins/nemo-agents/examples/nemo-agent-config/agent.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ config_format: nemo-agents-spec-v1
name: test-agent
description: Test agent config

instructions:
system:
content: You are a concise test assistant.

default_harness: codex

harnesses:
Expand All @@ -18,28 +22,27 @@ harnesses:
provider: nvidia
model: nvidia/nemotron-3-nano-30b-a3b
api_key_env: NVIDIA_API_KEY
base_url: https://integrate.api.nvidia.com/v1
temperature: 0.0
settings:
python_env: HERMES_ADAPTER_PYTHON
base_url: https://integrate.api.nvidia.com/v1
max_iterations: 1
max_tokens: 512
reasoning_config:
effort: none
enabled_toolsets: []
system_prompt: You are a concise test assistant.
deepagents:
kind: deepagents
settings:
deepagents: {}
codex:
kind: codex
settings:
sandbox: workspace-write
system_prompt: You are a concise test assistant.
config_overrides:
model_reasoning_effort: high
reasoning_effort: high

models:
default:
provider: openai
model: openai/gpt-5.4
provider: nvidia
model: nvidia-nemotron-3-nano-30b-a3b
api_key_env: NVIDIA_API_KEY

skills:
paths: []
Expand Down
Loading
Loading