rightmodeler について
rightmodelerは、リポジトリのトレースを使ってモデル候補を評価する、再開可能なTypeScriptコマンドラインツールです。段階的な推奨処理とチェックポイントを必要とする運用者向けで、候補モデル、実行経路、リリースポリシーを設定できます。
主な機能
- 01チェックポイントによる実行再開
- 02トレースに基づくモデル評価
- 03APIとコーディングCLIの実行経路
- 04候補モデルとリリース期間の設定
- 05ポリシー、価格、並列数の設定
活用シーン
- 01リポジトリのトレースで候補モデルを比較
- 02入力や予算の境界後に実行を再開
- 03モデルの許可リストと品質下限を設定
- 04APIまたはログイン済みCLIで評価を実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ elm-os/ rightmodeler --skill rightmodelerインストール後、Claude Code で/rightmodelerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEpackage.jsonreference/evidence.mdreference/harnesses/_template.mdautogen.mdcrewai.mddspy.mdgo-openai.mdindex.mdjava-langchain4j.mdlangchain-js.mdlangchain-py.mdlanggraph.mdlitellm-proxy.mdmastra.mdraw-anthropic.mdraw-openai.mdruby-openai.mdvercel-ai-sdk.md詳細
rightmodeler TypeScript CLI 実行手順書
現在の手順: npm で rightmodeler(ワークスペースパッケージ @rightmodeler/cli)として公開されている、インストール済みの TypeScript CLI を使用します。実行ファイルは rightmodeler です。レガシーの Python エンジンは廃止されており、唯一のエンジンはこの CLI です。
CLI は実行を再開できます。--store で場所を上書きしない限り、チェックポイントとレポートは対象リポジトリ内の .rightmodeler/ に保存されます。名前付き入力または予算の境界条件を満たした後、同じコマンドを再実行してください。再開するためにストアを削除しないでください。
インストール済みの CLI にはドキュメントが同梱されています。セクション 3 ではその読み方を説明します。
0. 参照ファイル
reference/harnesses/index.md:Mode B の実行を準備する前に読んでください。フレームワークの構成に応じてパイプラインごとのファイルを案内します。モデル ID をバインドする場所、相関ヘッダーが転送されるかどうか、ベース URL の上書きが適用されるかどうかとそれを保持する変数、副作用のあるツールのモック方法、エントリーポイント、下流との結合の検出方法が記載されています。reference/evidence.md:セクション 8 で結果を提示する前に読んでください。エビデンスの段階、最低条件、棄権理由のすべて、エビデンス除外理由のすべて、リリースゲート ID、ジャッジの選択方法が定義されています。
1. 範囲と目標の確認
すでにわかっている情報は尋ねず、不明な情報だけを確認します。
- リポジトリのルート。
- トレースファイルのパス。対話型の
initとestimateでは、対応するローカル、Claude Code、Codex のファイルを検出できますが、エージェントやその他の非対話型の実行では、決定性を確保するため--tracesを明示的に指定してください。 - 目標と停止する段階。推奨を最後まで実行する場合は
reportを使用します。 - モデルの呼び出し方法。デフォルトは API ルートです。OpenAI 互換プロバイダーのベース URL と、API キーがすでに設定されている環境変数の名前を使用します。プランルートでは、候補モデルまたはジャッジを、ユーザー自身の
claudeまたはcodexCLI(このマシンでサインイン済み)を通じて実行します(セクション 5)。以下の説明に従い、ユーザーの同意を得た場合にのみ使用してください。 - API ルートでは、オペレーターが上限を設けたい場合、リプレイに許容できる最大費用(米ドル)。ユーザーから求められない限り、プランルートでは上限を尋ねたり、提案したり、設定したりしないでください。
- 実行に影響するモデル、プロバイダー、品質、所有権の制約。
- ユーザーが試したいモデルがあれば、そのモデル。デフォルトでは、rightmodeler は記録されたモデルよりも費用が安く、過去 90 日以内にリリースされたモデルのみを試します。ユーザーから求められた場合に限り、モデル名を
--candidateで指定するか、--released-sinceまたは--released-untilで期間を変更してください。
API キーやログイントークンを尋ねたり、読み取ったり、表示したり、保存したりしてはいけません。また、~/.claude、Keychain、~/.codex/auth.json を開いてはいけません。ユーザー自身のシェルで、指定された環境変数を設定してもらいます。キーの値をインラインで記述したり、ベース URL やヘッダーにキーを含めたりしてはいけません。
プランルートを選ぶ前に、各ロールで使用するルートを明示し、プランルートの意味をユーザーに説明して、同意を得てください。
- プランの利用枠を使います。これはユーザー自身の Claude Code または Codex セッションと同じ制限です(このエージェントが同じプランで実行される場合は、このエージェントも同じ制限を共有します)。呼び出し回数や費用に上限はありません。実行に必要なだけ呼び出し、停止条件となるのはプランの利用上限のみです。
- トレースのプロンプトは、プランアカウントのデータ設定に従って Anthropic または OpenAI に送信されます。
- CLI は呼び出しごとに独自のコンテキストを追加します(
claudeの場合は、サインイン中のアカウントのメールアドレスと日付を含みます。codexの場合は、ユーザーのグローバル指示ファイルを含みます)。また、temperature や出力上限は設定できません。そのため、結果はコーディング CLI 内でのモデルの性能を測定します。詳細はrightmodeler docs model-routesを参照してください。
プランルートでは、rightmodeler 自身がサインイン状態を確認します。CI でプランルートを提示してはいけません。CI が設定されている場合、rightmodeler はプランルートを拒否するため、そこでの実行には API ルートを使用してください。Mode B の確認(--modeb-config)では、両方のロールに API ルートが必要です。
2. オンボーディング状態を検出する
どのディレクトリからでも実行できますが、必ず絶対パスでリポジトリを指定してください。
REPO=/absolute/path/to/repository
if [ -d "$REPO/.rightmodeler" ]; then
echo "Existing rightmodeler state found. Resume from checkpoints."
else
echo "No rightmodeler state found. Start onboarding."
fi
既存の .rightmodeler/ がある場合は、上書きではなく再開です。費用をかける前に、新規実行か再開かを要約し、合意した範囲を再確認してください。
3. CLI を特定する
まず、インストール済みの bin を優先してください。次に、依存関係内にバンドルされた bin を優先してください。それらがない場合は、npx から公開パッケージを実行してください。
if command -v rightmodeler >/dev/null 2>&1; then
RIGHTMODELER=(rightmodeler)
elif [ -x ./node_modules/.bin/rightmodeler ]; then
RIGHTMODELER=(./node_modules/.bin/rightmodeler)
else
RIGHTMODELER=(npx --yes rightmodeler)
fi
"${RIGHTMODELER[@]}" --help
"${RIGHTMODELER[@]}" init --help
"${RIGHTMODELER[@]}" docs
# Replace <name> with a name from the list above, for example getting-started, commands,
# exit-codes, evaluators, modeb, gateways, model-routes, github, or github-actions.
"${RIGHTMODELER[@]}" docs <name>
どちらのヘルプコマンドも終了コード 0 で終了する必要があります。いずれかが 10 以上で終了した場合は、停止してインストールまたはコマンドラインの失敗を報告してください。代替エンジンはありません。
同梱ドキュメントには実際にインストールされているバージョンが記載されているため、バージョンが異なる場合はこの手順書よりも優先されます。init --help に --route が記載されていない場合、インストール済み CLI はプランルートより前のバージョンです。API ルートを使用してください。--candidate が記載されていない場合、インストール済み CLI は候補選択オプションより前のバージョンです。CANDIDATE_ARGS は空のままにしてください。
Windows PowerShell
この手順書の例では bash を使用します。シェルツールが Windows PowerShell を実行する場合は、次のように CLI を特定してください。
$env:NoDefaultCurrentDirectoryInExePath = "1"
$cli = Get-Command rightmodeler.cmd -ErrorAction SilentlyContinue
if ($cli) { rightmodeler.cmd --help } else { npx.cmd --yes rightmodeler --help }
exit $LASTEXITCODE
その後、同じ引数を指定して各コマンドを 1 行で実行し、次のルールを守ってください。
npxやrightmodelerではなく、npx.cmdまたはrightmodeler.cmdを呼び出してください。単独の名前を指定すると、Windows PowerShell 5.1 は npm がインストールする.ps1スクリプトを実行しますが、既定の実行ポリシーによってブロックされます。- リポジトリ内に置かれたプログラムが CLI の代わりに実行されないよう、各呼び出しの先頭に
$env:NoDefaultCurrentDirectoryInExePath = "1";を付けてください。 - シェルが CLI の終了コードを報告するよう、各呼び出しの末尾に
; exit $LASTEXITCODEを付けてください。これを付けない場合、powershell -Commandはゼロ以外の終了コードをすべて1に変換します。また、コード2と3は別の意味を持ちます。 - Windows PowerShell 5.1 では
>によるリダイレクトで UTF-16 が書き込まれるため、出力はリダイレクトせず、ツールの実行結果から読み取ってください。 $env:NAME = "value"の形式で変数を設定し、末尾がバックスラッシュではない二重引用符でパスを囲んでください。
4. プランをプレビューする
プレビューは読み取り専用で、トレースもプロバイダーの認証情報も必要ありません。
"${RIGHTMODELER[@]}" init --plan --output json --repo "$REPO"
終了コード 0 を必須としてください。標準出力を単一の JSON オブジェクトとして解析します。その stages 配列には各ステージ名が記載され、pending、stale、complete のいずれかの状態が示されます。executedStages は空でなければなりません。実行を開始する前にステージ計画を提示してください。解析に失敗した場合は、空のプランとして扱わず、実行時エラーとしてください。
5. 合意したステージまで実行する
合意した入力値を設定してください。THROUGH=report を指定すると、パイプライン全体が実行されます。API ルートでは、API_KEY_ENV で指定された環境変数に API キーがあらかじめ設定されている必要があります。
支出上限の設定は任意です。上限なしで実行する場合は MAX_COST_USD を空のままにしてください。すべてのケースと判定セルが完了まで実行されるため、コストよりも完全性とエビデンスの品質を重視する場合に適しています。オペレーターが強制停止を希望する場合に限り、上限を設定してください。上限を設定した実行は上限に達した時点で、修正方法を示して停止し、上限を引き上げると再開されます。プランルートを使用する場合は、ユーザーから上限の指定がない限り MAX_COST_USD を空のままにしてください。プランルートには上限がなく、停止条件はプランの利用上限のみです。その場合、ユーザーが指定する上限は請求額ではなく定価換算額を数えます。また、コーディング CLI には出力上限がないため、上限はソフト上限です。
リリースポリシー JSON(品質の下限、ショートリストのサイズ、モデルの許可リストと拒否リストを含む)には --policy <path> を使用します。カタログに価格が掲載されていない場合にトークン単価を指定するには --pricing-file <path> を使用します。カタログに不足している情報を補う上流のモデルリストを指定するには --catalog-reference <url-or-path> を使用します。プランルートでは価格リストを指定します(デフォルトは Vercel AI Gateway の公開リストです)。リクエストヘッダーでルーティングするゲートウェイには、シークレットには決して使用せず、繰り返し指定できる --header 'name: value' を使用します。プロバイダーへの同時リクエストの最大数には --max-concurrency <n> を使用します。プランルートでは、一度に実行する CLI プロセスの最大数を指定します。呼び出し数の上限ではありません。宣言的なマッチャー定義 JSON ファイルには --matchers <path> を使用します。ユーザーが指定したモデルだけを正確に再現し、リリース日にかかわらず、各ファミリーで記録されたモデルより安価で、すべての呼び出し箇所に適合するモデルには、繰り返し指定できる --candidate <id> を使用します。デフォルトではショートリストの計画日より前の90日間に設定されているリリース期間を変更するには、--released-since <date-or-days>(2026-01-01 のような日付、または 365d)と --released-until <date> を使用します。コンテナーイメージ、アプリ仕様、ステップマップ、および backend を選択するには --modeb-config <path> を使用します。backend はデフォルトで docker、リモートサンドボックスでは cloud です。Mode B の実行では、最初に reference/harnesses/index.md を読み、そこから案内されるファイルに従ってください。
API ルートの場合は ROUTE_ARGS を空のままにします。ユーザーがプランルートに同意した後でのみ(セクション1)、値を設定します。その場合は、必ず両方のロールを指定してください。プランの --route は --judge-route がないと拒否され、judge には候補モデルと記録されたモデルの両方とは異なるベンダーのものを指定する必要があります。
- プランの両方のロールで
PROVIDER_BASE_URLを空にする場合:Anthropic モデルを記録したトレースではROUTE_ARGS=(--route claude-login --judge-route codex-login)、OpenAI モデルではROUTE_ARGS=(--route codex-login --judge-route claude-login)とします。 - マルチベンダーゲートウェイ経由でプランの候補モデルを判定し、
PROVIDER_BASE_URLとAPI_KEY_ENVを維持する場合:たとえばROUTE_ARGS=(--route claude-login --judge-route api)とします。 - プラン経由で API の候補モデルを判定し、
PROVIDER_BASE_URLとAPI_KEY_ENVを維持する場合:たとえばROUTE_ARGS=(--route api --judge-route claude-login)とします。judge のベンダーの候補モデルは除外されます。OpenAI または Anthropic の直接キーは単一のベンダーにしか対応せず、価格リストも含まれません。もう一方のベンダーの CLI 経由で判定し、ROUTE_ARGSに--catalog-reference https://ai-gateway.vercel.sh/v1/modelsを追加してください。
この実行では、対話型の init や estimate で保存されたルートは読み込みません。再利用するには、実行時に表示されたフラグをユーザーに尋ねてください。
ユーザーが試したいモデルを指定した場合、または古いリリース日や特定のリリース日を指定した場合を除き、CANDIDATE_ARGS は空のままにします。たとえば CANDIDATE_ARGS=(--candidate openai/gpt-6-luna) または CANDIDATE_ARGS=(--released-since 365d) とします。--candidate はリリース日オプションと併用できません。同じストアに対する以降のすべてのコマンドにも、同じ CANDIDATE_ARGS を渡してください。これらを指定しないコマンドは、デフォルトのショートリストに戻ります。
TRACES=/absolute/path/to/traces.json
THROUGH=report
PROVIDER_BASE_URL=https://provider.example/v1
API_KEY_ENV=RIGHTMODELER_API_KEY
ROUTE_ARGS=()
CANDIDATE_ARGS=()
MAX_COST_USD=
RUN_LOG=$(mktemp)
ERROR_LOG=$(mktemp)
API_ARGS=()
if [ -n "$PROVIDER_BASE_URL" ]; then
API_ARGS=(--base-url "$PROVIDER_BASE_URL" --api-key-env "$API_KEY_ENV")
fi
CAP_ARGS=()
if [ -n "$MAX_COST_USD" ]; then
CAP_ARGS=(--max-cost-usd "$MAX_COST_USD")
fi
if "${RIGHTMODELER[@]}" init \
--yes \
--through "$THROUGH" \
--traces "$TRACES" \
"${ROUTE_ARGS[@]}" \
"${CANDIDATE_ARGS[@]}" \
"${API_ARGS[@]}" \
"${CAP_ARGS[@]}" \
--output jsonl \
--repo "$REPO" \
>"$RUN_LOG" 2>"$ERROR_LOG"; then
EXIT_CODE=0
else
EXIT_CODE=$?
fi
空でない stdout の各行を JSON オブジェクトとして解析します。いずれかの行が無効な場合は、行番号とともに明確にエラーにしてください。イベントは stage_started、stage_completed、stage_skipped、warning、および最終結果の result です。順序を維持してください。出力があることから成功を推測せず、まず EXIT_CODE に基づいて処理を分岐してください。
このコピーして貼り付け可能なパーサーはストリームを検証し、各イベントを出力します。
node - "$RUN_LOG" <<'NODE'
const fs = require("node:fs");
const path = process.argv[2];
const lines = fs.readFileSync(path, "utf8").split(/\r?\n/);
for (let index = 0; index < lines.length; index += 1) {
if (lines[index].trim() === "") continue;
try {
console.log(JSON.stringify(JSON.parse(lines[index])));
} catch (error) {
throw new Error(`Invalid JSONL at line ${index + 1}: ${error.message}`);
}
}
NODE
完了したステージはチェックポイントとして保存されます。実行を再開すると、現在のステージで stage_skipped が発生することがあります。既存の .rightmodeler/ ディレクトリはそのまま保持し、同じコマンドを再実行してください。古い作業や未完了の作業は、最初の境界から再開されます。
6. パイプラインの終了コードを解釈する
rightmodeler docs exit-codes のパイプライン契約を使用します。
0:実行可能な推奨事項がなく、成功しました。計画の実行と、部分的な--throughの実行も 0 を返します。1:完全なinitまたはreportで、実行可能な推奨事項が見つかりました。2:再開可能な境界で入力が必要な場合、または計画が使用上限に達した場合です。3:再開可能な境界でコスト予算に達した場合です。10以上:コマンドラインまたはランタイムのエラーです。
終了コードが 0 または 1 の場合は、最後に JSONL の result イベントがあることを必須とします。終了コードが 1 の場合は、result.recommendationExists が true であることも必須とします。終了コードが 0 の完全な実行では、これが false であることを必須とします。部分的な実行では、推奨事項がなくても終了コード 0 になることがあります。
終了コードが 2 または 3 の場合は、stderr を code、message、remedy を含む JSON オブジェクトがちょうど 1 つだけあるものとして解析します。stdout には、境界に達する前に完了したステージの有効なイベントが含まれる場合があります。
7. 再開可能な境界で停止する
終了コード 2 の場合は、message に記載された不足している入力を示し、正確な remedy を伝えて、ユーザーまたはリポジトリの所有者から提供されるまで待ちます。よくある対処方法には、--traces の追加、--base-url の追加、--api-key-env による API キー環境変数名の指定、必須の確認設定の提供などがあります。不足している値を決して推測しないでください。入力が用意されたら、同じストアで再開します。
missing_traces_path の対処方法には、見つかったパスのうち最新の最大 3 件と、候補の追加件数を含め、その後に Pass --traces <path>. を続けることができます。これらのパスはあくまで候補として扱ってください。ランブックのコマンドでは、オペレーターが承認したトレースパスを明示的に引き続き渡してください。
モデルルートでは、次の終了コード 2 が追加されます。message と remedy を報告し、その後、次の対応を行います。
plan_usage_limit:プランの使用上限に達しました。messageに記載されたリセット時刻、またはベンダーから時刻が示されていないことをユーザーに伝え、停止します。リセット後、ユーザーの指示があった場合にのみ、同じコマンドを再実行してください。完了済みの呼び出しは保持されます。ループで再試行したり、確認せずにルートを切り替えたりしないでください。plan_login_required:CLI でプランにサインインしていないため API キーが使用されるか、サインイン状態が失われています。ユーザー自身のターミナルで、対処方法に従って対応するよう依頼してください。指定されたコマンドでサインインするか、指定された API キー設定を削除します。その設定を自分で読み取ったり編集したりしないでください。その後、再実行します。plan_cli_unavailable:CLI がない、古すぎる、または変更により rightmodeler が拒否する状態であるか、CIが設定されています。対処方法を伝えてください。自分でCIを解除しないでください。CI では API ルートを使用します。judge_family_unknown:モデル ID にベンダー名がないため、判定モデルのベンダーを確認できません。再生では、モデル呼び出しの前にこの状態が確認されます。対処方法を伝え、どの修正を使用するかユーザーに尋ねてください。no_neutral_judge:候補モデルおよび記録されたモデルとは別のベンダーから利用できる判定モデルがありません。再生では、モデル呼び出しの前にこの状態が確認されます。対処方法を伝え、他のベンダーのカタログ、別の判定ルート(プランルートはユーザーが承諾した場合のみ)、または評価器のいずれを使用するかユーザーに尋ねてください。
候補の選択では、次の終了コード 2 が追加されます。いずれもモデル呼び出しの前に発生します。message と remedy を報告し、ウィンドウを広げるかモデル名を指定するかを、必ずユーザーに確認してください。どちらの場合も、再生での支出対象が変わるためです。
no_recent_candidates:記録されたモデルより安価で、リリース期間内にリリースされたモデルがありません。対処方法に示された選択肢として、より前の日付を指定する--released-since、--candidateによるモデル名の指定、またはカタログの日付が仮の値である場合の--catalog-referenceを提示してください。release_dates_unavailable:リリース日オプションが渡されましたが、カタログに利用可能なリリース日がありません。--catalog-reference、--candidate、または日付オプションの削除を提示してください。unknown_candidate:--candidateがプロバイダーカタログにないか、複数のモデルに一致します。どのカタログ ID を意図していたかユーザーに尋ねてください。named_candidates_ineligible:指定されたモデルのうち、どの呼び出し箇所でも試行できるモデルがありません。メッセージには各モデルの理由が示されます。理由を伝え、代わりにどのモデルを指定するかユーザーに尋ねてください。
終了コード 3 の場合は、設定済みの予算上限により実行が停止したことを報告します。エラーの message と remedy、設定済みの --max-cost-usd、および標準出力に記録された最後の完了ステージを含めてください。ユーザーから明示的な許可がない限り、予算を引き上げないでください。
終了コードが 10 以上の場合は、標準エラー出力を報告して停止します。再開する前に、コマンドまたは実行時エラーを修正してください。これを推奨や棄権として解釈しないでください。
8. 結果を提示する
終了コードが 0 または 1 の場合は、最後の result イベントを読み取り、familyOutcomes の各エントリを 1 行ずつ提示します。要約する前に、reference/evidence.md を読んで、各棄権理由とゲート ID の意味を確認してください。次の項目を含めます。
- ファミリー識別子。
- 判定と、それが有効な推奨かどうか。
- 選択された候補(該当する場合)。
- 評価者の合格率、可用性、最悪ケースの上限。
- 確認状況とブロッカー。
- 棄権理由(該当する場合)。
reportPath も報告します。完全な実行では .rightmodeler/project/reports/report.md が書き込まれます。JSON レポートはプレーンファイルとしてではなく、バージョン管理されたストア内に保持されるため、機械可読な結果はパスからではなく、最後の result イベントから取得してください。
プランルートが実行された場合は、候補を再実行したルートと判定したルートを示し、レポートの ## Model routes セクションをそのまま伝えます。また、プランルートでの費用はプランの利用枠から充当される定価換算額であり、請求額ではないことを伝えてください。すべての warning イベントについて、code と message を報告します。プランルートでは、これらに plan_route_key_withheld、plan_usage_warning、codex_global_instructions、judge_vendor_candidates_dropped、plan_route_cases_left_out が含まれます。候補の選択によって、release_window_skipped、shortlist_no_recent_candidates、shortlist_candidate_left_out が追加されることがあります。
判定単位はファミリーの判定としてください。単一のケースで成功しても、それをファミリーへの推奨に格上げしないでください。終了コードが 0 でも、役に立つ却下や棄権が含まれていることがあります。「何も起きなかった」とせず、それらを提示してください。
9. 実証済みの置き換えを適用し、監視する
完全な結果に有効な推奨が含まれる場合にのみ進めてください。apply は機械ゲートを実行し、ドラフトのプルリクエストを開きます。マージは行いません。
以下の GITHUB_TOKEN_ENV は、GitHub トークンを保持する環境変数の名前です。トークンそのものを渡してはいけません。GitHub App のインストールトークン、または repo スコープを持つクラシックトークンを使用すると、apply と watch の両方を完全に利用できます。きめ細かい個人アクセストークンでは apply を利用できますが、その場合 watch はチェック実行を読み取れず、コミットステータスのみを使用して github_checks_unavailable 警告を出力します。これは想定内であり、失敗ではありません。GitHub Actions では、ジョブに必要な権限が付与されていれば、ジョブの GITHUB_TOKEN も使用できます。"${RIGHTMODELER[@]}" docs github には、必要な権限、その他のトークンの詳細、GitHub App の権限が記載されています。
まず、機械ゲート付きのドライランを実行します。
GITHUB_OWNER=example-org
GITHUB_REPO=example-repository
GITHUB_API_URL=https://api.github.com
GITHUB_TOKEN_ENV=GITHUB_TOKEN
"${RIGHTMODELER[@]}" apply \
--owner "$GITHUB_OWNER" \
--github-repo "$GITHUB_REPO" \
--github-base-url "$GITHUB_API_URL" \
--github-token-env "$GITHUB_TOKEN_ENV" \
--dry-run \
--output jsonl \
--repo "$REPO"
apply の終了コードはコマンド固有です。0 はドライランに問題がないか、変更が適用されたことを示し、1 は機械ゲートが変更を拒否したことを示し、2 はストアに完了済みの実行がないことを示し、10 以上はランタイムエラーを示します。終了コードが 2 の場合は、stage_not_completed などの標準エラー出力にある JSON エラーを読み取り、セクション 7 の説明に従って対処してください。ドライランの終了コードが 0 の場合は、--dry-run を付けずに同じコマンドを実行し、ドラフトのプルリクエストを開いて、解決されたオーナーにレビューを依頼します。
コマンドからプルリクエスト番号が返されたら、調整処理を 1 回実行して監視します。
PR_NUMBER=123
"${RIGHTMODELER[@]}" watch \
--owner "$GITHUB_OWNER" \
--github-repo "$GITHUB_REPO" \
--pr "$PR_NUMBER" \
--github-base-url "$GITHUB_API_URL" \
--github-token-env "$GITHUB_TOKEN_ENV" \
--output jsonl \
--repo "$REPO"
対応が不要な場合、watch は終了コード 0 を返します。レビューまたは継続的インテグレーションの処理が行われた場合は 1 を返し、ランタイムエラーの場合は 10 以上を返します。終了コード 2 には 2 つの意味があります。別の監視プロセスがロックを保持していて、標準出力が "status":"lock_held" を含む result イベントで終わる場合は、後で再試行してください。または、ストアに完了済みの実行がなく、標準エラー出力に stage_not_completed などの JSON エラーがある場合は、セクション 7 の説明に従って対処してください。{"event":"warning"} の行があれば、その code と message をユーザーに報告し、処理を続けてください。リポジトリのイベントが発生したとき、またはプロジェクトのスケジュールに従って watch を繰り返し実行します。解決されたオーナーがドラフトのプルリクエストをレビューし、マージするかどうかを決定します。CLI がマージすることはありません。
このループを GitHub Actions で実行するには、"${RIGHTMODELER[@]}" docs github-actions を使ってテスト済みのワークフローを出力し、その Setup セクションに従ってください。
10. フィードバック送信の提案
rightmodeler はテレメトリを収集していないため、何がうまくいかなかったのか、何が不足しているのかをチームが知ることができるのは、ユーザーが知らせてくれた場合に限られます。実行後、または CLI が、message と remedy で説明されていない障害で停止した場合は、ユーザーに代わって rightmodeler チームにフィードバックを送信するか、1 回だけ提案してもかまいません。ユーザーから求められた場合も送信してください。CI のように、確認できるユーザーがいない場合は何も送信しないでください。
送信する前に、正確な JSON 本文をユーザーに表示し、送信してよいか確認してください。自分の判断で送信してはいけません。また、同じフィードバックを 2 回送信してはいけません。
本文には、発生したことや不足しているものについての平易な説明、自分がどのコーディングエージェントか、CLI のバージョン、コマンド、終了コード、エラーの code を含めることができます。トレースの内容、プロンプト、モデルの出力、ソースコード、ファイルの内容、キー、トークンを含めてはいけません。ユーザーが返信先としてメールアドレスを指定した場合を除き、ユーザーのメールアドレスは含めないでください。
curl -sS --max-time 30 -X POST https://www.rightmodeler.com/api/feedback/agent \
-H 'Content-Type: application/json' \
-w '\n%{http_code}\n' \
--data-binary @- <<'JSON'
{
"message": "What happened or what is missing, in plain language.",
"agent": "claude-code",
"version": "<cli version>",
"context": "rightmodeler init --through report; exit 2; plan_login_required"
}
JSON
必須項目は message のみで、長さは最大 5,000 文字です。agent には送信するコーディングエージェントの名前を、version には "${RIGHTMODELER[@]}" --version の出力を指定します。それぞれ最大 100 文字です。context は 1、2 行で、最大 1,000 文字です。ユーザーが返信先としてメールアドレスを指定した場合のみ、"contact": "<email>" を追加してください。本文は有効な JSON でなければならないため、文字列内の改行は \n と記述してください。
コマンドはレスポンス本文を出力した後、HTTP ステータスを独立した行に出力します。
{"ok":true}と200:フィードバックが送信されました。ユーザーに伝えてください。- それ以外:失敗です。リクエストが拒否された場合は
{"error":"<reason>"}と400が返され、メールを送信できなかった場合は500または502が返されます。curl エラーと000は、リクエストが完了しなかったことを意味します。理由を引用して、ユーザーに 1 回だけ伝え、そのまま先に進んでください。ループ内で再試行してはいけません。再送信するのは、ユーザーから求められた場合のみです。