content-rescue πŸ›Ÿ

SkillDev tools

Platforms enshittify; your writing, images, and talks shouldn't be hostage to them. This skill repatriates your own content (and clearly public material β€” HN is still good) into local, diffable, universal Markdown + assets under version control. If it's not on git, it don't exist.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the content-rescue πŸ›Ÿ skill

About this capability

MOOLLM

What this skill tells your AI

The instructions your AI receives, as published by simhacker/moollm in skills/content-rescue/SKILL.md and read by ahel’s review.

Rescue your content from enshittified platforms. Own it as clean, git-committed, universal Markdown + local assets you control and republish.

Part of MOOLLM. Glance: GLANCE.yml Β· Interface: CARD.yml Β· Scripts: scripts/

Why

Platforms enshittify; your writing, images, and talks shouldn't be hostage to them. This skill repatriates your own content (and clearly public material β€” HN is still good) into local, diffable, universal Markdown + assets under version control. If it's not on git, it don't exist.

The core trick

The page may be walled; the asset CDN usually isn't.

A curl of a Medium article is often bot-walled to a ~5KB stub. But:

  1. the image CDN (miro.medium.com) serves assets freely, and
  2. the rendered page embeds window.__APOLLO_STATE__ β€” every image id + caption, in paragraph order, independent of lazy-loading.

So we extract the manifest from embedded page state in a real browser, then fetch assets directly from the open CDN. (Born from the 2026-06-27 Will-Wright rescue: 167 images pulled in order, captioned, and wired into the local transcript.)

Protocol

EXTRACT-MANIFEST FROM <url> [VIA browser]

When curl is walled, open the page in a real browser. The Cursor browser MCP is ideal headless:

  • browser_navigate β†’ the article,
  • browser_cdp β†’ Runtime.evaluate (returnByValue: true) running scripts/medium_extract_manifest.js (image block) β†’ ordered index|id|caption lines; run the video block for embedded YouTube ids.

Save the image lines to manifest.psv. (Generic sites: derive id|caption from <figure>/srcset/JSON-LD, or put full asset URLs in column 2.)

FETCH-ASSETS FROM <manifest.psv> TO <dir>

python3 scripts/fetch_images.py manifest.psv images --source-url '<article url>'

Downloads each asset in order as NNN-slug.ext (extension auto-detected), and emits images/INDEX.md (a captioned, ordered gallery = an illustrated transcript) and images/map.tsv. Re-runnable (skips existing).

WIRE-MARKDOWN <text-capture> WITH <gallery>

Localize a text capture into clean universal Markdown:

  • fix the "images omitted" placeholder; link the gallery (images/INDEX.md),
  • inline figures at their caption anchors where the prose preserves them,
  • collect embedded video links into a videos.md,
  • keep provenance + third-party credits.

SCRAPE-HN <user|thread>

Harvest a user's HN comments/threads (HN's API/site are scrape-friendly) into YAML/Markdown capture files. (HN is one of the good ones β€” preserve, don't fight it.)

Ethics

  • For the author's own content or clearly public material. Respect robots/ToS and others' copyright; credit third-party assets (the gallery caption carries it).
  • Polite single-pass fetches; re-runnable so you don't hammer.

Roadmap (sibling skills, planned β€” see CARD.yml related_planned_skills)

  • youtube β€” transcripts/STT/cleanup, speaker + section splitting, timecoded refs, ingest interviews β†’ STT β†’ cleanup, publish via the Data API.
  • stream-deck β€” Twitch + OBS (and alternatives/plugins) screencast control + metadata.
  • publish-sync β€” git-centric auto-publish + cross-service sync (YouTube/Twitch/GitHub) via GitHub Action workflows.

Part of MOOLLM

A standalone, publishable skill. Related: skills/card (a rescued page can become a CARD), skills/cursor-mirror (introspection sibling, same scripts/ pattern).

Signals

GitHub stars
52
Forks
5
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
content-rescue
Source
github.com/simhacker/moollm