userId when creating a session to give that agent persistent memory and learned skills for the person, organization, workspace, team, or other subject you choose. Runtime deployment is handled by Herm internally.
All examples use the Herm SDK:
Create an agent
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human-readable agent name |
model | string | Yes | Model in provider/model form, such as anthropic/claude-sonnet-4.5 |
instructions | string | No | System instructions that define behavior and persona |
tools | array | No | Built-in and MCP toolsets available to the agent — see Tools |
mcpServers | array | No | MCP servers this agent can connect to — see MCP servers |
skills | array | No | Configured skill files that teach the agent your domain playbooks — see Skills |
metadata | object | No | Arbitrary key-value pairs for your own tracking |
Tools
Tools are versioned as part of the agent definition. Permission policies control whether Herm executes server-side tools automatically or pauses for approval.| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | agent_toolset for built-in tools or mcp_toolset for one MCP server |
mcpServerName | string | MCP only | Name of the MCP server this toolset uses |
defaultConfig | object | No | Default permission policy for every tool in the toolset |
configs | array | No | Per-tool permission policy overrides |
| Policy | Behavior |
|---|---|
always_allow | The tool executes automatically |
always_ask | The session pauses and waits for a tool confirmation event |
MCP servers
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Currently url |
name | string | Yes | Unique server name within the agent |
url | string | Yes | URL of your MCP server |
mcpServerName on an mcp_toolset must match a name in mcpServers.
Skills
Configured skills are part of the versioned agent definition. Learned skills are created by the agent during use and are scoped separately toagentId + userId; see Skills.
Each configured skill is loaded from one of three sources:
source | Required fields | Description |
|---|---|---|
file | name, path | A SKILL.md file uploaded to the agent workspace |
inline | name, content | Skill markdown provided directly in the request |
url | name, url | A SKILL.md fetched from a public URL |
Response
Get an agent
List agents
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Page size, from 1 to 100. Defaults to 20 |
cursor | string | No | Pagination cursor from a previous response |
Update an agent
version to prevent concurrent overwrites.
Update semantics:
- Omitted fields are preserved.
- Scalar fields (
name,model,instructions) are replaced. - Array fields (
tools,mcpServers,skills) are fully replaced; pass an empty array to clear one. metadatais merged at the key level; set a key to an empty string to delete it.- No-op updates return the existing version.
List versions
Get a version
Archive an agent
Endpoint summary
POST /v1/agents - Create a reusable, versioned agent definition with model, instructions, configured tools, MCP servers, skills, and metadata. GET /v1/agents - List agents. GET /v1/agents/ - Retrieve the latest agent definition, including configured tools, MCP servers, skills, metadata, and current version. PATCH /v1/agents/ - Update an agent definition and create a new version when configuration changes. GET /v1/agents//versions - List the version history for an agent. GET /v1/agents//versions/ - Retrieve a specific historical agent version. POST /v1/agents//archive - Archive an agent so new sessions cannot be created from it while existing sessions continue.Errors
| Status | Error | When |
|---|---|---|
| 400 | validation_error | Invalid request body |
| 401 | unauthorized | Missing or invalid API key |
| 404 | not_found | Agent or version does not exist |
| 409 | version_conflict | Update version does not match latest |
| 422 | invalid_skill | Skill content could not be loaded or parsed |

