NVIDIA / NVIDIA/NemoClaw

Export read-only OpenClaw agents sharing an attached Ollama route

Open
#11,858 1 comment 0 reactions 1 assignee Claimed by @sandl99 View on GitHub
area: cli enhancement
Dominant language
TypeScript
Stars
22.5k
Forks
3.1k
Avg merge
1d 43m
Merged PRs (30d)
718

Description

Parent: #10904. Implementation target: **main**.

## Problem and outcome

The exporter understands a read-only secondary agent and the attached-Ollama/managed-proxy topology separately, but [`sharesPrimaryHostedRoute`](https://github.com/NVIDIA/NemoClaw/blob/f5c05a0e6a59bd5133c50e31becbff25af274c33/src/lib/config/schema.ts) rejects any read-only roster whose provider has a `serving` object. Allow their supported combination.

Source baseline: `f5c05a0e6a59bd5133c50e31becbff25af274c33`.

## Before / after

### Before

At the recorded source revision, `ollama-roster` has primary OpenClaw plus a read-only `researcher`, both using the verified `qwen3.5:9b` route through the attached daemon and managed proxy.

```bash
nemoclaw config export ollama-roster --output ollama-roster.yaml
```

The hosted-only read-only-roster rule prevents successful export of this combination. A single-agent Ollama deployment and a hosted-inference read-only pair are supported separately.

### After

The same command succeeds. Its agents share the same exported Ollama provider and model:

```yaml
# spec.sandboxes[0].agents
- name: primary
type: openclaw
inference:
routes:
- name: primary
providerRef: local-ollama
overrides:
model: qwen3.5:9b
- name: researcher
type: openclaw
tools:
allow: [read]
inference:
routes:
- name: primary
providerRef: local-ollama
overrides:
model: qwen3.5:9b
```

This is a roster/route excerpt; any supported retained tuning is included identically on both routes in the full output. The provider retains the verified daemon/proxy ports, external-daemon ownership, managed-proxy ownership and selected model digest.

The full export must preserve every admitted secondary after #11854. Different secondary routes/models, unsupported tools/settings, missing roster authority and daemon/proxy/model drift still refuse publication. The regression exercises this combination without changing either agent or the inference resources. Broader Ollama model support remains #11857.

## Scope

Native Linux, Docker, primary OpenClaw plus read-only secondary agents, all sharing the same single verified attached-Ollama route. Build on #11854; retain existing daemon/proxy/model ownership and authentication semantics.

## Acceptance

- Export primary plus researcher on the currently supported Ollama model with matching routes and `tools.allow: [read]`.
- Also accept a larger roster once 1..* export support lands, without introducing another special agent-count limit.
- Validate Ollama backend, proxy, model digest and live route through the existing observer before publication.
- Reject any secondary with a different route/model, unsupported tools, duplicate identity or unsupported per-agent execution settings.
- Keep hosted-roster and single-agent Ollama outputs unchanged; exercise the complete action and an existing Ollama qualification scenario.

This slice does not broaden models, daemon management, platforms or per-agent inference selection.

## Delivery boundary

Extend the existing observation → verification → document builder → schema → publication pipeline. Export remains read-only and emits credential references only. Preserve successful existing exports and refusals for unrelated unsupported state. Regenerate the checked-in schema when its source changes.

Use a failing behavioral test before implementation, focused schema/action tests, and an existing installed-CLI scenario for the real boundary. Reuse coverage work in #11485; branch-to-branch translation and deployment parity remain with #11810. This issue does not add config-driven apply, resource adoption, or change existing onboarding inputs.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.