I've been building MindBase — Karpathy's "LLM-maintained wiki" pattern as an app. You write notes and drop in sources; the AI maintains a persistent wiki (writes and updates actual markdown pages, not RAG).
When I launched in July, you needed an AI editor and an API key to use it. The last three weeks were about removing both. Here's what I learned making the whole thing run on a free local model, with a real UI.
1. Small models can't chain tool calls — so stop asking them to
My first server-side pipeline was agentic: the model would call search, read pages, then write. With qwen3:14b on Ollama, it fell apart constantly — wrong tool, malformed arguments, loops that never terminated.
The fix was to remove the agency. Every wiki operation — ingest a note, rebuild the context, health-check, research — is now one completion against one strict JSON schema, with everything the model needs gathered into the prompt beforehand. Parse failure retries once with the error appended. That's the entire error handling.
Local models turn out to be very reliable at filling one schema. They're shaky at deciding what to do next. Design accordingly.
2. The 88-second blank screen: thinking-mode models
qwen3 and deepseek-r1 stream their reasoning into a hidden thinking field. My chat UI collected content — which stayed empty for 88 seconds while the model happily reasoned into a field nobody was reading.
One line (think: false on the Ollama API) took replies from 88.7s to 1.1s. If your local-model UI ever shows "nothing happening for a minute" — check this first.
3. Trust comes from one checkbox
The biggest complaint about v1 wasn't quality — it was that ingestion felt like a black box. The AI read your note and something changed in your wiki.
Karpathy's original spec actually has a step my v1 skipped: the LLM discusses takeaways with you before writing. So now every ingest returns takeaways + a plan of proposed updates, each with a checkbox. Nothing is written until you hit Apply.
Same model, same output — but showing the plan before writing fixed the trust problem almost entirely.
4. Make the two layers visible
The pattern has two layers: your raw notes (append-only, yours) and the wiki (AI-maintained). In v1 this existed only in the folder structure, and new users never got it.
Now every note carries a status chip: ✨ Add to wiki while the note is newer than the last build, ✓ In wiki · 2 pages after digestion. Edit the note and it lights up again.
The implementation detail I like: the chip's state is just "file mtime newer than context.md" — the exact rule the build pipeline uses to find undigested sources. No new state, so the UI and the pipeline can't disagree.
5. Hardware detection beats a model dropdown
Asking users to pick an Ollama model is asking them to already be an expert. The setup wizard now reads your RAM/CPU and recommends what actually fits: 8GB → llama3.2:3b, 16GB → qwen3:8b, 32GB+ → qwen3:14b. Then it installs, pulls with a progress bar, and verifies with a real one-token generation (checking that the API answers is not the same as checking the model works — I learned that one the embarrassing way).
Where it's at
Everything is markdown on disk, MIT-licensed, works with Claude Code / Cursor / any MCP client — and now standalone in the browser with zero subscriptions.
Repo: https://github.com/frankchu91/mindbase
If you run local models: what's the biggest model you'd realistically dedicate to background synthesis work? Trying to decide how far to push the recommendation table.


Top comments (0)