Here’s the unpopular take: the best open source AI note taking setup isn’t a shiny standalone app. It’s Obsidian plus one carefully chosen plugin, running against a local model server you control. Most “AI note taking” tools lock your data in a proprietary format – Obsidian keeps it in plain Markdown files on your disk, forever.
This is a deployment guide, not a plugin beauty contest. We’ll install Copilot for Obsidian v3.2.6 (by Logan Yang, released March 2026) wired to a local Ollama server, then briefly cover Smart Connections as an alternate stack. Expect exact commands, real error messages pulled from GitHub issues, and one config gotcha that quietly breaks most first-time installs.
Why this stack, and why not the others
There are dozens of Obsidian AI plugins. Text Generator, Smart Composer, Local GPT, BMO Chatbot – they all work. The reason to pick Copilot over them isn’t features: it’s that Logan Yang ships fixes regularly and the GitHub Issues thread moves fast. For a deployment that has to keep working six months from now, an actively maintained codebase matters more than any feature checklist.
Copilot also handles the boring plumbing well. It supports Ollama natively, and per the official local setup docs, getting CORS working is a documented, supported path – not a workaround. That’s the honest reason to pick it over its rivals.
System requirements
Two machines matter here: the one running Obsidian, and the one running the model. They can be the same laptop, or split across a home server.
| Component | Minimum | Recommended |
|---|---|---|
| Obsidian | v1.7.2 (Copilot 3.x manifest minimum) | Latest stable |
| OS | macOS, Linux, or Windows | Any of the above with SSD |
| RAM | 8 GB (small 3B models) | 16 GB+ for 7B-8B models |
| Disk | ~10 GB free | 50 GB+ if you plan to try multiple models |
| Ollama | Any current version | Latest – mobile users need remote setup |
Copilot 3.x is no longer desktop-only – the plugin manifest now declares minAppVersion: 1.7.2, so Chat, Vault QA, and Plus modes all run on Obsidian Mobile, and users on older Obsidian builds get a clear message rather than a cryptic runtime error. Disk is the real constraint: model files range from 4 to 16 GB, so make sure you have sufficient disk space and a reliable internet connection before pulling anything.
Install Ollama (the model runtime)
Ollama runs on Mac, Linux, and Windows. Download it from ollama.com and install normally.
Then pull two models – one for chat, one for embeddings:
# Chat model (pick one)
ollama pull llama3.1
# or a leaner option for 8 GB machines
ollama pull mistral
# Embedding model for semantic search
ollama pull nomic-embed-text
Now the step tutorials skip. Set the CORS origin before starting the server, or Obsidian’s requests get silently blocked with no useful error message:
# macOS
launchctl setenv OLLAMA_ORIGINS "app://obsidian.md*"
# then quit and reopen Ollama from the menu bar
# Windows PowerShell
$env:OLLAMA_ORIGINS="app://obsidian.md*"; ollama serve
# Linux
OLLAMA_ORIGINS="app://obsidian.md*" ollama serve
That env var tells Ollama that a request from app://obsidian.md isn’t hostile. Skip it and you’ll spend an hour wondering why the connection test fails – the Copilot local setup docs call this out explicitly, but most third-party tutorials don’t reproduce it.
Install the Copilot plugin
- Settings → Community plugins → turn off Restricted Mode if you haven’t already
- Browse → search Copilot → find the one by Logan Yang (highest download count) → Install → Enable
- Settings → Copilot → Models tab → Add Custom Model
- Enter the model name exactly as you pulled it (e.g.
llama3.1), provider =ollama, click Add - Repeat for
nomic-embed-textas an embedding model
Select the chat model in the model picker. Turn on the CORS toggle in the model table if you see connection errors. That’s the minimum viable config.
Version-control tip: keep the Copilot config folder inside your vault, but add
.smart-connectionsand any large index folders to your sync ignore list. One user on GitHub Discussion #768 fixed a stubborn embedding hang this way: “I ignore .smart-connections when syncing my Obsidian on github and only have Smart Connections on one desktop machine with a GPU.”
Verify it actually works
Three checks, in order.
1. Ollama is reachable. In a terminal:
curl http://localhost:11434/api/tags
You should see a JSON list of your installed models. If curl hangs, Ollama isn’t serving.
2. Copilot can talk to it. Open the Copilot chat pane (icon in the left ribbon), send a plain “hello, what model are you?” – a local model will usually name itself or a close variant.
3. Vault QA works. Switch to Vault QA mode, ask something only your notes could know (“what did I write about X last month?”). If it hallucinates or says it has no context, the embedding step didn’t finish. Check the indexing status in Copilot settings.
One thing nobody warns you about: the model you pick for chat and the model you pick for embeddings are doing completely different jobs. llama3.1 generates text – it’s the one you’re talking to. nomic-embed-text converts your notes into vectors so Vault QA can find relevant ones. Swapping one won’t fix problems with the other. Keep them mentally separate.
The alternate stack: Smart Connections
Want passive discovery instead of conversation? Smart Connections takes a different angle. Developed by Brian Petro, it works immediately without an API key – the local embedding model is built in. Where Copilot is a chat interface you open on purpose, Smart Connections surfaces related notes in a sidebar panel as you write. Same vault, different workflow.
Fair warning about the v4 architecture change: Smart Chat is no longer bundled inside Smart Connections. As of the v4 releases, it moved to its own dedicated plugin. All API-based model integrations – cloud and local – went with it into Smart Chat Pro. If you install Smart Connections today expecting the old bundled chat, you’ll be confused. That’s a deliberate architectural choice, not a bug.
Common errors and their real fixes
Every install hits at least one of these.
- “Loading smart connections…” forever. A recurring issue across community threads. Fix from Discussion #768: switch Embedding Model to
TaylorAI/bge-micro-v2for both blocks and notes in settings. Restart Obsidian. - Embedding stalls partway through a large vault. Community reports describe the notification showing embeddings being created but stalling after the queue-saved message. Workaround: split large notes, disable other heavy plugins during initial indexing, and check the developer console (Ctrl/Cmd+Shift+I) for the actual JS error.
- CORS error in Copilot chat. You forgot to set OLLAMA_ORIGINS, or you set it after Ollama was already running. Kill Ollama entirely, set the env var, restart it. In Copilot settings, also toggle the per-model CORS switch on.
- Frozen Obsidian on M-series Mac. Users on Apple Silicon machines have reported that heavy embedding jobs either freeze or trigger constant re-embedding. Fix: downgrade the plugin one minor version, or force a full re-embed on a lower-power model.
A quieter question worth sitting with
Is a locally-embedded vault actually more useful than plain full-text search plus a good tagging habit? Nobody’s published a controlled study. On a 200-note vault, probably not – keyword search finds what you’re looking for fast enough. On a 5,000-note vault with years of half-forgotten ideas, semantic search finds connections keyword search misses. Somewhere between those numbers there’s a break-even point. I don’t know where yours is.
There’s also no published benchmark comparing Copilot’s Vault QA retrieval quality against Smart Connections’ semantic search on identical vaults. Both teams make reasonable claims. Neither has released numbers on the same test set. If you need to choose between them, you’ll have to A/B test on your own data – which is the only honest answer anyone can give you right now.
Upgrade and uninstall
Upgrades happen through Community plugins → Installed → click the update badge. Copilot’s changelog is worth reading before major bumps – the 3.2.6 release introduced Remote Miyo Server URL config that affects anyone running the model on a separate machine.
To uninstall cleanly: disable the plugin in Settings, then delete YourVault/.obsidian/plugins/copilot/ (or smart-connections/). For Smart Connections, also delete YourVault/.smart-connections/ – that’s where the vector index lives. Ollama models come out with ollama rm modelname.
FAQ
Do I need an OpenAI or Anthropic API key?
No. Point Copilot at Ollama and you’re fully local. API keys are only needed if you want cloud models.
Will this work if my vault is 10,000+ notes?
Yes, but expect the first indexing pass to take hours, and be picky about your embedding model. nomic-embed-text is a reasonable default; heavier embedding models produce better matches but slow the initial index dramatically. If Obsidian starts freezing mid-index, run it overnight on a plugged-in machine with nothing else demanding memory, and don’t try to browse the vault while it’s working.
Can I use this on iPhone or iPad?
Partially. Copilot runs on Obsidian Mobile since the 3.x manifest change (minAppVersion 1.7.2), but Ollama on your phone isn’t practical – the 4-16 GB model files alone rule it out. The realistic setup: Ollama on a home server pointed at Copilot’s Remote Miyo Server URL field. Without that, Copilot on mobile falls back to cloud APIs. Miyo auto-disables on mobile if no remote server URL is configured, so mobile users silently get worse search without knowing why – configure that field before assuming something is broken.
Next step: pick one model (start with mistral if you have 8 GB RAM, llama3.1 if you have 16 GB), run the OLLAMA_ORIGINS command for your OS, and get the Ollama curl health check returning JSON before you touch Obsidian at all. Everything else is easier once the server layer is verified.