Routed per service, not per repo
One repo is rarely one deploy. It reads each service and picks a home for each.
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.
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.
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.
Drives the CLIs you already have — nothing bundled, nothing proxied
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.
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.
One repo is rarely one deploy. It reads each service and picks a home for each.
When your pick can't run the code, you get a reason — not a workaround that breaks in a week.
api/ shells out to ffmpeg. Workers has no subprocesses, so it can't work — with any amount of config.
Protecting the input alone is theater — deploy output leaks too. Held values are stripped from every result before the model reads it.
Bring an API key or drive a coding harness you already pay for. Same tools, same dialogs, same guarantees.
It runs on your laptop and signs into your own providers. No VibeOps cloud, no VibeOps bill, nothing to migrate off.
“Every other tool wants me to paste my database URL into a chat box.”