All docs

Deploy with an agent

Paste this page into your assistant and ask it to deploy. It can do all of it except one click.

If you are an assistant reading this for someone: everything below is runnable, in order, and you can do all of it. One step needs the person in front of you, and it is marked. Nothing here needs them to understand scopes, tokens or configuration.

1. Install the CLI

curl -fsSL https://marinahost.app/install.sh | sh

Windows PowerShell:

irm https://marinahost.app/install.ps1 | iex

It lands on the PATH and exits non-zero if it could not, so check the exit code rather than assuming.

2. Sign in (the one step that needs the person)

marina login

One command, wherever you are running. If a browser opens on this machine, the person approves there and it finishes on its own. If there is no browser here, which is the usual case over SSH or in a sandbox, it prints a link and a short code instead.

When you see a link and a code, show the person both, verbatim, and wait. They open the link on whatever device they have, enter the code, and the command returns by itself. Do not retry it in a loop and do not run it again; it is already waiting for them.

To ask for the link-and-code flow outright, rather than letting it be decided for you:

marina login --headless

Worth reaching for when the person is not at this machine even though it has a browser, or when you want the link to show them before anything opens.

3. Know what it will cost before you start

This is the step that catches agents out.

A static site is free. The first one on an account has no bill attached, so you can deploy one immediately with an empty wallet.

An app is not. Apps, databases, domains and email all cost money, and Marina is prepaid, so a create against an empty wallet is refused rather than queued. Check first:

marina wallet balance

If it is empty and the person wants an app, run marina wallet topup and show them its output exactly as printed. It contains the number to send Mobile Money to and their own payment code. Do not paraphrase it and do not invent a code.

4. Deploy

A folder of built files, free:

marina sites deploy ./dist

An app from the directory you are in:

marina vessels create myapp --dir .

An app from a GitHub repo, which then redeploys itself on every push:

marina vessels create myapp --repo owner/name

Each prints the URL it is live at. Marina works out how to build and start the code, so there is usually nothing to configure. When it guesses wrong, marina.toml is how you say what you meant.

5. When it refuses

Every command exits with a code worth branching on, and --json puts the same answer on stdout as a structured document.

ExitMeaningWhat to do
3Not signed inGo back to step 2.
5MoneyThe message carries the shortfall and the payment code. Show it verbatim and stop.
4Not allowedThe credential lacks a permission. Stop; retrying cannot fix it.
6Not foundCheck the name with marina status.
7TemporaryWorth one retry.
2The command was wrongA flag or argument. Read --help, do not guess.

A build that fails is not any of those: the deploy returns, the previous version keeps serving, and marina logs has the reason.

After the first deploy

marina status          # everything this account runs
marina deploy          # ship the linked app again
marina logs --follow
marina db create store --engine postgres && marina db attach store

To keep working on this account in later sessions without shelling out each time, set up the MCP server once. To give an unattended agent its own credential rather than the person’s, read tokens and scopes; neither is needed for what is above.