# How to host a website made with Codex

By Avatar 8 (Avatar 8 LLC) · Published November 13, 2026 · https://deed.page/blog/host-a-website-made-with-codex

To host a website made with Codex means putting the files Codex built on a server so anyone can open them at a public HTTPS link. On deed.page that is one `curl` request with no account, and the Free plan holds 25 sites of up to 25 MB each ([pricing](https://deed.page/pricing)).

Codex, OpenAI's coding agent, writes and edits files in your project, but it does not host a plain folder of files for you. Most guides send you through a GitHub repo, a hosting dashboard, or a ZIP upload. The steps below let Codex do it from the terminal. Every command was run against production on November 13, 2026 with a 15-minute expiry, and the test sites were then deleted.

## How do I host a website made with Codex?

Ask Codex to build the site, then to publish it with the line below. It reads the link from the reply and hands it to you.

```bash
curl -T index.html "https://deed.page/v1/sites?slug=recipe-box-codex-r2v6&ref=blog"
```

The reply had `"url": "https://recipe-box-codex-r2v6.deed.page/"`, `"version": "v1"`, and a `deed_tok_…` owner token shown once. Pick your own suffix; that slug is only an example, and a slug someone else owns returns `409 slug_taken` with a free suggestion ([choosing a slug](https://deed.page/blog/choosing-a-slug)). There is no sign-up, no claim link, and no default expiry.

## Let the command reach the network

The Codex CLI and IDE extension run commands in a sandbox, and the default `workspace-write` mode keeps network access off ([Codex approvals and security](https://learn.chatgpt.com/docs/agent-approvals-security)). In the Auto preset, Codex asks for approval before a command that needs the network, so you approve the `curl` once. To allow it for every session, the docs give this `~/.codex/config.toml` setting:

```toml
[sandbox_workspace_write]
network_access = true
```

We checked both cases with `codex sandbox` (codex-cli 0.167.0): the same `curl` to deed.page got no connection under the built-in `:workspace` permission profile and returned 200 under a profile with network enabled. Turning network on lets every sandboxed command reach the internet, so leave it off if approving each publish suits you better.

## A built folder (Vite, React, Astro)

Most Codex projects end with `npm run build` and a `dist/` folder. Pack it with `tar -C` so `index.html` sits at the root, then send it with the token from the first publish:

```bash
tar -C dist -czf site.tar.gz .
curl -T site.tar.gz -H "Authorization: Bearer $DEEDPAGE_TOKEN" \
  "https://deed.page/v1/sites?slug=recipe-box-codex-r2v6&ref=blog"
```

That returned `"version": "v2"` at the same URL, and `/assets/app.css` served as `text/css`. Sending the same tarball again returned `"unchanged": true` without a new version. deed.page serves static files only, so an app with API routes or server rendering needs a host that runs a server. Bigger builds go up in parts ([large sites](https://deed.page/blog/plan-upload-large-sites)).

## Host it from Codex with MCP

If you would rather Codex call a tool than run a shell command, add the deed.page MCP server once ([Codex MCP docs](https://learn.chatgpt.com/docs/extend/mcp)):

```bash
codex mcp add deed-page --url https://deed.page/mcp
```

That wrote `[mcp_servers.deed-page]` with `url = "https://deed.page/mcp"` to `config.toml`, and `codex mcp list` showed it enabled with no sign-in step. The tool call looks like this:

```json
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publish_site","arguments":{"slug":"recipe-box-codex-mcp-r2v6","files":{"index.html":"<!doctype html><title>Recipe box</title><h1>Recipe box from Codex</h1>"}}}}
```

It returned `ok: true`, `version: "v1"`, the subdomain URL, and a token. Passing that token to `update_site` gave `v2` at the same address. The [MCP walkthrough](https://deed.page/blog/mcp-publish-walkthrough) lists the other tools.

## Make it the project's way to deploy

Codex reads `AGENTS.md` files before doing any work ([AGENTS.md docs](https://learn.chatgpt.com/docs/agent-configuration/agents-md)), so one line there stops each session from hunting for a host:

```text
Deploy: npm run build, tar -C dist -czf site.tar.gz . then curl -T site.tar.gz
with Authorization: Bearer $(cat ~/.config/deed-page/token) to
https://deed.page/v1/sites?slug=<our-slug>. Tell me the url from the reply.
```

Keep the token in a file with `chmod 600` and out of git, not in `AGENTS.md` itself ([token hygiene](https://deed.page/blog/token-hygiene-for-agents)). deed.page stores only its SHA-256 ([trust](https://deed.page/trust)).

## FAQ

**Doesn't Codex already host sites?**
In the Codex desktop app, [ChatGPT Sites](https://openai.com/academy/chatgpt-sites/) can deploy a site that people in your workspace open, with sharing set by workspace settings; on Enterprise, admins decide whether it is available. For a public link anyone can open without a workspace, a static host like deed.page fits.

**Do I need an account?**
Not on deed.page. The first publish mints an owner token, and that token is the only credential. The Codex guides from [Static.app](https://static.app/codex-hosting) and [Tiiny Host](https://tiiny.host/use-case/host-openai-codex-projects/) (checked November 13, 2026) start with dragging a ZIP of the build onto their site instead of a command.

**Will the site disappear if nobody visits it?**
No. Sites do not expire unless you send `X-Ttl` for a throwaway page ([TTLs](https://deed.page/blog/ttl-for-throwaway-pages)). Free sites show a small "Published with deed.page" link; Hobby at $3 a month removes it.
