Open source & local-first

Local LLM second brain: keep the model on your laptop and the notes where your team can reach them

By Baalda Team · · 7 min read

Short answer

A local LLM second brain is a model you run yourself, through Ollama or LM Studio, reading and writing notes kept as plain markdown files. The model only makes the thinking private. Keep the notes as files you own, on a server you run if a team shares them, and the whole setup stays yours.

A local LLM second brain is a model you run on your own machine, through Ollama or LM Studio, reading and writing notes you keep as plain markdown files. The model is the easy half. The notes are the half that decides whether the setup stays private, and whether anyone besides you can use it.

Almost every guide to this builds the same thing: install Ollama, open an Obsidian vault, add a plugin that chats with your notes. It works, and for one person it is a good setup. But it answers one question, where does the thinking happen, and stays quiet on the other, where the knowledge sits and who else can reach it. A model on your laptop does not make your notes private if they sync through somebody else's cloud, and it does not make them useful to your team if they never leave your laptop. This post covers both halves, and where Baalda, an open source app that keeps a team's notes as plain markdown files, fits the second.

What does a local LLM second brain actually need?

Three parts, and each one can be local or not on its own terms:

  • A model runner. Ollama or LM Studio, holding open weights on your own hardware.
  • An agent or chat app that can call tools. A model on its own only produces text. Something has to turn "add this to the decisions page" into a file write.
  • The notes. A folder of files, or a database inside an app, plus whatever search index sits over them.

The guides spend nearly all their words on the first part. The third part is the one that outlives every model you will try, which is why it is worth choosing first. If the notes are plain .md files, any runner and any agent can work on them, and swapping Qwen for Gemma next month changes nothing about what your team knows.

SOLO VAULTRUNNEROllama or LM StudioAGENTTool-calling appNOTESOne laptopNobody else can read itCLOUD NOTES APPRUNNEROllama or LM StudioAGENTTool-calling appNOTESVendor's serversThe knowledge leavesSELF-HOSTED VAULTRUNNEROllama or LM StudioAGENTTool-calling appNOTESYour own serverShared, and stays yours
The three parts of a local LLM second brain: the runner, the agent and the notes, with which of them leave your machine in each common setup

Where do the notes go when the model is local?

Most setups on the first page of results put them in one of three places, and each one leaks in a different direction:

Where the notes liveWhat stays privateWhat breaks
One person's vault on one laptopEverythingNobody else can read or write it, so it is a personal notebook, not a shared memory
A cloud notes app the local model reaches over its APIThe prompts and the modelThe knowledge itself sits on the vendor's servers, which was the part you meant to keep
An embedding index built by a pluginThe files, mostlyThe index is a derived copy in a format only that plugin reads

For a team the first row is the real problem. Five people each running a private local second brain means five separate memories, and the decision one of them recorded on Tuesday is invisible to the other four on Wednesday.

How do you share a local LLM second brain with a team?

Keep the model on each laptop and share the notes. That is the shape Baalda is built for: a vault is a folder of plain markdown files on your own disk, it syncs to teammates in real time over CRDTs, and it is open source under Apache-2.0, so the server that holds the shared copy can be one you run yourself. The self-hosting guide covers the Docker setup.

There are two ways a local model gets at that vault, and the first one needs no integration at all.

Route one: the agent edits the files on disk. Because every note is a real .md file, a local agent pointed at the vault folder reads and writes it directly. Baalda's file watcher picks up each change and syncs it to everyone else. As of 1 November 2026, Ollama's own docs show how to run Claude Code on a local model with one command:

bash
ollama launch claude

or by hand, pointing Claude Code at Ollama's Anthropic-compatible API on your machine:

bash
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_API_KEY=""
export ANTHROPIC_BASE_URL=http://localhost:11434
claude --model qwen3.5

Ollama's integrations page also lists OpenCode, the open source coding agent, under the same ollama launch menu, if you would rather the agent were open too. Either way, open the agent in the vault folder and it works on the team's notes like any other folder. Claude Code as a second brain covers the file-first setup in more detail.

Route two: the agent connects over MCP. When the agent is not on a machine that holds the vault, or when you want the server to decide what it can reach, Baalda serves an MCP endpoint at your server URL plus /api/mcp. You create a token in Vault Settings, MCP, and the client sends it as a bearer header.

Baalda's MCP settings page: the endpoint URL, and the field where you create the token a local client sends as a bearer header
Baalda's MCP settings page: the endpoint URL, and the field where you create the token a local client sends as a bearer header

LM Studio has been an MCP host since version 0.3.17, and its config lives in ~/.lmstudio/mcp.json on macOS and Linux. Its docs show remote servers in this shape:

json
{
  "mcpServers": {
    "team-vault": {
      "url": "https://notes.your-company.internal/api/mcp",
      "headers": {
        "Authorization": "Bearer mcp_…"
      }
    }
  }
}

The model then gets tools such as search_notes, read_note, create_note and edit_note. A token is scoped to one person in one vault, so a folder that person cannot see does not show up in a listing or a search result and cannot be read or written. The model on the laptop gets exactly the access its owner has, no more.

YOUR SERVERTeam vaultSynced to every member/api/mcpPer-folder access checkROUTE ONE · FILES ON DISKollama launchClaude Code or OpenCodeon a local model,opened in the vault folderNotes/*.mdWatcher picks up the editROUTE TWO · MCPLM StudioLocal model, MCP host~/.lmstudio/mcp.jsonAuthorization:Bearer mcp_…
Two routes from a local model to the team vault: an agent editing the markdown files on disk, and LM Studio reaching the self-hosted server over MCP with a bearer token

Does anything leave the building?

Not the model and not the notes, if you self-host and run local weights. With Ollama or LM Studio the inference runs on your hardware. With a self-hosted Baalda server the shared copy of the notes sits on your own infrastructure, and the sync carries binary CRDT updates rather than the markdown files themselves. The server's built-in search uses a local embedder by default that makes no API call, so search keeps working on an air-gapped deploy. The agent app is a separate question: Claude Code is Anthropic's own closed CLI even when the model behind it is local, so check its network settings, or use OpenCode, if your reason for going local is that nothing may leave the machine.

There is a simpler version for one person: a new Baalda vault is local-only until you turn sharing on. It needs no account and never touches a server, so a local model plus a local-only vault is fully offline. It is also, by definition, not shared.

This is the same argument as owning both the model and the corpus when you self-host open weights. A private model reading a rented knowledge base has moved only half the stack.

Where does this setup fall short?

Baalda does not run a model, ship one or recommend one. It is the notes layer. The runner, the weights and the hardware are yours to choose.

Small local models are weaker at tool calling than the large hosted ones, and an agent is only as good as its tool calls. Ollama's Claude Code page says to set a context window of 64k or more for local models, and its Anthropic-compatible API does not support forcing a specific tool through tool_choice. Expect to try a few models before one handles multi-step edits reliably.

Baalda's default search is not semantic in the neural sense. The local embedder is a hashed bag of words: fast, private and deterministic, but it matches the words you wrote, not their meaning. A note about "customers leaving" will not surface for a search on "churn" unless the word is in it. The model can make up for some of that by trying several searches, but if neural semantic search over your notes is the main thing you want, a dedicated local RAG tool does that job better.

LM Studio's docs show the remote server shape but do not say which MCP transport a url entry uses. Baalda's endpoint speaks Streamable HTTP and does not open an SSE stream, so a client that only speaks the older SSE transport will not connect. This post has not tested every LM Studio build against it, so check yours before you roll it out to a team. Before handing any model write access, is MCP safe covers what a token can and cannot do.

Finally, if you use Baalda's managed Team plan instead of self-hosting, the shared copy lives on Baalda's server. The model can still be local, but the notes are then hosted by someone else, which may or may not meet the reason you went local in the first place.

FAQ

Frequently asked questions

How do I build a second brain with a local LLM?

Pick a model runner such as Ollama or LM Studio, an agent or chat app that can call tools, and a folder of plain markdown notes. Point the agent at the folder so it reads and writes the files directly, or connect it to a notes server over MCP when the notes are shared.

What is the best local LLM for a second brain?

There is no single answer, and this post does not rank models. What matters is tool calling, because the model has to read and write notes through tools, and context length: Ollama's docs ask for a 64k or larger context window when running Claude Code on a local model.

Can Ollama connect to MCP servers?

Not on its own. Ollama runs the model and serves an API, and its integrations page does not describe it as an MCP client. The MCP connection comes from the app in front of it, such as Claude Code launched through Ollama, or LM Studio, which has been an MCP host since version 0.3.17.

Can a team share a local LLM second brain?

Yes, if the notes are shared and the model is not. Each person runs a model on their own machine and works on the same vault. In Baalda the vault is plain markdown that syncs in real time, and a local agent either edits the files on disk or reaches a self-hosted server over MCP.

Is a local LLM second brain fully offline?

Only if the notes are local too. A local model reading notes that sync through a vendor's cloud still sends the knowledge off your machine. A local-only Baalda vault plus a local model stays offline, and a self-hosted server keeps a shared vault inside your own infrastructure.

Start your team’s brain

Free and open source. No account needed.