設定リファレンス
emet.config.json のすべてのキーを、既定値と意味とともに示します。信頼できる情報源は emet/schema/emet.config.schema.json です。用語は GLOSSARY.md に従います。README に戻る。
emet init がこのファイルを書き出し、emet preflight と emet doctor が検証します。prose-only と記載されたキーは、CLI ではなく /emet のプロンプトが読み取ります。deprecated と記載されたキーは、引き続き受け付けられます。スキーマでは、メモ用の自由記述の "//" キー(どのツールも読み取りません)と、常に 1 である "version" も許可されています。
pr
ウェーブの PR をどのようにマージするかを定めます。
{ "pr": { "autoMerge": true, "mergeMethod": "squash", "maxCiFixAttempts": 2 } }autoMerge(既定はtrue): PR のチェックを待ってマージします。チェックがなければ即座にマージします。失敗したチェックは修正してプッシュされ、最大maxCiFixAttempts回まで繰り返し、それでもだめなら PR は人間のために開いたままになります。フラグが立っているものがあるウェーブは、自動マージされません。mergeMethod(既定はsquash):squash、merge、rebaseのいずれかで、gh pr mergeに渡されます。maxCiFixAttempts(既定は2、最小は0): PR を人間のために開いたままにする前に、コーディネーターが失敗したチェックの修正を試みてよい回数です。
handoff
ウェーブが完了した後に何が起きるか、およびワーカーのハンドオフノートのサイズ上限を定めます。emet preflight が検証します。
{ "handoff": { "autoChain": false, "launcher": "auto", "permissionMode": "bypassPermissions" }}-
maxLines(既定は60):.emet/handoff-<ticket>.mdノートがemet handoff --checkで不合格になるまでに持てる最大行数です。 -
maxChars(既定は8000、約 2k トークン): ハンドオフノートが持てる最大文字数です。 -
autoChain(既定はfalse): クリーンでマージ済みのウェーブの後にまだウェーブが残っている場合、/emet:run --dispatch <spec-id>を表示する代わりに、claude --bgで次のウェーブを起動します。claude agentsまたはclaude attach emet-<spec-id>-w<n>で確認できます。要件:claudeが PATH にあり、--bgに対応していること。- 信頼されたワークスペースであること。
--bgは非対話で実行されるため、信頼ダイアログは表示されません。リポジトリで一度claudeを対話的に開き、承認してください。 - 対話セッションでバイパスの警告を一度承認していること(
skipDangerousModePermissionPrompt)。次のウェーブは、起動元のセッションのモードではなく、handoff.permissionModeで動作するためです。
起動するのは、PR がマージされ、フラグが立っているものがない場合だけで、
emet-<spec-id>-*セッションがすでに動作中(claude agents --json)であればスキップします。起動に失敗した場合は、/emet:run --dispatch <spec-id>を表示する動作にフォールバックします。 -
launcher(既定はauto、auto、orca、bgのいずれか):claude attachを実行する Orca タブでもウェーブを開きます。autoは Orca ランタイム(orca status)に問い合わせるため、TERM_PROGRAMのないclaude --bgセッションからも動作します。orcaは常に試行し、bgは一切試行しません。どちらの場合もウェーブはバックグラウンドで動作し、タブを開けなくてもチェーンが止まることはありません。emet launch <spec-id> --wave <n>が起動の全体を行います。emet launchを参照してください。 -
permissionMode(既定はbypassPermissions、bypassPermissions、auto、acceptEditsのいずれか): チェーンされたセッションの権限モードです。起動元のセッションからは継承されません。autoモードの分類器がgh pr mergeのようなステップを拒否し、ウェーブが中途半端な状態で終わるおそれがあるためです。permissions.denyのルールは引き続き適用されますが、バイパスの警告を対話的に一度承認しておく必要があります(skipDangerousModePermissionPrompt)。
budgets
すべて任意です。
{ "budgets": { "workerAttempts": 2, "reviewRounds": 2, "stallNudgeCap": 6 } }workerAttempts(既定は2、最小は1): チケットがverifyに失敗できる回数で、これを超えるとゲートはdeferと答えます。チケットには保留ラベルが付き、ウェーブの残りは続行されます。テストコマンドが 126/127 で終了する、プロバイダー障害が起きるといった環境上の障害は、試行回数を消費せずに実行を一時停止します。reviewRounds(既定は2、最小は1): 次のモデルティアへ 1 回エスカレーションするまでに、チケットが受けられるレビューと修正のラウンド数です。それでも未解決のものには裁定が下されます。stallNudgeCap(既定は6、最小は1): 停滞したワーカーを促す回数です。カウントはリセットされません。
models
ロールごとのモデルとエフォートです。すべてのキーは任意で、このセクションを省略すると、ワーカーは sonnet/medium、レビュアーは opus/medium のままになります。エフォートは low、medium、high、xhigh、max のいずれかです。
{ "models": { "worker": { "model": "sonnet", "effort": "medium" }, "reviewer": { "medium": { "model": "opus", "effort": "medium" }, "high": { "model": "opus", "effort": "medium" } }, "triage": "haiku" }}worker.model(既定はsonnet)、worker.effort(既定はmedium): ワーカーです。チケットのModel:行は、そのワーカーに限ってworkerを上書きします。reviewer.mediumとreviewer.high(既定はそれぞれopus、medium):emet assessが返すリスクティアごとのレビュアーです。リスクの高いウェーブをより厳しく精査したい場合は、reviewer.high.effortを(たとえばhighに)引き上げてください。triage(既定はhaiku): CI ログのトリアージと passive ティアのレビューに使う低コストのモデルです。失敗したチェックはこのモデルのエージェントに渡され、file:lineポインターを添えて、最大でおよそ 2k トークンを返します。escalation(既定は{ "sonnet": "opus" }): チケットが修正回数の上限に達したときに使う、モデル名ごとの次のモデルティアです。
review
{ "review": { "highRiskPaths": [] } }highRiskPaths(既定は[]): 組み込みのセット(認証、セキュリティ、決済、Webhook、CI、インストーラー、ロックファイル、マイグレーション、生の SQL やパイプでシェルに渡す処理などの危険なシンク)に加えて、emet assessでhighのレビューティアを強制する、大文字小文字を区別しない追加のパス部分文字列です。
landing
mode(既定はpr):prはプルリクエストを開きます(ghが必要です)。mergeはemet landで統合ブランチをローカルのトランクにマージし、プッシュは行いません。CI の代わりにcommands.selfCheckを使います。トラッカーとは独立しています。ADR-0010 を参照してください。
tracker
/emet がどの課題トラッカーと連携するかを定めます。CLI は kind を読んで適用する依存関係チェックを決めます。それ以外は、/emet コマンドが従うアダプターの記述です(docs/agents/issue-tracker.md を参照)。
kind(必須):linear、github、localのいずれかです。localについては、ローカルトラッカーと ADR-0011 を参照してください。transitions.onStart、transitions.onPrOpen、transitions.onPrMerge: チケットの状態遷移をそれぞれ誰が書き込むかをworker、coordinator、automaticのいずれかで指定します。automaticは、トラッカーの連携機能が行うことを意味します(たとえば PR のオープン時やマージ時の Linear の GitHub 連携)。コーディネーターは、automaticと指定された遷移を書き込むことはありません。github.priorityLabels: 優先度("1"= P0 が最高から"4"= P3 まで)を GitHub のラベル名に対応付けます。たとえば{"1":"P0","2":"P1"}です。何も宣言しない場合、チケットはcreatedAtの昇順に並び、emet doctorがその旨を伝えます。github.stateLabels: ワークフローの状態(todo、in-progress、in-review)を GitHub のラベル名に対応付けます。たとえば{"todo":"status:todo"}です。doneとcanceledは、Issue のクローズ状態とstate_reasonから推定されます。linear: Linear 固有の設定(チームキー、ワークフロー状態の名前)です。docs/agents/issue-tracker.mdに従うモデルだけが読み取り、CLI は読み取りません。local.idPrefix(deprecated): ローカルのチケット ID は、現在は<feature-slug>-<NN>になっています。readyLabel、triageLabels、prReference(deprecated): ラベルと PR 参照のテンプレートです。たとえばCloses #{number}(github)やRefs: {id}(linear)です。
preflight
requiredFiles(既定はなし): ウェーブをディスパッチする前に、emet preflightがリポジトリのルートに必須とするファイルです。それぞれ{ "path", "why" }の形式で、whyは失敗メッセージに表示されます。空の場合、このチェックは実行されません。requiredCommands(既定はなし): ディスパッチの前に PATH で解決できなければならないバイナリです。解決できないものがあると、emet preflightはそれを名指しして終了コード 1 で失敗し、emet doctorも報告します。これはリポジトリ独自のリストで、トラッカーに基づく依存関係チェックとは別です。ghにはすでに専用のチェックがあるため、記載は任意です。よく追加されるのはrgとsgです。
specs
dir(既定はdocs/specs):emet spec-mergeが書き込む生きたスペックの、リポジトリからの相対ディレクトリです。
map
path(既定はdocs/agents/codebase.md):emet mapが生成するマップの、リポジトリからの相対パスです。
concurrency
waveSize(既定は4、最小は1): 1 つのウェーブで同時にディスパッチする Agent 呼び出しの最大数です。maxLiveWorkers(既定はauto): このホスト上で動作するすべての/emetコーディネーターが、すべてのリポジトリをまたいで共有するグローバルな上限です。スロットのプールは~/.local/state/emet/slotsにあり、特定のリポジトリの中にはありません。autoはホストの CPU 数と RAM から上限を導き、正の整数を指定すると固定されます。これとは別に、メモリの余裕チェック(EMET_MEM_RESERVE_GIB、既定は 8 GiB)があり、この上限にかかわらず、利用可能なメモリが少なすぎる場合は取得を拒否します。環境変数EMET_MAX_LIVE_WORKERSはこのフィールドを上書きし、autoも受け付けます。runIdleThresholdMs(既定は5400000、90 分): 稼働中のアンカーを持たない実行を、終了ではなくアイドルと分類する期間で、トランスクリプトの新しさだけに基づきます。環境変数EMET_RUN_IDLE_THRESHOLD_MSがこれを上書きします。
環境変数を参照してください。
ticket
idPattern: チケット ID が一致しなければならない、アンカー付き正規表現のソースです。たとえば^PROJ-\d+$です。無効なパターンは致命的な設定エラーになります。branchPrefix: ワーカーのローカルブランチの小文字のプレフィックス(^[a-z0-9-]+$)です。ブランチ名は<branchPrefix>-<number>-<slug>で、cleanupはグロブ<branchPrefix>-*を整理します。idExample(deprecated、prose-only):idPatternに一致する ID の例です。branchPattern(deprecated、prose-only): ブランチ名の完全なテンプレートです。
commands
すべて prose-only です。
selfCheck: ワーカーが変更を完了と見なす前に実行するコマンドです。たとえば["npm run check"]です。landing.modeがmergeの場合は、CI の代わりになります。workerScopedSuite: ワーカーが、触れた範囲だけをテストするために実行するコマンドです。emet verifyはこれが成功することを要求します。fullSuite.run: リポジトリ全体のスイートを実行するコマンドで、ウェーブのブランチがマージされた後、統合ブランチで 1 回実行されます。失敗すると、PR とautoChainがブロックされます。fullSuite.singleton: 同時にスイートを実行できるワークツリーが 1 つだけの場合はtrueです。fullSuite.runInBackground、fullSuite.reset(deprecated): バックグラウンド実行のフラグと、状態をリセットするコマンドです。
worktree
lockReason: ワーカーがブートストラップ時に書き込むgit worktree lockの理由のテンプレートで、emet lock-reasonが埋め込みます。既定値はemet run={runId} ticket={ticket} anchor={anchorPid} slug={coordinatorSlug} at={iso}です。フィールドを追加する場合にのみ上書きしてください。emet lock-reasonは、リテラルのemetトークン、またはrun=、ticket=、anchor=、at=、slug=のいずれかを欠いたテンプレートを拒否します。copyFromMain(prose-only): ブートストラップの前に、トランクのチェックアウトから新しいワークツリーへコピーするパスです。たとえば、追跡されていない env ファイルです。bootstrap(prose-only): ワーカーが開始する前に、新しいワークツリーで 1 回実行するシェルコマンドです。たとえば["npm ci"]です。/emetのフェーズ 6 が実行するもので、CLI は実行しません。stateDir(deprecated、prose-only): 実行ローカルのログ用ディレクトリです。たとえば.emetです。
usage
oversizedReadLines(既定は400、最小は1): オフセットも上限も指定せずに、この行数を超えるファイルに対して行った Read は、emet usageで過大と数えられます。stalledMinutes(既定は10、最小は1):emet usage --stalledの既定の--minutesのしきい値です。
sizing
inlineMaxLines(既定は100、最小は1): ワーカーのプロンプトにインラインで含めるチケット本文の最大行数です。
schema
prose-only です。このリポジトリのデータスキーマの所有者を示し、フェーズ 3 でチケットを分割する際の競合回避ルールに使われます。空または省略した場合、このルールはスキップされます。
ownedPaths: 共有スキーマを定義するパスです。たとえば["prisma/schema.prisma"]です。1 つのウェーブでこれらに触れてよいワーカーは最大 1 つです。sharedDatabase(deprecated): ワーカーが 1 つの物理データベースを共有する場合はtrueです。
commit
prose-only です。
trailer: チケットを参照するコミットにワーカーが付加する git トレーラーのキーです。たとえばRefsです。trailerPosition:bodyまたはfooterです。
repo
trunk: すべてのワーカーの変更がマージされる先のブランチで、すべてのクリーンアップと preflight の git 比較の基準にもなります。たとえばmainです。remote(既定はorigin):trunkが存在する git リモートです。integrationBranch(deprecated、prose-only): ウェーブがトランクの前に統合する、長く存続する任意のブランチです。commitTypes(deprecated、prose-only): ワーカーのコミットで許可される Conventional Commit の種類です。
design
任意かつ prose-only です。null または省略した場合、デザインや UI のレビューのステップはスキップされます。
canvasIndex(deprecated): ワーカーが UI の変更の前に確認する、デザインキャンバスファイルへのパスです。