长程任务为什么需要 Harness
进度、上下文、可核对的产物,以及每一层如何配合。
Agent Harness 是把模型变成 Agent 的运行层:循环、工具路由、上下文管理、记忆、 权限执行与故障恢复。长程能力是这整套系统的属性,不是模型单独的属性 —— 再强的模型, 放进一个会丢任务状态的 Harness 里,照样跑不彻底。
OpenCorvus 就是这样一套已经组装好、面向长程工作的 Harness。它随包提供覆盖五个主要 角色的流式 Agent 循环、70 个内置工具、87 个模型供应商的目录、可在重启后恢复的编排、 持久化的权限授权、项目与会话记忆、自动上下文压缩,以及 可检查的专家团。Agent 真正开始工作前,必须显式选择模型并配置一个可访问的供应商;目录是能力元数据,不是 隐藏的默认凭据或模型 fallback(后备路径)。
长程工作会在三个地方断,这里对每一处都给了答案:跑不彻底、结果不能核对、 工作流永远不会变好。把多支专家团组合起来,是极长任务之所以可行的原因;让专家团 按你自己的反馈修订,是第十次运行好过第一次的原因。
而下面的每一层都是配置面:换模型、收窄工具集、收紧权限规则、替换整支专家团,或者 直接用 SDK 驱动整个 Harness。
后端运行时与桌面前端都写在这个仓库里,底下没有套第三方 Agent 引擎。这不是什么值得 炫耀的事,而是「每一层都能换掉」的前提。它同样站在大量开源项目的肩膀上 —— Bun、 AI SDK、SolidJS、Tauri 都在其中。
长程工作在哪里断
| 断在这里 | 对应的机制 |
|---|---|
| 跑不彻底。 某一步被跳过,进程死掉,或者任务进了终态而目标只完成了一半。 | Requirements 产出 REQ-N 条目,每条自带验收条件与明确的非目标;专家团的工作流声明谁依赖谁。物理归属是一份只追加的租约:进程消失后,协调器会在租约到期这个确定性时间点上精确终结被遗弃的 Turn,然后才取得后继激活。每一条被接受的输入都要过同一个全序归约,其中每种状态都有名字。 |
| 结果不能稳定使用。 报告成功了,拿到的却是一份没法核对的总结。 | 交接是带来源和精确 locator 的类型化 Artifact,读取要跨一道只暴露「此前步骤已完成产出」的因果边界。宿主独立于 Agent 的自述记录文件变更与命令结果。事实核查、完整性复核与视觉 QA 是各有 Agent 的具名阶段;已限定类别的 Work Artifact(今天是可编辑演示文稿)要真的渲染、检查并拿到校验回执,才算交付。 |
| 工作流永远不会变好。 第十次运行还在犯第一次的错,因为那次纠正随对话一起死了。 | 把你真正想要的说给专家团,它会据此起草一次修订;你接受,回执就是撤销凭据。或者跑一次带度量的进化实验室活动。没有你的确认,什么都不会安装。 |
终态也不是终点。已进入 completed、failed 或 cancelled 的任务,收到你的消息就会重开,
在一轮新的执行里继续,上一轮作为不可变事实原样保留。这里没有单独的重试或重新规划控件 ——
一个只能靠专用词汇才走得出去的状态,就是一个你用普通动作离开不了的状态。
边界是真实的:无人值守的工作只在你的运行时在线时继续,产出仍取决于所选模型、可访问的来源和 拿到的证据。详见长程工作在哪里断。
随包提供
| 能力 | 内置内容 |
|---|---|
| 模型供应商 | 内置目录解析 87 个供应商、2,579 个模型并支持本地运行时;运行 Agent 前必须显式选择模型并配置可访问的供应商。 |
| 工具 | 70 个内置工具,浏览器与计算机控制作为默认能力块提供。 |
| 专家团 | 在公开目录查看已内置可用的专家团和可导入的资源包。 |
| Agent 角色 | 五个主要角色:coding、chat、work、control、mission。 |
| 聊天渠道 | Slack、Discord、Telegram、飞书、钉钉、企业微信、WhatsApp、Line、Signal、Matrix、Mattermost、Microsoft Teams、Google Chat。 |
| 接入界面 | 桌面应用、带服务器发送事件(SSE)的 HTTP API,以及定时自动化。 |
Harness 逐层可见
每一层都随 Harness 交付,同时每一层也都是配置面。只有显式配置模型和可访问的供应商后,Agent 工作才会开始。
| 层 | 随包内容 | 可替换为 |
|---|---|---|
| Agent 循环 | 五个主要角色运行在带类型工具结果的流式循环上。 | agent、提示词覆盖 |
| 工具 | 70 个内置工具,外加模型上下文协议(MCP)服务与插件。 | tools、mcp、plugin |
| 模型 | 一个内置目录包含 87 个供应商、2,579 个模型;不会隐式选择模型或凭据。 | model、small_model、provider |
| 上下文 | 自动压缩与逐轮上下文预算,让长程运行始终留在窗口内。 | 模型与预算配置 |
| 记忆 | 项目与会话记忆,具备检索、组织与显式注入能力。 | instructions、记忆配置 |
| 权限 | 每一次副作用执行前,都要经过一道持久化的允许/询问/拒绝授权。 | permission 规则、shell 作用域 |
| 专家团 | 公开目录中的可检查专家团;任务锁定一个精确版本,不会静默切换。 | expert_squads、自行编写 |
| 持久化执行 | 进程租约、事件日志与协调器,在重启后恢复已归属的工作。 | 平台保证 |
| 校验 | 完整性复核、事实核查与视觉 QA 作为具名阶段运行。 | 验收配置 |
| 证据 | 宿主观测独立记录文件变更与命令结果,不依赖 Agent 的自述总结。 | 平台保证 |
| 接入界面 | 桌面端、带 SSE 的 HTTP API、13 个聊天渠道、定时自动化。 | SDK、插件 API、Agent Client Protocol |
核心模型
| 对象 | 作用 |
|---|---|
| Mission | 协调由多个 Task 组成的目标,并记录 Task 之间的依赖关系。 |
| Task | 管理一项项目内工作、一个固定的专家团、已选工作流、相关 Session,以及生命周期决策。 |
| Expert Squad | 把 Agent 阵容、指令、Skill、工具、模型上下文协议(MCP)访问和已声明的工作流打包。 |
| Workflow | 声明一个 Task 要运行的 Agent 及其依赖顺序。 |
| Artifact | 保存带来源信息的类型化输出或文件快照,供其他 Agent 或 Task 读取同一份结果。 |
| 宿主观察 | 独立记录文件改动、命令结果等事实,不依赖 Agent 的文字总结。 |
一个 Task 选定专家团后不会中途更换;如果选了工作流,工作流也保持不变。Worker 以流式 方式发送消息和工具调用,在契约要求时发布 Artifact,并把精确的 Artifact 引用交给下游 Worker。Orchestrator 根据这些记录和宿主观察处理生命周期决策。未解决的限制和 blocker 保留在 Agent 的可见消息中。
