README.md
September 16, 2026 · View on GitHub
PenguinHarness
Open-source, local-first multi-agent app development platform
Fully automate building · optimizing · deploying AI applications
1000+ Models · Multi-Platform · Apache 2.0 · Agent Self-Evolution
English | 简体中文
Why PenguinHarness
With LangChain, you build agents by hand — at 1× speed.
With PenguinHarness, agents build agents — at 100×.
PenguinHarness runs on your computer or server and automates the agent app lifecycle from creation and evaluation to optimization and deployment. Three reasons define the platform:
1. 🏆 Outstanding results at tens of times less cost
A deliberately minimal toolset over clean low-level interfaces: fewer tool calls, fewer tokens — deeply tuned for open models like DeepSeek. Each harness on the model it is normally paired with, same tasks, head-to-head:
Best accuracy on data analysis — at 1/70 of Claude Code's cost.
2. ⚡ One sentence generates a runnable agent app
Describe what you need in one sentence. PenguinHarness builds the complete agent application — scaffold, code, and run instructions, end to end:
Collect the docs from https://github.com/ericbuess/claude-code-docs and build a RAG app that answers Claude Code questions as a configuration expert, citing its sources.
And this is the finished product — a docs expert with retrieval, cited sources that link to the original files, and example questions built in:
https://github.com/user-attachments/assets/9b7033e8-f08a-4c3f-bd33-547896664e6e
And generating this entire RAG app burned just $0.02 (¥0.2) of tokens — on DeepSeek V4 Pro.
3. 🧬 Native agent self-evolution engine
With PenguinHarness Skills, an agent evaluates and optimizes itself: run the benchmark, find the lost points, ship version N+1 — with a snapshot before every round and every request observable in the Trace view.
https://github.com/user-attachments/assets/922d13a6-5ffc-4685-9a39-352f02f9afc0
Built-in plugins
Four plugin categories ship in the box (docs) — skills, plus the session hooks that drive goal mode and continual learning; agents can also write and optimize their own skills:
| Category | Plugins |
|---|---|
| Office Productivity | data-analysis, use-firecrawl, use-bento-slides, humanizer, goal, continual-learning |
| Software Development | software-development, use-claude-code |
| AI App Development | agent-development, model-development, skill-porting, agent-tuning |
| Agent Company | agent-company |
Supported Models
| Model | Providers |
|---|---|
| DeepSeek V4 | DeepSeek, OpenRouter, Fireworks AI, SiliconFlow, TokenDance, Qwen Token Plan, Qwen Pay-As-You-Go |
| Kimi K3 | Moonshot AI, OpenRouter, Fireworks AI, TokenDance, Qwen Pay-As-You-Go |
| GLM 5.3 | Z.AI, OpenRouter, TokenDance |
| Hunyuan 3 | OpenRouter |
| Qwen 3.8 Max | Qwen Token Plan, Qwen Pay-As-You-Go, OpenRouter, TokenDance |
| GPT 5.6 | OpenAI, OpenRouter |
| Gemini 3.7 Flash | Google Gemini, OpenRouter |
| Claude 5 | Anthropic, OpenRouter |
| Inkling | OpenRouter, Fireworks AI |
Each family's latest generation only — the app's Models page lists every built-in preset, and any OpenAI-protocol endpoint works too: pick a preset, or point a custom endpoint at any of the 1000+ online and local models.
Requirements
| Requirement | Supported |
|---|---|
| OS | Linux, macOS, Windows 10+ |
| Architecture | x64, arm64 |
| Runtime | bundled by the one-line installer (npm installs need Node >= 24) |
| Model | an API key for at least one model |
Installation
Start with the desktop app, or install the command line on a workstation or server. Both use the same ~/.penguin/data root and can be mixed freely; a server is also one docker run away:
- 🖥️ Desktop app — a double-click install: it embeds the server and opens already signed in, no terminal involved.
- ⌨️ CLI — a one-line installer (or npm / offline package) puts the
penguincommand on the machine;penguin webthen serves the full Web experience in your browser athttp://127.0.0.1:7364(multi-session chat, agent / skill / model management, usage stats, Trace observability, evaluation center). The online installers bundle their own Node runtime — unpack and run; upgrades and reinstalls never touch your data.
Note
On a CLI install, the server prints a first-login link as a framed notice on every start until a password is set — open it to claim the built-in admin account and choose one. Models are configured on the in-app Models page.
🖥️ Desktop app
The full Web experience as a standalone application: it embeds the server and opens already signed in — no terminal, no login page, no initial password to copy. It works on the same ~/.penguin/data root as a CLI install, so the two can be used interchangeably (a data root only ever runs one server; if a CLI-started instance is already up, the app attaches to it).
Download the desktop app from the download page. The page serves the OSS-accelerated mirror when it is reachable, and every installer is also attached to each GitHub Release.
| Platform | Installers |
|---|---|
| macOS 11+ | dmg (Apple Silicon / Intel) |
| Windows 10+ | installer (.exe, x64) |
| Linux (x64) | AppImage / deb |
The macOS builds are Developer ID signed and notarized, and the Windows installers are Authenticode signed, so neither platform needs a first-launch unblock. Linux is the one exception:
🐧 Linux: double-clicking the AppImage does nothing
Browsers download AppImages without the execute permission. Grant it once and the app starts normally from then on (the deb package installs through the package manager and is not affected):
chmod +x penguin-desktop-linux-x86_64.AppImage
🐧🍎 Linux / macOS (online install)
curl -fsSL https://penguin.ooo/install.sh | sh
penguin web # start the service and open http://127.0.0.1:7364
🪟 Windows (online install, PowerShell)
irm https://penguin.ooo/install.ps1 | iex
penguin web # start the service and open http://127.0.0.1:7364
📦 npm (any platform, Node >= 24)
npm install -g @prismshadow/penguin-cli
penguin web # start the service and open http://127.0.0.1:7364
🐳 Docker
docker run -d --name penguin -p 127.0.0.1:7364:7364 -v penguin-data:/data hiyouga/penguinharness:latest
docker logs penguin # the first-login link, openable as it stands on this machine
The official image runs the same server on 0.0.0.0:7364 with its data root on the /data volume, as an unprivileged user, for linux/amd64 and linux/arm64. It is built from this repository's source: latest is rebuilt on every push to main, and each release is published under its exact version (hiyouga/penguinharness:0.2.13) — there is no moving stable tag. The example publishes the port on the host's loopback, so the Web App answers only on the machine running Docker (http://localhost:7364); to reach it from a network, publish on all interfaces instead (-p 7364:7364), preferably behind a reverse proxy that terminates TLS. Compose file and the full deployment notes — reverse proxies, upgrades, the rescue path — are in the Docker quickstart.
📴 Offline install (air-gapped machines)
Every GitHub Release attaches exactly one package per target — Linux and macOS in x64 / arm64, Windows in x64, plus a runtime-less universal package — and the same file serves online and offline installation. Each package seals the program payload, its SHA256 checksum and the platform's installer: download the one file on a networked machine, copy it to the target, extract once and run the bundled installer — no network, no separate checksum file to carry (the sealed SHA256 is always verified).
Linux (on arm64, use penguin-linux-arm64.tar.gz):
mkdir penguin-install
tar -xzf penguin-linux-x64.tar.gz -C penguin-install
./penguin-install/install.sh
macOS (Apple silicon shown; on Intel, use penguin-darwin-x64.tar.gz):
mkdir penguin-install
tar -xzf penguin-darwin-arm64.tar.gz -C penguin-install
./penguin-install/install.sh
Windows (unzip, then double-click install.cmd — or run it in PowerShell):
Expand-Archive penguin-win32-x64.zip -DestinationPath penguin-install
cd penguin-install
.\install.cmd
🤖 CLI & SDK — for agents
The same engine, scriptable — made to be driven by agents (and agents building agents):
penguin config model add --provider deepseek --model-id deepseek-flash --api-key sk-... --set-default
penguin run -m "Create hello.txt containing Hello, Penguin" # one-shot task
penguin chat # interactive REPL (/compact, /clear, /exit, Ctrl-C to interrupt)
penguin server # headless service (same API the Web App uses)
import { createAgent, isCompleteModelMessage, userText } from "@prismshadow/penguin-core";
const agent = await createAgent({ agentId: "default_agent" });
const session = await agent.createSession({ workspaceDir: process.cwd() });
for await (const output of session.run([userText("Create hello.txt containing hi")], {
approve: async () => "allow", // per-tool-call approval
})) {
if (isCompleteModelMessage(output) && output.payload.type === "text") {
console.log(output.payload.text);
}
}
Roadmap
- Public release of the benchmark suite
- Desktop app
- Windows support
- Agent company and templates
- Company-level self evolving
- OpenShell integration (permission-governed shell)
- More to come…
Development
pnpm install && pnpm build # build first: core's exports point at dist/
pnpm dev # backend + web app together (prefixed logs, deps built once)
See CONTRIBUTING.md for the full workspace guide: dev commands, quality gates, repo layout, and the changelog rule.
Contributors
Thanks to everyone who has contributed to PenguinHarness!
Citation
If you use PenguinHarness in your research, please cite:
@software{penguinharness2026,
author = {{PrismShadow Team}},
title = {PenguinHarness: Efficient Self-Improving Harness for Everyone},
year = {2026},
url = {https://github.com/Prism-Shadow/penguin-harness},
license = {Apache-2.0}
}
License
Apache-2.0 © 2026 Prism Shadow
Built with ❤️ by Yaowei Zheng (author of LlamaFactory), the PrismShadow AI Team, and Fable 5.