Apps / AI / :11434
Ollama
Run AI models locally, for apps on your network.
No MiniControl yet? Download MiniControl, then install Ollama from its catalog.
Ollama downloads and runs open AI models such as Llama, Gemma, Qwen and Mistral, and answers over a simple API. Chat apps, coding tools and scripts on your other devices can use it instead of a paid cloud service, and nothing you type leaves your network.
Why on a Mac: Apple silicon shares its memory with the GPU, so a Mac runs models that elsewhere need an expensive graphics card.
Its API answers anyone on your network, with no password.
After the install: It has no web page. Download a model in Terminal: ssh to the machine, then ollama pull llama3.2.
Free, like the whole catalog.
What MiniControl installs
- Packages
brew install ollama- Web page
- Port 11434
- Keeps running
- As LaunchAgent
app.minicontrol.ollama, also after a restart - Its data
~/.ollama- Memory
- Under 100 MB idle; each loaded model takes about its download size (2 GB for llama3.2)
- Licence
- MIT
The install script
What MiniControl runs on your server, word for word. The app shows the same script before it installs.
#!/bin/bash
# Generated by MiniControl for Ollama. Runs on the machine.
set -euo pipefail
export HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_ENV_HINTS=1 NONINTERACTIVE=1
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:$PATH"
step() { echo "STEP|$1|$2"; }
fail() { echo "ERR|$1"; exit 1; }
U=$(id -u)
BREW=$(command -v brew || true)
[ -n "$BREW" ] || fail "Homebrew isn't installed. Server Setup → Homebrew installs it."
BP=$("$BREW" --prefix)
step 1 "Checking the machine"
for f in "$HOME"/Library/LaunchAgents/*.plist; do
if grep -qsF -- 'bin/ollama' "$f"; then fail "Ollama is already set up here, as $(basename "$f" .plist)."; fi
done
if lsof -nP -iTCP:11434 -sTCP:LISTEN >/dev/null 2>&1; then
fail "Something else already uses port 11434: $(lsof -nP -iTCP:11434 -sTCP:LISTEN | awk 'NR == 2 {print $1}')."
fi
step 2 "Installing with Homebrew"
"$BREW" list --formula ollama >/dev/null 2>&1 || "$BREW" install ollama
step 3 "Setting it up"
mkdir -p "$HOME/services/ollama/log" "$HOME/Library/LaunchAgents"
PL="$HOME/Library/LaunchAgents/app.minicontrol.ollama.plist"
cat > "$PL" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>app.minicontrol.ollama</string>
<key>ProgramArguments</key>
<array>
<string>$BP/opt/ollama/bin/ollama</string>
<string>serve</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>OLLAMA_HOST</key><string>0.0.0.0:11434</string>
</dict>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>ThrottleInterval</key><integer>10</integer>
<key>ProcessType</key><string>Background</string>
<key>StandardOutPath</key><string>$HOME/services/ollama/log/launchd.out.log</string>
<key>StandardErrorPath</key><string>$HOME/services/ollama/log/launchd.err.log</string>
</dict>
</plist>
EOF
plutil -lint "$PL" >/dev/null
[ -x "$BP/opt/ollama/bin/ollama" ] || fail "$BP/opt/ollama/bin/ollama isn't there after the install."
step 4 "Starting Ollama"
# Services run in the logged-in user's session (gui/<uid>), like every service in the panel.
launchctl bootstrap "gui/$U" "$PL" || fail "launchd didn't start it. Services run while you're logged in on the machine; Server Setup's \"Log in automatically after a restart\" fixes that."
if /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate 2>/dev/null | grep -q enabled; then echo "FW|$BP/opt/ollama/bin/ollama"; fi
step 5 "Waiting for it to answer"
# Localhost, and the Tailscale IP for apps that bind only to it.
# `|| true`: with set -e, a failed substitution in an assignment would end the script.
HOSTS="127.0.0.1 $(for t in "$BP/bin/tailscale" /usr/local/bin/tailscale; do [ -x "$t" ] && "$t" ip -4 2>/dev/null && break; done | head -1 || true)"
ok=0
for i in $(seq 1 45); do
for h in $HOSTS; do
if curl -fsS -m 3 -o /dev/null "http://$h:11434/api/version" 2>/dev/null; then ok=1; break 2; fi
done
sleep 2
done
[ "$ok" = 1 ] || echo "WARN|It started, but isn't answering on port 11434 yet. Big apps can take a minute on first start."
echo "DONE"
MiniControl isn’t affiliated with Ollama. Questions about Ollama itself go to its makers; about installing it, to hello@minicontrol.app.