こんにちは~ 浮田です。
別記事で AgentCore ハーネスを勢いで動かしてみたのですが、書きながら「そもそもハーネスって何なんだ」を自分がちゃんと説明できないことに気づきました。なのでこの記事で一歩下がって整理します。
対象読者は「ハーネスって言葉、最近やたら見るけど何?」で止まっている人です。
■ はじめに
AgentCore のアップデートを追っていて「ハーネス」という言葉が出てきたとき、正直ピンと来ませんでした。ハーネスって、安全帯とか配線の束のあれですよね……と。
調べてみたら、これが AgentCore 固有の言葉ですらなかったんです。そこから急に理解が進んだので、同じところで止まっている人向けに整理しておきます。
「ハーネス」の元の意味は、馬具・安全帯・配線の束。
共通しているのは「本体ではなく、本体を働かせるために取り付ける装備一式」です。
AI エージェントの文脈でこの語が広まったのは、2025年後半から2026年前半にかけて。Anthropic が Claude Code のランタイム全体を指してこの語を使い始めたあたりが起点で、そこから各社が続きました。
つまりこの半年で、業界全体の言葉が揃ったタイミングだったわけです。知らなかったのは私だけじゃないはず、と少し安心しました(笑)。
ハーネスの前に、エージェントが何をしているかから整理します。
やっていることは、モデルとハーネスの往復です。
ユーザー入力
↓
モデル:「echo で書けばいいから、Shell を実行して」
↓
ハーネス:実行する →「exit_code 0 でした」
↓
モデル:「書けたな。次は cat で確認して」
↓
ハーネス:実行する →「中身はこうでした」
↓
モデル:「確認できた。もうツールは要らない」
↓
最終回答
公式にはこれを agent loop(エージェントループ) と呼びます。ドキュメントを読むときはこの語で出てくるので覚えておいてください。ただ私は「ループ」よりも「往復」と捉えたほうが腑に落ちました。2人でキャッチボールしているという感じが、ループだと消えてしまうんですよね。
実際に AgentCore ハーネスのプレイグラウンドでファイルを書かせると、トレースにこう出ます。
Shell(command: "echo 'harness test 20260820' > /tmp/memo.txt")
└ {"stdout": "", "stderr": "", "exit_code": 0}
Shell(command: "cat /tmp/memo.txt")
└ {"stdout": "harness test 20260820\n", "stderr": "", "exit_code": 0}
▲ プレイグラウンドの Agent trace。上下2組が、往復2周分
押さえるのは3つです。
コードにすると本当にこれだけです。
messages = [{"role": "user", "content": user_input}]
while True:
response = model.invoke(messages) # ① モデルが考える
messages.append(response)
if not response.tool_calls: # ②「もう要らない」なら
break # ここで往復が終わる
for call in response.tool_calls: # ③ ハーネスが実行する
result = run_tool(call.name, call.args)
messages.append({"role": "tool", "content": result})
print(messages[-1].content)
▲ 往復の本体。だいたいこれで全部です
model.invoke と run_tool の2行が往復の折り返し地点で、messages が積み上がっていく置き場所。20行足らずです。
で、ここからが本題なんですが難しいのは、この往復のほうではありませんでした。
ローカルで1人分動かすだけなら、上のコードに毛が生えたもので済みます。午後いっぱいあれば作れます。
急に、往復の外側に用意するものが増えるのは、これを自分の PC の外に出すと決めた瞬間です。 誰かに使わせるなら、誰の会話なのかを分ける必要が出てくる。PC を閉じても動かすなら、常時動くサーバーが要る。本物の社内システムを触らせるなら、認証情報を安全に渡す経路が要る。そして rm -rf / を打たれて困るのが自分の PC でなくなった瞬間から、隔離は「あったほうがいい」ではなく「無いと出せない」になります。
優秀な人を採用しても、その人だけでは仕事になりません。机と PC が要る。作業する部屋が要る。入館証が要る。書類の置き場所が要る。日報も要る。
|
必要になるもの |
会社でいうと |
なぜ必要か |
第1弾で見た場所 |
|
コンピュート |
机と PC |
自分の PC ではなく、常時動くサーバーが要る |
Runtime が microVM を起動した |
|
サンドボックス |
隔離された作業部屋 |
モデルが rm -rf / を打っても本体が壊れないように |
Shell(echo ...) が microVM の中で走った |
|
ツール接続 |
社内システムのアカウント |
社内 API を叩かせるなら認証情報を安全に渡す仕組みが要る |
設定パネルの「ツール」(Gateway / MCP) |
|
ストレージとメモリ |
ロッカーと業務日誌 |
ユーザーごと・セッションごとに会話とファイルを分けて置く |
/tmp/memo.txt と Memory(会話が戻った) |
|
ID |
入館証 |
誰の会話か、誰に何を許可するか |
「アクター ID」、IAM 実行ロールの警告バナー |
|
可観測性 |
日報 |
「エージェントが勝手に何かした」を後から追う |
Agent trace、「オブザーバビリティを表示」 |
そして同時実行・分離・認証・状態管理・スケーリング。この一式をまとめて agent harness と呼びます。
公式ドキュメントの言い方を借りるなら、モデルが脳で、ハーネスが身体。モデルは賢くなりました。でも賢い頭だけでは仕事にならない、というのがこの記事で一番書きたかったことです。
上の6項目を、AWS 側が全部持ってくれます。開発者が用意するのは左側だけ。
モデルを変えたりツールを足したりするのが、コードの書き換えではなく設定の変更になる。
中身の往復は Strands Agents(AWS のオープンソースのエージェントフレームワーク)で動いています。
特徴を4つに絞ります。
|
特徴 |
内容 |
|
セッションごとに隔離された microVM |
ファイルシステムとシェルを持つ。モデルがコードを書いて実行できる |
|
モデルに縛られない |
Bedrock / OpenAI / Gemini / LiteLLM 互換。セッション途中で切り替えられる |
|
ツールは Gateway や MCP 経由 |
組み込みのブラウザ・コードインタープリターも。AWS スキルをトグルで付与 |
|
全アクションが自動でトレースされる |
Observability に統合。プレイグラウンドでも Agent trace が見える |
他にも独自コンテナの持ち込み、S3 Files / EFS のマウント、Identity、Policy、Evaluations などがありますが、入門記事では名前を出すに留めます。
|
方法 |
必要なもの |
向いている人 |
再現性 |
|
① コンソール「クイック作成」 |
AWS アカウントだけ |
まず触りたい人 |
低(手作業) |
|
② AgentCore CLI |
Node.js 20+ / npm install -g @aws/agentcore |
作って壊してを繰り返す人 |
高(設定ファイル) |
|
③ SDK / API |
boto3 など |
他システムから呼ぶ人 |
高(コード) |
私の環境では数十秒でプレイグラウンドが開き、最初の「こんにちは」に 5.7 秒で返ってきました。設定はモデル=Claude Sonnet 4.6、システムプロンプト=You are a helpful assistant. だけです。
agentcore create でウィザードが立ち上がり、プロジェクト種別で Harness を選びます。あとは agentcore dev → deploy → invoke。agentcore dev はリソースをデプロイしてからブラウザ上のエージェントインスペクターを開いてくれるので、チャットしながらトレースを見られます。
CreateHarness で定義し、GetHarness で READY を確認し、InvokeHarness で実行する。実質3つの API で済みます。
私は最初、Runtime と何が違うのか分かりませんでした。
|
やりたいこと |
ハーネス |
Runtime |
|
まず動くものを数分で |
✅ |
❌ |
|
モデルやツールを設定で差し替える |
✅ |
❌(コード変更) |
|
独自のオーケストレーション/マルチエージェント |
❌ |
✅ |
|
好きなフレームワーク(LangGraph 等)を使う |
❌ |
✅ |
|
深いカスタム計装 |
△ |
✅ |
※ △ は「自動トレースは付いてくるが、計装ポイントを自分で足す自由度は低い」の意味です。
一方通行なのがポイントで、Runtime で書いたコードをハーネスに変換する機能はありません。 逆に、ハーネスから Strands ベースのコードへのエクスポートはできます(agentcore export harness。Claude Agent SDK 向けも予定)。
コンソールのハーネス詳細画面にも「コードへのエクスポート手順を表示」というボタンがあります。
つまり、ハーネスから始めて、必要になったらコードへ降りるという一方通行になっています。この向きは覚えておいて損がないです。
なお、従来の Bedrock Agents(現 Bedrock Agents Classic)は設計思想の違う別アプローチで、2026年7月30日以降は新規顧客向けにメンテナンスモードへ入っています。これから新しく作るならハーネスか Runtime を見ればよさそうです。
ハーネス自体に追加料金はありません。課金されるのは、下回りで使った AgentCore 各機能の従量分です。
「ハーネスは無料」は本当ですが、「エージェントを動かすのが無料」ではありません。
特にメモリは、有効にした時点でリソースが作られて課金が始まります。
そして往復するたびに履歴を読み直すので、入力トークンは周回ごとに積み上がります。長い会話ほど1周が高くなる、と覚えておくといいと思います。
触った後は不要なハーネスを削除してください。ハーネスが作ったマネージドメモリは、ハーネス削除時にカスケード削除されるのがデフォルトです。
実際に踏んだ小さな罠を先に渡しておきます。
「ハーネス」という単語で止まっていた自分に一番効いたのは、これが AWS の造語ではなく、業界全体でこの半年に揃った言葉だったと知ったことでした。知らないのが当然だったんだ、と分かると急に読みやすくなります。
そして中身を追ってみて、一番の収穫は「往復そのものは薄い。厚いのはその周りだった」という感触でした。while ループ20行が正体で、あとは全部インフラです。モデルは賢くなりました。でも賢い頭だけでは仕事になりません。机と PC と入館証と日報が要る。ハーネスというのは、要するにその一式のことです。
AgentCore ハーネスは、この一式を AWS 側が持ってくれるサービスです。ここまで理解できれば、あとは触るのが早いと思います。
※ 本記事は 2026年8月時点の挙動に基づきます。ハーネスは GA から日が浅く、周辺機能にはプレビューのものも含まれます。仕様は今後変わる可能性があるため、実際に使う際は最新のドキュメントをご確認ください。
※ この記事は 2026年8月20日時点の情報に基づきます。AgentCore はアップデートが速いため、対応リージョン・機能・料金は公式ドキュメントで最新をご確認ください。