0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コーディングエージェントの中身を1関数にしたMicrosoftのAgent Harness

0
Posted at

Claude CodeやCodexのようなコーディングエージェントを使っていて、「この中身、自分でも組めるのでは」と一度は思った人は多いと思う。モデルにツールを渡してループを回しているだけ、と頭では分かっている。ところがいざ自作しようとすると、会話履歴が長くなって文脈があふれる問題、シェルを実行する前に人間の承認を挟む仕組み、計画モードと実行モードの切り替え、作業メモの永続化……と、地味で面倒な部品が芋づる式に必要になる。モデルそのものよりも、その「外側の足回り」を作るほうがずっと骨が折れる。

Microsoftはこの足回りを、オープンソースのMicrosoft Agent Frameworkcreate_harness_agent() という1関数として丸ごと入れてきた。BUILD 2026で正式に披露された機能で、PythonとC#/.NETの両方から同じ思想で使える(ライセンスはMIT)。これは「モデル」ではなく「ハーネス(harness)」、つまりコーディングエージェントの骨格そのものを部品化した、という点で他のモデル発表とは毛色が違う。

ハーネスとは何を指すのか

聞き慣れない言葉だが、Microsoftの定義は拍子抜けするほど素直だ。公式ブログAgent Harness in Agent Frameworkはこう言い切っている。

Agent harness is the layer where model reasoning connects to real execution: shell and filesystem access, approval flows, and context management across long-running sessions.

ここで挙げられている三つ、すなわちシェルやファイルへのアクセス、承認フロー、長時間セッションをまたいだ文脈管理が、ハーネスの構成要素そのものだ。要するにハーネスとは「モデルの頭脳」と「現実の操作」をつなぐ配線盤であり、コーディングエージェントを名乗るなら避けて通れない泥臭い部分を、まとめてここに押し込む。チュートリアル記事Build your own clawでは「コーディングエージェントとは、モデルとハーネスのことだ(a coding agent is a model plus a harness)」とまで言い切っており、思想がはっきりしている。

自前で書くと何行になるかを1関数に畳む

Agent Harnessが束ねている部品は、これまで各自がスクラッチで書いていたものばかりだ。手作りした場合と比べると、何を肩代わりしてくれるのかが見えてくる。

必要な機能 自作だと Agent Harness
ツール呼び出しのループ 自前で実装 function invocation 内蔵
会話履歴の保持 自前で管理 history persistence 内蔵
タスク分解・進捗管理 TODOリストを手組み TodoProvider
計画/実行のモード分け 状態管理を自作 AgentModeProvider
Web検索 ツール定義を用意 HostedWebSearchTool
作業メモの永続化 ファイル入出力を実装 file memory / file access
危険な操作の承認 ガード処理を自作 tool approval 内蔵
文脈あふれ対策 圧縮ロジックを自作 context compaction 内蔵

実際のコードは驚くほど短い。PythonのチュートリアルMeet your agent harness and clawに出てくる例はこうだ。

pip install agent-framework
agent = create_harness_agent(
    client=client,
    agent_instructions=FINANCE_INSTRUCTIONS,
    tools=get_stock_price,
    disable_todo=True,
    disable_web_search=True,
)

client にモデルのクライアントを渡し、agent_instructions で役割を書き、自前のツールを tools で足すだけ。あとは履歴の保持も承認も圧縮もハーネスが面倒を見る。要らない部品は disable_tododisable_web_search のようなフラグで個別に切れる(計画モードを外す disable_mode、メモを外す disable_memory などもある)。最初から全部入りで、引き算で削っていく設計だ。.NET側は chatClient.AsHarnessAgent() という拡張メソッドで、NuGetパッケージは Microsoft.Agents.AI。APIの形は違っても発想は揃えてある。

いちばん面白いのは文脈圧縮の作り込み

個人的にこのハーネスで一番うなったのは、context compaction(文脈圧縮)を真面目に部品化している点だ。長く動かすエージェントの最大の敵は、会話履歴がコンテキストウィンドウを食いつぶすことにある。ここをサボると、エージェントは数十ターンで「さっき何をしていたか」を見失う。

Agent Harnessはこれを、ループの途中でトークン使用量を監視して履歴を自動圧縮することで防ぐ。Pythonでは直近の数ターンだけ残す SlidingWindowStrategy(keep_last_groups=3) のような戦略を差し込めるし、.NET側はさらに踏み込んで、複数の戦略を連鎖させるパイプラインを組める。

new PipelineCompactionStrategy(
    new ToolResultCompactionStrategy(CompactionTriggers.MessagesExceed(7)),
    new SlidingWindowCompactionStrategy(CompactionTriggers.TurnsExceed(4)),
    new TruncationCompactionStrategy(CompactionTriggers.GroupsExceed(12)));

「ツール結果が7メッセージを超えたらまずそこを畳む」「ターンが4を超えたら古い会話を窓から外す」「グループが12を超えたら切り詰める」といった具合に、何を・いつ・どう捨てるかを段階的に指定できる。ツールの巨大な出力ログから先に潰す、という発想は実際にコーディングエージェントを長時間回した人ほど刺さるはずだ。手で書くと地獄のように細かいこの部分が、設定の組み合わせで済む。

シェル実行の承認も同じ温度感で用意されている。Pythonなら @tool(approval_mode="always_require") を付けたツールが呼ばれるたびに user_input_requests が立ち、人間が y/n で許可するまで止まる。公式も「ローカルでシェルを実行するなら隔離環境で動かし、明示的な承認を必ず挟むこと」と釘を刺している。エージェントに rm -rf を握らせる怖さを、フレームワーク側が前提として織り込んでいるわけだ。

「組む」だけでなく「運ぶ」ところまで

ハーネスで組んだエージェントを本番に乗せる導線も同時に出てきた。Foundry Hosted Agentsを使うと、作ったエージェントをコンテナ化されたサービスとしてMicrosoft Foundryのマネージド基盤にデプロイできる(BUILD 2026のまとめ記事)。アイドル時はゼロまでスケールダウンし、再開時にはファイルシステムをそのまま復元する。セッションごとにVMが分離され、ハーネスが吐くOpenTelemetryのトレースは追加配線なしでApplication Insightsに流れる。.NETでは .AddFoundryResponses().MapFoundryResponses()、Pythonでは ResponsesHostServer が入口になる。

なお、Microsoftはこのハーネスで組む対話型エージェントを社内で「claw」と呼んでいる。チュートリアルの定義では「計画し、ツールを使い、物事を覚え、安全に代理で動く、CLIスタイルのエージェント」。要するにClaude CodeやCodexのような存在を、自分のドメイン向けに自作しよう、という想定だ。

どう嬉しいのか

実務目線で言うと、これは「コーディングエージェントの作り方が公開された」というより「エージェントの足回りがコモディティ化し始めた」サインだと受け止めている。これまで各社が秘伝のタレのように抱えていた圧縮戦略・承認フロー・モード管理が、ベンダーフレームワークの引数になった。差別化のレイヤーが、足回りの実装からその上の業務知識やツール設計へと一段押し上げられる。

逆に注意したいのは、全部入りゆえのブラックボックス化だ。圧縮や承認をハーネス任せにすると、「なぜこの履歴が消えたのか」「なぜこのツールが止まったのか」がフレームワーク内部の挙動に依存する。だからこそ最初から OpenTelemetry のトレースが組み込まれている意味は大きい。自作の社内エージェントを構想しているなら、ゼロから配線盤を作る前に、まず pip install agent-frameworkcreate_harness_agent() を一度動かし、自分が本当に手で握りたいのはどの部品かを見極めるのが、いまのいちばん安い学習コストだと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?