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.
Use this skill to publish a static directory to the configured Paperclip pages
host, for example https://pages.paperclip.ing/<slug>/.
index.html at its root.aws CLI v2, curl, and jq are available on PATH for live publishes.PAPERCLIP_PAGE_BUCKETPAPERCLIP_PAGE_BASE_URLAWS_REGIONPAPERCLIP_PAGE_AWS_ACCESS_KEY_ID and PAPERCLIP_PAGE_AWS_SECRET_ACCESS_KEY
with the page-uploader credentials from Paperclip SecretsPAPERCLIP_PAGE_DEFAULT_PREFIXPAPERCLIP_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.
scripts/publish.sh <dir> --dry-run to validate local structure and see
the resolved URL/prefix.--slug <slug> when the user gave a stable URL path.--slug to derive one from the source directory name..agents/skills/paperclip-page/scripts/publish.sh ./site --slug my-page
Updates are additive overwrites only. The helper never deletes remote objects.
.agents/skills/paperclip-page/scripts/publish.sh ./site --slug my-page --update
When the target prefix already exists, --update requires local ownership proof
from ./site/.paperclip-page/state.json generated by an earlier publish from
that same source directory. Without that state, create a new slug instead of
overwriting another page.
aws s3 sync --delete or require s3:DeleteObject in v1.--no-follow-symlinks and fails if any source symlink is
present..paperclip-page/state.json.404.html operator-managed; publishes
always target <slug>/... or <default-prefix>/<slug>/....Slug already exists: choose a different slug or use --update from the
original source directory containing .paperclip-page/state.json.Missing index.html: build the static site first or point the helper at the
directory that contains the root HTML file.Found symlink: replace symlinks with real files before publishing.AccessDenied: confirm the uploader IAM policy allows ListBucket,
GetObject, and PutObject for the configured bucket/prefix, and that the
agent received the Paperclip Secrets.See README.md next to this skill for operator setup, AWS policy examples,
credential rotation, and install/attach commands.
Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/paperclip-page · pinned to the source commit
# Run from your project root
git clone https://github.com/paperclipai/paperclip.git .skillboard-tmp
git -C .skillboard-tmp checkout e168512f7bdbb6af6ea01954c6d7ed80b91e903e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/.agents/skills/paperclip-page" ".claude/skills/"
rm -rf .skillboard-tmpReview the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
sudo apt update && sudo apt install -y gitnpm install -g @anthropic-ai/claude-code# Run from your project root
git clone https://github.com/paperclipai/paperclip.git .skillboard-tmp
git -C .skillboard-tmp checkout e168512f7bdbb6af6ea01954c6d7ed80b91e903e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/.agents/skills/paperclip-page" ".claude/skills/"
rm -rf .skillboard-tmpDestination: .claude/skills/paperclip-page
Scanner static-checks@0.1.0 · commit e168512f7bdb. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
References credentials, tokens or secret files that a skill should not need.
Evidence: [redacted]· fingerprint cb31f6d3cea2a02f
Fetches remote content at runtime, which can change after review.
Evidence: curl· fingerprint 427e4b79b1f0fc90