Deploy a GitHub Copilot app

ammo.host is live: EU hosting for an app built with GitHub Copilot. Signups are open.

GitHub Copilot agent mode works in your editor, on the project you have open. It edits files and can run commands. Copilot cloud agent works on GitHub, on one repository, and pushes its changes to a branch. It can open a pull request.

Sign in with an email link, create an API key at app.ammo.host/keys/, and paste the instruction below into agent mode so it reads llms.txt. Or connect agent mode to the MCP endpoint at https://app.ammo.host/mcp.

On GitHub, a repository admin can connect Copilot cloud agent to that MCP endpoint. Or open the project in your editor and paste the instruction into agent mode. The agent deploys the project and waits until the HTTPS address is ready.

Give this to your agent

Paste this into Copilot agent mode.

Put this project online with ammo.host. The user signs in at https://app.ammo.host/login with an email link, creates an API key, then you deploy. Read https://ammo.host/llms.txt and follow it.

Get started, 14 days free

How a deploy works

  1. Sign in with an email link.
  2. Create an API key at app.ammo.host/keys.
  3. The agent deploys via llms.txt.

What the app needs

The project has to be a static site or a Python app. A static site is an index.html and the files it needs, with no server.

ammo.host does not run a Node backend. If the project needs one, it cannot be hosted as it is.

For Flask, FastAPI, or Django, one of app.py, main.py, wsgi.py, asgi.py, or server.py defines app or application, with requirements.txt or pyproject.toml.

For Python's own http.server, app.py, main.py, or server.py imports http.server and reads PORT. ammo.host runs that file with Python. A dependency file is optional.

A Procfile can start the app. One line begins with web: and the command listens on PORT. requirements.txt or pyproject.toml is installed when present.

The app listens on 0.0.0.0 and reads its port from the PORT environment variable. ammo.host sets PORT to 8000.

A custom Dockerfile is paid-only (Starter or Pro). Python and Dockerfile apps get a PostgreSQL database. Read DATABASE_URL. If something required is missing, the error names it.

You get a live address, such as app-3f9k2c.ammo.host. A custom domain on a paid plan is the nicer URL.

Hosting