Skip to content

imyelo/clawpage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

166 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Clawpage

Type /clawpage in any Openclaw chat - conversation becomes a polished archive page at your own URL.
πŸš€ Deploys to GitHub Pages, Vercel, Netlify, or Cloudflare Pages.

Clawpage Info Card

EspaΓ±ol Β· FranΓ§ais Β· δΈ­ζ–‡ Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

✨ No manual exports, no copy-pasting, sensitive data auto-redacted

πŸ€” Why?

AI chats are valuable, but they disappear. Clawpage turns them into publishable content you can save and share.

πŸš€ Live Demo

Screenshot of a chat page built with clawpage

Or see a site we use it ourselves: vibe.yelo.cc

πŸ“Œ Features

  • ⚑ Based on Skills β€” type /clawpage in any chat to start sharing
  • πŸ• Any session β€” not just the current chat, but also any historical session by ID or keyword
  • πŸš€ No server to manage β€” pure static, deploys to GitHub Pages, Vercel, Netlify, or Cloudflare Pages for free
  • πŸ”€ Review before you publish β€” each export opens a PR so you can review content before merging
  • πŸ”’ Share privately β€” direct link works, but chats stay off the public index by default
  • πŸ›‘οΈ Safe to share β€” AI-assisted redaction replaces sensitive data with [REDACTED] before export
  • 🧠 Full fidelity β€” tool calls and thinking traces are preserved in the timeline, not stripped out

⚑ Quick Start

Copy and Paste into your agent chat:

Read https://clawhub.ai/imyelo/clawpage and install the clawpage skill,
then run first-time setup for me.

πŸ€– What the Agent Does During Setup

The agent will scaffold a private GitHub repo, configure clawpage.toml with your Pages URL, push the initial commit, enable GitHub Actions as the Pages source, and register the project so /clawpage works immediately. For the full step-by-step, see skills/clawpage/references/setup.md.

πŸ“€ Share a Chat

Once setup is complete, use the /clawpage skill command in any Openclaw chat to export it:

/clawpage

The agent will:

  1. πŸ” Locate the session to export β€” defaults to the current chat; you can also pick any previous session by ID or keyword
  2. βœ… Ask you to confirm the title, description, and visibility (public / private)
  3. πŸ”’ Redact any sensitive data you flag
  4. πŸ“ Write the YAML file to your working repo on a new branch (chat/{YYYYMMDD}-{slug})
  5. πŸ”€ Prompt you to open a Pull Request β€” merging to main triggers the GitHub Pages build

After the PR merges, your chat is live at https://your-domain/chats/{slug}.

⚠️ Before merging: AI-powered redaction is not 100% reliable. Always open the generated YAML in the PR and manually replace any missed sensitive content with [REDACTED]. See How to protect sensitive info for details.

πŸ’‘ Tip: Set visibility: private (the default) to keep a chat accessible via direct link only, without it appearing on the public index page.

βš™οΈ How It Works

/clawpage
    β”‚
    β–Ό
πŸ€– OpenClaw Skill
    β”‚  1. πŸ” Locate session (current or any historical) β†’ confirm
    β”‚  2. πŸ’¬ Extract message history
    β”‚  3. πŸ“ Populate metadata (title, participants, description)
    β”‚  4. πŸ”’ Redact sensitive data
    β”‚  5. πŸ“„ Write YAML to your data repo
    β”‚  6. πŸ”€ Push to new branch β†’ create PR
    β–Ό
πŸš€ GitHub Pages
    └── https://your-domain/chats/{slug}

🌿 Branch-Based Workflow

Chats are pushed to a new branch (chat/{slug}) instead of main, with guidance to create a PR for review before merging.

πŸ—οΈ Repository Architecture

This repo is a public template. Your actual chat data lives in a separate private working repo β€” this keeps the template clean and forkable without data contamination.

Repo Visibility Purpose
clawpage Public Template, packages, and Skill
your-clawpage Private Your actual chat data

⚑ Configuration

The web package is configured via clawpage.toml in your working repo root.

Key Type Description Example
site string (URL) Full URL of your deployed site "https://you.github.io"
base string Base path when the site is not served from the domain root "/my-repo"
public_dir string Static assets directory (relative to config file) "public"
out_dir string Build output directory (relative to config file) "dist"
chats_dir string Custom chats directory path (absolute or relative to config file) "../my-chats"
template.options.title string Homepage title "clawpage"
template.options.subtitle string Homepage subtitle "// conversation archive"
template.options.description string Meta description for the site "My conversation archive"
template.options.footer string Footer text (Markdown supported) ``
template.options.analytics.google_analytics_id string Google Analytics 4 Measurement ID "G-XXXXXXXXXX"
template.options.promo.enabled boolean Show a promo block on the homepage to help spread clawpage false

Example clawpage.toml (GitHub Pages project site):

site = "https://your-username.github.io"
base = "/your-repo-name"

[template.options]
title = "clawpage"
subtitle = "// conversation archive"
footer = "powered by [@imyelo](https://github.com/imyelo)"

[template.options.promo]
enabled = true

When deploying to Netlify, Vercel, Cloudflare Pages, or a custom domain, set site to your full URL and omit base.

🚒 Deployment

The scaffold includes configuration files for

  • βœ… GitHub Pages
  • βœ… Netlify
  • βœ… Vercel
  • βœ… Cloudflare Pages.

For step-by-step instructions, custom domain setup, and free tier limits for each platform, see docs/guide/en/deployment.md.

πŸ“‹ Data Format

Chat files are stored as YAML under chats/ in your working repo. Generated by the CLI from Openclaw session JSONL files ({id}.jsonl).

File naming: YYYYMMDD-{slug}.yaml

Top-level metadata fields:

Field Required Description Example
title Yes Session title / export name My Session
date Yes Session date (YYYY-MM-DD) 2026-02-15
sessionId Yes Unique session ID cf1f8dbe-2a12-47cf-8221-9fcbf0c47466
channel No Channel/platform name discord, telegram
model No Model used in session MiniMax-M2.5
totalMessages No Total message count 42
totalTokens No Total tokens consumed 12345
tags No Tag array for categorization [coding, debug]
visibility No Index visibility private (default)
description No Brief description for index Debugging a tricky async issue
defaultShowProcess No Show process (thinking, tool calls) by default false
participants No Maps participant names to { role: "human" | "agent" } see example

Visibility:

  • public β€” appears on the homepage index
  • private (default) β€” accessible via direct URL only, hidden from the index

The timeline: key holds an ordered list of message and event objects. See docs/clawpage-data-format.md for the full schema.

Example file:

title: Debugging Async Issue
date: 2026-02-15
sessionId: cf1f8dbe-2a12-47cf-8221-9fcbf0c47466
model: MiniMax-M2.5
totalMessages: 4
totalTokens: 12345
visibility: public
defaultShowProcess: false
participants:
  Alice:
    role: human
  Claude:
    role: agent

timeline:
  - type: message
    role: human
    speaker: Alice
    timestamp: "2026-02-15T06:13:50.514Z"
    content: |
      Message content...

  - type: message
    role: agent
    speaker: Claude
    timestamp: "2026-02-15T06:14:05.123Z"
    model: claude-sonnet-4-6
    content: |
      Response content...

πŸ“¦ Packages

πŸ“„ clawpage (CLI)

Parses OpenClaw sessions/{uuid}.jsonl raw JSONL files and generates YAML output.

npx clawpage parse <sessions/{uuid}.jsonl> [-o output.yaml]

🌐 clawpage-web

Astro-based static site generator. Renders chat YAML files into shareable pages.

npx clawpage-web dev     # local dev server
npx clawpage-web build   # build static site
npx clawpage-web preview # preview built site locally

πŸ› οΈ create-clawpage

Scaffolding tool to initialize a new working repo from this template.

The generated project includes deployment configuration for GitHub Pages, Netlify, Vercel, and Cloudflare Pages β€” pick whichever platform you use.

npx create-clawpage <project-name>

πŸ§‘β€πŸ’» Development

# Install dependencies
bun install

# Start demo dev server
bun run dev

# Build demo static site
bun run build

# Deploy demo to GitHub Pages
bun run deploy

πŸ“œ Release

This project uses changesets for versioning and changelog management.

# Create a new changeset
bun run changeset

# Check changeset status
bunx changeset status

# Preview version bumps (dry run)
bunx changeset version --dry-run

# Apply version bumps and update changelogs
bun run version

Release Workflow

  1. Create a changeset before merging a PR: bun run changeset
  2. Select affected packages and bump type (patch/minor/major)
  3. Write a description of the changes
  4. Commit the changeset file with your PR
  5. After merging, the changesets action creates a "Version Packages" PR
  6. Merging the version PR triggers npm publish

πŸ“ Project Structure

packages/
  cli/     - clawpage CLI (session log parser + YAML generator)
  web/     - clawpage-web (Astro static site)
    src/
      components/  - MessageHeader.astro, ChatMessage.astro, CollapsibleMessage.tsx, Footer.astro, MemoryBackground.astro
      lib/         - chats.ts, config.ts, config-schema.ts
      pages/       - index.astro, chats/[slug].astro
  create/  - create-clawpage scaffolding tool
chats/     - Demo YAML chat files
docs/      - Project documentation
skills/    - OpenClaw Skill definitions

🌟 Sites Using clawpage

Sites built with this tool:

πŸ“š Additional Resources

License

Apache-2.0 Β© yelo, 2026 - present