MLX HarnessVersion 0.2.0

AI that runs on your Mac.

Chat with open models, let them write code with real tools, make and edit images, and serve them to every app you use through one local API. Nothing leaves your Mac. Free and open source.

Free · 589 MB · signed and notarized · macOS 14.5 or later · Apple silicon (M1 or later)
Source on GitHub · MLX Node comes inside

MLX Harness
Illustration of the MLX Harness window, showing: Chat with tools.
34 agent tools
Built in, plus your MCP servers
131 model types
Tuned profiles across 90 families
16 image models
Generate, edit and upscale
3 API formats
OpenAI, Anthropic and Ollama
$0 free
Apache 2.0, no account

Chat with any open model.

Simple enough to open and start talking. Deep enough to show you what the model is doing, and why.

Streaming chat

Replies stream in with live speed, tool calls appear as pills you can open, and every conversation is kept on your Mac.

See it think

Reasoning shows in a block you can fold away. Turn thinking on, off or leave it to the model, and set its effort where the model allows.

Images, video, audio

Drop a photo, a video, a voice note or a text file into the chat. Models that take them see them; others are told so.

Talk and listen

Dictate with Whisper and hear replies read aloud with Kokoro. Both run on your Mac too.

Local or remote

Chat with the models on your Mac, or connect a remote OpenAI-compatible endpoint and use it in the same window.

Five languages

The app speaks English, Español, 日本語, 한국어 and 中文, and follows your Mac’s light or dark appearance.

Reasoning is read for Qwen 3, DeepSeek R1, GLM, MiniMax M2 and M3, gpt-oss, Mistral, Gemma 4, Muse Glimmer, Inkling, any <think> model.

34 tools. Your files, your terminal, your Mac.

Turn on built-in tools in a chat, pick a working folder, and the model can read and edit code, search it, run commands and check git, on your machine. Switch any group off, and add MCP servers for more.

Files 15

  • read_fileRead a file with line numbers
  • write_fileCreate or overwrite a file
  • edit_fileReplace exact text
  • patch_fileApply a unified diff
  • batch_editSeveral edits in one call
  • insert_textInsert text at a line
  • replace_linesReplace a range of lines
  • apply_regexRegex replace across files
  • copy_fileCopy a file
  • move_fileMove or rename
  • delete_fileDelete a file or empty folder
  • create_directoryMake folders
  • list_directoryList a folder
  • read_imageRead an image file
  • read_videoAttach a video for a vision model

Search and navigation 6

  • search_filesSearch contents with ripgrep
  • find_filesFind files by name
  • get_treeProject tree, minus .gitignore
  • file_infoSize, type, dates, permissions
  • diff_filesDiff two files, or against git HEAD
  • get_diagnosticsTypeScript, ESLint or Python checks

Shell 4

  • run_commandRun a command, 60-second limit
  • spawn_processStart a dev server or watcher
  • get_process_outputRead a background process
  • run_applescriptAutomate Mac apps

Web 3

  • ddg_searchWeb search, no key needed
  • web_searchBrave Search, with your key
  • fetch_urlRead a page as text

Git 1

  • gitStatus, diff, log, commit and more; force-push and other destructive commands are blocked

Utilities 4

  • get_current_datetimeDate, time and time zone
  • clipboard_readRead the clipboard
  • clipboard_writeWrite to the clipboard
  • count_tokensEstimate tokens in a text

You Always on

  • ask_userStop and ask you a question

Bring your own agent

Prefer your own coding agent? Point it at MLX Harness’s local API. MLX Harness sets up Claude Code, Codex CLI, OpenCode, OpenClaw and Hermes Agent in one click, and puts their settings back when you remove it.

The local API →

Tool calls are read in 26 model formats (Qwen, XML function calls (Qwen3 Coder, MiMo), Llama, Mistral, Hermes, DeepSeek, DeepSeek V4 (DSML), Kimi, GLM-4.7, MiniMax, MiniMax M3, Gemma 3, Gemma 4, Granite, Nemotron, xLAM, Functionary, Step 3.5, Spark 2.5, LFM2, MiniCPM 5, openPangu, Hunyuan, ZAYA, Muse Glimmer, dots), or detected automatically. Commands time out after 60 seconds, background processes stop after 5 minutes, and Brave Search needs your own key.

Make and edit images on your Mac.

16 image models, downloaded when you first use them. Give it a prompt, or a photo and a prompt to restyle it, paint a mask to change one part, or upscale the result. No credits, no uploads.

Generate

From a prompt, or from a photo and a prompt.

ModelStepsSize
Flux SchnellThe fastest46–24 GB
Z-Image TurboFast turbo generation46–24 GB
Flux DevHigh quality206–24 GB
FLUX.2 Klein 4BFast and small204–8 GB
FLUX.2 Klein 9BMedium quality208–18 GB
Qwen ImageStrong prompt understanding2020–40 GB
Qwen Image 2.1also editsGeneration and reference editing4010–32 GB
Qwen Image 2.1 Turboalso editsDistilled, 8 steps832 GB
Ideogram 4Typography and structured captions2014–28 GB
FIBOfrom a folderJSON prompts209 GB at 4-bit

Edit

Change a photo with words, or paint a mask and fill it.

ModelStepsSize
Qwen Image EditInstruction-based editing2854 GB
Flux KontextKeeps the subject consistent246–24 GB
Flux FillInpainting with a mask2024 GB
FLUX.2 Klein 4B EditReference image editing204–8 GB
FLUX.2 Klein 9B EditReference image editing208–18 GB

Upscale

Sharper, larger versions of an image.

ModelStepsSize
SeedVR2 3Bfrom a folderNative image upscaling17 GB

Sizes are the app’s own estimates: a range runs from the 4-bit build to full precision. “From a folder” models open from a copy already on your Mac. Images run on mflux, and the same models answer the API at /v1/images/generations and /v1/images/edits.

Underneath it, the vMLX engine.

MLX Harness is the app: the chat window, the tools, the model browser. Underneath runs vMLX’s open-source inference engine by JANGQ AI, the same one you can install on its own. It is built to keep long conversations and many agents fast on Apple silicon.

Prefix cache

The parts of a prompt you’ve already sent are computed once and reused, so a long chat doesn’t get slower with every turn.

Paged KV cache

The cache lives in fixed-size blocks that conversations share, so many chats and agents fit in memory side by side.

SSD cache

Prompt caches are written to your SSD and survive a restart: come back to a warm start instead of computing it all again.

KV cache quantization

Store the cache at 8 bits (about half the memory) or 4 bits (about a quarter), which is what lets very long contexts fit.

Continuous batching

Several requests share one loaded model: one by default, up to 1,024 at once if you raise the limit for a session.

Speculative decoding

A small draft model proposes tokens the big one checks, prompt lookup speeds up repetitive output, and models with built-in MTP heads use them.

Hybrid and SSM models

Mamba, Jamba, RWKV, Nemotron-H, Falcon-H1 and Qwen3-Next keep their own state caches, not a transformer’s.

Flash MoE

Streams a mixture-of-experts model’s expert weights from the SSD as they are needed, so models bigger than memory can run.

Vision, voice and embeddings

Vision-language models, Whisper speech-to-text, Kokoro text-to-speech, embeddings and reranking, all on the same server.

Each model family gets its own cache, tool-call and reasoning settings: 90 families with tuned profiles, covering 131 Hugging Face model types.

  • baichuan
  • bailing_hybrid
  • bailing_moe_v2_5
  • chatglm
  • codestral
  • codestral_mamba
  • cogvlm
  • cogvlm2
  • cohere
  • cohere2
  • deepseek
  • deepseek2
  • deepseek_v2
  • deepseek_v3
  • deepseek_v32
  • deepseek_v4
  • deepseek_vl
  • deepseek_vl2
  • deepseek_vl_v2
  • devstral
  • dots3_note
  • exaone
  • exaone3
  • falcon_h1
  • falcon_mamba
  • florence2
  • gemma
  • gemma2
  • gemma3
  • gemma3_text
  • gemma3n
  • gemma3n_text
  • gemma4
  • gemma4_text
  • glm
  • glm4
  • glm4_moe
  • glm4_moe_lite
  • glm5_next
  • glm5_next_text
  • glm_moe_dsa
  • got_ocr2
  • gpt_oss
  • granite
  • granite_moe
  • granitemoehybrid
  • hermes
  • hy_v3
  • idefics2
  • idefics3
  • internlm
  • internlm2
  • internlm3
  • internlm_xcomposer2
  • internvl_chat
  • jamba
  • kimi_k2
  • kimi_k25
  • laguna
  • lfm2
  • lfm2_moe
  • llama
  • llama4
  • llava
  • llava_next
  • mamba
  • mamba2
  • mimo_v2
  • minicpmv
  • minicpmv4_7
  • minimax
  • minimax_m2
  • minimax_m2_5
  • minimax_m3
  • minimax_m3_vl
  • ministral3
  • mistral
  • mistral3
  • mistral4
  • mixtral
  • molmo
  • muse_glimmer
  • naive_n05_flash
  • nanbeige
  • nemotron
  • nemotron_h
  • nemotron_h_v2
  • olmo
  • olmo2
  • openpangu_v2
  • paligemma
  • paligemma2
  • phi
  • phi3
  • phi3small
  • phi3v
  • phi4
  • phi4_reasoning
  • phi4flash
  • phi4mm
  • pixtral
  • qwen
  • qwen2
  • qwen2_5_vl
  • qwen2_moe
  • qwen2_vl
  • qwen3
  • qwen3_5
  • qwen3_5_moe
  • qwen3_5_moe_text
  • qwen3_moe
  • qwen3_next
  • qwen3_vl
  • qwen3_vl_moe
  • qwen4_exp
  • qwen4_exp_text
  • qwen_mamba
  • rwkv
  • rwkv5
  • rwkv6
  • rwkv7
  • smolvlm
  • spark2_5
  • stablelm
  • starcoder2
  • step
  • step1v
  • step3p5
  • step3p7
  • zaya
  • zaya1_vl

A local API for every app you use.

Each model you load gets its own server, and one gateway at http://127.0.0.1:8080 routes every request to the model it names, loading it if it’s stopped. It speaks OpenAI, Anthropic Messages and Ollama, so Claude Code, the OpenAI and Anthropic SDKs and apps built for Ollama connect unchanged.

curl http://127.0.0.1:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen3-8B-4bit",
    "messages": [{"role": "user", "content": "Hello!"}],
    "stream": true
  }'

Any OpenAI-compatible client works the same way. Use the model’s name as Servers & API shows it, or list them at /v1/models.

from openai import OpenAI

client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="not-needed")

reply = client.chat.completions.create(
    model="Qwen3-8B-4bit",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(reply.choices[0].message.content)

No key is needed unless you set one for the session; the SDK just wants a value.

import anthropic

client = anthropic.Anthropic(base_url="http://127.0.0.1:8080", api_key="not-needed")

message = client.messages.create(
    model="Qwen3-8B-4bit",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}],
)
print(message.content[0].text)

The Anthropic SDK adds /v1/messages itself, so the base URL stops at the port.

~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:8080",
    "ANTHROPIC_MODEL": "Qwen3-8B-4bit",
    "ANTHROPIC_API_KEY": "mlxstudio"
  }
}

Merge the env block into your settings, or let MLX Harness do it: Servers & API → API → Coding tools → Auto-configure. Removing it there restores what you had.

export OLLAMA_HOST=http://127.0.0.1:8080

ollama list
ollama run Qwen3-8B-4bit

Apps and tools built for Ollama talk to the same gateway through its /api endpoints.

pip install vmlx
vmlx serve mlx-community/Qwen3-8B-4bit

# http://127.0.0.1:8000/v1

Just the server, without the app: vMLX’s engine from PyPI, by JANGQ AI. It serves the same OpenAI, Anthropic and Ollama endpoints on port 8000.

OpenAI For the OpenAI SDKs and most apps.

  • POST/v1/chat/completionsChat, streaming and tool calls
  • POST/v1/responsesResponses API
  • POST/v1/completionsPlain text completion
  • POST/v1/embeddingsEmbeddings
  • POST/v1/images/generationsMake an image
  • POST/v1/images/editsEdit an image
  • POST/v1/audio/transcriptionsSpeech to text
  • POST/v1/audio/speechText to speech
  • GET/v1/modelsLoaded models

Anthropic For Claude Code and the Anthropic SDK.

  • POST/v1/messagesMessages API, streaming and tools

Ollama For apps built for Ollama.

  • POST/api/chatChat
  • POST/api/generateGenerate
  • POST/api/embedEmbeddings
  • GET/api/tagsModels

Sessions take ports from 8000 up; the gateway listens on 8080 on 127.0.0.1 unless you change it. No key is needed unless you set one. MCP tools are served at /v1/mcp/tools and /v1/mcp/execute.

Find, download and convert models.

Search Hugging Face and download from inside the app. Inspect a model, run a health check on it, or convert one yourself instead of waiting for someone to publish it.

Find & download

Search Hugging Face by name, see what’s already on your Mac, and download with progress you can pause and resume.

Convert to MLX

Turn a Hugging Face model into MLX: Compact (3-bit), Balanced (4-bit), Quality (8-bit), your own bit width, or one of JANG’s mixed-precision profiles.

Inspect & diagnose

Model Inspector reads a model’s metadata; Model Doctor checks its config, weights and architecture, and can test it.

JANG profiles

Mixed precision by JANGQ AI: attention keeps more bits than the MLP layers, so a model shrinks where it hurts least.

ProfileMixAvg. bits
1L Max quality 2-bit8-bit attention and embeddings, 2-bit MLP~2.4
2S Tight6-bit attention, 4-bit embeddings, 2-bit MLP~2.3
2M Balanced8-bit attention, 4-bit embeddings, 2-bit MLP~2.5
2L Quality8-bit attention, 6-bit embeddings, 2-bit MLP~2.7
3S Compact6-bit attention, 3-bit everything else~3.1
3M Recommended8-bit attention, 3-bit everything else~3.2
3L Protected8-bit attention, 4-bit embeddings, 3-bit MLP~3.4
4S Light6-bit attention, 4-bit everything else~4.1
4M Standard8-bit attention, 4-bit everything else~4.2
4L Premium8-bit attention, 6-bit embeddings, 4-bit MLP~4.5
6M Near lossless8-bit attention, 6-bit everything else~6.2

GGUF files aren’t supported: start from the model’s Hugging Face weights instead.

What can your Mac run?

Memory decides which models fit. Bandwidth decides how fast they write. Here are the best five for your Mac, from the same numbers as mlx.app/compare.

Memory

 

11 of 43 popular models run well on M5 with 16 GB153 GB/s memory bandwidth
  1. Gemma 4 E4BGoogle DeepMind8-bit · 8.5 GB14–26 tok/s
  2. Qwen3.5 4BQwen (Alibaba)8-bit · 4.3 GB16–28 tok/s
  3. Llama 3.2 3B InstructMeta8-bit · 3.4 GB20–36 tok/s
  4. SmolLM3 3BHugging Face8-bit · 3.2 GB22–38 tok/s
  5. Qwen3.5 0.8BQwen (Alibaba)8-bit · 0.9 GB77–136 tok/s

Estimates, not measurements: the fit comes from each model’s size at the precision shown and 75% of the Mac’s memory; the speed from its memory bandwidth, at the 45–80% of the ceiling that real runs reach. One chat at a time.

Every model on this Mac →

When you’re done, your Mac can earn.

MLX Harness runs the models you choose. MLX Node, which MLX Harness carries inside and installs on first run, lends your Mac’s idle time to MLX Network and mines MLX Tokens for verified AI work. MLX Harness’s Network tab shows the network live, whether MLX Node is running, and what your wallet is mining. MLX Harness itself never mines.

MLX Network, liveSee it on the map →
Macs online
–
Macs working now
–
Tokens a second
–
AI tokens today
–
Countries
–
  1. UseChat, code and create with local models in MLX Harness.
  2. LendWhen the Mac is idle, MLX Node runs jobs for the network.
  3. EarnVerified work earns MLX Tokens, recorded on the public ledger.
  4. Reach PlannedToo big for your Mac? Send it, whole, to a bigger Mac on the network, or to your own at home.

Local first, like a BitTorrent peer: your Mac serves you, lends its idle time, and can ask the network when it needs more. How it works

Guides.

Step by step, on mlx.app.

Open source, with credit.

MLX Harness is a fork of vMLX by JANGQ AI under the Apache License 2.0, and our changes are open under the same license, alongside the source of MLX Node and MLX.app for iPhone. Read it at github.com/MLXapp/studio.

Questions.

What is MLX Harness?
A free, open-source Mac app for running open AI models on your own Mac. Chat with them, let them work as coding agents with 34 built-in tools and your MCP servers, generate and edit images, and serve them to other apps through a local OpenAI-, Anthropic- and Ollama-compatible API. It is built on vMLX by JANGQ AI.
Is MLX Harness free?
Yes. No account, no subscription and no paid tier. It is open source under the Apache License 2.0, and models run on your Mac, so there are no API fees either.
Which Macs can run it?
Macs with Apple silicon (M1 or later) on macOS 14.5 or later. Memory decides how big a model you can run: macOS lets the GPU use about 75% of it by default. The checker on this page shows what fits your Mac, and mlx.app/compare compares every model.
When can I download it?
Now. MLX Harness 0.2.0 is a free download from harness.mlx.app and mlx.app/download, signed with Developer ID and notarized by Apple. The source is on GitHub at github.com/MLXapp/studio, and the app tells you when a newer version is out.
Does it need the internet?
Only to download models, and for the web tools or a remote endpoint if you choose to use them. The models themselves run offline on your Mac.
Do my prompts leave my Mac?
No. Models run on your Mac and the local API listens on 127.0.0.1 unless you change it. Prompts only go out if you connect a remote endpoint yourself or let a model use the web tools.
Can I use it with Claude Code, Codex or my own apps?
Yes. The gateway at http://127.0.0.1:8080 speaks the OpenAI, Anthropic Messages and Ollama APIs and routes each request to the model it names. MLX Harness can set up Claude Code, Codex CLI, OpenCode, OpenClaw and Hermes Agent for you, and put their settings back when you remove it.
Can I use cloud models as well?
Yes. Connect a remote OpenAI-compatible endpoint with its URL, model and key, and chat with it in the same window as your local models.
Does it run GGUF files?
No. MLX Harness runs MLX models, including JANG mixed-precision ones. If a model is only in GGUF, download its original Hugging Face weights and convert them in the app to 3, 4 or 8 bits, or to a JANG profile.
Wasn't this called MLX Studio?
Yes, until 20 October 2026. JANGQ AI, who make vMLX, call their own app MLX Studio, so we renamed ours MLX Harness to keep the two apart. Nothing else changed: same app, same updates, and studio.mlx.app now opens this page.
How is MLX Harness related to vMLX?
MLX Harness is a fork of vMLX by JANGQ AI (Apache License 2.0), imported at vMLX 1.6.80. The inference engine is vMLX’s, unchanged; our changes are to the desktop app: its look, the Network tab, the update feed and the removal of upstream promotions. vMLX’s engine is also on PyPI as vmlx.
How is MLX Harness different from MLX Node?
MLX Harness is for you: it runs the models you choose. MLX Node is a separate menu bar app that lends your Mac’s idle time to MLX Network and mines MLX Tokens for verified work. MLX Harness carries MLX Node inside and installs it on first run. MLX Harness’s Network tab shows the network live and what your wallet is mining.
Does MLX Harness mine MLX Tokens?
No. MLX Harness never mines. It reads the network’s public figures and can open MLX Node, the app that mines. MLX Tokens are a crypto asset; read the risks on mlx.app before you take part.
Is MLX Harness made by Apple?
No. MLX Harness runs on Apple’s open-source MLX framework but is independent and not affiliated with or endorsed by Apple.

Your models. Your Mac.

Free, open source and private by design.

  • macOS 14.5 or later
  • Apple silicon, M1 or later
  • Memory decides the model size
  • Python is built in: nothing else to install

Built on vMLX by JANGQ AI · MLX Harness and MLX Network are independent and not affiliated with Apple.