Glad it helped! It was a fun one to untangle — the marketing really does obscure that there are two quite different products sharing one substrate.
Let me save the conclusion so we don't have to re-derive it if provider expansion comes up again.
--- name: project-flyio-evaluation description: fly.io was evaluated (July 2026) as a machine provider and rejected as a poor fit metadata: type: project --- Evaluated adding fly.io as a provider to `machine` in July 2026; concluded it's a poor fit. Fly Machines are Firecracker microVMs booted from Docker/OCI images — no cloud-init/user-data, no SSH-key API, per-app anycast IPs (not per-VM), and no DNS hosting API — so ~half the `CloudProvider` interface (DNS methods, SSH keys, user_data) can't be implemented natively. Their Sprites product is even less of a fit (stateful AI-agent sandboxes, no public IP/DNS story). If similar provider expansion comes up, Hetzner Cloud or Linode map onto the existing abstraction almost 1:1.
File created successfully at: /home/david/.claude/projects/-home-david-projects-stirlingbridge-machine/memory/project_flyio_evaluation.md
- [Disambiguate GCP project identifiers upfront](feedback_gcp_project_identifiers.md) — Always distinguish project ID vs. number vs. display name; user has been confused by this twice.
- [Disambiguate GCP project identifiers upfront](feedback_gcp_project_identifiers.md) — Always distinguish project ID vs. number vs. display name; user has been confused by this twice. - [fly.io provider evaluation](project_flyio_evaluation.md) — Rejected July 2026: no cloud-init, SSH-key API, or DNS; Hetzner/Linode would fit the abstraction better.
The file /home/david/.claude/projects/-home-david-projects-stirlingbridge-machine/memory/MEMORY.md has been updated successfully. (file state is current in your context — no need to Read it back)
Done — I've noted the fly.io evaluation outcome in memory (rejected as a provider, with the reasons, plus the Hetzner/Linode suggestion), so if provider expansion comes up in a future session we'll start from that conclusion instead of re-researching it.