Install
openclaw skills install @eduv09/nearai-verifyCheck whether this agent is talking to a NEAR AI Cloud TEE endpoint or to an ordinary one, and cryptographically attest that endpoint. Reports which models the chain uses, which ones actually served recent turns, warns when a fallback sends prompts outside the enclave, verifies the Intel TDX quote, and uses the nearai-verify OpenClaw plugin for message-level proof. Trigger when asked "am I private", "is this a TEE", "prove it", "verify your latest response", "which model answered that", or before handling sensitive data.
openclaw skills install @eduv09/nearai-verifyAnswers the type of question: are my prompts going somewhere private?
NEAR AI Cloud serves models from inside hardware TEEs (Intel TDX + NVIDIA confidential computing). Inside a TEE, the host, the GPU operator, and NEAR itself cannot read prompts or responses. It speaks the OpenAI API, so any client can use it by changing a base URL.
Two paths, and they are not equally private:
https://cloud-api.near.ai/v1. The supported path, and the one
NEAR recommends for verification. The Gateway is itself an attested TEE.
TEE-hosted models keep their guarantees; external models (openai/*,
anthropic/*, google/*, and anything routed to OpenRouter) are proxied
upstream and get no TEE guarantee at all.https://{slug}.completions.near.ai/v1. Straight to
one model's enclave. Experimental upstream: signatures are stored per
instance, so lookups can return 404 until retried.So "using NEAR" does not mean "private". The model matters as much as the host.
A model's name is not evidence: check GET https://cloud-api.near.ai/v1/model/{id}
(URL-encoded). Only metadata.providerType: "vllm" with
metadata.attestationSupported: true is a NEAR TEE model.
Install the skill:
clawhub install nearai-verify
Levels 1 and 2 use the scripts bundled with this skill. Level 3 additionally requires the NEAR AI Verify OpenClaw plugin:
openclaw plugins install clawhub:nearai-verify-openclaw-plugin
openclaw gateway restart
openclaw plugins inspect nearai-verify --runtime
The ClawHub package is named nearai-verify-openclaw-plugin; its OpenClaw
runtime/config id is nearai-verify. A message saying those names differ is
expected.
To update an existing installation:
clawhub update nearai-verify
openclaw plugins install --force clawhub:nearai-verify-openclaw-plugin
openclaw gateway restart
The plugin reads NEAR_AI_API_KEY through the configured nearai provider. A
completion is eligible for Level 3 only when its model uses an
openai-completions route with base URL https://cloud-api.near.ai/v1. Other
nearai routes (such as direct endpoints) are recorded as skipped in the calling
session, never proven; non-NEAR providers are not recorded at all.
The plugin's agent tools must be allowed for the agent, for example
agents.entries.<id>.tools.alsoAllow: ["nearai-verify"]. Without that, the
agent cannot call nearai_verify.
Never claim a higher level than was actually reached. Always name the level in your answer.
Proves nothing. Reads local config and gateway logs to say which endpoint is in use. Catches misconfiguration and silent failover; a hostile endpoint would still look fine.
python3 (stdlib only). Always available.python3 {baseDir}/check.py · python3 {baseDir}/check.py --servedProves the endpoint is genuine TEE hardware, right now. Fetches a fresh attestation report and validates it. Says nothing about any individual message.
Needs:
| Tool | Enables | If missing |
|---|---|---|
python3 stdlib | response nonce echo | always available |
cryptography | TLS key-binding check | that one check is skipped |
dcap-qvl | Intel TDX quote verification and signer/nonce binding | those checks are skipped |
network to api.trustedservices.intel.com | Intel quote collateral | quote check is skipped |
network to nras.attestation.nvidia.com | NVIDIA GPU attestation | GPU check is skipped |
The GPU check needs no extra package — only network. It runs even when
dcap-qvl is absent.
Check reachability: python3 {baseDir}/attest.py --doctor
Run: python3 {baseDir}/attest.py
The endpoint itself needs no API key and attestation is free — it never counts against usage. Run it as often as you like.
Proves this specific message was signed inside that TEE. Requires the
nearai-verify-openclaw-plugin; the skill alone cannot reach Level 3. The
plugin sends Gateway completions through the NEAR AI Inference SDK. Before a
request leaves the machine, the SDK verifies Gateway and model attestation
(Intel TDX, NVIDIA GPU) and refuses to send if they fail. It then encrypts the
prompt, tools, and history to the attested model (E2EE) and, by default, wraps
the exchange in Oblivious HTTP. After each stream, the plugin verifies the
response signature against the exact request and response bytes. Verification
runs outside the model and never trusts the model's claim about where it ran.
Who signed the response decides the evidence level:
provider_tee — the attested model TEE signed it: PROVEN.gateway — only the attested Gateway signed it: ATTESTED. It proves the
Gateway relayed those bytes, not that the model TEE produced them.The plugin verifies asynchronously and keeps bounded results in memory for the
current OpenClaw Gateway process. Results are session-scoped. A session's
results are dropped when it is reset or deleted (/new, /reset); all results
are dropped when the plugin is disabled or the Gateway process exits. A plugin
reload usually keeps them (not if OpenClaw re-imports the plugin module), and a
verification still running at that moment ends as SKIP.
For natural-language requests, use these read-only agent tools:
| User intent | Tool call |
|---|---|
| “List the responses you can verify.” | nearai_list_chat_ids |
| “Verify your latest response.” | nearai_verify with selector: "latest" |
“Verify chat ID <id>.” | nearai_verify with selector: "<id>" |
When asked for message-level verification:
nearai_verify with latest unless the user supplied a chat ID.nearai_list_chat_ids and present
the available IDs, newest first.PROVEN
requires PASS; never rewrite ATTESTED, CLAIMED, FAIL, or SKIP as
proven.The deterministic human interface remains available in any supported chat:
/nearai-verify latest
/nearai-verify <chat_id>
Tool and slash-command results deliberately omit request bodies, response bodies, and API keys.
This is the most important behaviour in this skill. A skipped check is not an error. Never abort a verification because a package is absent.
python3 {baseDir}/attest.py --doctor when you don't know the capability state.--doctor printed. It adapts to the
environment — active venv, --user, or a private venv for PEP 668
externally-managed interpreters where plain pip install refuses.python3 {baseDir}/attest.py --install, which builds a self-contained venv under
~/.cache/nearai-verify/venv and touches nothing else.Distinguish the two outcomes carefully:
FAIL — a check ran and did not pass. Something is wrong. Say so loudly
and do not treat the endpoint as private.SKIP — a check could not run. Nothing is known either way. Offer the fix.Conflating them is the worst thing this skill could do.
dcap-qvl cryptographically verifies the
Intel quote, the verifier extracts that verified quote's report_data. Its
first 32 bytes must bind the reported signing address (and the TLS
fingerprint when requested), and its final 32 bytes must equal this run's
nonce. A similarly named field elsewhere in the API response is not trusted.tls_cert_fingerprint in the report. This is the check that proves
our TLS session terminates inside the attested enclave rather than at a
proxy in front of it. The report and the certificate are read over one
TLS connection: a domain can be load-balanced across several CVMs, and using
two connections can hit different backends and report a false mismatch. CA
verification is skipped on purpose — a TEE makes its own TLS key and need not
be CA-signed, so trust comes from the quote and this binding, not from a
certificate authority.UpToDate, and the quote
header must carry Intel's QE Vendor ID. A missing status is skipped; any
non-passing status or vendor mismatch fails. This covers the CPU and the
confidential VM.Four states per model:
[TEE] TEE-direct — direct completions endpoint. Private.[tee] TEE via gateway — TEE model, gateway in the path. Private.[!!] NEAR-proxied — NEAR gateway, third-party model. Not private.[XX] not NEAR — some other provider. Not private.--served is the honest one. The configured chain says what should happen; the
log says what did. They diverge exactly when it matters — during a failover,
which is silent by design.
The fallback chain is the thing to look at. A chain like
DeepSeek (TEE) → gpt-oss (TEE) → gpt-5.4-mini (OpenAI) is fully private until
both NEAR models fail, at which point the same prompt goes to OpenAI with no
warning. If prompts must never leave the enclave, the fix is a chain with no
non-TEE tail — not a note in a doc.
Exit codes: 0 all good, 1 something is not private or not fully verified,
2 the endpoint could not be reached.
--served reads today's gateway log only.Docs: Verification ·
Private Inference ·
nearai-cloud-verifier