Skip to main content

remarkable-ai

A CLI that bridges Claude Code and a reMarkable tablet. Push diagrams, draw on them with a pen, pull the annotations back as a PDF.

┌─────────┐  push   ┌───────────┐  draw   ┌─────────┐
│ SVG/PDF ├────────▶│ reMarkable├────────▶│ .rmdoc  │
└─────────┘         └───────────┘         └────┬────┘
                                               │ fetch
                                          ┌────▼────┐
                                          │annotated│
                                          │  PDF    │
                                          └─────────┘

Quickstart

uv tool install remarkable-ai
remarkable-ai setup

That's it. setup downloads the remark binary for your platform and walks you through cloud auth. No Go toolchain needed.

Commands

remarkable-ai setup                        # download remark + authenticate
remarkable-ai push architecture.pdf        # upload PDF to tablet
remarkable-ai push diagram.svg             # auto-converts SVG to PDF first
remarkable-ai fetch architecture           # pull annotated doc, render strokes onto PDF
remarkable-ai blank "Neural Networks"      # push a titled blank page for drawing
remarkable-ai render diagram.svg           # SVG to PNG (for review)
remarkable-ai render diagram.svg --pdf --push-to-tablet
remarkable-ai calibrate                    # push 9-point grid for coordinate alignment
remarkable-ai list                         # list files on tablet

All commands default to the /AI Brainstorm/ folder. Pass --folder to change it.

How fetch works

.rmdoc archive          .rm binary             annotated PDF
┌────────────┐     ┌──────────────┐     ┌───────────────────┐
│ diagram.pdf│     │ SceneLineItem│     │ original PDF      │
│ *.rm files │────▶│  → Stroke[]  │────▶│ + stroke overlay  │
└────────────┘     └──────────────┘     └───────────────────┘
  extract_strokes    parse_strokes        render_annotations
                     _from_rm
  1. remark get pulls the .rmdoc archive from the cloud
  2. The archive is a ZIP with the original PDF and .rm annotation layers. rmscene parses the pen strokes.
  3. Each stroke lands on a transparent PDF overlay (reportlab), merged onto page 1 of the original (pypdf)

The coordinate mapping comes from a calibrated affine transform. Run remarkable-ai calibrate once, circle each crosshair on the tablet, fetch it back. The transform solves from there.

Architecture

src/remarkable_ai/
├── core/                 # Domain types and the transport port. No deps.
│   ├── types.py          # PenColor, Point, Stroke, CalibrationTransform
│   ├── transport.py      # CloudTransport ABC
│   ├── errors.py         # CLIError → RemarkableError, SvgConversionError
│   └── constants.py      # Page dimensions (1152×936)
├── adapters/             # Talks to external tools. Depends on core only.
│   ├── remark_cli.py     # RemarkCLIAdapter — shells out to remark
│   ├── in_memory.py      # InMemoryAdapter — fake transport for tests
│   ├── renderer.py       # .rm parsing + PDF overlay compositing
│   ├── svg.py            # SVG→PNG/PDF (rsvg → cairosvg → Inkscape)
│   ├── templates.py      # Blank page + calibration grid PDFs
│   └── setup.py          # Binary download + install
└── cli/                  # Wires adapters together.
    ├── __init__.py       # App, console, error handling, entry point
    └── commands.py       # setup, push, fetch, list, blank, render, calibrate

Boundaries enforced by tach — core never imports from adapters or cli.

Claude Code skills

Three skills in the skills/ directory turn a conversation into a whiteboard session. Copy them to your project's .claude/skills/.

/explain-me — Claude draws, you read. Generates an SVG diagram, self-reviews it by rendering to PNG, then pushes the final version to your tablet.

/explain — You draw, Claude reads. Pushes a blank page to the tablet. You sketch with the pen. Claude fetches it back and interprets the drawing.

/architect — Collaborative architecture design. Claude proposes structure (any style — hexagonal, layered, flat, whatever fits), pushes a diagram to the tablet. You annotate with the pen. Claude fetches your notes and argues back from principles. Repeat until you agree.

Development

git clone https://github.com/Yassimba/remarkable-ai
cd remarkable-ai
uv sync --all-extras

uv run ruff check src/          # lint
uv run ruff format --check src/ # format
uv run tach check               # boundary enforcement
uv run complexipy src/          # complexity (max 15)

License

MIT

Metadata

Release files for remarkable-ai 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for remarkable-ai 0.2.2
File Size Uploaded Provenance Actions
remarkable_ai-0.2.2.tar.gz 57.0 kB With provenance Details for remarkable_ai-0.2.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for remarkable-ai 0.2.2
File Interpreter ABI Platform Actions
remarkable_ai-0.2.2-py3-none-any.whl Python 3 none any Details for remarkable_ai-0.2.2-py3-none-any.whl

Total release size: 76.9 kB

Release files / remarkable_ai-0.2.2.tar.gz

Download URL remarkable_ai-0.2.2.tar.gz
Size 57.0 kB
Tags Source
SHA-256 checksum
How to use checksums
3b419c14d9414420a71bd90218959ef2aafeca71d6107dc331d680bfc70b9b24
BLAKE2b-256 checksum
How to use checksums
7f462df395aba53fc3ce4be4608c199053809dcc1d2e743ac4c09acdf56d8fca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 1, 2026.

Transparency log

Release files / remarkable_ai-0.2.2-py3-none-any.whl

Download URL remarkable_ai-0.2.2-py3-none-any.whl
Size 19.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f685111ef4cb5020b1fafd4f4a64c5f9d0afe21105641041384408cb38d6d658
BLAKE2b-256 checksum
How to use checksums
840981ab2dc4d91aafa61a538e118f716750a132c084efe4c2a0fc2f39d8e18b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 1, 2026.

Transparency log

Security for remarkable-ai 0.2.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for remarkable_ai-0.2.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page