
"Agent 基础设施应该轻量级、可组合、且与提供商无关。"
这是"每日开源项目"系列的第 60 期。今天我们要聊的是 OpenHarness。
过去几期我们聊过 OpenAI 的 Symphony(Agent 编排规范)、Addy Osmani 的 Agent Skills(工程技能集),还有 Anthropic 的金融行业 Agent 套件。这些项目传递出一个明确信号:AI Agent 正从"聊天助手"演变为"能执行工作流的工程基础设施"。
OpenHarness 正是这一基础设施层的优秀实践。由香港大学数据科学实验室(HKUDS)用 Python 开发,它提供四大核心能力——工具调用、技能加载、记忆管理和多 Agent 协作,支持从 Claude 到 DeepSeek 再到本地运行的 Ollama 实例。12.2k Stars 反映了开发者社区对其理念的认可:轻量级、可组合、与提供商无关。
OpenHarness 是一个开源 Python 框架,旨在为 AI Agent 提供核心轻量级基础设施:工具调用、技能、记忆和多 Agent 协作。
其设计理念围绕三个关键词:
项目还附带 ohmo,一个基于 OpenHarness 构建的个人 Agent。它桥接 Feishu、Slack、Telegram 和 Discord,运行在你现有的 Claude Code 或 GitHub Copilot 订阅上,可自主创建分支、编写代码、运行测试和打开 PR。
OpenHarness 扮演 AI Agent 的"操作系统内核"角色。它不是给终端用户的聊天界面——而是给开发者提供构建 AI Agent 所需的基础、核心运行时能力。
想象一下 Linux 内核:你不会直接使用内核,但你构建的每个应用都依赖内核进行进程调度、文件系统和网络。OpenHarness 为 AI Agent 提供的是同等功能:工具执行调度、持久化记忆、权限控制和子 Agent 协作。
安装:
# 方法 1:一键安装脚本
curl -fsSL https://raw.githubusercontent.com/HKUDS/OpenHarness/main/scripts/install.sh | bash
# 方法 2:pip install
pip install openharness-ai
初始设置:
# 交互式提供商配置(Claude / OpenAI / DeepSeek 等)
oh setup
# 示例:配置 Claude
# Provider: anthropic
# API Key: sk-ant-...
# Model: claude-opus-4-6
基本用法:
# 启动交互式终端 UI
oh
# 单任务执行(非交互式)
oh -p "分析当前目录的 Python 代码,找出所有未处理的异常"
# JSON 输出格式(用于管道和脚本集成)
oh -p "列出所有 TODO 注释" --output-format json
# 试运行模式(预览配置,不执行任何操作)
oh --dry-run
ohmo 个人 Agent:
# 安装 ohmo
pip install ohmo
# 配置消息平台(Feishu / Slack / Telegram / Discord)
ohmo setup --platform telegram
# 开始监听
ohmo start
# 现在在 Telegram 发送消息:
# "修复 feature/login-fix 分支上的登录 bug,完成后打开 PR"
# ohmo 自动:创建分支 → 编写代码 → 运行测试 → 打开 PR
1. Agent Loop(循环引擎)
OpenHarness 的核心——一个流式工具调用循环,处理与 LLM 的每一轮交互:
# 概念性 Agent Loop 结构
while not done:
response = llm.stream(messages, tools=available_tools)
if response.has_tool_calls:
# 并行执行多个工具调用
results = parallel_execute(response.tool_calls)
messages.append(tool_results(results))
else:
# 模型提供最终响应——循环结束
done = True
yield response.text
关键能力:
2. Harness Toolkit(工具套件)
43+ 内置工具,覆盖绝大多数日常 Agent 任务:
| 类别 | 示例工具 |
|---|---|
| 文件系统 | read_file, write_file, edit_file, list_dir, search_files |
| Shell | bash_execute, python_execute, node_execute |
| Web | web_search, web_fetch, web_screenshot, parse_html |
| MCP 集成 | 连接任意 MCP 服务器(HTTP/SSE 传输) |
| 按需技能 | 从 Markdown 技能文件动态加载专业知识 |
3. 上下文与记忆
OpenHarness 最精心设计的模块之一:
MEMORY.md 示例(由 Agent 自动维护)
## 项目记忆
### 用户偏好
- Python 必须在 conda `dev_base` 环境中运行
- 提交消息应为英文
- 测试覆盖率要求:> 80%
### 已知问题
- `auth.py:142` 有已知竞态条件——待修复
- PostgreSQL 连接池在高并发下需要调整 max_conn
4. Governance 层
在生产环境中,让 Agent 自由访问文件系统和执行 shell 命令是危险的。OpenHarness 的 Governance 模块提供:
Governance 配置示例(概念性)
governance:
mode: restricted
allowed_paths:
read: ["./src", "./docs"]
write: ["./output"]
forbidden_commands:
- "rm -rf"
- "git push --force"
hooks:
pre_tool_use:
- log_tool_call # 记录所有工具调用
post_tool_use:
- validate_output # 验证工具输出
require_approval:
- shell_execute # shell 执行需要用户审批
5. Swarm 协作
对于需要并行处理的复杂任务,单个 Agent 太慢。Swarm 模块支持多 Agent 协作:
from openharness import Swarm, Agent
swarm = Swarm()
# 注册一组专业 Agent
swarm.register("code_analyst", Agent(skills=["code-review"]))
swarm.register("security_auditor", Agent(skills=["security"]))
swarm.register("doc_writer", Agent(skills=["documentation"]))
# 委托任务——并行执行
results = await swarm.delegate({
"code_analyst": "分析 src/ 目录的代码质量",
"security_auditor": "扫描潜在安全漏洞",
"doc_writer": "生成 API 文档草稿"
})
| 特性 | OpenHarness | LangChain / LlamaIndex | AutoGen |
|---|---|---|---|
| 学习曲线 | 低(只需运行 oh) | 高(多层抽象) | 中等 |
| 核心代码库大小 | 轻量级 | 数十万行 | 中等 |
| 提供商支持 | 10+ 提供商(包括本地模型) | 多,但配置复杂 | 主要为 OpenAI |
| 记忆机制 | 原生 MEMORY.md 持久化 | 需要外部集成 | 有限 |
| 多 Agent | Swarm 原生支持 | 通过 Agent 框架 | 核心功能 |
| 治理/权限 | 内置多级 + hooks | 非内置 | 有限 |
| MCP 支持 | 原生(HTTP/SSE 传输) | 插件化 | 无 |
OpenHarness 支持三个层级的模型提供商:
Anthropic 兼容(通过 Anthropic SDK):
oh setup
# Provider: anthropic → Claude 系列
# Provider: moonshot → Kimi
# Provider: glm → 智谱 GLM
# Provider: minimax → MiniMax
OpenAI 兼容(通过 OpenAI SDK):
# Provider: openai → GPT-4, GPT-4o
# Provider: openrouter → 多模型聚合器
# Provider: dashscope → 阿里云 Qwen
# Provider: deepseek → DeepSeek 系列
# Provider: groq → 超快 Llama 推理
# Provider: ollama → 本地开源模型
# Provider: github → GitHub Models
订阅桥接(无需 API key——复用现有订阅):
# Provider: claude-code → 复用你的 Claude Code 订阅
# Provider: codex → 复用你的 GitHub Copilot (Codex CLI) 订阅
这意味着如果你已订阅 Claude Code 或 GitHub Copilot,无需额外 API 成本。
OpenHarness 的内置工具给 AI Agent 真正"把事情做成"的能力:
文件系统(~10 工具):
read_file, write_file, edit_file, list_dir, search_files,
create_dir, delete_file, move_file, copy_file, get_file_info
Shell(~5 工具):
bash_execute, python_execute, node_execute, get_env, set_env
Web(~8 工具):
web_search, web_fetch, web_screenshot, parse_html,
download_file, check_url, get_headers
代码(~8 工具):
lint_code, format_code, run_tests, build_project,
git_status, git_commit, git_diff, git_log
MCP(~5 工具):
mcp_connect, mcp_list_tools, mcp_call_tool,
mcp_list_resources, mcp_read_resource
其他(~7 工具):
token_count, cost_estimate, task_spawn, memory_read,
memory_write, skill_load, context_compress
如果 OpenHarness 是"引擎",ohmo 就是基于它打造的"第一辆量产车":
用户在 Telegram 发送消息
↓
ohmo 接收消息
↓
OpenHarness Agent Loop 启动
↓
调用工具(git、bash、文件操作等)
↓
自动:创建分支 → 编写代码 → 运行测试 → 打开 PR
↓
ohmo 在 Telegram 回复:"任务完成。PR #47 已打开供审查。"
这个流程展示了 OpenHarness 的真正价值:它封装了"让 AI Agent 真正做事"所有混乱、不 glamorous 的基础设施工作,让上层应用如 ohmo 能完全专注于业务逻辑。
OpenHarness 做了 AI Agent 领域最不 glamorous 但最重要的工作:让工具调用、记忆、权限和多 Agent 协作变得干净可靠——让构建在其上的应用能优雅地站在它的肩膀上。