Skip to content

One-click hosting for personal AI agents

Agent Haven

Pick an agent, paste a Telegram bot token, and get a running machine you never have to SSH into.

Agent Haven hosts vetted AI agents (Hermes and OpenClaw) with one launch flow. It provisions the machine, installs the agent, connects Telegram, and hands you a console for status, channels, skills, sessions, logs and a terminal.

May to Sep 2026MVP, proven live on Fly
localhost:5173/launch

Provisioning

Launch Agent

  1. 1Agent
  2. 2Region
  3. 3Plan
  4. 4Access
  5. 5Secrets
  6. 6Review

Agent

Hermes

Self-improving agent with persistent memory.

OpenClaw

Local-first gateway with channels and ClawHub skills.

01 / 05 · blueprint

Motivation

Running a self-hosted agent means renting a box, running an installer, wiring secrets and a Telegram bot, then babysitting updates. I wanted that whole chore behind one button, with a calm UI on top and no SSH.

The MVP had to prove the full path twice. First locally with fake and Parallels providers, so CI never needs cloud credentials. Then on real infrastructure, with a transcript for every claim about live behavior.

Capabilities

  • Six-step launch wizard covering agent, provider and region, plan, SSH key, secrets and review. The Telegram token is masked to its last four characters.
  • A deployment engine that walks validating through configuringChannels to running, and refuses to report running if the gateway health check never passes.
  • Convex work queue with leased, fenced claims, consumed by a runner that holds the provider credentials. Per-runner tokens are minted from the dashboard and stored as hashes.
  • Instance view with live stats, desired vs observed lifecycle drift, power controls, and tabs for channels, triggers, skills, sessions, logs, exec approvals and a terminal.
  • Telegram webhook wake. Fly machines scale to zero and the next message starts them again.
  • App chat that talks to the agent through the console terminal bridge.
  • Admin, member and viewer roles enforced in both the UI and Convex.
  • Redacted receipts committed for every live run, plus doctor and smoke CLIs.

Key decisions

A provider port with a mandatory fake

Why

Cloud providers stay swappable without touching app code, and the deterministic fake lets the whole MVP run in CI with no Hetzner or Fly credentials.

What it cost

More packages up front, and the fake can drift from real providers, so live claims still need live receipts.

Convex for state, a separate runner for the slow work

Why

Convex is the reactive read model and work queue. Long VM work happens in a Node runner that holds the provider secrets, and fencing tokens stop a stale runner from finishing work it no longer owns.

What it cost

Two deployables plus runner registration. Whenever the queue is unreachable the console shows status unavailable.

Container-native launch on Fly

Why

Each blueprint names an image and an init script that becomes PID 1, with config written from app secrets. There is no SSH bootstrap step, boot is fast, and it works with scale to zero.

What it cost

Image quirks surfaced one at a time in live runs, like ENTRYPOINT handling and s6-overlay for Hermes.

UI honesty as a tested rule

Why

No green light without data behind it. Channel counts say they are saved configs, demo catalogs carry a DEMO badge, and missing queue data reads as unavailable. Tests enforce it.

What it cost

The local demo looks less finished than a mocked-up dashboard would.

Evidence gates on live claims

Why

Any claim about live behavior has to point at a redacted transcript, and an adversarial review gate checks commits against that rule.

What it cost

Real process overhead on every commit.

Architecture

The browser only talks to Clerk and Convex. Provider credentials live with the runner, which claims work from the queue, drives the engine and streams events back.

Limits and what's next

  • Proven live on Fly with OpenClaw. The Hetzner provider is implemented and tested locally, and a live Hetzner run is next.
  • Hermes deploys and runs, but its wake-on-message path isn't exercised yet because it polls Telegram instead of using a webhook.
  • Next: pin Hermes by image digest like OpenClaw, so every deploy is reproducible.
  • Skills and vetted updates are browsable. Pinning, uploading and publishing skills are on the roadmap.
  • Browser end-to-end tests run locally, and moving them into CI is next. CI already runs lint, typecheck, unit tests, queue smokes and the build.

Notable

A Telegram message wakes a machine at zero

In the live Fly run on 2026-09-28 I stopped the OpenClaw machine, then sent a cold Telegram probe. Fly started the machine 1242 ms later, strictly after the send, so the wake was causal. The agent replied with the run nonce 24.6 s after the probe, and teardown proved the app gone and the webhook released. The failed runs before it are committed too, with the root cause and a local repro of the fix.

Stack and numbers

TypeScriptEffectConvexReact 19ViteClerkFly MachinesTelegram Bot APIVitest + Playwright
Wake after message
1,242
ms
Commits
622
Lines of TypeScript
108
k
Test files
91