create-agent 是 Harness Anything 项目下的一个技能(Skill),位于 fairladyz625/harness-anything 仓库中。其核心目标是指导用户通过命令行工具 ha 创建或更新一个业务 Agent。Agent 被定义为一个具有声明的实体,而不仅仅是模型名称;模型只是其中一个字段。业务 Agent 的声明包括它负责什么、读取哪些来源、如何决策、哪些技能使其专业化、哪个预设塑造其任务以及它必须在何处停止。
使用方式:用户需在编写任何声明前阅读当前契约,例如执行 ha agent --help、ha agent inspect <existing-id> 和 ha agent list。Schema 权威位于 packages/kernel/src/domain/agent-squad-schema.ts(agent-declaration/v1)。不要从文档复制声明形状,而应从实时 --help 输出和可工作的声明中复制。
编写声明前,需回答五个问题:业务结果(该 Agent 存在的独特成果)、决策权限(哪些调用独立做出、哪些上报及向谁)、读取范围(必须打开哪些来源、哪些是噪声)、完成证据(什么证明工作完成,必须与预设的完成门匹配)以及失败形态(当前提为假、工具被拒绝或证据缺失时做什么,需在 instructions 中给出具体动作和报告内容)。
声明字段及其实际效果:
- id:稳定身份,出现在调度来源和任务记录中;应小写实体 slug,永不重命名,使用 retire --successor。
- name:显示标签,使用业务名称而非模型名称。
- instructions:每次调度时首先原样注入;写入工作、权限边界、停止条件和输出契约。
- role:选择角色基线提示(worker / commander / reviewer);写入实际纪律而非愿望。
- runtimes:该 Agent 可运行的运行时种类,每个可带可选模型和努力程度;至少一种已安装,空表示任何兼容种类。
- instance:节点本地运行时实例固定;除非必须运行在特定实例,否则省略。
- permissionMode:无人值守沙箱默认;只读也启用附加到已提交的冻结剪切;默认 workspace-write;审阅者和分析师用只读。
- skills:生成时解析的技能目录;缺失路径会导致调度失败;项目相对路径,指向包含 SKILL.md 的目录。
- prompts:角色基线之后附加的额外提示块;用于重复读取集和每次调度约定,而非工作本身。
- preset:任务塑造预设;必须存在于目标仓库。
两个关键约束:skills[].path 在服务节点上解析,而非编写时;在本地存在但节点上不存在的路径会导致 agent_skill_not_found 失败。运行 ha agent validate --source <file> 在安装前解析相同路径。instructions 每次调度原样注入,长度是每次调度的开销;持久判断放在此,参考细节放在技能中,任务特定事实放在任务计划中。
编写循环:1) 在仓库保留 agents 的位置编写声明(如 harness/agents/<id>.json),从可工作的声明开始(ha agent inspect <closest-existing-agent>)。2) 安装前验证:schema、节点上可用的运行时目标、技能路径解析(ha agent validate --source harness/agents/<id>.json)。3) 预览然后安装(ha agent install --source ... --dry-run 然后不带 --dry-run 安装,可使用 --expected-version 防止并发编辑)。4) 证明可调度:干运行生成组装真实提示而不启动运行时(ha agent run <id> --task <task-id> --dry-run),检查身份前缀、指令、角色基线、提示、预设、解析的技能路径和任务按运行时接收顺序。
保留迭代路径:在技能中挂载自我迭代,让 Agent 在交付后能提议修改自身声明;保持 instructions 关于判断、skills 关于过程,以便后续提议可分别更改;不要将技能规则复制到 instructions 中(两个来源会漂移)。
更新、退役和不应做的事:使用 ha agent inspect <id> 查看当前声明和预期版本;使用 ha agent install --source <file> --expected-version <n> 原地更新;使用 ha agent retire <id> --reason "<why>" --successor <id> 保留历史和深层链接;使用 ha agent delete <id> --reason "<why>" --expected-version <n> 删除。永远不要手动编辑已安装的声明存储;更新通过 ha agent install 进行,它通过中心单写路径写入并记录版本。永远不要复制另一个 Agent 的声明只改一个字段;从工作开始,然后借用特定行。不要创建 Agent 来持有权限(权限来自运行时和任务租约,非身份)。不要为每个任务创建一个 Agent(如果身份只使用一次,那就是任务而非 Agent)。
输出契约:报告声明路径、五个工作答案各一行、ha agent validate 结果、ha agent install 收据(版本)、--dry-run 提示的章节顺序以及任何保留默认值的字段及原因。