配置参考
emet.config.json 中的每个键,及其默认值和含义。权威来源是 emet/schema/emet.config.schema.json。术语遵循 GLOSSARY.md。返回 README。
emet init 会写入该文件,emet preflight 和 emet doctor 会校验它。标记为 prose-only 的键由 /emet 提示词读取,而不是由 CLI 读取。标记为 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 个 token):交接笔记最多可以有的字符数。 -
autoChain(默认false):在一个干净且已合并的波次之后,如果还有剩余波次,就用claude --bg启动下一个波次,而不是打印/emet:run --dispatch <spec-id>。可用claude agents或claude attach emet-<spec-id>-w<n>查看。要求:- PATH 中有
claude,并且支持--bg。 - 受信任的工作区。
--bg以非交互方式运行,因此信任对话框不会出现;请在该仓库中以交互方式打开一次claude并接受。 - 在交互会话中已接受一次绕过警告(
skipDangerousModePermissionPrompt),因为下一个波次运行在handoff.permissionMode指定的模式下,而不是启动它的会话的模式。
只有在 PR 已合并且没有任何内容被标记时才会启动;如果已有
emet-<spec-id>-*会话在运行(claude agents --json),则会跳过。如果启动失败,则回退为打印/emet:run --dispatch <spec-id>。 - PATH 中有
-
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):工单在关卡回答defer之前可以让verify失败的次数。该工单会被加上延后标签,波次的其余部分继续进行。环境故障(例如测试命令以 126/127 退出,或服务提供方中断)会暂停运行,且不消耗一次尝试。reviewRounds(默认2,最小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 层级评审的廉价模型。失败的检查会交给使用该模型的代理,它最多返回约 2k 个 token,并附带file:line指引。escalation(默认{ "sonnet": "opus" }):按模型名称给出的下一个模型层级,在工单达到修复次数上限时使用。
review
{ "review": { "highRiskPaths": [] } }highRiskPaths(默认[]):额外的、不区分大小写的路径子串,在内置集合(认证、安全、支付、webhook、CI、安装程序、锁文件、迁移,以及原始 SQL 或管道传给 shell 之类的危险敏感调用)之外,在emet assess中强制进入high评审层级。
landing
mode(默认pr):pr会打开拉取请求(需要gh)。merge通过emet land将集成分支合并到本地主干且从不推送,用commands.selfCheck代替 CI。与跟踪器无关。参见 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(由跟踪器集成自动完成,例如 Linear 在 PR 打开或合并时的 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根据问题的关闭状态和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):一个波次中一起派发的 Agent 调用的最大数量。maxLiveWorkers(默认auto):这台主机上运行的所有/emet协调者在所有仓库之间共享的全局上限。槽位池位于~/.local/state/emet/slots之下,不在任何一个仓库中。auto根据主机的 CPU 数量和内存推算上限;正整数则将其固定。另有一项独立的内存余量检查(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会清扫 glob<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:整个仓库范围测试套件的命令,在波次的各分支合并之后,在集成分支上运行一次。运行失败会阻止 PR 和autoChain。fullSuite.singleton:如果同一时间只允许一个工作树运行该套件,则为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):在工作者启动之前,在新工作树中运行一次的 shell 命令,例如["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"]。每个波次中最多只有一个工作者可以改动它们。sharedDatabase(deprecated):如果各工作者共用一个物理数据库,则为true。
commit
仅 prose-only。
trailer:工作者在引用工单的提交上附加的 git trailer 键,例如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 变更之前会查看它。