Repository navigation
Closed
Closed
Enhancement
Copy link
Labels
area: e2eEnd-to-end tests, nightly failures, or validation infrastructureEnd-to-end tests, nightly failures, or validation infrastructurearea: integrationsThird-party service integration behaviorThird-party service integration behaviorarea: securitySecurity controls, permissions, secrets, or hardeningSecurity controls, permissions, secrets, or hardeningenhancementNew capability or improvement requestNew capability or improvement requestintegration: dcodeLangChain Deep Code integration behaviorLangChain Deep Code integration behaviorintegration: hermesHermes integration behaviorHermes integration behaviorintegration: openclawOpenClaw integration behaviorOpenClaw integration behaviorv1NemoClaw v1 branchNemoClaw v1 branch
Description
Blocked on NVIDIA/NeMo-Fabric#541, NVIDIA/NeMo-Fabric#540 and NVIDIA/NeMo-Fabric#546, under the epic NVIDIA/NeMo-Fabric#547, whose description holds the P0 specification that defines the settings, paths and access used here; its resolved Q9 makes Hermes's API server use the configured model endpoint and key, which the Hermes API check below depends on. This is the NemoClaw side of #13360 (OpenClaw's dashboard), #13973 (signing in to it) and #13969 (Hermes's interfaces).
Change
As each Fabric adapter ships its interfaces, make them usable from a NemoClaw deployment. Each harness can land on its own.
- Fabric pin: move
FABRIC_REVISIONto a revision with the adapter's interfaces, from Fabric or, until Fabric takes them, the reference implementation in cv/NeMo-Fabric, regenerate the bundled catalog, and recheck the pinned OpenClaw image and Hermes revision against what the adapters support. - Images:
- OpenClaw: the pinned image at the version the adapter supports.
- Hermes: v0.22.5, the latest release and the P0 target; the API server's dependencies and built frontends are packaged for v0.22.4 (feat(image): package what Hermes's API server, dashboard and browser chat need #13971) and need rechecking on v0.22.5.
- Deep Agents Code: an image with
dcodeinstalled as [Enhancement]: Deep Agents Code adapter: new adapter with terminal UI NeMo-Fabric#546 documents.
- Configuration:
harness.settings.interfacesalready passes through unchanged. Planning rejects interface names and fields an image's adapter doesn't support, using the descriptor'ssettings_schemain the image catalog, where P0 adapters list their interfaces underproperties.interfaces. This is new work incrates/nemoclaw-fabric/src/capabilities.rs, which today checks adapter presence and filesystem grants, tested with and without an interface declaration in the descriptor. HTTP interfaces need an exactportin the YAML. - Access: after apply, tell the person how to reach each enabled interface:
- forward it with
openshell forward service SANDBOX --target-port PORT --local 127.0.0.1:PORT; - for interfaces with a token (OpenClaw's Control UI, Hermes's API server), read it from
/sandbox/artifacts/.fabric/<adapter>/runtimes/<runtime-id>/interfaces/<name>.tokenwithopenshell sandbox exec; NemoClaw prints that command, using the runtime ID in its provider state, never the token itself. Hermes's dashboard has no token or sign-in: the forward is its access control; - sign in, for example with OpenClaw's
#token=URL; - for Deep Agents Code, run the launcher with
openshell sandbox exec -n SANDBOX --tty -- /sandbox/artifacts/.fabric/deepagents-code/runtimes/<runtime-id>/interfaces/terminal(or throughshon anoexecmount);openshell sandbox connectattaches tofabric-agent-ctl serve, not a shell. Instructions keep the existing gateway and workspace selection.
- forward it with
- Health: an interface failure must not make the provider treat the agent as stopped; only the runtime check decides that.
- Docs: restore the interface sections of
docs/interfaces.md,docs/agents.mdanddocs/limits.md; explain that an interface's token and Deep Agents Code's launcher are readable and writable by the agent's own tools in its sandbox, so the agent can sign in to its own interfaces and use their configuration, cron and plugin features; that Hermes's dashboard has no sign-in, so anyone who can reach its forward can use it, and its browser chat runs without approvals; and that Deep Agents Code's agent server has no authentication; and preferforward service, which the gateway authorizes, over exposed service URLs. - Examples: enable the interfaces in the GTC DC templates once qualified.
Acceptance criteria
- For OpenClaw and Hermes, a
live-dockertest applies a deployment with the interface enabled and forwards it withopenshell forward service:- OpenClaw: Control UI sign-in with the retrieved token succeeds, and a missing or wrong token is rejected.
- Hermes API server: a request with the retrieved
api.tokensucceeds, and one without it is rejected. - Hermes dashboard: the page loads, a dashboard API call succeeds with the session token the page provides, and browser chat works through the forward.
- A failed Hermes child doesn't change the provider's running result.
- For Deep Agents Code, a
live-dockertest runs the launcher withopenshell sandbox exec --tty, sends one prompt, and gets a reply produced with the generated configuration; OpenShell's access control is the authentication. - Planning rejects an
interfacessetting the image's adapter doesn't support. - No token appears in YAML, plans, OpenTofu state, NemoClaw's command output or logs, or test artifacts; a person's explicit retrieval command is the intended disclosure.
- The docs cover enabling, forwarding, token retrieval, sign-in and the token's visibility to the agent.
- OpenClaw's dashboard is unavailable with the pinned Fabric #13360, Question: how does a user sign in to an OpenClaw dashboard? #13973 and Serve Hermes's API server, dashboard and browser chat once Fabric's Hermes adapter supports them #13969 are closed when their harness's part lands.
Owner
NemoClaw, after each Fabric adapter ships its interfaces.
Metadata
Metadata
Assignees
Labels
area: e2eEnd-to-end tests, nightly failures, or validation infrastructureEnd-to-end tests, nightly failures, or validation infrastructurearea: integrationsThird-party service integration behaviorThird-party service integration behaviorarea: securitySecurity controls, permissions, secrets, or hardeningSecurity controls, permissions, secrets, or hardeningenhancementNew capability or improvement requestNew capability or improvement requestintegration: dcodeLangChain Deep Code integration behaviorLangChain Deep Code integration behaviorintegration: hermesHermes integration behaviorHermes integration behaviorintegration: openclawOpenClaw integration behaviorOpenClaw integration behaviorv1NemoClaw v1 branchNemoClaw v1 branch
Activity
cv commentedon Oct 30, 2026
Manual acceptance checklist for the three harnesses. It covers what the live tests can't fully check: a real model, a real browser on a person's machine, an interactive terminal, and one deployment through apply, use, restart and destroy.
Before starting
6cad3504, OpenClaw 2026.9.34, Hermes v0.22.5,dcode0.2.2 and OpenShell 0.1.6.interfaces.dashboard.port;interfaces.api.portandinterfaces.dashboard.port;interfaces.terminalandapproval_mode: auto.stopanddestroytook.Every harness
porton an HTTP interface each fail with a NemoClaw error naming the field; a valid configuration plans cleanly.-o jsonoutput show the gateway and workspace selection plus theopenshell forward servicecommand for HTTP interfaces, the command that reads the token where there is one, and how to sign in, or for Deep Agents Code, the launcher command.0600, owned by the sandbox user, and absent when its interface is disabled.nemoclaw destroysucceeds, with nostop_failedand no retry, and no interface processes or forwards remain.OpenClaw: Control UI
http://127.0.0.1:PORT/#token=<token>loads the Control UI signed in, and the UI removes the token from the address bar.public_originsis accepted, and an unlisted non-loopback origin is rejected.Hermes: API server and dashboard
GET /v1/modelsreturns 200 withAuthorization: Bearer <api.token>and 401 without it. A chat completion returns an answer from the configured model, and the model endpoint's logs show the configured key, with nothing sent toapi.openai.com.planshows no change, and the API still answers.api.tokenis gone.Deep Agents Code: terminal UI
openshell sandbox exec -n SANDBOX --tty -- <launcher path>opens the terminal UI; on anoexecmount,sh <launcher path>also works.dcode -r <thread-id>from the launcher opens the runtime's thread with that invocation's messages; theterminal.runningmarker holds the thread ID.auto,dcode's classifier decides a gated action and the adapter denies what it escalates; withyolo, the action runs. The outcome matches the docs.Documented limitations, not failures
Record any of these, but don't fail the test for them:
stop;dcode's terminal UI starting its own agent server on loopback without authentication.Passing
Every item above passes on Docker with a real model on one platform. Kubernetes (
live-kind) and AMD64 can be a second round.cv commentedon Oct 30, 2026
Manual test results for the checklist above. Two items failed and are filed as #14028 and NVIDIA/NeMo-Fabric#567.
Setup: Linux ARM64 on Docker, with a NemoClaw managed gateway and OpenShell 0.1.6. Deep Agents Code ran from
feat/deepagents-code-harness(02a7bd0f9e); OpenClaw and Hermes ran from the interfaces branch beneath it (bdc8055542). Both are on the Fabric pin6cad3504(OpenClaw 2026.9.34, Hermes v0.22.5,dcode0.2.2). The model wasnemotron-3.5-super-vl, served by an existing vLLM deployment on the same host through an OpenAI-compatible endpoint. Browser checks used headless Chromium throughopenshell forward service.Every harness
terminal.portportinterfaces.api: {}plans with no error (#14028)-o json: forward, token command, sign-in; the launcher command for Deep Agents Code600,node:node200, none or a wrong one401destroysucceedsstop_failedOpenClaw
#token=URL signs in to the Control UI, which removes the token from the address bar, and the model answered a chat message.Hermes
200withapi.token,401without it or with a wrong one. A chat completion answered in 15 s; it made one request to the configured endpoint, and Hermes's config and logs name only that endpoint, neverapi.openai.com.destroysucceeded, and the client got503 admission_queued("Your input is saved and will run once when it is back").Deep Agents Code
openshell sandbox exec --ttycommand opens the terminal UI, and after skipping the first-run question with Escape, a prompt got an answer from the configured model.shform runs the launcher. An actualnoexecmount wasn't tested.fabric-agent-ctlin the sandbox succeeded on the runtime's ACP session, and<launcher> threads list --jsonshows that thread with its messages.dcode -r <thread>fails while the runtime runs ("open elsewhere"), and the launcher refuses once it stops ([Bug]: Deep Agents Code's terminal UI can't resume the runtime's thread NeMo-Fabric#567).autorejected even a read-onlyid -un, so invocations effectively have no shell, and the adapter denied it without hanging;yoloran both commands and wrote the file.Not covered
401.Other observations
live-dockerrun with every branch took 411 s against its 360 s budget, so the tests need to get faster before merging.Both test deployments, their retained gateway storage and the saved test tokens are removed.
build(fabric): pin Fabric with the P0 interface adapters, OpenClaw 20…
feat(fabric): reach OpenClaw's and Hermes's native interfaces (#14037)
fix(fabric): give OpenClaw's startup one 60-second deadline (#14039)
build(fabric): pin Fabric that names a failed start's cause (#14042)
cv commentedon Oct 31, 2026
Retest after #14036, #14037, #14038, #14024, #14039 and #14042, against the same model endpoint as the first run. OpenClaw and Hermes ran from
v1with #14042's pin (Fabrice7913b6c). Deep Agents Code ran fromfeat/deepagents-code-harness(ee0adf8960, not yet a PR) on top of that pin. Docker, linux_arm64.Fixed since the first run
portfails with the field named, as do an unknown interface and an unknown field.-r <thread>shows "Thread can't be resumed ... open elsewhere".catalog.openclaw.ai(build(fabric): pin Fabric that names a failed start's cause #14042).OpenClaw and Hermes
200with the token,401without it.#token=signs in and the model answers; a missing or wrong token is rejected.destroysucceeded in 8 s, with nostop_failed.Deep Agents Code
terminal.port.shfallback.threads listthrough the launcher shows the runtime's thread; the marker holds its ID.auto: the shell tool is blocked, so for the file request the agent used its file tool instead.yolo:id -unreturnsnode, and the shell command writes its file.destroysucceeded in 6 s, with nostop_failed.Left for the Deep Agents Code PR
v1.live-dockertook 351.5 s against the 360 s budget on a quiet machine. Folding the terminal test intointerfaces_live's gateway is in progress, to add margin.openshell-supervisor-extract-<pid>-<seq>, and the gateway is PID 1 in every container, so two gateways starting at once on one engine can collide.clawhub.aishortly after answering a prompt, and the sandbox policy denies it. No test fails because of it.feat: add the Deep Agents Code agent image with its terminal UI (#14043)
cv commentedon Oct 31, 2026
Done in v1: #14036 (Fabric, OpenClaw 2026.9.34 and Hermes v0.22.5 pins), #14037 (OpenClaw's and Hermes's interfaces: planning check, apply output, docs, live test), #14038 (interface settings checked against the descriptor schema, #14028), #14039 and #14042 (OpenClaw's 60 s startup deadline, Kind diagnostics, a failed start's cause, no catalog lookup), and #14043 (the Deep Agents Code image and its terminal UI). Manual results are in the comments above. Follow-ups: NVIDIA/OpenShell#5094 (helper container names collide, which keeps live tests serial) and OpenClaw's remaining clawhub.ai lookup after a prompt, left as is for now.
cv commentedon Oct 31, 2026
Demo: OpenClaw's Control UI
Retest on Fabric
995cc79e, the content of #14044, on Docker (ARM64). The model isnemotron-3.5-super-vlon an existing vLLM deployment on the same host.1. Apply prints how to reach the dashboard. It shows the forward and token commands, never the token.
2. Signing in works. After the forward, opening
http://127.0.0.1:18789/#token=TOKENsigns in to the Control UI. OpenClaw removes the token from the address bar, and the model answers a chat message.3. A wrong token is rejected.
The first
nemoclaw destroyof this deployment (OpenClaw and Hermes) succeeded in 12 s.cv commentedon Oct 31, 2026
Demo: Hermes's API server and dashboard
Retest on Fabric
995cc79e, the content of #14044, on Docker (ARM64). The model isnemotron-3.5-super-vlon an existing vLLM deployment on the same host.1. Apply prints how to reach both interfaces. The API server takes a bearer token; the dashboard has no sign-in.
2. The API server requires its token and answers through the configured model. Requests with the token get
200, requests without it get401.3. The dashboard loads without signing in, as documented. Hermes shows its own metrics opt-in banner; nothing is shared unless someone chooses to.
4. Browser chat answers through the configured model, under the image's default sandbox policy, which now allows the terminal devices it needs.
cv commentedon Oct 31, 2026
Demo: Deep Agents Code's terminal UI
Retest on Fabric
995cc79e, the content of #14044, on Docker (ARM64). The model isnemotron-3.5-super-vlon an existing vLLM deployment on the same host.1. Apply prints how to open the terminal, including the
shform for anoexecmount.2. Fabric invocations run on the runtime's
dcodethread. The launcher lists that thread, and the marker file names it.3. The terminal UI opens through
openshell sandbox exec --ttyand answers with the configured model. It runs as a separate session that shares the runtime's state.The first
nemoclaw destroyof this deployment succeeded in 6 s.build(fabric): pin Fabric that stops OpenClaw where group signals are…