---
title: 技能
url: https://platform.claude.com/docs/zh-TW/managed-agents/skills
description: 在 Claude Managed Agents 中將預先建置或自訂的技能附加到代理程式，為其提供可重複使用、以檔案系統為基礎的專業知識，以處理特定領域的工作流程。
featureMetadata:
  topic:
    title: Managed Agents
    url: https://platform.claude.com/docs/en/managed-agents/overview
  status: beta
  betaHeader: managed-agents-2026-04-01
---

「Skills」（技能）是可重複使用、以檔案系統為基礎的資源，能為您的代理程式提供特定領域的專業知識：工作流程、上下文與最佳實務，將通用型代理程式轉變為專家。您新增的每個技能都會對工作階段的「context window」（上下文視窗）產生少量成本，加入有助於模型使用該技能的指示與中繼資料。請參閱 [Agent Skills](https://platform.claude.com/docs/zh-TW/agents-and-tools/agent-skills/overview) 概覽以深入了解。

技能可透過兩種方式提供給您的代理程式：透過代理程式的 `skills` (csharp, go: `Skills`) 陣列附加，或[從掛載在工作階段上的 GitHub 儲存庫載入](https://platform.claude.com/docs/zh-TW/managed-agents/skills#load-skills-from-a-github-repository)。附加的技能分為兩種類型。所有技能的運作方式都相同：當技能與任務相關時，您的代理程式會自動呼叫它們。

* **預先建置的 Anthropic 技能：** 常見的文件任務，例如 PowerPoint、Excel、Word 與 PDF 處理（`pptx`、`xlsx`、`docx`、`pdf`）。
* **自訂技能：** 由您撰寫並上傳至工作區的技能。

若要了解如何撰寫自訂技能，請參閱 [Agent Skills](https://platform.claude.com/docs/zh-TW/agents-and-tools/agent-skills/overview) 與[技能撰寫最佳實務](https://platform.claude.com/docs/zh-TW/agents-and-tools/agent-skills/best-practices)。若要將自訂技能上傳至您的工作區，請參閱[建立自訂技能](https://platform.claude.com/docs/zh-TW/managed-agents/skills#create-a-custom-skill)。

## 建立自訂技能

自訂技能是一個包含 `SKILL.md` 檔案及任何支援檔案的目錄，以 zip 壓縮檔或個別檔案的形式上傳至您的工作區。建立技能後會傳回 `skill_*` ID，您在將其附加到代理程式時會參照此 ID。Anthropic 預先建置的技能已在每個工作區中提供，不需要此步驟。若只要使用預先建置的技能，請跳至[將技能附加到代理程式](https://platform.claude.com/docs/zh-TW/managed-agents/skills#attach-skills-to-an-agent)。

這些範例省略了選用的 `display_name` (java, php: `displayName`; csharp, go: `DisplayName`) 欄位，因此技能的顯示名稱會從 `SKILL.md` 中的 `name` 欄位衍生。明確指定的 `display_name` (java, php: `displayName`; csharp, go: `DisplayName`) 最多可達 255 個字元，且不需要在您的工作區內唯一。

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/skills" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -F "files[]=@example_skill.zip"
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply skills/pr-summary
    ```

    <File filename="skills/pr-summary/SKILL.md">
      ```markdown
      ---
      name: pr-summary
      description: Summarize a pull request's changes and risks in the team's review format.
      ---

      # PR summary

      List what changed, why, and anything a reviewer should look at closely, in three short sections.
      ```
    </File>

    [`ant apply`](https://platform.claude.com/docs/zh-TW/cli-sdks-libraries/cli/apply) 會上傳 `skills/pr-summary` 目錄、印出新技能的 ID，並將其記錄在 `claude-lock.json` 中。請提交 `claude-lock.json`，這樣下一次執行 `ant apply` 時會將您的編輯上傳為新版本，而不是建立第二個技能。
  </CodeGroupItem>

  ```python Python
  import anthropic
  from anthropic.lib import files_from_dir

  client = anthropic.Anthropic()

  skill = client.skills.create(
      files=files_from_dir("example_skill"),
  )

  print(f"Created skill: {skill.id}")
  print(f"Latest version: {skill.latest_version_id}")
  ```

  ```typescript TypeScript
  import Anthropic from "@anthropic-ai/sdk";
  import { toFile } from "@anthropic-ai/sdk";
  import fs from "node:fs";

  const client = new Anthropic();

  const skill = await client.skills.create({
    files: [await toFile(fs.createReadStream("example_skill.zip"), "example_skill.zip")]
  });

  console.log(`Created skill: ${skill.id}`);
  console.log(`Latest version: ${skill.latest_version_id}`);
  ```

  ```csharp C#
  using System.IO;
  using Anthropic;
  using Anthropic.Models.Skills;

  AnthropicClient client = new();

  var parameters = new SkillCreateParams
  {
      Files = [
          new FileStream("example_skill.zip", FileMode.Open, FileAccess.Read)
      ],
  };

  var skill = await client.Skills.Create(parameters);

  Console.WriteLine($"Created skill: {skill.ID}");
  Console.WriteLine($"Latest version: {skill.LatestVersionID}");
  ```

  ```go Go
  package main

  import (
  	"context"
  	"fmt"
  	"io"
  	"log"
  	"os"

  	"github.com/anthropics/anthropic-sdk-go"
  )

  func main() {
  	client := anthropic.NewClient()

  	zipFile, err := os.Open("example_skill.zip")
  	if err != nil {
  		log.Fatal(err)
  	}
  	defer zipFile.Close()

  	skill, err := client.Skills.New(context.TODO(), anthropic.SkillNewParams{
  		Files: []io.Reader{zipFile},
  	})
  	if err != nil {
  		log.Fatal(err)
  	}

  	fmt.Printf("Created skill: %s\n", skill.ID)
  	fmt.Printf("Latest version: %s\n", skill.LatestVersionID)
  }
  ```

  ```java Java
  import com.anthropic.client.AnthropicClient;
  import com.anthropic.client.okhttp.AnthropicOkHttpClient;
  import com.anthropic.core.MultipartField;
  import com.anthropic.models.skills.Skill;
  import com.anthropic.models.skills.SkillCreateParams;
  import java.io.IOException;
  import java.io.InputStream;
  import java.nio.file.Files;
  import java.nio.file.Path;

  void main() throws IOException {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      SkillCreateParams params = SkillCreateParams.builder()
          .addFile(MultipartField.<InputStream>builder()
              .value(Files.newInputStream(Path.of("example_skill.zip")))
              .filename("example_skill.zip")
              .contentType("application/zip")
              .build())
          .build();

      Skill skill = client.skills().create(params);

      IO.println("Created skill: " + skill.id());
      IO.println("Latest version: " + skill.latestVersionId());
  }
  ```

  ```php PHP
  use Anthropic\Client;
  use Anthropic\Core\FileParam;

  $client = new Client();

  $skill = $client->skills->create(
      files: [
          FileParam::fromResource(fopen('example_skill.zip', 'r')),
      ],
  );

  echo "Created skill: {$skill->id}\n";
  echo "Latest version: {$skill->latestVersionID}\n";
  ```

  ```ruby Ruby
  require "anthropic"

  client = Anthropic::Client.new

  skill = client.skills.create(
    files: [
      File.open("example_skill.zip", "rb")
    ]
  )

  puts "Created skill: #{skill.id}"
  puts "Latest version: #{skill.latest_version_id}"
  ```
</CodeGroup>

若要列出、擷取、刪除自訂技能及管理其版本，請參閱[管理自訂技能](https://platform.claude.com/docs/zh-TW/build-with-claude/skills-guide#managing-custom-skills)。如需完整的請求與回應結構描述，請參閱[建立技能 API 參考](https://platform.claude.com/docs/zh-TW/api/skills/create)。技能套件會直接上傳至 Skills API，而非透過 [Files API](https://platform.claude.com/docs/zh-TW/build-with-claude/files)。

## 將技能附加到代理程式

在建立代理程式時附加技能。每個[工作階段](https://platform.claude.com/docs/zh-TW/managed-agents/sessions)最多支援 500 個技能，以工作階段中所有代理程式去除重複後的集合計算（請參閱[多代理程式協調](https://platform.claude.com/docs/zh-TW/managed-agents/multiagent-orchestration)）。

<Note>
  掛載更多技能會增加工作階段沙箱啟動所需的時間。請僅附加每個代理程式執行其任務所需的技能。
</Note>

`skills` (csharp, go: `Skills`) 陣列中的每個項目使用以下欄位：

| 欄位                                                                  | 說明                                                                                                                                                                       |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `type` (csharp, go: `Type`)                                         | 預先建置的技能使用 `anthropic`，工作區撰寫的技能使用 `custom`。                                                                                                                               |
| `skill_id` (java: `skillId`; php: `skillID`; csharp, go: `SkillID`) | 技能識別碼。對於 Anthropic 技能，請使用簡短名稱（例如 `xlsx`）。對於自訂技能，請使用建立時傳回的 `skill_*` ID（請參閱[建立自訂技能](https://platform.claude.com/docs/zh-TW/managed-agents/skills#create-a-custom-skill)）。 |
| `version` (csharp, go: `Version`)                                   | 固定為特定版本或使用 `latest`。選用。省略時預設為 `latest`。適用於 Anthropic 技能與自訂技能。                                                                                                            |

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  agent=$(curl -sS https://api.anthropic.com/v1/agents \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01" \
    --json '{
      "name": "Financial Analyst",
      "model": "claude-opus-5-5",
      "system": "You are a financial analysis agent.",
      "skills": [
        {"type": "anthropic", "skill_id": "xlsx"},
        {"type": "custom", "skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv", "version": "latest"}
      ]
    }'
  )
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply agent.md
    ```

    <File filename="agent.md">
      ```markdown
      ---
      name: Financial Analyst
      model: claude-opus-5-5
      skills:
        - type: anthropic
          skill_id: xlsx
        - type: custom
          skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
          version: latest
      ---

      You are a financial analysis agent.
      ```
    </File>
  </CodeGroupItem>

  ```python Python
  agent = client.beta.agents.create(
      name="Financial Analyst",
      model="claude-opus-5-5",
      system="You are a financial analysis agent.",
      skills=[
          {
              "type": "anthropic",
              "skill_id": "xlsx",
          },
          {
              "type": "custom",
              "skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
              "version": "latest",
          },
      ],
  )
  ```

  ```typescript TypeScript
  const agent = await client.beta.agents.create({
    name: "Financial Analyst",
    model: "claude-opus-5-5",
    system: "You are a financial analysis agent.",
    skills: [
      {
        type: "anthropic",
        skill_id: "xlsx"
      },
      {
        type: "custom",
        skill_id: "skill_01AbCdEfGhIjKlMnOpQrStUv",
        version: "latest"
      }
    ]
  });
  ```

  ```csharp C#
  using Anthropic.Models.Beta.Agents;

  var agent = await client.Beta.Agents.Create(new()
  {
      Name = "Financial Analyst",
      Model = BetaManagedAgentsModel.ClaudeOpus5_5,
      System = "You are a financial analysis agent.",
      Skills =
      [
          new BetaManagedAgentsAnthropicSkillParams { Type = BetaManagedAgentsAnthropicSkillParamsType.Anthropic, SkillID = "xlsx" },
          new BetaManagedAgentsCustomSkillParams { Type = BetaManagedAgentsCustomSkillParamsType.Custom, SkillID = "skill_01AbCdEfGhIjKlMnOpQrStUv", Version = "latest" },
      ],
  });
  ```

  ```go Go
  agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
  	Name: "Financial Analyst",
  	Model: anthropic.BetaManagedAgentsModelConfigParams{
  		ID: anthropic.BetaManagedAgentsModelClaudeOpus5_5,
  	},
  	System: anthropic.String("You are a financial analysis agent."),
  	Skills: []anthropic.BetaManagedAgentsSkillParamsUnion{
  		{OfAnthropic: &anthropic.BetaManagedAgentsAnthropicSkillParams{
  			SkillID: "xlsx",
  			Type:    anthropic.BetaManagedAgentsAnthropicSkillParamsTypeAnthropic,
  		}},
  		{OfCustom: &anthropic.BetaManagedAgentsCustomSkillParams{
  			SkillID: "skill_01AbCdEfGhIjKlMnOpQrStUv",
  			Type:    anthropic.BetaManagedAgentsCustomSkillParamsTypeCustom,
  			Version: anthropic.String("latest"),
  		}},
  	},
  })
  if err != nil {
  	panic(err)
  }
  _ = agent
  ```

  ```java Java
  import com.anthropic.models.beta.agents.*;

  var agent = client.beta().agents().create(
      AgentCreateParams.builder()
          .name("Financial Analyst")
          .model(BetaManagedAgentsModel.CLAUDE_OPUS_5_5)
          .system("You are a financial analysis agent.")
          .addSkill(
              BetaManagedAgentsAnthropicSkillParams.builder()
                  .type(BetaManagedAgentsAnthropicSkillParams.Type.ANTHROPIC)
                  .skillId("xlsx")
                  .build()
          )
          .addSkill(
              BetaManagedAgentsCustomSkillParams.builder()
                  .type(BetaManagedAgentsCustomSkillParams.Type.CUSTOM)
                  .skillId("skill_01AbCdEfGhIjKlMnOpQrStUv")
                  .version("latest")
                  .build()
          )
          .build()
  );
  ```

  ```php PHP
  $agent = $client->beta->agents->create(
      name: 'Financial Analyst',
      model: 'claude-opus-5-5',
      system: 'You are a financial analysis agent.',
      skills: [
          ['type' => 'anthropic', 'skillID' => 'xlsx'],
          ['type' => 'custom', 'skillID' => 'skill_01AbCdEfGhIjKlMnOpQrStUv', 'version' => 'latest'],
      ],
  );
  ```

  ```ruby Ruby
  agent = client.beta.agents.create(
    name: "Financial Analyst",
    model: "claude-opus-5-5",
    system_: "You are a financial analysis agent.",
    skills: [
      {type: "anthropic", skill_id: "xlsx"},
      {type: "custom", skill_id: "skill_01AbCdEfGhIjKlMnOpQrStUv", version: "latest"}
    ]
  )
  ```
</CodeGroup>

## 從 GitHub 儲存庫載入技能

技能也可以存放在您的程式碼庫中。當工作階段透過 [`github_repository` 資源](https://platform.claude.com/docs/zh-TW/managed-agents/github)掛載儲存庫時，系統會在工作階段啟動時掃描儲存庫根目錄的 `.claude/skills` 目錄，在其中找到的每個技能都會提供給代理程式使用。不需要上傳，也不需要在代理程式的 `skills` (csharp, go: `Skills`) 陣列中新增項目。代理程式會看到每個已探索到的技能的名稱、說明及其在沙箱中的路徑，並在任務相符時讀取該技能的 `SKILL.md`，包括該技能隨附的任何指令碼與資源。探索仰賴[代理程式工具集](https://platform.claude.com/docs/zh-TW/managed-agents/tools)中代理程式的 `read` 工具，該工具預設為啟用；停用 `read` 的代理程式不會載入儲存庫技能。

<Warning>
  儲存庫技能是代理程式的指示，因此掛載的儲存庫屬於您代理程式信任邊界的一部分。任何能夠提交至該儲存庫的人（已合併的外部 pull request、遭入侵的相依套件、貢獻者）都可以新增或變更技能，平台會在工作階段啟動時載入它而不經過審查步驟，而 `bash` 與 `web_fetch` 等工作階段工具則讓這些指示具有實際的影響範圍。請僅掛載您信任的儲存庫，並在掛載接受外部貢獻的儲存庫之前先審查 `.claude/skills`。
</Warning>

<Note>
  儲存庫技能探索在雲端沙箱中執行。[自行託管的沙箱](https://platform.claude.com/docs/zh-TW/managed-agents/self-hosted-sandboxes)不支援 GitHub 儲存庫資源。
</Note>

探索會在確切的 `.claude/skills/<skill-name>/SKILL.md` 位置尋找技能，即儲存庫根目錄下一層目錄深度：

* `your-repo/`

  * `.claude/`

    * `skills/`

      * `code-review/`
        * `SKILL.md`

      * `release-process/`

        * `SKILL.md`
        * `scripts/`
          * `run_checks.sh`

  * `src/`

不符合此配置的位置不會在工作階段啟動時被探索到：

* `.claude/skills/SKILL.md`：外層沒有技能目錄的 `SKILL.md`
* `.claude/skills/tools/code-review/SKILL.md`：巢狀深度超過一層目錄
* `skills/code-review/SKILL.md`：位於 `.claude` 之外的 `skills` 目錄

位於儲存庫其他位置的 `.claude/skills` 目錄（例如套件子目錄內）不會在工作階段啟動時公告；當代理程式讀取該子樹下的檔案時，這些技能仍可能浮現。

儲存庫技能使用與您上傳的自訂技能相同的 `SKILL.md` 格式。如需格式與撰寫指引，請參閱 [Agent Skills](https://platform.claude.com/docs/zh-TW/agents-and-tools/agent-skills/overview) 與[技能撰寫最佳實務](https://platform.claude.com/docs/zh-TW/agents-and-tools/agent-skills/best-practices)。

若要從儲存庫載入技能，請建立掛載該儲存庫的工作階段。這與[存取 GitHub](https://platform.claude.com/docs/zh-TW/managed-agents/github#token-permissions) 中顯示的請求相同；`mount_path` (java, php: `mountPath`; csharp, go: `MountPath`) 為選用，預設為 `/workspace/<repo-name>`：

<CodeGroup>
  ```bash cURL
  curl -fsS https://api.anthropic.com/v1/sessions \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01" \
    -H "content-type: application/json" \
    -d @- <<JSON
  {
    "agent": "$agent_id",
    "environment_id": "$environment_id",
    "resources": [
      {
        "type": "github_repository",
        "url": "https://github.com/org/repo",
        "mount_path": "/workspace/repo",
        "authorization_token": "ghp_your_github_token"
      }
    ]
  }
  JSON
  ```

  ```bash CLI
  ant beta:sessions create \
    --agent "$AGENT_ID" \
    --environment-id "$ENVIRONMENT_ID" <<'EOF'
  resources:
    - type: github_repository
      url: https://github.com/org/repo
      mount_path: /workspace/repo
      authorization_token: ghp_your_github_token
  EOF
  ```

  ```python Python
  session = client.beta.sessions.create(
      agent=agent.id,
      environment_id=environment.id,
      resources=[
          {
              "type": "github_repository",
              "url": "https://github.com/org/repo",
              "mount_path": "/workspace/repo",
              "authorization_token": "ghp_your_github_token",
          },
      ],
  )
  ```

  ```typescript TypeScript
  const session = await client.beta.sessions.create({
    agent: agent.id,
    environment_id: environment.id,
    resources: [
      {
        type: "github_repository",
        url: "https://github.com/org/repo",
        mount_path: "/workspace/repo",
        authorization_token: "ghp_your_github_token"
      }
    ]
  });
  ```

  ```csharp C#
  var session = await client.Beta.Sessions.Create(new()
  {
      Agent = agent.ID,
      EnvironmentID = environment.ID,
      Resources =
      [
          new BetaManagedAgentsGitHubRepositoryResourceParams
          {
              Type = "github_repository",
              Url = "https://github.com/org/repo",
              MountPath = "/workspace/repo",
              AuthorizationToken = "ghp_your_github_token",
          },
      ],
  });
  ```

  ```go Go
  session, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
  	Agent:         anthropic.BetaSessionNewParamsAgentUnion{OfString: anthropic.String(agent.ID)},
  	EnvironmentID: environment.ID,
  	Resources: []anthropic.BetaSessionNewParamsResourceUnion{
  		{
  			OfGitHubRepository: &anthropic.BetaManagedAgentsGitHubRepositoryResourceParams{
  				Type:               anthropic.BetaManagedAgentsGitHubRepositoryResourceParamsTypeGitHubRepository,
  				URL:                "https://github.com/org/repo",
  				MountPath:          anthropic.String("/workspace/repo"),
  				AuthorizationToken: "ghp_your_github_token",
  			},
  		},
  	},
  })
  if err != nil {
  	panic(err)
  }
  ```

  ```java Java
  var session = client.beta().sessions().create(SessionCreateParams.builder()
      .agent(agent.id())
      .environmentId(environment.id())
      .addResource(BetaManagedAgentsGitHubRepositoryResourceParams.builder()
          .type(BetaManagedAgentsGitHubRepositoryResourceParams.Type.GITHUB_REPOSITORY)
          .url("https://github.com/org/repo")
          .mountPath("/workspace/repo")
          .authorizationToken("ghp_your_github_token")
          .build())
      .build());
  ```

  ```php PHP
  $session = $client->beta->sessions->create(
      agent: $agent->id,
      environmentID: $environment->id,
      resources: [
          [
              'type' => 'github_repository',
              'url' => 'https://github.com/org/repo',
              'mountPath' => '/workspace/repo',
              'authorizationToken' => 'ghp_your_github_token',
          ],
      ],
  );
  ```

  ```ruby Ruby
  session = client.beta.sessions.create(
    agent: agent.id,
    environment_id: environment.id,
    resources: [
      {
        type: "github_repository",
        url: "https://github.com/org/repo",
        mount_path: "/workspace/repo",
        authorization_token: "ghp_your_github_token"
      }
    ]
  )
  ```
</CodeGroup>

對於私有儲存庫，資源的 `authorization_token` (java, php: `authorizationToken`; csharp, go: `AuthorizationToken`) 必須具有該儲存庫的存取權。這與任何儲存庫掛載所使用的個人存取權杖流程相同；請參閱[存取 GitHub](https://platform.claude.com/docs/zh-TW/managed-agents/github#token-permissions)。

已探索到的技能會依循儲存庫的簽出狀態：若資源有設定 `checkout` (csharp, go: `Checkout`) 分支或提交，則使用該分支或提交，否則使用儲存庫的預設分支。掃描只會在工作階段啟動時執行一次。工作階段進行中推送的提交不會被納入；若要載入更新後的技能，請啟動新的工作階段。

儲存庫技能可與透過代理程式的 `skills` (csharp, go: `Skills`) 陣列附加的技能一起運作。如果儲存庫技能與已附加的技能或來自另一個已掛載儲存庫的技能同名，兩者都可使用；每個技能都會以其各自的路徑公告。

## 後續步驟

<CardGroup cols={2}>
  <Card title="雲端環境設定" icon="settings" href="https://platform.claude.com/docs/zh-TW/managed-agents/environments">
    為您的工作階段自訂雲端沙箱。
  </Card>

  <Card title="透過 API 使用 Agent Skills" icon="code" href="https://platform.claude.com/docs/zh-TW/build-with-claude/skills-guide">
    了解如何透過 API 使用 Agent Skills 擴充 Claude 的能力。
  </Card>

  <Card title="Files API" icon="file" href="https://platform.claude.com/docs/zh-TW/build-with-claude/files">
    上傳檔案一次，即可在多個 API 請求中參照。
  </Card>

  <Card title="在 API 中開始使用 Agent Skills" icon="graduation-cap" href="https://platform.claude.com/docs/zh-TW/agents-and-tools/agent-skills/quickstart">
    了解如何在 10 分鐘內使用 Agent Skills 搭配 Claude API 建立文件。
  </Card>
</CardGroup>
