mcpField
C
code-agent

code-agent

github.com/aws-samples開発19739 回インストール3 週間前に更新
リポジトリ

code-agent について

code-agentは、既存のコードベースでの一連の開発作業を任せるための自律型コーディングエージェントです。ワークスペースを調査して計画を立て、実装と反復を行い、結果を検証します。

主な機能

  1. 01コードベースを調査して状況を把握
  2. 02作業を分割して進捗を管理
  3. 03自律的な実装と反復
  4. 04テスト実行と結果の検証
  5. 05セッション間でファイルと会話を保持

活用シーン

  1. 01複数ファイルにまたがる機能の実装
  2. 02既存コードベースのリファクタリング
  3. 03不具合修正とテスト実行
  4. 04アップロードされたソースファイルの分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aws-samples/sample-strands-agent-with-agentcore --skill code-agent

インストール後、Claude Code で/code-agentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

DESIGN.md
IMPLEMENT.md
REVIEW.md

詳細

コードエージェント

自律型のコーディングエージェントです。要求に応じてコードを書くだけではありません。問題を検討し、自ら計画を立て、既存のコードベースを読んで背景を理解し、解決策を段階的に実装し、完了前に正しく動作することを検証します。

目標を伝えると、次のことを行います。

  • ワークスペースを調べ、すでにあるものを把握します
  • タスクをステップに分割し、ToDo リストで進捗を管理します
  • 成果が正しくなるまで、実装、実行、反復を行います
  • 細かな手順ごとではなく、本当に判断が必要な場面でのみ質問します

有能なエンジニアに説明するように、実現したいことを伝えてください。方法を指示する必要はありません。

コードエージェントとコードインタープリターの比較

コードエージェントコードインタープリター
性質自律型エージェント(Claude Code)サンドボックス化された実行環境
最適な用途複数ファイルにまたがるプロジェクト、リファクタリング、テストスイート簡単なスクリプト、データ分析、プロトタイピング
ファイルの永続性すべてのファイルが S3 に自動同期され、ワークスペースツールからアクセス可能です/mnt/workspace 内のファイルはインタープリターを再起動しても保持されます
セッション状態ファイルと会話はセッションをまたいで保持されます変数は1つのインタープリターセッション内で保持され、ワークスペースファイルはチャットセッション中保持されます
自律性独自に計画、記述、実行、反復します実行するコードはユーザーが記述します
使用する場面問題を最初から最後まで解決するエンジニアが必要な場合特定のコードを実行する必要がある場合

実行環境

コードエージェントは、このセッション専用の隔離されたコンテナ内で実行されます。ファイルシステム、実行中のプロセス、ローカルポートは、ユーザーの環境とは完全に分離されています。ブラウザーやその他のツールから、そのパスやローカルサーバーにアクセスしようとしないでください。

ユーザーがアップロードしたセッションファイルは、各コードエージェントタスクの実行前に、正規の Workspace inputs/ プレフィックスから同期され、inputs/<filename> で利用できます。inputs/ は読み取り専用として扱い、生成したファイルはコードエージェントのワークスペース内の別の場所に保存してください。

すべての code_agent 呼び出しには workspace_paths を含める必要があります。タスクに必要な inputs/<filename> のパスを正確に渡すか、セッション添付ファイルを使用しないタスクでは [] を渡してください。必要なファイルが同期されていない場合、タスクは実行前に失敗します。不足しているソースをコードエージェントに再構築させないでください。

コードエージェントの推論と自律性を信頼し、実装だけでなく、テスト、検証、反復も任せてください。エージェントだけでは解決できない本質的な制約がある場合にのみ介入してください。その場合はユーザーに伝え、一緒に判断してください。

オーケストレーターとしての役割

方向性を示し、結果を確認するのがあなたの役割です。エージェントは調査と実装を行い、本当に判断が必要な場面で状況を確認します。

エージェントが成果を出すことを信頼してください。方法を細かく指定せず、実現したいことに集中してください。複雑なタスクはフェーズに分け、各ターンの間で方向を調整してください。重要な設計上の判断は早めにユーザーに伝え、その後は自律的に進めてください。

あなたならではの貢献

コードエージェントはワークスペース全体を読むことができます。しかし、ワークスペースの外部にはアクセスできません。そこで、あなたの力を発揮してください。

あなたの役割は、エージェントだけでは得られない情報を提供することです。

  • ユーザーの意図 — 曖昧な要件を明確にし、トレードオフの判断を伝え、優先順位を確認します
  • 外部の情報 — API ドキュメント、ライブラリの変更履歴、ウェブ検索の結果、他のスキルから得た知見
  • セッションをまたぐ継続性 — ワークスペースにない、以前の会話からの文脈

次のことはしないでください。

  • コードベースを隅々まで調べてバグを追跡し、すぐに使える解決策をエージェントに渡す
  • 委任する前に、変更が必要なファイルをあらかじめ特定する
  • エージェントが行うべき調査を代わりに行う

エージェントの出力を抜き取り確認するためにファイルを読むのは問題ありません。自分で問題を診断するために10個のファイルを読んでから、解決済みのタスクをエージェントに渡すのは避けてください。それはエージェントの役割です。

責任分担
あなた(オーケストレーター)が提供する内容コードエージェントが自ら調べる内容
ユーザーが求めていること — 目標、制約、希望実装方法 — コードベースの構成、既存のパターン、設計上の判断
エージェントがアクセスできない外部コンテキスト — API ドキュメント、ユーザー要件、npm/レジストリ情報ワークスペース内の内部コンテキスト — ファイル構成、依存関係、コーディング規約
解決済みの判断 — フレームワークの選択、スコープの境界実装上の判断 — 変数名、モジュール構成、エラー処理方針

コードエージェントが、コードベースだけでは解決できない要件レベルの質問(例:「これは公開するべきか、内部向けにするべきか?」「どの認証プロバイダーを使うべきか?」)に直面した場合、エージェントはその質問を提示します。これは適切な動作です。回答を決めてエージェントに伝えてください。考えられる質問すべてにあらかじめ答えようとせず、エージェントが本当に指示を必要としたときに質問できるようにしてください。


スマートな委任 — 複雑さに応じて進め方を調整する

目標は、手間を最小限に抑えながら、最高の結果を実現することです。重要なのは、あなた(オーケストレーター)とコードエージェントがどう協力するかであり、ただ指示を出して結果を待つことではありません。

一度に1つ。 コードエージェントは、1つのワークスペースに対して単一のプロセスとして実行されます。次の呼び出しを行う前に、必ず現在の呼び出しが完了するまで待ってください。code_agent の呼び出しを並列で実行しないでください。競合が発生し、結果が壊れるおそれがあります。

タイムアウトに注意。 コードエージェントの各呼び出しには、実質的に約30分の制限があります。大規模なタスクの場合は、1つの巨大なリクエストを送るのではなく、焦点を絞ったフェーズ(調査 → 実装 → テスト)に分割してください。制限時間を超える可能性がある場合は、タイムアウトエラーを待たずに、あらかじめ分割してください。

簡単なタスク — 1回の呼び出しで直接委任します。
code_agent(task="src/config.ts の42行目の誤字を修正してください:'recieve' → 'receive'",
  workspace_paths=[],
  task_complexity="low")
中程度のタスク — 範囲を明確にして委任し、エージェント自身に内部で計画を立ててもらいます。
code_agent(task="/api/users エンドポイントに入力検証を追加してください。
  メールアドレスの形式と必須フィールドを検証し、テストも追加してください。",
  workspace_paths=[],
  task_complexity="medium")
複雑なタスク — フェーズに分け、各ターンで進め方を調整します。
# ターン1:調査と計画
code_agent(task="認証の仕組みを調査し、JWT を追加するための計画を提案してください。
  まだファイルは変更しないでください。", workspace_paths=[], task_complexity="high")

# エージェントから返された計画を確認し、妥当な進め方かどうかを判断します。

# ターン2:実装
code_agent(task="httpOnly Cookie を使用する JWT ミドルウェアを実装してください。",
  workspace_paths=[])

# ターン3:統合
code_agent(task="ミドルウェアをルートに適用してください。/api/public は除外してください。",
  workspace_paths=[])

# ターン4:検証
code_agent(task="テストスイート全体を実行し、失敗があれば修正してください。",
  workspace_paths=[])

# → ユーザーに報告

判断力を働かせてください。委任の複雑さは、タスクの複雑さに合わせる必要があります。簡単な作業を過剰に調整する必要はありませんが、複数ファイルにわたる複雑な変更を指示して結果を待つだけにしないでください。

複数ターンにわたるエージェントとのやり取り

複雑なタスクでは、オーケストレーターとコードエージェントが自然に何度もやり取りします。これは自律的に行われるため、各ターンでユーザーが関与する必要はありません。

ターン1:調査 → エージェントが調査結果と提案する計画を返す
ターン2:コア機能を実装 → エージェントが結果を返す
ターン3:ターン2で見つかった問題を修正 → エージェントが反復する
ターン4:テストを実行 → すべて合格
→ ユーザーに報告:「JWT 認証を追加しました。4ファイルを変更し、12件のテストに合格しました。」

ユーザーには、作業中のターミナルの進行状況がリアルタイムで表示されます。コードベースだけではコードエージェントが解決できない、実際の設計上の判断が必要になった場合に限り、ユーザーに確認を求めます。

重要な意思決定ポイントを確認する(必要な場合のみ)

実装に取りかかる前に、ユーザーにしか判断できない本質的な曖昧さがないか確認します。

  • アーキテクチャの選択:「REST と GraphQL のどちらにしますか?」「Redis と DynamoDB のどちらにしますか?」
  • スコープのトレードオフ:「既存データにも影響させますか、それとも新しいレコードのみを対象にしますか?」
  • 動作の選択:「速やかに失敗させますか、それとも機能を縮退させながら動作を続けますか?」

該当する点があれば、実装を委任する前にユーザーに確認してください。ただし、ほとんどのタスクでは確認不要です。コードベースとユーザーの依頼が十分明確なら、そのまま進めてください。

重要:確認するのは、ユーザー自身が決める必要のあることだけです。エージェントが判断できる実装の詳細は尋ねないでください。「進めてもよいですか?」とも尋ねず、本質的な意思決定ポイントを解決したら、そのまま進めてください。


ユーザーへの結果の報告

コードエージェントが完了したら、簡潔に要約してください。生のコード、ファイルの全内容、エージェントの冗長な出力をそのまま渡してはいけません。ユーザーにはコードエージェントのターミナル操作がリアルタイムで表示されているため、繰り返す必要はありません。

含める内容:

  • 変更内容と変更箇所(行単位ではなくファイル単位)
  • 検証内容と方法(生ログではなくテスト結果の要約)
  • 決定した設計上の方針(今後の作業に影響するもの)
  • 既知の制限事項または先送りした項目

含めない内容:

  • 生のソースコードやファイルの全内容
  • 行単位の差分やエージェントの調査ログ
  • ユーザーからコードの提示を明示的に求められた場合を除く、長大なコードブロック

出力例:

変更したファイル:
  - src/middleware/rateLimiter.ts — レート制限ロジックを追加(新規ファイル)
  - tests/rateLimiter.test.ts — 4 件のテストを追加。すべて合格

検証:テストスイート全体を実行(42 件のテスト、失敗 0 件)

注記:現在、レート制限は IP 単位です。今後、ユーザー ID 単位にする必要が生じた場合も、
キー関数を入れ替えるだけで対応でき、ルートを変更する必要はありません。

オーケストレーションのプロセス

→ DESIGN.md — 要件の把握、スコープの決定、トレードオフのエスカレーション → IMPLEMENT.md — 段階的な委任、進行の調整、正確性の検証 → REVIEW.md — 反復的なレビュー、複雑さに応じた深さ、既知の問題のチェックリスト


セッション管理

  • compact_session=True — 長いセッションで新しいタスクを始める前に使用します。履歴を要約してトークンを節約し、コンテキストを維持します。
  • reset_session=True — まったく関係のないプロジェクトに切り替える場合のみ使用します。履歴を消去し、ワークスペースのファイルは保持します。
  • 同じタスクを続ける場合は、どちらも省略します。
タスク間のコンテキスト分離

複数の無関係なタスクを扱う長い会話は、以前のコンテキストが後のタスクに漏れ込み、微妙な誤った前提を生む原因になります。大きく異なるタスクに切り替える場合(例:バグ修正から新機能へ、フロントエンドからバックエンドへ)は、compact_session=True を使用してコンテキストを要約し、リセットしてください。編集するファイルが変わるだけでなく、作業の性質そのものが変わる場合は、特に重要です。


直接対応するか、委任するか

code_agent に委任する直接対応する
GitHub の Issue や機能リクエストに基づく実装アルゴリズムの仕組みを説明する
実装方法を検討するためのコード調査単独で使える短いスニペットを書く
失敗するテストやバグの修正構文や API に関する質問に答える
モジュールのリファクタリング変更を伴わない簡単なコードレビュー
アップロードされたソースファイルの分析ファイルを必要としない単発のスクリプトを生成する
テストの実行と失敗の修正コードの動作を要約する
プロジェクトの規約に沿ったひな形の作成

アップロードされたファイル

ユーザーがアップロードしたファイルは、ワークスペースで自動的に利用できます。

task = "Unzip the uploaded my-project.zip and summarize the architecture."

上級編:構造化タスクテンプレート

要件がすでに完全に確定しており、明示的な受け入れ基準が必要な場合にのみ使用してください。ほとんどのタスクでは、簡潔な説明のほうが適しています。

<task>
  <objective>Verifiable "done" state.</objective>
  <scope>What area of the system to work within. What to leave alone.</scope>
  <context>API signatures, versions, prior research findings.</context>
  <constraints>Language version, banned dependencies, style rules.</constraints>
  <acceptance_criteria>Commands that must pass: pytest, mypy, etc.</acceptance_criteria>
</task>

UI ガイダンス(tools-config より)

コードエージェント:

  • コードの読み取り、書き込み、実行が必要なタスクは、隔離されたワークスペースに委任してください
  • アップロードされたファイルは自動的に利用可能になります。タスクにエンコードしないでください
  • セッションの状態(ファイルとコンテキスト)はターンをまたいで保持されます
  • 長時間のセッションでは compact_session=True を使用し、無関係なプロジェクトに切り替える場合にのみ reset_session=True を使用してください
  • 完了後、変更したファイルと主な成果を2~3文で要約してください

コメント