Skip to content

v0.5.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Sep 21:37
· 1 commit to main since this release

v0.5.0

Lua packages

You can now install plugins from git instead of pasting code into init.lua:

maki.pack.add({
  "https://github.com/example/maki-goal",
  { src = "https://github.com/example/maki-review", version = "v1.2.0" },
})

Maki prompts once for new packages, pins the commit in pack-lock.json, and asks for permissions per package. /packupdate updates them (with a review of what changed), /packdel removes ones you no longer declare. Packages laid out on disk Neovim-style (start/opt, maki.packadd) work too. Packages can also declare a minimum Maki version. See Lua packages.

Thanks @laudney.

Tool hooks

Every tool now fires tool.<name>.input and tool.<name>.output slots. A plugin can rewrite a tool call before it runs, or block it with a reason the model reads. No more denying the call and paying a round trip just to steer the model. Works for builtins, MCP tools and ACP client tools alike. See Hooks.

Lua jobs

Full job API: jobstart with argv, jobinfo, joblist, jobfind by name, jobattach with exit replay, stream redirection to files. owner = "session" keeps a job alive across /reload, so a monitor written in Lua can outlive its own code. SessionEnd now fires on every teardown and says why and how long. Plugin callbacks can suspend. See the job API.

Thanks @lu-zero.

Performance

  • Transcript resize on a 600-message session: 546 ms -> 12 ms (highlighted code is cached).
  • Text wrapping: 35 ms -> 3.3 ms for 7800 lines.

Other features

  • MCP tools, ACP client tools and tool_search are callable from code_execution python scripts.
  • Queued messages are delivered together in one turn. Typing three follow-ups while the agent works now costs one request, not three.
  • Themes can name terminal colors (blue, light-gray, 0-255) instead of hex, so nested tmux over ssh stops mangling them. Helix themes load unchanged. Thanks @untitaker.
  • net.allowed_private_hosts lets you point webfetch at your own Ollama or SearxNG.
  • New provider: Regolo. Usage modal now breaks costs down per model. Thanks @lu-zero.
  • MCP servers and provider configs expand env vars in custom headers. Thanks @Firaenix.
  • Codex reasoning effort is sent to the API. Thanks @cybershape.
  • /yolo survives session resume and /new. Thanks @lu-zero.
  • Window title support with a Lua binding. Thanks @lu-zero.
  • maki.toast, action keys in list pickers, defer_fn, and turn-boundary events for supervision plugins. Thanks @Firaenix.
  • ModelChanged autocmd. Tasks picker rewritten in Lua, running subagents first.

Fixes

  • Two edit calls on the same file in one batch or gather silently lost one of them. Every file mutation now goes through one per-file lock.
  • edit preserves the line endings a file came with.
  • Codex overloads retry instead of failing the run.
  • OpenRouter bills from the cost the response reports. Thanks @pynappo.
  • DeepSeek peak surcharge no longer applied on weekends.
  • Terminal cursor sits where the input box drew it, and the hardware cursor stops doubling up.
  • The bell rings for prompts even when the terminal has focus.
  • Code blocks keep their last line when the closing fence is on it.
  • The btw model styles thinking like the main transcript. Thanks @kalebo.

Breaking

  • --no-rtk is gone. Use maki.setup({ agent = { rtk = false } }). Scripts passing the flag will fail on startup.
  • edit_lines is on by default. Turn it off with plugins.edit = { edit_lines = false }. Only insert_lines stays opt-in.
  • MCP tools are allowed in plan mode. Plan mode only blocks writes outside the plan file now; everything else follows normal permission rules. Thanks @espetro.
  • Plugin tools declaring permission = "fs_write" must declare mutable_path. Registration is refused otherwise.
  • Notifications changed: a prompt waiting on you always notifies. Turn-complete is skipped only when Maki can tell you're watching (focus events, or a keypress in the last 30s).