Alpha A local DevOps harness, not a platform ⌘J

Deploy with an AI that
never sees your secrets.

VibeOps reads your repo, plans a deploy for every service in it, and runs it on your machine and your accounts. Credentials go from your keyboard straight to the command — never through the model.

Open sourceYour machine, your accountsNothing to migrate off
2 secrets usedseen by the model: 0
One repo, routed4 → 3services → providers
VibeOps — Assistant
A

deploy linkboard to production

I read the repo and found four deployable services, so they don't all go to the same place. api is Go and shells out to ffmpeg — that can't run on Workers, so I've routed it to a VM instead.

● Plan · one approval4 services · 3 providers
web/Next.jsVercel
api/Go · needs a real filesystemFly VM
worker/TS cronCloudflare
dbPostgresNeon
wrangler secret put DATABASE_URL --text$SECRET_DATABASE_URL

Ordered so api ships before the frontend that needs its URL. I'll ask you for two credentials as I go — I never receive the values, only the placeholders.

Approve & run all four
Change the target for api/
Approve the planWhy not Workers for api/?Use my own VPS instead

Drives the CLIs you already have — nothing bundled, nothing proxied

wranglervercelflyneondockersshbunx anything
How it's different

An agent you can hand
production to without flinching.

Pasting a database URL into a chat box publishes it — prompts and tool results persist somewhere you don't control. VibeOps is built so the model can do the work without ever holding the credential.

The model asks for a secret. It never gets one.

When the agent needs a credential, a native dialog asks you. The value goes into the command at execution time — the model is told only that the secret now exists, and writes a placeholder wherever it belongs.

deploy linkboard to production
VibeOps needs a value
DATABASE_URL
To set the connection string on the api service before it boots.
••••••••••••••••••••
Stored in your OS keychain. Never sent to the model.
The model wrote $SECRET_DATABASE_URL You typed the rest

Routed per service, not per repo

One repo is rarely one deploy. It reads each service and picks a home for each.

web/Next.jsVercel
api/GoFly VM
worker/TS cronCloudflare
dbPostgresNeon

It tells you no

When your pick can't run the code, you get a reason — not a workaround that breaks in a week.

Won't run there

api/ shells out to ffmpeg. Workers has no subprocesses, so it can't work — with any amount of config.

Routed to a Fly VM instead

Scrubbed on the way back

Protecting the input alone is theater — deploy output leaks too. Held values are stripped from every result before the model reads it.

14:21:58 $ fly secrets set DATABASE_URL=•••••
14:22:00 Secrets are staged for the next deploy
14:22:01 $ printenv DATABASE_URL
14:22:02 [redacted by VibeOps]
14:22:03 release v14 · api · healthy
14:22:05 https://linkboard-api.fly.dev
14:21:58 $ fly secrets set DATABASE_URL=•••••
14:22:00 Secrets are staged for the next deploy
14:22:01 $ printenv DATABASE_URL
14:22:02 [redacted by VibeOps]
14:22:03 release v14 · api · healthy
14:22:05 https://linkboard-api.fly.dev

Swap the brain, keep the tools

Bring an API key or drive a coding harness you already pay for. Same tools, same dialogs, same guarantees.

Claude Code connected
Any OpenRouter model your key
Codex · opencode · Cursor soon

Your machine, your accounts

It runs on your laptop and signs into your own providers. No VibeOps cloud, no VibeOps bill, nothing to migrate off.

hetzner-cx32 · 65.108.4.211Ubuntu 24.04 · connected via SSH
Yours
18%
3.1 GB
“Every other tool wants me to paste my database URL into a chat box.”
Early alpha user · shipping a SaaS on a €4 Hetzner box