Skip to content

Add a Verified TEE mode toggle to the Nexus provider - #47

Open
Marketen wants to merge 2 commits into
mainfrom
feat/nexus-tee-mode
Open

Add a Verified TEE mode toggle to the Nexus provider#47
Marketen wants to merge 2 commits into
mainfrom
feat/nexus-tee-mode

Conversation

@Marketen

@Marketen Marketen commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

What

Adds a Verified TEE mode toggle to the Nexus provider in the setup wizard. It switches OPENAI_BASE_URL between:

off (default, unchanged) https://nexus-api.dappnode.com/v1
on http://nexus-local-proxy.dappnode.private:3301/v1

Nexus runs a Gateway inside a trusted execution environment, reachable through the Nexus Local Proxy package. Hermes could already be pointed at it by hand-editing the base URL — which meant nobody did.

Why it's only a base-URL switch

The local proxy is the only thing on a DAppNode that verifies the Gateway's enclave attestation and encrypts prompt bodies to it. Hermes speaks plain OpenAI HTTP either way and never implements attestation itself, so there's no second copy of security-critical code to keep in step.

The probe

Enabling the toggle probes the proxy rather than assuming it's there. It reads the proxy's own verification state rather than attesting anything in Hermes — one verifier on the node, everything else reads its answer.

Three outcomes, all tested against a live proxy pointed at production:

  • Verified — reports how many checks passed and which Gateway release is running, so the user can see the claim rather than take the toggle's word for it
  • Running but unverified — says so plainly, since the proxy won't carry prompts in that state
  • Not installed — tells the user to install the Nexus Local Proxy package

It also pulls the Gateway's model catalog through the proxy, so the model field offers real IDs instead of asking the user to copy one from a web page.

Testing

Ran the wizard server against a real Nexus Local Proxy container verifying live production:

{ "reachable": true, "verified": true, "status": "verified",
  "gateway": "https://nexus-api-tee.dappnode.com",
  "sourceRevision": "893f4c9f306707b83f3b41782f25eb05adbc4f30",
  "checks": 9, "models": 15 }

With the proxy stopped:

{ "reachable": false, "verified": false, "reason": "not installed or not running" }

Both files syntax-checked (node --check and a vm.Script parse of the inline block).

Notes

  • No new package dependency. Adding one would force-install the proxy on every Hermes user including those on OpenAI. The probe handles absence gracefully instead.
  • The toggle is restored from the saved base URL, so reopening the wizard doesn't silently turn it back off.
  • Default is unchanged — existing installs keep the standard Nexus API.
  • dappnode/dappnode/SKILL.md documents the mode so the agent can explain it.

🤖 Generated with Claude Code

Marketen and others added 2 commits April 30, 2026 20:28
Nexus also runs a Gateway inside a trusted execution environment, reachable
through the Nexus Local Proxy package. Hermes could already be pointed at it by
hand-editing the base URL, which meant nobody did.

The toggle switches OPENAI_BASE_URL between the standard Nexus API and the
local proxy. That is the whole change: Hermes speaks plain OpenAI HTTP either
way and never implements attestation itself. The proxy is the only thing on the
node that verifies the enclave and encrypts prompt bodies to it, so pointing at
it is all that is required, and there is no second implementation of
security-critical code to keep in step.

Enabling it probes the proxy rather than assuming it is there. The probe reads
the proxy's own verification state instead of attesting anything here, and
reports what was checked and which Gateway release is running, so the user can
see the claim rather than take the toggle's word for it. A node without the
package installed is told to install it; a proxy that is running but has not
verified says so, because it will not carry prompts in that state.

The probe also pulls the Gateway's model catalog through the proxy, so the
model field offers real IDs instead of asking the user to copy one from a web
page.

The toggle is restored from the saved base URL, so reopening the wizard does
not silently turn it back off.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown

Dappnode bot has built and pinned the built packages to an IPFS node, for commit: e20dba4

This is a development version and should only be installed for testing purposes.

  1. Package hermes-agent.dnp.dappnode.eth

Install link

Hash: /ipfs/QmSuuk73ES4ZB5K7qf5JJkrxdYDKAADvchr7GuVd2BPz6x

(by dappnodebot/build-action)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant