EQTY LabDocs

Agent Onboarding

Go from an empty machine to an agent whose model traffic is signed and audited, with the supported versions, environment selection, and where to look when a step fails.

View as Markdown

Onboarding an agent takes four steps: install Viper, enroll the agent, run it through Viper, and confirm its requests in Guardian. This page lays out the path, what it supports, and where to look when a step fails.

The path

  1. Install Viper on the machine where the agent runs, and point it at your gateway. See Install Viper.
  2. Enroll the agent. Give it a key and register the key with Guardian. See Register Agents, or the enrollment step of the quickstart you follow. The Register Agent dialog in Guardian shows the install, enroll, check and run commands for the agent type you choose.
  3. Run the agent through Viper. How depends on the agent; see Choose your integration.
  4. Check the setup with viper doctor, then find the agent in the Agent Catalog and associate it with a project so project policy applies to it.

The whole path at once

For Claude Code, with an API key that has the Register Agents scope, the path is:

bash
# 1. Install Viper with your Cloudsmith entitlement token
export VIPER_CLOUDSMITH_TOKEN=<your entitlement token>
curl -fsSL "https://dl.cloudsmith.io/$VIPER_CLOUDSMITH_TOKEN/eqtylab/prod/raw/names/viper-install/versions/latest/install.sh" | sh

# 2. Create a key for Claude Code and register it; the first run asks for your gateway URL
viper did add --assign claude
GUARDIAN_API_KEY=ak_… viper did register --app claude --agent-name "my-laptop"

# 3. Check the setup, then run Claude Code through the gateway
viper doctor
viper claude

Other agents follow the same shape; the page in Choose your integration gives the commands for each.

Choose your integration

Your agentStart here
Claude Code, Codex, OpenCode or OpenClawRun Agents
A LangGraph applicationLangGraph Quickstart
A Deep Agent, with or without sub-agentsDeep Agents Quickstart
Any agent in an NVIDIA OpenShell sandboxOpenShell Quickstart
Any other Python agentGuardian Agent SDK
An agent in another languageProxy API
Any other agent or application that calls a modelRun Agents

What the Guardian Platform records for each, and what it does not, is on Agent Coverage.

Supported versions

ComponentSupportedTested with
ViperLinux x86_64 and aarch64 (AppImage or container image); macOS x86_64 (Intel) and aarch64 (Apple silicon) (.tar.gz). No Windows build.—
Guardian Agent SDKeqty-guardian-agent, for the LangGraph and Deep Agents quickstarts, with Viper 0.3.0 or later. Its Compatibility page lists the versions it’s tested with—
Python3.10 to 3.14 for the LangGraph quickstart, and 3.11 to 3.14 for Deep Agents3.10, 3.14
LangGraphlanggraph 1.1.10 and later 1.x releases1.2.15
Deep Agentsdeepagents 0.7.x0.7.28
langchain-openailangchain-openai 1.7, the model client in the quickstarts1.7.2
OpenShell0.1.4 and later 0.1 releases, with the Docker driver, on Linux x86_64 and aarch64 or macOS on Apple silicon0.1.4
Model accessAgents that call the Anthropic API, the OpenAI API, or the ChatGPT backend—

On Windows, the Linux build may run under WSL2, but it is not tested there. Deep Agents changes quickly before its 1.0 release, so only 0.7.x is supported. OpenShell does not run on Intel Macs, and its other drivers (Podman, Kubernetes, MicroVM) are not tested.

Choose an environment

Each Guardian Platform deployment has its own gateway. Viper registers keys with, and signs for, the gateway in llm_gateway_api_url, or in VIPER_GATEWAY_URL when that is set, which overrides the file every time Viper starts. Use the gateway address your administrator gives you for the deployment you mean to use; Viper has no built-in list of environments to pick from. A viper proxy sends model traffic to --gateway-endpoint but still uses the configured gateway for everything else, so give both the same deployment’s address.

A key registered with one deployment is unknown to every other. Changing only the gateway address leaves Viper signing with keys the new gateway refuses, as signing key is not registered. Registering with an API key or token that another deployment issued fails with registration_invalid_token.

To use more than one deployment from the same machine, keep a configuration directory for each and choose it with VIPER_CONFIG. Viper keeps the keys, credentials and logs beside the configuration file, so each directory has its own. Give the gateway address once, when the directory is created:

bash
export VIPER_CONFIG=~/.config/viper-staging/config.toml
VIPER_GATEWAY_URL=https://gateway.staging.example.com viper did add --assign proxy
GUARDIAN_API_KEY=ak_… viper did register --app proxy --agent-name "checkout-bot"

viper did add creates the configuration with that gateway, and later commands read it from the file. Keep VIPER_GATEWAY_URL out of your shell profile when you switch deployments this way, because it would override every directory’s address. Enroll each agent again in each deployment, with an API key or token that deployment issued. See Viper Configuration.

Check your setup with viper doctor

viper doctor checks that Viper is ready to sign for each key on this machine, and prints a fix for each problem it finds:

console
$ viper doctor
pass  config             <home>/.config/viper/config.toml
pass  gateway            https://gateway.example.com (llm-gateway 1.2.1)
pass  agent support-bot  did:key:z6Mk… is registered, and the gateway accepts its signature
pass  app proxy          did:key:z6Mk… is registered, and the gateway accepts its signature
skip  local CA           none yet; only `--egress-capture` uses one, and creates it

It checks the configuration file, that the gateway answers, that each agent and app key is registered and accepted, and the local certificate --egress-capture uses. To check a key, it signs a request that renews the key’s credential and discards the result. It changes no configuration, keys or credentials; like every Viper command, it writes a session log.

ResultMeaning
passThe check succeeded.
warnSomething to look at that does not stop the agent’s requests, such as a proxy key the agents do not need.
failA problem that stops requests or registration. viper doctor exits nonzero when any check fails.
skipThe check could not be made, for example a YubiKey key with no PIN to hand. A skip does not fail the run.

Because the exit status reflects failures only, viper doctor can gate a script, a container start, or a CI job. Use VIPER_CONFIG to check a configuration other than the default.

What doctor reports

ReportWhat to do
fail config no config file at <path>Run any Viper command other than viper doctor or viper ca, such as viper did add --assign <app>. It asks for the gateway URL, or takes it from VIPER_GATEWAY_URL on a machine with no terminal.
fail config with any other errorThe file could not be read or parsed, or an environment override such as VIPER_GATEWAY_URL is invalid. Fix what the message names.
fail gateway no `llm_gateway_api_url` in <path>Set llm_gateway_api_url in the file, or set VIPER_GATEWAY_URL.
fail gateway naming llm_gateway_api_url, such as invalid llm_gateway_api_urlThe address is not a usable http or https URL. Correct it in the file, or in VIPER_GATEWAY_URL if that is set.
fail gateway could not reach the gateway at <url>The gateway is down or unreachable from this machine, or the address is wrong. The message says whether TLS failed. See Run Agents.
fail gateway the request to the gateway at <url> failedThe connection was made, but the request failed before the gateway answered. Run viper doctor again; if it keeps failing, check any proxy or load balancer between this machine and the gateway.
fail gateway <url> answered (<status>), but its reply could not be readThe connection dropped while the gateway answered. Run viper doctor again; if it keeps failing, check any proxy or load balancer between this machine and the gateway.
fail … <url> did not answer as an Agent GatewayThe address is not an Agent Gateway. Use the address your administrator gave you. It can appear under gateway, or under a key when the gateway’s reply to the key check was not a gateway’s.
skip … not checked with the gateway, which did not answerPrinted for each key when the gateway check failed. Fix the gateway line first; the keys are checked once it passes.
warn gateway <url> has no `/health` routeSome gateways only expose /v1. The key checks below it say whether the address is a gateway.
fail keys no agent or app keysCreate one with viper agent add <name> or viper did add --assign <app>, then register it.
fail agent <name> … is not registeredRun viper agent register <name>. If it says with this gateway, the key was registered, but with another deployment; see Choose an environment.
fail app <app> … is not registered with this gatewayRun viper did register --app <app>, or check that the gateway is the deployment you registered with. See Choose an environment.
warn app proxy … is not registered, so the Guardian Platform refuses requests that name no agentExpected when every request names an agent, as in the quickstarts. Register the proxy’s key only if some requests will name no agent.
warn app proxy no key, which viper proxy needs to startCreate it with viper did add --assign proxy before you start viper proxy.
fail naming a key that failed to loadThe key’s file is missing or unreadable. Restore the key, or create and register a new one. See Register Agents.
fail naming failed to sign credential renewal requestThe key’s signer could not sign, for example a YubiKey that is unplugged or a wrong VIPER_YUBIKEY_PIN. Plug it in or correct the PIN, then run viper doctor again.
fail naming failed to read VC CID file and viper agent renew or viper did renewThe record of the credential the Guardian Platform issued when the key was registered is on this machine but cannot be read. Run the command it names to fetch a new one.
fail with the Guardian Platform refused the key checkThe gateway refused the key, for example because the agent was revoked. The message says what to do; see Run Agents.
warn … could not issue it a credentialThe gateway accepts the key but could not issue a credential, so renewals fail until it can. Give your Guardian Platform administrator the correlation_id it prints.
skip … is on a YubiKeySet VIPER_YUBIKEY_PIN, or run viper doctor in a terminal so it can ask for the PIN.
skip … the gateway has credential renewal turned offThe gateway does not offer the request the check uses, so keys cannot be checked against it.
warn local CA expired on <date>, expires on <date>, or an error reading itRun viper ca regenerate. Only --egress-capture uses the local certificate, and it refuses to start without a valid one.
local CA … not trusted in the login keychain (macOS)Only tools that ignore SSL_CERT_FILE, such as gh, need it with --egress-capture. Run viper ca trust if you use them.

Troubleshooting

Each step has its own troubleshooting table, keyed by the message Viper prints:

Where it failedLook in
Downloading or installing Viper, or starting itInstall Viper
Registering a key or an agentRegister Agents
Starting a wrapper or viper proxy, or a failed requestRun Agents
A LangGraph, Deep Agents or OpenShell quickstartThe quickstart’s own Troubleshooting section, which covers the SDK’s errors and the sandbox
Not sureRun viper doctor and follow the fix it prints

Viper writes a log file for each session in logs/ beside the configuration file, ~/.config/viper/logs/ by default. When a request fails, the newest log says why.

  • Install Viper — download Viper, point it at your gateway, and create a key
  • Register Agents — enroll the agent with an API key or a registration token
  • Run Agents — wrapper and sidecar commands for each supported agent
  • Audit Trail — confirm the agent’s requests were recorded
  • Agent Configuration — what Viper captures about the agent at the start of each session
  • Roles and Permissions — the Agent Operator role and the Register Agents permission