Run many agents 3x faster on your Mac Generated Computers released Locals, a local inference server for running AI agents on a Mac that it says completes work up to 3x faster than the standard way of running models locally, and 2.5x sooner than mlx-lm with llguidance for sixteen tool-calling agents. Locals is built on Arip Asadulaev's 2026 paper "Breaking the Space Barrier and its Application to Language Model Inference," which constrains tool-call and JSON output on the GPU using about 3 MB of memory per format instead of up to 1.5 GB. The server works with OpenCode, OpenHands, Cline, Aider, Claude Code and any OpenAI, Anthropic or Ollama app, keeps agent system prompts of 3,000 to 16,000 tokens on disk across restarts, and starts the next turn of a 138,000-token conversation after 2.4 seconds. Run many AI agents at once on your Mac, up to 3x faster. A local server made for agents rather than plain chat: tool calls, long conversations and many agents working at the same time. For OpenCode, OpenHands, Cline, Aider, Claude Code and any OpenAI, Anthropic or Ollama app. Getting started getting-started · Agents works-with-your-agents · Benchmarks https://github.com/Generated-Computers/Locals/blob/main/docs/benchmarks/README.md · Documentation documentation · Paper curl -LsSf https://raw.githubusercontent.com/Generated-Computers/Locals/main/install.sh | sh Or, if you use uv https://docs.astral.sh/uv/ , install it from PyPI https://pypi.org/project/locals/ : uv tool install --python 3.12 locals Then, in a new Terminal window: locals code ~/my-project That is all. The first time, Locals downloads a model that suits your Mac about 3 GB , starts it in the background and opens the OpenCode assistant in your project. Nothing leaves your computer. Locals runs AI models on your own Mac for agents, not for chatting with a raw model. An agent works differently from a person in a chat. It calls tools, and every call has to be right. It sends a long prompt that grows a little every turn. And it rarely works alone: coding assistants run helpers in parallel, and teams of agents split one task between them. Locals is built for this work, from the way it computes a batch of requests on your Mac's graphics chip to the way it writes a tool call, so a team of agents gets its answers up to three times faster than with the standard way of running models on a Mac. It works with the coding agents you may already use, such as OpenCode, Cline, Aider, OpenHands and Claude Code, and with any app or program that talks to OpenAI, Anthropic or Ollama. Everything stays on your computer. Locals is built on the paper Breaking the Space Barrier and its Application to Language Model Inference https://arxiv.org/abs/2610.09139 Arip Asadulaev, 2026 . A JSON format or a tool call can be described as a graph, and checking a reply against it as finding a path in that graph. The paper does this in less memory than Savitch's classical bound and turns it into an inference engine: text the format already decides is written without running the model, the checks run on the graphics chip, and a format needs about 3 MB of memory instead of up to 1.5 GB. With it, sixteen tool-calling agents finish 2.5 times sooner than with mlx-lm and llguidance. - Many agents at once. Requests from every agent are computed together, with GPU kernels written for a few requests at a time, so eight agents working at once finish in about the time two would need one after the other. - Tool calls that always parse. Replies are written in each model's own tool-call format under a grammar applied on the GPU, so an agent can call only the tools it offered, every argument arrives in the type its schema asks for, and a reply cut off by its length limit still closes its call. Requests for JSON follow their schema the same way. - Each turn picks up where the last one ended. Locals keeps every conversation between turns, and the long system prompt an agent tool starts with 3,000 to 16,000 tokens on disk across restarts, so an agent's next turn reads only what it added: the next turn of a 138,000-token conversation starts after 2.4 seconds. - Guards made for agents. A small model can repeat itself or call the same tool forever; Locals notices and stops both. A memory guard keeps many agents with long prompts from ending in an out-of-memory error, and an agent that hangs up frees the server at once. - One command per agent tool. locals code opens OpenCode in your project, and locals launch connects Hermes Agent, OpenClaw, Claude Code, Kilo Code, Cline, OpenHands and Aider. - A team of agents for bigger tasks. locals run splits a task into parts, gives each part to several agents at once, each in its own copy of your project, and lets your tests decide. mlx-lm, the standard way of running models on a Mac, answers several requests together, but it gets no faster from four of them to eight: it writes 87 tokens per second for four requests and the same 87 for eight. Locals keeps getting faster as requests are added, up to three times mlx-lm's speed with eight at once. It is faster for a single agent too: when the reply repeats a file it is rewriting, after a restart, and in long conversations. The table has these cases, on a MacBook Pro with an M2 Pro and 16 GB and Qwen3.5-4B, the default model. | On a MacBook Pro with an M2 Pro and 16 GB, Qwen3.5-4B | Without Locals | With Locals | | |---|---|---|---| | 8 requests at once | 87 tokens/s mlx-lm | 271 tokens/s | 3.1x | | 8 agents asking at once: time to the first word | 42 s Ollama | 1.6 s | 26x sooner | | One agent rewriting a 100-line file | 43 tokens/s mlx-lm | 128 tokens/s | 3.0x | | An agent's first request after a restart | 16 s mlx-lm | 1.7 s | 9.6x sooner | | A follow-up question about a 48,000-token document | out of memory mlx-lm | 0.6 s | | | 16 coding agents calling tools Qwen3.5-2B, from the paper | 75 s mlx-lm | 29 s | 2.5x | | 40 programming problems from LiveCodeBench, 8 at a time from the paper | 20 min mlx-lm | 8 min | 2.5x | Bigger models gain more on the M2 Max: 3.0x for Qwen3.5-9B and 3.1x for a 27B model with eight requests at once. On the M5 Pro the gain is smaller, because mlx-lm is much faster there: MLX has its own kernels for the M5's neural accelerators, and these numbers were measured before Locals had its own. M1, M3 and M4 chips have not been measured yet: results from them are welcome as issues https://github.com/Generated-Computers/Locals/issues , with the output of locals bench and locals tune --report . Every table, and how each was measured, is in Benchmarks https://github.com/Generated-Computers/Locals/blob/main/docs/benchmarks/README.md . Unless a chart says otherwise, it was measured on a MacBook Pro with an M2 Pro 19-core GPU and 16 GB, with Qwen3.5-4B mlx-community/Qwen3.5-4B-MLX-4bit , MLX 0.32 and mlx-lm 0.32. Models quantized to 4 bits in the usual way in groups of 64 gain 2.3x to 3.3x with 8 requests at once; other formats run at mlx-lm's speed below where-locals-is-not-faster . Ollama 0.40.5, Magnitude 0.2.9 and llama.cpp b11724 , one at a time on the GPU, each with its own 4-bit build of the model, measured with SemiAnalysis's InferenceX client temperature 0, replies of natural length . The tables for 1,000- and 8,000-token prompts and for Gemma 4 are in Benchmarks https://github.com/Generated-Computers/Locals/blob/main/docs/benchmarks/README.md 3-against-other-servers . No pause while a long prompt is read. When an agent sends an 8,000-token prompt while others are getting answers, Locals reads it in the same passes as their next tokens, so their replies keep streaming: the longest gap in them went from 12 s to 3 s, with the same throughput, against reading the prompt on its own. A 3,000-token request that arrives during a 30,000-token one gets its first token after 7 s instead of 41. - One request alone, with nothing to reuse : about the same as mlx-lm 64 against 61 tokens per second on the M2 Pro . It is faster alone when the reply repeats the prompt file rewrites or the prompt is cached. - Prompt-bound work : reading a prompt is limited by the GPU's arithmetic. With 8,000-token prompts and 8 requests at once the server writes 57 tokens per second; most of the time goes into reading. - Formats outside the tuned kernels : 4-bit affine quantization in groups of 64 is covered; mxfp4 a mixture-of-experts model, Mellum ran at mlx-lm's speed. - The M5's neural accelerators : MLX's own kernels already use them, so the gain there is 1.5x, not 3x before Locals' own nax kernel, which is experimental . Locals works with the coding agents and assistants people already use, on a model running on your Mac. All of these but Roo Code were tested end to end with Qwen3.5-4B on a 16 GB Mac Cline and Kilo Code through their command-line versions , on real tasks such as writing a program, running it and reporting what it printed. One command starts Locals and connects the tool to it: | Tool | Run | |---|---| | Hermes Agent https://github.com/NousResearch/hermes-agent | locals launch hermes | | Kilo Code https://github.com/Kilo-Org/kilocode | locals launch kilo | | OpenCode https://github.com/anomalyco/opencode | locals code ~/my-project | | OpenHands https://github.com/OpenHands/OpenHands | locals launch openhands | | Cline https://github.com/cline/cline | locals launch cline | | Aider https://github.com/Aider-AI/aider | locals launch aider | | Roo Code https://github.com/RooCodeInc/Roo-Code | in VS Code, the settings from locals launch editor how use-it-in-apps-and-editors | | OpenClaw https://github.com/openclaw/openclaw | locals launch openclaw | | Claude Code https://github.com/anthropics/claude-code | locals launch claude through Anthropic's Messages API, which Locals also answers | locals launch list shows every tool it can open. Locals keeps running in the background after you close a tool: locals status shows what it is doing and locals stop stops it.