Maki Coding Agent
A context-efficient coding agent with a fast terminal UI and Lua-based extensibility.
Per-dimension scores and reasoning
The README describes syntax-tree-based shell permission splitting, opt-in telemetry, SSRF protection, and an explicit --yolo bypass, showing meaningful attention to permissions and external effects. The supplied evidence does not contain the prompt rules, denial paths, or implementation, so least privilege and confirmation do not receive full credit. Providers, environment variables, dynamic providers, persistent memory, and telemetry are disclosed, but transmitted fields, destinations, retention, and deletion guarantees are incomplete. Cargo uses a keyring and largely constrained dependencies; CI checks Nix Git-dependency hash drift, while two Git patches are revision-pinned and justified. No vulnerability scanning, supply-chain policy, or lockfile evidence is supplied. Rewind covers chat only, and the README expressly says code rewind is unavailable. Author, repository, homepage, and MIT copyright attribution agree, justifying full source-attribution credit; the unverified publisher is treated only as unknown.
The README, Cargo workspace, and CI present a broadly consistent Rust/Nix product, with no obvious contradictions in identity, version, or architecture. Dependencies are centrally declared, Git inputs are pinned by tag or revision, Nix CI checks hash drift, and binaries, Cargo, and Nix provide multiple acquisition paths. Credit is limited because the dependency surface is large and includes a release candidate and upstream Git patches. None of the supplied files shows user-facing failure messages, diagnostic guidance, or recovery messages, so failure_messages scores zero; this does not assert that runtime error handling is absent.
The evidence clearly addresses interactive coding, headless stream-JSON operation, ACP editor integration, small terminals, subagents, MCP, skills, plugins, and numerous cloud and local model providers, thoroughly covering audiences and scenarios. Some boundaries are explicit: code execution has time and memory limits, telemetry is opt-in, rewind excludes code, and provider plugins are a work in progress. A systematic language-support matrix, tool authority model, and plugin isolation boundary are not supplied. Commands, shortcuts, configuration switches, and permission-parsing triggers are concrete, but ambiguity, conflict, and false-trigger behavior are not evidenced. Linux, macOS, Windows, Nix, TUI, ACP, and multi-provider instructions justify full environment-fit credit.
The README is clearly divided into benchmarks, features, providers, installation, ACP, documentation, and community, though important details are delegated to external material not included here. Installation comprehensively covers three operating-system families, Nix, Cargo, and prebuilt releases, including destinations and override variables, earning full credit. The maki name, commands, and crate metadata are consistent, but there is no plugin/API stability promise. Configuration, ACP, and command examples are useful, while an embedded FAQ and complete troubleshooting guide are absent. Limitations such as no code rewind, unfinished Lua provider plugins, and predominantly agent-written code are candidly disclosed, but not as a comprehensive limitations inventory. Cargo metadata and the complete LICENSE consistently establish MIT licensing. A version and release artifact are present, but no changelog or compatibility policy is supplied. The named author, email, repository, website, and community offer maintenance paths, but governance, support duration, and succession responsibility are unspecified.
The described TUI, headless stream-JSON output, session resume, search, subagent views, memory, and editor integration give substantial evidence of usable output pathways, but no actual output samples or statically inspectable output contract are included. The index tool, execution pipeline, Lua extensibility, and granular command permissions plausibly add value beyond a basic coding terminal, though most evidence is author-authored description. Token-saving estimates and benchmark pass/cost figures are stated, with the token estimate appropriately labeled as personal usage; however, the linked report and chart contents are not among the supplied files, so methodology, representativeness, and comparison fairness cannot be verified and cost-benefit does not receive a high score.
Several claims point to a benchmark archive, documentation, plugins, and discussions, but those targets are not included. Claims about performance, 60 FPS, memory use, SSRF protection, and permission correctness lack corresponding implementation excerpts, leaving claim traceability thin. Product identity, version, language, author, and license are corroborated across README, Cargo, and LICENSE, while CI corroborates Nix building and hash checking; most feature claims nevertheless remain single-source README assertions. The author separates a personal token measurement with “for my usage” and expressly labels WIP items, the absent code rewind, and the agent-authorship disclaimer. That supports fact/inference separation, but promotional judgments such as “SUPER fast” and performance conclusions without included methodology prevent full credit.
- This assessment uses only the supplied static files; the program was not run, and the linked benchmark report, installers, official documentation, and plugins were not inspected.
- Before use, inspect the actual isolation and approval boundaries for permission prompts, the --yolo bypass, dynamic provider executables, Lua plugins, MCP, and code_execution.
- Verify how API keys are stored, transmitted, retained, logged, and deleted across the keyring, configuration, telemetry, sessions, and long-term memory.
- Installation offers both inspect-first instructions and pipe-to-shell one-liners; high-assurance environments should pin a version and verify artifacts and installer contents.
- Code rollback is explicitly unavailable; create independent version-control commits or recoverable snapshots before permitting repository modifications.
- The dependency surface is large and includes Git dependencies, pinned Git patches, and a release-candidate component; review Cargo.lock, vulnerability scans, and the patch-update process.
What does this agent do, and when should you use it?
Maki is an AI coding agent designed to minimize context-token use while operating primarily through a ratatui-based terminal interface. Its tree-sitter-powered `index` tool exposes file structure and exact line ranges, while `code_execution` processes tool data inside a time- and memory-limited Monty sandbox. The `task` tool delegates work to subagents, selects among weak, medium, and strong provider models, and exposes each task in its own navigable chat window. Maki can be extended through Neovim-like Lua plugins, Skills, MCP, and executable dynamic-provider adapters, and it can serve ACP-compatible editors through `maki acp`. It supports numerous hosted and local model providers and offers headless stream-json output, although operating cost, model quality, and network dependence vary with the selected provider.
A user submits a coding task through the TUI, an ACP editor, or the headless CLI, after which Maki can inspect repository files, run shell commands, fetch web content, and call the configured model provider. The index tool uses tree-sitter to produce a high-level file skeleton with exact start and end lines for items such as function implementations, helping subsequent reads target relevant code. code_execution runs a Monty interpreter with the other tools exposed as asynchronous functions, allowing results to be filtered, summarized, transformed, or piped without placing every intermediate value in the model context; this sandbox has time and memory limits. The task tool delegates work to subagents and chooses a model strength, while memory stores long-term information managed through /memory. Results appear in the TUI or ACP client, or are emitted as Claude Code-compatible streaming JSON with --print --output-format stream-json.
- A developer working in a large repository who wants structural indexes and exact line ranges before spending tokens on full reads.
- An engineer using a small-screen laptop who prefers a compact, low-memory terminal interface.
- A Neovim-oriented user who wants to extend coding workflows with Lua plugins and custom provider executables.
- A developer coordinating parallel subtasks who needs to inspect each subagent's separate conversation through
/tasks. - A team embedding a coding agent in an ACP-capable editor such as Zed or consuming stream-json from an automation pipeline.
- A user who needs a choice among hosted APIs and local Ollama or llama.cpp deployments.
What are this agent's strengths and limitations?
- The tree-sitter-based
indextool returns code items with exact line ranges, directly targeting unnecessary read and context usage. code_executioncan filter, transform, summarize, and pipe tool data inside a constrained Monty sandbox before it reaches the context window.- Lua plugins, dynamic providers, Skills, MCP, and ACP provide distinct extension points for tools, models, and editor integration.
- Support spans commercial APIs, routing services, Ollama, and llama.cpp, reducing dependence on a single model vendor.
- Subagents receive separate, user-visible chat windows that can be inspected through
/tasks.
- Most providers require separate API credentials, OAuth authentication, or a running local service; price and availability remain external dependencies.
- The README states that more than 90% of the code was written by Maki under human guidance and acknowledges that some portions are below the author's handcrafted standard, warranting an independent code-quality review.
code_executionis limited by sandbox time and memory, which may constrain heavier processing.- Rewind currently covers chat history only and does not restore code changes.
- Claude Code compatibility is explicitly documented for the stream-json output format, not as complete product or plugin compatibility.
How do you install or deploy this agent?
On Linux or macOS, download and inspect the installer with curl -fsSL https://maki.sh/install.sh -o install.sh and cat install.sh, then run chmod +x install.sh && sh install.sh. It installs to ~/.local/bin by default; set MAKI_INSTALL_DIR to override that location. On Windows PowerShell, run irm https://maki.sh/install.ps1 -OutFile install.ps1, inspect it with Get-Content install.ps1, and execute .\install.ps1. Windows Git Bash can use curl -fsSL https://maki.sh/install.sh | sh; Windows installations default to %LOCALAPPDATA%\maki and add it to the user PATH. Alternatives are cargo install --locked --git https://github.com/tontinton/maki.git maki for the main branch, nix run github:tontinton/maki, or a prebuilt binary from GitHub Releases.
How do you use this agent?
Configure at least one supported provider first—for example, set OPENAI_API_KEY, ANTHROPIC_API_KEY, or GEMINI_API_KEY, or authenticate with maki auth login openai or maki auth login xai. Local backends can be selected with OLLAMA_HOST or LLAMA_CPP_HOST. After installation and provider setup, run maki to enter the terminal interface. Use /tasks or Ctrl-X to navigate subagents, /memory to manage persistent memories, /btw to run a history-aware side command without disturbing the current session, ! to run a shell command, !! to run one without exposing it to Maki, and /cd to change directories. For headless use, run maki --print --output-format stream-json. For ACP, run maki acp; a Zed custom agent server can set command to maki, args to ["acp"], and choose a model under default_config_options.
How does this agent compare with similar options?
The documented Claude Code overlap is headless interoperability: Maki says its --print --output-format stream-json output is compatible with Claude Code, making it easier to replace solutions that consume that format. Its optional OpenTelemetry export also uses the same format as Claude Code's, and Bedrock can be enabled with CLAUDE_CODE_USE_BEDROCK=1. The README positions Maki differently through visible read-line counts, tree-sitter parsing of compound shell commands into separate permission requests, and inspectable subagent chat windows; it does not provide a comprehensive like-for-like feature or cost comparison.
FAQ
Does using Maki always incur model charges?
public key for zero-cost models.How does Maki handle dangerous shell commands?
git * from rm * in a compound command. The --yolo option disables this permission system and therefore removes that safeguard.Is MCP required?
Can Maki run entirely offline?
OLLAMA_HOST or LLAMA_CPP_HOST, but remote providers, web access, installation downloads, and other online features still need a network. The source does not promise a completely offline operating mode.