bots-garden/mini-mepublic Fork
⑂ c2ad262
Commits
⬇ Clone ▾
git clone https://git.rickub.com/bots-garden/mini-me.git
git clone ssh://git@rickub.com/bots-garden/mini-me.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP

📦 Mini Me

k33g committed 2026-10-21T18:24:07+02:00 Browse files
c2ad262 parent: b8680ab
deleted hello.txt +0 -1
deleted file mode 100644
@@ -1 +0,0 @@
1-hello world
deleted file mode 100644
@@ -1 +0,0 @@
1-hello world
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
44
55 | Version | Date | Summary | |
66 |---|---|---|---|
7-| [v0.8.0](v0.8.0.en.md) | not tagged yet | Search what was said before and what is written down: recall your earlier questions in the window, search the stored sessions, and search a documentation folder. | [FR](v0.8.0.fr.md) |
7+| [v0.9.0](v0.9.0.en.md) | not tagged yet | Start an agent without writing its file, run your own tools and hooks as sandboxed WebAssembly modules, and talk to any OpenAI-compatible server. | [FR](v0.9.0.fr.md) |
8+| [v0.8.0](v0.8.0.en.md) | 2026-10-20 | Search what was said before and what is written down: recall your earlier questions in the window, search the stored sessions, and search a documentation folder. | [FR](v0.8.0.fr.md) |
89 | [v0.7.0](v0.7.0.en.md) | 2026-10-18 | Free a model's memory, see which hooks ran, pick up an earlier session from your editor, and screen questions with guard models. | [FR](v0.7.0.fr.md) |
910 | [v0.6.0](v0.6.0.en.md) | 2026-10-17 | Your own tools declared in the agent file, and answers saved to a file without being written again. | [FR](v0.6.0.fr.md) |
1011 | [v0.5.0](v0.5.0.en.md) | 2026-10-16 | Hooks: your own scripts around generations, tool calls and calls to other agents. | [FR](v0.5.0.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-| [v0.8.0](v0.8.0.en.md) | not tagged yet | Search what was said before and what is written down: recall your earlier questions in the window, search the stored sessions, and search a documentation folder. | [FR](v0.8.0.fr.md) |7+| [v0.9.0](v0.9.0.en.md) | not tagged yet | Start an agent without writing its file, run your own tools and hooks as sandboxed WebAssembly modules, and talk to any OpenAI-compatible server. | [FR](v0.9.0.fr.md) |
8+| [v0.8.0](v0.8.0.en.md) | 2026-10-20 | Search what was said before and what is written down: recall your earlier questions in the window, search the stored sessions, and search a documentation folder. | [FR](v0.8.0.fr.md) |
8 | [v0.7.0](v0.7.0.en.md) | 2026-10-18 | Free a model's memory, see which hooks ran, pick up an earlier session from your editor, and screen questions with guard models. | [FR](v0.7.0.fr.md) |9 | [v0.7.0](v0.7.0.en.md) | 2026-10-18 | Free a model's memory, see which hooks ran, pick up an earlier session from your editor, and screen questions with guard models. | [FR](v0.7.0.fr.md) |
9 | [v0.6.0](v0.6.0.en.md) | 2026-10-17 | Your own tools declared in the agent file, and answers saved to a file without being written again. | [FR](v0.6.0.fr.md) |10 | [v0.6.0](v0.6.0.en.md) | 2026-10-17 | Your own tools declared in the agent file, and answers saved to a file without being written again. | [FR](v0.6.0.fr.md) |
10 | [v0.5.0](v0.5.0.en.md) | 2026-10-16 | Hooks: your own scripts around generations, tool calls and calls to other agents. | [FR](v0.5.0.fr.md) |11 | [v0.5.0](v0.5.0.en.md) | 2026-10-16 | Hooks: your own scripts around generations, tool calls and calls to other agents. | [FR](v0.5.0.fr.md) |
modified release-notes/v0.8.0.en.md +0 -1
@@ -47,7 +47,6 @@ Search what was said before and what is written down: recall your earlier questi
4747 ## Fixed
4848
4949 - **Line mode: only the first of several piped lines was read** (#103). `printf '/sessions\n/help\n' | mm agent.yaml` or `mm agent.yaml < commands.txt` ran the first line and silently dropped the others. All of them now run, and a last line without a newline is no longer lost. Typing at the keyboard was not affected.
50-- **`mm --about` listed only six tools and two model servers.** It now lists every built-in tool — the ones on by default and the ones the configuration turns on — and the four servers (Docker Model Runner, llmman, Ollama, llama.cpp). A test now fails if a new built-in tool is missing from it.
5150
5251 ## Demos
5352
@@ -47,7 +47,6 @@ Search what was said before and what is written down: recall your earlier questi
47 ## Fixed47 ## Fixed
48 48
49 - **Line mode: only the first of several piped lines was read** (#103). `printf '/sessions\n/help\n' | mm agent.yaml` or `mm agent.yaml < commands.txt` ran the first line and silently dropped the others. All of them now run, and a last line without a newline is no longer lost. Typing at the keyboard was not affected.49 - **Line mode: only the first of several piped lines was read** (#103). `printf '/sessions\n/help\n' | mm agent.yaml` or `mm agent.yaml < commands.txt` ran the first line and silently dropped the others. All of them now run, and a last line without a newline is no longer lost. Typing at the keyboard was not affected.
50-- **`mm --about` listed only six tools and two model servers.** It now lists every built-in tool — the ones on by default and the ones the configuration turns on — and the four servers (Docker Model Runner, llmman, Ollama, llama.cpp). A test now fails if a new built-in tool is missing from it.
51 50
52 ## Demos51 ## Demos
53 52
modified release-notes/v0.8.0.fr.md +0 -1
@@ -47,7 +47,6 @@ Retrouver ce qui a été dit et ce qui est écrit : rappeler ses questions préc
4747 ## Corrigé
4848
4949 - **Mode ligne : seule la première de plusieurs lignes reçues par un pipe était lue** (#103). `printf '/sessions\n/help\n' | mm agent.yaml` ou `mm agent.yaml < commandes.txt` exécutait la première ligne et ignorait les autres sans rien dire. Elles s'exécutent maintenant toutes, et une dernière ligne sans retour à la ligne n'est plus perdue. La saisie au clavier n'était pas touchée.
50-- **`mm --about` ne listait que six outils et deux serveurs de modèles.** Il liste maintenant tous les outils intégrés — ceux actifs par défaut et ceux que la configuration active — et les quatre serveurs (Docker Model Runner, llmman, Ollama, llama.cpp). Un test échoue désormais si un nouvel outil intégré y manque.
5150
5251 ## Démos
5352
@@ -47,7 +47,6 @@ Retrouver ce qui a été dit et ce qui est écrit : rappeler ses questions préc
47 ## Corrigé47 ## Corrigé
48 48
49 - **Mode ligne : seule la première de plusieurs lignes reçues par un pipe était lue** (#103). `printf '/sessions\n/help\n' | mm agent.yaml` ou `mm agent.yaml < commandes.txt` exécutait la première ligne et ignorait les autres sans rien dire. Elles s'exécutent maintenant toutes, et une dernière ligne sans retour à la ligne n'est plus perdue. La saisie au clavier n'était pas touchée.49 - **Mode ligne : seule la première de plusieurs lignes reçues par un pipe était lue** (#103). `printf '/sessions\n/help\n' | mm agent.yaml` ou `mm agent.yaml < commandes.txt` exécutait la première ligne et ignorait les autres sans rien dire. Elles s'exécutent maintenant toutes, et une dernière ligne sans retour à la ligne n'est plus perdue. La saisie au clavier n'était pas touchée.
50-- **`mm --about` ne listait que six outils et deux serveurs de modèles.** Il liste maintenant tous les outils intégrés — ceux actifs par défaut et ceux que la configuration active — et les quatre serveurs (Docker Model Runner, llmman, Ollama, llama.cpp). Un test échoue désormais si un nouvel outil intégré y manque.
51 50
52 ## Démos51 ## Démos
53 52
added release-notes/v0.9.0.en.md +72 -0
new file mode 100644
@@ -0,0 +1,72 @@
1+# mini-me v0.9.0
2+
3+*[Version française](v0.9.0.fr.md)*
4+
5+Start an agent without writing its file, run your own tools and hooks as sandboxed WebAssembly modules, and talk to any OpenAI-compatible server.
6+
7+## New
8+
9+### `mm init` — a wizard that writes the agent.yaml (#97)
10+
11+- **`mm init`** (or `mm --init`) asks a few questions and writes a commented `agent.yaml`: the model server, the model (picked from the server's own list), its family, what the agent is for, which machine runs it, whether to ask before each command or file change, the agent's name and the file. No model runs while it does.
12+- **In a terminal it opens a window** in the style of `mm -tui`: the steps on the left, the question in the middle with what the highlighted choice means, and on the right the file as it would be written, updated as you move the selection. `↑` `↓` choose, `Enter` answers, `Esc` goes back, `Tab` shows the preview on a screen narrower than 100 columns, `Ctrl-C` quits without writing.
13+- **Every value says why it has that value**, in a comment: what the server reports about the model (llmman and Ollama `/api/show`, llama-server `/props`: native window, the GGUF's own sampling, the template's reasoning switch), then a table of 14 model families (Qwen, Qwen Coder, Gemma, Mellum, Mellum Thinking, gpt-oss, OpenAI, MiniCPM, Ornith, Granite Guardian, Menlo, Llama, Mistral, other — each entry with its source), then 9 usages (`developer`, `reviewer`, `translator`, `writer`, `assistant`, `researcher`, `docs`, `json`, `coordinator`), then the 3 machine rows of the settings guide (`small`, `medium`, `large`).
14+- **For scripts**: every question has a flag (`--provider`, `--model`, `--usage`, `--machine`, `--name`, `-o`…), `--yes` takes the defaults for the rest, `-o -` prints the file instead of writing it, `--line` asks line by line, and `--check` asks the model "Say hello in one line." with the new file.
15+- **An existing file is never overwritten**: mm says so before asking anything. The written file is loaded the way mm loads a configuration, so a file that would not start is reported at once.
16+
17+### WebAssembly tools (#119)
18+
19+- A `tools:` entry can now name a **WebAssembly module** instead of a command: `wasm: ./tools/search_notes.wasm`. mm runs it itself, with [wazero](https://wazero.io) — no process, nothing to install — in a sandbox that sees **no file, no environment variable and no network**, except the folders the entry opens: `read: [notes]` (read-only) and `write: [out]` (read-write).
20+- The module is an ordinary WASI program (TinyGo: `tinygo build -target=wasip1`). It reads the call's arguments as one JSON object on stdin — checked and typed by mm, defaults applied — and what it prints is the tool's result; a non-zero exit is a failure.
21+- Same consent (`yolo`), same loop detector, same hooks and same display as a command tool, in every front end.
22+- Measured on a linux/arm64 sandbox: compiling a TinyGo module of about 550 KB took 176–183 ms, once per mm process; each call after that 0.2–0.5 ms.
23+
24+### WebAssembly hooks (#120, closes #46)
25+
26+- A hook entry can name a module too: `wasm: ./hooks/bash_guard.wasm` instead of `command:`. It reads the same JSON and writes the same reply as a script hook; `matcher`, `timeout` and `onError` work as before, and `read:` / `write:` open folders as for tools. Of the environment, the module sees `MM_HOOK_EVENT` only.
27+- Measured with the `bash` guard of `demos/hooks`, through mm's hooks runner: the Node.js script takes a median of 65–67 ms per call; the same rules as a module 0.56–0.58 ms, after a first run of 234–248 ms (the compilation).
28+- A hook that lists the working directory or calls a server (the guard models) stays a script: a module can open folders inside the working directory, not the directory itself, and has no network.
29+
30+### A provider for any OpenAI-compatible server (#118)
31+
32+- **`provider: openai`** talks to any server that speaks the OpenAI API — the OpenAI API itself by default (`https://api.openai.com/v1`), or the `baseUrl` you give. The key comes from `OPENAI_API_KEY`, never from the YAML.
33+- It assumes only the protocol: none of the fields mm adds for llama.cpp, llmman or Ollama are sent. Such a server does not say how large its window is: set `contextWindow`, otherwise compression counts messages.
34+- At start-up, a server that refuses the key is reported as such (`refused the key — export OPENAI_API_KEY…`), not as a server that does not answer.
35+- `mm init` offers it too, and lists its models with the key. The real OpenAI API was not tried while building it.
36+
37+### `mm tui` and `mm acp` (#117)
38+
39+- The window and the editor mode can be started with a word, like `mm init`: `mm tui agent.yaml` is `mm -tui agent.yaml`, `mm acp` is `mm -acp`. Every other flag still works (`mm tui -config a.yaml`). `--tui` and `--acp` already worked.
40+
41+## Fixed
42+
43+- **Plans were shared by every editor conversation** (#108). Each ACP session now has its own plans; in the line mode and the window there is one conversation, as before.
44+- **`/new` and `/resume` kept the old plans** (#109). A conversation that changes now starts with no plan: `/new` and `/resume` in the line mode and the window, a new session, `session/load` and `session/resume` over ACP (only that conversation's plans).
45+- **The plan progress line was documented but never shown** (#110). After each plan action mm now shows `📋 [2/3] …`: printed in the line mode, a notice in the window, in the tool call's result in an editor. Making it visible exposed two defects, fixed with it: after `update 1 done` the line still showed task 1, and a later `next` put the finished task back in progress.
46+- **`mm --about` listed only six tools and two model servers.** It now lists every built-in tool — the ones on by default and the ones the configuration turns on — and the model servers (Docker Model Runner, llmman, Ollama, llama.cpp, any other OpenAI-compatible one). A test now fails if a new built-in tool is missing from it, and another if one has no section in the tools reference (`plan` had none).
47+
48+## Demos
49+
50+- **`demos/plans/`** (new): Planner, on Qwen3.5 4B with llmman, builds a tiny Go program in four steps — module, code, test, README — while mm shows the plan's progress after each action.
51+- **`demos/wasm-tools/`** (new): a notes desk acting only through four WebAssembly tools — one pure computation, two that may only read `notes/`, one that may only write `out/`. Asked for `../agent.yaml`, the note reader finds nothing: the file is outside its sandbox. Qwen3.5 4B on llmman, one live run of each tool.
52+- **`demos/wasm-hooks/`** (new): the hooks of `demos/hooks` — secret filter, `bash` guard, audit log — as WebAssembly modules, with nothing to install beside mm. Gemma 4 E4B on llmman, with the measurement against the Node.js versions.
53+- The modules of both WebAssembly demos are included, built; `./build.sh` rebuilds them with TinyGo.
54+
55+## Documentation
56+
57+- **New how-to guides** (EN + FR):
58+ - [Create an agent with `mm init`](../docs/en/how-to/create-an-agent.md)
59+ - [Run with an OpenAI-compatible server](../docs/en/how-to/run-with-an-openai-compatible-server.md)
60+ - [Write a custom tool as a WebAssembly module](../docs/en/how-to/write-a-wasm-tool.md)
61+ - [Write a hook as a WebAssembly module](../docs/en/how-to/write-a-wasm-hook.md)
62+- **New guide**: the [keyboard shortcuts of the window](../guides/tui-keyboard-shortcuts.md) ([FR](../guides/raccourcis-clavier-tui.md)), grouped by what you are doing, with the `mm init` window.
63+- **Rewritten**: [Manage plans and tasks](../docs/en/how-to/manage-plans-and-tasks.md) — what each front end shows, a measured sample; the section about a `/plans` command that does not exist is gone.
64+- **Updated**: the explanations of declared tools (a section on WebAssembly tools), hooks (WebAssembly hooks and what was measured) and providers; the references for the command line (`mm init`, `mm tui`, `mm acp`), the configuration, hooks, tools (a `plan` section, WebAssembly tools) and slash commands (`/new`, `/resume` and the plans); the package diagram.
65+
66+## Upgrading
67+
68+- **Building from source needs Go 1.27** (#115): `go.mod` now says `go 1.27.0` and `toolchain go1.27.3`. The Docker Sandbox Go kit installs 1.27.3. Release binaries are unaffected.
69+- **No breaking change in the configuration.** New keys: `provider: openai`; `wasm`, `read` and `write` on a `tools:` entry and on a hook entry. An existing agent gets no new tool.
70+- **A first argument `init`, `tui` or `acp` is now a mode word.** A configuration file with one of these names must be given as `./tui` or with `-config`.
71+- **Two messages changed**: a `tools:` entry with neither `command` nor `wasm` now says `command must name a program, … (or wasm: a module)`; a hook entry with neither says `command must not be empty (or wasm: a module)`.
72+- **The binary is larger**: the WebAssembly runtime adds about 3.9 MB (38.97 → 42.87 MB on linux/arm64). mm still has no CGO and builds for the same five targets.
new file mode 100644
@@ -0,0 +1,72 @@
1+# mini-me v0.9.0
2+
3+*[Version française](v0.9.0.fr.md)*
4+
5+Start an agent without writing its file, run your own tools and hooks as sandboxed WebAssembly modules, and talk to any OpenAI-compatible server.
6+
7+## New
8+
9+### `mm init` — a wizard that writes the agent.yaml (#97)
10+
11+- **`mm init`** (or `mm --init`) asks a few questions and writes a commented `agent.yaml`: the model server, the model (picked from the server's own list), its family, what the agent is for, which machine runs it, whether to ask before each command or file change, the agent's name and the file. No model runs while it does.
12+- **In a terminal it opens a window** in the style of `mm -tui`: the steps on the left, the question in the middle with what the highlighted choice means, and on the right the file as it would be written, updated as you move the selection. `↑` `↓` choose, `Enter` answers, `Esc` goes back, `Tab` shows the preview on a screen narrower than 100 columns, `Ctrl-C` quits without writing.
13+- **Every value says why it has that value**, in a comment: what the server reports about the model (llmman and Ollama `/api/show`, llama-server `/props`: native window, the GGUF's own sampling, the template's reasoning switch), then a table of 14 model families (Qwen, Qwen Coder, Gemma, Mellum, Mellum Thinking, gpt-oss, OpenAI, MiniCPM, Ornith, Granite Guardian, Menlo, Llama, Mistral, other — each entry with its source), then 9 usages (`developer`, `reviewer`, `translator`, `writer`, `assistant`, `researcher`, `docs`, `json`, `coordinator`), then the 3 machine rows of the settings guide (`small`, `medium`, `large`).
14+- **For scripts**: every question has a flag (`--provider`, `--model`, `--usage`, `--machine`, `--name`, `-o`…), `--yes` takes the defaults for the rest, `-o -` prints the file instead of writing it, `--line` asks line by line, and `--check` asks the model "Say hello in one line." with the new file.
15+- **An existing file is never overwritten**: mm says so before asking anything. The written file is loaded the way mm loads a configuration, so a file that would not start is reported at once.
16+
17+### WebAssembly tools (#119)
18+
19+- A `tools:` entry can now name a **WebAssembly module** instead of a command: `wasm: ./tools/search_notes.wasm`. mm runs it itself, with [wazero](https://wazero.io) — no process, nothing to install — in a sandbox that sees **no file, no environment variable and no network**, except the folders the entry opens: `read: [notes]` (read-only) and `write: [out]` (read-write).
20+- The module is an ordinary WASI program (TinyGo: `tinygo build -target=wasip1`). It reads the call's arguments as one JSON object on stdin — checked and typed by mm, defaults applied — and what it prints is the tool's result; a non-zero exit is a failure.
21+- Same consent (`yolo`), same loop detector, same hooks and same display as a command tool, in every front end.
22+- Measured on a linux/arm64 sandbox: compiling a TinyGo module of about 550 KB took 176–183 ms, once per mm process; each call after that 0.2–0.5 ms.
23+
24+### WebAssembly hooks (#120, closes #46)
25+
26+- A hook entry can name a module too: `wasm: ./hooks/bash_guard.wasm` instead of `command:`. It reads the same JSON and writes the same reply as a script hook; `matcher`, `timeout` and `onError` work as before, and `read:` / `write:` open folders as for tools. Of the environment, the module sees `MM_HOOK_EVENT` only.
27+- Measured with the `bash` guard of `demos/hooks`, through mm's hooks runner: the Node.js script takes a median of 65–67 ms per call; the same rules as a module 0.56–0.58 ms, after a first run of 234–248 ms (the compilation).
28+- A hook that lists the working directory or calls a server (the guard models) stays a script: a module can open folders inside the working directory, not the directory itself, and has no network.
29+
30+### A provider for any OpenAI-compatible server (#118)
31+
32+- **`provider: openai`** talks to any server that speaks the OpenAI API — the OpenAI API itself by default (`https://api.openai.com/v1`), or the `baseUrl` you give. The key comes from `OPENAI_API_KEY`, never from the YAML.
33+- It assumes only the protocol: none of the fields mm adds for llama.cpp, llmman or Ollama are sent. Such a server does not say how large its window is: set `contextWindow`, otherwise compression counts messages.
34+- At start-up, a server that refuses the key is reported as such (`refused the key — export OPENAI_API_KEY…`), not as a server that does not answer.
35+- `mm init` offers it too, and lists its models with the key. The real OpenAI API was not tried while building it.
36+
37+### `mm tui` and `mm acp` (#117)
38+
39+- The window and the editor mode can be started with a word, like `mm init`: `mm tui agent.yaml` is `mm -tui agent.yaml`, `mm acp` is `mm -acp`. Every other flag still works (`mm tui -config a.yaml`). `--tui` and `--acp` already worked.
40+
41+## Fixed
42+
43+- **Plans were shared by every editor conversation** (#108). Each ACP session now has its own plans; in the line mode and the window there is one conversation, as before.
44+- **`/new` and `/resume` kept the old plans** (#109). A conversation that changes now starts with no plan: `/new` and `/resume` in the line mode and the window, a new session, `session/load` and `session/resume` over ACP (only that conversation's plans).
45+- **The plan progress line was documented but never shown** (#110). After each plan action mm now shows `📋 [2/3] …`: printed in the line mode, a notice in the window, in the tool call's result in an editor. Making it visible exposed two defects, fixed with it: after `update 1 done` the line still showed task 1, and a later `next` put the finished task back in progress.
46+- **`mm --about` listed only six tools and two model servers.** It now lists every built-in tool — the ones on by default and the ones the configuration turns on — and the model servers (Docker Model Runner, llmman, Ollama, llama.cpp, any other OpenAI-compatible one). A test now fails if a new built-in tool is missing from it, and another if one has no section in the tools reference (`plan` had none).
47+
48+## Demos
49+
50+- **`demos/plans/`** (new): Planner, on Qwen3.5 4B with llmman, builds a tiny Go program in four steps — module, code, test, README — while mm shows the plan's progress after each action.
51+- **`demos/wasm-tools/`** (new): a notes desk acting only through four WebAssembly tools — one pure computation, two that may only read `notes/`, one that may only write `out/`. Asked for `../agent.yaml`, the note reader finds nothing: the file is outside its sandbox. Qwen3.5 4B on llmman, one live run of each tool.
52+- **`demos/wasm-hooks/`** (new): the hooks of `demos/hooks` — secret filter, `bash` guard, audit log — as WebAssembly modules, with nothing to install beside mm. Gemma 4 E4B on llmman, with the measurement against the Node.js versions.
53+- The modules of both WebAssembly demos are included, built; `./build.sh` rebuilds them with TinyGo.
54+
55+## Documentation
56+
57+- **New how-to guides** (EN + FR):
58+ - [Create an agent with `mm init`](../docs/en/how-to/create-an-agent.md)
59+ - [Run with an OpenAI-compatible server](../docs/en/how-to/run-with-an-openai-compatible-server.md)
60+ - [Write a custom tool as a WebAssembly module](../docs/en/how-to/write-a-wasm-tool.md)
61+ - [Write a hook as a WebAssembly module](../docs/en/how-to/write-a-wasm-hook.md)
62+- **New guide**: the [keyboard shortcuts of the window](../guides/tui-keyboard-shortcuts.md) ([FR](../guides/raccourcis-clavier-tui.md)), grouped by what you are doing, with the `mm init` window.
63+- **Rewritten**: [Manage plans and tasks](../docs/en/how-to/manage-plans-and-tasks.md) — what each front end shows, a measured sample; the section about a `/plans` command that does not exist is gone.
64+- **Updated**: the explanations of declared tools (a section on WebAssembly tools), hooks (WebAssembly hooks and what was measured) and providers; the references for the command line (`mm init`, `mm tui`, `mm acp`), the configuration, hooks, tools (a `plan` section, WebAssembly tools) and slash commands (`/new`, `/resume` and the plans); the package diagram.
65+
66+## Upgrading
67+
68+- **Building from source needs Go 1.27** (#115): `go.mod` now says `go 1.27.0` and `toolchain go1.27.3`. The Docker Sandbox Go kit installs 1.27.3. Release binaries are unaffected.
69+- **No breaking change in the configuration.** New keys: `provider: openai`; `wasm`, `read` and `write` on a `tools:` entry and on a hook entry. An existing agent gets no new tool.
70+- **A first argument `init`, `tui` or `acp` is now a mode word.** A configuration file with one of these names must be given as `./tui` or with `-config`.
71+- **Two messages changed**: a `tools:` entry with neither `command` nor `wasm` now says `command must name a program, … (or wasm: a module)`; a hook entry with neither says `command must not be empty (or wasm: a module)`.
72+- **The binary is larger**: the WebAssembly runtime adds about 3.9 MB (38.97 → 42.87 MB on linux/arm64). mm still has no CGO and builds for the same five targets.
added release-notes/v0.9.0.fr.md +72 -0
new file mode 100644
@@ -0,0 +1,72 @@
1+# mini-me v0.9.0
2+
3+*[English version](v0.9.0.en.md)*
4+
5+Démarrer un agent sans écrire son fichier, exécuter vos propres outils et hooks en modules WebAssembly dans un bac à sable, et parler à n'importe quel serveur compatible OpenAI.
6+
7+## Nouveautés
8+
9+### `mm init` — un assistant qui écrit l'agent.yaml (#97)
10+
11+- **`mm init`** (ou `mm --init`) pose quelques questions et écrit un `agent.yaml` commenté : le serveur de modèles, le modèle (choisi dans la liste du serveur lui-même), sa famille, à quoi sert l'agent, quelle machine le fait tourner, s'il faut demander avant chaque commande ou modification de fichier, le nom de l'agent et le fichier. Aucun modèle ne tourne pendant ce temps.
12+- **Dans un terminal, il ouvre une fenêtre** dans le style de `mm -tui` : les étapes à gauche, la question au centre avec ce que signifie le choix surligné, et à droite le fichier tel qu'il serait écrit, mis à jour quand la sélection bouge. `↑` `↓` choisissent, `Entrée` répond, `Échap` revient en arrière, `Tab` affiche l'aperçu sur un écran de moins de 100 colonnes, `Ctrl-C` quitte sans rien écrire.
13+- **Chaque valeur dit pourquoi elle a cette valeur**, dans un commentaire : ce que le serveur dit du modèle (`/api/show` de llmman et d'Ollama, `/props` de llama-server : fenêtre native, échantillonnage du GGUF lui-même, interrupteur de raisonnement du template), puis une table de 14 familles de modèles (Qwen, Qwen Coder, Gemma, Mellum, Mellum Thinking, gpt-oss, OpenAI, MiniCPM, Ornith, Granite Guardian, Menlo, Llama, Mistral, other — chaque entrée avec sa source), puis 9 usages (`developer`, `reviewer`, `translator`, `writer`, `assistant`, `researcher`, `docs`, `json`, `coordinator`), puis les 3 lignes machine du guide des réglages (`small`, `medium`, `large`).
14+- **Pour les scripts** : chaque question a son option (`--provider`, `--model`, `--usage`, `--machine`, `--name`, `-o`…), `--yes` prend les valeurs par défaut pour le reste, `-o -` affiche le fichier au lieu de l'écrire, `--line` pose les questions ligne par ligne, et `--check` demande au modèle « Say hello in one line. » avec le nouveau fichier.
15+- **Un fichier existant n'est jamais écrasé** : mm le dit avant de poser la moindre question. Le fichier écrit est chargé comme mm charge une configuration, donc un fichier qui ne démarrerait pas est signalé tout de suite.
16+
17+### Des outils WebAssembly (#119)
18+
19+- Une entrée `tools:` peut maintenant nommer un **module WebAssembly** au lieu d'une commande : `wasm: ./tools/search_notes.wasm`. mm l'exécute lui-même, avec [wazero](https://wazero.io) — aucun processus, rien à installer — dans un bac à sable qui ne voit **aucun fichier, aucune variable d'environnement et aucun réseau**, sauf les dossiers que l'entrée ouvre : `read: [notes]` (lecture seule) et `write: [out]` (lecture-écriture).
20+- Le module est un programme WASI ordinaire (TinyGo : `tinygo build -target=wasip1`). Il lit les arguments de l'appel en un seul objet JSON sur stdin — vérifiés et typés par mm, valeurs par défaut appliquées — et ce qu'il écrit est le résultat de l'outil ; un code de sortie non nul est un échec.
21+- Même consentement (`yolo`), même détecteur de boucle, mêmes hooks et même affichage qu'un outil commande, dans toutes les façades.
22+- Mesuré dans un sandbox linux/arm64 : compiler un module TinyGo d'environ 550 Ko a pris 176 à 183 ms, une fois par processus mm ; chaque appel suivant 0,2 à 0,5 ms.
23+
24+### Des hooks WebAssembly (#120, clôt #46)
25+
26+- Une entrée de hook peut aussi nommer un module : `wasm: ./hooks/bash_guard.wasm` au lieu de `command:`. Il lit le même JSON et écrit la même réponse qu'un hook script ; `matcher`, `timeout` et `onError` fonctionnent comme avant, et `read:` / `write:` ouvrent des dossiers comme pour les outils. De l'environnement, le module ne voit que `MM_HOOK_EVENT`.
27+- Mesuré avec la garde `bash` de `demos/hooks`, à travers le lanceur de hooks de mm : le script Node.js prend une médiane de 65 à 67 ms par appel ; les mêmes règles en module 0,56 à 0,58 ms, après une première exécution de 234 à 248 ms (la compilation).
28+- Un hook qui liste le répertoire de travail ou appelle un serveur (les modèles de garde) reste un script : un module peut ouvrir des dossiers à l'intérieur du répertoire de travail, pas le répertoire lui-même, et n'a pas de réseau.
29+
30+### Un fournisseur pour tout serveur compatible OpenAI (#118)
31+
32+- **`provider: openai`** parle à tout serveur qui parle l'API OpenAI — l'API OpenAI elle-même par défaut (`https://api.openai.com/v1`), ou le `baseUrl` que vous donnez. La clé vient de `OPENAI_API_KEY`, jamais du YAML.
33+- Il ne suppose que le protocole : aucun des champs que mm ajoute pour llama.cpp, llmman ou Ollama n'est envoyé. Un tel serveur ne dit pas la taille de sa fenêtre : donnez `contextWindow`, sinon la compression compte les messages.
34+- Au démarrage, un serveur qui refuse la clé est signalé comme tel (`refused the key — export OPENAI_API_KEY…`), et non comme un serveur qui ne répond pas.
35+- `mm init` le propose aussi, et liste ses modèles avec la clé. La vraie API OpenAI n'a pas été essayée pendant le développement.
36+
37+### `mm tui` et `mm acp` (#117)
38+
39+- La fenêtre et le mode éditeur se lancent aussi par un mot, comme `mm init` : `mm tui agent.yaml` est `mm -tui agent.yaml`, `mm acp` est `mm -acp`. Toutes les autres options fonctionnent (`mm tui -config a.yaml`). `--tui` et `--acp` fonctionnaient déjà.
40+
41+## Corrigé
42+
43+- **Les plans étaient partagés par toutes les conversations d'un éditeur** (#108). Chaque session ACP a maintenant ses propres plans ; en mode ligne et dans la fenêtre il n'y a qu'une conversation, comme avant.
44+- **`/new` et `/resume` gardaient les anciens plans** (#109). Une conversation qui change commence maintenant sans plan : `/new` et `/resume` en mode ligne et dans la fenêtre, une nouvelle session, `session/load` et `session/resume` en ACP (seulement les plans de cette conversation).
45+- **La ligne de progression des plans était documentée mais jamais affichée** (#110). Après chaque action sur un plan, mm affiche maintenant `📋 [2/3] …` : écrite en mode ligne, une notification dans la fenêtre, dans le résultat de l'appel d'outil dans un éditeur. La rendre visible a révélé deux défauts, corrigés avec elle : après `update 1 done` la ligne montrait encore la tâche 1, et un `next` ultérieur remettait la tâche terminée en cours.
46+- **`mm --about` ne listait que six outils et deux serveurs de modèles.** Il liste maintenant chaque outil intégré — ceux actifs par défaut et ceux que la configuration active — et les serveurs de modèles (Docker Model Runner, llmman, Ollama, llama.cpp, tout autre serveur compatible OpenAI). Un test échoue maintenant si un nouvel outil intégré y manque, et un autre s'il n'a pas de section dans la référence des outils (`plan` n'en avait pas).
47+
48+## Démos
49+
50+- **`demos/plans/`** (nouvelle) : Planner, sur Qwen3.5 4B avec llmman, construit un petit programme Go en quatre étapes — module, code, test, README — pendant que mm affiche la progression du plan après chaque action.
51+- **`demos/wasm-tools/`** (nouvelle) : un bureau de notes qui n'agit qu'à travers quatre outils WebAssembly — un calcul pur, deux qui ne peuvent que lire `notes/`, un qui ne peut qu'écrire dans `out/`. Appelé avec `../agent.yaml`, le lecteur de notes ne trouve rien : le fichier est hors de son bac à sable. Qwen3.5 4B sur llmman, une exécution réelle de chaque outil.
52+- **`demos/wasm-hooks/`** (nouvelle) : les hooks de `demos/hooks` — filtre de secrets, garde `bash`, journal d'audit — en modules WebAssembly, sans rien à installer à côté de mm. Gemma 4 E4B sur llmman, avec la mesure face aux versions Node.js.
53+- Les modules des deux démos WebAssembly sont fournis, compilés ; `./build.sh` les reconstruit avec TinyGo.
54+
55+## Documentation
56+
57+- **Nouveaux guides pratiques** (EN + FR) :
58+ - [Créer un agent avec `mm init`](../docs/fr/how-to/create-an-agent.md)
59+ - [Utiliser un serveur compatible OpenAI](../docs/fr/how-to/run-with-an-openai-compatible-server.md)
60+ - [Écrire un outil personnalisé sous forme de module WebAssembly](../docs/fr/how-to/write-a-wasm-tool.md)
61+ - [Écrire un hook sous forme de module WebAssembly](../docs/fr/how-to/write-a-wasm-hook.md)
62+- **Nouveau guide** : les [raccourcis clavier de la fenêtre](../guides/raccourcis-clavier-tui.md) ([EN](../guides/tui-keyboard-shortcuts.md)), groupés par ce que vous faites, avec la fenêtre de `mm init`.
63+- **Réécrit** : [Gérer des plans et des tâches](../docs/fr/how-to/manage-plans-and-tasks.md) — ce que montre chaque façade, un exemple mesuré ; la section sur une commande `/plans` qui n'existe pas a disparu.
64+- **Mis à jour** : les explications des outils déclarés (une section sur les outils WebAssembly), des hooks (les hooks WebAssembly et ce qui a été mesuré) et des fournisseurs ; les références de la ligne de commande (`mm init`, `mm tui`, `mm acp`), de la configuration, des hooks, des outils (une section `plan`, les outils WebAssembly) et des commandes slash (`/new`, `/resume` et les plans) ; le diagramme des paquets.
65+
66+## Mise à jour
67+
68+- **Compiler depuis les sources demande Go 1.27** (#115) : `go.mod` indique maintenant `go 1.27.0` et `toolchain go1.27.3`. Le kit Go des Docker Sandboxes installe 1.27.3. Les binaires de release ne sont pas concernés.
69+- **Aucun changement cassant dans la configuration.** Nouvelles clés : `provider: openai` ; `wasm`, `read` et `write` sur une entrée `tools:` et sur une entrée de hook. Un agent existant ne reçoit aucun nouvel outil.
70+- **Un premier argument `init`, `tui` ou `acp` est maintenant un mot de mode.** Un fichier de configuration portant l'un de ces noms doit être donné en `./tui` ou avec `-config`.
71+- **Deux messages ont changé** : une entrée `tools:` sans `command` ni `wasm` dit maintenant `command must name a program, … (or wasm: a module)` ; une entrée de hook sans l'un ni l'autre dit `command must not be empty (or wasm: a module)`.
72+- **Le binaire est plus gros** : le runtime WebAssembly ajoute environ 3,9 Mo (38,97 → 42,87 Mo sur linux/arm64). mm n'utilise toujours pas CGO et se compile pour les mêmes cinq cibles.
new file mode 100644
@@ -0,0 +1,72 @@
1+# mini-me v0.9.0
2+
3+*[English version](v0.9.0.en.md)*
4+
5+Démarrer un agent sans écrire son fichier, exécuter vos propres outils et hooks en modules WebAssembly dans un bac à sable, et parler à n'importe quel serveur compatible OpenAI.
6+
7+## Nouveautés
8+
9+### `mm init` — un assistant qui écrit l'agent.yaml (#97)
10+
11+- **`mm init`** (ou `mm --init`) pose quelques questions et écrit un `agent.yaml` commenté : le serveur de modèles, le modèle (choisi dans la liste du serveur lui-même), sa famille, à quoi sert l'agent, quelle machine le fait tourner, s'il faut demander avant chaque commande ou modification de fichier, le nom de l'agent et le fichier. Aucun modèle ne tourne pendant ce temps.
12+- **Dans un terminal, il ouvre une fenêtre** dans le style de `mm -tui` : les étapes à gauche, la question au centre avec ce que signifie le choix surligné, et à droite le fichier tel qu'il serait écrit, mis à jour quand la sélection bouge. `↑` `↓` choisissent, `Entrée` répond, `Échap` revient en arrière, `Tab` affiche l'aperçu sur un écran de moins de 100 colonnes, `Ctrl-C` quitte sans rien écrire.
13+- **Chaque valeur dit pourquoi elle a cette valeur**, dans un commentaire : ce que le serveur dit du modèle (`/api/show` de llmman et d'Ollama, `/props` de llama-server : fenêtre native, échantillonnage du GGUF lui-même, interrupteur de raisonnement du template), puis une table de 14 familles de modèles (Qwen, Qwen Coder, Gemma, Mellum, Mellum Thinking, gpt-oss, OpenAI, MiniCPM, Ornith, Granite Guardian, Menlo, Llama, Mistral, other — chaque entrée avec sa source), puis 9 usages (`developer`, `reviewer`, `translator`, `writer`, `assistant`, `researcher`, `docs`, `json`, `coordinator`), puis les 3 lignes machine du guide des réglages (`small`, `medium`, `large`).
14+- **Pour les scripts** : chaque question a son option (`--provider`, `--model`, `--usage`, `--machine`, `--name`, `-o`…), `--yes` prend les valeurs par défaut pour le reste, `-o -` affiche le fichier au lieu de l'écrire, `--line` pose les questions ligne par ligne, et `--check` demande au modèle « Say hello in one line. » avec le nouveau fichier.
15+- **Un fichier existant n'est jamais écrasé** : mm le dit avant de poser la moindre question. Le fichier écrit est chargé comme mm charge une configuration, donc un fichier qui ne démarrerait pas est signalé tout de suite.
16+
17+### Des outils WebAssembly (#119)
18+
19+- Une entrée `tools:` peut maintenant nommer un **module WebAssembly** au lieu d'une commande : `wasm: ./tools/search_notes.wasm`. mm l'exécute lui-même, avec [wazero](https://wazero.io) — aucun processus, rien à installer — dans un bac à sable qui ne voit **aucun fichier, aucune variable d'environnement et aucun réseau**, sauf les dossiers que l'entrée ouvre : `read: [notes]` (lecture seule) et `write: [out]` (lecture-écriture).
20+- Le module est un programme WASI ordinaire (TinyGo : `tinygo build -target=wasip1`). Il lit les arguments de l'appel en un seul objet JSON sur stdin — vérifiés et typés par mm, valeurs par défaut appliquées — et ce qu'il écrit est le résultat de l'outil ; un code de sortie non nul est un échec.
21+- Même consentement (`yolo`), même détecteur de boucle, mêmes hooks et même affichage qu'un outil commande, dans toutes les façades.
22+- Mesuré dans un sandbox linux/arm64 : compiler un module TinyGo d'environ 550 Ko a pris 176 à 183 ms, une fois par processus mm ; chaque appel suivant 0,2 à 0,5 ms.
23+
24+### Des hooks WebAssembly (#120, clôt #46)
25+
26+- Une entrée de hook peut aussi nommer un module : `wasm: ./hooks/bash_guard.wasm` au lieu de `command:`. Il lit le même JSON et écrit la même réponse qu'un hook script ; `matcher`, `timeout` et `onError` fonctionnent comme avant, et `read:` / `write:` ouvrent des dossiers comme pour les outils. De l'environnement, le module ne voit que `MM_HOOK_EVENT`.
27+- Mesuré avec la garde `bash` de `demos/hooks`, à travers le lanceur de hooks de mm : le script Node.js prend une médiane de 65 à 67 ms par appel ; les mêmes règles en module 0,56 à 0,58 ms, après une première exécution de 234 à 248 ms (la compilation).
28+- Un hook qui liste le répertoire de travail ou appelle un serveur (les modèles de garde) reste un script : un module peut ouvrir des dossiers à l'intérieur du répertoire de travail, pas le répertoire lui-même, et n'a pas de réseau.
29+
30+### Un fournisseur pour tout serveur compatible OpenAI (#118)
31+
32+- **`provider: openai`** parle à tout serveur qui parle l'API OpenAI — l'API OpenAI elle-même par défaut (`https://api.openai.com/v1`), ou le `baseUrl` que vous donnez. La clé vient de `OPENAI_API_KEY`, jamais du YAML.
33+- Il ne suppose que le protocole : aucun des champs que mm ajoute pour llama.cpp, llmman ou Ollama n'est envoyé. Un tel serveur ne dit pas la taille de sa fenêtre : donnez `contextWindow`, sinon la compression compte les messages.
34+- Au démarrage, un serveur qui refuse la clé est signalé comme tel (`refused the key — export OPENAI_API_KEY…`), et non comme un serveur qui ne répond pas.
35+- `mm init` le propose aussi, et liste ses modèles avec la clé. La vraie API OpenAI n'a pas été essayée pendant le développement.
36+
37+### `mm tui` et `mm acp` (#117)
38+
39+- La fenêtre et le mode éditeur se lancent aussi par un mot, comme `mm init` : `mm tui agent.yaml` est `mm -tui agent.yaml`, `mm acp` est `mm -acp`. Toutes les autres options fonctionnent (`mm tui -config a.yaml`). `--tui` et `--acp` fonctionnaient déjà.
40+
41+## Corrigé
42+
43+- **Les plans étaient partagés par toutes les conversations d'un éditeur** (#108). Chaque session ACP a maintenant ses propres plans ; en mode ligne et dans la fenêtre il n'y a qu'une conversation, comme avant.
44+- **`/new` et `/resume` gardaient les anciens plans** (#109). Une conversation qui change commence maintenant sans plan : `/new` et `/resume` en mode ligne et dans la fenêtre, une nouvelle session, `session/load` et `session/resume` en ACP (seulement les plans de cette conversation).
45+- **La ligne de progression des plans était documentée mais jamais affichée** (#110). Après chaque action sur un plan, mm affiche maintenant `📋 [2/3] …` : écrite en mode ligne, une notification dans la fenêtre, dans le résultat de l'appel d'outil dans un éditeur. La rendre visible a révélé deux défauts, corrigés avec elle : après `update 1 done` la ligne montrait encore la tâche 1, et un `next` ultérieur remettait la tâche terminée en cours.
46+- **`mm --about` ne listait que six outils et deux serveurs de modèles.** Il liste maintenant chaque outil intégré — ceux actifs par défaut et ceux que la configuration active — et les serveurs de modèles (Docker Model Runner, llmman, Ollama, llama.cpp, tout autre serveur compatible OpenAI). Un test échoue maintenant si un nouvel outil intégré y manque, et un autre s'il n'a pas de section dans la référence des outils (`plan` n'en avait pas).
47+
48+## Démos
49+
50+- **`demos/plans/`** (nouvelle) : Planner, sur Qwen3.5 4B avec llmman, construit un petit programme Go en quatre étapes — module, code, test, README — pendant que mm affiche la progression du plan après chaque action.
51+- **`demos/wasm-tools/`** (nouvelle) : un bureau de notes qui n'agit qu'à travers quatre outils WebAssembly — un calcul pur, deux qui ne peuvent que lire `notes/`, un qui ne peut qu'écrire dans `out/`. Appelé avec `../agent.yaml`, le lecteur de notes ne trouve rien : le fichier est hors de son bac à sable. Qwen3.5 4B sur llmman, une exécution réelle de chaque outil.
52+- **`demos/wasm-hooks/`** (nouvelle) : les hooks de `demos/hooks` — filtre de secrets, garde `bash`, journal d'audit — en modules WebAssembly, sans rien à installer à côté de mm. Gemma 4 E4B sur llmman, avec la mesure face aux versions Node.js.
53+- Les modules des deux démos WebAssembly sont fournis, compilés ; `./build.sh` les reconstruit avec TinyGo.
54+
55+## Documentation
56+
57+- **Nouveaux guides pratiques** (EN + FR) :
58+ - [Créer un agent avec `mm init`](../docs/fr/how-to/create-an-agent.md)
59+ - [Utiliser un serveur compatible OpenAI](../docs/fr/how-to/run-with-an-openai-compatible-server.md)
60+ - [Écrire un outil personnalisé sous forme de module WebAssembly](../docs/fr/how-to/write-a-wasm-tool.md)
61+ - [Écrire un hook sous forme de module WebAssembly](../docs/fr/how-to/write-a-wasm-hook.md)
62+- **Nouveau guide** : les [raccourcis clavier de la fenêtre](../guides/raccourcis-clavier-tui.md) ([EN](../guides/tui-keyboard-shortcuts.md)), groupés par ce que vous faites, avec la fenêtre de `mm init`.
63+- **Réécrit** : [Gérer des plans et des tâches](../docs/fr/how-to/manage-plans-and-tasks.md) — ce que montre chaque façade, un exemple mesuré ; la section sur une commande `/plans` qui n'existe pas a disparu.
64+- **Mis à jour** : les explications des outils déclarés (une section sur les outils WebAssembly), des hooks (les hooks WebAssembly et ce qui a été mesuré) et des fournisseurs ; les références de la ligne de commande (`mm init`, `mm tui`, `mm acp`), de la configuration, des hooks, des outils (une section `plan`, les outils WebAssembly) et des commandes slash (`/new`, `/resume` et les plans) ; le diagramme des paquets.
65+
66+## Mise à jour
67+
68+- **Compiler depuis les sources demande Go 1.27** (#115) : `go.mod` indique maintenant `go 1.27.0` et `toolchain go1.27.3`. Le kit Go des Docker Sandboxes installe 1.27.3. Les binaires de release ne sont pas concernés.
69+- **Aucun changement cassant dans la configuration.** Nouvelles clés : `provider: openai` ; `wasm`, `read` et `write` sur une entrée `tools:` et sur une entrée de hook. Un agent existant ne reçoit aucun nouvel outil.
70+- **Un premier argument `init`, `tui` ou `acp` est maintenant un mot de mode.** Un fichier de configuration portant l'un de ces noms doit être donné en `./tui` ou avec `-config`.
71+- **Deux messages ont changé** : une entrée `tools:` sans `command` ni `wasm` dit maintenant `command must name a program, … (or wasm: a module)` ; une entrée de hook sans l'un ni l'autre dit `command must not be empty (or wasm: a module)`.
72+- **Le binaire est plus gros** : le runtime WebAssembly ajoute environ 3,9 Mo (38,97 → 42,87 Mo sur linux/arm64). mm n'utilise toujours pas CGO et se compile pour les mêmes cinq cibles.