---
id: jp-learning-and-anki-tooling/08-planned-tool-the-shared-learner-model
title: 'Project status: Japanese immersion learning with Anki and selective glossing:
  8. Planned tool: the shared learner model'
report: https://ai.hiina.space/reports/jp-learning-and-anki-tooling.md
section: 8
version: 1
updated: '2026-10-27'
author: Hiina
---

Index of everything on this site: https://ai.hiina.space/index.md

# Project status: Japanese immersion learning with Anki and selective glossing: 8. Planned tool: the shared learner model

- Section 8 of 12 of the report "Project status: Japanese immersion learning with Anki and selective glossing" by Hiina (v1, updated 2026-10-27)
- Report overview and contents: https://ai.hiina.space/reports/jp-learning-and-anki-tooling.md
- Previous: https://ai.hiina.space/reports/jp-learning-and-anki-tooling/07-planned-tools-hybrid-reading-and-the-selective.md
- Next: https://ai.hiina.space/reports/jp-learning-and-anki-tooling/09-ranking-and-staged-plan.md

## 8. Planned tool: the shared learner model

### (e) A shared service and data contract

All four tool ideas need the same answer: for this lemma or grammar point, right now, how likely is the learner to know it? Today, Jiten's import, asbplayer's annotation database and the premine script each rebuild that answer from an Anki word field, separately. Surface form versus dictionary form is the main source of mismatch, which is why Jiten has a "parse words instead of importing directly" option ([Jiten import](https://jiten.moe/guides/importing-known-words-from-anki); [asbplayer annotation](https://docs.asbplayer.dev/docs/guides/annotation)).

**Contract (proposal).**

- **Key:** each lemma keyed by JMdict entry ID, with surface and reading as attributes.
- **State per lemma:** status (unknown, encountered, learning, known, blacklisted-name, mastered-by-wordset); linked Anki card IDs; FSRS stability, difficulty and current retrievability, read through ankimcp; encounter count and last-seen time per media; lookup count and highest hint rung reached.
- **Grammar points:** a stable ID, linked cards and corpus sentences, and their own FSRS-style state from (b).
- **Event log:** an append-only log of reviews, exposures, lookups and hint-rung events from every tool.

**Service.** Runs next to Anki as SQLite plus a small local HTTP API:

- `GET /known?lemmas=…` returns status and retrievability.
- `POST /tokenize` runs Sudachi with JMdict linking.
- `POST /event` appends to the log.
- `GET /coverage?text=…` returns known-token share.

Sync from Anki runs on a timer and on demand. Jiten can serve as an optional second source and as a coverage cross-check. Using retrievability rather than a binary known flag is the point: a word with R = 0.6 deserves a rung-1 highlight, not silence.

**Why modest machinery.** Duolingo's HLR and Anki's FSRS are both per-item memory models. The companion memory-palace report found that on the 10k-user benchmark, per-user FSRS-6 trails per-user GRU/LSTM models only slightly in log loss (0.346 against about 0.333). Only a pooled 2.8M-parameter RWKV model does clearly better, and it is not a drop-in scheduler ([srs-benchmark](https://github.com/open-spaced-repetition/srs-benchmark)). Content-aware models mainly help cold-start cards ([KAR3L](https://arxiv.org/pdf/2402.12291)). The new value is not a better memory model. It is putting immersion exposures and lookups into the same table as reviews, which no existing tool does.

| Field | Assessment |
|---|---|
| Effort | S for v0 (known-lemma set plus R, read-only); M with events and grammar points |
| Payoff | Enabling: everything else gets better or becomes possible |
| Risks | Sync drift when Anki is closed; dependence on AnkiConnect or ankimcp |
| Gate | v0 reproduces Jiten's coverage figure for a show within a few points |

---

Text licensed CC BY 4.0 (attribution: Hiina, ai.hiina.space). Source: https://github.com/hiinaspace/ai-hiina-space
