产品边界

`agent-harness` 负责应用级编排和生命周期管理;执行后端负责 agent 执行语义。理解这条分工,有助于判断一项能力该放在哪一层。

边界规则

上游负责 agent 级执行行为,`agent-harness` 负责应用运行时的装配、治理与运维。

稳定的运行时记录

公共接口应该围绕你真正会查询和展示的记录展开,而不是暴露 checkpoint 内部结构。最关键的对象是 requestssessionsapprovalsevents 以及它们对应的生命周期动作。

Requests

一次请求的基本记录,也是关联和审计的基础粒度。

Sessions

支撑长链路会话连续性与恢复的持久化上下文。

Approvals

需要人工决策时使用的稳定记录。

Events

可检查的执行痕迹,不只保留最终回答文本。

为什么公共 API 要保持精简

运行时公共接口应尽量稳定,不跟着 backend 变化一起漂移。适配层可以复杂,但产品 API 不需要暴露这些复杂度。

createAgentHarness(...)
request(...)
subscribe(...)
listRequests(...)
listSessions(...)
listApprovals(...)
resolveApproval(...)
getHealth(...)
stop(...)

如果一个提议主要是在镜像 backend 私有状态,或者只是为了暴露适配层细节,那通常不需要进入公共接口。

与上游语义对齐

`agent-harness` 可以在内部做翻译,但不会在外部重新定义一套与上游冲突的执行语义。只要现有执行后端已经定义了某个原语,通常就直接沿用。

更合适的做法

把 backend 相关差异留在 adapter 里,对外只暴露真正稳定的运行时概念。

不合适的做法

为了表面统一,在 harness 层重新发明 memory、graph、checkpoint 或 execution 语义。

如何看待 backend 选择

选择 backend 是 agent 配置决策,不会改变产品本身。无论底下跑的是 deepagent 还是 langchain-v1,审批、恢复和检查能力都还是同一套运行时能力。

  • 想用更高层的执行语义时,用 backend: deepagent
  • 想要更轻的 direct-response 路径或明确的 V1 agent 形态时,用 backend: langchain-v1
  • 不要把 backend 细节包装成新的一级产品概念。

对设计的直接影响

这条边界会影响 YAML、文档和测试。YAML 主要表达运行时策略和可复用装配对象;文档先解释用户会接触到的能力;测试则验证稳定记录和生命周期行为。