About csctf
CSCTF is a command-line tool that converts AI conversation share links into Markdown and static HTML. It is for people archiving or publishing conversations, and preserves code fences, generates stable filenames, and optionally publishes to GitHub Pages.
Key features
- 01Convert ChatGPT, Gemini, Grok, and Claude share links
- 02Create Markdown with preserved code fences
- 03Generate static HTML with a table of contents and syntax highlighting
- 04Choose output formats, paths, and logging options
- 05Publish to GitHub Pages
Use cases
- 01Save a shared AI conversation as a Markdown file
- 02Create static HTML for browsing and sharing
- 03Archive multiple conversation links in a batch
- 04Publish a conversation archive to GitHub Pages
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dicklesworthstone/ agent_flywheel_clawdbot_skills_and_integrations --skill csctfAfter installing, type/csctfin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/ALGORITHMS.mdCOMMANDS.mdGITHUB-PAGES.mdDetails
From the project READMECSCTF — Chat Shared Conversation To File
Core Capability: Convert AI share links into clean Markdown + HTML with preserved code fences, stable filenames, and optional GitHub Pages publishing.
Quick Start
# Install
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/chat_shared_conversation_to_file/main/install.sh | bash
# Convert any share link
csctf https://chatgpt.com/share/69343092-91ac-800b-996c-7552461b9b70
Output:
<conversation_title>.md— Clean Markdown with preserved code fences<conversation_title>.html— Styled static HTML (zero JavaScript)
THE EXACT PROMPT — Convert Share Link
Convert this conversation to Markdown:
csctf <share-url>
# Example providers:
csctf https://chatgpt.com/share/69343092-91ac-800b-996c-7552461b9b70
csctf https://gemini.google.com/share/66d944b0e6b9
csctf https://grok.com/share/bGVnYWN5_d5329c61-f497-40b7-9472-c555fa71af9c
csctf https://claude.ai/share/549c846d-f6c8-411c-9039-a9a14db376cf
THE EXACT PROMPT — Publish to GitHub Pages
# Publish with defaults (creates repo if needed)
csctf <url> --publish-to-gh-pages --yes
# Save settings for future use
csctf <url> --publish-to-gh-pages --remember --yes
# Subsequent: just use --yes
csctf <url> --yes
# Custom repo
csctf <url> --publish-to-gh-pages \
--gh-pages-repo myuser/my-chats \
--gh-pages-branch main \
--yes
THE EXACT PROMPT — Batch Archive
# Archive multiple conversations
for url in $URLS; do
csctf "$url" --outfile ~/archive/ --quiet
done
# Markdown only (faster, smaller)
csctf <url> --md-only --quiet
# HTML only for embedding
csctf <url> --html-only --outfile site/chat.html
Supported Providers
| Provider | URL Pattern | Method |
|---|---|---|
| ChatGPT | chatgpt.com/share/* | Headless Chromium |
| Gemini | gemini.google.com/share/* | Headless Chromium |
| Grok | grok.com/share/* | Headless Chromium |
| Claude | claude.ai/share/* | Your Chrome session |
Claude.ai Special Handling
Claude.ai uses Cloudflare protection. CSCTF handles this automatically:
- Copies your Chrome session cookies to a temporary profile
- Launches Chrome with remote debugging
- Extracts conversation via Chrome DevTools Protocol
Requirement: Chrome installed + logged into claude.ai
Essential Commands
| Flag | Description |
|---|---|
--outfile <path> | Override output path |
--md-only | Skip HTML output |
--html-only | Skip Markdown output |
--quiet | Minimal logging |
--timeout-ms <ms> | Navigation timeout (default: 60000) |
--publish-to-gh-pages | Publish to GitHub Pages |
--yes | Skip confirmation prompts |
Output Format
Markdown
# Conversation: <Title>
**Source:** https://chatgpt.com/share/...
**Retrieved:** 2026-01-08T15:30:00Z
## User
How do I sort an array in Python?
## Assistant
Here's how to sort:
```python
my_list.sort()
### HTML Features
- **Zero JavaScript** — Safe for any hosting
- **Inline CSS** — Light/dark mode via `prefers-color-scheme`
- **Syntax highlighting** — highlight.js themes inline
- **Table of contents** — Auto-generated from headings
---
## Filename Generation
"How to Build a REST API" → how_to_build_a_rest_api.md "Python Tips & Tricks!" → python_tips_tricks.md "File exists already" → file_exists_already_2.md
Rules: lowercase, non-alphanumerics → `_`, max 120 chars, collision suffix
---
## Performance
| Phase | Time |
|-------|------|
| First run (Chromium download) | 30-60s |
| Subsequent runs | 5-15s |
| Claude.ai (uses local Chrome) | 5-10s |
---
## Troubleshooting
| Symptom | Fix |
|---------|-----|
| "No messages found" | Link is private; verify public share |
| Bot detection | Retry; verify link in browser |
| Timeout | Raise `--timeout-ms 90000` |
| Publish fails (auth) | Ensure `gh auth status` passes |
| Claude.ai Cloudflare | Complete verification in Chrome window |
---
## Installation
```bash
# One-liner
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/chat_shared_conversation_to_file/main/install.sh | bash
# Pin version
VERSION=v1.0.0 curl -fsSL .../install.sh | bash
# Verify checksum
curl -fsSL .../install.sh | bash -s -- --verify
References
| Topic | Reference |
|---|---|
| Full command reference | COMMANDS.md |
| Processing algorithms | ALGORITHMS.md |
| GitHub Pages setup | GITHUB-PAGES.md |