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 thename 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-inHARNEST_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.