FSRS spaced repetition • shell hook • local-first • open source

Your wallpaper
teaches you
what you don't know yet

LearnWall hooks into your shell, tracks every command you run, and uses the same algorithm behind Anki to surface the commands you need to learn — right on your desktop wallpaper. Passive learning at its most literal.

Desktop — LearnWall active
★ Today's Spotlight
git stash -p
Interactively select hunks to stash — useful when you only want to stash part of your changes.
git stash -p   # stage hunks one at a time
git stash pop  # restore after you're done
fd NEW
Modern find replacement
bat NEW
cat with syntax highlighting
rg LEARNING
ripgrep — fast file search
tmux LEARNING
Terminal multiplexer
jq LEARNING
JSON processor
git rebase PRACTICED
Reapply commits on top
git push MASTERED
Upload local changes
docker ps MASTERED
List containers

Shell hook → FSRS brain → smarter wallpaper

LearnWall lives in the background. You use your terminal normally — it quietly builds a model of your command vocabulary. Every 5 minutes, your wallpaper updates to reflect exactly where you are in your learning journey.

1

Shell hook captures every command

A 10-line preexec hook in your .zshrc or .bashrc logs each command — with exit code, directory, git branch, and timing — to a local SQLite database at ~/.learnwall/history.db. No cloud. No telemetry.

2

FSRS scores every command

The Free Spaced Repetition Scheduler (the algorithm inside Anki) treats each command run as a review. Exit code 0 = "Good". Non-zero exit = "Again". Stability and retrievability are computed and scheduled for future wallpaper prominence.

3

Wallpaper renders your learning state

A Tauri app captures the wallpaper canvas and sets it as your desktop image via osascript. NEW commands glow. MASTERED commands fade. Your desktop is always showing you exactly what to learn next.

4

Context-aware surfacing

In a Docker project? Docker commands float up. Branching heavily in git? git rebase and git cherry-pick appear. LearnWall reads your working directory and git state to weight what's relevant right now.

zsh — ~/projects/api
📄
Shell
preexec hook
logs command
🧠
FSRS
schedules
next review
📷
Wallpaper
re-renders
every 5 min
🧠
You
learn by
seeing it

Pre-built packs for your favorite tools

Beyond tracking your own commands, LearnWall ships with curated card packs for popular tools. Install a pack and those commands enter your learning queue as NEW cards — even before you've typed them once.

📉
tmux
Master terminal multiplexing — sessions, windows, panes, copy mode, and the prefix key shortcuts you keep forgetting.
48 cards sessions panes copy-mode
🪝
vim / neovim
Motions, operators, text objects, macros, marks, and ex commands. From normal mode basics to 10x productivity shortcuts.
72 cards motions operators macros
🍀
git
Beyond add, commit, push — worktrees, bisect, rerere, reflog, stash -p, and the git commands most devs never discover.
56 cards rebase bisect worktrees
🐠
shell / zsh
Globbing, process substitution, parameter expansion, job control, and shell builtins that save you from reaching for Python.
64 cards expansion globbing jobs

+ tldr-pages integration for 2,000+ community-maintained command summaries. Any command you encounter gets its description pulled automatically.

Watch a command level up

Click any command below to inspect its FSRS state, then hit "Simulate use →" to see how the algorithm advances it toward mastery.

← select a command to inspect

FSRS: the Anki algorithm, applied to your terminal

The Free Spaced Repetition Scheduler (FSRS) is the state-of-the-art memory scheduling algorithm — the same one now powering Anki. It models two key properties of your memory:


Stability — how long a memory lasts before you start forgetting it. Each successful use grows stability exponentially. Commands you run daily build deep stability fast.


Retrievability — the probability you can recall it right now. LearnWall surfaces commands when retrievability is dropping — before you forget, not after.

Exit code = review rating

Command exits with code 0? That's a Good review. Non-zero exit? Again — FSRS schedules it for sooner reinforcement. No flashcards required.

📅

Optimal timing, automatically

FSRS computes the exact interval before the next review is needed to maintain 90% retention. Commands resurface on your wallpaper precisely when your memory is fading.

📈

Four stages of mastery

NEWLEARNINGPRACTICEDMASTERED. Once stability > 30 days, a command fades from your wallpaper — freeing space for the next thing to learn.

Retention curve — rg after 7 uses

100% 50% 0% 0d 10d 20d 30d use use use due for review forgetting curve

Each use resets retrievability to 100% and increases stability — so the curve flattens over time. After ~15 uses, rg stays above 90% for 30+ days and graduates to MASTERED.

One command, deeply understood

Every morning, LearnWall picks one command from your NEW or LEARNING queue and gives it the spotlight treatment: full description, usage examples from tldr-pages, and a prominent callout on your wallpaper.


The spotlight is deterministic — same command all day so it soaks in — but you can reroll to a different one. Candidates are sorted by "commands you've seen in your shell but rarely used successfully."


  • Picked from your personal NEW / LEARNING list
  • tldr-page description + real examples
  • Changes daily, rerollable anytime
  • Persists across wallpaper re-renders
★ DAILY SPOTLIGHT —
git worktree
Manage multiple working trees attached to the same repository — work on two branches simultaneously without stashing.
Add a new worktree for a branch
git worktree add ../feature-branch feature
List all worktrees
git worktree list
Remove a worktree
git worktree remove ../feature-branch

M5Stack Cardputer: your pocket flashcard

The same SQLite database that powers your wallpaper can feed an M5Stack Cardputer — a tiny $30 keyboard+display ESP32 device. In idle mode, it cycles through commands from your NEW and LEARNING queue, turning any quiet moment into a micro-learning session.


  • Reads from ~/.learnwall/history.db over USB serial or HTTP
  • Shows a random command from your NEW/LEARNING list
  • Press any key to advance to the next card
  • Syncs mastery state back to your desktop app
  • GET /learning endpoint returns your current learning state as JSON
LEARNWALL — LEARNING MODE
git bisect
Use binary search to find the commit that introduced a bug. Start with 'git bisect start', mark good/bad commits to narrow down.

Start learning your terminal
while you stare at your desktop

LearnWall is free, open source, and local-first. Your shell history never leaves your machine. Installation takes 2 minutes.

$ brew install learnwall && learnwall init
local SQLite • no accounts • no telemetry • macOS + Linux