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 [email protected].