🛟 Updated.
a9409af parent: eafbba2 modified
.tickets/milestones.yaml +1 -1 | @@ -55,5 +55,5 @@ milestones: | ||
| 55 | 55 | state: closed |
| 56 | 56 | dueOn: 2026-10-31 |
| 57 | 57 | - title: v1.0.6 |
| 58 | - state: open | |
| 58 | + state: closed | |
| 59 | 59 | dueOn: 2026-11-15 |
| @@ -55,5 +55,5 @@ milestones: | |||
| 55 | state: closed | 55 | state: closed |
| 56 | dueOn: 2026-10-31 | 56 | dueOn: 2026-10-31 |
| 57 | - title: v1.0.6 | 57 | - title: v1.0.6 |
| 58 | - state: open | 58 | + state: closed |
| 59 | dueOn: 2026-11-15 | 59 | dueOn: 2026-11-15 |
modified
INSTALL.LINUX.md +1 -1 | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | ```bash |
| 4 | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=1.0.4 | |
| 5 | +VERSION=1.0.6 | |
| 6 | 6 | case "$(uname -m)" in |
| 7 | 7 | x86_64) ARCH=amd64 ;; |
| 8 | 8 | aarch64|arm64) ARCH=arm64 ;; |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ```bash | 3 | ```bash |
| 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=1.0.4 | 5 | +VERSION=1.0.6 |
| 6 | case "$(uname -m)" in | 6 | case "$(uname -m)" in |
| 7 | x86_64) ARCH=amd64 ;; | 7 | x86_64) ARCH=amd64 ;; |
| 8 | aarch64|arm64) ARCH=arm64 ;; | 8 | aarch64|arm64) ARCH=arm64 ;; |
modified
INSTALL.MACOS.md +4 -4 | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | Short version: |
| 4 | 4 | ```bash |
| 5 | -VERSION=1.0.5 | |
| 5 | +VERSION=1.0.6 | |
| 6 | 6 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 7 | 7 | chmod +x ./mm-${VERSION}-darwin-arm64 |
| 8 | 8 | sudo rm -f /usr/local/bin/mm |
| @@ -14,7 +14,7 @@ From v1.0.5, the macOS binary is signed with a Developer ID and notarized by App | ||
| 14 | 14 | |
| 15 | 15 | ```bash |
| 16 | 16 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 17 | -VERSION=1.0.5 | |
| 17 | +VERSION=1.0.6 | |
| 18 | 18 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 19 | 19 | |
| 20 | 20 | # optional: check the download against the release's checksums |
| @@ -34,8 +34,8 @@ mm --version | ||
| 34 | 34 | The signature check should print: |
| 35 | 35 | |
| 36 | 36 | ``` |
| 37 | -./mm-1.0.5-darwin-arm64: valid on disk | |
| 38 | -./mm-1.0.5-darwin-arm64: satisfies its Designated Requirement | |
| 37 | +./mm-1.0.6-darwin-arm64: valid on disk | |
| 38 | +./mm-1.0.6-darwin-arm64: satisfies its Designated Requirement | |
| 39 | 39 | Identifier=com.bots-garden.mm |
| 40 | 40 | Authority=Developer ID Application: Philippe Charriere (SNLLBZP9V9) |
| 41 | 41 | TeamIdentifier=SNLLBZP9V9 |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | Short version: | 3 | Short version: |
| 4 | ```bash | 4 | ```bash |
| 5 | -VERSION=1.0.5 | 5 | +VERSION=1.0.6 |
| 6 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" | 6 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 7 | chmod +x ./mm-${VERSION}-darwin-arm64 | 7 | chmod +x ./mm-${VERSION}-darwin-arm64 |
| 8 | sudo rm -f /usr/local/bin/mm | 8 | sudo rm -f /usr/local/bin/mm |
| @@ -14,7 +14,7 @@ From v1.0.5, the macOS binary is signed with a Developer ID and notarized by App | |||
| 14 | 14 | ||
| 15 | ```bash | 15 | ```bash |
| 16 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 16 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 17 | -VERSION=1.0.5 | 17 | +VERSION=1.0.6 |
| 18 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" | 18 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 19 | 19 | ||
| 20 | # optional: check the download against the release's checksums | 20 | # optional: check the download against the release's checksums |
| @@ -34,8 +34,8 @@ mm --version | |||
| 34 | The signature check should print: | 34 | The signature check should print: |
| 35 | 35 | ||
| 36 | ``` | 36 | ``` |
| 37 | -./mm-1.0.5-darwin-arm64: valid on disk | 37 | +./mm-1.0.6-darwin-arm64: valid on disk |
| 38 | -./mm-1.0.5-darwin-arm64: satisfies its Designated Requirement | 38 | +./mm-1.0.6-darwin-arm64: satisfies its Designated Requirement |
| 39 | Identifier=com.bots-garden.mm | 39 | Identifier=com.bots-garden.mm |
| 40 | Authority=Developer ID Application: Philippe Charriere (SNLLBZP9V9) | 40 | Authority=Developer ID Application: Philippe Charriere (SNLLBZP9V9) |
| 41 | TeamIdentifier=SNLLBZP9V9 | 41 | TeamIdentifier=SNLLBZP9V9 |
modified
INSTALL.WINDOWS.md +1 -1 | @@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed): | ||
| 4 | 4 | |
| 5 | 5 | ```powershell |
| 6 | 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 7 | -$Version = "1.0.4" | |
| 7 | +$Version = "1.0.6" | |
| 8 | 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } |
| 9 | 9 | $Asset = "mm-$Version-windows-$Arch.exe" |
| 10 | 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" |
| @@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed): | |||
| 4 | 4 | ||
| 5 | ```powershell | 5 | ```powershell |
| 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 7 | -$Version = "1.0.4" | 7 | +$Version = "1.0.6" |
| 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } | 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } |
| 9 | $Asset = "mm-$Version-windows-$Arch.exe" | 9 | $Asset = "mm-$Version-windows-$Arch.exe" |
| 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" | 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" |
modified
release-notes/README.md +2 -1 | @@ -4,7 +4,8 @@ One note per tag, in English (`.en.md`) and French (`.fr.md`). Rebuilt on 2026-1 | ||
| 4 | 4 | |
| 5 | 5 | | Version | Date | Summary | | |
| 6 | 6 | |---|---|---|---| |
| 7 | -| [v1.0.5](v1.0.5.en.md) | not tagged yet | `mm dockerinit` and `mm sbxinit` write the files to run mini-me in a container or a Docker Sandbox, `mm init` gives the agent its name, two vibe-coding demos (Go and Swift), and a macOS binary signed and notarized by Apple. | [FR](v1.0.5.fr.md) | | |
| 7 | +| [v1.0.6](v1.0.6.en.md) | not tagged yet | 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. | [FR](v1.0.6.fr.md) | | |
| 8 | +| [v1.0.5](v1.0.5.en.md) | 2026-11-07 | `mm dockerinit` and `mm sbxinit` write the files to run mini-me in a container or a Docker Sandbox, `mm init` gives the agent its name, two vibe-coding demos (Go and Swift), and a macOS binary signed and notarized by Apple. | [FR](v1.0.5.fr.md) | | |
| 8 | 9 | | [v1.0.4](v1.0.4.en.md) | 2026-11-02 | A security update: mm now builds with `golang.org/x/net` v0.62.0, which fixes two vulnerabilities in its HTML parser. | [FR](v1.0.4.fr.md) | |
| 9 | 10 | | [v1.0.3](v1.0.3.en.md) | 2026-10-26 | `mm init` writes agents for any OpenAI-compatible service — it asks the endpoint and the API key's variable, then lists the service's models or lets you type one — and its text answers can be edited with the arrow keys. | [FR](v1.0.3.fr.md) | |
| 10 | 11 | | [v1.0.2](v1.0.2.en.md) | 2026-10-26 | Use mini-me as a library from Node.js, test what a model can do with mini-me itself, and send OpenAI models only the sampling settings you wrote. | [FR](v1.0.2.fr.md) | |
| @@ -4,7 +4,8 @@ One note per tag, in English (`.en.md`) and French (`.fr.md`). Rebuilt on 2026-1 | |||
| 4 | 4 | ||
| 5 | | Version | Date | Summary | | | 5 | | Version | Date | Summary | | |
| 6 | |---|---|---|---| | 6 | |---|---|---|---| |
| 7 | -| [v1.0.5](v1.0.5.en.md) | not tagged yet | `mm dockerinit` and `mm sbxinit` write the files to run mini-me in a container or a Docker Sandbox, `mm init` gives the agent its name, two vibe-coding demos (Go and Swift), and a macOS binary signed and notarized by Apple. | [FR](v1.0.5.fr.md) | | 7 | +| [v1.0.6](v1.0.6.en.md) | not tagged yet | 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. | [FR](v1.0.6.fr.md) | |
| 8 | +| [v1.0.5](v1.0.5.en.md) | 2026-11-07 | `mm dockerinit` and `mm sbxinit` write the files to run mini-me in a container or a Docker Sandbox, `mm init` gives the agent its name, two vibe-coding demos (Go and Swift), and a macOS binary signed and notarized by Apple. | [FR](v1.0.5.fr.md) | | ||
| 8 | | [v1.0.4](v1.0.4.en.md) | 2026-11-02 | A security update: mm now builds with `golang.org/x/net` v0.62.0, which fixes two vulnerabilities in its HTML parser. | [FR](v1.0.4.fr.md) | | 9 | | [v1.0.4](v1.0.4.en.md) | 2026-11-02 | A security update: mm now builds with `golang.org/x/net` v0.62.0, which fixes two vulnerabilities in its HTML parser. | [FR](v1.0.4.fr.md) | |
| 9 | | [v1.0.3](v1.0.3.en.md) | 2026-10-26 | `mm init` writes agents for any OpenAI-compatible service — it asks the endpoint and the API key's variable, then lists the service's models or lets you type one — and its text answers can be edited with the arrow keys. | [FR](v1.0.3.fr.md) | | 10 | | [v1.0.3](v1.0.3.en.md) | 2026-10-26 | `mm init` writes agents for any OpenAI-compatible service — it asks the endpoint and the API key's variable, then lists the service's models or lets you type one — and its text answers can be edited with the arrow keys. | [FR](v1.0.3.fr.md) | |
| 10 | | [v1.0.2](v1.0.2.en.md) | 2026-10-26 | Use mini-me as a library from Node.js, test what a model can do with mini-me itself, and send OpenAI models only the sampling settings you wrote. | [FR](v1.0.2.fr.md) | | 11 | | [v1.0.2](v1.0.2.en.md) | 2026-10-26 | Use mini-me as a library from Node.js, test what a model can do with mini-me itself, and send OpenAI models only the sampling settings you wrote. | [FR](v1.0.2.fr.md) | |
added
release-notes/v1.0.6.en.md +83 -0 | new file mode 100644 | ||
| @@ -0,0 +1,83 @@ | ||
| 1 | +# mini-me v1.0.6 | |
| 2 | + | |
| 3 | +*[Version française](v1.0.6.fr.md)* | |
| 4 | + | |
| 5 | +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. | |
| 6 | + | |
| 7 | +## New | |
| 8 | + | |
| 9 | +### Tools lent by an ACP client (#202) | |
| 10 | + | |
| 11 | +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. | |
| 12 | + | |
| 13 | +- **Two ways to announce the tools**, set with `acp.clientTools.discovery`. | |
| 14 | + - `meta` (the default): the client lists its tools in `initialize`. | |
| 15 | + - `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. | |
| 16 | +- **Permissions**, set with `acp.clientTools.permissions`. | |
| 17 | + - `auto` (the default) asks the client only when `yolo` is `false`. | |
| 18 | + - `ask` asks before every call. | |
| 19 | + - The default is `auto`, where MCP's is `ask`: a client tool is a function of the very program that started mm. | |
| 20 | +- **Errors never end the turn.** A client that fails, does not answer within `acp.clientTools.timeout` (`30s`), or answers `Method not found` gives the model a `[client tool error: …]` text. An entry of the list that cannot be used is skipped with a line on stderr. | |
| 21 | +- **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. | |
| 22 | + | |
| 23 | +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`. | |
| 24 | + | |
| 25 | +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. | |
| 26 | + | |
| 27 | +See [How to offer tools from your ACP client](../docs/en/how-to/offer-tools-from-an-acp-client.md), the [specification](../docs/en/reference/acp-client-tools.md) and [why it is designed this way](../docs/en/explanation/acp-client-tools.md). | |
| 28 | + | |
| 29 | +### Kronk provider (#75) | |
| 30 | + | |
| 31 | +`provider: kronk` runs mini-me on [Kronk](https://www.kronkai.com), 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`. | |
| 32 | + | |
| 33 | +- **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)`. | |
| 34 | +- **`autoPull`** downloads a model Kronk does not have, and **`/unload`** and the `unload_model` tool free its memory. | |
| 35 | +- **The summary of a compaction turns reasoning off** with `chat_template_kwargs`, which Kronk obeys; `reasoning_effort: none` is ignored by Kronk. There is no `Reading the prompt …` line: Kronk sends no progress while it reads. | |
| 36 | +- **A protected Kronk** (`authenticated` or `full-protected` modes) takes its token from `KRONK_TOKEN`. A refused token is a start-up warning that names the variable. | |
| 37 | +- **`mm init --provider kronk`** lists Kronk's models and reads, from Kronk, the window, the GGUF's sampling and the chat template's reasoning switch. | |
| 38 | +- **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's `model_config.yaml`. | |
| 39 | + - `mm init` says what a profile is, and copies its sampling into the file. Without the copy, it would never apply: mm sends `temperature`, `top_p` and `max_tokens` with every request, even without a `sampling:` block, and a request's value wins over a profile's. | |
| 40 | + - The window shows a profile as `Qwopus3.5-4B-Coder.Q8…/AGENT` instead of just `AGENT`. | |
| 41 | + | |
| 42 | +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. | |
| 43 | + | |
| 44 | +Checked against Kronk 1.33.2 with Qwopus3.5 4B Coder and Qwen3.5 2B: | |
| 45 | +- a turn with tool calls; | |
| 46 | +- `/unload`; | |
| 47 | +- `mm init --provider kronk --check`; | |
| 48 | +- a profile's window and sampling. | |
| 49 | + | |
| 50 | +**Not tried**: a real download through `autoPull` (only the answer to an already installed model was read), a compaction, and a protected Kronk. | |
| 51 | + | |
| 52 | +See [How to run mini-me on Kronk](../docs/en/how-to/run-with-kronk.md). | |
| 53 | + | |
| 54 | +## Demos | |
| 55 | + | |
| 56 | +- [`demos/kronk/`](../demos/kronk/README.en.md): a coding agent on Kronk with `mradermacher/Qwopus3.5-4B-Coder.Q8_0`, and the line to change for Qwen3.5 2B. | |
| 57 | +- [`demo.acp.sdk/client-tools-nodejs/`](../demo.acp.sdk/client-tools-nodejs/README.en.md): 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. | |
| 58 | +- [`demo.acp.sdk/go/`](../demo.acp.sdk/go/README.en.md): `Options.Tools`, and `examples/clienttools`, a to-do list the agent fills and reads. | |
| 59 | + | |
| 60 | +## Documentation | |
| 61 | + | |
| 62 | +- New: | |
| 63 | + - [How to offer tools from your ACP client](../docs/en/how-to/offer-tools-from-an-acp-client.md); | |
| 64 | + - [ACP client tools](../docs/en/reference/acp-client-tools.md), the specification; | |
| 65 | + - [ACP client tools — explanation](../docs/en/explanation/acp-client-tools.md); | |
| 66 | + - [How to run mini-me on Kronk](../docs/en/how-to/run-with-kronk.md). | |
| 67 | +- Updated for Kronk and client tools: | |
| 68 | + - the configuration, CLI and tools references; | |
| 69 | + - the explanations of providers, `mm init` and thinking models; | |
| 70 | + - the guides to turning reasoning off, freeing a model's memory, and running in a Docker Sandbox. | |
| 71 | +- The macOS install guide shows how to check the binary's signature, with `codesign`, before installing it. | |
| 72 | + | |
| 73 | +## Upgrading | |
| 74 | + | |
| 75 | +- **Agent files do not change.** Replace the binary: see the install guides for [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) and [Windows](../INSTALL.WINDOWS.md). | |
| 76 | +- New keys: | |
| 77 | + - `acp.clientTools.enabled` (`true`); | |
| 78 | + - `acp.clientTools.discovery` (`meta`); | |
| 79 | + - `acp.clientTools.permissions` (`auto`); | |
| 80 | + - `acp.clientTools.timeout` (`30s`). | |
| 81 | + | |
| 82 | + An ACP client that advertises no tool sees no difference. | |
| 83 | +- New provider value: `kronk`. `unknown provider` now lists `dmr, kronk, llamacpp, llmman, ollama, openai`. | |
| new file mode 100644 | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | +# mini-me v1.0.6 | ||
| 2 | + | ||
| 3 | +*[Version française](v1.0.6.fr.md)* | ||
| 4 | + | ||
| 5 | +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. | ||
| 6 | + | ||
| 7 | +## New | ||
| 8 | + | ||
| 9 | +### Tools lent by an ACP client (#202) | ||
| 10 | + | ||
| 11 | +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. | ||
| 12 | + | ||
| 13 | +- **Two ways to announce the tools**, set with `acp.clientTools.discovery`. | ||
| 14 | + - `meta` (the default): the client lists its tools in `initialize`. | ||
| 15 | + - `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. | ||
| 16 | +- **Permissions**, set with `acp.clientTools.permissions`. | ||
| 17 | + - `auto` (the default) asks the client only when `yolo` is `false`. | ||
| 18 | + - `ask` asks before every call. | ||
| 19 | + - The default is `auto`, where MCP's is `ask`: a client tool is a function of the very program that started mm. | ||
| 20 | +- **Errors never end the turn.** A client that fails, does not answer within `acp.clientTools.timeout` (`30s`), or answers `Method not found` gives the model a `[client tool error: …]` text. An entry of the list that cannot be used is skipped with a line on stderr. | ||
| 21 | +- **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. | ||
| 22 | + | ||
| 23 | +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`. | ||
| 24 | + | ||
| 25 | +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. | ||
| 26 | + | ||
| 27 | +See [How to offer tools from your ACP client](../docs/en/how-to/offer-tools-from-an-acp-client.md), the [specification](../docs/en/reference/acp-client-tools.md) and [why it is designed this way](../docs/en/explanation/acp-client-tools.md). | ||
| 28 | + | ||
| 29 | +### Kronk provider (#75) | ||
| 30 | + | ||
| 31 | +`provider: kronk` runs mini-me on [Kronk](https://www.kronkai.com), 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`. | ||
| 32 | + | ||
| 33 | +- **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)`. | ||
| 34 | +- **`autoPull`** downloads a model Kronk does not have, and **`/unload`** and the `unload_model` tool free its memory. | ||
| 35 | +- **The summary of a compaction turns reasoning off** with `chat_template_kwargs`, which Kronk obeys; `reasoning_effort: none` is ignored by Kronk. There is no `Reading the prompt …` line: Kronk sends no progress while it reads. | ||
| 36 | +- **A protected Kronk** (`authenticated` or `full-protected` modes) takes its token from `KRONK_TOKEN`. A refused token is a start-up warning that names the variable. | ||
| 37 | +- **`mm init --provider kronk`** lists Kronk's models and reads, from Kronk, the window, the GGUF's sampling and the chat template's reasoning switch. | ||
| 38 | +- **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's `model_config.yaml`. | ||
| 39 | + - `mm init` says what a profile is, and copies its sampling into the file. Without the copy, it would never apply: mm sends `temperature`, `top_p` and `max_tokens` with every request, even without a `sampling:` block, and a request's value wins over a profile's. | ||
| 40 | + - The window shows a profile as `Qwopus3.5-4B-Coder.Q8…/AGENT` instead of just `AGENT`. | ||
| 41 | + | ||
| 42 | +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. | ||
| 43 | + | ||
| 44 | +Checked against Kronk 1.33.2 with Qwopus3.5 4B Coder and Qwen3.5 2B: | ||
| 45 | +- a turn with tool calls; | ||
| 46 | +- `/unload`; | ||
| 47 | +- `mm init --provider kronk --check`; | ||
| 48 | +- a profile's window and sampling. | ||
| 49 | + | ||
| 50 | +**Not tried**: a real download through `autoPull` (only the answer to an already installed model was read), a compaction, and a protected Kronk. | ||
| 51 | + | ||
| 52 | +See [How to run mini-me on Kronk](../docs/en/how-to/run-with-kronk.md). | ||
| 53 | + | ||
| 54 | +## Demos | ||
| 55 | + | ||
| 56 | +- [`demos/kronk/`](../demos/kronk/README.en.md): a coding agent on Kronk with `mradermacher/Qwopus3.5-4B-Coder.Q8_0`, and the line to change for Qwen3.5 2B. | ||
| 57 | +- [`demo.acp.sdk/client-tools-nodejs/`](../demo.acp.sdk/client-tools-nodejs/README.en.md): 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. | ||
| 58 | +- [`demo.acp.sdk/go/`](../demo.acp.sdk/go/README.en.md): `Options.Tools`, and `examples/clienttools`, a to-do list the agent fills and reads. | ||
| 59 | + | ||
| 60 | +## Documentation | ||
| 61 | + | ||
| 62 | +- New: | ||
| 63 | + - [How to offer tools from your ACP client](../docs/en/how-to/offer-tools-from-an-acp-client.md); | ||
| 64 | + - [ACP client tools](../docs/en/reference/acp-client-tools.md), the specification; | ||
| 65 | + - [ACP client tools — explanation](../docs/en/explanation/acp-client-tools.md); | ||
| 66 | + - [How to run mini-me on Kronk](../docs/en/how-to/run-with-kronk.md). | ||
| 67 | +- Updated for Kronk and client tools: | ||
| 68 | + - the configuration, CLI and tools references; | ||
| 69 | + - the explanations of providers, `mm init` and thinking models; | ||
| 70 | + - the guides to turning reasoning off, freeing a model's memory, and running in a Docker Sandbox. | ||
| 71 | +- The macOS install guide shows how to check the binary's signature, with `codesign`, before installing it. | ||
| 72 | + | ||
| 73 | +## Upgrading | ||
| 74 | + | ||
| 75 | +- **Agent files do not change.** Replace the binary: see the install guides for [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) and [Windows](../INSTALL.WINDOWS.md). | ||
| 76 | +- New keys: | ||
| 77 | + - `acp.clientTools.enabled` (`true`); | ||
| 78 | + - `acp.clientTools.discovery` (`meta`); | ||
| 79 | + - `acp.clientTools.permissions` (`auto`); | ||
| 80 | + - `acp.clientTools.timeout` (`30s`). | ||
| 81 | + | ||
| 82 | + An ACP client that advertises no tool sees no difference. | ||
| 83 | +- New provider value: `kronk`. `unknown provider` now lists `dmr, kronk, llamacpp, llmman, ollama, openai`. | ||
added
release-notes/v1.0.6.fr.md +83 -0 | new file mode 100644 | ||
| @@ -0,0 +1,83 @@ | ||
| 1 | +# mini-me v1.0.6 | |
| 2 | + | |
| 3 | +*[English version](v1.0.6.en.md)* | |
| 4 | + | |
| 5 | +Un client ACP peut prêter à l'agent ses propres fonctions comme outils, et mini-me tourne sur Kronk, le serveur d'inférence Go d'Ardan Labs. | |
| 6 | + | |
| 7 | +## Nouveautés | |
| 8 | + | |
| 9 | +### Des outils prêtés par un client ACP (#202) | |
| 10 | + | |
| 11 | +En mode ACP, le programme qui pilote mm peut maintenant donner à l'agent ses propres outils. Par exemple les buffers ouverts d'un éditeur, les données d'une application ou un appareil. Le modèle les appelle comme `bash` ou `read_file`, sous le nom `client_<nom>`. mm transmet chaque appel au client sous forme de requête d'extension ACP et rend la réponse au modèle. ACP ne définit aucun moyen de décrire un tel outil : mm en définit donc un, sous son propre espace de noms, `org.mini-me`. Un client qui ne s'en sert pas n'envoie rien, et rien ne change. | |
| 12 | + | |
| 13 | +- **Deux façons d'annoncer les outils**, réglées par `acp.clientTools.discovery`. | |
| 14 | + - `meta` (par défaut) : le client liste ses outils dans `initialize`. | |
| 15 | + - `request` : le client dit seulement qu'il a des outils, et mm demande la liste à chaque ouverture, chargement ou reprise de session. C'est pour des outils qui dépendent de la session. | |
| 16 | +- **Permissions**, réglées par `acp.clientTools.permissions`. | |
| 17 | + - `auto` (par défaut) ne demande au client que si `yolo` vaut `false`. | |
| 18 | + - `ask` demande avant chaque appel. | |
| 19 | + - Le défaut est `auto`, là où celui de MCP est `ask` : un outil client est une fonction du programme même qui a lancé mm. | |
| 20 | +- **Les erreurs ne terminent jamais le tour.** Un client qui échoue, ne répond pas dans `acp.clientTools.timeout` (`30s`), ou répond `Method not found` donne au modèle un texte `[client tool error: …]`. Une entrée inutilisable de la liste est ignorée avec une ligne sur stderr. | |
| 21 | +- **Pour le couper** : `acp.clientTools.enabled: false`. Les outils n'existent qu'en mode ACP : le terminal et la fenêtre n'ont pas de client pour les prêter. | |
| 22 | + | |
| 23 | +La spécification est écrite pour les auteurs de clients : le JSON exact de l'annonce, de la requête de liste, d'un appel et de sa réponse. Le paquet Go de `demo.acp.sdk` propose des outils avec `Options.Tools` et `ToolDiscovery`. | |
| 24 | + | |
| 25 | +Vérifié avec Qwen3.5 4B sur llmman : l'exemple Go, dans les deux modes, et la démo Node.js, en `meta`, `request` et `yolo: false`. La démo Node.js a aussi tourné sur macOS. | |
| 26 | + | |
| 27 | +Voir [Proposer des outils depuis votre client ACP](../docs/fr/how-to/offer-tools-from-an-acp-client.md), la [spécification](../docs/fr/reference/acp-client-tools.md) et [pourquoi elle a cette forme](../docs/fr/explanation/acp-client-tools.md). | |
| 28 | + | |
| 29 | +### Fournisseur Kronk (#75) | |
| 30 | + | |
| 31 | +`provider: kronk` fait tourner mini-me sur [Kronk](https://www.kronkai.com), le serveur d'inférence Go d'Ardan Labs. Kronk embarque llama.cpp sans processus `llama-server`. mm utilise son API compatible OpenAI sur `http://127.0.0.1:11435/v1`. Depuis une sandbox, mm se replie sur `http://host.docker.internal:11435/v1`. | |
| 32 | + | |
| 33 | +- **La fenêtre est connue dès le démarrage.** C'est celle avec laquelle Kronk sert le modèle, lue auprès de Kronk que le modèle soit chargé ou non, par exemple `ctx: 131072 (/v1/kronk/models)`. | |
| 34 | +- **`autoPull`** télécharge un modèle que Kronk n'a pas, et **`/unload`** et l'outil `unload_model` libèrent sa mémoire. | |
| 35 | +- **Le résumé d'une compaction coupe le raisonnement** avec `chat_template_kwargs`, que Kronk respecte ; Kronk ignore `reasoning_effort: none`. Pas de ligne `Reading the prompt …` : Kronk n'envoie pas d'avancement pendant qu'il lit. | |
| 36 | +- **Un Kronk protégé** (modes `authenticated` ou `full-protected`) prend son jeton dans `KRONK_TOKEN`. Un jeton refusé donne au démarrage un avertissement qui nomme la variable. | |
| 37 | +- **`mm init --provider kronk`** liste les modèles de Kronk et lit, auprès de Kronk, la fenêtre, l'échantillonnage du GGUF et l'interrupteur de raisonnement du chat template. | |
| 38 | +- **Les profils Kronk.** Kronk liste aussi des profils de configuration, `provider/modelID/PROFIL` (par exemple `…/Qwopus3.5-4B-Coder.Q8_0/AGENT`). Un profil, c'est le même modèle avec ses propres réglages dans le `model_config.yaml` de Kronk. | |
| 39 | + - `mm init` dit ce qu'est un profil, et recopie son échantillonnage dans le fichier. Sans cette copie, il ne s'appliquerait jamais : mm envoie `temperature`, `top_p` et `max_tokens` à chaque requête, même sans bloc `sampling:`, et une valeur de la requête l'emporte sur celle du profil. | |
| 40 | + - La fenêtre affiche un profil comme `Qwopus3.5-4B-Coder.Q8…/AGENT` au lieu de `AGENT` seul. | |
| 41 | + | |
| 42 | +Depuis un Docker Sandbox, lancez Kronk sur l'hôte avec `kronk server start --api-host 0.0.0.0:11435` : par défaut, il n'écoute que sur la boucle locale. L'id sous lequel Kronk sert un modèle n'est pas toujours celui du téléchargement : `unsloth/Qwen3.5-2B-GGUF:Q4_K_M` est servi comme `unsloth/Qwen3.5-2B-Q4_K_M`. Prenez l'id que donne `GET /v1/models`. | |
| 43 | + | |
| 44 | +Vérifié avec Kronk 1.33.2, Qwopus3.5 4B Coder et Qwen3.5 2B : | |
| 45 | +- un tour avec appels d'outils ; | |
| 46 | +- `/unload` ; | |
| 47 | +- `mm init --provider kronk --check` ; | |
| 48 | +- la fenêtre et l'échantillonnage d'un profil. | |
| 49 | + | |
| 50 | +**Pas essayé** : un vrai téléchargement par `autoPull` (seule la réponse pour un modèle déjà installé a été lue), une compaction, et un Kronk protégé. | |
| 51 | + | |
| 52 | +Voir [Faire tourner mini-me sur Kronk](../docs/fr/how-to/run-with-kronk.md). | |
| 53 | + | |
| 54 | +## Démos | |
| 55 | + | |
| 56 | +- [`demos/kronk/`](../demos/kronk/README.fr.md) : un agent de code sur Kronk avec `mradermacher/Qwopus3.5-4B-Coder.Q8_0`, et la ligne à changer pour Qwen3.5 2B. | |
| 57 | +- [`demo.acp.sdk/client-tools-nodejs/`](../demo.acp.sdk/client-tools-nodejs/README.fr.md) : un client Node.js sans dépendance qui prête à l'agent un outil, `host_info`, le système, le CPU, la mémoire ou l'uptime de la machine du client. L'agent n'a pas de shell : cet outil est son seul moyen de savoir. | |
| 58 | +- [`demo.acp.sdk/go/`](../demo.acp.sdk/go/README.fr.md) : `Options.Tools`, et `examples/clienttools`, une liste de tâches que l'agent remplit et lit. | |
| 59 | + | |
| 60 | +## Documentation | |
| 61 | + | |
| 62 | +- Nouveau : | |
| 63 | + - [Proposer des outils depuis votre client ACP](../docs/fr/how-to/offer-tools-from-an-acp-client.md) ; | |
| 64 | + - [Outils du client ACP](../docs/fr/reference/acp-client-tools.md), la spécification ; | |
| 65 | + - [Outils du client ACP — explication](../docs/fr/explanation/acp-client-tools.md) ; | |
| 66 | + - [Faire tourner mini-me sur Kronk](../docs/fr/how-to/run-with-kronk.md). | |
| 67 | +- Mis à jour pour Kronk et les outils client : | |
| 68 | + - les références de configuration, de la CLI et des outils ; | |
| 69 | + - les explications sur les fournisseurs, `mm init` et les modèles qui réfléchissent ; | |
| 70 | + - les guides pour couper le raisonnement, libérer la mémoire d'un modèle et tourner dans un Docker Sandbox. | |
| 71 | +- Le guide d'installation macOS montre comment vérifier la signature du binaire, avec `codesign`, avant de l'installer. | |
| 72 | + | |
| 73 | +## Mise à jour | |
| 74 | + | |
| 75 | +- **Les fichiers d'agent ne changent pas.** Remplacez le binaire : voir les guides d'installation pour [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) et [Windows](../INSTALL.WINDOWS.md). | |
| 76 | +- Nouvelles clés : | |
| 77 | + - `acp.clientTools.enabled` (`true`) ; | |
| 78 | + - `acp.clientTools.discovery` (`meta`) ; | |
| 79 | + - `acp.clientTools.permissions` (`auto`) ; | |
| 80 | + - `acp.clientTools.timeout` (`30s`). | |
| 81 | + | |
| 82 | + Un client ACP qui n'annonce aucun outil ne voit aucune différence. | |
| 83 | +- Nouvelle valeur de `provider` : `kronk`. `unknown provider` liste maintenant `dmr, kronk, llamacpp, llmman, ollama, openai`. | |
| new file mode 100644 | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | +# mini-me v1.0.6 | ||
| 2 | + | ||
| 3 | +*[English version](v1.0.6.en.md)* | ||
| 4 | + | ||
| 5 | +Un client ACP peut prêter à l'agent ses propres fonctions comme outils, et mini-me tourne sur Kronk, le serveur d'inférence Go d'Ardan Labs. | ||
| 6 | + | ||
| 7 | +## Nouveautés | ||
| 8 | + | ||
| 9 | +### Des outils prêtés par un client ACP (#202) | ||
| 10 | + | ||
| 11 | +En mode ACP, le programme qui pilote mm peut maintenant donner à l'agent ses propres outils. Par exemple les buffers ouverts d'un éditeur, les données d'une application ou un appareil. Le modèle les appelle comme `bash` ou `read_file`, sous le nom `client_<nom>`. mm transmet chaque appel au client sous forme de requête d'extension ACP et rend la réponse au modèle. ACP ne définit aucun moyen de décrire un tel outil : mm en définit donc un, sous son propre espace de noms, `org.mini-me`. Un client qui ne s'en sert pas n'envoie rien, et rien ne change. | ||
| 12 | + | ||
| 13 | +- **Deux façons d'annoncer les outils**, réglées par `acp.clientTools.discovery`. | ||
| 14 | + - `meta` (par défaut) : le client liste ses outils dans `initialize`. | ||
| 15 | + - `request` : le client dit seulement qu'il a des outils, et mm demande la liste à chaque ouverture, chargement ou reprise de session. C'est pour des outils qui dépendent de la session. | ||
| 16 | +- **Permissions**, réglées par `acp.clientTools.permissions`. | ||
| 17 | + - `auto` (par défaut) ne demande au client que si `yolo` vaut `false`. | ||
| 18 | + - `ask` demande avant chaque appel. | ||
| 19 | + - Le défaut est `auto`, là où celui de MCP est `ask` : un outil client est une fonction du programme même qui a lancé mm. | ||
| 20 | +- **Les erreurs ne terminent jamais le tour.** Un client qui échoue, ne répond pas dans `acp.clientTools.timeout` (`30s`), ou répond `Method not found` donne au modèle un texte `[client tool error: …]`. Une entrée inutilisable de la liste est ignorée avec une ligne sur stderr. | ||
| 21 | +- **Pour le couper** : `acp.clientTools.enabled: false`. Les outils n'existent qu'en mode ACP : le terminal et la fenêtre n'ont pas de client pour les prêter. | ||
| 22 | + | ||
| 23 | +La spécification est écrite pour les auteurs de clients : le JSON exact de l'annonce, de la requête de liste, d'un appel et de sa réponse. Le paquet Go de `demo.acp.sdk` propose des outils avec `Options.Tools` et `ToolDiscovery`. | ||
| 24 | + | ||
| 25 | +Vérifié avec Qwen3.5 4B sur llmman : l'exemple Go, dans les deux modes, et la démo Node.js, en `meta`, `request` et `yolo: false`. La démo Node.js a aussi tourné sur macOS. | ||
| 26 | + | ||
| 27 | +Voir [Proposer des outils depuis votre client ACP](../docs/fr/how-to/offer-tools-from-an-acp-client.md), la [spécification](../docs/fr/reference/acp-client-tools.md) et [pourquoi elle a cette forme](../docs/fr/explanation/acp-client-tools.md). | ||
| 28 | + | ||
| 29 | +### Fournisseur Kronk (#75) | ||
| 30 | + | ||
| 31 | +`provider: kronk` fait tourner mini-me sur [Kronk](https://www.kronkai.com), le serveur d'inférence Go d'Ardan Labs. Kronk embarque llama.cpp sans processus `llama-server`. mm utilise son API compatible OpenAI sur `http://127.0.0.1:11435/v1`. Depuis une sandbox, mm se replie sur `http://host.docker.internal:11435/v1`. | ||
| 32 | + | ||
| 33 | +- **La fenêtre est connue dès le démarrage.** C'est celle avec laquelle Kronk sert le modèle, lue auprès de Kronk que le modèle soit chargé ou non, par exemple `ctx: 131072 (/v1/kronk/models)`. | ||
| 34 | +- **`autoPull`** télécharge un modèle que Kronk n'a pas, et **`/unload`** et l'outil `unload_model` libèrent sa mémoire. | ||
| 35 | +- **Le résumé d'une compaction coupe le raisonnement** avec `chat_template_kwargs`, que Kronk respecte ; Kronk ignore `reasoning_effort: none`. Pas de ligne `Reading the prompt …` : Kronk n'envoie pas d'avancement pendant qu'il lit. | ||
| 36 | +- **Un Kronk protégé** (modes `authenticated` ou `full-protected`) prend son jeton dans `KRONK_TOKEN`. Un jeton refusé donne au démarrage un avertissement qui nomme la variable. | ||
| 37 | +- **`mm init --provider kronk`** liste les modèles de Kronk et lit, auprès de Kronk, la fenêtre, l'échantillonnage du GGUF et l'interrupteur de raisonnement du chat template. | ||
| 38 | +- **Les profils Kronk.** Kronk liste aussi des profils de configuration, `provider/modelID/PROFIL` (par exemple `…/Qwopus3.5-4B-Coder.Q8_0/AGENT`). Un profil, c'est le même modèle avec ses propres réglages dans le `model_config.yaml` de Kronk. | ||
| 39 | + - `mm init` dit ce qu'est un profil, et recopie son échantillonnage dans le fichier. Sans cette copie, il ne s'appliquerait jamais : mm envoie `temperature`, `top_p` et `max_tokens` à chaque requête, même sans bloc `sampling:`, et une valeur de la requête l'emporte sur celle du profil. | ||
| 40 | + - La fenêtre affiche un profil comme `Qwopus3.5-4B-Coder.Q8…/AGENT` au lieu de `AGENT` seul. | ||
| 41 | + | ||
| 42 | +Depuis un Docker Sandbox, lancez Kronk sur l'hôte avec `kronk server start --api-host 0.0.0.0:11435` : par défaut, il n'écoute que sur la boucle locale. L'id sous lequel Kronk sert un modèle n'est pas toujours celui du téléchargement : `unsloth/Qwen3.5-2B-GGUF:Q4_K_M` est servi comme `unsloth/Qwen3.5-2B-Q4_K_M`. Prenez l'id que donne `GET /v1/models`. | ||
| 43 | + | ||
| 44 | +Vérifié avec Kronk 1.33.2, Qwopus3.5 4B Coder et Qwen3.5 2B : | ||
| 45 | +- un tour avec appels d'outils ; | ||
| 46 | +- `/unload` ; | ||
| 47 | +- `mm init --provider kronk --check` ; | ||
| 48 | +- la fenêtre et l'échantillonnage d'un profil. | ||
| 49 | + | ||
| 50 | +**Pas essayé** : un vrai téléchargement par `autoPull` (seule la réponse pour un modèle déjà installé a été lue), une compaction, et un Kronk protégé. | ||
| 51 | + | ||
| 52 | +Voir [Faire tourner mini-me sur Kronk](../docs/fr/how-to/run-with-kronk.md). | ||
| 53 | + | ||
| 54 | +## Démos | ||
| 55 | + | ||
| 56 | +- [`demos/kronk/`](../demos/kronk/README.fr.md) : un agent de code sur Kronk avec `mradermacher/Qwopus3.5-4B-Coder.Q8_0`, et la ligne à changer pour Qwen3.5 2B. | ||
| 57 | +- [`demo.acp.sdk/client-tools-nodejs/`](../demo.acp.sdk/client-tools-nodejs/README.fr.md) : un client Node.js sans dépendance qui prête à l'agent un outil, `host_info`, le système, le CPU, la mémoire ou l'uptime de la machine du client. L'agent n'a pas de shell : cet outil est son seul moyen de savoir. | ||
| 58 | +- [`demo.acp.sdk/go/`](../demo.acp.sdk/go/README.fr.md) : `Options.Tools`, et `examples/clienttools`, une liste de tâches que l'agent remplit et lit. | ||
| 59 | + | ||
| 60 | +## Documentation | ||
| 61 | + | ||
| 62 | +- Nouveau : | ||
| 63 | + - [Proposer des outils depuis votre client ACP](../docs/fr/how-to/offer-tools-from-an-acp-client.md) ; | ||
| 64 | + - [Outils du client ACP](../docs/fr/reference/acp-client-tools.md), la spécification ; | ||
| 65 | + - [Outils du client ACP — explication](../docs/fr/explanation/acp-client-tools.md) ; | ||
| 66 | + - [Faire tourner mini-me sur Kronk](../docs/fr/how-to/run-with-kronk.md). | ||
| 67 | +- Mis à jour pour Kronk et les outils client : | ||
| 68 | + - les références de configuration, de la CLI et des outils ; | ||
| 69 | + - les explications sur les fournisseurs, `mm init` et les modèles qui réfléchissent ; | ||
| 70 | + - les guides pour couper le raisonnement, libérer la mémoire d'un modèle et tourner dans un Docker Sandbox. | ||
| 71 | +- Le guide d'installation macOS montre comment vérifier la signature du binaire, avec `codesign`, avant de l'installer. | ||
| 72 | + | ||
| 73 | +## Mise à jour | ||
| 74 | + | ||
| 75 | +- **Les fichiers d'agent ne changent pas.** Remplacez le binaire : voir les guides d'installation pour [macOS](../INSTALL.MACOS.md), [Linux](../INSTALL.LINUX.md) et [Windows](../INSTALL.WINDOWS.md). | ||
| 76 | +- Nouvelles clés : | ||
| 77 | + - `acp.clientTools.enabled` (`true`) ; | ||
| 78 | + - `acp.clientTools.discovery` (`meta`) ; | ||
| 79 | + - `acp.clientTools.permissions` (`auto`) ; | ||
| 80 | + - `acp.clientTools.timeout` (`30s`). | ||
| 81 | + | ||
| 82 | + Un client ACP qui n'annonce aucun outil ne voit aucune différence. | ||
| 83 | +- Nouvelle valeur de `provider` : `kronk`. `unknown provider` liste maintenant `dmr, kronk, llamacpp, llmman, ollama, openai`. | ||