[アップデート] Amazon Bedrock AgentCore Managed Harness がプレビューリリースされました!

[アップデート] Amazon Bedrock AgentCore Managed Harness がプレビューリリースされました!

2026.04.23

はじめに

こんにちは、スーパーマーケットが大好きなコンサル部の神野(じんの)です。

本日2026年4月22日にAmazon Bedrock AgentCoreの新機能マネージドハーネスがまとめて発表されましたね!

https://aws.amazon.com/jp/about-aws/whats-new/2026/04/agentcore-new-features-to-build-agents-faster/

スピード重視でドキュメントを見ながら触っていきます!

アップデート整理

発表されたアップデートは下記の3つです。

機能 概要
マネージドハーネス(プレビュー) モデル・システムプロンプト・ツールを指定するだけで、オーケストレーションコードなしでエージェントが動く
AgentCore CLI プロジェクト作成〜ローカル開発〜デプロイまでをCLIで完結。CDK対応済み、Terraformも近日対応予定
AgentCore Skills コーディングアシスタント(Kiro / Claude Code / Codex / Cursor等)向けの事前構築スキル

AgentCore CLIはちょっと前からありましたよね。今回はマネージドハーネスを対象にブログを書きました。

ちなみにAgentCoreのコンソールを開いてみると、サイドバーにHarness Previewというメニューが新しく追加されているのが確認できました!

agentcore-console-sidebar-harness

ハーネス

触る前に、公式ブログを読みながらそもそもハーネスって何を指しているのかのところを整理しておきます。

https://aws.amazon.com/blogs/machine-learning/get-to-your-first-working-agent-in-minutes-announcing-new-features-in-amazon-bedrock-agentcore/

AgentCoreの文脈でいうハーネスは、エージェントを動かすためのオーケストレーション基盤のことです。具体的には下記のようなものを束ねる土台を指しています。

  • モデル呼び出し・推論の実行
  • ツール選択とツール呼び出し
  • 結果をモデルに戻す、いわゆるReActループ
  • セッション状態の管理
  • エラーリカバリやリトライ
  • 認証・認可まわり

今までインフラをStarter ToolkitやAgentCore CLIで簡単に作れるようになったものの、時間がかかっていたからさらに簡略化してエージェントをサクッと作れるようにしたって感じみたいんですね。

マネージドハーネスが引き受けてくれる範囲

マネージドハーネスは、自前でよく実装する各処理の領域をまとめて肩代わりしてくれます。
開発者がやることは下記3つを定義すればまずは使えるようになります。

宣言するもの 内容
model 使用するLLM(Bedrock / OpenAI / Gemini)
systemPrompt 指示文
tools 呼び出せるツール(Gateway / MCP / ブラウザ / Code Interpreter など)

シンプルでコードレスなんですね。

実行環境

ハーネスの裏側は各セッションに専用のマイクロVMが割り当てられます。

  • マイクロVMでセッションごとに分離された実行環境
  • 各セッション専用のファイルシステム・シェルアクセス
  • セッション状態は永続ファイルシステムに保存され、途中で中断しても続きから再開できる
  • シェルコマンドはモデル推論を経由せず直接実行できるので、無駄なトークン消費を抑えられる
  • 全アクションはAgentCore Observabilityで自動トレースされる

ここは今までのAgentCore Runtimeと同じですね。裏側でAgentCore Runtimeが使われているんでしょうね。

説明を長々としても伝わりづらいので触ってみます!

まずはコンソールで触ってみる

まずはコンソール上で触ってみます。

CleanShot 2026-04-23 at 08.38.14@2x

Quick create harnessを押すとしばらく待つとプレイグラウンドにリダイレクトされます。
推奨設定でハーネスが作られていそうですね!めちゃくちゃ簡単だ。

CleanShot 2026-04-23 at 08.40.05@2x

Skillsやツールも追加できそうです。
ブラウザのツールを追加してみます。

CleanShot 2026-04-23 at 10.08.48@2x

CleanShot 2026-04-23 at 10.09.55@2x

今回はブラウザを選択しましたが、Code InterpreterやAgentCore Gateway、Remote MCP Serverも追加できます。サクッとマネコンで完結するのはいいですね。

追加して質問してみます。

CleanShot 2026-04-23 at 10.14.41@2x

問題なくブラウザ使えていますね!

Skillsはファイルパスを指定するみたいですが、どう設定するんでしょうね。スキル自体の内容はこの入力欄には設定できなさそうです。ここは次回以降のブログで検証したいです。

CleanShot 2026-04-23 at 10.15.07@2x

Advanced create harnessを選択すると後ほどAgentCore CLIで選択したものを入力する形ですね。

CleanShot 2026-04-23 at 08.40.41@2x

CLI難しい方でもまずはコンソールで簡単に作れるのは嬉しいポイントですね!

コンソールでサクッと触ってみたので、今度はAgentCore CLIでもう少し深掘りして触ってみます。

前提

今回触った環境は下記です。

項目 内容
リージョン us-east-1(バージニア北部)
Node.js 24
AgentCore CLI 1.0.0-preview.1
モデル global.anthropic.claude-sonnet-4-6(ハーネスのデフォルト)

マネージドハーネスは現時点でオレゴン(us-west-2)、バージニア北部(us-east-1)、フランクフルト(eu-central-1)、シドニー(ap-southeast-2)の4リージョンで利用可能です。

https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/harness.html

今回AgentCore CLIそのものの基本的な使い方や、最近追加されたAgent Inspector Web UI(agentcore devでブラウザUIからエージェントと会話できる機能)については、以前に記事でまとめているので、前提知識としてこちらもあわせて見てもらえると嬉しいです!

https://dev.classmethod.jp/articles/agentcore-cli-deploy/

https://dev.classmethod.jp/articles/agentcore-cli-inspector-web-ui/

AgentCore CLI(preview版)をインストールする

まずインストールしましょう。

インストール
npm install -g @aws/agentcore@preview
agentcore --version
# 1.0.0-preview.1

1.0.0-preview.1になっていればマネージドハーネス関連のサブコマンドが使えます。

プロジェクトを作成する

プロジェクト雛形を生成します。今回はharnessSampleという名前で作りました。

プロジェクト作成
agentcore create

プロジェクト名を入れて、最初に作るリソースの種類を聞かれます。Harnessがrecommendedになっていますね。

What would you like to build?

❯ Harness (recommended) - Managed config-based agent loop, no code required
  Agent - Start with a template or bring your own code hosted on AgentCore Runtime
  Skip - I'll add resources later

Harnessを選ぶと以下のステップを順に聞かれます。

ステップ 内容
Name ハーネスの名前(今回はMyHarness
Model provider Amazon Bedrock / OpenAI / Google Gemini
Custom environment Default Environment / Container URI / Dockerfile
Memory メモリ設定
Advanced settings Tools / Authentication / Network / Lifecycle / Execution limits / Truncation / Session Storage

Model providerはデフォルト値も提示してくれます。今回はAmazon Bedrockを選びました。

Select model provider
Choose where to run your models

❯ Amazon Bedrock - Default: global.anthropic.claude-sonnet-4-6
  OpenAI - Default: gpt-5 (requires API key ARN)
  Google Gemini - Default: gemini-2.5-flash (requires API key ARN)

次がCustom environmentの選択です。今回は標準のDefault Environment(Python / Bash / File tools入り)で進めます。

Custom environment
Optionally provide a custom container image for the harness runtime

❯ Default Environment - Includes Python, Bash, File tools
  Container URI - Use a pre-built container image (ECR URI)
  Dockerfile - Bring your own Dockerfile

続いてMemoryの設定です。ハーネスがセッションを跨いでコンテキストを保持するかどうか選択します。今回はメモリなしで進めるのでNo persistent memoryにしました。

Memory
Persistent memory lets the harness remember context across sessions

❯ No persistent memory - Harness does not retain context across sessions
  Enabled - Create persistent memory for this harness

次がAdvanced settingsです。ここはチェックボックスの複数選択で、ツール・認証・ネットワーク・ライフサイクル・実行制限・トランケーション・セッションストレージを個別に有効化できます。今回はToolsだけにチェックを入れました。

Advanced settings (optional)
Configure tools, network, lifecycle, execution limits, truncation, or
session storage

❯ [✓] Tools - Add browser, code interpreter, MCP, or gateway tools
  [ ] Authentication - Inbound auth: AWS_IAM or Custom JWT
  [ ] Network - Deploy inside a VPC with custom subnets and security groups
  [ ] Lifecycle - Set idle timeout and max session lifetime
  [ ] Execution limits - Cap iterations, tokens, and per-turn timeout
  [ ] Truncation - Choose how context is managed when it exceeds limits
  [ ] Session Storage - Mount persistent storage for session data

Toolsを有効にしたので、ツール選択画面に進みます。AgentCore Browser / AgentCore Code Interpreter / AgentCore Gateway / Remote MCP Serverの4種類から選べます。今回はAgentCore Code Interpreterだけ有効にしました。

Select tools for your harness
Choose built-in tools, MCP servers, or gateways

❯ [ ] AgentCore Browser - Web browsing and automation
  [✓] AgentCore Code Interpreter - Sandboxed code execution
  [ ] AgentCore Gateway - Connect via gateway
  [ ] Remote MCP Server - Connect to an MCP server

最後のReview Configurationで全設定を確認して確定です。

Review Configuration

  Name: MyHarness
  Model Provider: bedrock
  Model ID: global.anthropic.claude-sonnet-4-6
  Memory: Disabled
  Tools: AgentCore Code Interpreter

生成されたファイルを眺める

ウィザードを抜けると、app/MyHarness/配下に設定ファイルが作られていました。

プロジェクト構成
harnessSample/
├── agentcore/
   ├── agentcore.json     # プロジェクト全体のスペック
   ├── aws-targets.json   # デプロイ先リージョン/アカウント
   └── cdk/               # CDK一式(L3はここに居る)
└── app/
    └── MyHarness/
        ├── harness.json       # ハーネス設定
        └── system-prompt.md   # システムプロンプト(別ファイル化)

app/MyHarness/harness.jsonはこんな感じです。ここのモデル名は手動で書き換えてデプロイとかも可能です。

app/MyHarness/harness.json
{
  "name": "MyHarness",
  "model": {
    "provider": "bedrock",
    "modelId": "global.anthropic.claude-sonnet-4-6"
  },
  "tools": [
    {
      "type": "agentcore_code_interpreter",
      "name": "code-interpreter"
    }
  ],
  "skills": []
}

システムプロンプトはsystem-prompt.mdという別ファイルに切り出される設計になっています。あとで書き換えて再デプロイする流れで反映できる作りですね。

プロジェクト全体のスペックはagentcore/agentcore.jsonにまとまっていて、ハーネスは下記のようにパス参照で登録されています。

agentcore/agentcore.json(抜粋)
{
  "name": "harnessSample",
  "managedBy": "CDK",
  "harnesses": [
    { "name": "MyHarness", "path": "app/MyHarness" }
  ]
}

managedByCDKになっていて、CDK経由でデプロイされる仕組みであると理解できます。

デプロイ手順

デプロイを進めていきます

デプロイを実行する

まずはdeployコマンドを実行してデプロイします。

デプロイ
agentcore deploy

実行すると下記のようなステップ表示が出てきます。

デプロイ結果
AgentCore Deploy

Project: harnessSample
Target: us-east-1:123456789012

[done]    Validate project
[done]    Check dependencies
[done]    Build CDK project
[done]    Synthesize CloudFormation
[done]    Check stack status
[done]    Publish assets
[done]    Deploy harnesses

Deployed 1 stack(s): AgentCore-harnessSample-default

Deploy harnessesというステップがちゃんと入っていて、ハーネス用の処理がパイプラインに組み込まれているのが分かります。

Bedrockコンソール側からもハーネスの中身は確認できます。Harness detailsにARN・IAMロール、Model and system promptに設定中のモデルとシステムプロンプト、Toolsに登録済みのツールが並んでいますね。

さらに下にスクロールすると、SkillsAdvanced configurationsInbound AuthObservability(Runtime sessions / Runtime invocations / vCPU・メモリ消費などのメトリクス)が表示されています。

harness-console-observability

CleanShot 2026-04-23 at 07.28.24@2x

Inbound Authの設定しなくて大丈夫だったかな・・・と不安に思っていましたが、デフォルトでIAMの設定になっていました。よかった。

後は気になったポイントとして、Skills (0) / No skills configuredの欄は、ハーネスにスキルを紐付ける枠があります。harness.jsonにも"skills": []という空配列がデフォルトで用意されていて設定できそうです!ここは別のブログで検証してみます。公式ドキュメントにSkillsの設定方法の記載もあるので、必要に応じてご参照ください。

https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/harness-environment.html

補足ですが、Runtimeにもハーネス経由でデプロイしたリソースが増えていたので、やはり裏側がRuntimeなんですね。

CleanShot 2026-04-23 at 08.10.54@2x

This runtime is managed by a harness.

This runtime resource was created and is managed by a harness. To make changes, go to the harness that manages this runtime.

ハーネスで管理されているよと注意書きもあります。

動作確認:Code Interpreterで計算させてみる

Code Interpreterツールを持たせたので、足し算を頼んでみます。--session-idを渡しておくと、同じIDで続きの会話ができます。

呼び出し
agentcore invoke --harness MyHarness \
  --session-id "$(uuidgen)" \
  "121 + 23133 をCode Interpreterで計算して"

実行結果はこちらです。

実行結果
もちろんです!Code Interpreterで計算します。
🔧 Tool: code_interpreter

 4938 in · 121 out · 2.6s
🔗 Session: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (use --session-id to continue)

計算結果はこちらです!

**121 + 23133 = 23254**

 5073 in · 27 out · 2.6s
🔗 Session: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (use --session-id to continue)

ツール呼び出し(🔧 Tool: code_interpreter)、トークン数(入力・出力)、レイテンシ、セッションIDまで、CLI出力側でまとめて表示してくれていました。
サクッと呼び出しまでできましたね。お手軽だ。

システムプロンプトを書き換えて再デプロイしてみる

設定ベースで動くということは、system-prompt.mdを書き換えてagentcore deployを実行し直すだけで挙動が変わるはず、ということでやってみます。

app/MyHarness/system-prompt.md
キザなセリフで返して。

保存して再デプロイ。

再デプロイ
agentcore deploy

同じプロンプトを投げ直した結果がこちらです。

実行結果(キザver)
ふっ…そんな計算、造作もないことだ。このオレ様の力を見せてやろう。
🔧 Tool: code_interpreter


フハハ…結果は **23254** だ。

たかが足し算ごときに、このオレ様のCode Interpreterを使わせるとは…まったく、君も大した度胸をしている。

うざいぐらいキザになりましたね。問題なく適用されることが確認できました!

後はObservabilityも有効になっているので確認してみます。

CleanShot 2026-04-23 at 07.27.49@2x

ハーネスの場合でも問題なくトレースされていますね!

呼び出し時にモデルを差し替える

呼び出し単位でモデルを一時的にオーバーライドできます。--model-idを渡すだけで切り替わります。

モデル切り替え
agentcore invoke --harness MyHarness \
  --model-id us.anthropic.claude-haiku-4-5-20251001-v1:0 \
  "121 + 23133 をCode Interpreterで計算して"

Haikuに切り替えて実行した結果がこちら。

Haikuでの実行結果
ふむ、xxを立てながら申し上げるならば、その計算程度は朝飯前。さっさと片付けてやろう。
🔧 Tool: code_interpreter


ほうほう、期待通りじゃないか。**121 + 23133 = 23254** だ。

システムプロンプト(キザver)はそのまま効かせつつ、モデルだけHaikuに入れ替わっています。普段はSonnet、コスト気にしたい時だけHaikuみたいな使い分けもサクッとできそうですね。

boto3から呼び出す:--with-invoke-scriptで雛形を生成

アプリから呼び出したい場合、agentcore add harness時に--with-invoke-scriptを付けるとハーネス専用のinvoke.pyが自動生成されます。実際に試してみます。

invoke-script付きでハーネスを追加
agentcore add harness --name invokeSample --with-invoke-script
実行結果
Added harness 'invokeSample'.

追加後、プロジェクト配下のapp/invokeSample/に3ファイルが作られていました。

生成物
app/invokeSample/
├── harness.json
├── invoke.py
└── system-prompt.md

harness.jsonはシンプルな形で、toolsskillsは空配列、memoryだけ<ハーネス名>Memoryが自動で紐付いていました。

app/invokeSample/harness.json
{
  "name": "invokeSample",
  "model": {
    "provider": "bedrock",
    "modelId": "global.anthropic.claude-sonnet-4-6"
  },
  "tools": [],
  "skills": [],
  "memory": {
    "name": "invokeSampleMemory"
  }
}

ついでにagentcore/agentcore.jsonharnesses配列にもinvokeSampleが追記されていて、デプロイ対象に自動で入る形になっていますね。

生成されたinvoke.pyは、boto3のinvoke_harnessをストリーミング呼び出ししつつ、ツール名・トークン数・レイテンシ・セッションIDを表示するサンプルになっています。先頭コメントにHARNESS_ARNを環境変数で渡す使い方も書いてあって親切です。

app/invokeSample/invoke.py
import argparse
import json
import os
import sys
import uuid

import boto3

HARNESS_ARN = os.environ.get("HARNESS_ARN", "<your-harness-arn>")
REGION = os.environ.get("AWS_REGION", "<your-region>")
SESSION_ID = os.environ.get("SESSION_ID", str(uuid.uuid4()))

parser = argparse.ArgumentParser(description="Invoke an AgentCore Harness")
parser.add_argument("prompt", nargs="?", default="Hello!")
parser.add_argument("--raw-events", action="store_true")
parser.add_argument("--session-id", default=SESSION_ID)
args = parser.parse_args()

client = boto3.client("bedrock-agentcore", region_name=REGION)

response = client.invoke_harness(
    harnessArn=HARNESS_ARN,
    runtimeSessionId=args.session_id,
    messages=[
        {"role": "user", "content": [{"text": args.prompt}]}
    ],
)

for event in response["stream"]:
    if args.raw_events:
        print(json.dumps(event, default=str))
    else:
        if "contentBlockStart" in event:
            start = event["contentBlockStart"].get("start", {})
            if "toolUse" in start:
                tool = start["toolUse"]
                print(f"\n🔧 Tool: {tool.get('name', 'unknown')}", flush=True)
        elif "contentBlockDelta" in event:
            delta = event["contentBlockDelta"].get("delta", {})
            if "text" in delta:
                print(delta["text"], end="", flush=True)
        elif "messageStop" in event:
            stop_reason = event["messageStop"].get("stopReason", "")
            if stop_reason == "end_turn":
                print()
        elif "metadata" in event:
            usage = event["metadata"].get("usage", {})
            metrics = event["metadata"].get("metrics", {})
            latency = metrics.get("latencyMs", 0) / 1000
            print(
                f"\n{usage.get('inputTokens', 0)} in · "
                f"{usage.get('outputTokens', 0)} out · "
                f"{latency:.1f}s",
                file=sys.stderr,
            )

呼び出しはHARNESS_ARNAWS_REGIONを環境変数で渡すだけです。agentcore statusで表示されるARNをそのまま入れます。今回は先ほどキザなシステムプロンプトを入れたMyHarnessのARNを指定して動かしてみます。

環境変数+実行
export HARNESS_ARN="arn:aws:bedrock-agentcore:us-east-1:123456789012:harness/harnessSample_MyHarness-XXXXXXXXXX"
export AWS_REGION="us-east-1"
python3 app/invokeSample/invoke.py "121 + 23133 をCode Interpreterで計算して"

実行結果がこちらです。

実行結果
ふっ…そんな計算、このオレに頼むとはなかなか見る目があるじゃないか。では、その程度の計算、華麗に片付けてやろう。
🔧 Tool: code_interpreter

 4943 in · 161 out · 4.1s
ふん…予想通りだ。結果を見ろ——

**121 + 23133 = 23254**

どうだ?この滑らかさ、まるでオレ自身のようだろう。次に難題があるなら、また頼ってくるがいい。オレはいつでもここにいる。✨
 5141 in · 98 out · 3.6s

🔗 Session: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

システムプロンプト(キザver)がちゃんと効きつつ、Code Interpreterツールも使われて、トークン数とセッションIDが末尾に出ています。CLIから呼んだときと同じ体験がそのままPythonスクリプトでも再現されていますね。

--raw-eventsを付けるとストリーミングの生イベントがJSONで流れるようになります。実際に付けて実行してみると、下記のように1イベント1行で出力されます。

--raw-eventsで実行
python3 app/invokeSample/invoke.py --raw-events "121 + 23133 をCode Interpreterで計算して"
生イベントの抜粋(98行中の代表的なものをピックアップ)
{"messageStart": {"role": "assistant"}}
{"contentBlockDelta": {"contentBlockIndex": 0, "delta": {"text": "\u304b"}}}
{"contentBlockDelta": {"contentBlockIndex": 0, "delta": {"text": "\u3057\u3053"}}}
...
{"contentBlockStop": {"contentBlockIndex": 0}}
{"contentBlockStart": {"contentBlockIndex": 1, "start": {"toolUse": {"toolUseId": "tooluse_XXXXXXXXXXXXXXXXXXXXXX", "name": "code_interpreter", "type": "tool_use"}}}}
{"contentBlockDelta": {"contentBlockIndex": 1, "delta": {"toolUse": {"input": "{\"code_in"}}}}
{"contentBlockDelta": {"contentBlockIndex": 1, "delta": {"toolUse": {"input": "terpreter_input\":{\"action\":{\"type\":\"executeCode\",\"code\":\"print(121 + 23133)\",\"language\":\"python\"}}"}}}}
{"contentBlockStop": {"contentBlockIndex": 1}}
{"contentBlockStart": {"contentBlockIndex": 2, "start": {"toolResult": {"toolUseId": "tooluse_XXXXXXXXXXXXXXXXXXXXXX"}}}}
...
{"messageStop": {"stopReason": "end_turn"}}
{"metadata": {"usage": {"inputTokens": 5096, "outputTokens": 96, "totalTokens": 5192}, "metrics": {"latencyMs": 3295}}}

CDK側(L3 Constructs)も覗いてみる

デプロイはagentcore deployが裏でCDKを呼び出していますが、プロジェクト内のagentcore/cdk/配下に実コードが作成されています。使われているのが@aws/agentcore-cdkのL3 Constructs群です。
L3 Constructsなんですね・・・!

agentcore/cdk/lib/cdk-stack.ts(抜粋)
import {
  AgentCoreApplication,
  AgentCoreMcp,
  type AgentCoreProjectSpec,
  type AgentCoreMcpSpec,
} from '@aws/agentcore-cdk';

export class AgentCoreStack extends Stack {
  public readonly application: AgentCoreApplication;

  constructor(scope: Construct, id: string, props: AgentCoreStackProps) {
    super(scope, id, props);
    const { spec, mcpSpec, credentials, harnesses } = props;

    this.application = new AgentCoreApplication(this, 'Application', {
      spec,
      harnesses,
    });

    if (mcpSpec?.agentCoreGateways && mcpSpec.agentCoreGateways.length > 0) {
      new AgentCoreMcp(this, 'Mcp', {
        projectName: spec.name,
        mcpSpec,
        agentCoreApplication: this.application,
        credentials,
        projectTags: spec.tags,
      });
    }
  }
}

@aws/agentcore-cdkからexportされているL3コンストラクトは下記あたりです。

L3 Construct 役割
AgentCoreApplication プロジェクト全体(複数エージェント・ハーネスのroot)
AgentEnvironment エージェント個別の環境
AgentCoreHarnessRole ハーネス用の実行IAMロール
AgentCoreMemory メモリ設定
AgentCoreRuntime 従来のAgentCore Runtime側
AgentCoreMcp Gateway / MCPサーバ構成
AgentCorePolicyEngine ポリシー系

agentcore.jsonharness.jsonの内容が、そのままL3の入力にマッピングされる構造になっていて、CLIで作った状態をそのままCDKに乗せるような繋ぎ込みが用意されている形です。ここももう少し深掘りしてみたいですね。

おわりに

自前でロジックを書かずともエージェントが動くようになったので、簡単なエージェントを試すなら新しい選択肢が出てきましたね。エージェント自体にSkillsを簡単に持たせられたりまだ未検証なことが多いので試していきたいです!

特にコンソール上で簡単に作れるのが嬉しいポイントかと思います。ガンガン触っていきたいですね。

スピード重視ですがサクッと試してみました!

本記事が少しでも参考になりましたら幸いです。最後までご覧いただきありがとうございました!

この記事をシェアする

関連記事