はじめに
2026年9月22日、AWSから Strands harness がOSSとして公開されました。
「1行のimportで、すぐ使える完成済みのAIエージェントが手に入る」というコンセプトのライブラリです。
本記事では、Strands harness の概要と、インストールから最初のエージェントを動かすまでの手順をまとめます。
本記事の内容は執筆時点(strands-harness 0.1.2)の情報です。
Strands harness とは
ひとことで言うと
「推奨設定がすべて組み込まれた、Strands Agents の完成品エージェント」 です。
これまでの Strands Agents SDK(Agent())は、ツール・システムプロンプト・セッション管理などを自分で組み立てる「白紙のキャンバス」でした。
Strands harness は、それらを AWS が最適化したデフォルト値で組み上げた状態で、create_harness() 1回の呼び出しで提供してくれます。
| 項目 |
Agent()(従来SDK) |
create_harness() |
|---|---|---|
| ツール | なし | 12個の組み込みツール |
| システムプロンプト | 空 | 組み込み済み(探索→実行、不可逆な操作は確認) |
| セッション管理 | なし | ローカル保存(.agent/配下) |
| 長期メモリ | なし | 有効 |
| プロンプトキャッシュ | 自分で設定 | 自動 |
主な機能
- マルチモデル対応:Amazon Bedrock / Anthropic / OpenAI / Google / Ollama / LiteLLM。デフォルトは Bedrock の Claude Opus 5(推論機能ON)
- コンテキスト管理:大きなツール結果を退避し、コンテキストウィンドウの逼迫時には自動で圧縮
- メモリ:セッションIDによる会話の継続と、セッションをまたぐ長期メモリ
- 組み込みツール:シェル実行、ファイルの読み書き・編集、Webページ取得など
- マルチエージェント:サブタスクをヘルパーエージェントに委任し、ToDoリストで進捗を管理
-
Agent Skills 対応:
./.agent/skillsに置いたスキルを自動で読み込み
設計思想
Strands harness は Strands Harness SDK の上に構築されており、すべてのデフォルト値は上書き可能です。
create_harness() が返すのは独自のラッパーではなく 通常の Strands Agent オブジェクト なので、既存の Strands の知識がそのまま使えるそうです。
公式の発表では、同じ Claude / GPT モデルを使った場合に、6つのベンチマークで トークン消費を約28%削減 できたとされています。
関連ツール
| 名前 | 役割 |
|---|---|
| Strands harness | 完成済みのエージェント(本記事の対象) |
| Strands Harness SDK | 独自のハーネスを組み立てるためのSDK |
| Strands CLI | ターミナルから対話的にエージェントを試せるCLI |
| Strands Shell | セキュアなサンドボックス実行環境 |
| Strands Evals | エージェントの評価・テスト |
前提条件
| 項目 | 内容 |
|---|---|
| Python | 3.10以上(本記事では3.14を使用) |
| パッケージ管理 | pip または uv |
| AWSアカウント | Amazon Bedrock を使う場合に必要 |
| Bedrockのモデル | Claude Opus 5 が利用可能であること |
Strands harness はデフォルトで シェル実行・ファイル書き込みツールが有効 です。
エージェントが実行ディレクトリ内でコマンドを実行したりファイルを作成したりするため、検証用の専用ディレクトリで試すことをおすすめします。
インストール手順
1. プロジェクトを作成する
uv を使ってインストール
uv init --python 3.14 harness-try
cd harness-try
uv add strands-harness
2. AWS認証情報を設定する
デフォルトのモデルは Amazon Bedrock の Claude Opus 5 です。以下のどちらかで認証情報を設定します。
方法A:AWS CLIの認証情報を使う
aws configure
# または SSO を使っている場合
aws sso login --profile <プロファイル名>
export AWS_PROFILE=<プロファイル名>
方法B:Bedrock APIキーを使う
export AWS_BEARER_TOKEN_BEDROCK=<BedrockのAPIキー>
リージョンも指定しておきます。
export AWS_REGION=us-east-1
デフォルトのモデルIDは global.anthropic.claude-opus-5(グローバル推論プロファイル)です。
事前に Amazon Bedrock コンソールでモデルが利用可能になっているか確認しておきましょう。
3. 最初のエージェントを動かす
main.py を作成します。
以下のコードだけでエージェントが動くので、簡単かつ手軽にエージェントを作成することができます。すごい。
from strands_harness import create_harness
agent = create_harness()
agent("REST APIのバージョニング戦略でよく使われるものを3つ調べて、比較表を versioning.md にまとめてください")
main.py は uv init で作成したプロジェクトフォルダ(harness-try)の中に作成してください。
別のフォルダで uv run を実行すると、仮想環境が使われず ModuleNotFoundError: No module named 'strands_harness' になります。
実行します。
# uv の場合
uv run main.py
# pip の場合
python main.py
エージェントが調査・思考しながらツールを呼び出し、最終的に versioning.md が作成されれば成功です。
実行時に次の警告が表示されます。
Model bedrock/global.anthropic.claude-opus-5 has no native web search. Pass builtin_tools={'web_search': 'exa'} to search through Exa (a third party), or drop 'web_search'.
Bedrock のモデルにはネイティブのWeb検索機能がないため、web_search ツールが無効化されたという意味です(web_fetch によるページ取得は使えます)。動作に支障はありません。
4. 組み込まれているツールを確認する
create_harness() が返すのは通常の Strands Agent なので、そのままツール一覧を確認できます。
from strands_harness import create_harness
agent = create_harness()
print(agent.tool_names)
['shell', 'read', 'write', 'edit', 'web_fetch', 'programmatic_tool_caller', 'subagent',
'retrieve_offloaded_content', 'todo_write', 'retrieve_context',
'strands_manage_background_task', 'search_memory']
| ツール | 役割 |
|---|---|
shell |
シェルコマンドの実行 |
read / write / edit
|
ファイルの読み込み・作成・編集 |
web_fetch |
Webページの取得 |
programmatic_tool_caller |
コードからツールをまとめて呼び出す |
subagent |
サブエージェントへのタスク委任 |
todo_write |
ToDoリストによる進捗管理 |
retrieve_offloaded_content |
退避した大きなツール結果の再取得 |
retrieve_context |
過去の会話コンテキストの検索 |
search_memory |
長期メモリの検索 |
strands_manage_background_task |
バックグラウンドタスクの管理 |
5. セッションを継続する
session にIDを渡すと、会話が ./.agent/sessions に保存され、次回の実行で続きから会話できます。
from strands_harness import create_harness
agent = create_harness(session={"id": "api-design"})
agent("外部の顧客に公開するAPIなら、その3つのうちどれを選びますか?")
試しに上記コードを動かした後、./.agent/sessions を確認してみると以下の構造となっていました。長期メモリもマークダウン形式で11ファイル作成されていましたね。
.agent/
├── sessions/session/
│ ├── api-design/ ← session={"id": "api-design"} で作られたもの
│ └── ec48a1f8/ ← IDを指定せずに実行したときに自動で付いたもの
└── memory/ ← 長期メモリ(11ファイル)
セッションフォルダの消し方の例は以下です。
# インストール済みのフォルダまで移動
cd ~/harness-try
# 1. 特定のセッションだけ消す(例:api-design の会話だけリセット)
rm -rf .agent/sessions/session/api-design
# 2. 会話履歴をすべて消す
rm -rf .agent/sessions
# 3. 長期メモリも含めて完全にまっさらにする
rm -rf .agent
(補足)モデルを変更する
model 引数で、使うモデルやプロバイダーを切り替えられます。
from strands_harness import create_harness
# Bedrock のモデルIDを指定
agent = create_harness(model="global.anthropic.claude-opus-5")
# 「プロバイダー/モデル名」形式で指定
agent = create_harness(model="openai/gpt-5.6-sol")
# 推論の強さを指定(auto / low / medium / high / off)
agent = create_harness(model="anthropic/claude-opus-5", effort="high")
リージョンなどを細かく指定したい場合は、Strands の BedrockModel を渡します。
from strands.models import BedrockModel
from strands_harness import create_harness
model = BedrockModel(model_id="global.anthropic.claude-opus-5", region_name="us-west-2")
agent = create_harness(model=model)
おわりに
Strands harness は、pip install と数行のコードだけで、ファイル操作・シェル実行・メモリ・サブエージェントを備えたエージェントが作成できるため、お試し的に何か作成してみたい方にはとっつきやすいなと思いました。
私自身も簡単にインストールから実行まで出来ました!
今後は、組み込みツールのカスタマイズや MCP サーバーとの連携を試してみたいと思います。
参考
- https://strandsagents.com/docs/user-guide/harness/
- https://strandsagents.com/docs/user-guide/harness/quickstart/
- https://strandsagents.com/docs/user-guide/harness/configure/model/
- https://strandsagents.com/docs/user-guide/harness/reference/configuration/
- https://github.com/strands-agents/harness-sdk