Skip to content

Verda Cloud ​

Clanker supports Verda Cloud (formerly DataCrunch), a European GPU/AI cloud focused on H100 / H200 / A100 / B200 / L40S / V100 / A6000 instances, Instant Clusters with Slurm or Kubernetes orchestrators, serverless containers and jobs, and managed inference endpoints. All operations run against Verda's REST API directly — the verda CLI binary is optional.


Authentication ​

Verda uses OAuth 2.0 Client Credentials. You need a client_id / client_secret pair (scope cloud-api-v1) plus an optional project_id.

Obtaining credentials ​

  1. Log in to the Verda Cloud Console.
  2. Go to Account → API Keys (console.verda.com/account/api-keys).
  3. Generate OAuth2 credentials with the cloud-api-v1 scope.
  4. Copy the client_id and client_secret — the secret is shown once.

Configuration ​

Clanker resolves Verda credentials in this order:

  1. Values in ~/.clanker.yaml under the verda: block
  2. VERDA_CLIENT_ID / VERDA_CLIENT_SECRET / VERDA_PROJECT_ID environment variables
  3. ~/.verda/credentials (written by verda auth login)
  4. Clanker backend credential store (when a backend API key is configured)

Option 1 — ~/.clanker.yaml ​

yaml
verda:
  client_id: ""
  client_secret: ""
  default_project_id: ""
  default_location: "FIN-01"
  default_ssh_key_id: ""
  ssh_key_path: "~/.ssh/id_ed25519"

Option 2 — Environment variables ​

bash
export VERDA_CLIENT_ID="..."
export VERDA_CLIENT_SECRET="..."
export VERDA_PROJECT_ID="..."      # optional

Option 3 — The Verda CLI ​

Install the verda binary and let it manage credentials under ~/.verda/credentials:

bash
brew install verda-cloud/tap/verda-cli
verda auth login

Clanker reads the file directly — no extra config needed.

Option 4 — Clanker backend ​

Store credentials centrally so other machines pick them up automatically:

bash
clanker credentials store verda \
  --client-id "$VERDA_CLIENT_ID" \
  --client-secret "$VERDA_CLIENT_SECRET"

clanker credentials test verda    # hits /v1/balance to confirm they work

Prerequisites ​

The Verda CLI is optional. Clanker talks to the REST API directly, so you only need the binary for:

  • verda auth login if you prefer the CLI's credentials file over env vars
  • verda skills install to pull agent skills into your editor

If the CLI isn't installed, the clanker verda subcommand still works for every operation — only REST calls are used.


Querying Verda ​

Explicit flag ​

bash
clanker ask --verda "what GPU instances are running?"
clanker ask --verda "how much am I spending this month?"
clanker ask --verda "show me my instant clusters"

Automatic routing ​

Questions that mention verda, datacrunch, or Verda-specific terms route automatically:

bash
clanker ask "list my verda clusters"
clanker ask "any datacrunch instances running"

Static commands ​

bash
clanker verda list instances
clanker verda list clusters
clanker verda list volumes
clanker verda list instance-types
clanker verda list locations
clanker verda list containers         # serverless container deployments
clanker verda list jobs               # serverless job deployments
clanker verda list secrets
clanker verda balance                 # human-readable + raw JSON

clanker verda get instance <uuid|hostname>
clanker verda get cluster <uuid|hostname>
clanker verda action start <uuid|hostname>
clanker verda action shutdown <uuid|hostname>
clanker verda action delete <uuid|hostname>   # destructive, requires confirmation

Supported Services ​

Clanker covers Verda's full primitives surface:

  • Instances (GPU / CPU virtual machines)
  • Clusters (Instant Clusters with Slurm or Kubernetes orchestrator)
  • Volumes (NVMe, HDD, Shared FS / SFS)
  • SSH Keys and Startup Scripts
  • Container Deployments (serverless containers with autoscaling)
  • Job Deployments (serverless batch jobs)
  • Secrets and File Secrets (for container deployments)
  • Container Registry Credentials
  • Images (instance and cluster OS images)
  • Locations (datacenters: Finland, Iceland, etc.)
  • Balance and Long-term pricing periods

Maker Pipeline ​

Verda plans use a verda-api verb so execution goes through the REST client directly, with no dependency on the verda binary. Placeholder bindings (<INSTANCE_ID>, <SSH_KEY_ID>, etc.) chain commands together.

bash
# Generate a plan
clanker ask --verda --maker "spin up one H100 in FIN-01 with my default ssh key" | tee plan.json

# Apply an approved plan
clanker ask --apply --plan-file plan.json

# Multi-step plans compose via bindings
clanker ask --verda --maker "create an SSH key, then launch an H100 instance using it" | tee plan.json
clanker ask --apply --plan-file plan.json

Destroyer mode ​

Destructive operations — DELETE, instance action=delete|discontinue|force_shutdown|delete_stuck|hibernate, cluster action=discontinue — are blocked unless --destroyer is passed:

bash
clanker ask --verda --maker --destroyer "delete the test instance" | tee plan.json
clanker ask --apply --plan-file plan.json

Plan shape ​

Verda plans use REST-native commands rather than shelled-out CLI invocations:

json
{
  "version": 1,
  "provider": "verda",
  "commands": [
    {
      "args": ["verda-api", "POST", "/v1/instances", "{\"instance_type\":\"1H100.80S.22V\",\"location_code\":\"FIN-01\",\"image\":\"ubuntu-22.04-cuda-12.4-docker\",\"hostname\":\"gpu-1\",\"description\":\"training\",\"ssh_key_ids\":[\"<SSH_KEY_ID>\"]}"],
      "reason": "Create the instance",
      "produces": { "INSTANCE_ID": "$.id" }
    },
    {
      "args": ["verda-api", "PUT", "/v1/instances", "{\"action\":\"start\",\"id\":\"<INSTANCE_ID>\"}"],
      "reason": "Boot it"
    }
  ]
}

Kubernetes (Instant Clusters) ​

Verda doesn't expose a managed Kubernetes control plane API, but its Instant Clusters ship with Kubernetes preinstalled. Clanker registers a verda-instant provider under the K8s agent that:

  1. Provisions an Instant Cluster via POST /v1/clusters with a Kubernetes-labelled image.
  2. Polls until the cluster reaches running.
  3. SSHes to the head node using verda.ssh_key_path and reads /root/.kube/config.
  4. Rewrites the server: URL to the public IP so kubectl can reach it from outside Verda's private network.

From the Clanker Cloud desktop app, click the kubeconfig → button on any Verda cluster in the resource list to see a ready-to-paste ssh | sed one-liner.


MCP ​

Verda is exposed over MCP so MCP-compatible agents (Claude Desktop, Cursor, Zed, …) can reach the same surface:

bash
clanker mcp --transport http --listen :39393

Tools:

  • clanker_verda_ask — natural-language query answered via the configured AI provider
  • clanker_verda_list — list any Verda resource type (instances, clusters, volumes, containers, jobs, secrets, registry-creds, instance-types, locations, balance, images, availability, …)

Rate Limits and Retry Behavior ​

Verda enforces 500 requests/minute per project and 60 requests/minute per method+path. Clanker honours the Retry-After header on 429 responses and retries 5xx responses with capped exponential backoff (250 ms, 750 ms, 2 s). Context cancellation (Ctrl-C) interrupts pending waits.


Error Handling ​

Clanker decodes Verda's {code, message} error body into typed errors. Notable codes you may see in the output:

  • insufficient_funds (HTTP 402) — add credit in the console before retrying
  • service_unavailable (HTTP 503) — usually means the region/GPU combination is out of capacity; try another location
  • rate_limit_exceeded (HTTP 429) — Clanker retries automatically; if you see this, it exhausted the attempt budget
  • unauthorized_request (HTTP 401) — credentials expired or scope mismatched; check cloud-api-v1 scope and refresh via verda auth login