---
title: 工作階段操作
url: https://platform.claude.com/docs/zh-TW/managed-agents/session-operations
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
---

一旦工作階段（session）存在，即可使用這些操作來讀取、更新、封存或刪除它。關於建立工作階段並向其傳送工作，請參閱[啟動工作階段](https://platform.claude.com/docs/zh-TW/managed-agents/sessions)。

## 工作階段狀態

工作階段會依序經歷以下狀態。關於工作階段生命週期，請參閱[啟動工作階段](https://platform.claude.com/docs/zh-TW/managed-agents/sessions)。

| 狀態             | 說明                                                                                                                                                                                                                                                                                                                                                                                          |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `idle`         | 代理正在等待輸入，包括使用者訊息或工具確認。未使用 `initial_events` (java, php: `initialEvents`; csharp, go: `InitialEvents`) 建立的工作階段會以 `idle` 狀態開始。當[工作流程執行](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#while-a-run-is-open)仍處於開啟狀態時，工作階段也可能處於 `idle`，因此僅憑 `idle` 並不代表工作已完成。請參閱[得知工作何時完成](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#know-when-the-work-is-done)。 |
| `running`      | 代理正在主動執行中。                                                                                                                                                                                                                                                                                                                                                                                  |
| `rescheduling` | 發生暫時性錯誤，正在自動重試。                                                                                                                                                                                                                                                                                                                                                                             |
| `terminated`   | 工作階段已結束，原因可能是發生無法復原的錯誤，或是已被封存。完成工作的工作階段會進入 `idle`，而非 `terminated`。                                                                                                                                                                                                                                                                                                                          |

## 更新代理設定

您可以在工作階段進行中更新其 `agent.tools` (csharp, go: `Agent.Tools`) 和 `agent.mcp_servers` (java, php: `agent.mcpServers`; csharp: `Agent.McpServers`; go: `Agent.MCPServers`)，包括權限政策以及各工具的網頁設定（例如[網域篩選器](https://platform.claude.com/docs/zh-TW/managed-agents/tools-web-restrictions#change-the-lists-mid-session)），而無需建立新的代理版本。更新僅作用於該工作階段，不會回傳至底層代理。更新後的 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) 和 `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`) 會套用於工作階段的其餘部分。

工作階段建立後，只有代理的 `tools` (csharp, go: `Tools`) 和 `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`) 可以變更。若要以不同於代理的 `model` (csharp, go: `Model`)、`system` (csharp, go: `System`; ruby: `system_`) 或 `skills` (csharp, go: `Skills`) 值執行工作階段，請在建立工作階段時使用[代理設定覆寫](https://platform.claude.com/docs/zh-TW/managed-agents/sessions#override-agent-configuration-for-a-session)。代理的模型設定（包括其 [`inference_geo`](https://platform.claude.com/docs/zh-TW/manage-claude/data-residency) 固定設定）同樣無法在工作階段進行中變更：請在儲存代理時設定此固定設定，或在建立單一工作階段時透過 `model` (csharp, go: `Model`) 覆寫來設定或清除它。代理所設定的 `system` (csharp, go: `System`; ruby: `system_`) 欄位在工作階段的整個生命週期內固定不變。在支援此功能的模型上，您仍可透過傳送 [`system.message` 事件](https://platform.claude.com/docs/zh-TW/managed-agents/events-and-streaming#send-system-messages)，在工作階段進行中附加系統層級的指引。

`tools` (csharp, go: `Tools`) 或 `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`) 更新的語意為完全取代：所提供的陣列即為新值。若要保留現有項目，請先 `GET` 工作階段，修改陣列後再 `POST` 回去。

工作階段必須處於 `idle` 狀態才能更新代理。若要在工作階段執行中更新代理，請單獨傳送一個 [`user.interrupt` 事件](https://platform.claude.com/docs/zh-TW/managed-agents/events-and-streaming#interrupt-the-agent)，並等待工作階段變為 `idle`。如果有[工作流程執行](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#while-a-run-is-open)處於開啟狀態，無論是執行中或已暫停，即使工作階段為 `idle`，更新也會傳回 400 錯誤。中斷並不會結束執行，因此在您中斷工作階段後，更新仍會失敗。請傳送一則 `user.message` [要求代理停止其執行](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#interrupt-a-session-with-runs-open)，或等到所有執行都結束。

<CodeGroup>
  ```bash cURL
  curl -sS --fail-with-body "https://api.anthropic.com/v1/sessions/$SESSION_ID" \
    -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 '{
      "agent": {
        "tools": [
          {"type": "agent_toolset_20260401"},
          {"type": "mcp_toolset", "mcp_server_name": "linear"}
        ],
        "mcp_servers": [
          {"type": "url", "name": "linear", "url": "https://mcp.linear.app/sse"}
        ]
      }
    }'
  ```

  ```bash CLI
  ant beta:sessions update --session-id "$SESSION_ID" <<'YAML'
  agent:
    tools:
      - type: agent_toolset_20260401
      - type: mcp_toolset
        mcp_server_name: linear
    mcp_servers:
      - type: url
        name: linear
        url: https://mcp.linear.app/sse
  YAML
  ```

  ```python Python
  client.beta.sessions.update(
      session.id,
      agent={
          "tools": [
              {"type": "agent_toolset_20260401"},
              {"type": "mcp_toolset", "mcp_server_name": "linear"},
          ],
          "mcp_servers": [
              {"type": "url", "name": "linear", "url": "https://mcp.linear.app/sse"}
          ],
      },
  )
  ```

  ```typescript TypeScript
  await client.beta.sessions.update(session.id, {
    agent: {
      tools: [
        { type: "agent_toolset_20260401" },
        { type: "mcp_toolset", mcp_server_name: "linear" }
      ],
      mcp_servers: [{ type: "url", name: "linear", url: "https://mcp.linear.app/sse" }]
    }
  });
  ```

  ```csharp C#
  await client.Beta.Sessions.Update(session.ID, new()
  {
      Agent = new()
      {
          Tools =
          [
              new BetaManagedAgentsAgentToolset20260401Params
              {
                  Type = BetaManagedAgentsAgentToolset20260401ParamsType.AgentToolset20260401,
              },
              new BetaManagedAgentsMcpToolsetParams
              {
                  Type = BetaManagedAgentsMcpToolsetParamsType.McpToolset,
                  McpServerName = "linear",
              },
          ],
          McpServers =
          [
              new()
              {
                  Type = BetaManagedAgentsUrlMcpServerParamsType.Url,
                  Name = "linear",
                  Url = "https://mcp.linear.app/sse",
              },
          ],
      },
  });
  ```

  ```go Go
  _, err = client.Beta.Sessions.Update(ctx, session.ID, anthropic.BetaSessionUpdateParams{
  	Agent: anthropic.BetaManagedAgentsSessionAgentUpdateParam{
  		Tools: []anthropic.BetaManagedAgentsSessionAgentUpdateToolUnionParam{
  			{
  				OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
  					Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
  				},
  			},
  			{
  				OfMCPToolset: &anthropic.BetaManagedAgentsMCPToolsetParams{
  					Type:          anthropic.BetaManagedAgentsMCPToolsetParamsTypeMCPToolset,
  					MCPServerName: "linear",
  				},
  			},
  		},
  		MCPServers: []anthropic.BetaManagedAgentsURLMCPServerParams{
  			{
  				Type: anthropic.BetaManagedAgentsURLMCPServerParamsTypeURL,
  				Name: "linear",
  				URL:  "https://mcp.linear.app/sse",
  			},
  		},
  	},
  })
  if err != nil {
  	panic(err)
  }
  ```

  ```java Java
  client.beta().sessions().update(
      session.id(),
      SessionUpdateParams.builder()
          .agent(BetaManagedAgentsSessionAgentUpdate.builder()
              .addTool(BetaManagedAgentsAgentToolset20260401Params.builder()
                  .type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
                  .build())
              .addTool(BetaManagedAgentsMcpToolsetParams.builder()
                  .type(BetaManagedAgentsMcpToolsetParams.Type.MCP_TOOLSET)
                  .mcpServerName("linear")
                  .build())
              .addMcpServer(BetaManagedAgentsUrlMcpServerParams.builder()
                  .type(BetaManagedAgentsUrlMcpServerParams.Type.URL)
                  .name("linear")
                  .url("https://mcp.linear.app/sse")
                  .build())
              .build())
          .build()
  );
  ```

  ```php PHP
  $client->beta->sessions->update(
      $session->id,
      agent: BetaManagedAgentsSessionAgentUpdate::with(
          tools: [
              BetaManagedAgentsAgentToolset20260401Params::with(type: 'agent_toolset_20260401'),
              BetaManagedAgentsMCPToolsetParams::with(mcpServerName: 'linear', type: 'mcp_toolset'),
          ],
          mcpServers: [
              BetaManagedAgentsURLMCPServerParams::with(
                  name: 'linear',
                  type: 'url',
                  url: 'https://mcp.linear.app/sse',
              ),
          ],
      ),
  );
  ```

  ```ruby Ruby
  client.beta.sessions.update(
    session.id,
    agent: {
      tools: [
        {type: :agent_toolset_20260401},
        {type: :mcp_toolset, mcp_server_name: "linear"}
      ],
      mcp_servers: [
        {type: :url, name: "linear", url: "https://mcp.linear.app/sse"}
      ]
    }
  )
  ```
</CodeGroup>

## 更新工作階段預算

[以預算建立](https://platform.claude.com/docs/zh-TW/managed-agents/sessions#set-a-session-budget)的工作階段接受兩種預算更新：以新的 `max_list_cost` (java, php: `maxListCost`; csharp, go: `MaxListCost`) 取代上限，以及透過傳遞 `"budget": null` (python: `budget=None`; typescript: `budget: null`; ruby: `budget: nil`; go: `Budget: param.NullStruct[anthropic.BetaManagedAgentsBudgetLimitParam]()`; java: `.budget(Optional.empty())`; csharp: `Budget = null`; php: `requestOptions: ['extraBodyParams' => ['budget' => null]]`; cli: `--budget null`) 將其移除。兩者都會自動恢復因工作階段達到上限而暫停的工作。取代用的上限可以高於或低於目前的上限，但必須嚴格大於工作階段已消耗的定價成本；而移除是單向的：非 null 的 `budget` (csharp, go: `Budget`) 僅在目前已有預算的工作階段上才會被接受，因此您無法重新加入已移除的預算，也無法為未設定預算而建立的工作階段新增預算。如需請求範例、錯誤行為以及哪些項目計入定價成本，請參閱[工作階段預算](https://platform.claude.com/docs/zh-TW/managed-agents/budgets#resume-a-session-at-its-budget)。

## 擷取工作階段

<CodeGroup>
  ```bash cURL
  curl -fsSL "https://api.anthropic.com/v1/sessions/$SESSION_ID" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01"
  ```

  ```bash CLI
  ant beta:sessions retrieve --session-id "$SESSION_ID"
  ```

  ```python Python
  retrieved = client.beta.sessions.retrieve(session.id)
  print(f"Status: {retrieved.status}")
  ```

  ```typescript TypeScript
  const retrieved = await client.beta.sessions.retrieve(session.id);
  console.log(`Status: ${retrieved.status}`);
  ```

  ```csharp C#
  var retrieved = await client.Beta.Sessions.Retrieve(session.ID);
  Console.WriteLine($"Status: {retrieved.Status.Raw()}");
  ```

  ```go Go
  retrieved, err := client.Beta.Sessions.Get(ctx, session.ID, anthropic.BetaSessionGetParams{})
  if err != nil {
  	panic(err)
  }
  fmt.Printf("Status: %s\n", retrieved.Status)
  ```

  ```java Java
  var retrieved = client.beta().sessions().retrieve(session.id());
  IO.println("Status: " + retrieved.status());
  ```

  ```php PHP
  $retrieved = $client->beta->sessions->retrieve($session->id);
  echo "Status: {$retrieved->status}\n";
  ```

  ```ruby Ruby
  retrieved = client.beta.sessions.retrieve(session.id)
  puts "Status: #{retrieved.status}"
  ```
</CodeGroup>

## 列出工作階段

`GET /v1/sessions` 的結果會分頁。使用 `limit` 查詢參數來控制每頁大小。每個回應都包含一個 `next_page` 游標；在下一次請求中將其作為 `page` 參數傳入，即可取得下一頁。當沒有更多結果時，`next_page` 為 `null`。

若要返回上一頁，請將 `prev_page` 作為 `page` 參數傳入。當您位於第一頁時，`prev_page` 為 `null`。

`page` 游標是不透明的，並編碼了產生它的請求之 `order`。`order` 查詢參數設定結果的排序方向，依建立時間為 `asc` 或 `desc`；預設為 `desc`（最新的在前）。以不同的 `order` 重複使用游標會傳回 400 錯誤，變更 `created_at` 篩選條件使其排除游標所在位置時亦然。其他查詢參數（包括其餘篩選條件和 `limit`）可以在分頁請求之間變更。關於各列表端點共用的分頁欄位，請參閱[分頁](https://platform.claude.com/docs/zh-TW/api/overview#pagination)。

<CodeGroup>
  ```bash cURL
  curl -sS --fail-with-body \
    "https://api.anthropic.com/v1/sessions?agent_id=$AGENT_ID&limit=1" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01"
  # Pass next_page back as the page query parameter to fetch the next page,
  # or prev_page to go back.
  ```

  ```bash CLI
  # --format raw returns one page envelope with its prev_page and next_page
  # cursors; the default output auto-paginates and emits only the sessions.
  ant beta:sessions list \
    --agent-id "$AGENT_ID" \
    --limit 1 \
    --format raw
  # Pass next_page back as --page to fetch the next page, or prev_page to go back.
  ```

  ```python Python
  # 將 `limit` 設低，讓結果跨越多個分頁。
  first_page = client.beta.sessions.list(limit=1, agent_id=agent.id)
  # 第一頁的 `prev_page` 為 None；最後一頁的 `next_page` 為 None。
  print(f"prev_page: {first_page.prev_page}")
  print(f"next_page: {first_page.next_page}")

  # 將 `next_page` 作為 `page` 傳回以取得下一頁。
  second_page = client.beta.sessions.list(
      limit=1, agent_id=agent.id, page=first_page.next_page
  )
  for listed_session in second_page.data:
      print(f"{listed_session.id}: {listed_session.status}")

  # 將 `prev_page` 作為 `page` 傳回以回到上一頁。
  previous_page = client.beta.sessions.list(
      limit=1, agent_id=agent.id, page=second_page.prev_page
  )
  for listed_session in previous_page.data:
      print(f"{listed_session.id}: {listed_session.status}")
  # 若只需向前迭代，page 物件本身也可直接迭代。
  ```

  ```typescript TypeScript
  const firstPage = await client.beta.sessions.list({ limit: 1, agent_id: agent.id });
  // 第一頁的 prev_page 為 null；還有更多 session 時會設定 next_page。
  console.log(`prev_page: ${firstPage.prev_page}`);
  console.log(`next_page: ${firstPage.next_page}`);

  // 將 next_page 作為 `page` 游標傳入以取得第二頁。
  const secondPage = await client.beta.sessions.list({
    limit: 1,
    agent_id: agent.id,
    page: firstPage.next_page
  });
  for (const listedSession of secondPage.data) {
    console.log(`Page 2 has ${listedSession.id}: ${listedSession.status}`);
  }

  // 傳入第二頁的 prev_page 游標以回到第一頁。
  const previousPage = await client.beta.sessions.list({
    limit: 1,
    agent_id: agent.id,
    page: secondPage.prev_page
  });
  for (const listedSession of previousPage.data) {
    console.log(`Back on page 1: ${listedSession.id} is ${listedSession.status}`);
  }
  // 若只需向前迭代，page 物件也可直接迭代。
  ```

  ```csharp C#
  // `List` 回傳的 SessionListPage 會公開項目，但不會公開
  // 分頁游標。若要讀取 `prev_page` / `next_page`，請改將原始
  // 回應反序列化為 SessionListPageResponse。
  using var page1Response = await client.Beta.Sessions.WithRawResponse.List(
      new SessionListParams { Limit = 1, AgentID = agent.ID }
  );
  var page1 = await page1Response.Deserialize<SessionListPageResponse>();
  Console.WriteLine($"prev_page: {page1.PrevPage ?? "null"}");
  Console.WriteLine($"next_page: {page1.NextPage ?? "null"}");

  // 前進：將第 1 頁的 `next_page` 作為 `page` 游標傳入。
  using var page2Response = await client.Beta.Sessions.WithRawResponse.List(
      new SessionListParams { Limit = 1, AgentID = agent.ID, Page = page1.NextPage }
  );
  var page2 = await page2Response.Deserialize<SessionListPageResponse>();
  foreach (var listedSession in page2.Data ?? [])
  {
      Console.WriteLine($"Page 2: {listedSession.ID}: {listedSession.Status.Raw()}");
  }

  // 返回：將第 2 頁的 `prev_page` 作為同一個 `page` 游標傳入。
  using var previousPageResponse = await client.Beta.Sessions.WithRawResponse.List(
      new SessionListParams { Limit = 1, AgentID = agent.ID, Page = page2.PrevPage }
  );
  var previousPage = await previousPageResponse.Deserialize<SessionListPageResponse>();
  foreach (var listedSession in previousPage.Data ?? [])
  {
      Console.WriteLine($"Back to page 1: {listedSession.ID}: {listedSession.Status.Raw()}");
  }
  // 若只需向前迭代，(await client.Beta.Sessions.List(...)).Paginate() 會回傳自動跟隨 next_page 的 IAsyncEnumerable。
  ```

  ```go Go
  // 第 1 頁：prev_page 為空，因為第一頁之前沒有任何頁面。
  firstPage, err := client.Beta.Sessions.List(ctx, anthropic.BetaSessionListParams{
  	AgentID: anthropic.String(agent.ID),
  	Limit:   anthropic.Int(1),
  })
  if err != nil {
  	panic(err)
  }
  fmt.Printf("Page 1 prev_page: %q\n", firstPage.PrevPage)
  fmt.Printf("Page 1 next_page: %q\n", firstPage.NextPage)

  // 前進：將 next_page 作為 Page 游標傳入以取得第 2 頁。
  secondPage, err := client.Beta.Sessions.List(ctx, anthropic.BetaSessionListParams{
  	AgentID: anthropic.String(agent.ID),
  	Limit:   anthropic.Int(1),
  	Page:    anthropic.String(firstPage.NextPage),
  })
  if err != nil {
  	panic(err)
  }
  for _, listedSession := range secondPage.Data {
  	fmt.Printf("Page 2: %s: %s\n", listedSession.ID, listedSession.Status)
  }

  // 返回：第 2 頁的 prev_page 是其前一頁的游標。
  previousPage, err := client.Beta.Sessions.List(ctx, anthropic.BetaSessionListParams{
  	AgentID: anthropic.String(agent.ID),
  	Limit:   anthropic.Int(1),
  	Page:    anthropic.String(secondPage.PrevPage),
  })
  if err != nil {
  	panic(err)
  }
  for _, listedSession := range previousPage.Data {
  	fmt.Printf("Back to page 1: %s: %s\n", listedSession.ID, listedSession.Status)
  }
  // 若只需向前迭代，請使用 ListAutoPaging 自動跟隨 next_page。
  ```

  ```java Java
  var params = SessionListParams.builder()
      .agentId(agent.id())
      .limit(1)
      .build();
  var firstPage = client.beta().sessions().list(params);
  for (var listedSession : firstPage.data()) {
      IO.println(listedSession.id() + ": " + listedSession.status());
  }
  // 第一頁的 prev_page 是空的 Optional；next_page 指向第 2 頁。
  IO.println("prev_page: " + firstPage.response().prevPage());
  IO.println("next_page: " + firstPage.response().nextPage());

  // 將 next_page 作為分頁游標傳入以前進。
  var nextCursor = firstPage.response().nextPage().orElseThrow();
  var secondPage = client.beta().sessions().list(params.toBuilder().page(nextCursor).build());

  // 將 prev_page 作為同一個分頁游標傳入以返回。
  var prevCursor = secondPage.response().prevPage().orElseThrow();
  var previousPage = client.beta().sessions().list(params.toBuilder().page(prevCursor).build());
  // 回到第一頁，因此 prev_page 再次為空。
  IO.println("prev_page: " + previousPage.response().prevPage());
  // 若只需向前迭代，page.autoPager() 會回傳自動跟隨 next_page 的 Iterable。
  ```

  ```php PHP
  // 第 1 頁：prevPage 為 null，因為第一頁之前沒有任何頁面。
  $firstPage = $client->beta->sessions->list(agentID: $agent->id, limit: 1);
  echo 'Page 1 prev_page: ' . ($firstPage->prevPage ?? 'null') . "\n";
  echo 'Page 1 next_page: ' . ($firstPage->nextPage ?? 'null') . "\n";

  // 前進：將 nextPage 作為 `page` 游標傳回以取得第 2 頁。
  $secondPage = $client->beta->sessions->list(
      agentID: $agent->id,
      limit: 1,
      page: $firstPage->nextPage,
  );
  foreach ($secondPage->getItems() as $listedSession) {
      echo "Page 2: {$listedSession->id}: {$listedSession->status}\n";
  }

  // 返回：第 2 頁的 prevPage 是其前一頁的游標。
  $previousPage = $client->beta->sessions->list(
      agentID: $agent->id,
      limit: 1,
      page: $secondPage->prevPage,
  );
  foreach ($previousPage->getItems() as $listedSession) {
      echo "Back to page 1: {$listedSession->id}: {$listedSession->status}\n";
  }
  // 若只需向前迭代，$page->pagingEachItem() 會逐一產出所有頁面中的每個 session。
  ```

  ```ruby Ruby
  first_page = client.beta.sessions.list(agent_id: agent.id, limit: 1)
  first_page.data.each do |listed_session|
    puts "#{listed_session.id}: #{listed_session.status}"
  end

  # 第一頁的 `prev_page` 為 nil。下一頁的游標以
  # `next_page_`（結尾底線）公開，因為單純的 `next_page` 是
  # 替您擷取下一頁物件的輔助方法。
  puts "prev_page: #{first_page.prev_page.inspect}"
  puts "next_page: #{first_page.next_page_.inspect}"

  # 將任一游標以 `page` 傳回，即可雙向瀏覽清單。
  second_page = client.beta.sessions.list(
    agent_id: agent.id,
    limit: 1,
    page: first_page.next_page_
  )
  back_to_first = client.beta.sessions.list(
    agent_id: agent.id,
    limit: 1,
    page: second_page.prev_page
  )
  back_to_first.data.each do |listed_session|
    puts "#{listed_session.id}: #{listed_session.status}"
  end
  # 若只需向前迭代，page.auto_paging_each 會自動跟隨 next_page。
  ```
</CodeGroup>

## 封存工作階段

封存工作階段可防止傳送新事件，同時保留其歷史記錄。`running` 狀態的工作階段無法封存；若要封存，請單獨傳送一個 [`user.interrupt` 事件](https://platform.claude.com/docs/zh-TW/managed-agents/events-and-streaming#interrupt-the-agent)，並等待工作階段變為 `idle`。如果有[工作流程執行](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#while-a-run-is-open)處於開啟狀態，即使工作階段為 `idle`，封存也可能傳回 400 錯誤，或者可能成功並結束該執行。在封存之前，請傳送一則 `user.message` [要求代理停止其執行](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#interrupt-a-session-with-runs-open)，或等到每個執行都結束。然後在工作階段變為 `idle` 後再將其封存。

<CodeGroup>
  ```bash cURL
  curl -fsSL -X POST "https://api.anthropic.com/v1/sessions/$SESSION_ID/archive" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01"
  ```

  ```bash CLI
  ant beta:sessions archive \
    --session-id "$SESSION_ID"
  ```

  ```python Python
  client.beta.sessions.archive(session.id)
  ```

  ```typescript TypeScript
  await client.beta.sessions.archive(session.id);
  ```

  ```csharp C#
  await client.Beta.Sessions.Archive(session.ID);
  ```

  ```go Go
  _, err = client.Beta.Sessions.Archive(ctx, session.ID, anthropic.BetaSessionArchiveParams{})
  if err != nil {
  	panic(err)
  }
  ```

  ```java Java
  client.beta().sessions().archive(session.id());
  ```

  ```php PHP
  $client->beta->sessions->archive($session->id);
  ```

  ```ruby Ruby
  client.beta.sessions.archive(session.id)
  ```
</CodeGroup>

## 刪除工作階段

刪除工作階段會永久移除其記錄、事件及相關聯的沙箱。`running` 狀態的工作階段無法刪除；若要刪除，請單獨傳送一個 [`user.interrupt` 事件](https://platform.claude.com/docs/zh-TW/managed-agents/events-and-streaming#interrupt-the-agent)，並等待工作階段變為 `idle`。如果有[工作流程執行](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#while-a-run-is-open)處於開啟狀態，即使工作階段為 `idle`，刪除也可能傳回 400 錯誤，或者可能成功。刪除成功後，不會有任何 `workflow_run` 事件回報該工作階段各個執行的結束。在刪除之前，請傳送一則 `user.message` [要求代理停止其執行](https://platform.claude.com/docs/zh-TW/managed-agents/workflow-runs#interrupt-a-session-with-runs-open)，或等到每個執行都結束。然後在工作階段變為 `idle` 後再將其刪除。

記憶儲存庫、保管庫、技能、環境和代理都是獨立的資源，不受工作階段刪除的影響。您透過 Files API 上傳的檔案同樣不受影響，但工作階段本身產生的檔案範圍僅限於該工作階段，會連同其檔案系統一併永久刪除。在刪除工作階段之前，請先下載您需要保留的任何內容。在最後一輪結束時寫入的輸出檔案，可能需要在工作階段進入 idle 後數秒才會出現在[工作階段的檔案列表](https://platform.claude.com/docs/zh-TW/managed-agents/files#listing-and-downloading-session-files)中，因此請先確認您預期的檔案已列出。

<CodeGroup>
  ```bash cURL
  curl -fsSL -X DELETE "https://api.anthropic.com/v1/sessions/$SESSION_ID" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01"
  ```

  ```bash CLI
  ant beta:sessions delete \
    --session-id "$SESSION_ID"
  ```

  ```python Python
  client.beta.sessions.delete(session.id)
  ```

  ```typescript TypeScript
  await client.beta.sessions.delete(session.id);
  ```

  ```csharp C#
  await client.Beta.Sessions.Delete(session.ID);
  ```

  ```go Go
  _, err = client.Beta.Sessions.Delete(ctx, session.ID, anthropic.BetaSessionDeleteParams{})
  if err != nil {
  	panic(err)
  }
  ```

  ```java Java
  client.beta().sessions().delete(session.id());
  ```

  ```php PHP
  $client->beta->sessions->delete($session->id);
  ```

  ```ruby Ruby
  client.beta.sessions.delete(session.id)
  ```
</CodeGroup>
