config.yaml:
Managed mode
Managed mode is the portable default. Harnest discovers your resources and builds the selected framework target.A nested LangGraph
Agent cannot consume a discovered child subagents/ folder. Express that topology in the portable root graph.Advanced mode
In advanced mode, you construct a native target and export it throughAgent.advanced(...).
Agent Runtime Principals are best-effort in advanced mode. Harnest enforces them at Harnest-owned tool, MCP, invocation, and Task boundaries, but it does not rewrite your native graph or wrap tools you wire directly. Apply equivalent policy in user-owned graph paths and downstream gateways when you need complete coverage. See Agent Runtime Principals.
Before moving a project from managed to advanced mode, run the read-only audit:
agent.py; do not run init over the project.
Switch frameworks
Changingspec.framework.name is simple. Validating the behavior is the migration.
1
Establish the current baseline
Preserve the source and run the existing unit tests.
2
Find native dependencies
Inspect
agent.py, native extensions, custom graph nodes, nested SubAgents, sandboxes, eval assets, and active checkpoints.3
Change the framework
Update only
spec.framework.name. Do not add Harnest-owned framework packages to pyproject.toml.4
Test the target
Run
harnest test AGENT_DIR, any authorized smoke tests, and harnest serve AGENT_DIR.Choose a framework
All choices use the same Harnest agent card, sessions, API, events, WebSocket protocol, and playground.
Durable managed tools use each framework’s native suspension boundary. Review the different replay semantics in Durable execution.
Version compatibility
Harnest installs a tested framework version and records it in the manifest. Upgrade Harnest to adopt a newer version; do not override it inpyproject.toml.