Skip to content

Operator desk for COTA POC 2026 · Buy list first · Full install below

30-second buy list

Must haveSpec
Mac StudioM4 Max class, ≥64 GB unified, ≥1 TB storage
UPS1000–1500 VA pure sine
NetworkDedicated Gigabit Ethernet to lab switch
Display27″+ 1440p/4K (second optional for IDE + VMS)

TIP

HIGHLY RECOMMENDED host. Gemma / Ollama / MLX stay host-only. Do not install Gemma on Shadows or OAK cameras.

Materials map

ChipContents
Desk BOMStudio, monitor, KB/mouse, UPS, Ethernet, 1 TB+, cabling
Install · Macbrew, Docker/Colima, Node, Ollama, Gemma 26B/31B host-only, stack:up
Install · SparkOptional — Spark host
PortsListen / egress / optional
UpdatesHermes daily; OS/Docker weekly
Certs / SSHPlaceholders only

1. Desk BOM (Mac-first)

ItemSpecNotes
ComputeMac Studio M4 Max, ≥64 GB, ≥1 TB SSDPrimary host
Storage1 TB minimum usableModels + recordings-cache + OS
Monitor27″+ 1440p or 4KDual optional
Keyboard / pointingLow-latencymacOS layout
UPS1000–1500 VA pure sine~100–145 W under LLM load
NetworkGigabit EthernetMQTT fleet → host :1883
CablesTB/USB-C, HDMI/DP, Cat6Label S1 / S2 / WAN
Optional NVMe2–4 TB externalOverflow archives

If Spark shares the desk, size UPS for ~180–240 W on Spark alone.

2. Install · Mac

Tools

PackageRequired?Why
HomebrewYesPackage hub
Python 3.12+YesScripts / helpers
Node 22+YesCost Sentinel UI + proxy
Docker Desktop or ColimaYes*Mosquitto (*or MQTT_DISABLED)
Ollama and/or MLXYesLocal Gemma on host
git, jq, curl, ffmpegYesOps baseline
Hermes CLIRecommendedUpdate daily
sshRecommendedFleet access

Install sketch (no secrets)

bash
brew install python@3.12 git jq ffmpeg curl wget node@22
brew install --cask docker
brew install ollama
ollama pull gemma4:26b
ollama pull gemma4:31b

cd cost-sentinel
npm install
npm run stack:up          # :1883 MQTT · :8788 proxy · :5173 UI
npm run stack:status

Full fleet wiring: COTA VMS host install.

Models

PairingWhere
Gemma 4 26B / 31BMac host only
RF-DETRShadows only
Optional Spark LLM APISecond box — Spark

3. Ports

Listen on host: 1883 MQTT · 8788 proxy · 5173 UI · 11434 Ollama · 8080 packaged UI

Egress to fleet: 8765 A2A/MCP (proxy only, not browser) · 22 SSH · 8554 RTSP class · 80/443 registries

Optional: 3702 ONVIF · 8890 Hindsight · 9222 CDP

Do not public-bind 8788/1883 without reverse proxy + auth.

4. Updates

CadenceWhat
DailyHermes; critical patches; stack:status
WeeklyOS check; Docker pins; UI smoke
MonthlyDep refresh; UPS self-test
DeliberateModel pulls; firmware

5. Certs / SSH (placeholders)

bash
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_gp -C "gp-host-$(hostname)-$(date +%Y%m)"
openssl rand -hex 32   # A2A HMAC — .env only, never git

Browser → :8788 only.

6. Smoke checklist

  • [ ] UPS + Ethernet up
  • [ ] Host storage ≥1 TB usable
  • [ ] ollama list shows gemma4 26B and/or 31B
  • [ ] stack:status → 1883 / 8788 / 5173
  • [ ] UI Proxy URL http://localhost:8788
  • [ ] SSH to S1/S2; HMAC matches
  • [ ] No Gemma on Shadows