
# HarnessSmith
**Forge your own agent harness.**
A config-to-code generator that produces a standalone, framework-free agent harness you fully own — no LangChain, no LangGraph, no ADK, and no dependency on HarnessSmith after generation.
[](https://pypi.org/project/harnessmith/)
[](https://pypi.org/project/harnessmith/)

[](./LICENSE)
[](https://github.com/EpisodeYu/HarnessSmith/stargazers)
**English** | [中文](#harnessmith-1)
---
## Quick start
Pick how to launch the setup wizard — either way you build a standalone, framework-free harness **from scratch** (you choose the capabilities: paradigms, web UI, MCP, skills, memory, multi-agent subagents) that is smoke-verified before handover.
**Clone the repo and run the one-click launcher** — cross-platform (Windows, macOS, Linux), nothing to memorize; double-clicking the file works too. It installs [uv](https://docs.astral.sh/uv/) on first use, then asks whether you want the web wizard (recommended) or the terminal wizard:
```bash
git clone https://github.com/EpisodeYu/HarnessSmith.git && cd HarnessSmith
./HarnessSmith.sh # macOS / Linux — or double-click it
HarnessSmith.bat # Windows — or double-click it
```
**Or run it on demand with [uv](https://docs.astral.sh/uv/)** — no clone, nothing installed permanently:
```bash
uvx --from "harnessmith[wizard]" harnessmith wizard --open # web wizard (recommended)
uvx harnessmith new # or the interactive CLI wizard
```
Then start it. The generated repo ships its **own** one-click launcher too, named after your project (e.g. `My-Agent.sh` on macOS / Linux, `My-Agent.bat` on Windows): double-click or run it and it auto-syncs and opens the web chat — set your model and key right there in the `/config` panel. Or drive it with `uv`:
```bash
cd my-agent # the name you chose
uv run my-agent serve --open # recommended: configure your model and chat, all in the browser
uv run my-agent chat # optional: chat in the terminal
```
See [Getting started](#getting-started) for every option, including non-interactive generation from a hand-written spec.
## Why HarnessSmith?
Most "agent starters" hand you an app wired to a framework you cannot remove. HarnessSmith generates a repository that is **yours** — readable, editable, and free of any agent-orchestration framework.
| | HarnessSmith | LangGraph scaffolds | ADK / static templates |
|---|---|---|---|
| Agent-framework lock-in | **None** — a plain Python loop you own | LangGraph runtime | ADK / mixed frameworks |
| Edit or delete any line | **Yes** — self-contained repo | Limited — app sits on the framework | Limited |
| Config-to-code (only selected capabilities are generated) | **Yes** | No — fixed template | No |
| Core loop size | **~150–300 lines** | Abstracted by the framework | Abstracted by the framework |
| Runtime dependency on the generator | **None** | Framework runtime | Framework runtime |
| Tests + lockfile + Dockerfile, smoke-verified on generation | **Yes** | Varies | Varies |
| Dual LLM protocol, switchable at runtime (OpenAI + Anthropic) | **Yes** | Varies | Varies |
## Overview
HarnessSmith is a generator for the agent harness, in the spirit of `create-next-app`. A specification (`HarnessSpec`) is captured through a web wizard, an interactive terminal wizard, a preset, or a hand-written YAML file; HarnessSmith then renders a **complete, independent Python repository** — readable, editable, testable, and runnable on its own. The generated project is not a consumer of HarnessSmith: once generated, it has zero relationship with the generator.
### Design positioning
- **No agent-framework lock-in.** The generated code has zero dependency on any agent-orchestration framework. The loop is plain Python that you own. Ordinary general-purpose libraries (OpenAI SDK, Pydantic, Typer, FastAPI) are used as libraries, not as frameworks that own your control flow.
- **Own your code.** The output is a self-contained repository with its own tests, lockfile, Dockerfile, and documentation. Every line can be read, changed, or deleted.
- **Config-to-code.** Capabilities are selected at generation time; the generator renders only what was selected. A feature that is switched off leaves no trace — no module, no dependency, no dead code.
- **Thin by default.** The default product is a minimal, fully runnable harness whose core loop stays in the low hundreds of lines. Heavier capabilities (MCP, web interface, skills, memory, multi-agent subagents) are opt-in spec toggles.
## Highlights