ADR 0007: エージェントを Cloudflare Agents SDK で実装し専門エージェント網を廃止する
Context
ADR 0002 は「Mastra 不採用・素の Vercel AI SDK でエージェントを実装し、LLM 呼び出しは AI Gateway 経由に統一」と決定していた。単一 Worker 化(ADR 0006)に伴い、エージェント実装基盤を再検討した。
- Cloudflare には Durable Objects ベースのファーストパーティなエージェントフレームワーク Agents SDK(
agentsパッケージ)があり、状態保持・スケジューリング(schedule)・インスタンス毎の組み込みストレージを備える。 - 素の AI SDK だけでは「
ctx.waitUntilの 30 秒制限を超え得る AI 応答をどこで実行するか」「スレッド毎の直列化・状態保持」を自作する必要がある。Agents SDK はこれらを DO の仕組みとして標準提供する。 tied-botのdelegateToTeamツール + 11 体の専門エージェント網は、実態が「system prompt の切り替え + モデル呼び出し」であり、利用頻度に対して維持・移植コストが大きい。
Decision
botAgentを Cloudflare Agents SDK の Agent(Durable Object) として実装する。- インスタンスは Slack スレッド単位(
channel:thread_tsを名前にgetAgentByNameで取得)。同一スレッドの処理が DO により直列化される。 - fetch ハンドラからはタスクを渡して即 return し、Agent が
schedule(0)で自身の実行コンテキストで処理を自走させる(呼び出し元 Worker の waitUntil 30 秒制限に依存しない)。 - イベント処理済みの記録を DO 内に持ち、KV 重複排除を強整合で補完する。
- インスタンスは Slack スレッド単位(
- LLM 呼び出しは引き続き Cloudflare AI Gateway 経由に統一(ADR 0002 から継承)。モデルは現行機能維持のため
gpt-5-mini(OpenAI)を使う。Agent 内部のモデル呼び出しヘルパには AI SDK のgenerateText(stopWhen: stepCountIs(3)、現行 maxSteps 3 相当)を AI Gateway の baseURL に向けて用いる(Agents SDK の標準パターン)。 - tools は
fetchUrl(HTMLRewriter で本文抽出)とfetchWorkspaceGuide(Notion API + KV 1 時間キャッシュ)の 2 つを移植する。 delegateToTeamツールと 11 体の専門エージェント網は移植せず廃止する(明示的な機能削減)。必要な専門知識の要点はbotAgentの instructions に統合する。週次レポートのpaparazziAgentはエージェント網とは独立した「プロンプト + 単発generateText」として cron(scheduled)側に残す。
Consequences
- 良い点: Cloudflare ファーストパーティで完結し、状態・スケジューリング・直列化を自作しない。スレッド単位の会話コンテキストを DO ストレージに保持でき、Mastra のメモリ相当の一部を自然に代替。エージェント網の廃止で移行工数が大幅減(旧計画の「最大の工数」が消える)。
- 悪い点 / 注意:
- Durable Objects +
new_sqlite_classesマイグレーションがリポジトリ初導入(既存アプリに DO 利用はコンテナ shim のみ)。 - delegateToTeam の廃止は利用者に見える機能削減。アナウンスが必要。
- Agents SDK のバージョン追従(
agentsパッケージは更新が速い)。
- Durable Objects +
- フォローアップ: Agent インスタンスの寿命・ストレージ肥大の運用方針(古いスレッド DO のデータ整理)。
gpt-5-miniの後継モデルへの切り替えは AI Gateway 側で一元管理。
Alternatives
- 素の Vercel AI SDK のみ(旧 ADR 0002 案): モデル呼び出しは最小だが、30 秒制限の回避・スレッド直列化・状態保持を自作することになる。却下。
- Mastra をコンテナで維持: ADR 0002 で却下済み(Workers で動作せず、コンテナ前提が ADR 0006 と矛盾)。
- Workers AI のオープンモデルに置き換え: モデルまで Cloudflare 完結になるが、
gpt-5-miniからの応答品質変化が大きく「現状機能の維持」要件に反する。AI Gateway 経由のため将来の切り替え余地は残る。却下。 - 専門エージェント網を AI SDK で再実装: 旧計画フェーズ 6。費用対効果が低くユーザー判断で削除が確定。却下。