sitelink11.8 KB
View saved version →
---
name: sitelink
description: When the user wants their website online at a clean address (a name.site.link subdomain) without buying a domain, whether it's a page or site made in this conversation, a built site folder on their computer, or a ChatGPT Site. Also when they ask to check or claim a site.link name, publish or update their site, connect a ChatGPT Site, see whether the address works yet, take the site down, or give the name up.
metadata:
version: 0.3.7
---
# site.link
site.link gives a website an address like `mycafe.site.link`. The user never buys a domain or touches DNS. An account can hold several names, and each name shows one of two things:
- **A site that site.link hosts.** You send the site's files with `publish_site` (or upload a zip with `get_upload_url`) and it's live in seconds. Use this for anything made in the conversation or sitting in a folder.
- **A ChatGPT Site.** ChatGPT Sites keeps hosting it; site.link only creates the DNS records the Site asks for. Use this only when the user built the site with ChatGPT Sites.
## Before you start
- **No site.link tools?** The connector isn't connected or signed in. Ask the user to connect site.link in their app's connector settings and sign in with email or Google. In ChatGPT, the user can also type `@site.link` and pick it from the list to use site.link in the current chat.
- **Same site, same name.** `get_status` with no name lists the account's names. When the user is updating a site they already put on site.link, use its name. Claim a new name only for a different site.
- **Which way?** If the user is working on a ChatGPT Site and the ChatGPT Sites tools are in this conversation, follow "Connect a ChatGPT Site". In every other case, publish.
## Publish a site
1. **Pick the name.** Use the name the user asked for, or suggest one from the business or project name: short, lowercase, letters, numbers and hyphens.
2. **`check_name`**, then **`claim_name`**. If the name is taken, offer the `suggestions` and let the user choose. Don't claim a name the user didn't agree to.
3. **Send the files.**
- **Made in this conversation** (an HTML page, an artifact, a few files): call `publish_site` with every file. The home page is `index.html`. A one-page site can be a single `index.html` with its CSS and JS inline. Send text files as they are; send images and fonts as base64 with `encoding: "base64"`, or link to images by URL.
- **A folder on the user's computer, and you can run shell commands** (Claude Code, Codex, a terminal): build it first if it needs a build (`npm run build` or the project's build command). Call `get_upload_url`, then zip the folder that holds `index.html` (usually `dist`, `build` or `out`) and upload the zip to its `upload_url`: `zip -qr ../site.zip . && curl -sS -T ../site.zip "<upload_url>"`. curl prints JSON that says whether the site is live.
4. **Report.** When `state` is `live`, give the user `https://<name>.site.link`. When it's `publishing`, say the address will work within a minute and offer to check with `get_status`.
**Keep it in sync.** When the user asks you to change a site you've published in this conversation, publishing the new version is part of that change: `publish_site` with every file (publishing replaces the whole site, so send all of them, not only the changed ones), or build the folder and upload it again. Then tell the user in one short line that `https://<name>.site.link` shows the new version. In a new conversation, do the same once the user says the page they're editing is on site.link.
### What site.link hosts
- Up to 100 files and 10 MB. Pages, styles, scripts, images, fonts, audio, video and PDFs.
- Paths like `index.html`, `about/index.html` or `images/logo.png`. `/about` serves `about.html` or `about/index.html`. Unknown page paths serve `404.html` if the site has one. Without one, a site with a single page serves `index.html`, so single-page apps work, and a site with several pages shows a not-foun
Preview of the first 4,000 characters. Read full instructions →
Referenced files: 1 — file references are metadata, not package contents.