Ink desk · reMarkable 2

Write on paper.
It writes back.

A small app runs on the reMarkable 2 and takes over the e-ink. Write with your pen, pause, and it draws the answer onto the page in cursive, letter by letter — no page reload. It sketches flowcharts, and you tap to switch models: OpenAI, Claude, Grok, or your own local Qwen — all through agentgateway. Write @forti or @f5 and it even queries your firewall or load balancer — live, as a table.

ON DEVICE
What should I focus on today?
on-device · rm2fb · writing in cursive…
Ship the one thing that scares you. Everything else is noise.
01–05

How it works

A self-contained C app runs on the reMarkable and drives the e-ink directly through rm2fb. It reads your pen, and when you pause it writes the answer onto the page in flowing Dancing Script — no xochitl, no cluster, no page reload.

01 · WRITE

Live ink

Reads the Wacom pen and draws your strokes straight to the panel.

evdev · rm2fb
02 · READ

Capture

On a short pause it grabs the page as a PNG — in-app, on the tablet.

framebuffer → PNG
03 · SEE

Transcribe

gpt-5.5 vision reads your handwriting to text, so any model can answer.

gpt-5.5 · /openai
04 · ASK

Your model

The selected model replies — text, a flowchart, or a sketch — via agentgateway.

OpenAI·Claude·Grok·Qwen
05 · INK

Write it

Rendered onto the e-ink in cursive, letter by letter.

stb_truetype · A2

Gestures: tap the top-right to switch models · tap the top-left to save the page to your library · flip the marker to its eraser end + tap to clear and start fresh · ask it to “diagram X” for an auto-laid-out flowchart.

Your pen in. A cursive answer, in your model’s voice, written back on the page.

Tap to switch models

A bar at the top shows the active model; tap the top-right corner to switch (and the top-left to save the page to your library). Every call goes through your agentgateway (keys in Vault, traced in Langfuse). gpt-5.5 always reads the handwriting; the model you pick does the thinking — so even text-only models work.

OpenAI · gpt-5.5

Frontier multimodal — also the shared “eyes” that read every page.

:30160 /openai

Anthropic · Claude

claude-fable-5 — warm and sharp, one tap away on the same page.

:30398 /anthropic

xAI · Grok-4.3

Grok’s take on the same question, routed through the gateway.

:31397 /grok

Local · Qwen3.6

Runs on your own DGX Spark — no cloud. Private model, on-paper ink.

:31944 /spark

Ask your agents

Beyond chat — write @forti or @f5 and the page answers with live data from your infrastructure. The tag routes your question to a real kagent agent running in the cluster, which talks to the firewall or load balancer, and the reply lands as a table or stat tiles drawn under your handwriting.

01 · TAG

Pick an agent

Start the line with @forti or @f5. A second word picks the shape: table:, stats:, json:, text:.

@forti · @f5
02 · ROUTE

agent-desk

The diary POSTs the transcribed line to a thin in-cluster router. gpt-5.5 normalizes the handwritten tag, so @ Forti still routes.

:30260 /ask
03 · A2A

kagent

agent-desk calls the FortiGate / F5 agent over A2A (JSON-RPC). Each agent owns the device API through its MCP tools.

A2A · kagent · MCP
04 · SHAPE

render-spec

gpt-5.5 (through agentgateway, schema-constrained) folds the agent's answer into a strict table / stats / json / text spec.

agentgateway · json_schema
05 · INK

Draw it

Rendered under your question — a bordered grid or KPI tiles, in a crisp metric font.

stb_truetype · GC16

FortiGate → table

@forti table: what devices are on my wifi → device inventory, DHCP leases, wireless clients — hostname, IP, AP, band, signal.

kagent · fortigate-agent

F5 BIG-IP → stats

@f5 stats: list LTM pools with member status → pools, members up/down, VIPs and LB method as KPI tiles.

kagent · f5-bigip-agent

Defaults: @forti → table, @f5 → stats — override per question with a format word. Every hop (the OCR, the render-spec shaping) runs through agentgateway; the A2A call reaches the kagent agent in-cluster. Keys in Vault, traces in Langfuse.

Handwriting to Network Agents pipeline: pen and diary app write @forti table, gpt-5.5 OCR normalizes the tag via agentgateway, the agent-desk router (POST /ask, NodePort :30260) parses @forti/@f5 and calls the FortiGate/F5 kagent agents over A2A JSON-RPC, each reaching FortiGate REST or BIG-IP iControl through MCP; agentgateway then coerces the answer into a render-spec (table/stats/json/text) drawn under your handwriting as a table or KPI tiles.

Handwrite a question to your firewall. Read the answer as a table on the same page.

Architecture

The app lives on the tablet and calls your agentgateway directly over Wi-Fi — keys in Vault, every question traced in Langfuse. Nothing to inject, nothing in the cluster to babysit.

  reMarkable 2  (OS 3.22 · rm2fb drives the e-ink)
   pen ─► [ diary ] app  ─►  capture page → PNG
                        │  Wi-Fi · agentgateway NodePorts (HTTP)
                        ▼
   ┌─────────────── agentgateway ───────────────┐
   │  gpt-5.5 reads the handwriting → text            │
   │  selected model answers → text / flowchart      │
   │  key from Vault (ESO) · traces → Langfuse       │
   └──────────────────────────────────────────────────┘
     OpenAI · Claude · Grok · local Qwen (DGX Spark)
                        │
                        ▼
   answer written to the e-ink in cursive (letter by letter)

Your pen in. A cursive answer, in your model’s voice, on the page.

Built on

One self-contained binary on the tablet; the only off-device dependency is your gateway.

rm2fb

The rM2 has no usable framebuffer — rm2fb (timower/rM2-stuff) drives the e-ink so the app can paint it directly. Needs OS ≤3.22, so the tablet was downgraded 3.27 → 3.22.4.2 (3.27 kept as fallback).

SWTCON · libqsgepaper · v0.1.4

On-device app (C)

Pen via evdev, direct framebuffer draw, page capture to PNG, HTTP to the gateway, and mermaid-style flowchart auto-layout. Cross-compiled for armv7, zero runtime deps.

diary.c · toltec toolchain

agentgateway

The app hits OpenAI-compatible routes on NodePorts; the gateway injects each key and records the trace. Swap models without touching the tablet.

/openai · /anthropic · /grok · /spark

stb_truetype + Dancing Script

Answers are rendered glyph-by-glyph in a real cursive font — smart punctuation normalized to ASCII so nothing renders as a box.

92px · A2 waveform

stb_image_write + cJSON

The page is captured to PNG for the vision call; the model’s JSON reply (text or a nodes+edges graph) is parsed in-app.

framebuffer → PNG · JSON → flowchart

Langfuse

Because every answer is a gateway call, each “question” is a trace — latency, tokens, and cost, like any other lab workload.

observability, for free

Setup

For the on-device app — reMarkable 2, OS ≤ 3.22 (3.27 kept as a fallback partition):

Downgrade to OS ≤ 3.22

rm2fb only supports ≤3.22, so flash 3.22.4.2 to the spare A/B partition and mask auto-update. Manual rootfs dd — the clean updater path fails on 2026 firmware.

Install rm2fb

Place rm2fb_server + the client lib on the tablet (timower/rM2-stuff v0.1.4). It drives the e-ink once xochitl is stopped.

Build the app

Cross-compile diary.c for armv7 with the toltec toolchain; copy the binary and a handwriting font (diary-font.ttf) to the tablet.

Run it

sh diary-start.sh stops xochitl and starts rm2fb + the diary. diary-stop.sh returns to the normal reMarkable UI.

Configuration

Everything is set in diary.c — the MODELS[] table plus a few tunables:

SettingPurposeValue
MODELS[]Tap-to-cycle list — label · NodePort · path · model4 entries
OCR modelReads the handwriting for every modelgpt-5.5 · :30160 /openai
Gateway hostagentgateway node address (NodePorts)172.16.10.155
FontCursive typeface + size on the e-inkDancing Script · 92px
Idle triggerPause after writing before it answers~2.5s
Switch modelTap to cycle the active modeltop-right corner
Save pageTap to write the page to your library as a PDFtop-left corner
Clear pageGesture to wipe and start fresheraser end + tap

Model endpoints are the agentgateway NodePorts listed in the Models section — plain HTTP; the gateway injects the keys.

Built & proven

Running on the real device today — validated end-to-end.

Device
rM2 · 3.22.4.2
Display
rm2fb e-ink
Handwriting
live cursive
Diagrams
auto flowcharts
Models
4 · tap-switch
Agents
@forti · @f5
Gestures
erase · switch