This fork adds remote control over the web, built for running maki on many hosts with one shared entry point:
/rcstandalone - run/rcin the TUI and it prints a tokenized web URL (behind your own reverse proxy for TLS). The web view mirrors the live session: full transcript, thinking, tool calls with results, model, context and cost stats. You can prompt, answer permission requests, and stop runs from the browser.maki-anchor- a central server for many instances. Instances dial out over a WebSocket, so they need no inbound ports. One domain, one dashboard, one login:- OIDC single sign-on (Authelia, Authentik, Keycloak, Pocket ID, ...), first login becomes admin.
- Per-user, per-instance grants:
viewer(read) orcontroller(prompt and approve). - Share links with rights and expiry:
view/control, default 2 hours. - Fleet dashboard: all instances, their sessions, costs, and status. Login is mandatory (first run walks you through creating the admin), and the link to your instance reconnects itself when the network blinks.
- Transcripts are fetched live from the owning instance; the anchor stores metadata only.
- Signed Windows binaries - releases ship an Authenticode-signed
.exe(Azure Trusted Signing), so SmartScreen stays quiet, next to static Linux (x86_64 + arm64) and macOS builds.
Quick start for the anchor:
# On the server: install or update maki-anchor as a systemd service.
# As root it writes a system unit; as a user, a user unit with linger.
curl -fsSL https://raw.githubusercontent.com/wmantly/maki/main/install-anchor.sh | sh
# Register an instance and copy the printed one-liner for its host.
maki-anchor tokens add work-laptop# Or skip systemd and run in the foreground
# (reverse proxy handles TLS and forwards WebSocket upgrades).
maki-anchor serve --bind 0.0.0.0:8688-- In ~/.config/maki/init.lua on the instance host.
maki.setup {
anchor = {
url = "https://maki.example.com",
name = "work-laptop",
token = "<token from tokens add>",
},
}Now /rc prints an anchor link instead of binding a local port. See the
anchor docs for SSO setup, grants, and share
links.
Everything below is upstream's README.
An AI coding agent optimized for minimal use of context tokens, while providing a great user experience.
indextool - uses tree-sitter to parse supported programming languages to produce a high level skeleton of a file, with exact start-end lines of each item (e.g. a function's implementation is in lines 150-165). Encouraged to be used before reads. For my usage it adds 59 tok/turn but saves 224 tok/turn on read calls, saving 165 tok/turn.code_executiontool - uses monty to run an interpreter that has all other tools available as async functions. Maki uses it to filter / summarize / transform / pipe data to other tools as input, without it ever reaching and polluting the context window. Sandbox limited by time & memory.tasktool - when delegating work to subagents, the AI chooses whether to run weak / medium / strong model of used provider. Think haiku / sonnet / opus.- System prompt, tool descriptions, and tool examples are all concise, I've made sure not to bloat your context.
- Uses rtk if you have it installed, disable with
maki.setup({ agent = { rtk = false } })in yourinit.lua. Saves ~50% of bash output tokens. Remember bash is just 12% of total token usage, so 6% is nice, but saving on reads (65% of total) by usingindexgave me more benefit. I think I'll do bash output filtering like this myself in a future release.
- SUPER fast startup, 60 FPS, and light on memory. Not running any JavaScript, using ratatui for TUI. Even the splash screen animation uses SIMD.
- Extend with neovim like Lua plugins - Builtin plugins, User made plugins showcase, Lua API reference.
- Philosophy of not hiding anything - while other coding agents hide information as models improve (e.g. not showing number of lines read), maki leaves you in control.
- UI fits everything well on my small screen laptop.
- Full visibility of subagents - each subagent gets their own "chat window" you can easily navigate between using
/tasks(Ctrl-X). - Sensible permission system - when the agent runs
git diff && rm -rf /, what do you think will happen in your current coding agent? It will treat it asgit *. Maki uses tree-sitter to parse the bash command and figure out the permissions requested aregit *andrm *. Disable using--yolo. - SSRF protection on
webfetchcalls. - A
memorytool to keep long term context, just tell maki to remember something (sometimes it uses it automatically). Managed via/memory(view / edit / delete memories). - Fuzzy search with Ctrl-F.
/btwto run a command with the chat history without interfering with the current session.- Rewind on Escape-Escape (no code rewind yet, only chat history).
- Attach images in prompts.
- 26 of the most popular themes.
- Resume sessions.
- Skills & MCPs.
- Opt-in OpenTelemetry export, same format as Claude Code's.
- Plan mode.
- Run bash commands using
!, or!!if you want maki to not know about it. /cdto change dir.- Use
--print --output-format stream-jsonto run UI-less. Output is compatible with Claude Code, so you can easily replace your existing solutions (although I wouldn't recommend that, maki is very new).
- Anthropic -
ANTHROPIC_API_KEYonly (using OAuth is against TOS). Bedrock supported viaCLAUDE_CODE_USE_BEDROCK=1. - OpenAI -
OPENAI_API_KEYand OAuth viamaki auth login openai. - xAI -
XAI_API_KEYand OAuth viamaki auth login xai. - Google -
GEMINI_API_KEY. - Copilot -
GH_COPILOT_TOKENor an existing GitHub Copilot sign-in at~/.config/github-copilot/. - Ollama -
OLLAMA_HOSTfor local (e.g.http://localhost:11434), orOLLAMA_API_KEYfor cloud. - llama.cpp -
LLAMA_CPP_HOST(e.g.http://localhost:8080), optionallyLLAMA_CPP_API_KEY. - Mistral -
MISTRAL_API_KEY. - Z.AI -
ZHIPU_API_KEY. - DeepSeek -
DEEPSEEK_API_KEY. - OpenRouter -
OPENROUTER_API_KEY. - Synthetic -
SYNTHETIC_API_KEY. - Regolo -
REGOLO_API_KEY. EU-hosted open-weight models. - TensorX -
TENSORX_API_KEY. - OpenCode Zen -
OPENCODE_API_KEY, or the freepublickey for zero-cost models. Models from the models.dev catalog. - OpenCode Go -
OPENCODE_API_KEY. Models from the models.dev catalog. - Aperture -
APERTURE_HOST(e.g.https://your-host.tailnet.ts.net). No API key needed, Tailscale handles auth.
Dynamic providers - drop an executable script into ~/.config/maki/providers/ to add custom providers or proxies. See docs for details.
# Download and read the script first (don't blindly trust shell scripts).
curl -fsSL https://maki.sh/install.sh -o install.sh
cat install.sh
# Then run.
chmod +x install.sh && sh install.shOne-liner:
curl -fsSL https://maki.sh/install.sh | shInstalls to ~/.local/bin. Override with MAKI_INSTALL_DIR.
# Download and read the script first (don't blindly trust remote scripts).
irm https://maki.sh/install.ps1 -OutFile install.ps1
Get-Content install.ps1
# Then run.
.\install.ps1One-liner:
irm https://maki.sh/install.ps1 | iexcurl -fsSL https://maki.sh/install.sh | shBoth install to %LOCALAPPDATA%\maki and add it to your user PATH. Override with MAKI_INSTALL_DIR / $env:MAKI_INSTALL_DIR.
cargo install --locked --git https://github.com/tontinton/maki.git makinix run github:tontinton/makiOr download a pre-built binary from GitHub Releases.
Run maki acp or configure your ACP supporting editor to use maki, e.g. in Zed's settings.json:
"agent_servers": {
"Maki": {
"default_config_options": {
"model": "deepseek/deepseek-v4-flash"
},
"type": "custom",
"command": "maki",
"args": ["acp"],
"env": {}
}
}More info at the official docs.
tontinton/makiconf - includes a semble tool (Lua code) for semantic code search, and an ast-grep MCP server for AST-based search and replace.
DISCLAIMER: >90% of code in maki was written by maki, guided by humans. Some parts of the code are not as good as what I would've made in the artisanal hand-made style. But it's also not slop / vibe coded, and can easily be refactored if needed nowadays.
