CLI 1.5: a directory is an agent
The Maritime CLI grew a project model, one-command public web apps, scoped API keys, and a JSON contract designed for AI agents to drive.
CLI 1.5 is the release where the Maritime CLI stopped being a remote control and became a workflow. Four things shipped: a project model, one-command public web apps, scoped API keys, and a machine-readable contract for every command.
A directory is an agent
The old flow made you name your agent on every command. The new flow borrows the model that made Vercel and Railway pleasant: run maritime init in a directory, and that directory is now linked to an agent. Every command after that resolves the agent from where you are standing.
cd my-agent
maritime init # create + link the agent
maritime chat "are you up?" # no name needed
maritime deploy --wait # ships, waits for it to go live
maritime logs -f # follows the log streaminit takes --template, --tier, and --instructions if you want to skip the prompts, and --no-create if you only want the config files. maritime link attaches a directory to an agent that already exists.
One command to a public web app
If your repo has a Dockerfile, this is now the entire deployment story:
maritime create my-app --repo https://github.com/you/my-app --public --port 3000Maritime clones the repo, builds the container, injects PORT, provisions an LLM key for custom containers that want one, and serves the app on a public no-login URL. There is no YAML step and no dashboard step.
Scoped keys for non-interactive use
maritime keys create mints long-lived API keys (the mk_ prefix) with explicit scopes, defaulting to provision,deploy,secrets. The key is shown once. Drop it in MARITIME_TOKEN and every CLI command works in CI, in cron, or inside another agent, with exactly the permissions you granted and nothing else.
maritime keys create -n ci --scopes provision,deploy
export MARITIME_TOKEN=mk_...
maritime whoamiA CLI that agents can drive
The quiet design decision in 1.5: every command takes --json and returns stable, parseable output with meaningful exit codes, and never blocks on an interactive prompt in that mode. That is not a convenience flag. It is an interface contract, and the intended second audience is not human.
An AI agent holding a scoped key can provision, deploy, configure, and interrogate other agents through the same CLI you use by hand:
maritime create worker --template openclaw --json | jq -r '.id'Infrastructure that agents can operate is the precondition for agents that manage agents. We built the CLI as if the operator might have no eyes, because increasingly, it doesn't.
Upgrading
npm i -g maritime-cliThe full flag reference lives in the CLI docs. Everything above works against production today.