Type what you want to make and it gets built as real files, in a folder on your own computer. The model doing the work is hosted in France and paid from your balance. Already use Claude Code? The same key drives it too.
everything runs through france — nothing leaves the eu
Your host put a link on the slide, like makemode.eu/org/two-words.
Working solo on your own laptop. Start at step 01 and just follow the numbers.
New accounts start with a small balance of EU credits, so there is nothing to buy first.
Open your terminal, paste the line for your machine, press Enter. It installs opencode and points it at MakeMode. You never touch a config file or copy a key.
mac or linux — Terminal (mac: ⌘+space, type terminal, Enter)
windows
Double-click the downloaded file and it does the whole thing: installs opencode for Windows, signs you in, done. Your browser may ask if you trust the file — it comes straight from makemode.eu, and all it does is run this readable script. Rather paste it yourself? The same setup, in PowerShell (Start menu, type powershell, Enter):
More in the Windows note.
A tab opens on account.makemode.eu. Sign in, click confirm, and the terminal finishes on its own. Signing in by email? The link in the mail shows one Continue button; pressing it is what signs you in.
The confirm click made a key for this machine. It's on your account page, named after your computer, and you can revoke it there any time.
Press ⌘+T (Linux: Ctrl+Shift+T). The old window can't see the fresh install; a new tab can. If the script's last line says it already opened a fresh shell for you, skip this. On Windows the setup window itself already works — skip straight to step 04.
Copy the line for your machine into the terminal and press Enter. It makes a folder for your project, steps into it, and opens MakeMode there. The screen changes: your terminal becomes the MakeMode agent.
Type your idea in the box and press Enter — it builds while you watch, as files in this folder. Sometimes it asks permission first: before commands it recognises as risky, like deleting files, publishing, or sending anything off your machine, it stops and asks in the terminal. Read the question, answer y for yes or n for no, and it carries on. Everything else it just does. It can open, change and delete files the way you can. Keep each project in its own folder, and keep a backup of anything you can't afford to lose (Time Machine on a Mac).
One command puts your page on a public, EU-hosted link. Run it again after changes and the same link updates. Publishing is public, so this is one of the moments the agent checks with you first.
makemode --auto skips them for one session; makemode auto on makes that the default and makemode auto off goes back. With auto on, the agent deletes, installs and sends files without asking you. Only a short list of commands, like wiping a disk or your home folder, is still refused. Auto never switches off the folder boundary: the agent still changes files only in the folder you started it in.
You're in the window that ran the setup. Open a new tab (⌘+T) or paste export PATH="$HOME/.opencode/bin:$PATH". If a new tab still can't find it, run ls ~/.opencode/bin — an empty folder means the install didn't finish; paste the setup command again (safe to run twice, and it repairs your shell profile itself).
Ask for a fresh link on the sign-in page, open the new email, and press Continue. Old links in your inbox stay dead.
The room shares one internet address and hit the sending limit. Wait a few minutes and try once more — don't hammer it, each try counts.
The terminal printed a link instead. Copy it into any browser, sign in, click confirm; the terminal notices on its own.
That command is good for 15 minutes. Press the button again for a fresh one.
The setup runs natively on Windows: it installs opencode's official Windows build into your user folder, signs you in from the browser, and writes the same config Mac users get. Admin rights stay untouched and there is nothing to restart. If Windows shows a "protected your PC" screen when you run the downloaded file, that's its standard screen for a file it hasn't seen often — click More info, then Run anyway, or use the PowerShell line from step 01 instead, which skips that screen entirely. One extra for Windows: makemode publish uses Node.js — install it from nodejs.org when you're ready to share; building works without it. Already on WSL or Git Bash? The Mac/Linux setup command works there as before. One difference from the Mac: Windows has no folder boundary yet, so the agent can change or delete any file on the computer, not only the project's. Back up anything important first.
Setting up Claude Code from Windows? Give the script its flag first:
Run the check. It says what's installed, whether your key works, and what to do next:
opencode's wording for a rejected key. Usually the key was mis-copied: the full sk-gw-… key is shown once, on the “key created” screen; the value in your key list is only a short prefix. Check a key in two seconds:
See your balance? The key's good. See invalid_api_key? Create a fresh key and re-run the setup command.
trace trap, or errors with no such columnopencode's local state database got out of sync, usually after an app upgrade. Reset it; your key lives in a separate file and survives:
Relaunch opencode and it rebuilds a fresh database. On brew, brew upgrade opencode is worth a try first.
35;86;21M…A crashed full-screen app left mouse-tracking on. Harmless. Type reset and press Enter (it looks messy as you type, that's fine).
A shared per-minute limit on the EU model. opencode retries with a short backoff and recovers on its own; pause a moment if a big build keeps hitting it.
The script writes two files (plus the launcher, rules and rails). To do it yourself, create a key on your account page and paste it into the second one:
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"model": "makemode/glm-5.2",
"provider": {
"makemode": {
"npm": "@ai-sdk/openai-compatible",
"name": "MakeMode (EU, metered)",
"options": { "baseURL": "https://api.makemode.eu/v1" },
"models": {
"mistral-small-3.2-24b-instruct-2506": { "name": "Mistral Small (EU, fast)", "limit": { "context": 128000, "output": 8192 } },
"devstral-2-123b-instruct-2512": { "name": "Devstral 2 (EU, coding)", "limit": { "context": 128000, "output": 8192 } },
"mistral-medium-3.5-128b": { "name": "Mistral Medium (EU, balanced)", "limit": { "context": 128000, "output": 8192 } },
"glm-5.2": { "name": "GLM 5.2 (EU)", "limit": { "context": 128000, "output": 8192 } },
"qwen3.5-397b-a17b": { "name": "Qwen 3.5 (EU, reasoning)", "limit": { "context": 256000, "output": 8192 } },
"kimi-k2.6": { "name": "Kimi K2.6 (EU, reasoning)", "limit": { "context": 256000, "output": 8192 } },
"kimi-k2.7-code": { "name": "Kimi K2.7 Code (EU, coding)", "limit": { "context": 256000, "output": 8192 } },
"deepseek-v4-pro": { "name": "DeepSeek V4 Pro (EU, agentic)", "limit": { "context": 256000, "output": 8192 } }
}
}
}
}
~/.local/share/opencode/auth.json
{ "makemode": { "type": "api", "key": "sk-gw-YOUR-KEY-HERE" } }
You hold an sk-gw-… key, never the real provider key. The gateway injects that in France — it never reaches your machine.
Requests draw from prepaid EU credits, and spending stops where your balance does. Top up any time.
The gateway only routes EU-hosted models (GLM-5.2 today). It won't send your traffic to a non-European model, even by accident.
Ordinary work just runs. When the agent recognises a command that deletes files, spends credits, publishes, or sends anything off your machine, it waits for your yes; wiping a disk is refused outright. It spots them by matching against a list that covers the usual ways of deleting or sending files, not every possible one. So keep your work in its own folder, with a backup. The rules are readable at agent-rules.md, the enforced list at permissions.json.
On a Mac, and on Linux with bubblewrap installed, your computer itself keeps the agent inside the folder you start makemode in. It can create, change and delete files there, install what the project needs, and reach the internet. Everywhere else it can't change a file, and it can't read your keys, passwords or browser data, whichever command it uses. makemode check proves this on your own computer with decoy files. When a job really needs the rest of the machine, like brew install, makemode unsafe starts one session without the boundary, after asking you. On Windows there is no folder boundary yet: the agent can change or delete any file on the computer, not only the project's.
Lost a key, or done with a machine? Revoke it from your account dashboard and it stops working immediately.
One key runs every EU model MakeMode offers; the default is GLM-5.2, hosted in France. Switching is a per-request setting (opencode has an in-session model switcher), never a new key or sign-up. Your data stays inside the EU whichever you pick — see how the models compare.
The setup script wrote every model into your config. Point "model" at another entry:
{
"model": "makemode/glm-5.2",
"provider": {
"makemode": {
"options": { "baseURL": "https://api.makemode.eu/v1" },
"models": {
"mistral-small-3.2-24b-instruct-2506": { "name": "Mistral Small (EU, fast)", "limit": { "context": 128000, "output": 8192 } },
"devstral-2-123b-instruct-2512": { "name": "Devstral 2 (EU, coding)", "limit": { "context": 128000, "output": 8192 } },
"mistral-medium-3.5-128b": { "name": "Mistral Medium (EU, balanced)", "limit": { "context": 128000, "output": 8192 } },
"glm-5.2": { "name": "GLM 5.2 (EU)", "limit": { "context": 128000, "output": 8192 } },
"qwen3.5-397b-a17b": { "name": "Qwen 3.5 (EU, reasoning)", "limit": { "context": 256000, "output": 8192 } },
"kimi-k2.6": { "name": "Kimi K2.6 (EU, reasoning)", "limit": { "context": 256000, "output": 8192 } },
"kimi-k2.7-code": { "name": "Kimi K2.7 Code (EU, coding)", "limit": { "context": 256000, "output": 8192 } },
"deepseek-v4-pro": { "name": "DeepSeek V4 Pro (EU, agentic)", "limit": { "context": 256000, "output": 8192 } }
}
}
}
}
It's the same choice the web app puts behind its model picker.
Claude Code speaks Anthropic's API, and the gateway serves that dialect at api.makemode.eu. So the coding agent you already use can run on GLM-5.2, hosted in France — same sk-gw-… key, same balance, same EU-only routing. No proxy to install, no new account. One command sets it up:
The script asks for your key and writes ~/.claude/settings.json (if you already have one, it prints the exact block to merge instead of touching your file). It points model traffic at France, pins the status line to glm-5.2 — the model actually serving, not a Claude model it isn't — routes Claude Code's background chores to the cheapest fast EU model, and sets CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1: moving the base URL only relocates model calls, and without this flag Claude Code still sends telemetry and error reports to US endpoints.
Two environment variables do the core of it:
Whatever model name Claude Code asks for is served by GLM-5.2 — except haiku-class names (Claude Code uses those for quick background chores), which go to Mistral Small so the cheap-and-fast request actually gets a cheap, fast model. Prefer another EU model from the table above? Set ANTHROPIC_MODEL to its id. To make the setup permanent, put the variables in your shell profile, or in ~/.claude/settings.json under "env" — that's all the script does. Every request is metered against your balance and stays inside the EU.
GLM-5.2 runs 128k tokens of context here (Claude Code assumes more, so trim very long sessions). Image pasting isn't supported on this endpoint yet.
The API response and your usage page always record the model that really served the request. Claude Code's status line is the one place that doesn't: it shows the name it was configured with. Set ANTHROPIC_MODEL=glm-5.2 if you want the UI to say what's true.
Claude Code's built-in web search runs on Anthropic's servers rather than in the model, so it doesn't work through the gateway. If a search tool call fails, that's why.
On cost: we measured a Claude Code session at roughly 2.4× the same work in opencode here. Claude Code resends its large system prompt every turn, and the EU models behind this gateway don't offer prompt caching yet, so each resent token bills at full input price. Fine for real work, worth knowing before a long session.