AgentCore ハーネスって、そもそも何?
こんにちは~ 浮田です。
別記事で AgentCore ハーネスを勢いで動かしてみたのですが、書きながら「そもそもハーネスって何なんだ」を自分がちゃんと説明できないことに気づきました。なのでこの記事で一歩下がって整理します。
対象読者は「ハーネスって言葉、最近やたら見るけど何?」で止まっている人です。
■ TL;DR
- ハーネスは AgentCore が作った言葉ではありません。AI エージェント界隈でこの半年に一気に広まった一般用語です
- エージェントがやっているのは、モデルとハーネスの往復です。モデルは「これを実行して」と言うだけで、実行するのはハーネス側
- その往復自体はコードにすると20行くらいで書けます。 難しいのは往復そのものではなく、その周りでした
- 周りに必要なもの(コンピュート・サンドボックス・ツール接続・メモリ・ID・可観測性)を AWS が丸ごと持ってくれるのが AgentCore ハーネスです
- 結論:ハーネスとは「モデルを"働ける状態"にするための、身の回り一式」です
■ 目次
-
- はじめに
- ハーネスは AWS の言葉ではない
- エージェントの正体は「往復」だった
- 往復そのものは薄い。厚いのは周りだった
- で、AgentCore ハーネスは何をしてくれるのか
- 始め方は3つある
- Runtime と何が違うのか
- 料金の考え方
- 触る前に知っておくとよいこと
- まとめ・このあと読むもの
■ はじめに
AgentCore のアップデートを追っていて「ハーネス」という言葉が出てきたとき、正直ピンと来ませんでした。ハーネスって、安全帯とか配線の束のあれですよね……と。
調べてみたら、これが AgentCore 固有の言葉ですらなかったんです。そこから急に理解が進んだので、同じところで止まっている人向けに整理しておきます。
■ ハーネスは AWS 固有の言葉ではない
「ハーネス」の元の意味は、馬具・安全帯・配線の束。
共通しているのは「本体ではなく、本体を働かせるために取り付ける装備一式」です。
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 と呼びます。
公式ドキュメントの言い方を借りるなら、モデルが脳で、ハーネスが身体。モデルは賢くなりました。でも賢い頭だけでは仕事にならない、というのがこの記事で一番書きたかったことです。
■ で、AgentCore ハーネスは何をしてくれるのか
上の6項目を、AWS 側が全部持ってくれます。開発者が用意するのは左側だけ。
● 開発者が宣言するもの
- モデル
- システムプロンプト
- ツール
- スキル
- 環境(microVM / シェル / ファイルシステム)
- コンピュートとスケーリング
- メモリ
- ネットワーク
- Identity(ID)
- 実行上限
- 可観測性
● AWS が持つもの(=ハーネス)
- 環境(microVM / シェル / ファイルシステム)
- コンピュートとスケーリング
- メモリ
- ネットワーク
- Identity(ID)
- 実行上限
- 可観測性
モデルを変えたりツールを足したりするのが、コードの書き換えではなく設定の変更になる。
中身の往復は Strands Agents(AWS のオープンソースのエージェントフレームワーク)で動いています。
特徴を4つに絞ります。
|
特徴 |
内容 |
|
セッションごとに隔離された microVM |
ファイルシステムとシェルを持つ。モデルがコードを書いて実行できる |
|
モデルに縛られない |
Bedrock / OpenAI / Gemini / LiteLLM 互換。セッション途中で切り替えられる |
|
ツールは Gateway や MCP 経由 |
組み込みのブラウザ・コードインタープリターも。AWS スキルをトグルで付与 |
|
全アクションが自動でトレースされる |
Observability に統合。プレイグラウンドでも Agent trace が見える |
他にも独自コンテナの持ち込み、S3 Files / EFS のマウント、Identity、Policy、Evaluations などがありますが、入門記事では名前を出すに留めます。
■ 始め方は3つある
|
方法 |
必要なもの |
向いている人 |
再現性 |
|
① コンソール「クイック作成」 |
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. だけです。
● ② CLI
agentcore create でウィザードが立ち上がり、プロジェクト種別で Harness を選びます。あとは agentcore dev → deploy → invoke。agentcore dev はリソースをデプロイしてからブラウザ上のエージェントインスペクターを開いてくれるので、チャットしながらトレースを見られます。
● ③ SDK / API
CreateHarness で定義し、GetHarness で READY を確認し、InvokeHarness で実行する。実質3つの API で済みます。
■ Runtime と何が違うのか
私は最初、Runtime と何が違うのか分かりませんでした。
- Runtime:自分でコードを書き、フレームワークも往復も自分で制御する道。コンテナにして ECR に置いてデプロイする
- ハーネス:設定で宣言し、往復は AgentCore が持つ道。ハーネスは Runtime の上で動く抽象層です
|
やりたいこと |
ハーネス |
Runtime |
|
まず動くものを数分で |
✅ |
❌ |
|
モデルやツールを設定で差し替える |
✅ |
❌(コード変更) |
|
独自のオーケストレーション/マルチエージェント |
❌ |
✅ |
|
好きなフレームワーク(LangGraph 等)を使う |
❌ |
✅ |
|
深いカスタム計装 |
△ |
✅ |
※ △ は「自動トレースは付いてくるが、計装ポイントを自分で足す自由度は低い」の意味です。
一方通行なのがポイントで、Runtime で書いたコードをハーネスに変換する機能はありません。 逆に、ハーネスから Strands ベースのコードへのエクスポートはできます(agentcore export harness。Claude Agent SDK 向けも予定)。
コンソールのハーネス詳細画面にも「コードへのエクスポート手順を表示」というボタンがあります。

つまり、ハーネスから始めて、必要になったらコードへ降りるという一方通行になっています。この向きは覚えておいて損がないです。
なお、従来の Bedrock Agents(現 Bedrock Agents Classic)は設計思想の違う別アプローチで、2026年7月30日以降は新規顧客向けにメンテナンスモードへ入っています。これから新しく作るならハーネスか Runtime を見ればよさそうです。
■ 料金の考え方
ハーネス自体に追加料金はありません。課金されるのは、下回りで使った AgentCore 各機能の従量分です。
- Runtime:microVM の CPU とメモリを秒単位で(モデル待ちの間は CPU 課金なし)
- モデル推論:Bedrock または各プロバイダーの料金。システムプロンプト・会話履歴・メモリ・ツール定義が全部入力トークンに乗る
- Memory:短期イベント/長期レコード/取得の件数
- ブラウザ・コードインタープリター・Gateway・CloudWatch:使った分
「ハーネスは無料」は本当ですが、「エージェントを動かすのが無料」ではありません。
特にメモリは、有効にした時点でリソースが作られて課金が始まります。
そして往復するたびに履歴を読み直すので、入力トークンは周回ごとに積み上がります。長い会話ほど1周が高くなる、と覚えておくといいと思います。
触った後は不要なハーネスを削除してください。ハーネスが作ったマネージドメモリは、ハーネス削除時にカスケード削除されるのがデフォルトです。
■ 触る前に知っておくとよいこと
実際に踏んだ小さな罠を先に渡しておきます。
- コンソールのクイック作成では、メモリが無効な状態で作られました。 プレイグラウンドの設定パネルに「メモリ」の項目がなければ無効です。セッションを止めると会話を全部忘れます。CLI のウィザードでは Memory を「なし/短期のみ/長期+短期」から選ばせてくれるので、入口によって挙動が違うようです
- プレイグラウンドで変えたモデルは保存されません。 呼び出し時の一時的な上書きです。恒久的に変えるなら「ハーネスを編集」から
- ハーネスの設定変更は「新バージョン作成 → エンドポイント切替」の2段階で反映されます。メモリ有効化は 3〜5 分待ちました
- セッション ID は 33 文字以上必要です。 コンソールは UUID を自動発行してくれますが、API から叩くときは自分で用意します(str(uuid.uuid4()) でOK)
- リージョンによって使えるモデルや周辺ツールが違う場合があります(執筆時点の状況を必ず確認してください)
■ まとめ
「ハーネス」という単語で止まっていた自分に一番効いたのは、これが AWS の造語ではなく、業界全体でこの半年に揃った言葉だったと知ったことでした。知らないのが当然だったんだ、と分かると急に読みやすくなります。
そして中身を追ってみて、一番の収穫は「往復そのものは薄い。厚いのはその周りだった」という感触でした。while ループ20行が正体で、あとは全部インフラです。モデルは賢くなりました。でも賢い頭だけでは仕事になりません。机と PC と入館証と日報が要る。ハーネスというのは、要するにその一式のことです。
AgentCore ハーネスは、この一式を AWS 側が持ってくれるサービスです。ここまで理解できれば、あとは触るのが早いと思います。
※ 本記事は 2026年8月時点の挙動に基づきます。ハーネスは GA から日が浅く、周辺機能にはプレビューのものも含まれます。仕様は今後変わる可能性があるため、実際に使う際は最新のドキュメントをご確認ください。
■ 参考リンク・但し書き
※ この記事は 2026年8月20日時点の情報に基づきます。AgentCore はアップデートが速いため、対応リージョン・機能・料金は公式ドキュメントで最新をご確認ください。