"OpenHarness: Open Agent Harness with a Built-in Personal Agent--Ohmo!"
"OpenHarness: Open Agent Harness with a Built-in Personal Agent--Ohmo!"
oh — OpenHarness & ohmo
--- ## ✨ OpenHarness's Key Harness Features
• Streaming Tool-Call Cycle
• API Retry with Exponential Backoff
• Parallel Tool Execution
• Token Counting & Cost Tracking
• 43 Tools (File, Shell, Search, Web, MCP)
• On-Demand Skill Loading (.md)
• Plugin Ecosystem (Skills + Hooks + Agents)
• Compatible with anthropics/skills & plugins
• CLAUDE.md Discovery & Injection
• Context Compression (Auto-Compact)
• MEMORY.md Persistent Memory
• Session Resume & History
• Multi-Level Permission Modes
• Path-Level & Command Rules
• PreToolUse / PostToolUse Hooks
• Interactive Approval Dialogs
• Subagent Spawning & Delegation
• Team Registry & Task Management
• Background Task Lifecycle
• ClawTeam Integration (Roadmap)
--- ## 🤔 What is an Agent Harness? An **Agent Harness** is the complete infrastructure that wraps around an LLM to make it a functional agent. The model provides intelligence; the harness provides **hands, eyes, memory, and safety boundaries**.OpenHarness is an open-source Python implementation designed for **researchers, builders, and the community**: - **Understand** how production AI agents work under the hood - **Experiment** with cutting-edge tools, skills, and agent coordination patterns - **Extend** the harness with custom plugins, providers, and domain knowledge - **Build** specialized agents on top of proven architecture --- ## 📰 What's New - **Unreleased** 🔍 **Dry-run safe preview**: - `oh --dry-run` previews resolved runtime settings, auth state, skills, commands, tools, and configured MCP servers without executing the model, tools, or subagents. - Dry-run now reports a `ready` / `warning` / `blocked` readiness verdict with concrete next-step suggestions such as fixing auth, fixing MCP config, or running the prompt directly. - Prompt previews include likely matching skills and tools, while slash-command previews show whether the command is mostly read-only or stateful. - **2026-04-18** ⚙️ **v0.1.7** — Packaging & TUI polish: - Install script now links `oh`, `ohmo`, and `openharness` into `~/.local/bin` instead of prepending the virtualenv `bin` directory to `PATH`, which avoids clobbering Conda-managed shells. - React TUI now supports `Shift+Enter` to insert a newline while keeping plain `Enter` as submit. - Busy-state animation in the React TUI is quieter and less error-prone on Windows terminals, with conservative spinner frames and reduced flashing. - **2026-04-10** 🧠 **v0.1.6** — Auto-Compaction & Markdown TUI: - Auto-Compaction preserves task state and channel logs across context compression — agents can run multi-day sessions without manual compact/clear - Subprocess teammates run in headless worker mode; agent team creation stabilized - Assistant messages now render full Markdown in the React TUI - `ohmo` gains channel slash commands and multimodal attachment support - **2026-04-08** 🔌 **v0.1.5** — MCP HTTP transport & Swarm polling: - MCP protocol adds HTTP transport, auto-reconnect on disconnect, and tool-only server compatibility - JSON Schema types inferred for MCP tool inputs — no manual type mapping needed - `ohmo` channels support file attachments and multimodal gateway messages - Subprocess agents are now pollable in real runs; permission modals serialized to prevent input swallowing - **2026-04-08** 🌙 **v0.1.4** — Multi-provider auth & Moonshot/Kimi: - Native Moonshot/Kimi provider with `reasoning_content` support for thinking models - Auth overhaul: fixed provider-switching key mismatch, `OPENAI_BASE_URL` env override, profile-scoped credential priority - MCP gracefully handles disconnected servers in `call_tool` / `read_resource` - Security: built-in sensitive-path protection in PermissionChecker, hardened `web_fetch` URL validation - Stability: EIO crash recovery in Ink TUI, `--debug` logging, Windows cmd flash fix - **2026-04-06** 🚀 **v0.1.2** — Unified setup flows and `ohmo` personal-agent app: - `oh setup` now guides provider selection as workflows instead of exposing raw auth/provider internals - Compatible API setup is now profile-scoped, so Anthropic/OpenAI-compatible endpoints can keep separate keys - `ohmo` ships as a packaged app with `~/.ohmo` workspace, gateway, bootstrap prompts, and channel config flow - **2026-04-01** 🎨 **v0.1.0** — Initial **OpenHarness** open-source release featuring complete Harness architecture:
Start here: Quick Start · Provider Compatibility · Showcase · Contributing · Changelog
--- ## 🚀 Quick Start ### 1. Install #### Linux / macOS / WSL ```bash # One-click install curl -fsSL https://raw.githubusercontent.com/HKUDS/OpenHarness/main/scripts/install.sh | bash # Or via pip pip install openharness-ai ``` #### Windows (Native) ```powershell # One-click install (PowerShell) iex (Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/HKUDS/OpenHarness/main/scripts/install.ps1') # Or via pip pip install openharness-ai ``` **Note**: Windows support is now native. In PowerShell, use `openh` instead of `oh` because `oh` can resolve to the built-in `Out-Host` alias. ### 2. Configure ```bash oh setup # interactive wizard — pick a provider, authenticate, done # On Windows PowerShell, use: openh setup ``` Supports **Claude / OpenAI / Copilot / Codex / Moonshot(Kimi) / GLM / MiniMax / NVIDIA NIM** and any compatible endpoint. ### 3. Run ```bash oh # On Windows PowerShell, use: openh ```### 4. Set up ohmo (Personal Agent) Want an AI agent that works for you from Feishu / Slack / Telegram / Discord? ```bash 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 runs on your existing **Claude Code subscription** or **Codex subscription** — no extra API key needed. ### Non-Interactive Mode (Pipes & Scripts) ```bash # Single prompt → stdout oh -p "Explain this codebase" # JSON output for programmatic use oh -p "List all functions in main.py" --output-format json # Stream JSON events in real-time oh -p "Fix the bug" --output-format stream-json ``` ### Dry Run (Safe Preview) Use `--dry-run` when you want to inspect what OpenHarness would use before any live execution starts. ```bash # Preview an interactive session setup oh --dry-run # Preview one prompt without executing the model or tools oh --dry-run -p "Review this bug fix and grep for failing tests" # Preview a slash command path oh --dry-run -p "/plugin list" # Get structured output for scripts or channels oh --dry-run -p "Explain this repository" --output-format json ``` Dry-run is intentionally static: - It does **not** call the model - It does **not** execute tools or spawn subagents - It does **not** connect to MCP servers - It **does** resolve settings, auth status, prompt assembly, skills, commands, tools, and obvious MCP config problems Readiness levels: - `ready`: configuration looks usable; the next suggested action is usually to run the prompt directly - `warning`: OpenHarness can resolve the session, but something important still looks wrong, such as broken MCP config or missing auth for later model work - `blocked`: the requested path will not run successfully as-is, for example an unknown slash command or a prompt that cannot resolve a runtime client `next actions` in the dry-run output tell you the shortest fix or follow-up step, such as: - run `oh auth login` - fix or disable broken MCP configuration - run the prompt directly with `oh -p "..."` or open the interactive UI with `oh` ## 🔌 Provider Compatibility OpenHarness treats providers as **workflows** backed by named profiles. In day-to-day use, prefer: ```bash oh setup oh provider list oh provider use ``` ### Built-in Workflows | Workflow | What it is | Typical backends | |----------|------------|------------------| | **Anthropic-Compatible API** | Anthropic-style request format | Claude official, Kimi, GLM, MiniMax, internal Anthropic-compatible gateways | | **Claude Subscription** | Claude CLI subscription bridge | Local `~/.claude/.credentials.json` | | **OpenAI-Compatible API** | OpenAI-style request format | OpenAI official, OpenRouter, DashScope, DeepSeek, SiliconFlow, Groq, Ollama, GitHub Models | | **Codex Subscription** | Codex CLI subscription bridge | Local `~/.codex/auth.json` | | **GitHub Copilot** | Copilot OAuth workflow | GitHub Copilot device-flow login | ### Compatible API Families #### Anthropic-Compatible API Typical examples: | Backend | Base URL | Example models | |---------|----------|----------------| | **Claude official** | `https://api.anthropic.com` | `claude-sonnet-4-6`, `claude-opus-4-6` | | **Moonshot / Kimi** | `https://api.moonshot.cn/anthropic` | `kimi-k2.5` | | **Zhipu / GLM** | custom Anthropic-compatible endpoint |