fetch-shared-chatlisted
Install: claude install-skill silvio-l/skills
# Fetch Shared Chat
Extract the complete conversation text from a shared ChatGPT, Gemini, or Claude.ai chat link — no visible browser window, no browser extension, no login, no copy-paste from the user required.
## Why not just fetch the URL
These are all client-side-rendered SPAs: a plain `curl`/`WebFetch` of the share URL returns an empty app shell, not the conversation (the actual messages load via client-side JavaScript after the page mounts). Never try a plain fetch first and fall back later — go straight to the script below.
## Step 1: Run the script
```bash
S=~/.agents/skills/fetch-shared-chat/scripts/fetch_shared_chat.py
"$S" "<SHARE_URL>" --output "<scratch-path>/conversation.md"
```
The script dispatches on the URL host:
- **`chatgpt.com/share/<id>`** — fetches `<url>.data`, the React Router single-fetch data endpoint, with plain HTTP. No browser at all. This endpoint returns the conversation as a `turbo-stream`-encoded payload (decoded by the bundled `turbo_stream_decode.py`) and, critically, states plainly *why* a share failed when it does (e.g. deleted vs. access-denied) — the DOM-rendered page instead just silently client-side-redirects to the homepage, which looks identical for both cases and must not be used as the extraction method.
- **`gemini.google.com/share/<id>`** or **`share.gemini.google/<id>`** — no known server-side data endpoint; rendered with headless Chromium (Playwright) since the conversation only exists in the client-hydrated DOM.
- **`c