← ClaudeAtlas

reading-companionlisted

Turn an EPUB into an e-reader-grade, annotatable HTML reading surface plus an auto-generated active-reading plan. Annotations live in a sidecar data file (W3C TextQuote anchors) and survive HTML regeneration via a paragraph-scoped re-attach algorithm. Use when the user wants to read an EPUB with durable highlights, generate a structure map / reading questions, or export highlights-in-context. STDLIB-ONLY Python tools; no external dependencies.
Sheldon-92/TAD · ★ 3 · AI & Automation · score 76
Install: claude install-skill Sheldon-92/TAD
# Reading Companion (Phase 2 — Reading Surface) Turn an **EPUB** into: - a **self-contained HTML reader** (serif typography, cream/dark themes, TOC, progress, pagination/scroll, keyboard nav) with **in-flow highlights + notes**; - an **active-reading plan** (structure map + reading path + adversarial questions); - **highlights-in-context** Markdown export. The truth source for annotations is a **sidecar JSON** (`reading-state.json`). The HTML is a regenerable *view* — delete it and re-render, and highlights re-attach to the correct paragraph. This is the reading surface only; there is no live AI bridge yet (that is Phase 3). ## Tools All tools are Python **stdlib only** (no `pip install` needed). Run with `python3`. | Tool | Purpose | |------|---------| | `tools/ingest.py <file-or-url> -o content.json` | **(Phase 4) Unified entry** — routes by extension/scheme to the right adapter: `.epub`→epub-ingest, `.pdf`→pdf-ingest, `.txt`/`.md`→text-ingest, `http(s)://`→url-ingest. Unknown input → clear non-zero error. Prefer this over calling adapters directly. | | `tools/epub-ingest.py <book.epub> -o content.json` | Parse EPUB → normalized `content.json` (chapters → paragraphs with stable `pid`, `source_hash`). | | `tools/text-ingest.py <file.txt\|file.md> -o content.json` | **(Phase 4)** TXT/Markdown → content.json. MD `#`/`##`/`###` → `tag` h1/h2/h3 (heading vs body); TXT splits on blank lines. Empty input → fail loud (no file). | | `tools/url-ingest.py <http(s) URL> -o conte