---
title: "Edit Skill"
method: POST
path: "/api/skill-learning/skills/{name}/edit"
tags: ["v2", "skill-learning", "private"]
---

# Edit Skill

`POST /api/skill-learning/skills/{name}/edit`

## Request

- The document declares no server URL.
- Auth: HTTP bearer

Apply the owner's correction now; later automated changes become
proposals unless ``keep_auto_improve`` is set.

A content-check block is a domain outcome, not a transport error: the
response is 200 with ``status == "blocked_content"`` and only the
pattern class and ordinal step, so the client keeps the draft and shows
the reason without ever echoing the blocked value.

## Path parameters

- `name` string, required: Skill slug

## Query parameters

- `expert_id` string, nullable: Expert scope; omit for personal

## Request body

- EditSkillRequest
  - `description` string, required
  - `body` string, required
  - `triggers` string[]
  - `keep_auto_improve` boolean
  - `allowed_pattern_classes` string[]
  - `expected_version_id` string, nullable: The current version's id when editing began; null only for a skill with no tracked version. A different current version at save time is a conflict and the edit is not applied.

## Response `200`

Successful Response

- LearningActionResult
  - `status` string, required
  - `status_label` string, required
  - `reason` string
  - `version` SkillVersionSummary
    - `id` string, required
    - `skill_name` string, required
    - `expert_id` string, nullable, required
    - `version` integer, required
    - `origin` string, required
    - `origin_label` string, required
    - `summary` string, required
    - `state` string, required
    - `state_label` string, required
    - `state_reason` string, required
    - `created_at` string, date-time, required
    - `description` string, required
    - `triggers` string[]
    - `body` string, nullable
    - `files` SkillVersionFileSummary[], nullable
      - `relative_path` string, required
      - `size_bytes` integer, required
      - `sha256` string, required
      - `is_executable` boolean, required
      - `content` string, nullable
      - `content_truncated` boolean
    - `evidence` LearningEvidenceLabel[]
      - `kind` string, required
      - `label` string, required
      - `ref` string
    - `limits` string[]
    - `sources` LearningSourceLink[]
      - `source_id` string, required
      - `source_kind` string, required
      - `revision` string, required
      - `accessible` boolean, required
      - `source_ref` string, nullable
      - `title` string, nullable
      - `url` string, nullable
      - `excluded` boolean
    - `use` SkillUseSummary: Reuse evidence for exactly one version. Loads are loads; an owner's report is a report; only a recorded check can say "passed checks".
      - `version_id` string, nullable
      - `loads` integer
      - `checks_passed` integer
      - `checks_failed` integer
      - `reported_working` integer
      - `reported_failed` integer
      - `stopped_mid_use` integer
      - `unknown` integer
      - `reuse_label` string
    - `base_version_id` string, nullable
    - `restored_from_version_id` string, nullable
    - `blocked_pattern_class` string, nullable
    - `blocked_step` string, nullable
  - `pattern_class` string, nullable
  - `blocked_step` string, nullable

## Other responses

- `401`: Authentication required
- `422`: Validation Error

## Changes

- **2026-10-16** `ad42c53e22ca`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server/changes/api/skill-learning/skills/:name/edit/post.md)

---

[API](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server.md) - [All operations](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server/llms.txt) - [OpenAPI document](https://skmtc.dev/significant-gravitas/apis/autogpt-agent-server/revisions/c508818c16ad?raw)
