Skip to main content

Better-PaaS and the 'Agent-First' PaaS Pitch: What a Single-VPS Deploy Tool Gets Right — and Where It Stops at the Second Machine

10 min readDora NodaDora Noda
Share
On this page

Your deploy tool just shipped an MCP server. Your agent can list apps, trigger deploys, and tail logs without touching a dashboard. Congratulations — but ask the uncomfortable question: does your agent actually operate infrastructure, or does it just push to one box really politely? In 2026, "agent-first" means two completely different things depending on who says it, and confusing them is how a team wires Claude Code into a deploy workflow that works beautifully until the day it needs a second machine.

The distinction matters because the single-box self-hosting wave — Coolify, Dokploy, CapRover — just grew an agentic flank. Better-PaaS markets itself explicitly as an "agent-first, self-hosted PaaS": you run the control plane on your VPS, and agents connect with scoped tokens. That pitch deserves a grounded read, because half of it is genuinely good design that every platform should steal, and the other half stops exactly where multi-machine reality begins. This post inventories what the tool actually ships, names the principle worth copying, draws the second-machine line concretely, and then compares the three things "agent-first" can mean so you can pick the right one.

What Better-PaaS actually ships: the "gets right" half

Start with the receipts, all verifiable in the project's README today. Better-PaaS is a Go control plane (AGPL-3.0) you install on a Linux VPS with a curl-piped shell script or a Docker Compose file. It gives you Nixpacks-based git-push builds with HMAC-validated webhook auto-deploys, zero-downtime releases with health checks before the traffic switch, rollbacks, automatic HTTPS via Caddy plus Let's Encrypt, managed Postgres/Redis/MySQL on a private Docker network, cron jobs, volumes, backups, and an app catalog of one-click templates. As a PaaS surface, that is the standard single-box checklist, executed completely.

The agent story is where it differentiates, and it comes in three layers. First, identity: agents get their own credentials, separate from the admin token. When you authorize via paas connect, a browser flow issues a scoped bpagt_… token saved to ~/.paas/config.json with 0600 permissions — the admin token never lands on your laptop. You pick one of three permission profiles, and the default is deliberately the middle one:

ProfileBest forCan doCannot do
ObserverRead-only assistants, monitoringList apps, read logs and metricsDeploy, stop, delete, manage addons
Deployer (default)Cursor, Claude Code, local CIObserver plus deploy, redeploy, stop/startDelete apps, addons, backups, servers
OperatorFull local automationDeployer plus addons, cron, backups, serversCreate/delete agents, audit logs

Second, protocol: paas setup writes MCP configuration for Cursor and Claude Code, exposing seven tools — paas_status, paas_list_apps, paas_list_projects, paas_get_app, paas_get_logs, paas_deploy, and paas_redeploy. For shell-based agents without MCP, paas env prints PAAS_API_URL and PAAS_TOKEN for curl-driven automation. Third, accountability: every agent action lands in an audit log with scope and timestamp, so "the agent did it" is the start of an investigation, not the end of one.

Note the honest scoping, too: destructive actions like deleting an app or managing databases stay on the dashboard or REST API until those MCP tools ship. A tool that tells its agents "not yet" for the dangerous operations is showing more operational maturity than one that exposes everything on day one.

And now the principle worth stealing, stated verbatim in the project's agent-first roadmap: "Anything possible from the UI must be possible via the agent. Anything possible via the agent should be observable in the UI." Pair that with least-privilege-by-default tokens and you have the correct agent-UX doctrine regardless of scale: machine-callable parity with the dashboard, human-observable parity with the machine. If your platform's agent story is currently "paste the admin key into the MCP config," Better-PaaS is ahead of you, and the gap is a design choice, not a funding round.

The second-machine seam: where a single-VPS agent surface stops

Here is the core deliverable of this post, stated as plainly as possible: an agent that can deploy to one box cannot provision a fleet, and no amount of token scoping closes that gap. The moment a team outgrows its first VPS — traffic needs a second app server, the database needs its own machine, a GPU node joins for inference — the questions change from "which app, which branch?" to questions a single-box control plane has no surface for:

  • Provisioning. Who creates the second machine, installs the runtime, joins it to the private network, and registers it as deployable capacity? A VPS-first tool's install story is "run this script on the box." There is no declarative machine lifecycle — no "here are the machines I want, make it so" for the agent to call.
  • Placement. Which machine should this deploy land on, given CPU, memory, disk, and accelerator availability across the fleet? Single-box scheduling is trivially "here." Fleet scheduling is a bin-packing problem with topology, and it needs a scheduler, not a default.
  • Migration. How does a running app — and its Postgres, its volumes, its cron schedules — move from server A to server B with zero downtime? Docker-network databases and local volumes are anchored to the box they were born on. Moving them is a migration project, not an API call.
  • Failure domains. One VPS is one blast radius: one kernel, one disk, one provider availability event. An agent operating "infrastructure" that is a single machine is one rm -rf or one host failure away from learning what a control plane is for.

This is not a dunk; it is the project's own roadmap saying so. Better-PaaS's agent-first plan puts multi-server orchestration in Phase 6 — section 6.3, "Multi-Server Agent Orchestration," with a Placement Advisor, cross-server blue/green migration, and a fleet-wide health overview listed explicitly as goals. Phases 1 through 5 (agent identity, API surface, MCP tools, UI, safety) are the shipped or shipping foundation; the fleet is future work. When a project's own plan names your exact concern as a later phase, believe it: today, the agent reasons about one box.

The honest cost framing is that single-box tools and multi-node platforms fail in opposite directions. The single-VPS tool fails at growth: everything is easy until the second machine, and then the migration is architectural, not incremental. The Kubernetes-backed platform fails at the start: real scheduling, declarative machine lifecycle, and multi-node networking on day one, in exchange for operational weight a solo builder will feel immediately. Neither failure mode is hidden — but only one of them shows up in the demo.

The other meanings of "agent-first": a three-way comparison

Better-PaaS's pitch — agent-friendly deploy primitives — is only one of three things "agent-first" means in 2026. The second is agent-operated infrastructure. Ownkube, for example, runs named agents (Cost, Incident, Scaling, Security) that operate your platform for you on k3s or EKS inside your own AWS account. Its okctl CLI ships a published skill that teaches Cursor, Claude Code, and Codex exactly which command to run for deploy diagnostics, logs, and lookups. Here the agent is not a better deploy button; it is the on-call.

The third meaning is agents as first-class API consumers of a real multi-node control plane: the platform exposes its entire declarative surface — apps, machines, networking, rollouts — through a machine-shaped API (REST plus MCP tools), and the agent provisions across bare-metal machines the same way a human operator would, because there is no privileged human path. That is the end of the spectrum where "deploy from chat" stops being a demo and starts being operations: the agent can add capacity, not just fill it.

Better-PaaS-style primitivesOwnkube-style ops agentsMulti-node control plane API
Agent's jobDeploy and observe apps on one boxRun ops (cost, incidents, scaling, security)Operate apps and machines across a fleet
Infrastructure the agent seesA single VPSA managed k8s footprint in your cloud accountDeclarative machine lifecycle + scheduling
Provisioning a 2nd machineNot shippable today (Phase 6 roadmap)Handled by the managed layer underneathA declarative API call the agent can make
Human's remaining jobOutgrow the box eventuallySupervise the agentsDefine desired state; audit the rest
FitsSolo builder, side projects, first appTeams wanting ops leverage without headcountTeams whose agent must scale past one box

Read the rows, not the marketing: each column is the right answer for somebody, and the wrong answer is picking a column for the agent workflow you have today while ignoring the infrastructure you will have next year.

Decision guide: which "agent-first" do you actually need?

If you are a solo builder wiring an agent into deploys for the first time, the single-VPS agent-first tool is the correct, honest choice: low ceremony, one box to reason about, scoped tokens from day one, and every deploy observable in a dashboard. Adopt Better-PaaS's doctrine even if you adopt nothing else — least-privilege agent identity, MCP tools for the safe operations, audit logs for all of them. Your future self, debugging a 2 a.m. agent deploy, will thank you.

If your roadmap has a second machine in it — separate database host, staging that is not a folder on the same VPS, a GPU node, a second region — price the migration now, not later. The question to ask any "agent-first" vendor is concrete: "show me the API call where my agent provisions a machine it did not have yesterday." If the answer is a roadmap phase, that is fine, as long as your growth timeline lands after theirs. If the answer is a docs page for manual setup, you are buying a deploy button, not infrastructure operations.

And if you already operate past one box, evaluate the agent surface the way you would evaluate any operator interface: does it expose the whole control plane — machines, placement, rollouts, networking — or only the app layer? An MCP server with seven app-scoped tools is a good start and a bad finish for a fleet. The bar is the Better-PaaS principle turned back on bigger platforms: anything possible from the UI must be possible via the agent, at every layer the UI itself reaches.

The single-box wave taught self-hosting that deployment UX matters; the agent-first wave is teaching it that operator UX matters, and that the operator is increasingly not human. Pick the tool whose agent surface matches the infrastructure you will have — not the demo you just watched.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own, with agents as first-class operators of a real multi-node control plane. Star the repo on GitHub or deploy your first app today.

Related articles

Give your agents a chain backend

Autonomous agents hit RPC endpoints very differently than people do. See what bex router handles on their behalf.

Read the agents guide