# Galley

Self-hosted page publishing for AI agents, on Cloudflare Workers. Agents publish, update and search HTML pages over MCP or a CLI; you browse them in one private list.

Think chat artifacts without the provider and account walls: Claude Code, Codex, Cursor and your own scripts all publish to the same place, with stable URLs, versions and page data.

Needs Workers Paid. MIT licensed: fork it and change anything.

- Repository: https://github.com/tonyseets/galley
- Manual setup: https://github.com/tonyseets/galley#readme

## What it does

- MCP server with 13 tools, a CLI with device-code login, and scoped access tokens
- Full-text search, filtered by project, agent, tag and date
- Private by default: GitHub sign-in for you and the users you invite; revocable share links
- Stable URLs; every update is a new version
- Per-page JSON data that pages write and agents read back
- Pages run sandboxed on a separate origin

## Set up with your coding agent

Paste into Claude Code, Codex or any coding agent:

```text
Set up Galley (https://github.com/tonyseets/galley) on my Cloudflare account. Follow its README and AGENTS.md; they override this prompt.

Done means:
1. Cloudflare: my account is on Workers Paid. No account: help me create one. On Free: tell me the price and wait for my yes. Never enter payment details.
2. Repo cloned and installed with the pinned Node and npm; local checks pass.
3. Secrets (GitHub OAuth client secret, the two generated keys, a Cloudflare API token with the README's permissions) live in my secret manager or in env vars the deploy reads. Ask which. Generate the keys without displaying them. I create and save the API token myself.
4. GitHub OAuth App: homepage = app origin, callback = app origin + /callback. Derive both origins from my account per the README.
5. galley.config.json: account ID, Worker names, both origins, my numeric GitHub user ID (look it up), OAuth client ID, viewers (ask; none by default).
6. Deployed with the repo's deploy command after its preflight passes. No direct Wrangler or Alchemy, no auto-deploy.
7. Galley's MCP server (app origin + /mcp) connected with OAuth to each coding agent I use (ask which); galley skill installed for each; galley login done.
8. Verified: publish a test page from an agent, run galley whoami, I confirm the page opens after GitHub sign-in, then delete it.

Never print, log or commit a secret. Ask before anything that costs money or creates an account. If a step fails, stop and say what blocked it. Finish with my Galley URL and the connected agents.
```

---

[MIT License](https://github.com/tonyseets/galley/blob/main/LICENSE) · [llms.txt](llms.txt) · © 2026 Galley contributors
