Skip to main content
A deployment is a dedicated AI agent for one customer, running in an isolated container with a persistent filesystem. Bring your system prompt, skills, MCP tools, and connector secrets — the deployment ships with session management, observational memory, automations, self-learning, and an SSE endpoint to stream agent events. All examples use the Herm SDK:
import Herm from "herm";

const herm = new Herm(); // reads PRISM_API_KEY

Create a deployment

POST /v1/deployments
Provisioning usually completes in seconds. Poll Get a deployment until status is ready, then start sending messages.
const deployment = await herm.deployments.create({
  customer_id: "cus_123",
  name: "Acme Creative Agent",
  runtime: "hermes",
  model: "anthropic/claude-sonnet-4.5",
  system_prompt:
    "You are Acme's media generation agent. Help the user plan, create, and iterate on high-performing short-form videos.",
  sandbox: {
    enabled: true,
    type: "docker",
    persistent_filesystem: true,
  },
  mcp_servers: [
    {
      name: "prism-media",
      url: "https://api.prismvideos.com/mcp",
      tools: ["search_models", "generate_image", "generate_video"],
    },
  ],
  skills: [
    {
      name: "ugc-video-creation",
      source: "file",
      path: ".prism/skills/ugc-video-creation/SKILL.md",
    },
    {
      name: "storyboarding",
      source: "inline",
      content:
        "---\nname: storyboarding\ndescription: Create shot-by-shot storyboards for short-form videos\n---\n# Storyboarding\n...",
    },
    {
      name: "social-media-visual-effects",
      source: "url",
      url: "https://example.com/skills/social-media-visual-effects/SKILL.md",
    },
  ],
  secrets: {
    META_ADS_TOKEN: "sec_meta_ads_token",
    GOOGLE_DRIVE_TOKEN: "sec_google_drive_token",
  },
  features: {
    memory: true,
    dreaming: true,
    automations: true,
    steering: true,
    filesystem_webhooks: true,
  },
});

Parameters

ParameterTypeRequiredDescription
customer_idstringYesYour identifier for the customer this agent serves. One agent per customer is the recommended model
namestringYesHuman-readable deployment name
runtimestringNoAgent harness to run. Currently hermes (default)
modelstringNoModel in provider/model form, such as anthropic/claude-sonnet-4.5. No provider lock-in
system_promptstringYesThe agent’s system prompt
sandboxobjectNoSandbox configuration — see Sandbox
mcp_serversarrayNoYour MCP servers exposing first-party tools — see MCP servers
skillsarrayNoSkill files that teach the agent your domain playbooks — see Skills
secretsobjectNoMap of environment variable names to secret references (sec_...) for connectors
featuresobjectNoFeature flags — see Features

Sandbox

FieldTypeDefaultDescription
enabledbooleantrueRun the agent in an isolated container
typestringdockerSandbox backend
persistent_filesystembooleantruePersist the agent’s workspace across sessions

MCP servers

FieldTypeRequiredDescription
namestringYesUnique server name
urlstringYesURL of your MCP server
toolsstring[]NoAllowlist of tool names. Omit to expose all tools

Skills

Each skill is loaded from one of three sources:
sourceRequired fieldsDescription
filename, pathA SKILL.md file uploaded to the deployment
inlinename, contentSkill markdown provided directly in the request
urlname, urlA SKILL.md fetched from a public URL

Features

FieldTypeDefaultDescription
memorybooleantrueObservational memory across sessions
dreamingbooleanfalseIdle-time self-learning between sessions
automationsbooleantrueScheduled and recurring agent runs
steeringbooleantrueHuman-in-the-loop approvals mid-run
filesystem_webhooksbooleanfalseWebhook notifications on agent filesystem changes

Response

{
  "deployment_id": "dep_7xK9s2",
  "customer_id": "cus_123",
  "runtime": "hermes",
  "status": "ready",
  "model": "anthropic/claude-sonnet-4.5",
  "thread_id": "thr_default_8a1",
  "filesystem": {
    "workspace_path": "/workspace",
    "persistent": true
  },
  "events": {
    "transport": "sse",
    "url": "https://api.prismagents.com/v1/deployments/dep_7xK9s2/events"
  }
}

Response fields

FieldTypeDescription
deployment_idstringDeployment ID to pass to other endpoints
customer_idstringThe customer identifier you supplied
runtimestringAgent harness running in the deployment
statusstringOne of provisioning, ready, error
modelstringResolved model identifier
thread_idstringDefault thread for Send Message
filesystem.workspace_pathstringPath of the agent’s workspace inside the container
filesystem.persistentbooleanWhether the workspace persists across sessions
events.transportstringAlways sse
events.urlstringStream Events endpoint for this deployment

Get a deployment

GET /v1/deployments/:deployment_id
Returns the current state of a deployment, including created_at.
const deployment = await herm.deployments.get("dep_7xK9s2");

console.log(deployment.status); // "ready"
{
  "deployment_id": "dep_7xK9s2",
  "customer_id": "cus_123",
  "name": "Acme Creative Agent",
  "runtime": "hermes",
  "status": "ready",
  "model": "anthropic/claude-sonnet-4.5",
  "thread_id": "thr_default_8a1",
  "filesystem": {
    "workspace_path": "/workspace",
    "persistent": true
  },
  "events": {
    "transport": "sse",
    "url": "https://api.prismagents.com/v1/deployments/dep_7xK9s2/events"
  },
  "created_at": "2026-06-11T18:21:09Z"
}

List deployments

GET /v1/deployments
Returns the deployments owned by your API key, newest first.
const { data, next_cursor } = await herm.deployments.list({
  customer_id: "cus_123",
  limit: 20,
});

Parameters

ParameterTypeRequiredDescription
customer_idstringNoFilter to a single customer’s deployments
statusstringNoFilter by status: provisioning, ready, or error
limitintegerNoPage size, from 1 to 100. Defaults to 20
cursorstringNoPagination cursor from a previous response
{
  "data": [
    {
      "deployment_id": "dep_7xK9s2",
      "customer_id": "cus_123",
      "name": "Acme Creative Agent",
      "runtime": "hermes",
      "status": "ready",
      "model": "anthropic/claude-sonnet-4.5",
      "created_at": "2026-06-11T18:21:09Z"
    }
  ],
  "next_cursor": null
}

Update a deployment

PATCH /v1/deployments/:deployment_id
Updates a live deployment’s configuration. Changes apply to the agent’s next run; memory, files, and conversation history are untouched.
const updated = await herm.deployments.update("dep_7xK9s2", {
  name: "Acme Creative Agent v2",
  model: "anthropic/claude-opus-4-8",
  system_prompt:
    "You are Acme's media generation agent. Always propose three creative directions before generating.",
  // Arrays are fully replaced
  skills: [
    {
      name: "storyboarding",
      source: "url",
      url: "https://acme.com/skills/storyboarding/SKILL.md",
    },
  ],
  // Maps are merged at the key level
  secrets: {
    RESEND_TOKEN: "sec_acme_resend",
  },
  features: {
    dreaming: true,
  },
});

Update semantics

Field typeBehavior
Scalars (name, model, system_prompt)Replaced with the new value
Arrays (mcp_servers, skills)Fully replaced. Pass [] to clear
Maps (secrets, features)Merged at the key level. Set a key to null to remove it
Omitted fieldsPreserved
customer_id, runtimeImmutable — create a new deployment instead
If the update produces no change, the existing deployment is returned unchanged. To modify skills and MCP servers incrementally instead of replacing the arrays, use the Skills and Tools APIs.

Delete a deployment

DELETE /v1/deployments/:deployment_id
Stops the agent, tears down its container, and deletes the deployment.
Deletion is permanent. The agent’s workspace, memory, skills, and automations are destroyed unless you pass retain_filesystem: true.
await herm.deployments.delete("dep_7xK9s2", { retain_filesystem: true });

Parameters

ParameterTypeRequiredDescription
retain_filesystembooleanNoKeep a snapshot of the workspace for 30 days. Defaults to false
{
  "deployment_id": "dep_7xK9s2",
  "status": "deleted"
}

Errors

StatusErrorWhen
400validation_errorInvalid request body or query parameters
401unauthorizedMissing or invalid API key
402insufficient_creditsThe account does not have enough credits
403forbiddenAPI key lacks the required scope
404not_foundDeployment does not exist
422invalid_skillA skill could not be fetched or parsed
422invalid_secret_refA secret reference does not exist
See Errors for the full error reference.