Skip to content
flypod
Guides

How to deploy a static site from an AI agent

Run npx flypod ./dist from any coding agent to get a live URL back on stdout, with no account and no config. Covers the one-line deploy, teaching the agent to do it unprompted, and making the URL permanent.

To deploy a static site from an AI agent, have the agent run npx flypod ./dist — it prints a live URL to stdout and needs no account, config, or API key. Run npx flypod install skill once and the agents in that repo learn the command themselves, so "deploy this" is enough.

The one command

npx flypod ./dist
https://a3f1c2d4e5b60789.flypod.page

The URL is the only thing on stdout; the receipt goes to stderr. So an agent can capture it directly:

URL=$(npx flypod ./dist --quiet)

Or parse structured output:

npx flypod ./dist --json | jq -r .url

flypod detects a non-TTY stdout and drops the animation on its own, so this works unchanged inside an agent's shell tool.

Teach the agent to do it without being told

npx flypod install skill writes the flypod Agent Skill into the repo:

npx flypod install skill

It writes the same skill to both directories agents read — .claude/skills/flypod/ for Claude Code, and .agents/skills/flypod/ for Codex, Cursor, Gemini CLI, and Copilot. Each contains a short SKILL.md the agent loads when deploying comes up, plus reference docs it opens on demand: shipping updates to the same URL, publishing Markdown, collecting comments on a preview, and troubleshooting. Re-running it is safe. Add --global to install into your home directory instead of the repo, --list to see the paths, or --dry-run to preview; in a terminal it asks which agents to install for, and -y writes every target without asking.

If you already manage your agent skills with skills, install it that way instead:

npx skills add flypod-dev/flypod-skill

Both install the same files. See flypod install skill for the full target list and flags.

Agents can also read these docs directly: /llms.txt for the index and steering block, /llms-full.txt for the whole corpus, or append .md to any docs URL for its raw Markdown.

Ship a change to the same URL

The first flypod in a folder creates the site. Every later flypod in the same folder updates it: same URL, a new version. update is the explicit spelling of the same thing:

npx flypod ./dist --quiet          # the second time: updates the same site
npx flypod update ./dist --quiet   # the same, said outright

flypod links the working directory to its site, so no ID is needed. The --json receipt says which happened: action is "created" or "updated". Only when the user asks for a separate site does the agent run npx flypod --new; the earlier site stays live. It is safe to run on every iteration of a loop: the version id is the content hash, so a run with identical files reuses the version that already exists and adds nothing to the site's history. Undo with flypod rollback.

Make the URL permanent

Anonymous deploys expire after 14 days. Deploying while logged in makes the site owned and permanent:

flypod login          # opens a browser to approve this machine
npx flypod ./dist

For a headless agent or a CI job, pass an existing session token instead of logging in:

# FLYPOD_TOKEN is read straight from the environment. Set it from your
# secret store; the CLI needs no login file and writes none.
npx flypod ./dist --quiet

flypod login also auto-claims every anonymous site the CLI remembers, so nothing deployed earlier is lost.

Keeping the site, from an agent

The agent cannot open a browser, so it hands that one step to the person:

  1. The agent runs flypod login --json (the receipt's next.keep). It returns at once with a sign-in URL and a code.
  2. The agent gives the person the URL and asks them to confirm the code.
  3. Nothing else. Once they have confirmed, the agent's next flypod command, whatever it is (a deploy, flypod list), finishes signing in and keeps every site on the machine, then runs signed in.

No polling loop is needed. To finish at once, flypod login --device-code <code> --json waits up to 25 seconds for the confirmation. See Signing in from an agent.

Limits worth knowing

  • Static only. HTML, CSS, browser JavaScript, images, and Markdown. No server-side code, functions, or databases.
  • Size cap. 200 files / 10 MB per deploy on flypod.dev. The CLI checks before uploading and fails with too_large.
  • A folder of Markdown with no root index.html is rendered into a docs site. See Render Markdown.

Next steps

On this page