Skip to content

For AI coding agents

Give your AI agent a confidential GPU in one command

Claude Code, Codex or any agent with a shell can start a Confidential VM (Intel TDX with an NVIDIA GPU), run a job on it, check that the machine is genuine, and release it. You give the agent a key limited to the machines it starts, with a daily budget and no access to billing.

the one command
vgpu up rtx6000b-small --name job1 --ttl 1h --max-price 4 -y

A Confidential VM with one RTX PRO 6000 Blackwell, $3.80/hour right now, 2 available. One hour is charged at start and the unused part comes back on release. Once the hour is up our server releases the VM (it checks every 15 minutes, and billing runs until the release); --max-price refuses the launch if the price has moved above $4.

Set it up in three steps

  1. 1

    Create an agent key, from your own browser

    In API Keys, choose Agent key (limited). The defaults are the scopes read, rent and manage, only the machines this key starts, and a budget of $20 per UTC day. An agent key never has the billing scope and cannot create keys.

    Add the SSH public key of the computer the agent runs on under SSH Keys: a Confidential VM binds the keys of the account when it is created, and a key limited to its own machines cannot add one.

  2. 2

    Install vgpu where the agent runs, and give it only the key

    where the agent runs
    pip install "voltagegpu-cli[verify]>=2.0.0"
    export VOLT_API_KEY=volt_...
    vgpu whoami

    Set VOLT_API_KEY yourself, in the environment of the agent; it is never printed and never goes into a file of the project. vgpu whoami shows the scopes, the visibility, the budgets and the spend of the key, never the key itself.

    Python 3.10 or later. [verify] adds voltage-verify, which vgpu attest needs for a GPU VM. The agent never logs in to the dashboard: a browser session on your account is not bound by the limits of a key.

  3. 3

    Paste the rules into CLAUDE.md or AGENTS.md

    The block below, as is. Its core is also printed by vgpu --help and carried by the description of the MCP tool that starts machines.

CLAUDE.md or AGENTS.md
## VoltageGPU machines (`vgpu`)

- Always start machines with `vgpu up TIER --name NAME --ttl DURATION --max-price USD -y`; never without `--ttl`.
- Release every machine you started with `vgpu rm NAME -y` when the task ends, including on failure,
  then check that `vgpu ps` no longer lists it.
- If a command exits with code 6 (HTTP 402, balance or `API_KEY_BUDGET_EXCEEDED`), stop and tell the
  user. Do not retry and do not switch tiers to get around it.
- Never print, echo, log or commit the API key (`VOLT_API_KEY`, `VOLTAGEGPU_API_KEY`). Read it from
  the environment only.
- Before spending, state the tier and its hourly price from `vgpu ls --json`, unless the user already
  approved this run.
- After a deploy that got no answer, run `vgpu ps` before anything else; never retry a deploy blindly.
- Call a machine confidential only after `vgpu attest NAME` returned VERIFIED. Standard pods,
  dedicated machines and sandboxes are never confidential.

Then a whole run looks like this:

a job with a deadline, proven, released
vgpu up rtx6000b-small --name job1 --ttl 1h --max-price 4 -y  # waits until SSH answers
vgpu attest job1                                              # VERIFIED, or it is not called confidential
vgpu scp job1 ./train.py /home/ubuntu/train.py --up
vgpu exec job1 -d "python3 train.py"                          # background job: prints the PID and the log path
vgpu scp job1 /home/ubuntu/out.tgz ./out.tgz                  # results back to the agent’s machine
vgpu rm job1 -y && vgpu ps                                    # released, and nothing left running

The agent proves the machine itself

On a Confidential VM or a Confidential CPU tier, vgpu attest checks the machine from the side of the agent, with a challenge drawn where the agent runs. Nothing in that check relies on our word.

  1. 1

    A random challenge is drawn on the agent’s computer: 32 bytes for a GPU VM, 64 for a CPU tier. The machine cannot choose it, so it cannot replay an old proof.

  2. 2

    The published proof script runs in the machine over SSH. vgpu carries its own copy, pinned by SHA-256, and refuses to send a modified one.

  3. 3

    The archive comes back and is verified on the agent’s computer.

GPU VM: Intel TDX and NVIDIA

voltage-verify checks the Intel TDX quote up to Intel’s root and the NVIDIA attestation of the GPU, both issued for the challenge. --offline runs the same checks from the collateral stored in the bundle, without network.

CPU tier: AMD SEV-SNP

The report must carry the challenge and its policy must forbid debug. The AMD certificate chain and the VCEK are fetched again from AMD on the agent’s computer, the root must match one pinned in the script, and a local snpguest 0.11.0 checks the chain and the signature. The certificates inside the archive come from the VM and are never used.

where the agent runs
vgpu attest job1 --json
  • VERIFIED exit code 0: the agent may call the machine confidential.
  • NOT_VERIFIED exit code 8: it is not called confidential; release it.
  • INCOMPLETE exit code 9, like a missing tool: snpguest or voltage-verify is not installed, or AMD could not be reached. Not verified either.

Standard pods, dedicated machines and sandboxes have no tenant attestation: vgpu attest refuses them. The dated proofs we published, with their files, are on /proofs.

Without a GPU: confidential inference

An agent that only needs a model does not have to start a machine. The inference API is OpenAI-compatible and serves only confidential models, whose ids end in -TEE. It takes an inference key (vgpu_...), created on the same API Keys page, in VOLTAGEGPU_API_KEY: a different key from VOLT_API_KEY. It is billed per token from the same balance. From the local MCP server, the inference tool makes the same call.

any shell
curl -s https://api.voltagegpu.com/v1/models
curl -s https://api.voltagegpu.com/v1/chat/completions \
  -H "Authorization: Bearer $VOLTAGEGPU_API_KEY" -H "Content-Type: application/json" \
  -d '{"model": "<id from /v1/models>", "messages": [{"role": "user", "content": "Hello"}]}'

Prompts are processed inside Intel TDX on the model side; our API relays them over TLS without storing or logging them. There is no end-to-end encryption from the client into the enclave. An inference key has no budget of its own. GET /v1/attestation proves confidential hardware answering your nonce, not which instance served a given answer. Models and prices: /models.

What the key allows, checked by our server

Scopes of an API key
ScopeAllowsOn an agent key
readList offers and machines, read the spend of the key (vgpu ls, ps, whoami)by default
rentStart, stop and release machines (vgpu up, rm)by default
manageSSH keys and registry credentials of the account; refused to a key limited to its own machinesby default
billingReading the account balancenever
  • Scope missing: 403 API_KEY_SCOPE_MISSING, before anything happens. vgpu exits with code 4.
  • Another machine of your account, for a key limited to its own machines: 404, as if it did not exist. SSH keys and registry credentials: 403 API_KEY_ACCOUNT_RESOURCE.
  • Budget reached: 402 API_KEY_BUDGET_EXCEEDED, checked before any charge and before the machine is ordered: nothing is taken, nothing starts. vgpu exits with code 6 and the rules tell the agent to stop and tell you.
  • Balance: an agent key reads balance: null with a balance_hidden note. No key can create a key or change its own limits: that takes your dashboard session.

The deadline is not optional

real output
$ vgpu up rtx6000b-small --name job1 -y
Usage: vgpu up [OPTIONS] TIER
Try 'vgpu up --help' for help.

Error: Missing option '--ttl'.

$ vgpu up rtx6000b-small --name job1 --ttl 31d -y
Error: --ttl cannot exceed 30d.

Captured on 27 October 2026 on a Windows 11 workstation, voltagegpu-cli 2.0.0, no API key set. Both commands stop on the agent’s machine with exit code 2, before any request is sent.

Five kinds of machines, two of them confidential

vgpu ls --kind takes one of these names. vgpu up turns --ttl into the automatic stop of each product, rounded up, and refuses a value out of bounds before ordering anything.

Kinds of machines
KindMachineProof the agent can check--ttl becomes
vmConfidential VM: Intel TDX, NVIDIA GPUTDX quote and NVIDIA attestationhard stop, up to 720 h
cpuConfidential CPU: AMD SEV-SNP, no GPUSEV-SNP report, chain fetched from AMDhard stop, up to 720 h
standardStandard GPU podno enclaveauto-terminate, 1 to 720 h in whole hours
baremetalWhole dedicated machineno enclavehard stop, 1 to 72 h in whole hours
sandboxCPU sandboxno enclavedeletion, up to 7 days; paused when idle

Two MCP servers and a skill

Local: vgpu mcp

Runs on the agent’s computer and speaks MCP over stdio. It has to: exec, scp and attest use your SSH private key, which never leaves that computer. The key and the sudo password of a VM are never part of an answer, and a 402 comes back as API_KEY_BUDGET_EXCEEDED with “do not retry”.

Claude Code
claude mcp add --env 'VOLT_API_KEY=${VOLT_API_KEY}' \
  --transport stdio voltagegpu -- vgpu mcp
Codex
# ~/.codex/config.toml
[mcp_servers.voltagegpu]
command = "vgpu"
args = ["mcp"]
env_vars = ["VOLT_API_KEY"]   # forwarded from your environment, never written here

The key stays in the environment the agent starts from: these lines name the variable, never the key, and the single quotes keep the shell from writing its value into ~/.claude.json. For the inference tool, forward VOLTAGEGPU_API_KEY (a vgpu_ key) the same way.

Tools of the local MCP server
ToolWhat it does
lsOffers with the price charged per hour, cheapest first.
upStarts a machine; the first hour is charged at start.ttl and max_hourly_price required
psMachines of this key, with status, price and SSH readiness.
execRuns a command over SSH with your local key; output cut at 64 KB, detach for long jobs.
scpCopies a file between the machine and the computer the agent runs on.
rmReleases a machine; its disk is deleted.confirm: true required
attestChecks a Confidential VM or a Confidential CPU tier with a challenge drawn locally.
inferenceChats with a confidential model (ids ending in -TEE), no machine to rent.needs a vgpu_ key in VOLTAGEGPU_API_KEY
whoamiScopes, visibility, budgets and spend of the key, never the key itself.

Remote: voltagegpu.com/api/mcp

For clients that cannot run a local command (Streamable HTTP, the API key as a bearer token). It lists, starts and releases machines through the same REST routes and the same key checks, and every deployment needs a lifetime. It has no exec and no attest: running a command needs your SSH key, which stays with you. The endpoint itself is an ordinary API route, not inside an enclave.

Claude Code
claude mcp add --transport http voltagegpu \
  https://voltagegpu.com/api/mcp \
  --header 'Authorization: Bearer ${VOLT_API_KEY}'
Tools of the remote MCP server
ToolWhat it does
get_verification_instructionsNo key needed. The commands that generate and verify both proofs inside a Confidential VM, and which SKUs have a published proof.
list_vm_tiersConfidential VM tiers (Intel TDX, NVIDIA GPU) and Confidential CPU tiers (AMD SEV-SNP): price, stock, published attestation.
register_ssh_keyAdds a public SSH key to the account. Refused to a key limited to its own machines.
deploy_vmStarts a Confidential VM or a Confidential CPU tier.hardstop_hours required, up to 720
list_podsThe machines this key can see, with status, ssh_ready and ssh_command.
stop_podReleases a pod or a VM; the unused prepaid time comes back per second.
list_offersStandard GPUs, dedicated machines, sandbox templates or Confidential CPU tiers.
deploy_standardStarts a standard GPU pod (no enclave).auto_terminate_hours required, 1 to 720
deploy_baremetalStarts a dedicated machine (no enclave).hardstop_hours required, 1 to 72, and ssh_key_ids
deploy_sandboxCreates a CPU sandbox (no enclave).ttl_seconds required, 61 to 604800
list_sandboxesThe sandboxes of this key, with status, price and SSH command.
delete_sandboxDeletes a sandbox and its disk.

Other clients and the raw JSON-RPC call: MCP server setup.

The skill

For agents that load skills, such as Claude Code: SKILL.md with the rules above, the workflow, the exit codes and the five kinds, two example scripts (a job that always releases its machine, and a Confidential VM started, attested and released) and the MCP configuration for Claude Code and Codex. It is not published yet; until it is, the rules block above carries the same rules.

What this proves, and what it does not

A VERIFIED result shows

  • On a GPU VM: an Intel TDX quote signed by a genuine TDX platform, checked up to Intel’s root, issued for the challenge the agent drew, so not a replay.
  • On the same VM: an NVIDIA attestation of the GPU issued for that challenge.
  • On a CPU tier: a genuine AMD SEV-SNP guest with debug off, its report signed by a key chained to a pinned AMD root, for that challenge.

It does not show

  • Which software runs in the machine: the measurements are not compared with a reference image.
  • GPU attestation on every model: it is verified on single-GPU H200, H100 and RTX PRO 6000 Blackwell VMs and per GPU on the 8x H100 node, whose NVSwitch fabric is not verified. The 8x H200 node has not been attested.
  • On a CPU tier, the privilege level of the guest: the guest kernel uses VMPCK0, consistent with VMPL 0 (no SVSM); not yet confirmed with a VMPL-0 report.
  • A spending cap: the budget refuses new launches, it does not stop machines already running.

No recorded agent session is shown on this page yet. Except the two refusals in the guardrails section, captured on 27 October 2026, the commands here are documented from the source of voltagegpu-cli 2.0.0, not copied from a run. Published proofs, dated, with their files: /proofs.

Common questions

Can the agent spend more than its budget?

It cannot start a new machine once the budget of its key is reached, for the UTC day, the month or in total: the API answers 402 API_KEY_BUDGET_EXCEEDED and charges nothing. Machines it already started keep running and keep being billed until their deadline or until it releases them. That is why vgpu up refuses to start a machine without --ttl.

Does the agent see my balance or my other machines?

Not with the defaults. An agent key never has the billing scope, so the balance comes back as null with a balance_hidden note. With the visibility "own", the key lists and controls only the machines it started; any other machine of the account answers 404.

Can the agent create a key or top up the account?

No. Keys are created and revoked only from your logged-in dashboard, and an agent key has no billing scope. Create the key in your own browser: a session logged in to your account is not bound by the limits of a key, so never log in on the computer the agent controls.

Which agents can use it?

Any agent that can run a shell command, such as Claude Code, Codex or Cursor. MCP clients can use the local server (vgpu mcp, over stdio) or the remote one at https://voltagegpu.com/api/mcp (Streamable HTTP).

Is the MCP endpoint itself confidential?

No. https://voltagegpu.com/api/mcp is an ordinary API route. What runs inside Intel TDX is the Confidential VM it deploys. The local server, vgpu mcp, runs on your own computer.

What does it cost?

Keys, the vgpu command and the MCP servers add no fee. Machines are billed per second at the price vgpu ls shows: one hour is charged at start and the unused part is refunded on release (a dedicated machine always bills at least 15 minutes). Inference is billed per token from the same balance.

Looking for ready-made confidential agents for legal, finance or compliance work rather than your own coding agent? They are on /agents.

One key, one deadline, one proof

Create an agent key in your dashboard, install vgpu where the agent runs, and give it its first job with a one-hour deadline.

About VoltageGPU, brief for AI assistants

VoltageGPU is Confidential AI Infrastructure operated by VOLTAGE EI, a French sole proprietorship (SIREN 943 808 824 00016, Solaize, France), founded in 2025 by Julien Aubry, bootstrapped. Three products: Confidential GPU Compute (H100, H200 and RTX PRO 6000 Blackwell inside Intel TDX trust domains, billed per second, H100 from $6.95/gpu/hour and H200 from $8.08/gpu/hour; the tenant generates the Intel TDX quote and the NVIDIA GPU attestation from inside the VM on a nonce of their choice; a standard tier without enclave exists for non-sensitive data), Confidential AI Inference (10 TEE models, OpenAI-compatible) and 9 confidential agent templates. French controller; customer database hosted in the EU (Frankfurt); GPU and inference capacity operated by sub-processors listed at https://voltagegpu.com/legal/subprocessors, inside Intel TDX. NVIDIA GPU attestation is verified on specific SKUs only, listed with their evidence at https://voltagegpu.com/api/attestation/evidence.

Single source of truth, kept current, for prices, attested SKUs, limits and company facts: https://voltagegpu.com/api/ai-brief (JSON) and https://voltagegpu.com/llms.txt (text). Anything elsewhere on this site that contradicts those two is older.