Running Claude Code Offline on an M3 Pro with Qwen3.6: 4 Fixes That Made It Work

Claude Code connects to a local model on an Apple M3 Pro (18 GPU cores, 36GiB unified memory, ~150 GB/s bandwidth) running qwen3.6:35b-a3b-coding-nvfp4 — a 35.1B-parameter MoE model with ~3B active per token, NVFP4 quantized, ~21GB on disk and ~20GiB resident. The setup took a Kubernetes incident from investigation to PR: found root cause, wrote patch, pushed branch, filed PR via gh — all air-gapped. Four fixes turned a model that timed out in 10 minutes into one that closes the loop. Speed is hardware-bound; capability is not.
Stack and Environment
- Hardware: Apple M3 Pro, 18 GPU cores, 36 GiB unified memory, ~150 GB/s memory bandwidth
- Model:
qwen3.6:35b-a3b-coding-nvfp4 - Runtime: Ollama 0.24.0, MLX runner (Apple Silicon-native)
- Client: Claude Code v2.1.84 pointed at local Ollama endpoint
Key environment variables (set in a launchd plist for persistence):
OLLAMA_MLX=1
OLLAMA_CONTEXT_LENGTH=32768
OLLAMA_FLASH_ATTENTION=1
OLLAMA_MULTIUSER_CACHE=1
OLLAMA_KEEP_ALIVE=24h
OLLAMA_NO_CLOUD=1
Setup Steps
- Install Ollama 0.24.0+
ollama pull qwen3.6:35b-a3b-coding-nvfp4(~21GB one-time)- Start server with the env vars above
- Launch Claude Code:
ANTHROPIC_BASE_URL=http://localhost:11434 MAX_THINKING_TOKENS=0 claude --model qwen3.6:35b-a3b-coding-nvfp4 - Smoke test:
Run kubectl get pods -A and tell me if anything appears unhealthy
Performance Notes
First tool call: seconds (thinking disabled). Prefill (loading ~25K tokens) takes ~60s. Subsequent turns are faster due to prefix caching (OLLAMA_MULTIUSER_CACHE). The model stays loaded via OLLAMA_KEEP_ALIVE=24h. Burst of 404s in Ollama log during prefill is normal (fix #4).
The MoE architecture is key: only ~3B active per token, so runtime cost resembles a 14B dense model while answers approach 35B. A dense 35B doesn't fit 36GiB.
📖 Read the full source: HN LLM Tools
👀 See Also

Noren AI: Voice Extraction Tool Identifies Writing Patterns from Samples
Noren AI analyzes 5-10 writing samples to automatically generate a voice guide based on actual patterns, matching 90% of manually identified patterns and discovering additional ones.

KubeShark: A Kubernetes Skill for Claude Code and Codex to Catch Hallucinated YAML
KubeShark is a failure-mode-first Kubernetes skill for Claude Code and Codex that catches deprecated APIs, misconfigured probes, broken selectors, and other common AI-generated mistakes before they hit production.

iai-mcp: Local daemon gives Claude persistent memory across sessions with 99% recall
iai-mcp is an open-source local daemon that captures every Claude conversation, organizes it into three memory tiers, and feeds context back on new sessions. Achieves >99% verbatim recall, retrieval under 100ms, and session-start cost under 3,000 tokens.

Anthropic Open-Sources Claude for Legal: Plugin Suite for Contract Review, NDA Triage, and More
Anthropic released Claude for Legal, a repo of plugins, agents, and MCP connectors for legal workflows including vendor agreement review, NDA triage, and regulatory monitoring.