English | 日本語
これは完全に自律型のソフトウェア開発AIエージェントの実装例です。エージェントはクラウド上の開発環境で独立して動作するため、ノートパソコンに縛られることなく作業ができます!


Remote SWE エージェントによるセッション例:
| 例1 | 例2 | 例3 | 例4 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| GitHub issueによる指示。結果のPR | 単一の指示で複数のリポジトリに対応 PR#1、PR#2、PR#3 | エージェントは画像の入出力も可能。 | エージェントは英語以外の言語も話せます。結果のPR |
エージェントによって作成された公開プルリクエストはすべてこちらで確認できます。このGitHubユーザーからプッシュされたすべてのコミットは、エージェントによって自律的に作成されています。
最小限の設定で簡単にデプロイするには、ワンクリックデプロイメントソリューションをご利用いただけます: AWS Sample One-Click Generative AI Solutions
Webインターフェースでシステムを起動します。
git clone https://github.com/aws-samples/remote-swe-agents.git
cd remote-swe-agents
cdk ディレクトリ内にあるサンプルテンプレートから .env.local ファイルを作成してください:
cd cdk
cp .env.local.example .env.local
[!IMPORTANT]
.env.local.exampleファイルはcdk/ディレクトリ内にあります。デプロイ前にこのファイルをコピーして編集してください。
cdk/.env.local を編集して、以下のオプション設定を行います:
デプロイ中に初期webappユーザーを自動作成できます:
INITIAL_WEBAPP_USER_EMAIL=your-email@example.com
設定すると、デプロイ中にCognitoユーザーが作成され、指定されたメールアドレスに一時パスワードが送信されます。
この変数を設定しない場合は、後でAWS Cognitoマネジメントコンソールを通じて手動でユーザーを作成できます。AWS管理コンソールでの新しいユーザーの作成を参照してください。
ワーカーインスタンス設定
ワーカーインスタンスロールにアタッチする追加のマネージドポリシーを設定できます。AWSマネージドポリシーの名前とARN形式の両方を設定できます:
WORKER_ADDITIONAL_POLICIES=AmazonS3ReadOnlyAccess,arn:aws:iam::123456789012:policy/CustomPolicy
既存VPCの使用
新しいVPCを作成する代わりに既存のVPCを使用する場合は、VPC IDを指定します:
VPC_ID=vpc-12345abcdef
Bedrock クロスリージョン推論
クロスリージョン推論プロファイルのリージョンを選択します(デフォルト: us):
BEDROCK_CRI_REGION_OVERRIDE=global # global, us, eu, apac, jp, au から選択
[!NOTE] 一部のモデル(例:Opus 4.5)は
globalプロファイルが必要です。[!NOTE] ここでは、GitHub Actions変数から設定を注入するために環境変数を使用しています。これが便利でない場合は、
bin/cdk.ts内の値を直接ハードコードすることもできます。
cd cdk && npm ci
npx cdk bootstrap
npx cdk deploy --all
デプロイには通常約10分かかります。
以上です! デプロイ後、CDKスタック出力に表示されるWebappUrlを通じてwebappにアクセスできます。この時点では、WebインターフェースとAPIを通じてシステムを利用でき、エージェントはタスクを実行できますが、次のステップでGitHub連携を設定するまでGitHubへのアクセスはできません。
エージェントがGitHubリポジトリとやり取り(クローン、PR作成など)できるようにするには、以下のいずれかのオプションを設定します。
どちらのオプションを選ぶべきか?
repo, workflow, read:org$TARGET_ENV はデプロイ環境名、例: Sandbox):
bash
aws ssm put-parameter \
--name /remote-swe/$TARGET_ENV/github/personal-access-token \
--value "your-access-token" \
--type Stringcdk/bin/cdk.ts のスタックpropsにGitHub設定を追加:
typescript
github: {
personalAccessTokenParameterName: `/remote-swe/${targetEnv}/github/personal-access-token`,
},[!NOTE] システムを複数の開発者と共有したい場合、個人の権限の悪用を防ぐために、自分のアカウントのPATを使用するのではなく、GitHubのマシンユーザーアカウントを作成することをお勧めします。
$TARGET_ENV はデプロイ環境名):
bash
aws ssm put-parameter \
--name /remote-swe/$TARGET_ENV/github/app-private-key \
--value "$(cat your-private-key.pem)" \
--type Stringhttps://github.com/organizations/<YOUR_ORG>/settings/installations/<INSTALLATION_ID>)からインストールIDを確認できますcdk/.env.local に以下の環境変数を設定:
sh
GITHUB_APP_ID=your-github-app-id
GITHUB_INSTALLATION_ID=your-github-installation-idcdk/bin/cdk.ts のスタックpropsにGitHub設定を追加:
typescript
github: {
privateKeyParameterName: `/remote-swe/${targetEnv}/github/app-private-key`,
appId: process.env.GITHUB_APP_ID!,
installationId: process.env.GITHUB_INSTALLATION_ID!,
},[!NOTE] 現在、GitHub Appを使用する場合、単一の組織(つまり、アプリのインストール)の下のリポジトリのみを使用できます。
GitHub連携を設定した後、再デプロイします:
cd cdk && npx cdk deploy --all
Slackボット機能を有効にして、Slackから直接エージェントとやり取りできるようにします。
https://redacted.execute-api.us-east-1.amazonaws.com)を実際のURLに置き換えてくださいSlackBoltEndpointUrlで確認できます(Slack有効化デプロイ後)詳細については、こちらのドキュメントを参照してください:マニフェストでアプリを作成および設定する
SlackのシークレットをAWSアカウントに登録します($TARGET_ENV はデプロイ環境名):
aws ssm put-parameter \
--name /remote-swe/$TARGET_ENV/slack/bot-token \
--value "your-slack-bot-token" \
--type String
aws ssm put-parameter \
--name /remote-swe/$TARGET_ENV/slack/signing-secret \
--value "your-slack-signing-secret" \
--type String
cdk/bin/cdk.ts のスタックpropsにSlack設定を追加:
slack: {
botTokenParameterName: `/remote-swe/${targetEnv}/slack/bot-token`,
signingSecretParameterName: `/remote-swe/${targetEnv}/slack/signing-secret`,
},
Slackワークスペース内のどのメンバーがエージェントにアクセスできるかを制御するには、cdk/.env.local にSlackユーザーIDのカンマ区切りリストを記述します:
SLACK_ADMIN_USER_ID_LIST=U123ABC456,U789XYZ012
[!NOTE] 共有(個人ではなく)Slackワークスペースを使用している場合は、エージェントへのアクセスを制御するために
SLACK_ADMIN_USER_ID_LISTの設定を推奨します。この制限がないと、ワークスペース内の誰でもエージェントにアクセスでき、潜在的にあなたのGitHubコンテンツにもアクセスできてしまいます。[!NOTE] デプロイ後にユーザーにアプリへのアクセス権を付与するには、
approve_userメッセージとユーザーのメンションをアプリでメンションします。例:@remote-swe approve_user @Alice @Bob @Carol
cd cdk && npx cdk deploy --all
完了です! これでWebインターフェースに加えてSlackボット機能も利用できます。
デプロイが成功した後、以下の方法でRemote SWE Agentsシステムにアクセスできます:
WebappUrlを探してください)画像のアップロードと設定管理
Slackインターフェース(設定済みの場合):Slackアプリをメンションするだけで、エージェントにタスクを割り当て開始
リアルタイムの進捗更新
APIアクセス:プログラマティック統合用のRESTful APIエンドポイントを使用
カスタムアプリケーションの開発
GitHub Actions統合(GitHub設定済みの場合):GitHub Actionsを使用してリポジトリと統合
エージェントを効果的に使用するためのヒントについては、以下の「有用なヒント」セクションを参照してください。
このリポジトリはGitHub Actionとして使用でき、issueコメント、アサイン、PRレビューなどのGitHubイベントから自動的にRemote SWEエージェントをトリガーできます。GitHub ActionはRemote SWE API機能を使用してエージェントセッションを作成・管理します。
ワークフローでaws-samples/remote-swe-agentsを使用し、APIベースURLとキーをリポジトリシークレットとして設定してください。APIキーはデプロイされたwebappインターフェースから生成できます。入力パラメータについてはaction.ymlを、完全なワークフロー例については.github/workflows/remote-swe.ymlを参照してください。
このプロジェクトは現在、シングルテナントシステムとして設計されており、テナントごとにデプロイすることを想定しています。
完全従量課金制モデルに従っているため、複数のインスタンスをデプロイするオーバーヘッドは、インフラストラクチャコストの観点では最小限です。
各テナントのアクセスを制御するために、以下のアクセス許可設定があります:
SLACK_ADMIN_USER_ID_LIST環境変数を設定して、許可されていないユーザーからのアクセスを拒否できます。その後、approve_user Slackコマンドを使用して許可されたユーザーを追加できます。エージェントを起動するとき、指示には少なくとも以下の内容を含めるべきです:
ワークフローを簡素化するために、上記の情報を含むGitHub issueをリポジトリに作成し、エージェントにそのURLを渡すことができます。 この方法では、リポジトリはURLから自動的に推測され、新しいPRを対応するissueにリンクすることもできます。
デプロイされたWeb UIを通じて、すべてのエージェントのグローバル設定を行うことができます。これらの設定はWebインターフェースとSlackの両方から起動されるエージェントに適用されます:
デフォルトの基盤モデル: 新しいエージェントセッションがすべて使用するデフォルトの基盤モデルを設定できます。最新の利用可能なモデルの一覧は、models.tsを参照してください。
共通エージェントプロンプト: すべてのエージェントが使用する共有システムプロンプトを設定できます。これは組織全体のコーディング規約、推奨ライブラリ、またはすべての開発タスクに適用すべき特定の指示を設定する際に有用です。
これらの設定にアクセスするには、デプロイされたwebappインターフェースの設定ページに移動してください。
エージェントはMCPクライアントとして機能できるため、さまざまなMCPサーバーと簡単に統合できます。統合を設定するには、mcp.jsonを編集してCDK deployを実行します。例えば、
"mcpServers": {
"awslabs.cdk-mcp-server": {
"command": "uvx",
"args": ["awslabs.cdk-mcp-server@latest"],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
これにより、すべての新しいエージェントがMCPサーバーをツールとして使用できるようになります。
このシステムはSlack Boltアプリケーションを利用して、ユーザー操作を管理し、スケーラブルなワーカーシステムを実装しています。以下が主なワークフローです:
API Gatewayがwebhook要求を受け取り、Lambda関数に渡します
イベント管理とメッセージ配信
メッセージ履歴は後続の処理で参照するためDynamoDBに保存されます
ワーカーシステム管理
各ワーカーユニットには実際の処理を担当するSWEエージェントが含まれています
フィードバックループ
このアーキテクチャにより、スケーラブルで信頼性の高いメッセージ処理システムが実現されます。サーバーレスコンポーネント(Lambda、API Gateway)とワーカーごとの専用EC2インスタンスの組み合わせにより、リソースの分離と柔軟なスケーラビリティが確保されます。

AIエージェントは強力な機能を提供しますが、同時に潜在的なセキュリティリスクももたらします。以下は、これらのリスクを軽減するための推奨プラクティスです:
エージェントがローカルファイルシステムを操作するような誤動作があっても、ユーザーのシステムには影響しない
最小権限の原則
WORKER_ADDITIONAL_POLICIES環境変数で権限を追加する場合は、エージェントの意図しない動作に関連するリスクを慎重に評価すること権限の影響範囲を考慮し、絶対に必要なものだけに制限する
**
$ claude mcp add remote-swe-agents \
-- python -m otcore.mcp_server <graph>