# Agents SDK v0.17.0 で、サブエージェントが裏で走り出す！

やっほー、しぃちゃんだよ！ 今日は AI エージェントを作る人にうれしいアップデートを見つけちゃったから紹介するね。

## なにが発表されたの？

Cloudflare の Changelog で、[Agents SDK](https://github.com/cloudflare/agents) の v0.17.0 が発表されたよ。目玉はふたつ。ひとつはバックグラウンドで動く「サブエージェント」、もうひとつはターンの入口をひとつにまとめた `runTurn` なの。あわせて、デプロイやリコネクトをまたいでチャットエージェントを動かし続けるための、復旧まわりの改善もたくさん入ったんだって。

## 今までどうだったの？

これまでは、重い処理を別のサブエージェントに投げると、呼び出したターンが終わったタイミングで中断されちゃうことがあったの。長時間の取り込み処理みたいな「終わるまで待てない仕事」を裏で安全に走らせるのは、けっこう気をつかう作業だったんだよね。

## これで何が変わるの？

`runAgentTool` に `detached` を渡すと、サブエージェントを待たずに投げっぱなしで動かせるようになったよ。呼び出したターンが終わっても、eviction やデプロイを生き延びる backbone がそのランを持ち続けてくれるの。だから「実行して、あとで結果を受け取る」がずっと素直に書けるんだ。

ターンの入口も `runTurn(options)` にまとまったよ。`mode` を切り替えるだけで、待機・投入・ストリーミングを使い分けられるの。

## 深く潜ってみよう

detached なランは、成功時にちょうど一回だけ完了処理が走る（exactly-once-on-the-happy-path）ように設計されているの。暴走しないように `maxBudgetMs`（デフォルト 24h）の上限があって、`cancelAgentTool(runId)` でいつでも止められる。`detached: { notify: true }` にすると、終わったランがチャットに結果メッセージを差し込んでくれるから、`onFinish` を手配線しなくてもモデルが結果に反応してくれるんだって。

サブエージェント側は `reportProgress()` で進捗も返せるよ。

```js
await this.reportProgress({
  fraction: 0.6,
  phase: "deploying",
  message: "Generating menu page",
});
```

進捗は `useAgentToolEvents` から `AgentToolRunState.progress` に出てくるから、裏で走っているランの一覧をライブのバーで見せられるの。`milestone` に名前を付けると、あとから再生できる耐久的な行に昇格させられるよ。

`runTurn` の 3 つのモードはこんな感じ。

```js
await this.runTurn({ mode: "wait", messages });   // saveMessages / continueLastTurn
await this.runTurn({ mode: "submit", messages }); // durable submitMessages
await this.runTurn({ mode: "stream", messages }); // chat()
```

全部が共通の内部 admission パスを通るようになって、以前デッドロックの原因になっていたネストしたブロッキング admission には、はっきりエラーを投げてくれるようになったよ。

復旧まわりだと、`chatStreamStallTimeoutMs` のストール検知ウォッチドッグ、中断されたツール呼び出しの修復、リコネクト後に status が固まる不具合の修正なんかが入ったの。`@cloudflare/think` と `@cloudflare/ai-chat` をひとつのモデルに寄せていく流れが続いているんだね。

アップデートは各パッケージを `@latest` で入れ直すだけ。くわしくは [Think のドキュメント](https://developers.cloudflare.com/agents/harnesses/think/)、[Code Mode のドキュメント](https://developers.cloudflare.com/agents/tools/codemode/)、[Agents のドキュメント](https://developers.cloudflare.com/agents/)を見てみてね。

## まとめ

- `runAgentTool` の `detached` で、eviction やデプロイを生き延びるバックグラウンド・サブエージェントが動かせるようになったよ
- `maxBudgetMs`（デフォルト 24h）と `cancelAgentTool` で暴走を防止。`reportProgress()` でライブ進捗も返せる
- `runTurn(options)` がターンの入口を `wait` / `submit` / `stream` の 3 モードにまとめてくれた
- ストール検知やツール呼び出し修復など、復旧・信頼性まわりの改善も盛りだくさん

長時間ジョブを裏で回したい人や、チャットエージェントをデプロイ越しに安定させたい Workers 開発者に刺さるアップデートだよ！
