Local Coding Agents That Actually Work on Apple Silicon

Pointing a coding agent at a local model is easy. Getting the tool calls, streaming, and multi-step edits to actually land is the hard part — and it quietly breaks as the agents ship new versions. So we test it, every release, on the real binaries. Here's what passes.

Wiring a coding agent to a local model is a two-line change: point it at http://localhost:8000 instead of a cloud endpoint. The two lines are easy. What's hard — and what quietly decides whether the agent feels smart or brain-dead — is everything underneath: does the tool call round-trip? Does streaming render token by token? Does a multi-step edit-and-test loop actually terminate? And critically: does it still work after the agent ships a new version next week?

That last question is why a "works with X" badge isn't worth much on its own. Agents like Claude Code and Codex ship new builds constantly, and each one can change the wire shape just enough to break an integration that passed a month ago. So instead of claiming compatibility once and moving on, we re-verify the agents that matter against the current client binary every release — running the real claude, codex, aider, and hermes processes through actual coding tasks on a real model.

Here's the state as of July 2026, on Apple Silicon.

The four agents we verify end-to-end every release

These four get the deepest guarantee we offer: a real end-to-end run on the current build, every release. One for each API a coding agent might speak.

Agent API wire One-line setup Verified (2026-07-28)
**Claude Code** /v1/messages (Anthropic) ANTHROPIC_BASE_URL=http://localhost:8000 ✅ real multi-step edit, clean end_turn
**Codex CLI** /v1/responses (OpenAI) rapid-mlx agents codex --setup ✅ real edit, --strict-config clean
**Aider** /v1/chat/completions OPENAI_API_BASE=http://localhost:8000/v1 ✅ SEARCH/REPLACE applied
**Hermes** /v1/chat/completions rapid-mlx agents hermes --setup ✅ 60+ tool block, tool call round-trip

Each of the three APIs a modern coding agent might speak has one agent we test against it: Anthropic's messages API (Claude Code), OpenAI's newer responses API (Codex), and classic chat-completions (Aider and Hermes). That last wire is the busiest, so it gets two very different agents — Aider for reach (it's one of the most-installed coding CLIs), and Hermes for depth (it injects 60+ tools every turn, which is the hardest possible stress test for local tool-calling).

What "verified" actually means

Plenty of projects will tell you a tool "works." Here's the specific thing we check, because it's the part that breaks.

We boot a real rapid-mlx serve with a strong 8-bit model (qwen3.6-35b-8bit), point the actual agent binary at it, and give it a real coding task in a throwaway git repo:

"Run python3 test_calc.py — it fails. Fix the bug in calc.py so all assertions pass, then re-run to confirm."

A passing run means the agent read the file, ran the test (a real shell tool call), saw the failure, edited the source, re-ran the test, saw it pass, and terminated cleanly. Every one of the four above did exactly that — the classic off-by-one in a factorial loop, fixed and re-verified by the agent itself, against a local model:

 def factorial(n):
     result = 1
-    for i in range(1, n):
+    for i in range(1, n + 1):
         result *= i
     return result

No hand-holding, no manual retries. The tool loop, the streaming, the stop-reason mapping, and the error handling (unknown model → a clean 404, not a 500 retry-storm) all held up on the current binaries: claude 2.1.211, codex 0.145.0, aider 0.86.2, hermes 0.9.0.

Why an 8-bit model and not a 4-bit one? Because at 4-bit, a weak reply is ambiguous — you can't tell whether the model fumbled or the integration did. A strong model makes any failure attributable to the wire, which is the only thing an integration test should be measuring.

Two-minute setup

The whole thing is one install and one server:

# 1. Install (Apple Silicon)
curl -fsSL https://rapidmlx.com/install.sh | bash

# 2. Start a local OpenAI/Anthropic-compatible server
rapid-mlx serve qwen3.6-35b-8bit

# 3. Point your agent at it — e.g. Claude Code:
rapid-mlx launch claude-code

rapid-mlx launch claude-code patches Claude Code's config to route at localhost — no manual env vars. For the OpenAI-wire agents, rapid-mlx agents codex --setup (or aider, hermes) writes the right config for you. Each agent has a full walkthrough: Claude Code, Codex CLI, Aider, and the Hermes guide.

Once it's running, an all-day agent session costs exactly nothing, and your code never leaves the Mac.

Why these four — and what about Cursor and the rest?

We support 11 agent CLIs plus 3 Python frameworks in total, all wire-verified against real weights every release. The four above get the deepest guarantee — a real end-to-end run on the current build. The other seven — OpenCode, Qwen Code, OpenHands, Kilo Code, GitHub Copilot, Factory Droid, and Moonshot Kimi Code — are verified in the integration matrix and configured on demand.

One honest note on Cursor: its IDE chat and composer point at a local server just fine (Settings → Models → OpenAI Base URL), and that's worth doing. But Cursor's background agent runs through Cursor's own backend, which can't be redirected to a custom endpoint — so we can't give it the same headless, every-release guarantee a CLI gets. That's a limit of Cursor's architecture, not the model, and we'd rather say so than paper over it. Full details in the Cursor guide.

Coming from Ollama? The migration guide maps the commands one-to-one.

The point

A local coding agent is only useful if it behaves like the cloud one you're used to — tools fire, edits land, the loop ends. That's a moving target, because the agents keep shipping. The four agents here cleared a real edit-and-fix task on current binaries as of July 2026, and we'll re-run it every release. If you want the full per-agent, per-model breakdown — including the documented XFAILs and why they happen — it's all in the integration matrix.


Run this yourself. rapid-mlx is an open-source, OpenAI-compatible inference server for Apple Silicon. One command installs it, then rapid-mlx serve <alias> serves any model on localhost:8000/v1.
curl -fsSL https://rapidmlx.com/install.sh | bash

New models and speedups, in your inbox

A short note whenever rapid-mlx gets faster or adds models worth running on your Mac. No spam — unsubscribe anytime.