Johannes Kaindl2k downloadsLearn Vim by playing a cyberpunk spy-thriller. Missions are Vim exercises you fix in real Obsidian notes.
🇬🇧 English · 🇩🇪 Deutsch
Learn Vim by playing a cyberpunk spy-thriller — inside Obsidian.
An AI handler named CIPHER assigns you "missions" that are really Vim exercises: restore CORP-corrupted transmissions, beat the clock, earn XP. You learn Vim almost by accident; the story is the hook.


NeuroVim originally started life as an Obsidian plugin, then grew into a multi-target
game (neurovim-standalone: web + desktop +
Obsidian). vim-dojo brings it back home as a first-class, standalone Obsidian plugin.
ex»it« vs ex»fil«).
/v1 pitfall
and reaching your desktop server from a phone.From the community store: Settings → Community plugins → Browse → search "NeuroVim" → Install → Enable.
Manually, from a release: download main.js, manifest.json and styles.css from the
latest release into
<vault>/.obsidian/plugins/neurovim/, then enable NeuroVim under Community plugins.
Building from source is described under Develop / build from source.
Open the pane via the ribbon's terminal icon or the command NeuroVim: Open. It is organized in tabs:
A mission runs like this:
Commands available in the palette: NeuroVim: Open, NeuroVim: Submit mission, NeuroVim: Reset mission.
Settings → NeuroVim, grouped into Missions, Appearance, and CIPHER uplink; each section remembers whether you left it open or closed.
_neurovim/).0 disables it. A paused mission always shows in the status bar
either way.localhost at
your desk and as a LAN IP on the road. Add endpoints via presets or by typing a URL;
"Test connection" probes every entry and marks the active one. Existing single-endpoint configs
from 0.4.x migrate automatically — nothing to do on upgrade.If the LLM Endpoint Manager plugin is installed, the endpoints (and their keys) come from it instead: the settings then offer an endpoint and model choice, and your local list stays as a fallback for when the manager is off. If the manager reports no endpoint, there is no fallback to the local list.
/v1/models, with
a free-text fallback if the list is empty or the endpoint is unreachable. When the
endpoint reports it (LM Studio, Ollama), the model's context length is shown below the endpoint row.data.json; a key from an earlier version moves there the first time CIPHER connects (or when you open these settings).
data.json)._neurovim/). You fix the transmission in a real Obsidian note with real Vim mode.
Deleting a mission note — or the whole folder — loses no progress; the next mission
re-creates it. (Fits the lore: transmissions are ephemeral.)The plugin never touches files outside the configured mission folder.
Ask CIPHER for Vim advice — in character, powered by any OpenAI-compatible endpoint (LM Studio, Ollama, OpenRouter, …). Configure endpoint + model under Settings → NeuroVim → CIPHER uplink; leave the endpoint list empty and the feature stays fully off. During a mission, the HUD gains a CIPHER button that opens the uplink with the mission's context attached.
Privacy: your questions plus the active mission's metadata (title, category, goal) are sent to the endpoint you configure — never any other vault content.
NeuroVim can record the keystroke sequence of each successful mission to a local file
(traces.jsonl, inside the plugin folder). This powers CIPHER's debrief ("you walked to
word 3 with l l l — 3w is one move") and lets you analyse mission balance offline.
traces.jsonl anytime.Start at the documentation index:
npm install
npm run vendor # snapshot @neurovim/core + @neurovim/content from the monorepo
npm run build # → main.js
npm run gate # lint + typecheck + tests
npm run vendor reads the monorepo from NEUROVIM_MONOREPO (default: the maintainer's
checkout of neurovim-standalone at ~/Projects/jkaindl/apps/neurovim —
set the variable if yours lives elsewhere) and writes a pinned snapshot into
src/vendor/neurovim/ (see src/vendor/neurovim/VENDOR.json). The monorepo remains the
single source of truth for game logic and content.
npm run lint runs eslint-plugin-obsidianmd — the same rule set the community store
scans with — at --max-warnings 0. Manual smoke test:
docs/SMOKE.md.
Before opening a pull request, please read
CONTRIBUTING.md —
in particular which changes belong here and which belong in the monorepo. Architecture,
conventions and known gotchas live in
AGENTS.md.
npm run release <version> follows the ecosystem's dual-push flow (Forgejo origin +
GitHub mirror; the GitHub tag triggers the community-store release). The release tooling
itself lives centrally in ../tools/release/, so releasing requires the repo to sit inside
the obsidian-plugins/ workspace; building and testing work from a standalone clone.
Prerequisites, set up once: a Forgejo repo as origin, a github remote
(git remote add github [email protected]:<owner>/<repo>.git), and ~/.forgejo-token.
The plugin never touches files outside the configured mission folder, and makes no network
requests until you configure a CIPHER endpoint. What gets recorded, what gets sent where, and
how to report a vulnerability privately:
SECURITY.md.
A commercial license is available for uses the AGPL does not fit — see
LICENSING.md.