К основному содержанию
скилл CX Codex

mac-mini-llm-lab — скилл для Claude Code: что делает и как установить

Готовит Mac mini на Apple Silicon к роли автономного сервера нейросетей: настраивает Ollama, MLX, автозапуск через launchd и удалённый доступ.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill mac-mini-llm-lab -a claude-code
Открыть на GitHub

Что делает mac-mini-llm-lab

Скилл содержит инструкции и скрипты для развёртывания локального сервера инференса на Mac mini с процессорами M2, M3 или M4. Внутри собраны шаги по установке пакетов через Homebrew, настройке Python 3.12 с uv, загрузке моделей в Ollama и запуску нативного фреймворка MLX с Metal-ускорением.

Систему готовят к непрерывной работе без монитора. Конфигурация launchd удерживает процесс Ollama запущенным, а утилита pmset отключает переход в режим сна и включает автоматический перезапуск после сбоев питания. Для подключения снаружи настраиваются Tailscale, защищённый SSH и обратный прокси Caddy, а графический интерфейс разворачивается через Open WebUI в Docker.

Для выполнения инструкций потребуется macOS Sonoma 14+ или Sequoia 15+, от 16 ГБ объединённой памяти и кабельный Ethernet. Без локальных прав sudo настроить параметры питания и системный сетевой экран не получится.

Какие задачи решает

  • развернуть Ollama и фреймворк MLX на чипах Apple Silicon
  • предотвратить засыпание Mac mini и настроить автостарт через launchd
  • организовать удалённый доступ к моделям через Tailscale и Caddy
  • поднять интерфейс Open WebUI в контейнере Docker
  • настроить регулярную проверку доступности сервиса скриптом в cron

Примеры запросов агенту

  • Покажи конфигурацию launchd для автозапуска Ollama на Mac mini
  • Как настроить параметры pmset для сервера инференса на Mac mini?
  • Подбери модели Ollama для Mac mini с 32 ГБ памяти и покажи запуск сервера MLX

Как установить mac-mini-llm-lab

1Через Skills CLI (Vercel)

npx skills add BagelHole/DevOps-Security-Agent-Skills --skill mac-mini-llm-lab -a claude-code

2Вручную: положить файлы

~/.claude/skills/mac-mini-llm-lab/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/mac-mini-llm-lab/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора127

azure-monitor-audit Настраивает аудит подписки Azure через Monitor, Log Analytics и журнал действий. Помогает собирать логи для SOC 2, HIPAA, PCI DSS и ISO 27001. CX Codex +1 313установок saas-security-posture Скилл для аудита и ужесточения SaaS-инструментов компании: SSO, OAuth-гранты, теневой IT, админские аккаунты в Slack, GitHub, Google Workspace и AWS. CX Codex +1 314установок datadog Настраивает агент Datadog, сбор логов, APM-трейсинг и метрики для сервисов и баз данных. Пригодится при развёртывании единого мониторинга инфраструктуры. CX Codex +1 312установок firebase-app-platform Скилл помогает агенту собирать бэкенд на Firebase: Auth, Firestore, Cloud Functions и Hosting. Пригодится, когда нужен бэкенд без своего сервера. CX Codex +1 313установок ai-inference-service-mesh Скилл для управления трафиком инференса через Istio и Linkerd: mTLS, канареечные релизы, политики доступа и защита GPU-сервисов. CX Codex +1 310установок vector-database-ops Скилл для развёртывания и настройки векторных баз: Qdrant, Weaviate, pgvector, Pinecone. Пригодится, когда RAG или семантический поиск уходят в прод. CX Codex +1 310установок cloudformation Скилл для развёртывания AWS-ресурсов через CloudFormation: стеки, change sets, вложенные стеки и drift detection. CX Codex +1 310установок multi-tenant-llm-hosting Скилл помогает спроектировать общий хостинг LLM для нескольких команд или клиентов: изоляция тенантов, квоты, биллинг и защита от шумных соседей. CX Codex +1 309установок

Похожие

tunnel-doctor daymade Диагностирует сетевые сбои на macOS и Windows/WSL при конфликтах Tailscale, прокси и TUN-адаптеров. Помогает, когда пинг проходит, а SSH или браузер не отвечают. CX Codex +1 678установок jetson-llm-serve Jetson Team Готовит рецепт запуска LLM или VLM на Jetson через vLLM либо SGLang. Нужен, когда модели требуется OpenAI-совместимый сервер. CX Codex +1 1 200установок speak-tts EmZod Скилл даёт агенту голос: озвучивает текст, статьи и книги прямо на Mac, без API-ключей и облака. CX Codex +1 735установок jetson-llm-benchmark Jetson Team Скилл запускает стандартизированные бенчмарки LLM и VLM на устройствах NVIDIA Jetson через vLLM, llama.cpp и Ollama, возвращая структурированный JSON для сравнения метрик. CX Codex +1 1 200установок docker-expert sickn33 Скилл для ИИ-агента, который разбирает Dockerfile, multi-stage сборки и безопасность контейнеров. Пригодится, когда нужно навести порядок в образах и Compose. CX Codex +1 27 300установок github-actions-templates Seth Hobson Скилл создаёт GitHub Actions для тестирования, сборки и деплоя. Подойдёт, когда в проекте нужно настроить CI/CD или reusable workflows. CX Codex 17 420установок

Рядом в теме «ИИ и ML»

Всё по теме «ИИ и ML» →

Вопросы о mac-mini-llm-lab

Как установить mac-mini-llm-lab в Claude Code?

Выполните команду npx skills add BagelHole/DevOps-Security-Agent-Skills --skill mac-mini-llm-lab -a claude-code.

Что делает скилл mac-mini-llm-lab?

Он даёт агенту инструкции по настройке Mac mini в качестве автономного локального сервера LLM: установку окружения, автозапуск демонов, сетевой доступ и скрипты мониторинга.

Какие системные требования нужны для этой конфигурации?

Требуется Mac mini на Apple Silicon (M2, M3 или M4) с macOS Sonoma 14+ или Sequoia 15+, кабельное подключение Ethernet и от 16 ГБ объединённой памяти.

Исходный текст

SKILL.md · MIT
---
name: mac-mini-llm-lab
description: Configure a Mac mini as a reliable local LLM server with remote access, observability, and power-safe operation. Use when building an always-on private AI inference server on Apple Silicon.
license: MIT
metadata:
  author: devops-skills
  version: "1.0"
---

# Mac mini LLM Lab

Turn a Mac mini into a low-noise, always-on local AI appliance.

## When to Use This Skill

Use this skill when:
- Setting up a dedicated local LLM inference server
- Building a private AI development environment
- Need always-on model serving without cloud costs
- Running models that require Apple Silicon unified memory (32-192GB)
- Creating a home lab AI server for a small team

## Prerequisites

- Mac mini with Apple Silicon (M2/M3/M4, 16GB+ unified memory recommended)
- macOS Sonoma 14+ or Sequoia 15+
- Ethernet connection (recommended over Wi-Fi)
- UPS for power protection (optional but recommended)

## Initial System Setup

```bash
# Update macOS
softwareupdate --install --all

# Install Xcode command-line tools
xcode-select --install

# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Core packages
brew install tmux htop btop wget jq git neovim

# Python environment (for MLX and custom scripts)
brew install [email protected] uv

# Monitoring
brew install prometheus node_exporter
```

## Ollama Setup

```bash
# Install Ollama
brew install ollama

# Pull models based on your RAM
# 16GB Mac mini:
ollama pull llama3.1:8b
ollama pull nomic-embed-text
ollama pull codellama:7b

# 32GB Mac mini:
ollama pull llama3.1:8b
ollama pull qwen2.5:14b
ollama pull deepseek-coder-v2:16b
ollama pull nomic-embed-text

# 64GB+ Mac mini:
ollama pull llama3.1:70b
ollama pull qwen2.5:32b
ollama pull codellama:34b

# Verify Metal acceleration
ollama run llama3.1:8b --verbose
# Look for: "metal" in output
```

## MLX Framework (Apple Silicon Native)

MLX runs models natively on Apple Silicon with excellent performance:

```bash
# Install MLX
uv pip install mlx mlx-lm

# Run a model
python3 -c "
from mlx_lm import load, generate
model, tokenizer = load('mlx-community/Llama-3.1-8B-Instruct-4bit')
response = generate(model, tokenizer, prompt='Explain Docker in 3 sentences', max_tokens=200)
print(response)
"

# MLX server (OpenAI-compatible API)
uv pip install mlx-lm[server]
mlx_lm.server --model mlx-community/Llama-3.1-8B-Instruct-4bit --port 8080
```

## Auto-Start with launchd

```xml
<!-- ~/Library/LaunchAgents/com.ollama.serve.plist -->
<?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>com.ollama.serve</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/ollama</string>
        <string>serve</string>
    </array>
    <key>EnvironmentVariables</key>
    <dict>
        <key>OLLAMA_HOST</key>
        <string>0.0.0.0</string>
        <key>OLLAMA_NUM_PARALLEL</key>
        <string>4</string>
        <key>OLLAMA_MAX_LOADED_MODELS</key>
        <string>2</string>
        <key>OLLAMA_FLASH_ATTENTION</key>
        <string>1</string>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/tmp/ollama.log</string>
    <key>StandardErrorPath</key>
    <string>/tmp/ollama.err</string>
</dict>
</plist>
```

```bash
# Load the service
launchctl load ~/Library/LaunchAgents/com.ollama.serve.plist

# Check status
launchctl list | grep ollama

# Unload if needed
launchctl unload ~/Library/LaunchAgents/com.ollama.serve.plist
```

## Power & Reliability

```bash
# Prevent sleep (keeps running with lid closed on Mac mini)
sudo pmset -a disablesleep 1
sudo pmset -a sleep 0

# Auto-restart after power failure
sudo pmset -a autorestart 1

# Schedule weekly reboot (Sunday 4 AM)
sudo pmset repeat shutdown MTWRFSU 03:55:00
sudo pmset repeat poweron MTWRFSU 04:00:00

# Check power settings
pmset -g
```

## Remote Access

### Tailscale (Recommended)

```bash
# Install Tailscale for easy secure remote access
brew install --cask tailscale

# Enable from menu bar, authenticate
# Access your Mac mini from anywhere: http://mac-mini:11434
```

### SSH Hardening

```bash
# Enable remote login
sudo systemsetup -setremotelogin on

# Edit SSH config
sudo nano /etc/ssh/sshd_config
# Add:
# PasswordAuthentication no
# PubkeyAuthentication yes
# PermitRootLogin no
# AllowUsers yourusername

# Restart SSH
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
```

### Reverse Proxy with Caddy

```bash
brew install caddy

# Caddyfile
cat > /opt/homebrew/etc/Caddyfile << 'EOF'
llm.local:443 {
    tls internal
    reverse_proxy localhost:11434

    @api path /v1/*
    handle @api {
        reverse_proxy localhost:11434
    }
}

webui.local:443 {
    tls internal
    reverse_proxy localhost:3000
}
EOF

brew services start caddy
```

## Open WebUI Setup

```bash
# Run Open WebUI via Docker
docker run -d \
  --name open-webui \
  -p 3000:8080 \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -e WEBUI_AUTH=true \
  -v open-webui:/app/backend/data \
  --restart unless-stopped \
  ghcr.io/open-webui/open-webui:main

# Or install Docker first if not available
brew install --cask docker
```

## Monitoring

```bash
# Health check script
cat > ~/scripts/llm-health.sh << 'SCRIPT'
#!/bin/bash
# Check Ollama
if curl -sf http://localhost:11434/api/tags > /dev/null; then
    echo "$(date): Ollama OK"
    curl -s http://localhost:11434/api/ps | python3 -m json.tool
else
    echo "$(date): Ollama DOWN"
    # Restart
    launchctl kickstart -k gui/$(id -u)/com.ollama.serve
fi

# System stats
echo "CPU: $(top -l 1 -n 0 | grep 'CPU usage')"
echo "Memory: $(vm_stat | head -5)"
echo "Disk: $(df -h / | tail -1)"
echo "Thermal: $(sudo powermetrics --samplers smc -n 1 2>/dev/null | grep 'CPU die' || echo 'N/A')"
SCRIPT
chmod +x ~/scripts/llm-health.sh

# Schedule health check every 5 minutes
# Add to crontab: crontab -e
# */5 * * * * ~/scripts/llm-health.sh >> ~/logs/llm-health.log 2>&1
```

### Memory Usage by Model

| Model | RAM Required | Tokens/sec (M2) | Tokens/sec (M4) |
|-------|-------------|-----------------|-----------------|
| llama3.1:8b (Q4) | ~5 GB | ~25 t/s | ~45 t/s |
| qwen2.5:14b (Q4) | ~9 GB | ~15 t/s | ~30 t/s |
| llama3.1:70b (Q4) | ~40 GB | ~5 t/s | ~10 t/s |
| nomic-embed-text | ~300 MB | N/A | N/A |
| codellama:13b | ~8 GB | ~18 t/s | ~35 t/s |

## Security Checklist

```bash
# Enable FileVault disk encryption
sudo fdesetup enable

# Enable firewall
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on

# Disable unnecessary sharing services
sudo launchctl disable system/com.apple.screensharing
sudo launchctl disable system/com.apple.AirPlayXPCHelper

# Set strong admin password
# System Settings > Users & Groups

# Restrict Ollama to local network only (if not using Tailscale)
# Set OLLAMA_HOST=127.0.0.1 in launchd plist
```

## Performance Tuning

```bash
# Increase file descriptor limits for concurrent requests
sudo launchctl limit maxfiles 65536 200000

# Check unified memory pressure
memory_pressure

# Monitor GPU usage (Metal)
sudo powermetrics --samplers gpu_power -n 1

# Optimize for inference (disable Spotlight indexing on model dirs)
mdutil -i off ~/.ollama
```

## Troubleshooting

| Issue | Solution |
|-------|---------|
| Model loading slow | First load caches to memory; subsequent loads are fast |
| Out of memory | Use smaller quantization (Q4_K_M), reduce `OLLAMA_MAX_LOADED_MODELS` |
| Mac sleeping | Run `sudo pmset -a disablesleep 1` |
| Ollama not starting | Check `launchctl list | grep ollama`, view `/tmp/ollama.err` |
| Slow over Wi-Fi | Use Ethernet; Wi-Fi adds latency to streaming responses |
| Thermal throttling | Ensure adequate ventilation, check `powermetrics` |

## Related Skills

- [ollama-stack](../ollama-stack/) — Software stack with Docker Compose and LiteLLM
- [ssh-configuration](../../servers/ssh-configuration/) — Secure remote access
- [vpn-setup](../../../security/network/vpn-setup/) — Remote access via WireGuard/Tailscale

© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой