Use a local model
AIKadal Deck’s AI features can run on a model on your own computer. You need no key, it costs you nothing, and it works on every plan. There are two ways to do it:
| You want | Use |
|---|---|
| the Assistant in the builder, or the Copilot in the presenter view, on your model | Models on this computer |
| your own agent (on a local model) to write and publish decks in a folder | An agent on a local model, over MCP |
The Assistant and the Copilot
Section titled “The Assistant and the Copilot”The Assistant and the Copilot normally run on Kadal’s servers, using your workspace’s
AI key. A model on your computer is out of their reach:
Kadal’s servers only connect to public addresses, and localhost is your machine, not theirs. So
for a local model the agent runs in your browser tab instead. It gets the same instructions,
the same tools and the same number of steps, and it calls your model directly. The conversation
goes from the page to your server and never passes through Kadal.
1. Run a model that can call tools
Section titled “1. Run a model that can call tools”The Assistant does everything through tools (read the outline, change a slide, check the deck), so the model has to support tool calling. The instructions and tools take about 23,000 tokens, so it also needs a context of at least 32k tokens. Qwen 3 at 8B or larger edits decks well. A small model like Qwen 3 0.6B runs, but often calls the wrong tool or calls the right one with the wrong arguments.
| Server | Start it | Context of 32k |
|---|---|---|
| Ollama | ollama pull qwen3:8b, then open the app or run ollama serve |
OLLAMA_CONTEXT_LENGTH=32768 |
| LM Studio | lms get qwen/qwen3-8b, then lms server start --cors |
lms load qwen/qwen3-8b --context-length 32768 |
| llama.cpp | llama-server -m model.gguf --jinja -c 32768 --port 8080 |
-c 32768 (and --jinja for tools) |
Ollama doesn’t warn you when a conversation is too long for its context. It drops the start of the prompt without saying so, and that includes the Assistant’s instructions. Set the context length before you start.
2. Let the page reach it
Section titled “2. Let the page reach it”Two things stand between a page on https://deck.kadal.cc and a server on http://localhost:
-
The server has to allow the site (CORS). Ollama only answers pages it has been told to trust. LM Studio answers once CORS is switched on. llama-server allows any site by default.
Terminal window # Ollama on macOS: then quit Ollama from the menu bar and open it againlaunchctl setenv OLLAMA_ORIGINS "https://deck.kadal.cc,https://decks.kadal.cc"# Ollama on Windows: then quit Ollama from the tray and open it againsetx OLLAMA_ORIGINS "https://deck.kadal.cc,https://decks.kadal.cc"# Ollama on Linux (systemd): sudo systemctl edit ollama, then under [Service]Environment="OLLAMA_ORIGINS=https://deck.kadal.cc,https://decks.kadal.cc"# LM Studio: Developer → Server Settings → Enable CORS, orlms server start --corsdecks.kadal.ccis there for the Copilot, which runs on your published deck’s page. -
The browser has to allow it. Chrome, Edge and Firefox let a secure page call
http://localhost. Chrome and Edge ask once whetherdeck.kadal.ccmay reach apps on this device, and you should allow it. Safari blocks it, so use another browser or the desktop app.
3. Turn it on
Section titled “3. Turn it on”On the dashboard, open AI keys and find Models on this computer. Pick your server (Ollama,
LM Studio, llama.cpp or another OpenAI-compatible server), check the address (it ends in /v1), and
choose Save and turn on. The page lists the server’s models and marks the ones that can call
tools. If something is wrong, it tells you which problem it is and gives you the command that fixes
it:
- the server is running but doesn’t allow the site (CORS);
- nothing is answering at that address;
- the server has no chat models;
- the address isn’t an OpenAI-compatible API.
Then, in the builder, open the Assistant. Your models appear in its model menu under On this computer. Models that can’t call tools are left out. The setting belongs to this browser, not to the workspace, so turn it on in each browser you use.
For the Copilot, open a published deck’s presenter view, choose the laptop button in the Copilot tab, and pick the same server. The presenter view runs on the decks site, which keeps its own copy of the setting.
What is different on a local model
Section titled “What is different on a local model”- The Studio skill isn’t included. On Pro and Team, the hosted Assistant also follows the Studio skill. A local model gets the standard builder instructions only.
- There is no Thinking setting. If your model thinks before it answers (Qwen 3 does), its thoughts show in the chat as they arrive.
- Each step takes as long as your machine takes. Every step sends the whole conversation again, so a model with a slow prefill (a large model on a laptop) can take a minute per step.
- Every change is still a revision marked Assistant, so you can undo it.
In the desktop app
Section titled “In the desktop app”The desktop app shows the same dashboard, but its webview (WebKit on macOS and Linux) won’t let a
secure page call http://localhost. So the app makes those requests for the dashboard. It only
connects to servers on this computer (localhost, 127.0.0.1, ::1), only on the ports you’ve
allowed (11434, 1234 and 8080, plus any address you save under Models on this computer), and only
to a model server’s API paths. You don’t need any CORS setting.
Decks open in their own windows, and those windows get nothing from the app (a deck is other people’s code). So the Copilot can’t use a local model inside the desktop app. To use the Copilot with a local model, present from Chrome, Edge or Firefox.
An agent on a local model, over MCP
Section titled “An agent on a local model, over MCP”kadal-deck mcp is the engine’s MCP server. It runs on
your computer, works on one deck folder, and offers 24 tools: look up components, read, edit,
check, render, build, export, publish, sync and find media. Any MCP client can use it, including one that runs
its agent on a local model, such as LM Studio (~/.lmstudio/mcp.json), Goose, Cline, Continue or
your own script.
{ "mcpServers": { "kadal-deck": { "command": "npx", "args": ["-y", "@kadal/deck", "mcp", "--dir", "/path/to/my-talk"] } }}The dashboard’s AI keys → Connect an agent section writes this for you, with your folder in
it, for Claude Code, Claude Desktop, Cursor, VS Code and other clients. For your account’s decks
(lists, versions, share links, live rooms), add the remote server https://deck.kadal.cc/mcp as
well. It signs in with OAuth.
Tips for a local model:
- Give it only the tools the task needs. Most clients let you turn tools off, and a small model chooses better from 3 tools than from 21.
- The MCP server counts slides from 0 (the second slide is
1). The builder’s Assistant counts from 1. - The model doesn’t need to pass
dir: the server already works in the folder you gave it.