|
The reMarkable skill for AI agents: say "send this to my tablet" — get a beautifully typeset e-ink document back. Native skill for Hermes Agent, works in any SKILL.md-compatible agent (Claude Code, OpenCode, …). Drop a URL, docx, epub, pdf, raw HTML with embedded diagrams or a voice note into the chat — the agent replies with preview pages and, on your approval, a perfectly typeset PDF lands on the tablet. The skill guarantees the e-ink craft the panel deserves: pages sized 1:1 to the 226 dpi screen, real margins, Floyd–Steinberg halftone images, mermaid sources rendered to crisp grayscale diagrams, and a contents page whose numbers are measured from the rendered PDF, not guessed. |
device render: reMarkable |
hermes skills install forcewake/remarkable-send/skills/remarkable-sendThe skill lives in skills/remarkable-send/ —
SKILL.md plus five deterministic scripts (engine, markdown cleaner, mermaid
renderer, image ditherer, document extractor) and headless Chrome. Agents
follow the procedure; humans can drive the same scripts as a plain CLI.
The skill ships a review-first flow the agent follows out of the box:
you drop a document into the chat
→ extract_document.py (docx/epub/pdf/html → markdown, embedded images pulled out)
→ prepare_markdown.py (strips nav walls/anchors, renders mermaid → e-ink PNGs)
→ remarkable_send.py (grid/book/compact theme, TOC with MEASURED page numbers)
→ preview_pages.py (cuts 4 review pages)
→ agent sends you the previews and asks: "заливать?" ← nothing uploads without your yes
→ upload to /Inbox · confirm with name, folder, page count
In production this runs as a Telegram drop-zone topic for Hermes: Pavel throws in a link or file, the agent replies with preview pages, and only an explicit approval reaches the tablet. The daily-intelligence digest that inspired this skill ships through the same engine every morning.
hermes skills install forcewake/remarkable-send/skills/remarkable-sendgit clone https://github.com/forcewake/remarkable-send.git ~/.claude/skills/remarkable-send(adjust the destination to wherever your agent loads skills from; the skill
references its scripts via ${HERMES_SKILL_DIR} / its own directory)
git clone https://github.com/forcewake/remarkable-send.git
cd remarkable-send
pip install -r requirements.txt
./skills/remarkable-send/scripts/remarkable_send.py --file article.md --source example.com --dry-run| Dependency | Notes |
|---|---|
| Python 3.10+ | pip install -r requirements.txt (markdown, pypdf, pillow) |
| Chrome/Chromium | headless print engine, on PATH |
rmapi (ddvk fork) |
cloud upload; found via RMAPI_BIN, ~/bin/rmapi or PATH. juruen/rmapi is dead — reMarkable changed its auth |
poppler (pdftotext, pdftoppm) |
page measuring & previews |
pip install -r requirements.txt |
markdown (tables/footnotes), pypdf (PDF metadata), pillow (image preprocessing) |
Authenticate the tablet link once (one-time code from
my.remarkable.com/device/browser/connect,
then echo CODE | rmapi ls /). Cloud sync to the device requires a
reMarkable Connect subscription.
Ask your agent (the trigger phrases are baked into the skill):
Send https://example.com/long-article to my reMarkable. Отправь это на римарк / скинь на планшет — тоже работает.
or drive it yourself:
# plain send
./scripts/remarkable_send.py --file essay.md --source newyorker.com
# a long read, serif
./scripts/remarkable_send.py --file chapter.md --theme book --folder "/Books"
# a digest: every section opens its own page
./scripts/remarkable_send.py --file digest.md --sections pages
# an article with photos: dither first, then send
./scripts/preprocess_images.py trip.md --workdir /tmp/img --out trip.eink.md
./scripts/remarkable_send.py --file trip.eink.md --source example.com
# what's on the tablet
./scripts/remarkable_manage.py list --folder "/Inbox"Every render lands in ~/remarkable-out/YYYY-MM/ locally before upload.
Sources and full PDFs in examples/. Pages below are actual
renders — click a page to open the PDF.
Signal Digest — agent-curated intelligence
The form this pipeline ships daily in production: one news item per page,
section badges, scores, sources, watchlist discipline. Real events.
Source: signal-digest.md · 9 pages · --sections pages
The E-Ink Reading Pipeline — the full tour
Contents page with measured numbers, typography manifesto, decision table,
halftone plates, boxed code. Source: showcase.md · 6 pages
Six-column tables, code taller than a page, a 30-row table with repeated
headers, unicode soup (CJK, RTL, zalgo), base64, a 300-word monoparagraph.
Source: brutal-layout.md · 11 pages
Theme: Book — the serif longform
Source: theme-book.md · --theme book --sections pages · 5 pages
markdown ──▶ md_to_html ──▶ Grid CSS ──▶ chrome --headless --print-to-pdf
│ │
│ pdftotext measures reality:
│ where did each section land?
▼ ▼
preprocess_images.py re-render with TOC numbers
(grayscale + FS dither) │
▼
pypdf: outline is chrome's,
metadata + ship via rmapi
The layout never trusts a screen-space measurement for print: the rendered PDF itself is parsed to find where sections really landed, and anything that spilled gets squeezed and re-rendered. Pagination is a fact, not a hope.
Full internals in references/: the
design system (every value and its reason),
content preparation, and
rmapi operations (every trap we hit:
em-dash name matching, 429 bursts, tree-cache duplicates).
- reMarkable 2 geometry (works on any device that displays PDFs, but margins and font scale are tuned for the 10.3" 226 dpi panel; Paper Pro values are one CSS block away)
- No two-column reflow, no font selection on-device — that's PDF, that's the trade for pixel-exact pages
- Images are plates, not inline thumbnails
MIT © Pavel Nasovich
















