You should not be thinking about deployment
The goal has never been to give you better deployment tools. It has been to get deployment out of your head, so the thing you are actually building is the only part that takes your attention.
That goal changed shape this year, because the thing doing the deploying is increasingly not a person. It is a coding agent, working through a task while you watch or while you do something else. Marina now has a command line built for that from the first commit, and an MCP server so an assistant does not have to use the command line at all.
curl -fsSL https://marinahost.app/install.sh | sh A CLI something other than you can drive
A CLI an agent can use is a different object from one a person can use. Three properties, on every command, no exceptions.
It speaks JSON. --json works everywhere, and the shape is the contract. An agent parsing output formatted for humans is a bug waiting for a copy change.
It never prompts. If something needs an answer and nothing is there to give one, it says which flag it wanted and exits. It does not sit forever waiting for a keystroke that is not coming.
Exit codes mean something. 4 is a permission the credential does not have. 5 is money. 7 is worth retrying. A script branches on those without reading a line of prose.
Together they are why an agent can finish a deploy unattended instead of stalling halfway and waiting for someone to come back.
Better than a CLI: no CLI
Shelling out and parsing is still a translation layer, and translation layers leak. So the same commands are also an MCP server:
marina mcp Point an assistant at that and Marina stops being a program it has to remember how to invoke. It becomes seventeen tools it can call directly, with typed arguments and structured results. Create an app, deploy it, attach a database, publish a site, read logs, buy a domain.
The tool list is filtered by the credential. An assistant holding a read-only token is not offered a tool that creates things, rather than being offered it and refused on use. What a credential cannot do never appears as a choice, which removes a whole category of the thing agents do worst: trying something that was never going to work and reasoning about the failure.
You top up, it spends
You would not hand an agent your own account, and you do not have to.
marina tokens create assistant --preset agent --spend 200 That builds, deploys, sets config vars, and creates databases, spending the wallet you funded. Which is the point: the money is yours to put in, and the work is the agent’s to get on with.
The wallet is the budget, and it is prepaid, so nothing can spend money that is not already there. --spend 200 is the tighter bound: two hundred cedis across that credential’s entire life, then it stops. Not per month. That is the one failure a balance alone does not catch, because a loop calling create will happily drain a wallet you keep topped up.
For something that should only ship code to what already exists, --preset deploy cannot create anything at all, so it cannot grow your bill. It can still delete an app, which is worth knowing before you decide it is the safe one.
The refusal is the remedy
Prepaid means a purchase can fail, and how it fails is most of the design.
Your wallet is short GHS 187.42.
This costs GHS 190.00, and the wallet holds GHS 2.58.
Top up with Mobile Money:
Send to 0558863139 (ISAAC KWEKU BADU SMITH)
Reference <your code> Nothing was created and nothing was charged. An agent reading that as JSON gets the shortfall, the payment code and the number as fields, so it can tell you exactly what it needs rather than reporting that something went wrong. You send the money, it runs the same tool again.
This is why the wallet gets funded before the work starts. An agent at two in the morning has nobody to ask for a card, and there is no card to ask about.
It is also a good CLI for a person
marina link shop
marina deploy
marina logs --follow Link a directory once and the everyday commands need no arguments. Create a database and attach it and the connection URL is in your app’s environment, with nothing to copy anywhere. Buy a domain and point it at the app and it is live when the command returns, certificate included.
None of that is the interesting part. The interesting part is that you can hand the whole lot to something else and go back to what you were doing.
Start
curl -fsSL https://marinahost.app/install.sh | sh
marina login
marina status Your first site is free and stays free, so you can watch the whole thing work before spending anything.
Every command, every scope, and the exact configuration for Claude Code, Cursor and Codex are in the docs.
