m-code

A coding agent that runs in your terminal. It reads your project, changes files, runs commands — and asks before it does anything it cannot undo.

curl -fsSL https://m.code.theafricablockchaincenter.com/install.sh | sh

macOS and Linux, Apple silicon and Intel. Windows through WSL 2. No Node, no Python, nothing else to install.

Bring your own model

m-code has no account and no subscription. You bring an API key for whichever provider you can actually reach and afford — or you point it at a model running on your own machine and use it with no network at all.

ProviderKey
anthropicANTHROPIC_API_KEY
openaiOPENAI_API_KEY
deepseekDEEPSEEK_API_KEY
groqGROQ_API_KEY
openrouterOPENROUTER_API_KEY
openweightsOPEN_WEIGHT_API_KEY
azureAZURE_OPENAI_API_KEY
ollama, vllmnone — a model on your own machine

Anything else speaking the OpenAI format works too: m-code --provider openai --base-url https://your-endpoint/v1

Getting started

1. Install

curl -fsSL https://m.code.theafricablockchaincenter.com/install.sh | sh

2. Activate

m-code runs for people who have been authorised. Ask for a key, then:

m-code activate <key>

The key is checked on your machine, offline. Nothing is sent anywhere, nothing is reported about who you are or when you ran it, and it keeps working without a network.

3. Give it a model

mkdir -p ~/.config/m-cli
echo 'export DEEPSEEK_API_KEY=sk-...' >> ~/.config/m-cli/env
chmod 600 ~/.config/m-cli/env

Or run one locally and skip the key entirely: ollama pull qwen2.5-coder && m-code --provider ollama

4. Start

cd ~/your-project
m-code

Then ask it something. what does this project do? is a good first one — reading is never gated, so nothing will interrupt you.

What it does before it changes anything

Reading is free. Writing is not: every edit, every shell command, every network fetch stops and shows you exactly what will happen.

╭──────────────────────────────────────────────────────╮
│ Bash command                                         │
│                                                      │
│   rm -rf build                                       │
│   ~/your-project                                     │
│                                                      │
│ Do you want to run this command?                     │
│ ❯ 1. Yes                                             │
│   2. Yes, and don't ask again for bash(rm *)         │
│   3. No, and tell m what to do differently (esc)     │
│   4. No, and never allow bash                        │
╰──────────────────────────────────────────────────────╯

Shell commands additionally run under the operating system's own sandbox, confined to writing inside your project. Files outside it cannot be touched at all, by any tool.

Cloning a repository is not consent. A project can ship settings that make m-code stricter — never settings that grant it permissions, run a command, or redirect your API key.

Where things live

~/.config/m-cli/envyour API keys, mode 600
~/.config/m-cli/config.jsonyour settings
~/.config/m-cli/licenceyour key
~/.local/share/m-cli/sessionsconversation transcripts

What leaves your machine: your prompts and the files the model asked to read, sent to the provider you chose. Also to an MCP server if you configure one, and to a URL if you approve the fetch tool. Nothing else — there is no telemetry, no analytics, and no update check. With a local model, nothing leaves at all.