mcpField
A
aider-delegate

aider-delegate

github.com/amelnagdyエージェントワークフロー2.5k3.0k 回インストール2 週間前に更新
リポジトリ

aider-delegate について

aider-delegateは、範囲を限定したコーディングタスクをAiderに委任し、生成された変更をレビューしてコミットするためのスキルです。中継スクリプトはAiderの自動コミット設定を無効にし、実行結果を記録します。判断とコミットはオーケストレーターが担います。

主な機能

  1. 01範囲を限定したタスクをAiderに委任
  2. 02ブリーフの転送と実行結果の記録
  3. 03自動コミットと既存変更のコミットを無効化
  4. 04差分のレビューとプロジェクト検査の再実行
  5. 05Aiderのチャット履歴から作業を再開

活用シーン

  1. 01範囲が明確な実装タスクの委任
  2. 02コミット前に生成された変更をレビュー
  3. 03レビュー後の修正作業を継続

MCP 対応

Codexのバックグラウンド委任では、別途codex-backgroundを導入し、そのdelegate_run MCPツールを呼び出す必要があります。その他のオーケストレーターはシェルの中継スクリプトを使います。

インストール

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

$npx skills add https://github.com/amelnagdy/delegate-skills --skill aider-delegate

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

同梱ファイル

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

references/
dispatch-and-poll.md
multi-task-queues.md
review-and-land.md
writing-the-brief.md
scripts/
relay.mjs

詳細

Aider Delegate

あなたはオーケストレーターです。範囲を限定したコーディングタスクを別の実装者である Aider に任せ、その成果をレビューして、自分で取り込みます。依頼内容をまとめ、判断の責任を持つのはあなたです。Aider は独立した実行環境でコードを書き、あなたが確認してコミットします。

このループに必要なのはシェルコマンドとファイルアクセスだけなので、同等のオーケストレーターであれば実行できます。

Aider について知っておくべきこと

Aider はデフォルトでコミットします。 デフォルト設定のうち 2 つは、このスキルが作成するレビュー可能な差分を損ないます。

  • --auto-commits(デフォルトは True)- Aider は各やり取りの後、自身の編集内容をコミットします。
  • --dirty-commits(デフォルトは True)- Aider は編集を始める前に、あなたの既存の未コミット作業をコミットします。

リレーは常に --no-auto-commits と --no-dirty-commits を渡し、これらをリレー経由で変更することはできません。リレーを介さずに aider を手動で実行する場合は、必ず両方を指定してください。そうしないと、レビューしていない作業がコミットとして取り込まれてしまいます。また、Aider は起動時に .aider* を .gitignore に書き込み、これから確認する作業ツリーを変更してしまうため、リレーは --no-gitignore も渡します。

使用しない場合

  • タスクがインラインで実行できるほど小さい場合。委任するオーバーヘッドに見合いません。
  • aider CLI がインストールされていない場合、またはモデルが設定されていない場合。
  • 実装者に独自のコミット管理を任せたい場合。Aider にはそれが可能ですが、このスキルでは意図的に無効にしています。成果物は差分です。

前提条件(一度だけ確認)

  1. Aider をインストールします。python -m pip install aider-chat を実行するか、Aider のインストール手順にあるスタンドアロンインストーラーを使用します。
  2. モデルを設定します。Aider はプロバイダーのキーを環境変数(OPENAI_API_KEY、ANTHROPIC_API_KEY、…)または独自の設定から読み込みます。Aider のモデルに関するドキュメントを参照してください。
  3. aider --version が正常に実行されることを確認します。
  4. 対象の Git リポジトリ内で作業するか、--cd でそのリポジトリを指定します。

モデルを選択する

--model を省略すると、Aider は自身に設定されたモデルを使用します。別のモデルを選択するには、--model <name> を指定します。

ローカルモデルとセルフホストモデル

Aider は OpenAI 互換のエンドポイントと通信するため、ユーザー自身のハードウェア上で実行されているモデル(llama.cpp のサーバー、Ollama、vLLM、LM Studio など、同じ API を提供するもの)への委任にもこのスキルを使えます。--model と --api-base を組み合わせます。

node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo \
  --model openai/<served-model-name> --api-base http://127.0.0.1:<port>/v1

ホスト型プロバイダーとは、次の 3 点が異なります。

  • openai/ プレフィックスが必要です。 これは、エンドポイントとの通信に OpenAI プロトコルを使うよう Aider に指示します。プレフィックス以降の部分は、プロバイダーのカタログ名ではなく、サーバーが返す任意の名前です。
  • プレースホルダーキーも必要です。 空ではない任意の OPENAI_API_KEY をエクスポートします。サーバーがその値を無視する場合でも、クライアントライブラリはヘッダーを必要とします。
  • より小さな編集形式を指定します。 ローカルモデルは、正確な検索/置換ブロックを必要とする Aider のデフォルトの diff 形式で失敗することがよくあります。--edit-format whole は信頼性と引き換えにトークンを多く使います。--file を使って依頼の範囲を狭く保ち、ファイル全体の書き換えのコストを抑えてください。

ローカルエンドポイントが起動していない場合、エラーではなく処理が停止したように見えます。Aider はリレーの --timeout ウォッチドッグが作動して status: "timeout" を報告するまで接続を再試行します。長い依頼を送る前に、サーバーが起動していることを確認してください。

オフライン状態の維持

アカウントの作成やプロバイダーへの登録は不要です。Aider は pip でインストールし、エンドポイントは自分で用意します。OPENAI_API_KEY は空でなければ十分です。リレーは、そうしないと単独でネットワークに接続するフラグを固定します。--no-check-update、--no-analytics(Aider 自体のデフォルトは random で、一部のセッションでは自動的にオプトインされます)、そして --no-detect-urls です。これを指定しないと、Aider は依頼文にある URL をスクレイピングするかどうか尋ね、--yes-always はその依頼を黙って承諾します。

--no-suggest-shell-commands を指定すると、確認なしで実行がネットワークに接続する可能性のある残りの経路も閉じられます。リレーの制御外にあるのは依頼文自体です。Aider にパッケージのインストールや API の呼び出しを指示すると、引き続き実行されます。また、--auto-lint はリポジトリ独自のツールを実行します。ここでいうオフラインとは、ディスパッチ経路上のどの処理も独自に外部へ接続しないという意味であり、サンドボックスが接続を阻止するという意味ではありません。

ループ

タスクごとに、次の 5 つのステップを実行します。ステップ 1、4、5 では判断が必要ですが、2 と 3 は機械的に実行できます。

1. 依頼文を作成する

Aider が参照するのは、送信したテキストと編集対象範囲内のファイルだけです。チャット履歴や共有コンテキストは参照しません。目標、現在の状態、変更する内容、変更しない内容、プロジェクトで実際に適用されるゲート、そしてレポートの要件を記載します。依頼文 1 つにつき、タスクは 1 つにしてください。references/writing-the-brief.md を参照してください。

2. ディスパッチする

Codex でバックグラウンド作業をオーケストレーションする場合は、まず別途提供されている codex-background サポートユーティリティをインストールして設定してください。その MCP ツールまたはレジストリが見つからない場合は、そこで停止してセットアップが必要であることを報告してください。モデル主導のポーリングに黙って切り替えてはいけません。その後、以下のシェル例の代わりに、登録済みの delegate_run MCP ツールを 1 回呼び出します。 このスキルに従い、構造化された共通引数、変更されていないプロバイダーフラグ、runId による再接続を使用してください。完了するまでリクエストを保留にし、その後、このスキルのレビューと反映の手順を続けます。その他のオーケストレーターでは、以下のシェルワークフローを使用します。

同梱のヘルパーを使用します。Aider のヘッドレス --message-file モードをラップして実行を記録し、result.json を書き込みます。(<skill-dir> は、この SKILL.md を含むインストール先フォルダーです。)

node "<skill-dir>/scripts/relay.mjs" --brief brief.txt --cd /path/to/repo
# choose a model:                        add --model <name>
# point at an OpenAI-compatible server:  add --api-base <url>
# scope the edit surface:                add --file <path> (repeatable), --read <path> for context only
# dry run, no files modified:            add --read-only
# continue the previous chat:            add --resume-last  (delta brief only)
# hard time limit (watchdog):            add --timeout 2h  (the 30m default suits short runs; implementation briefs routinely need 1-2h)
# see all options:                       node .../relay.mjs --help

子プロセスの cwd によってワークスペースが固定されます。依頼文は --message-file で渡されるため、argv に含まれることはありません。そのため、ホストのプロセス一覧に表示されず、OS の引数サイズ上限にもかかりません。リレーはデフォルトでシステムの一時ディレクトリに成果物を書き込み、コミットは行いません。references/dispatch-and-poll.md を参照してください。

3. 完了を待つ

codex-background を使用する Codex では、元の MCP リクエストが保留状態のままになります。モデル主導のスリープ、ステータスのポーリング、ログのポーリングは行いません。中断されたリクエストに再接続する場合に限り、delegate_wait を使用してください。

ヘルパーは Aider が完了するまで処理をブロックします。オーケストレーターのバックグラウンドコマンド機能で実行するか、シェルでバックグラウンド実行し、result.json をポーリングします。実行前の使用方法エラーでは終了コード 2 が返され、結果ファイルは書き込まれません。aider が見つからない場合は終了コード 127 が返され、status: "aider_unavailable" が書き込まれます。

進捗表示よりも、プロセスの状態と作業ツリーを信頼してください。完了とは、プロセスが終了し、result.json が存在する状態です。Aider のレポートは result.json の finalMessage フィールドにあります(レポートのマーカーに挟まれて、標準出力にも全文が表示されます)。

モデルに到達できなかった場合でも、Aider は終了コード 0 を返します。そのため、リレーは実行内容を調べて Aider 独自のエンドポイントエラーと認証エラーを検出し、見つかった場合は status: "failed" を報告します。error にエンドポイントへの言及がある failed ステータスは、コーディングの失敗ではなく、設定の問題として扱ってください。

4. レビュー - 自己申告を鵜呑みにしない

Aiderの最終メッセージやゲートに関する主張は、あくまで主張として扱ってください。

  • プロジェクトのゲートを自分で再実行してください。
  • touchedFilesから始めて、ブリーフと照らし合わせながら差分を確認してください。
  • インストールされている場合は、関連するガードスキルを実行してください。
  • マイグレーションを往復検証し、削除や名前変更の後に参照が残っていないかgrepしてください。

Aiderでは--auto-lintがデフォルトで有効なため、すでにリンターを実行し、自らの指摘を修正している場合があります。それはAiderのLintであり、あなたのゲートではありません。いずれにしても、あなた自身のゲートを実行してください。references/review-and-land.mdを参照してください。

5. 取り込む

実装担当者が作業ツリーを編集し、コミットはオーケストレーターが行います。 ゲートに合格し、差分を確認できてからコミットしてください。手直しが必要な場合は、--resume-lastを使って差分ブリーフを送り、もう一度レビューしてください。

自律性と権限

ヘッドレス実行ではプロンプトに回答できないため、リレーはAider独自の用語で、すべてのプロンプトを自動承認する--yes-alwaysを渡します。何に同意することになるのか、事前に理解してください。 自動承認はAiderが通常表示するすべてのプロンプトに適用されます。また、Aiderのプロンプトはファイル編集に限りません。デフォルトのままでは、提案したシェルコマンドの実行も促され、--yes-alwaysは誰も内容を確認しないままそれらを承認してしまいます。そのため、リレーでは--no-suggest-shell-commandsを固定し、この経路を取り除いています。

それでもサンドボックスになるわけではなく、ここではそのように装うこともありません。Aiderには権限モードも隔離機能もありません。ファイルの対象範囲内では自由に編集でき、デフォルトで有効な--auto-lintは、リポジトリで設定されたリンターを実行します。Aiderにコマンドの実行を指示するブリーフを渡せば、そのコマンドは実行されます。委任はその実行を許可することです。実行によるホストへの干渉を防ぐ必要がある場合は、コンテナーまたは使い捨てのワークツリーで実行してください。このリレーのフラグでは、それを実現できません。

ファイルの選択はセキュリティ境界ではありません。 --file、--read、--subtree-onlyが設定するのは、Aiderがチャットのコンテキストに含める内容であり、対象範囲とトークンコストに関する判断です。Aiderがアクセスできる範囲を制限するものではありません。references/writing-the-brief.mdを参照してください。

--read-onlyはAiderの--dry-runに対応し、ファイルを変更せずに実行します。リレーはその主張を独自に検証しません。git status --porcelainの結果を報告し、--read-onlyで実行したにもかかわらず作業ツリーが変更されていた場合に警告します。保証となるのはフラグではなく、touchedFilesと差分です。

再開

AiderにはセッションIDがありません。再開単位はリポジトリ内に保持されるチャット履歴ファイル(.aider.chat.history.md)です。そのため、--resume-lastはAiderの--restore-chat-historyに対応し、--history-fileは特定の履歴ファイルを指定します。この履歴はリポジトリ内に保存されるため、再開はユーザー単位ではなくワークツリー単位です。同じプロジェクトのクローンを2つ作っても、履歴は共有されません。

承認モデル

委任するかどうかは人が選択します。いったん委任したら(「このキューを実行して」「続けて」など)、検証済みでゲートに合格した作業をコミットすることが合意された契約です。ただし、2つの制約があります。隠さずに伝え、代わりに判断しない(Aiderが行った設計上の判断、依頼されていないものの妥当な方向転換、進行を妨げない細かな指摘を報告する)こと、そしてスコープ変更時には停止する(正しく完了するためにブリーフの範囲を超える必要がある場合は、権限を拡大せずに確認する)ことです。references/review-and-land.mdを参照してください。

参考資料

コメント