DeepHarness¶
A harness for LLM agents: workspace tools, permissions, and typed, concurrent workflows.
Build agents that read and change a codebase under an explicit permission policy, and compose them as a graph of plain Python functions: parallel branches, typed state, and 15 LLM providers behind one interface.
Why DeepHarness¶
- One dependency. That's it.
httpx. Providers talk to vendor REST APIs directly — no OpenAI SDK, nogoogle-genai, no transitive dependency sprawl. - Your state is a dataclass. Not an untyped dict. Your editor autocompletes it, your type checker checks it.
- Nodes are just functions. Sync or async, decorated in place. No base class to inherit, no runner object to construct.
- Parallel by default. Independent branches run concurrently via
asyncio; sync functions are offloaded to threads so a blocking call never stalls the event loop. - Agents are optional. The graph engine has no idea what an LLM is. Use it for plain
function orchestration, or drop an
Agentinside a node. - A harness, not just a loop. Workspace-confined file and shell tools, MCP servers, a per-call permission policy, a bounded context window, progress events and progress events and provider wrappers — the parts a run needs once it is long enough to matter.
Install¶
Requires Python 3.11+.
Where to go next¶
-
Getting started
Install the package and run your first graph in a few lines.
-
Graphs
State, nodes, edges, conditional routing, and parallel merging.
-
Agents
Think/act loops, context management, progress events, budgets, and resumable sessions.
-
Build a coding agent
Tools, permissions, approvals, context and sessions, one decision at a time.
-
Tools & permissions
Workspace-confined file and shell tools, MCP servers, and per-call rules.
-
API reference
The full public surface: signatures, parameters, return types.