# Publish Static Pages

Uploads HTML pages and asset folders to the Paperclip page host.

- Repository: https://github.com/paperclipai/paperclip (109885 stars)
- Category: DevOps
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add paperclipai/paperclip --skill paperclip-page -g -a claude-code -y`
Codex: `npx skills add paperclipai/paperclip --skill paperclip-page -g -a codex -y`
Cursor: `npx skills add paperclipai/paperclip --skill paperclip-page -g -a cursor -y`
Gemini CLI: `npx skills add paperclipai/paperclip --skill paperclip-page -g -a gemini-cli -y`

## Description

Publish static HTML pages and asset folders to the Paperclip S3/CloudFront page host. Use when asked to deploy, host, or share a persistent page, viewer, prototype, report, or static site without here.now.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Paperclip Page

Use this skill to publish a static directory to the configured Paperclip pages
host, for example `https://pages.paperclip.ing/<slug>/`.

## Requirements

- Source directory contains `index.html` at its root.
- `aws` CLI v2, `curl`, and `jq` are available on PATH for live publishes.
- Environment variables are configured:
  - `PAPERCLIP_PAGE_BUCKET`
  - `PAPERCLIP_PAGE_BASE_URL`
  - `AWS_REGION`
  - `PAPERCLIP_PAGE_AWS_ACCESS_KEY_ID` and `PAPERCLIP_PAGE_AWS_SECRET_ACCESS_KEY`
    with the page-uploader credentials from Paperclip Secrets
- Optional environment variables:
  - `PAPERCLIP_PAGE_DEFAULT_PREFIX`
  - `PAPERCLIP_PAGE_AWS_PROFILE` (alternative to the namespaced key pair)
  - `PAPERCLIP_PAGE_AWS_SESSION_TOKEN` (only together with the namespaced key
    pair)

Do not bind the page-uploader credentials as global `AWS_ACCESS_KEY_ID` /
`AWS_SECRET_ACCESS_KEY`: static env keys take precedence over `AWS_PROFILE` in
every AWS SDK, so global names silently replace the host identity for every
process in the agent run. The namespaced variables scope the uploader identity
to this helper only. The ambient credential chain still works as a fallback
when none of the `PAPERCLIP_PAGE_AWS_*` credential variables are set.

## Workflow

1. Inspect the source directory and confirm it is public static content only.
2. Run `scripts/publish.sh <dir> --dry-run` to validate local structure and see
   the resolved URL/prefix.
3. Choose a slug:
   - Use `--slug <slug>` when the user gave a stable URL path.
   - Omit `--slug` to derive one from the source directory name.
4. Publish:

```bash
.agents/skills/paperclip-page/scripts/publish.sh ./site --slug my-page
```

5. Return the printed public URL and S3 prefix to the issue/user.

## Update Workflow

Updates are additive overwrites only. The helper never deletes remote objects.

```bash
.agents/skills/paperclip-page/scripts/publish.sh ./site --slug my-page --update
```

The rest: https://github.com/paperclipai/paperclip/blob/HEAD/.agents/skills/paperclip-page/SKILL.md
