Quickstart
Deploy your first agent in under 10 minutes — via the dashboard wizard, the API, or an MCP client.
Three paths to the same outcome — a running agent on a per-tenant VPS. Pick the one that fits your workflow:
- Dashboard wizard — the visual flow. Best for first-time exploration.
- CLI / API — curl + an API key. Best for scripting and CI.
- MCP client — drive the platform from Claude Desktop, Cursor, or Goose. Best for "ask the agent to deploy itself".
All three create a per-tenant VPS on Hetzner (or Contabo / Cherry depending on tier), provision WireGuard, mount a Caddy reverse proxy, and start the runtime under systemd.
Prerequisites
- A HydraCore tenant account with an active subscription on a tier
that permits the chosen runtime (
openclaw-basicand up). - A target customer in your tenant. Admins can deploy on behalf of customers; non-admins always deploy for themselves.
- Provider credits in your tenant's billing account — Hetzner CX23 is the default smallest plan, billed per minute.
Deploy from the wizard
- Pick a template. From the Dashboard, click Deploy New
Agent. The first wizard step shows the available recipes. The
default
personal_assistantis a good starting point. - Pick a runtime. Step 2 only appears when the experimental
runtimes flag is enabled
(
NEXT_PUBLIC_ENABLE_EXPERIMENTAL_RUNTIMES=1). Otherwise the wizard goes straight to configuration with OpenClaw selected. - Configure. Set an agent name, optionally pick a customer to deploy on behalf of, and confirm the tier + region.
- Deploy. The provisioning worker walks 17 steps; the wizard's
stepper UI shows live progress. Typical end-to-end: 90-180
seconds to
running.
Deploy from the CLI
The dashboard isn't a hard dependency. Every wizard step maps to an
API endpoint you can hit with curl. Mint an API key first at
Settings → API Keys → New key with at minimum
instances:write, instances:read, and chat:invoke scopes.
1. List recipes
export HC_API="https://api.hydracore.io"
export HC_KEY="hc_live_..."
curl -s -H "X-Api-Key: $HC_KEY" "$HC_API/v1/recipes" \
| jq '.[] | {slug, name, runtime_manifest_id}'Pick a slug — e.g. personal_assistant.
2. List tiers
curl -s -H "X-Api-Key: $HC_KEY" "$HC_API/v1/catalog/tiers" \
| jq '.[] | {id, slug, name, billing_cycle}'Copy the id of the tier whose manifest_id matches the recipe's
runtime (e.g. openclaw-basic for the personal_assistant
default).
3. Deploy
curl -s -X POST -H "X-Api-Key: $HC_KEY" \
-H "Content-Type: application/json" \
"$HC_API/v1/instances" \
-d '{
"agent_name": "my-first-agent",
"recipe_slug": "personal_assistant",
"product_tier_id": "<tier UUID from step 2>",
"region_id": "nbg1"
}'The response is 202 Accepted with a task_id + idempotency_key.
The provisioning runs asynchronously; the response shape includes
an instance_id you can poll. If the response doesn't carry one,
fetch it via the idempotency key:
curl -s -H "X-Api-Key: $HC_KEY" \
"$HC_API/v1/instances/by-key/<idempotency_key>"4. Wait for running
INSTANCE_ID="<from step 3>"
while true; do
status=$(curl -s -H "X-Api-Key: $HC_KEY" \
"$HC_API/v1/instances/$INSTANCE_ID" | jq -r .status)
echo "status=$status"
case "$status" in
running) break ;;
failed|error|deleted) echo "terminal: $status"; exit 1 ;;
esac
sleep 5
done90-180 seconds is typical. If you hit failed, the response body
carries an error_class you can grep through the dashboard
Activity tab for context.
5. Send your first turn
curl -s -N -X POST -H "X-Api-Key: $HC_KEY" \
-H "Content-Type: application/json" \
"$HC_API/v1/instances/$INSTANCE_ID/chat" \
-d '{"message": "Hello! What can you do?"}'-N disables curl's output buffering so SSE chunks stream as they
arrive. Same wire shape regardless of which runtime answers.
Deploy from an MCP client
If you have Claude Desktop, Cursor, or Goose set up with the HydraCore MCP server (see MCP setup), you can do all five CLI steps in plain English:
"Deploy a personal_assistant agent on the smallest openclaw tier in the nbg1 region. Call it my-first-agent. Tell me when it's running."
The MCP tools (list_recipes, list_tiers, create_instance,
get_instance, chat_with_instance) map 1:1 to the curl commands
above. Scope filtering at startup means the client only ever
surfaces tools your API key can actually call.
What's next
- Runtimes — switch to a different runtime
with the
manifest_idfield in the recipe or wizard. - Architecture — understand the composition model so you can author your own recipes.
- API Reference — the full endpoint list with auth, errors, and pagination.