HKUDS/OpenHarness

GitHub: HKUDS/OpenHarness

OpenHarness 是一个开源的轻量级 AI Agent 基础设施框架,提供工具调用、记忆和多智能体协同功能,并内置可接入多聊天平台的个人开发助手 Ohmo。

Stars: 14969 | Forks: 2433

OpenHarness    ohmo
oh — OpenHarness & ohmo

English · 简体中文

**OpenHarness** 提供了核心的轻量级 agent 基础设施:工具调用、技能、记忆以及多 agent 协同。 **ohmo** 是一个基于 OpenHarness 构建的个人 AI agent —— 它不是普通的聊天机器人,而是一个能够在长时间的会话中真正为你效力的助手。在飞书 / Slack / Telegram / Discord 中与 ohmo 聊天,它会自行创建分支、编写代码、运行测试并提交 PR。ohmo 运行在你现有的 Claude Code 或 Codex 订阅上 —— 无需额外的 API 密钥。

Quick Start Architecture Tools Tests License

Python React Pytest E2E Output CI Feishu WeChat

只需一条命令 (**oh**) 即可启动 **OpenHarness** 并解锁所有 Agent Harness。 支持包括 OpenClaw、nanobot、Cursor 等在内的 CLI agent 集成。

OpenHarness Terminal Demo

## ✨ OpenHarness 核心 Harness 功能

🔄 Agent Loop

Engine

• 流式工具调用循环

• 带有指数退避的 API 重试

• 并行工具执行

• Token 计数与成本追踪

🔧 Harness 工具包

Toolkit

• 43 种工具 (文件、Shell、搜索、Web、MCP)

• 按需加载技能 (.md)

• 插件生态系统 (技能 + Hooks + Agents)

• 兼容 anthropics/skills 及插件

🧠 上下文与记忆

Context

• CLAUDE.md 发现与注入

• 上下文压缩 (Auto-Compact)

• MEMORY.md 持久化记忆

• 会话恢复与历史记录

🛡️ 治理

Governance

• 多级权限模式

• 路径级与命令规则

• PreToolUse / PostToolUse Hooks

• 交互式审批对话框

🤝 集群协同

Swarm

• Subagent 生成与委派

• 团队注册与任务管理

• 后台任务生命周期

ClawTeam 集成 (路线图)

## 🤔 什么是 Agent Harness? **Agent Harness** 是包裹在 LLM 周围的完整基础设施,旨在使其成为一个具备实际功能的 agent。模型提供智能;而 harness 提供**双手、眼睛、记忆和安全边界**。

Harness = Tools + Knowledge + Observation + Action + Permissions

OpenHarness 是一个专为**研究人员、构建者和社区**设计的开源 Python 实现: - **理解**生产级 AI agent 在底层的实际工作原理 - **体验**前沿工具、技能和 agent 协同模式 - **扩展** harness,集成自定义插件、provider 和领域知识 - **构建**基于成熟架构的专用 agent ## 📰 最新动态 - **未发布** 🔍 **安全的试运行预览**: - `oh --dry-run` 可预览已解析的运行时设置、认证状态、技能、命令、工具以及配置好的 MCP 服务器,而不会实际执行模型、工具或 subagent。 - 试运行现在会报告 `ready` / `warning` / `blocked` 就绪状态判定,并提供具体的下一步建议,例如修复认证、修复 MCP 配置或直接运行 prompt。 - Prompt 预览包含可能匹配的技能和工具,而斜杠命令预览则会显示该命令主要是只读的还是带有状态更改的。 - **2026-04-18** ⚙️ **v0.1.7** — 打包与 TUI 优化: - 安装脚本现在会将 `oh`、`ohmo` 和 `openharness` 链接到 `~/.local/bin`,而不是将虚拟环境的 `bin` 目录添加到 `PATH` 中,这避免了对 Conda 管理的 shell 环境的破坏。 - React TUI 现在支持使用 `Shift+Enter` 换行,同时保留普通 `Enter` 作为提交键。 - Windows 终端上 React TUI 中的忙碌状态动画变得更加安静且不易出错,使用了保守的加载动画帧并减少了闪烁。 - **2026-04-10** 🧠 **v0.1.6** — 自动压缩与 Markdown TUI: - 自动压缩在上下文压缩过程中保留了任务状态和频道日志 —— agent 现在可以进行多日的会话而无需手动压缩或清理 - 子进程队友在 headless worker 模式下运行;agent 团队创建趋于稳定 - 助手消息现在可以在 React TUI 中渲染完整的 Markdown - `ohmo` 增加了频道斜杠命令和多模态附件支持 - **2026-04-08** 🔌 **v0.1.5** — MCP HTTP 传输与 Swarm 轮询: - MCP 协议增加了 HTTP 传输,支持在断开连接时自动重连,并兼容仅限工具的服务器 - 为 MCP 工具输入推断 JSON Schema 类型 —— 无需手动进行类型映射 - `ohmo` 频道支持文件附件和多模态网关消息 - Subagent 现在可以在实际运行中进行轮询;权限弹窗已序列化以防输入被吞没 - **2026-04-08** 🌙 **v0.1.4** — 多 provider 认证与 Moonshot/Kimi: - 原生 Moonshot/Kimi provider,支持思考模型的 `reasoning_content` - 认证机制大修:修复了切换 provider 时的密钥不匹配问题,支持 `OPENAI_BASE_URL` 环境变量覆盖,以及配置文件范围内的凭证优先级 - MCP 在 `call_tool` / `read_resource` 中能优雅处理已断开连接的服务器 - 安全性:PermissionChecker 中内置了敏感路径保护,强化了 `web_fetch` 的 URL 验证 - 稳定性:Ink TUI 中的 EIO 崩溃恢复、`--debug` 日志、修复了 Windows cmd 的闪烁问题 - **2026-04-06** 🚀 **v0.1.2** — 统一安装流程与 `ohmo` 个人 agent 应用: - `oh setup` 现在以工作流的形式引导选择 provider,而不是暴露原始的认证/provider 内部细节 - 兼容的 API 设置现在限定在配置文件范围内,因此兼容 Anthropic/OpenAI 的 endpoint 可以保留独立的密钥 - `ohmo` 作为打包应用发布,包含 `~/.ohmo` 工作区、网关、引导 prompt 和频道配置流程 - **2026-04-01** 🎨 **v0.1.0** — 首个 **OpenHarness** 开源发布,包含完整的 Harness 架构:

从这里开始: 快速开始 · Provider 兼容性 · 用例展示 · 参与贡献 · 更新日志

## 🚀 快速开始 ### 1. 安装 #### Linux / macOS / WSL ``` # 一键安装 curl -fsSL https://raw.githubusercontent.com/HKUDS/OpenHarness/main/scripts/install.sh | bash # 或者通过 pip pip install openharness-ai ``` #### Windows (原生) ``` # 一键安装 (PowerShell) iex (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/HKUDS/OpenHarness/main/scripts/install.ps1') # 或者通过 pip pip install openharness-ai ``` **注意**:Windows 支持现在是原生的。在 PowerShell 中,请使用 `openh` 代替 `oh`,因为 `oh` 可能会解析为内置的 `Out-Host` 别名。 ### 2. 配置 ``` oh setup # interactive wizard — pick a provider, authenticate, done # 在 Windows PowerShell 上,使用:openh setup ``` 支持 **Claude / OpenAI / Copilot / Codex / Moonshot(Kimi) / GLM / MiniMax / NVIDIA NIM** 以及任何兼容的 endpoint。 ### 3. 运行 ``` oh # 在 Windows PowerShell 上,使用:openh ```

OpenHarness Landing Screen

### 4. 设置 ohmo (个人 Agent) 想要一个能在飞书 / Slack / Telegram / Discord 中为你效力的 AI agent 吗? ``` ohmo init # initialize ~/.ohmo workspace ohmo config # configure channels and provider ohmo gateway start # start the gateway — ohmo is now live in your chat app ``` ohmo 运行在你现有的 **Claude Code 订阅**或 **Codex 订阅**上 —— 无需额外的 API 密钥。 ### 非交互模式 (管道与脚本) ``` # 单个 prompt → stdout oh -p "Explain this codebase" # 用于程序化使用的 JSON 输出 oh -p "List all functions in main.py" --output-format json # 实时流式传输 JSON 事件 oh -p "Fix the bug" --output-format stream-json ``` ### 试运行 (安全预览) 当你想要在任何实际执行开始之前检查 OpenHarness 会使用什么内容时,请使用 `--dry-run`。 ``` # 预览交互式 session 设置 oh --dry-run # 预览单个 prompt 而不执行 model 或工具 oh --dry-run -p "Review this bug fix and grep for failing tests" # 预览 slash command 路径 oh --dry-run -p "/plugin list" # 为脚本或 channel 获取结构化输出 oh --dry-run -p "Explain this repository" --output-format json ``` 试运行是刻意设为静态的: - 它**不会**调用模型 - 它**不会**执行工具或生成 subagent - 它**不会**连接到 MCP 服务器 - 它**会**解析设置、认证状态、prompt 组装、技能、命令、工具以及明显的 MCP 配置问题 就绪级别: - `ready`:配置看起来可用;建议的下一步操作通常是直接运行 prompt - `warning`:OpenHarness 可以解析该会话,但仍有一些重要部分看起来有问题,例如 MCP 配置损坏或后续模型工作缺少认证 - `blocked`:请求的路径无法按原样成功运行,例如未知的斜杠命令或 prompt 无法解析出运行时客户端 试运行输出中的 `next actions` 会告诉你最短的修复方案或后续步骤,例如: - 运行 `oh auth login` - 修复或禁用损坏的 MCP 配置 - 使用 `oh -p "..."` 直接运行 prompt,或使用 `oh` 打开交互式 UI ## 🔌 Provider 兼容性 OpenHarness 将 provider 视为由命名配置文件支持的**工作流**。在日常使用中,建议: ``` oh setup oh provider list oh provider use ``` ### 内置工作流 | 工作流 | 它是什么 | 典型后端 | |----------|------------|------------------| | **兼容 Anthropic 的 API** | Anthropic 风格的请求格式 | Claude 官方、Kimi、GLM、MiniMax、内部兼容 Anthropic 的网关 | | **Claude 订阅** | Claude CLI 订阅桥接 | 本地 `~/.claude/.credentials.json` | | **兼容 OpenAI 的 API** | OpenAI 风格的请求格式 | OpenAI 官方、OpenRouter、DashScope、DeepSeek、SiliconFlow、Groq、Ollama、GitHub Models | | **Codex 订阅** | Codex CLI 订阅桥接 | 本地 `~/.codex/auth.json` | | **GitHub Copilot** | Copilot OAuth 工作流 | GitHub Copilot 设备流登录 | ### 兼容的 API 类型 #### 兼容 Anthropic 的 API 典型示例: | 后端 | Base URL | 示例模型 | |---------|----------|----------------| | **Claude 官方** | `https://api.anthropic.com` | `claude-sonnet-4-6`, `claude-opus-4-6` | | **Moonshot / Kimi** | `https://api.moonshot.cn/anthropic` | `kimi-k2.5` | | **智谱 / GLM** | 自定义兼容 Anthropic 的 endpoint | `glm-4.5` | | **MiniMax** | 自定义兼容 Anthropic 的 endpoint | `minimax-m1` | #### 兼容 OpenAI 的 API 任何实现了 OpenAI `/v1/chat/completions` 风格 API 的 provider 都可以工作: | 后端 Base URL | 示例模型 | |---------|----------|----------------| | **OpenAI** | `https://api.openai.com/v1` | `gpt-5.4`, `gpt-4.1` | | **OpenRouter** | `https://openrouter.ai/api/v1` | 特定 provider | | **阿里云 DashScope** | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `qwen3.5-flash`, `qwen3-max`, `deepseek-r1` | | **DeepSeek** | `https://api.deepseek.com` | `deepseek-chat`, `deepseek-reasoner` | | **GitHub Models** | `https://models.inference.ai.azure.com` | `gpt-4o`, `Meta-Llama-3.1-405B-Instruct` | | **SiliconFlow** | `https://api.siliconflow.cn/v1` | `deepseek-ai/DeepSeek-V3` | | **NVIDIA NIM** | `https://integrate.api.nvidia.com/v1` | `openai/gpt-oss-120b`, `nvidia/llama-3.3-nemotron-super-49b-v1` | | **Google Gemini** | `https://generativelanguage.googleapis.com/v1beta/openai` | `gemini-2.5-flash`, `gemini-2.5-pro` | | **Groq** | `https://api.groq.com/openai/v1` | `llama-3.3-70b-versatile` | | **Ollama (本地)** | `http://localhost:11434/v1` | 任意本地模型 | ### 高级配置管理 ``` # 列出已保存的 workflow oh provider list # 切换活动的 workflow oh provider use codex # 添加你自己的兼容 endpoint oh provider add my-endpoint \ --label "My Endpoint" \ --provider openai \ --api-format openai \ --auth-source openai_api_key \ --model my-model \ --base-url https://example.com/v1 ``` 对于自定义的兼容 endpoint,OpenHarness 可以按配置文件绑定凭证,而不是强制每个兼容 Anthropic 或兼容 OpenAI 的后端共享同一个 API 密钥。 ### Ollama (本地模型) 通过 Ollama 兼容 OpenAI 的 endpoint 运行本地模型: ``` # 添加 Ollama provider profile oh provider add ollama \ --label "Ollama" \ --provider Ollama \ --api-format openai \ --auth-source openai_api_key \ --model glm-4.7-flash:q8_0 \ --base-url http://localhost:11434/v1 ``` ``` Saved provider profile: ollama ``` ``` # 激活并验证 oh provider use ollama ``` ``` Activated provider profile: ollama ``` ``` oh provider list ``` ``` claude-api: Anthropic-Compatible API [ready] ... moonshot: Moonshot (Kimi) [missing auth] auth=moonshot_api_key model=kimi-k2.5 base_url=https://api.moonshot.cn/v1 * ollama: Ollama [ready] auth=openai_api_key model=glm-4.7-flash:q8_0 base_url=http://localhost:11434/v1 ``` ### GitHub Copilot 格式 (`--api-format copilot`) 使用你现有的 GitHub Copilot 订阅作为 LLM 后端。身份验证使用 GitHub 的 OAuth 设备流 —— 无需 API 密钥。 ``` # 一次性登录(打开浏览器进行 GitHub 授权) oh auth copilot-login # 然后启动并以 Copilot 作为 provider uv run oh --api-format copilot # 或者通过环境变量 export OPENHARNESS_API_FORMAT=copilot uv run oh # 检查 auth 状态 oh auth status # 移除已存储的凭证 oh auth copilot-logout ``` | 功能 | 详情 | |---------|---------| | **认证方式** | GitHub OAuth 设备流 (无需 API 密钥) | | **Token 管理** | 自动刷新短时会话 token | | **企业版** | 通过 `--github-domain` 标志支持 GitHub Enterprise | | **模型** | 使用 Copilot 的默认模型选择 | | **API** | 底层使用兼容 OpenAI 的 chat completions | ## 🏗️ Harness 架构 OpenHarness 实现了包含 10 个子系统的核心 Agent Harness 模式: ``` openharness/ engine/ # 🧠 Agent Loop — query → stream → tool-call → loop tools/ # 🔧 43 Tools — file I/O, shell, search, web, MCP skills/ # 📚 Knowledge — on-demand skill loading (.md files) plugins/ # 🔌 Extensions — commands, hooks, agents, MCP servers permissions/ # 🛡️ Safety — multi-level modes, path rules, command deny hooks/ # ⚡ Lifecycle — PreToolUse/PostToolUse event hooks commands/ # 💬 54 Commands — /help, /commit, /plan, /resume, ... mcp/ # 🌐 MCP — Model Context Protocol client memory/ # 🧠 Memory — persistent cross-session knowledge tasks/ # 📋 Tasks — background task management coordinator/ # 🤝 Multi-Agent — subagent spawning, team coordination prompts/ # 📝 Context — system prompt assembly, CLAUDE.md, skills config/ # ⚙️ Settings — multi-layer config, migrations ui/ # 🖥️ React TUI — backend protocol + frontend ``` ### Agent Loop harness 的心脏。一个循环,具备无限的可组合性: ``` while True: response = await api.stream(messages, tools) if response.stop_reason != "tool_use": break # Model is done for tool_call in response.tool_uses: # Permission check → Hook → Execute → Hook → Result result = await harness.execute_tool(tool_call) messages.append(tool_results) # Loop continues — model sees results, decides next action ``` 模型决定做**什么**。harness 负责**如何**做 —— 安全、高效,并具备完全的可观测性。 ### Harness 流程 ``` flowchart LR U[User Prompt] --> C[CLI or React TUI] C --> R[RuntimeBundle] R --> Q[QueryEngine] Q --> A[Anthropic-compatible API Client] A -->|tool_use| T[Tool Registry] T --> P[Permissions + Hooks] P --> X[Files Shell Web MCP Tasks] X --> Q ``` ## ✨ 功能 ### 🔧 工具 (43+) | 类别 | 工具 | 描述 | |----------|-------|-------------| | **文件 I/O** | Bash, Read, Write, Edit, Glob, Grep | 带有权限检查的核心文件操作 | | **搜索** | WebFetch, WebSearch, ToolSearch, LSP | Web 和代码搜索能力 | | **Notebook** | NotebookEdit | Jupyter notebook 单元格编辑 | | **Agent** | Agent, SendMessage, TeamCreate/Delete | Subagent 生成与协同 | | **任务** | TaskCreate/Get/List/Update/Stop/Output | 后台任务管理 | | **MCP** | MCPTool, ListMcpResources, ReadMcpResource | Model Context Protocol 集成 | | **模式** | EnterPlanMode, ExitPlanMode, Worktree | 工作流模式切换 | | **定时任务** | CronCreate/List/Delete, RemoteTrigger | 计划任务与远程执行 | | **元操作** | Skill, Config, Brief, Sleep, AskUser | 知识加载、配置、交互 | 每个工具都具有: - **Pydantic 输入验证** —— 结构化、类型安全的输入 - **自我描述的 JSON Schema** —— 模型会自动理解工具 - **权限集成** —— 在每次执行前进行检查 - **Hook 支持** —— PreToolUse/PostToolUse 生命周期事件 ### 📚 技能系统 技能是**按需获取的知识** —— 仅在模型需要时加载: ``` Available Skills: - commit: Create clean, well-structured git commits - review: Review code for bugs, security issues, and quality - debug: Diagnose and fix bugs systematically - plan: Design an implementation plan before coding - test: Write and run tests for code - simplify: Refactor code to be simpler and more maintainable - pdf: PDF processing with pypdf (from anthropics/skills) - xlsx: Excel operations (from anthropics/skills) - ... 40+ more ``` 技能可以位于打包目录、用户、ohmo、项目或插件位置中。用户级技能从此处加载: ``` ~/.openharness/skills//SKILL.md ~/.claude/skills//SKILL.md ~/.agents/skills//SKILL.md ``` 默认情况下会启用项目级技能,它们会在从当前工作目录向上至 git 根目录的过程中被发现: ``` /.openharness/skills//SKILL.md /.agents/skills//SKILL.md /.claude/skills//SKILL.md ``` 对于不受信任的代码库,可以使用以下命令禁用项目技能: ``` oh config set allow_project_skills false ``` 使用 `/skills` 列出已加载技能及其来源和路径。用户可调用的技能可以直接作为斜杠命令运行,例如 `/deploy staging`。 **兼容 [anthropics/skills](https://github.com/anthropics/skills)** —— 使用上文所述的 `SKILL.md` 目录布局。 ### 🌐 Web 搜索与代理设置 内置的 `web_search` 默认使用 DuckDuckGo HTML 搜索。在该 endpoint 无法访问的地区,可以将 OpenHarness 指向受信任的公共 HTML 搜索 endpoint 或你自己的 SearXNG 实例: ``` export OPENHARNESS_WEB_SEARCH_URL="https://your-searxng.example/search" ``` 出于 SSRF 安全考虑,`web_search` 和 `web_fetch` 保持 `trust_env=False`,因此它们不会自动继承 `HTTP_PROXY` / `HTTPS_PROXY`。如果你需要使用代理,可以通过 OpenHarness 特定的变量来启用: ``` export OPENHARNESS_WEB_PROXY="http://127.0.0.1:7890" ``` 代理 URL 必须是 HTTP/HTTPS,且不能包含嵌入的凭证。 ### 🔌 插件系统 **兼容 [claude-code plugins](https://github.com/anthropics/claude-code/tree/main/plugins)**。已通过 12 个官方插件的测试: | 插件 | 类型 | 作用 | |--------|------|-------------| | `commit-commands` | 命令 | Git 提交、推送、PR 工作流 | | `security-guidance` | Hooks | 文件编辑时的安全警告 | | `hookify` | 命令 + Agents | 创建自定义行为 hooks | | `feature-dev` | 命令 | 功能开发工作流 | | `code-review` | Agents | 多 agent PR 审查 | | `pr-review-toolkit` | Agents | 专门的 PR 审查 agents | ``` # 管理插件 oh plugin list oh plugin install oh plugin enable ``` ### 🤝 生态系统工作流 OpenHarness 可作为围绕 Claude 风格工具使用规范的轻量级 harness 层发挥作用: - **面向 OpenClaw 的工作流**可以重用 Markdown 优先的知识和命令驱动的协作模式。 - **Claude 风格的插件和技能**保持可移植性,因为 OpenHarness 保留了那些熟悉的格式。 - **ClawTeam 风格的多 agent 工作**可以很好地映射到内置的团队、任务和后台执行原语上。 有关具体的用法构想而非通用声明,请参阅 [`docs/SHOWCASE.md`](docs/SHOWCASE.md)。 ### 🛡️ 权限 具备细粒度控制的多级安全: | 模式 | 行为 | 用例 | |------|----------|----------| | **默认** | 写入/执行前询问 | 日常开发 | | **自动** | 允许一切 | 沙盒环境 | | **计划模式** | 阻止所有写入 | 大型重构,先进行审查 | **路径级规则** (位于 `settings.json`): ``` { "permission": { "mode": "default", "path_rules": [{"pattern": "/etc/*", "allow": false}], "denied_commands": ["rm -rf /", "DROP TABLE *"] } } ``` ### 🖥️ 终端 UI 基于 React/Ink 的 TUI,提供完整的交互式体验: - **命令选择器**: 输入 `/` → 方向键选择 → Enter - **权限对话框**: 带有工具详情的交互式 y/n - **模式切换器**: `/permissions` → 从列表中选择 - **会话恢复**: `/resume` → 从历史记录中选择 - **动画加载指示器**: 工具执行期间的实时反馈 - **键盘快捷键**: 显示在底部,具有上下文感知能力 ### 📡 CLI ``` oh [OPTIONS] COMMAND [ARGS] Session: -c/--continue, -r/--resume, -n/--name Model: -m/--model, --effort, --max-turns Output: -p/--print, --output-format text|json|stream-json Permissions: --permission-mode, --dangerously-skip-permissions Context: -s/--system-prompt, --append-system-prompt, --settings Advanced: -d/--debug, --mcp-config, --bare Subcommands: oh setup | oh provider | oh auth | oh mcp | oh plugin ``` ### 🧑‍💼 ohmo 个人 Agent `ohmo` 是建立在 OpenHarness 之上的个人 agent 应用。它与 `oh` 一起打包,拥有自己的工作区和网关: ``` # 初始化个人 workspace ohmo init # 配置 gateway channel 并选择一个 provider profile ohmo config # 运行个人 agent ohmo # 在前台运行 gateway ohmo gateway run # 检查或重启 gateway ohmo gateway status ohmo gateway restart ``` 核心概念: - `~/.ohmo/` - 个人工作区根目录 - `soul.md` - 长期 agent 性格与行为 - `identity.md` - `ohmo` 是谁 - `user.md` - 用户档案与偏好设置 - `BOOTSTRAP.md` - 首次运行落地仪式 - `memory/` - 个人记忆 - `gateway.json` - 选定的 provider 配置与频道设置 `ohmo config` 使用与 `oh setup` 相同的工作流语言,因此你可以将个人 agent 网关指向: - `兼容 Anthropic 的 API` - `Claude 订阅` - `兼容 OpenAI 的 API` - `Codex 订阅` - `GitHub Copilot` `ohmo init` 会一次性创建主工作区。之后,使用 `ohmo config` 更新 provider 和频道设置;如果网关已经在运行,配置流程可以为你重启它。 目前 `ohmo init` / `ohmo config` 可以为以下平台引导频道设置: - Telegram - Slack - Discord - 飞书 ## 📊 测试结果 | 测试套件 | 测试 | 状态 | |-------|-------|--------| | 单元 + 集成 | 114 | ✅ 全部通过 | | CLI Flags E2E | 6 | ✅ 真实模型调用 | | Harness 功能 E2E | 9 | ✅ 重试、技能、并行、权限 | | React TUI E2E | 3 | ✅ 欢迎、对话、状态 | | TUI 交互 E2E | 4 | ✅ 命令、权限、快捷键 | | 真实技能 + 插件 | 12 | ✅ anthropics/skills + claude-code/plugins | ``` # 运行所有测试 uv run pytest -q # 114 unit/integration python scripts/test_harness_features.py # Harness E2E python scripts/test_real_skills_plugins.py # Real plugins E2E ``` ## 🔧 扩展 OpenHarness ### 添加自定义工具 ``` from pydantic import BaseModel, Field from openharness.tools.base import BaseTool, ToolExecutionContext, ToolResult class MyToolInput(BaseModel): query: str = Field(description="Search query") class MyTool(BaseTool): name = "my_tool" description = "Does something useful" input_model = MyToolInput async def execute(self, arguments: MyToolInput, context: ToolExecutionContext) -> ToolResult: return ToolResult(output=f"Result for: {arguments.query}") ``` ### 添加自定义技能 创建 `~/.openharness/skills/my-skill.md`: ``` --- name: my-skill description: Expert guidance for my specific domain --- # My Skill ## 何时使用 Use when the user asks about [your domain]. ## Workflow 1. Step one 2. Step two ... ``` ### 添加插件 创建 `.openharness/plugins/my-plugin/.claude-plugin/plugin.json`: ``` { "name": "my-plugin", "version": "1.0.0", "description": "My custom plugin" } ``` 在 `commands/*.md` 中添加命令,在 `hooks/hooks.json` 中添加 hooks,在 `agents/*.md` 中添加 agents。 ## 🌍 用例展示 当把 OpenHarness 视为一个可以适应实际工作流的小巧且可检查的 harness 时,它最能发挥用处: - **代码库编程助手**,用于阅读代码、修补文件和在本地运行检查。 - **Headless 脚本工具**,用于在自动化流程中输出 `json` 和 `stream-json`。 - **插件和技能测试平台**,用于体验 Claude 风格的扩展。 - **多 agent 原型 harness**,用于任务委派和后台执行。 - **Provider 比较沙盒**,跨兼容 Anthropic 的后端进行比较。 请参阅 [`docs/SHOWCASE.md`](docs/SHOWCASE.md) 获取简短且可重现的示例。 ## 🤝 参与贡献 OpenHarness 是一个**社区驱动的研究项目**。我们欢迎在以下领域做出贡献: | 领域 | 示例 | |------|---------| | **工具** | 针对特定领域的新工具实现 | | **技能** | 领域知识 `.md` 文件 (金融、科学、DevOps...) | | **插件** | 带有命令、hooks、agents 的工作流插件 | | **Providers** | 支持更多 LLM 后端 (OpenAI、Ollama 等) | | **多 Agent** | 协同协议、团队模式 | | **测试** | E2E 场景、边缘情况、基准测试 | | **文档** | 架构指南、教程、翻译 | ``` # 开发设置 git clone https://github.com/HKUDS/OpenHarness.git cd OpenHarness uv sync --extra dev uv run pytest -q # Verify everything works ``` 对贡献者有用的切入点: - [`CONTRIBUTING.md`](CONTRIBUTING.md) 了解设置、检查和 PR 预期 - [`CHANGELOG.md`](CHANGELOG.md) 了解用户可见的更改 - [`docs/SHOWCASE.md`](docs/SHOWCASE.md) 了解值得记录的真实世界使用模式 ## 🔧 故障排除 ### macOS Terminal.app 中的退格键 OpenHarness 处理了两种常见的终端删除序列,包括 macOS Terminal.app 为退格键发送的原始 `DEL` 字节 (`0x7f`)。如果退格键插入的是空格或可见的控制字符而不是删除文本,请先升级 OpenHarness。 对于不包含此修复的旧版本,请使用发送标准退格序列的终端,或者调整你的终端键盘配置文件作为临时解决方案。 ## 许可证 MIT — 详情请见 [LICENSE](LICENSE)。

OpenHarness
Oh my Harness!
The model is the agent. The code is the harness.

Thanks for visiting ✨ OpenHarness!

Views

标签:AI智能体, AI智能体框架, Python, 个人助理, 协同工具, 无后门, 自动化编码, 逆向工具