Deploying
deploy(dir: "./hn-digest")
The directory is tarred and sent as one request: 50 MB from the MCP server, 64 MB at the API. Inside a git repo the bundle is gitignore-aware, so node_modules is excluded for free. The response is the whole outcome:
{
"app": "hn-digest",
"url": "https://hn-digest-4f9c2a1b7e.<domain>",
"status": "healthy",
"startup_ms": 1412,
"entry_cmd": "bun run start",
"errors": [],
"log_tail": ["listening on :8080"]
}
status is healthy, crashed or timeout, and only healthy means the URL serves. On the other two, errors and log_tail are already in the response, so a failed deploy needs no second call. A healthy deploy that then behaves wrongly at its URL is what logs is for: call it first, before a screenshot, a guess at the cause, or another deploy.
The app name defaults to the directory's basename, lowercased with anything outside a-z0-9- collapsed to a dash; pass it explicitly when the directory is called src or tmp. Names become hostnames, so at most 40 characters, and --fN is reserved for forks. Deploying the same name again updates that app in place; a new name is a new app on a new URL.