Skip to main content
Harnest validates your source, lowers it to ADK or LangGraph, and serves it through one neutral runtime.

The path from source to server

orchestrator.py is trusted project code. Rendering a plan imports it. In CI, you can inspect or store the JSON plan before deployment.

Ownership

Treat .harnest/ as generated output. Commit your source, harnest.lock, and harnest-runtime.lock; regenerate artifacts when the source, Harnest release, or selected framework changes.

Framework boundary

The framework choice is explicit:
The manifest records the framework, mode, versions, and source digest. The runtime rejects mismatches.

Compare ADK and LangGraph

See what moves between frameworks unchanged and what remains framework-native.

Filesystem composition

Harnest uses location to discover capabilities. Public filenames define Python resource identity; Agent Plugins use the name in plugin.json. Optional directories may be absent. Invalid or duplicate authored resources fail compilation. Portable Agent Plugins use component-level diagnostics so a bad skill or MCP entry does not disable valid siblings.

Runtime boundary

The neutral runtime keeps common product behavior consistent across ADK and LangGraph. Use neutral routes for portable behavior. Native routes remain framework-owned.

Deployment plan

Deployment execution requires the process opt-in HARNEST_ENABLE_DEPLOYMENT=true; it is disabled by default. See Enable deployment. Rendering a plan remains available without the flag. An orchestrator selects agent folders and deployment settings. The Go engine receives the JSON plan, compiles each agent, and starts its artifact. The digest covers agent-owned inputs. A pre-rendered plan lets CI inspect the deployment without executing authored Python later.

Safety defaults

Build an agent

Follow each source concept from authoring to discovery.

Serve an agent

See the neutral API and production boundary.