mini-me v1.0.6
An ACP client can lend the agent its own functions as tools, and mini-me runs on Kronk, the Go inference server of Ardan Labs.
New
Tools lent by an ACP client (#202)
In ACP mode, the program that drives mm can now give the agent tools of its own. Examples are an editor's open buffers, an application's data, or a device. The model calls them like bash or read_file, under the name client_<name>. mm forwards each call to the client as an ACP extension request and gives the answer back to the model. ACP defines no way to describe such a tool, so mm defines one under its own namespace, org.mini-me. A client that does not use it sends nothing, and nothing changes.
- Two ways to announce the tools, set with
acp.clientTools.discovery.meta(the default): the client lists its tools ininitialize.request: the client only says it has tools, and mm asks for the list each time a session is opened, loaded or resumed. This is for tools that depend on the session.
- Permissions, set with
acp.clientTools.permissions.auto(the default) asks the client only whenyoloisfalse.askasks before every call.- The default is
auto, where MCP's isask: a client tool is a function of the very program that started mm.
- Errors never end the turn. A client that fails, does not answer within
acp.clientTools.timeout(30s), or answersMethod not foundgives the model a[client tool error: …]text. An entry of the list that cannot be used is skipped with a line on stderr. - Turn it off with
acp.clientTools.enabled: false. The tools exist only in ACP mode: the terminal and the window have no client to lend them.
The specification is written for client authors: the exact JSON of the announcement, of the list request, of a call and of its answer. The Go package of demo.acp.sdk offers tools with Options.Tools and ToolDiscovery.
Checked with Qwen3.5 4B on llmman: the Go example, in both modes, and the Node.js demo, in meta, request and yolo: false. The Node.js demo was also run on macOS.
See How to offer tools from your ACP client, the specification and why it is designed this way.
Kronk provider (#75)
provider: kronk runs mini-me on Kronk, the Go inference server of Ardan Labs. Kronk embeds llama.cpp without a llama-server process. mm uses its OpenAI-compatible API at http://127.0.0.1:11435/v1. From a sandbox, mm falls back to http://host.docker.internal:11435/v1.
- The window is known at start-up. It is the one Kronk serves the model with, read from Kronk whether the model is loaded or not, for example
ctx: 131072 (/v1/kronk/models). autoPulldownloads a model Kronk does not have, and/unloadand theunload_modeltool free its memory.- The summary of a compaction turns reasoning off with
chat_template_kwargs, which Kronk obeys;reasoning_effort: noneis ignored by Kronk. There is noReading the prompt …line: Kronk sends no progress while it reads. - A protected Kronk (
authenticatedorfull-protectedmodes) takes its token fromKRONK_TOKEN. A refused token is a start-up warning that names the variable. mm init --provider kronklists Kronk's models and reads, from Kronk, the window, the GGUF's sampling and the chat template's reasoning switch.- Kronk profiles. Kronk also lists configuration profiles,
provider/modelID/PROFILE(for example…/Qwopus3.5-4B-Coder.Q8_0/AGENT). A profile is the same model with its own settings in Kronk'smodel_config.yaml.mm initsays what a profile is, and copies its sampling into the file. Without the copy, it would never apply: mm sendstemperature,top_pandmax_tokenswith every request, even without asampling:block, and a request's value wins over a profile's.- The window shows a profile as
Qwopus3.5-4B-Coder.Q8…/AGENTinstead of justAGENT.
From a Docker Sandbox, start Kronk on the host with kronk server start --api-host 0.0.0.0:11435: by default it listens on the loopback only. The id Kronk serves a model under is not always the one it was pulled with: unsloth/Qwen3.5-2B-GGUF:Q4_K_M is served as unsloth/Qwen3.5-2B-Q4_K_M. Use the id GET /v1/models gives.
Checked against Kronk 1.33.2 with Qwopus3.5 4B Coder and Qwen3.5 2B:
- a turn with tool calls;
/unload;mm init --provider kronk --check;- a profile's window and sampling.
Not tried: a real download through autoPull (only the answer to an already installed model was read), a compaction, and a protected Kronk.
See How to run mini-me on Kronk.
Demos
demos/kronk/: a coding agent on Kronk withmradermacher/Qwopus3.5-4B-Coder.Q8_0, and the line to change for Qwen3.5 2B.demo.acp.sdk/client-tools-nodejs/: a Node.js client with no dependency that lends the agent one tool,host_info, the operating system, CPU, memory or uptime of the client's machine. The agent has no shell, so that tool is its only way to know.demo.acp.sdk/go/:Options.Tools, andexamples/clienttools, a to-do list the agent fills and reads.
Documentation
- New:
- Updated for Kronk and client tools:
- the configuration, CLI and tools references;
- the explanations of providers,
mm initand thinking models; - the guides to turning reasoning off, freeing a model's memory, and running in a Docker Sandbox.
- The macOS install guide shows how to check the binary's signature, with
codesign, before installing it.
Upgrading
-
Agent files do not change. Replace the binary: see the install guides for macOS, Linux and Windows.
-
New keys:
acp.clientTools.enabled(true);acp.clientTools.discovery(meta);acp.clientTools.permissions(auto);acp.clientTools.timeout(30s).
An ACP client that advertises no tool sees no difference.
-
New provider value:
kronk.unknown providernow listsdmr, kronk, llamacpp, llmman, ollama, openai.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
|