An e-ink writing pad. Write with the pen. Rule a line beneath your words. A reply writes itself back in a flowing hand.
Anthink is the project. The device is the Anthink Slate; the pen
surface this repository began as is g-pad mode; agent sessions arrive over
the Claude bridge. The binary, its data directory, and the RIDDLE_*
environment are still named for their history and are not being churned — the
names above are how the surfaces are described, not a rename of the install
path.
A vision-capable API key is enough to get a reply. gstack and gbrain are optional: when they are there, the pad is I/O for a real corpus; when they are not, pages still land on the tablet.
Derived from riddle (MIT). See NOTICE.
pen (raw evdev)
│ strokes
▼
g-pad ── underline → commit page → PNG ──► oracle (any vision LLM,
│ streams reply sentence-by-sentence)
▼ strokes (handwriting face → skeletonized pen paths)
display
└── quill — full takeover: xochitl stopped, vendor e-ink engine
- This repository — the pad (Rust). Pen input, ink surface, handwriting synthesis, the oracle process, takeover display.
- Quill — clean-room MIT adapter
over the vendor
libqsgepaper.sowaveform engine. We vendor the source; you extract the proprietary.sofrom a device you own. Never committed here (scripts/ci/check-no-vendor-blob.sh).
The pad is a capture surface. Categories, retrieval, and answers belong to the brain behind it. Offline answering is not in this tree: disconnected means capture-and-queue, not unplugged-and-mute.
You need a reMarkable 2 with SSH as root (stock; no developer mode), xovi + AppLoad, and this bundle.
- Build:
rustup target add armv7-unknown-linux-gnueabihf
DEVICE=rm2 ./build-takeover.sh
DEVICE=rm2 ./scripts/make-bundle.sh- Copy
dist/rm2-takeover/g-pad/to the tablet:
scp -O -r dist/rm2-takeover/g-pad root@10.11.99.1:/home/root/xovi/exthome/appload/-
Add a key:
cp oracle.env.example oracle.envin that folder and setRIDDLE_OPENAI_KEY(any OpenAI-compatible vision key). -
In AppLoad: Reload, then g-pad. Write, then rule a line beneath it.
This modifies your device. Takeover stops the reMarkable UI and drives the e-ink engine directly as root. Leave with a 5-finger tap — xochitl restarts. Keep SSH working:
ssh root@10.11.99.1 'systemctl start xochitl'. Not affiliated with reMarkable AS.
libqsgepaper.so is pulled from your tablet by quill/build.sh. It is
gitignored. Do not add it.
| Do this | And |
|---|---|
| Write, then draw a long rule beneath it | The pad reads your ink and replies |
| Flip the marker | Erase |
| Swipe from the left edge | History: current sitting as a thread; back to conversation selector. HISTORY / CORPUS / AGENTS across the top |
| Swipe down from the top | Settings (Stealth) or controls (Guided) |
| Hold five fingers, then release | Leave (takeover) |
| Power button | Sleep; press again to wake where you were (takeover) |
HISTORY splits sittings after six hours of silence. Long replies page with swipe up (next) and swipe down (prev).
The pad reads as well as it writes. Two reading surfaces, both bounded: they show what fits and say what they left out.
- The daily brief — one page, one day, no navigation and no article bodies. See docs/daily-brief.md.
- The Claude bridge — agent sessions under the AGENTS tab: what is running, and the last exchange of each. Reading only; the pad has no keyboard and is not growing one. See docs/claude-bridge.md.
Agent output is split where it matters. Prose is commentary and never ranks as evidence; a commit sha or a path is a fact another system can check, and is recorded as an artifact. See docs/capture-record.md.
Finished pages stay on the tablet under /home/root/g-pad-data/memories
(strokes, transcript, reply). Recent pages ride along with the next request.
Writing "show me what I wrote about…" restores that page in your own hand.
The catalog the model sees is private. It is not on the page. RIDDLE_MEMORY=off
turns this off.
HTTP if RIDDLE_OPENAI_KEY is set, otherwise pi.
export RIDDLE_OPENAI_KEY="sk-..."
export RIDDLE_OPENAI_BASE="https://api.openai.com/v1" # optional
export RIDDLE_OPENAI_MODEL="gpt-4o-mini" # must see imagesPut a prompt in persona.txt next to the binary (or RIDDLE_PERSONA_FILE)
to replace the default pad voice. The default is not a character.
Verify: g-pad --oracle-test icon.png on the device with oracle.env loaded.
cargo testTakeover build needs the reMarkable SDK sysroot and a device to extract
libqsgepaper.so. See docs/rm2-setup.md and
quill/README.md.
MIT. Retain the copyright notices in LICENSE. Quill has its own MIT LICENSE
under quill/.