ForestNote CLAUDE.md

ForestNote CLAUDE.md is an instructions file for coding agents from jdkruzr/ForestNote. It costs 2,041 tokens per session, scanned A, original, Apache-2.0.

Project instructions for ForestNote, an Android note-taking app for low-latency stylus handwriting. They describe its Kotlin and Gradle setup, supported e-ink devices, storage, and project structure.

In plain words
What is it for?
Developing and debugging ForestNote, building it with Gradle, working with Viwoods and Boox pen input, and inspecting or preserving its SQLite-based note storage.
Why use it?
They give a coding agent the project-specific details needed to make changes without guessing how handwriting input, device backends, builds, or saved notes work.

Instructions file

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add instructions/jdkruzr/forestnote/claude-md
Clone the repo
git clone --depth 1 https://github.com/jdkruzr/ForestNote

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for ForestNote CLAUDE.md

README.md
[![agentmods](https://agentmods.dev/badge/instructions/jdkruzr/forestnote/claude-md.svg)](https://agentmods.dev/instructions/jdkruzr/forestnote/claude-md)
Your own site
<a href="https://agentmods.dev/instructions/jdkruzr/forestnote/claude-md"><img src="https://agentmods.dev/badge/instructions/jdkruzr/forestnote/claude-md.svg" alt="Measured on agentmods" height="20"></a>
Per session 2,041 This file is loaded in full into every session.
When invoked 2,041 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.02041 $0.02041
Opus 5 $0.01020 $0.01020
Sonnet 5 $0.00408 $0.00408
Haiku 4.5 $0.00204 $0.00204

Measured 4d ago against content hash 58e0336219a4, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

ForestNote CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

CLAUDE.md · 61 lines

How it starts

The opening of the file, as written. The whole thing — 61 lines — stays where its author put it; the contents beside it link to each section on GitHub.

ForestNote

Last verified: 2026-08-23 (ForestNote 2.0 local-first + portable brushes)

E-ink note-taking app for low-latency stylus handwriting. Two firmware-latency ink paths sit behind one InkBackend seam: the Viwoods AiPaper Mini via reverse-engineered ENote callbacks (direct digitizer input on ENote's worker thread → app bitmap → partial panel refresh), and Boox/Onyx devices via the published Onyx Pen SDK (TouchHelper/RawInputCallback — firmware renders live ink). A generic View.invalidate() fallback covers any other Android device. Backend is auto-detected at launch; stored stroke DATA is identical across platforms (only the live on-panel transport differs).

Tech Stack

  • Language: Kotlin (Android)
  • Min SDK: 30, Target SDK: 30, Compile SDK: 35
  • Build: Gradle with convention plugins in build-logic/
  • Storage: SQLDelight 2.0.2 (SQLite). The single library file (default.forestnote) lives at /sdcard/ForestNote/ (top-level shared external storage) so it survives an uninstall/reinstall (chiefly the debug→release signing-key swap) and is Termux-inspectable. Creating a top-level /sdcard folder on API 30+ needs MANAGE_EXTERNAL_STORAGE ("All files access"), which MainActivity requests on first launch; until granted, the datastore falls back to app-private storage and migrates out to /sdcard once granted. Redirected via StorageLocation/ExternalStorageContext in core:format — see core/format/CLAUDE.md. Secrets (EncryptedSharedPreferences) stay in private storage.
  • Device↔server sync: the RhizomeSync library (io.rhizome:rhizome-core/-sqlite/-http:0.8.2, published to mavenLocal from ~/rhizome) — the schema-driven, row-level-LWW, HLC-stamped sync core extracted from FN+UB so the correctness-critical algorithm lives in one place. core:format binds it via SqliteStorageAdapter + ForestNoteRegistry (wire v5, hash ed367ffd…: exact page width/height + portable brush identity/version/seed/dynamics); app:notes drives the engine. Sync is explicitly opt-in; a fresh install is a complete local-only app.
  • Geometry: Jetpack Ink API 1.0.0 (brush/geometry/strokes)
  • Boox/Onyx ink: Onyx Pen SDK (onyxsdk-pen:1.5.4 + -device:1.3.5 + -base:1.8.5) + hiddenapibypass:6.1, used only by BooxInkBackend in core:ink, runtime-gated to Onyx devices (inert elsewhere); cleartext-HTTP Maven repo. See core/ink/CLAUDE.md for the firmware raw-drawing model (two independent firmware switches, canvas-only surface, freeze-toggle reconcile)
  • UI: Android Views (no Compose), Material 3
  • Handwriting recognition: Google ML Kit Digital Ink 18.1.0 (stroke-native; bundled-only artifact requires GMS + one-time per-language ~20 MB model download via RemoteModelManager — host tablet has GMS + Google account)
  • CalDAV transport: OkHttp 4.12.0 (scoped to app/notes/caldav/ only — the device-sync engine rides HttpURLConnection via RhizomeSync's io.rhizome.http.HttpUrlTransport, dependency-light per the original core:sync rationale, now upstreamed into the library). UI never PUTs synchronously: the lasso → task path enqueues into a local SQLite outbox (caldav_outbox, LOCAL-ONLY) and a CalDavOutboxDrainer (lifecycle peer of SyncController) does the PUTs, with a NetworkAvailabilityMonitor kicking drainNow() when WiFi comes back. No WorkManager — the AiPaper is foreground-driven, and SQLite + lifecycle hooks + NetworkCallback cover the actual failure mode
  • Secret storage: androidx.security:security-crypto 1.1.0-alpha06 (EncryptedSharedPreferences, AES-256 key in Android Keystore) — owns sync + CalDAV credentials; Settings JSON blob is non-secrets only

Read the full file on GitHub · 61 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 4d ago First seen · 61 lines · 2,041 tokens per session scan A 58e0336219a4

Subscribe to this mod's changes

ForestNote CLAUDE.md is an instructions file published in the GitHub repository jdkruzr/ForestNote (11 stars, last pushed 10d ago), licensed Apache-2.0. It adds 2,041 tokens to every session, about $0.0102 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.