Skip to content

Deployment Guide

Savine supports three deployment methods ranging from manual to fully automated CI/CD.

1. Dashboard Deployment

Best for prototyping, rapid iteration, and learning the platform.

  1. Navigate to Agents > New Agent.
  2. Paste or write your agent.json definition in the web editor.
  3. The editor validates syntax and schema live.
  4. Click Deploy. The progress terminal logs:
    • Schema validation
    • Sandbox provisioning
    • Endpoint activation
  5. Copy the generated API URL.

2. CLI Deployment

Best for local development and scripting.

Installation:

bash
npm install -g @agentcloud/cli

Authentication:

bash
savine login

Deploying an Agent: From a directory containing agent.json:

bash
savine deploy

Deploying a System: From a directory containing system.json:

bash
savine systems deploy system.json

Troubleshooting CLI Deploys: If a deploy fails, the CLI will output specific ValidationErrors. Ex: "Dangling reference: agent 'writer' not found in system.json agents block."

3. GitHub Deployment

Best for production, team collaboration, and version control.

  1. Go to Settings > Integrations in the Savine dashboard.
  2. Connect your GitHub account and install the Savine App on target repositories.
  3. Supported repository structures:
    • Root Agent: A single agent.json at the root.
    • Folder System: A system.json at root referencing /agents subdirectory.
    • Monorepo: Go to Project Settings and set the "Root Directory" to packages/my-agent-system.

Auto-deploy on Push: Every push to the main branch triggers a redeploy. Only configuration changes trigger redeploys. If system.json changes, the system version increments.

Preview Deployments (PRs): When enabled, opening a Pull Request deploys an ephemeral clone of the system (e.g., researcher-pr-42). You can run tests against this endpoint before merging to main.

Environment Variables

APIs need keys, databases need connection strings. Hardcoding them in agent.json or system.json is a critical security vulnerability.

Savine uses the key_ref pattern.

In agent.json:

json
"llm": {
  "provider": "openai",
  "key_ref": "OPENAI_API_KEY"
}

Setting the value: Via CLI:

bash
savine config set OPENAI_API_KEY="sk-proj-1234..."

Via Dashboard: Go to Settings > Secrets and add the key/value pair.

The runtime injects the decrypted secret into memory ONLY for the duration of the sandbox execution. No key is stored unencrypted.