Learn Vim disguised as a cyberpunk spy thriller — an AI handler hands you missions that are really Vim exercises. One core, three targets: Obsidian plugin, web app, and Tauri desktop. https://jkaindl.codeberg.page/neurovim/
  • TypeScript 89.4%
  • CSS 5.5%
  • JavaScript 3.5%
  • Shell 1%
  • HTML 0.5%
Find a file
Johannes Kaindl 8f3c15a898
fix(content): M-03 nennt seine Zielwerte, Token-Invariante fängt die Klasse
M-03 verlangte drei Wortersetzungen (SCAN-7741 → UNIT-7741, TRACE-3392 →
RELAY-3392, WATCH-0012 → NODE-0012), die weder in der Transmission noch im
Briefing vorkamen — ohne HINT nur durch Raten lösbar. Gleiche Fehlerklasse
wie M-02/M-06/KATA-03, gefunden beim Spielen im Obsidian-Plugin.

Der Ableitbarkeits-Test von 2026-07-24 konnte das strukturell nicht sehen:
er vergleicht zeilenweise, und eine In-Place-Wortersetzung lässt den Rest
der Zeile stehen — die Bigram-Ähnlichkeit bleibt weit über der Schwelle.

Fix zweigeteilt: Ersetzungsliste in die Briefing-DIRECTIVE (Muster
R-16/R-24/M-06) und ein zweiter Invariant-Test eine Granularität tiefer,
der jedes Solution-Token gegen Transmission+Briefing prüft. Erstlauf meldete
10 Missionen, alle triagiert: 9 legitim (Tippfehler, Formeln, FRAGMENT-10
als verlinkte Quelle) und als EXPLAINED_TOKENS begründet, 1 defekt.

210 Tests, 4-Workspace-Typecheck, Lint grün.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-29 09:43:06 +02:00
.forgejo/workflows ci: target Codeberg shared runners (codeberg-small, not docker) 2026-05-29 20:56:32 +02:00
.gitea/workflows ci: fail on stale generated content 2026-06-03 12:17:01 +02:00
.github/workflows ci: bump GitHub Actions off Node 20 (deprecation 2026-06-16) 2026-06-15 16:41:55 +02:00
docs docs(screenshots): refresh first-run-hint after skill-tag color fix 2026-06-15 14:18:41 +02:00
experiments docs+i18n: make the whole repo English 2026-05-29 17:30:09 +02:00
packages fix(content): M-03 nennt seine Zielwerte, Token-Invariante fängt die Klasse 2026-07-29 09:43:06 +02:00
scripts fix(scripts): bump-version Cargo.toml edit works under BSD sed 2026-06-15 16:24:18 +02:00
.editorconfig feat: brand kit, OSS files, GitHub Pages deploy 2026-05-29 17:50:14 +02:00
.gitignore chore(conv): exclude .remember/ via repo .gitignore (CORE-AGENT-03) 2026-06-10 17:07:31 +02:00
AGENTS.md docs(agents): v0.2.4 shipped — status block + roadmap 2026-06-15 16:27:08 +02:00
CHANGELOG.md chore(release): v0.2.4 2026-06-15 16:24:30 +02:00
CLA.md docs: dual-licensing model + Contributor License Agreement 2026-06-01 17:33:43 +02:00
CLAUDE.md chore: agent scaffolding + project memory 2026-05-29 14:11:32 +02:00
CONTRIBUTING.md docs: dual-licensing model + Contributor License Agreement 2026-06-01 17:33:43 +02:00
eslint.config.mjs chore(lint): add ESLint 10 flat config + root lint script (PROF-TS-01) 2026-06-10 17:17:12 +02:00
LICENSE docs+license: rewrite README (reader-first) + relicense to AGPL-3.0 2026-05-29 22:57:20 +02:00
LICENSE-DOCS docs(conv): add LICENSE-DOCS (CC BY-SA 4.0) for docs + narrative content (CORE-META-08) 2026-06-10 17:07:31 +02:00
LICENSING.md docs: dual-licensing model + Contributor License Agreement 2026-06-01 17:33:43 +02:00
package-lock.json chore(release): v0.2.4 2026-06-15 16:24:30 +02:00
package.json chore(release): v0.2.4 2026-06-15 16:24:30 +02:00
README.md docs(manual): Diátaxis user manual under docs/manual/ (CORE-META-04) 2026-06-15 13:29:00 +02:00
SECURITY.md docs(macos): document Developer ID signing + notarization for the desktop build 2026-06-01 21:19:12 +02:00
tsconfig.base.json scaffold: 4-package monorepo 2026-05-28 16:58:26 +02:00

NeuroVim — a Vim-learning game wrapped in a cyberpunk spy-thriller

NeuroVim

License: AGPL-3.0 Play in browser

Learn Vim by playing a cyberpunk spy-thriller.

Play in the browser (GitHub Pages mirror)  ·  Desktop downloads

An AI handler named CIPHER assigns you "missions" that are really Vim exercises — restore CORP-corrupted documents, fix glitched transmissions, beat the clock. You end up learning Vim almost by accident; the spy-thriller is the hook. Same game ships three ways from one codebase: a web app, an Obsidian plugin, and a native desktop app.

Screenshots

Welcome
Welcome — CIPHER intro
NEXUS
NEXUS — mission picker + status
Briefing
Briefing — story before each mission
Editor
Editor — CodeMirror 6 + Vim
Result
Result — mission complete
Sandbox
THE RAVEN — free-play sandbox
Lore Archive
Archive — unlockable lore & loot
Cheatsheet
Cheatsheet — Vim keymap overlay

Features

  • Story-driven campaign — a curriculum of Vim missions (motions, find-char, the dot command, operators, text objects, search & replace, macros, registers, visual-block, global commands, regex) wrapped in a narrative that unlocks progressively as you level up.
  • Real editor — CodeMirror 6 with actual Vim keybindings, not a fake terminal.
  • THE RAVEN sandbox — free-play: fix N injected glitches against the clock, beat your best (EASY / NORMAL / HARD).
  • Progression & mastery — XP, levels, progressive mission unlock, streaks, and gold/silver/bronze par-tiers that score each run by keystrokes; progress saved locally in your browser.
  • Terminal / CRT aesthetic — restrained phosphor-green "Kuro" theme, monospace, optional scanline.
  • Plays anywhere — in the browser with no install, or as a ~3 MB native desktop app (macOS / Windows / Linux).

Play

  • Browser: https://jkaindl.codeberg.page/neurovim/ — nothing to install.
  • Desktop: download an installer from the latest release (macOS .dmg, Windows .exe/.msi, Linux .AppImage/.deb/.rpm). The macOS .dmg is Developer ID-signed + notarized (opens without a Gatekeeper warning); the Windows installer is currently unsigned — see docs/DESKTOP.md.

Run from source

npm install
npm run dev          # web app → http://localhost:5173/
npm run build        # full build (content → Obsidian plugin → web)
npm test             # test suite
npm run build:dmg    # native desktop app + macOS DMG (needs Rust + Xcode CLT)

Contributor guide: CONTRIBUTING.md · architecture & internals for agents/maintainers: AGENTS.md.

Manual

New players start with the Player Manual — a Diátaxis-structured guide:

Built with

TypeScript · Preact · CodeMirror 6

A small monorepo (npm workspaces): a platform-neutral core (game logic, Web Audio, Preact UI) with thin adapters for the web, Obsidian, and desktop. No UI kit, no CSS framework. See AGENTS.md for the architecture.

Contributing

Issues and PRs welcome on Codeberg (primary) or the GitHub mirror. Please read CONTRIBUTING.md first.

License

NeuroVim is dual-licensed — see LICENSING.md.

  • Open source: GNU AGPL-3.0 — copyleft with the network-use clause: if you host a modified version so others can use it over the network, the source of your variant must also be made available under the AGPL.
  • Commercial license: for uses that the AGPL does not fit — e.g. a proprietary or closed-source product, or an Apple App Store build (App Store terms are incompatible with the AGPL) — a separate commercial license is available. See LICENSING.md; contributions are covered by the CLA.

Documentation and narrative text (docs, missions, lore) are licensed under CC BY-SA 4.0. The bundled JetBrains Mono font is under the SIL Open Font License.