Skip to main content
Every project selects a framework and authoring mode in 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 through Agent.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:
Preserve agent.py; do not run init over the project.

Switch frameworks

Changing spec.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.
Committed session state can survive a switch. Active framework checkpoints cannot be translated. Finish or deliberately abandon in-progress runs first.

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 in pyproject.toml.