Skip to content

Krual-T/OpenHarness

Repository files navigation

License Python uv

OpenHarness

不是给智能体下指令的工具。
是人机共生协作的工程框架。

瓶颈从来不是代码生成的速度。
瓶颈是:人和智能体之间,有没有一套使双方对等参与、共同决策、可追溯验证的协作协议。

设计哲学 · 核心模型 · 快速开始 · 设计原则 · 反馈闭环 · 命令速览


设计哲学

OpenHarness 不是一个 Prompt 合集,也不是一个技能库。它的底层是一组工程设计原则,这些原则共同构成了智能体协作的"控制论骨架"。

人机共生:协作系统,不是指令执行器

1960 年,J.C.R. Licklider 发表了《人机共生》(Man-Computer Symbiosis),开篇写道:

人机共生的希望在于,在不太多年内,人的大脑与计算机将被紧密耦合在一起,由此产生的协作将让人的大脑以前所未有的方式思考,以我们从未见过的能力处理信息。

Licklider 描述的不是一个"输入指令—输出结果"的主仆模型。他描述的是一个对等的协作系统——人和机器各自做自己擅长的事,在一个共享的工作空间里协同推进。

六十年后,AI 编程智能体出现了。但大多数人对智能体的用法,仍然停留在指令-执行模式

人:帮我实现一个用户登录功能
智能体:好,这是代码
人:不对,要加双因素认证
智能体:好,改好了
人:还不对,不应该用 JWT,换成 session
...

这不是协作。这是用自然语言做命令行操作

OpenHarness 的设计第一性原理是:智能体不是工具,是协作方。这意味着整个系统不能围绕"如何让智能体听话"来设计,而必须围绕"如何让人和智能体成为一个高效的联合认知系统"来设计。

这个转向需要回答四个问题:

问题 指令-执行模式 OpenHarness 的协作模式
谁知道"要做什么"? 只有人知道,人负责描述完整需求 人和智能体共同收敛需求,任务包是共享的认知产物
谁判断"做得对不对"? 人肉判断,每次输出都要人 Review 三级验证谱系:自动化测试(unit_test)、语义审核(qualitative,子 Agent + 人类审阅者双轨审核)、运行时观察(rwp)——验证手段由任务性质决定,证据写入任务包
工作状态存在哪里? 聊天记录,散落,不可检索 任务包,版本化,可 git diff,可审计
智能体学到什么? 零积累,每次会话从零开始 归档任务包成为项目结构化记忆,反哺未来任务

OpenHarness 不是让智能体"更听话"。它是让智能体成为一个双向可问责的协作方:人需要对需求提出足够明确的验收标准;智能体需要产出可验证、可追溯的证据。双方的贡献都被记录在同一套文档里,对等可见。

这个思想直接继承自三个学术传统:

  • 人机共生(Licklider, 1960)— 人与计算机的紧密耦合,不是替代,是增强
  • 增强人类智能(Engelbart, 1962)— 计算技术的目标是放大人的认知能力
  • 联合认知系统(Woods & Hollnagel, 2006)— 人和机器应被视为一个整体的认知单元,各有所长

OpenHarness 做的事,本质上是把这些已经存在半个多世纪的学术洞见,翻译成一套工程上可落地的协议。任务包是共享工作空间。阶段门禁是协作的 Handoff 点。证据记录是双向可追溯的审计日志。AGENTS.md 是人和智能体之间的协作接口规范。

工程控制论:将反馈原理工程化

1948 年,Norbert Wiener 在《控制论》中奠定了理论基础:通过反馈回路让系统自我修正。但真正把控制论从数学理论变成可落地的工程学科的,是钱学森 1954 年的《工程控制论》——它回答了"如何在真实系统中设计反馈、门禁和自修正机制"。

把这个工程化思想翻译到 AI 编程场景:

没有反馈的智能体 = 开环系统
一次 Prompt → 一次输出 → 人肉判断对错 → 再 Prompt → 再输出 → ...

有反馈的智能体 = 闭环系统
提出需求 → 设计 → 实现 → 按设计验证 → 证据写入 → 阶段门禁 → 推进或回退

OpenHarness 做的事,本质上是钱学森式的工程化:把反馈原理翻译成每个阶段之间可检查的门禁。不通过门禁,不能进入下一阶段。这不是靠人肉感觉判断,而是靠预先设计、事后有据的验证。

渐进式披露:不为不需要的信息付费

软件架构里有一个著名原则:信息应该在最需要的时刻才被拉取,而不是在入口处全部推送

OpenHarness 把这个原则做成了三层:

层级 内容 触发时机
入口层 AGENTS.md — 仓库地图 会话启动,一次性
任务层 任务包详情 + 当前阶段 Skill 进入具体任务
执行层 RWP 运行时工作流 需要运行时验证时才加载

智能体不用一次性加载整个知识库。它只看到当前阶段需要的上下文。这既控制 Token 消耗,也控制认知负荷。

信息熵减:把混乱变成结构

香农的信息论告诉我们:不确定性越高,信息熵越高

AI 编程场景的熵源:

  • 需求藏在聊天记录里 → 高熵,无法检索
  • 设计决策在人的脑子里 → 高熵,智能体不可见
  • 验证结果在终端历史里 → 高熵,无法追溯

OpenHarness 做的是信息熵减工程

聊天记录(高熵)          →  需求文档(低熵,结构化)
人的脑内决策(高熵)      →  设计文档(低熵,可 Review)
终端输出(高熵)          →  证据记录(低熵,可追溯)

每次阶段 Transition 都是一次熵减操作:把散落在各处的信息收敛到一个版本化、可检索、可验证的结构中。

约束即解放:结构化不是限制,是降低决策成本

Barry Schwartz 在《选择的悖论》里论证过:选项越多,决策质量越差

给智能体完全的自由度,它会在每个节点重新发明工作流。OpenHarness 的做法相反:

  • 每个阶段只有明确的入口和出口
  • 每个门禁只有明确的通过条件
  • 每个产物只有明确的模板边界

这些约束消除了"接下来该做什么"的决策成本。智能体不需要在每个节点重新思考流程——它只需要在当前阶段的边界内,做到最好。


核心模型

                        ┌──────────────────────┐
                        │     AGENTS.md         │
                        │     项目事实地图       │
                        │  (入口层,渐进式披露)   │
                        └──────────┬───────────┘
                                   │
              ┌────────────────────┼────────────────────┐
              │                    │                    │
              ▼                    ▼                    ▼
     ┌────────────────┐  ┌────────────────┐  ┌────────────────┐
     │    任务包       │  │    技能库       │  │  RWP 运行时     │
     │                │  │                │  │  工作流包       │
     │  需求 (SSOT)    │  │  过程约束       │  │                │
     │  概要设计        │  │  阶段指引       │  │  按需发现       │
     │  详细设计        │  │  角色注入       │  │  按需加载       │
     │  验证设计        │  │                │  │  按需执行       │
     │  证据记录        │  │                │  │                │
     └───────┬────────┘  └───────┬────────┘  └───────┬────────┘
             │                   │                   │
             └───────────────────┼───────────────────┘
                                 │
                                 ▼
              ┌──────────────────────────────────────┐
              │           阶段门禁(反馈回路)         │
              │                                      │
              │  proposing ──→ overview_designing    │
              │      │              │                │
              │      ▼              ▼                │
              │  requirements_  overview_            │
              │  designed       designed             │
              │                                   │
              │  detailed_designing ──→ implementing │
              │      │                    │          │
              │      ▼                    ▼          │
              │  detailed_           implemented     │
              │  designed                            │
              │                                   │
              │  verification_ ──→ verifying         │
              │  designing           │               │
              │      │               ▼               │
              │      ▼          verified ──→ archived│
              │  verification_                       │
              │  designed                            │
              └──────────────────────────────────────┘

这是一个自修正系统。每个门禁都是一次反馈检查:产物是否符合上一阶段的要求?如果不符合,回退修正。如果符合,推进。


快速开始

前提:已安装 Gituv

Linux / macOS:

curl -fsSL https://raw.githubusercontent.com/Krual-T/OpenHarness/refs/heads/main/install.sh | bash

Windows(PowerShell):

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Krual-T/OpenHarness/refs/heads/main/install.ps1" | Invoke-Expression

在你的项目中初始化:

openharness init --agent all

目录创建、技能链接、会话 Hook 全部自动完成。详见 INSTALL.md


设计原则

OpenHarness 的每一个功能模块都不是随意堆砌的——它们各自对应一条明确的设计原则。

1. 真相单一来源 → 任务包

原则:每项工作有且只有一个权威事实源。

任务包 docs/task-packages/<任务名>/ 是一套固定结构:

任务名/
├── task-info.yaml        ← 状态机(机器可读)
├── requirements.md        ← 需求(问题 + 目标 + 约束)
├── overview-design.md     ← 概要设计(架构决策)
├── detailed-design.md     ← 详细设计(实现路径 + 测试计划)
├── verification-design.md ← 验证设计(如何证明完成)
└── evidence.md            ← 证据(实际执行结果)

人和智能体共享这同一套文件。可以 git diff、可以 Review、可以归档、可以审计。

2. 关注点分离 → 阶段门禁

原则:不同性质的工作不应混在同一个步骤里完成。

OpenHarness 把任务生命周期拆解为 6 个阶段,每个阶段只关注一件事:

阶段 关注点 产物
proposing 明确要解决什么问题 需求文档
overview_designing 架构方向是否正确 概要设计
detailed_designing 实现路径是否可行 详细设计
verification_designing 如何证明完成 验证设计
implementing 编码实现 代码变更
verifying 是否达到验收标准 证据记录

每个阶段都有独立的完成标准,不达标准不能 Transition 到下一阶段。这确保了智能体不会"边设计边实现边验证"——那是最容易产生隐蔽错误的模式。

3. 渐进式披露 → RWP 运行时工作流

原则:不加载当前不需要的信息。

不是所有调试场景都一样。API 调试需要 HTTP 客户端和 Mock 服务,前端调试需要 headless 浏览器,数据迁移需要数据库快照——各自需要的运行时环境完全不同。

RWP 的设计遵循三级渐进式披露:

# 第一级:只看摘要(几乎零 Token 成本)
openharness rwp list

# 第二级:选定候选后才加载详情
openharness rwp view <工作流>

# 第三级:确定执行后才运行
openharness rwp run <工作流> <脚本.py>

智能体不会一次性把所有工作流说明塞进上下文。它按需拉取。

4. 不可发现即不存在 → 智能体可读性

原则:仓库结构必须对智能体友好,否则信息等价于不存在。

这个原则很残酷但也很真实:如果智能体从项目文件里读不到某个信息,那对智能体来说这个信息就不存在。这意味着:

  • 关键决策必须从聊天记录搬到版本化文档
  • 仓库目录结构必须让智能体凭直觉就能导航
  • 命名必须遵循可预测的约定,不能靠人类背景知识补充

AGENTS.md 不是写给新人看的 README,它是智能体的入口路由器。它回答的是:什么东西在哪里、该走哪个流程、做完该写回什么。

5. 约束降低决策成本 → 技能库

原则:不是给智能体更多选项,而是给智能体更少但更清晰的选择。

skills/ 目录下的技能不教智能体"怎么写代码"——那它本来就会。技能教的是"在当前阶段,你应该关注什么、产出什么、不做什么"。

每个阶段技能都有明确的边界:

  • 入口条件(什么时候进入这个阶段)
  • 产出标准(阶段结束时必须交付什么)
  • 禁止行为(这个阶段不要做什么)
  • 出口条件(推进到下一阶段的前提)

这消除了智能体在每个节点"接下来该干什么"的决策疲劳。


反馈闭环

把以上原则组合在一起,形成的是工程控制论意义上的反馈闭环

需求 ──→ 概要设计 ──→ 详细设计 ──→ 实现 ──→ 验证
  │                                 │         │
  │        ←─── 证据驱动修正 ←──────┴─────────┘
  │
  └──→ 归档(知识积累,反哺未来任务)
  • 向前:每个阶段只依赖上一阶段的产物作为输入
  • 向后:验证阶段用证据匹配需求,不匹配则回退
  • 积累:归档的任务包成为项目的结构化记忆,新任务可以检索历史决策

这不是线性的瀑布模型——它是带反馈的闭环。验证失败就回退修正,而不是假装通过。


命令速览

命令 控制论语义
openharness task-package new <名称> 创建新的反馈回路
openharness task-package list 列出所有活跃回路
openharness task-package view <任务> 查看回路当前状态
openharness task-package transition <任务> <状态> 执行门禁检查并推进
openharness rwp list 渐进式披露:一级摘要
openharness rwp view <工作流> 渐进式披露:二级详情
openharness rwp run <工作流> <脚本> 执行运行时验证
openharness init --agent <claude|codex|all> 在项目中部署控制论骨架
openharness update 强制同步安装源码目录并更新到最新版本
openharness update --mode dev-source 跳过 Git 同步,从当前开发源码重新安装

项目结构

AGENTS.md                           # 智能体入口路由器
skills/using-openharness/
  ├── SKILL.md                      # 会话入口:判断是否需要任务包
  ├── states/                       # 阶段技能(按状态加载)
  │   ├── proposing/                 # 需求收敛
  │   ├── exploring-solution-space/ # 方案探索
  │   ├── detailed-design/          # 详细设计
  │   ├── implementing/             # 编码实现
  │   ├── verification-designing/   # 验证设计
  │   └── verifying/                # 执行验证
  └── references/                   # 模板和协议文档
docs/
  ├── task-packages/<任务>/         # 活跃任务包
  └── archived/task-packages/       # 已归档任务包(结构化记忆)
openharness_cli/                    # CLI 工具
tests/                              # 测试
install.sh / install.ps1            # 跨平台安装脚本

起源与归属

OpenHarness 的设计思想受多个源头的启发:

  • 人机共生(J.C.R. Licklider, 1960)— 人与计算机的紧密耦合协作
  • 增强人类智能(Douglas Engelbart, 1962)— 计算技术放大而非替代人的认知
  • 联合认知系统(David Woods & Erik Hollnagel, 2006)— 人与机器作为统一的认知单元
  • 控制论(Norbert Wiener, 1948)— 反馈回路与自修正系统的理论基础
  • 工程控制论(钱学森, 1954)— 将控制论从数学理论落地为工程学科
  • 渐进式披露(Jakob Nielsen, 1995)— 信息按需呈现
  • 信息论(Claude Shannon, 1948)— 熵减作为结构化工程
  • OpenAI Harness Engineering(2025)— 智能体时代的注意力经济学

代码层面,OpenHarness 是衍生作品,直接复用并改编了 obra/superpowers 的源码。技能库经由 openrelay 孵化而来。

分发本仓库的实质性部分时,请保留上游版权和许可声明。


许可证

MIT,包含上游 obra/superpowers 的 MIT 许可归属声明。


智能体不是用来使唤的。
给它一张地图、一个反馈回路、一套对等协作的协议。
然后,一起工作。

About

OpenHarness is all you need

Resources

License

Stars

Watchers

Forks

Contributors