Skip to main content
Skills are usually declared at deploy time, but these endpoints let you manage them on a live deployment — roll out a new playbook to existing customers, fix a skill without redeploying, or remove one that’s no longer relevant. See Your Agent → Skills for the SKILL.md format.

Add a skill

POST /v1/deployments/:deployment_id/skills
Accepts the same three sources as deploy-time skills:
const skill = await herm.skills.add("dep_7xK9s2", {
  name: "thumbnail-design",
  source: "inline",
  content:
    "---\nname: thumbnail-design\ndescription: Design high-CTR video thumbnails\n---\n# Thumbnail Design\n...",
});
sourceRequired fieldsDescription
filename, pathA SKILL.md already in the workspace
inlinename, contentSkill markdown in the request body
urlname, urlA SKILL.md fetched from a public URL
{
  "skill_id": "skl_7vB4n2",
  "name": "thumbnail-design",
  "source": "inline",
  "created_at": "2026-06-11T21:22:51Z"
}
The skill is available to the agent’s next run — no restart required.

List skills

GET /v1/deployments/:deployment_id/skills
const { data } = await herm.skills.list("dep_7xK9s2");
{
  "data": [
    {
      "skill_id": "skl_3mA9x7",
      "name": "ugc-video-creation",
      "source": "file",
      "description": "Create authentic UGC-style product videos"
    },
    {
      "skill_id": "skl_7vB4n2",
      "name": "thumbnail-design",
      "source": "inline",
      "description": "Design high-CTR video thumbnails"
    }
  ]
}

Get a skill

GET /v1/deployments/:deployment_id/skills/:skill_id
Returns the skill metadata plus its full SKILL.md content.
const skill = await herm.skills.get("dep_7xK9s2", "skl_7vB4n2");

console.log(skill.content);

Update a skill

PUT /v1/deployments/:deployment_id/skills/:skill_id
Replaces the skill’s content (or source). For url skills, calling this re-fetches the URL.
await herm.skills.update("dep_7xK9s2", "skl_7vB4n2", {
  source: "inline",
  content:
    "---\nname: thumbnail-design\ndescription: Design high-CTR video thumbnails\n---\n# Thumbnail Design (v2)\n...",
});

Remove a skill

DELETE /v1/deployments/:deployment_id/skills/:skill_id
await herm.skills.remove("dep_7xK9s2", "skl_7vB4n2");

Errors

StatusErrorWhen
400validation_errorInvalid request body
404not_foundDeployment or skill does not exist
422invalid_skillContent could not be fetched or parsed
See Errors for the full error reference.