The agent has a body
When the agent needs to do real work, it does not run a server-side stub. It runs on a dedicated Fly Machine provisioned as that agent’s body: a multi-core performance box with Python 3.12, Node 22, git, and bash. The agent execs real commands on it through Fly’s Machines API, the machine is metered, and it suspends to $0 compute when idle. This is the “run real operations at any scale” substrate, reused from the clawd.run launchpad and refocused on autonomous agent bodies. The implementation issrc/lib/hermesco/fly.ts.
Default spec
Lifecycle
hermesco-agents) that is separate from the web app. They do not need a public IP because all execution happens through the Machines API.
Reuse by workspace
An agent body is tied to a workspace.ensureAgentBody(workspaceId, goal) finds the existing, non-destroyed machine for that workspace or provisions a new one. This means a workspace keeps the same machine (and its files) across directives, rather than spinning up a fresh box every time.
Compute cost is telemetry, not a silent debit
The fleet surfaces an estimated Fly compute cost per machine. It accrues only while a machine’s state isstarted:
Honest fallback
IfFLY_API_TOKEN is not set, flyConfigured() returns false. The fleet endpoint reports configured: false and run_in_sandbox falls back to a Daytona sandbox. Nothing is faked; the system simply uses the substrate that is available.