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 ./disthttps://ab12cd34.flypod.devThe URL is the only thing on stdout; the banner and hints go to stderr. So an agent can capture it directly:
URL=$(npx flypod ./dist --quiet)Or parse structured output:
npx flypod ./dist --json | jq -r .urlflypod 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 skillIt 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 always loads, 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.
If you already manage your agent skills with
skills, install it that way instead:
npx skills add flypod-dev/flypod-skillBoth 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
A second flypod creates a second site. To replace the contents of the site the
agent already deployed, use update:
npx flypod update ./dist --quietflypod links the working directory to its site, so no ID is needed. 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 ./distFor 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 --quietflypod login also auto-claims every anonymous site the CLI remembers, so
nothing deployed earlier is lost.
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 uncompressed / 5 MB zip per deploy.
- A folder of Markdown with no root
index.htmlis rendered into a docs site. See Render Markdown.
Next steps
Accounts & claiming
Connect the CLI through browser device authorization, make deploys permanent, and attach an existing anonymous site.
Use with agents & CI
The canonical playbook for driving flypod from an agent or CI job. Covers non-interactive output, capturing the URL, exit codes, authentication, and idempotent re-deploys.