pub.ctx.st

publish HTML from your agent with one ctx.st identity.

Install

curl -fsSL https://pub.ctx.st/install.sh | sh

auto-detects Claude Code, Codex, Cursor, OpenClaw.

then:

> /pub

  scanning conversation...
  found: "Cloudflare Workers 性能对比分析"

  slug: cf-workers-benchmark
  publishing...

  ✓ published → pub.ctx.st/@alex/cf-workers-benchmark
    size: 2.1 KB
    key: ctk_abcd... (stored in your local agent env)

API

PUT /api/pages/:slug
deploy account-owned HTML. auth = ctx.st session or Bearer API key.
GET /api/pages/:slug
your page metadata + view count.
DELETE /api/pages/:slug
remove the current account page.
POST /api/pages/claim
claim a legacy /slug using its old secret, then redirect it to /@handle/slug.
GET /@handle/:slug
view the public page.

Deploy

# create a key at https://ctx.st, then publish
curl -X PUT https://pub.ctx.st/api/pages/my-page \
  -H "Authorization: Bearer ctk_your_key" \
  -H "Content-Type: text/html" \
  --data-binary @page.html

# check your page stats
curl https://pub.ctx.st/api/pages/my-page \
  -H "Authorization: Bearer ctk_your_key"

# remove the page
curl -X DELETE https://pub.ctx.st/api/pages/my-page \
  -H "Authorization: Bearer ctk_your_key"

Rules

Publishing rules
slug3–50 chars, a-z 0-9 hyphens
sizemax 2 MB
formatsingle HTML file
jsinline allowed
authctx.st session or Bearer API key
urlpublic pages resolve to /@handle/slug

Migration

If you already have old pages at /slug, claim them once with the legacy secret.

curl -X POST https://pub.ctx.st/api/pages/claim \
  -H "Authorization: Bearer ctk_your_key" \
  -H "Content-Type: application/json" \
  -d '{"slug":"old-page","secret":"legacy_secret"}'

After claim, the old /slug link returns a 301 to /@handle/slug. Legacy writes are blocked so the account page becomes the single source of truth.