关于 harness-adapters
harness-adapters 是 Firstmate 技能,负责将特定运行环境的操作路由到相应参考资料和已验证运行时。它规定了 Worker 调度与控制所需的检测、安全和路由规则。
主要功能
- 01将操作路由到运行环境参考资料
- 02根据已验证信号识别运行环境
- 03解析 Worker 运行时覆盖项
- 04规定安全的控制与恢复路径
适用场景
- 01为特定运行环境的任务选择参考资料
- 02调度 Worker 前核实运行时
- 03通过记录的运行环境恢复或控制 Worker
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ kunchenguid/ firstmate --skill harness-adapters安装后在 Claude Code 中输入/harness-adapters确认已加载。
详细介绍
harness-adapters
这是 Firstmate 特定操作中,负责 harness 的唯一技能、触发器和路由管理方。
请先加载此路由器,然后只加载下文选定的通用参考和一个 harness 参考。
当某项操作涉及多行时,只加载一次这些行对应参考的并集,而不是加载每份参考。
references/ 下的文件是此技能的资源,不是额外编入目录的技能。
路径约定
技能目录是包含此 SKILL.md 的目录。
解析按需加载的参考链接,以及指向可执行文件、文档或同级技能管理方的相对链接时,应以技能目录为基准,包括嵌套参考中提及的链接。
操作路径保留其所属管理方指定的上下文:config/ 和活动 home 设置属于活动 Firstmate home,state/ 属于该 home,而 .claude/settings.json 等项目设置则属于目标项目。
不可妥协的安全要求
绝不在未经验证的 adapter 上派遣 crewmate 或 secondmate。
如果 config/crew-harness 或 config/secondmate-harness 指定了某个 adapter,请告知 ../../../AGENTS.md 第 9 节中的 captain:请求的工作进程运行时尚未验证;当前工作使用 Firstmate 自身已验证的运行时,并仅询问是否要为未来工作验证请求的运行时。
不要因等待此选择而暂停当前工作。
遇到 unknown 时,询问 captain,不要猜测。
当前 captain 覆盖设置优先于检测结果,而单任务覆盖设置仅适用于该次派遣。
执行恢复和控制操作时,使用 state/<id>.meta 中的确切 harness=;绝不要根据模型或提供方推断。
生命周期操作只能通过 ../../../bin/fm-control.sh <task-id> interrupt|exit|relaunch 执行。
绝不要通过 fm-send 输入中断按键或退出命令,因为带路由标记的生命周期文本会变成聊天内容。
只有在检查证实目标已开始处理其指令时,才算完成信任处理;仅仅成功发送并不能证明这一点。
Muse、Gemini、AGY、Devin、Command Code、Polytoken 和 Cortex 仅对 crewmate 和 scout 工作经过验证,绝不用于 secondmate 或 primary。
检测
../../../bin/fm-harness.sh 根据已验证的环境标记和进程祖先信息输出 Firstmate 自身的 harness,并负责确定二者的组合方式。
标记会指明其 harness,但不同 harness 的结构性祖先优先级更高,因为标记只是普通环境状态,子进程或多路复用器可能会保留该状态;而祖先关系能够证明谁拥有该进程树。
只有在启动边界处存在 FM_PI_HARNESS=pi-signed,且同时满足 PI_CODING_AGENT=true 时,才会选择 Pi-signed;未标记的共享启动器祖先仍表示 Pi。
omp 不会发布自己的标记;FM_OMP_HARNESS=omp 是 Firstmate 的启动标记,而锚定的进程名 omp 是其祖先证据,详见 references/harness/omp.md。
../../../bin/fm-spawn.sh 负责建立工作进程标记,而 README 启动命令负责签名主进程边界。
../../../bin/fm-harness.sh crew 会解析 config/crew-harness,若该配置缺失或为 default,则表示使用 Firstmate 自身的 harness。
docs/configuration.md 负责解析 secondmate 固定配置,包括按 mate 单独设置的覆盖项;bin/fm-harness.sh 负责解析器命令。
../../../bin/fm-spawn.sh 每次生成时都会重新解析,显式的单次生成参数对该次生成具有优先权。
新 adapter 的已验证标记和命令名称必须写入 ../../../bin/fm-harness.sh。
操作到参考项矩阵
每个生成的计划都会在指定的通用参考项之后,附加选定或记录的测试框架参考项。
harness-adapter-routing-v1 对象是机器可读且人类可见的选择约定:选择操作,选择其中的场景,然后附加选定的测试框架参考项。
当没有更具体的场景适用时,default 是常规场景。
Kimi 在其选定的测试框架参考项中明确其不支持的主要边界;Muse 和 Gemini 遵循上文的不可妥协安全要求。
在 verify 计划、其测试框架条目、所有指定负责人以及实时检查均落实之前,新工具无法调度。
{
"operations": {
"start": {
"default": ["references/common/dispatch.md", "references/common/model-and-effort.md"],
"trust-dialog": ["references/common/control-and-recovery.md"]
},
"trust": {"default": ["references/common/control-and-recovery.md"]},
"skill": {"default": ["references/common/control-and-recovery.md"]},
"interrupt": {"default": ["references/common/control-and-recovery.md"]},
"exit": {"default": ["references/common/control-and-recovery.md"]},
"resume": {"default": ["references/common/control-and-recovery.md"]},
"recovery": {
"default": ["references/common/control-and-recovery.md"],
"replacement-profile": ["references/common/control-and-recovery.md", "references/common/dispatch.md", "references/common/model-and-effort.md"],
"secondmate": ["references/common/control-and-recovery.md", "references/common/primary-hooks.md"],
"replacement-secondmate": ["references/common/control-and-recovery.md", "references/common/dispatch.md", "references/common/model-and-effort.md", "references/common/primary-hooks.md"]
},
"primary": {"default": ["references/common/primary-hooks.md"]},
"model-effort": {
"default": ["references/common/model-and-effort.md"],
"configured-profile": ["references/common/model-and-effort.md", "references/common/dispatch.md"]
},
"verify": {"default": ["references/common/dispatch.md", "references/common/control-and-recovery.md", "references/common/primary-hooks.md", "references/common/model-and-effort.md"]}
},
"harnesses": {
"claude": "references/harness/claude.md",
"codex": "references/harness/codex.md",
"opencode": "references/harness/opencode.md",
"pi": "references/harness/pi.md",
"pi-signed": "references/harness/pi.md",
"grok": "references/harness/grok.md",
"kimi": "references/harness/kimi.md",
"cursor": "references/harness/cursor.md",
"gemini": "references/harness/gemini.md",
"muse": "references/harness/muse.md",
"rovo": "references/harness/rovo.md",
"omp": "references/harness/omp.md",
"agy": "references/harness/agy.md",
"devin": "references/harness/devin.md",
"commandcode": "references/harness/commandcode.md",
"polytoken": "references/harness/polytoken.md",
"cortex": "references/harness/cortex.md"
}
}