bots-garden/mini-mepublic Fork
⑂ 697da3e
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-22T20:17:18+02:00 Browse files
697da3e parent: b84bab9
modified .tickets/milestones.yaml +1 -1
@@ -33,7 +33,7 @@ milestones:
3333 - title: v0.9.0
3434 state: closed
3535 - title: v1.0.0
36- state: open
36+ state: closed
3737 dueOn: 2026-11-31
3838 - title: v1.0.1
3939 state: open
@@ -33,7 +33,7 @@ milestones:
33 - title: v0.9.033 - title: v0.9.0
34 state: closed34 state: closed
35 - title: v1.0.035 - title: v1.0.0
36- state: open36+ state: closed
37 dueOn: 2026-11-3137 dueOn: 2026-11-31
38 - title: v1.0.138 - title: v1.0.1
39 state: open39 state: open
modified INSTALL.LINUX.md +1 -1
@@ -2,7 +2,7 @@
22
33 ```bash
44 # download the binary release in https://rickub.com/bots-garden/mini-me/releases
5-VERSION=0.9.0
5+VERSION=1.0.0
66 case "$(uname -m)" in
77 x86_64) ARCH=amd64 ;;
88 aarch64|arm64) ARCH=arm64 ;;
@@ -2,7 +2,7 @@
2 2
3 ```bash3 ```bash
4 # download the binary release in https://rickub.com/bots-garden/mini-me/releases4 # download the binary release in https://rickub.com/bots-garden/mini-me/releases
5-VERSION=0.9.05+VERSION=1.0.0
6 case "$(uname -m)" in6 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 +1 -1
@@ -2,7 +2,7 @@
22
33 ```bash
44 # download the binary release in https://rickub.com/bots-garden/mini-me/releases
5-VERSION=0.3.0
5+VERSION=1.0.0
66 curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64"
77 chmod +x ./mm-${VERSION}-darwin-arm64
88 xattr -cr ./mm-${VERSION}-darwin-arm64
@@ -2,7 +2,7 @@
2 2
3 ```bash3 ```bash
4 # download the binary release in https://rickub.com/bots-garden/mini-me/releases4 # download the binary release in https://rickub.com/bots-garden/mini-me/releases
5-VERSION=0.3.05+VERSION=1.0.0
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-arm647 chmod +x ./mm-${VERSION}-darwin-arm64
8 xattr -cr ./mm-${VERSION}-darwin-arm648 xattr -cr ./mm-${VERSION}-darwin-arm64
modified INSTALL.WINDOWS.md +1 -1
@@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed):
44
55 ```powershell
66 # download the binary release in https://rickub.com/bots-garden/mini-me/releases
7-$Version = "0.9.0"
7+$Version = "1.0.0"
88 $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" }
99 $Asset = "mm-$Version-windows-$Arch.exe"
1010 $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 ```powershell5 ```powershell
6 # download the binary release in https://rickub.com/bots-garden/mini-me/releases6 # download the binary release in https://rickub.com/bots-garden/mini-me/releases
7-$Version = "0.9.0"7+$Version = "1.0.0"
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
44
55 | Version | Date | Summary | |
66 |---|---|---|---|
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) |
7+| [v1.0.0](v1.0.0.en.md) | not tagged yet | Small decision models working for the agent — skill and tool routing, command triage, checks on what it reads — plus `/shell` in the window and `mm init` files that say where each number comes from. | [FR](v1.0.0.fr.md) |
8+| [v0.9.0](v0.9.0.en.md) | 2026-10-21 | 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) |
89 | [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) |
910 | [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) |
1011 | [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) |
@@ -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.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) |7+| [v1.0.0](v1.0.0.en.md) | not tagged yet | Small decision models working for the agent — skill and tool routing, command triage, checks on what it reads — plus `/shell` in the window and `mm init` files that say where each number comes from. | [FR](v1.0.0.fr.md) |
8+| [v0.9.0](v0.9.0.en.md) | 2026-10-21 | 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) |9 | [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) |
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) |10 | [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) |
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) |11 | [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) |
added release-notes/v1.0.0.en.md +78 -0
new file mode 100644
@@ -0,0 +1,78 @@
1+# mini-me v1.0.0
2+
3+*[Version française](v1.0.0.fr.md)*
4+
5+Small decision models working for the agent — they pick the skill, trim the tool list, triage commands and check what the agent reads — plus your shell one command away from the window, and `mm init` files that say where each number comes from.
6+
7+## New
8+
9+### Decision models (#123)
10+
11+A decision model does not write text: it answers questions about a text — a choice among options, a yes/no probability, a score — in a fraction of a second. mm talks to them through `POST /v1/systemone`, served by llama-server, llmman and Ollama.
12+
13+- **A decider is an agent file with a `decision:` block** listing its questions (`choice`, `noul`, `score`). `mm -config agent.decider.yaml -p "<text>"` prints the server's JSON answer on stdout, for a script or a hook. In the line mode, the window and an editor (`/ask-<name>`, `mm --ask`), it answers one line per question, followed by the JSON. A decider has no tools, no history and no hooks; mm refuses to start one that declares a tool.
14+- **Supported servers**: llama-server (`llamacpp`), llmman, Ollama, and `openai` when the server serves the route. Docker Model Runner does not serve decision models, and mm says so at start-up.
15+- **Tried with LiquidAI d1-3B** (`hf.co/LiquidAI/d1-3B-GGUF:Q4_K_M`): the same answers, to 1e-4, on llama-server, llmman and Ollama; about 0.2–0.5 s per call once the model is loaded, about 13 s for the first call. evalengine's decision-4b is refused by llmman and Ollama on this route (ticket 125, milestone v1.0.1).
16+
17+### Skill routing (#123)
18+
19+- **`skillRouting: {decider, minConfidence, timeout}`**: before each question, the decider picks the skill the question needs. When it is sure enough (0.6 by default), mm appends the skill's `$name` line to the question, as if you had typed it. A notice says what happened: `🧭 $bg-jobs (0.84)`, `🧭 no skill (…)` or `🧭 skill routing skipped: …`.
20+- It never blocks a question: a decider that is slow (2 s by default), down or unsure leaves the question as it is. It works in the line mode, the window and an editor; `-p` does not route, just as it does not expand `$skill`.
21+- Measured with d1-3B on llama-server, on the 23 cases of the skill-routing eval: 15 routed right at 0.6 and none wrong. Qwen3.5 4B, which picked the right skill on its own in 12 of the 23 cases, did in 16 with routing. `MM_EVAL=1 MM_DECIDER=<file> go test ./internal/eval -run Decider -v` measures a decider on its own.
22+
23+### Tool routing (#127)
24+
25+- **`toolRouting: {decider, dropBelow, timeout, groups}`**: before each turn, one yes/no question per group of tools ("does this request need running shell commands?"). A group the decider rules out (below `dropBelow`, 0.2 by default) is not offered to the model for that turn. A tool that belongs to no group is always offered, and any failure offers every tool.
26+- It only removes tools: the agent's own tools remain the upper limit. A notice says what was dropped: `🧰 tools: dropped web (0.08)`.
27+- On eight requests tried, every group a request needed scored 0.37 or more, and every score under 0.2 went to a group the request did not need. Not measured yet: whether a shorter tool list makes a small model choose better. A tool list that changes from one turn to the next cannot reuse the server's prompt cache.
28+
29+### Hooks can approve a tool call: `allow` (#126)
30+
31+- A `preToolCall` hook may now answer `{"action": "allow"}`: the call runs without asking you, even with `yolo: false`. This lets a hook skip the confirmation question for calls it knows are safe. A `deny` from a later hook still wins, a *never* you gave still refuses, and an agent asked by another one ignores `allow`.
32+- `demos/decision-commands/` uses it with a decider: read-only commands (`ls`, `cat`, `git status`…, 0.94–0.95 "read-only") run at once; `rm -rf /` and `dd` are refused; everything else asks you as before. About 0.4 s per command.
33+
34+### `/shell` in the window (#122)
35+
36+- **`/shell`** hands the terminal to your shell (`$SHELL`, `%COMSPEC%` on Windows) in the window's directory; `exit` brings the conversation back as you left it, with `🐚 Back from the shell.` (or the exit status).
37+- It works during a turn: the turn goes on, and its answer is there when you come back. `Ctrl-C` in the shell stops what you started, not mm.
38+- The shell's prompt starts with `(mm) ` (bash, zsh, fish, sh, cmd), so you do not type `exit` there thinking you are closing a tab; `MM_SHELL=1` is set for prompt themes that redraw the whole prompt.
39+
40+### `mm init` says where each number comes from (#121)
41+
42+- **Every number about the model is tagged**: `[measured]` (a demo of this repository ran with it), `[card]` (copied from the model card or the GGUF), `[server]` (read from the server), `[guide]` (the settings guide's machine row), `[rule]` (a rule of thumb). After a model or quantization change, the tag says what to redo. The header explains the tags the file uses.
43+- **The header keeps what the server said** about the model (`model facts`: native window, GGUF sampling, reasoning switch), and a comment above `model:` lists the settings chosen for that model, to redo together when it changes.
44+- **Without `--base-url`**, the file records the provider's default `baseUrl` and `fallback` as comments, ready to uncomment.
45+- **The model list of the `mm init` window** shows short names, as the window's header does (`Qwen3.5-4B:Q4_K_M`), with the highlighted model's full identifier under the list.
46+
47+## Demos
48+
49+Seven new demos, each with its decider and README (EN + FR) with measured results; all use LiquidAI d1-3B as the decider and, where there is one, Qwen3.5 4B as the chat model, on llmman.
50+
51+- **`demos/decision-skills/`**: a decider on its own (`-p` prints the JSON), and skill routing in front of a chat agent.
52+- **`demos/decision-only/`**: no chat model at all — a script triages a support inbox (category, urgency, personal data, an upset author); 6 of 6 categories right, about 0.6 s per message.
53+- **`demos/decision-commands/`**: command triage with the `allow` hook action.
54+- **`demos/decision-tools/`**: tool routing on a small Go project.
55+- **`demos/decision-injection/`** (#132): a hook warns the model when a file or a web page it read contains instructions addressed to an AI assistant. The text is checked paragraph by paragraph: a hidden comment scored 0.44 inside the whole README, 0.93 alone.
56+- **`demos/decision-tool-errors/`** (#133): a hook adds a note under a command output that shows an error, even when the exit code is 0.
57+- **`demos/decision-ask-check/`** (#134): a hook warns the asking agent when another agent's answer is off-topic.
58+
59+The three check demos report what the warnings changed, honestly: on their obvious cases, Qwen3.5 4B often saw the problem by itself.
60+
61+## Documentation
62+
63+- **New how-to guides** (EN + FR):
64+ - [Ask a decision model](../docs/en/how-to/ask-a-decision-model.md)
65+ - [Route skills with a decision model](../docs/en/how-to/route-skills-with-a-decision-model.md)
66+ - [Route tools with a decision model](../docs/en/how-to/route-tools-with-a-decision-model.md)
67+ - [Triage commands with a decision model](../docs/en/how-to/triage-commands-with-a-decision-model.md)
68+ - [Check outputs with a decision model](../docs/en/how-to/check-outputs-with-a-decision-model.md)
69+- **New explanation**: [Decision models](../docs/en/explanation/decision-models.md) — why a decider is an agent and not a tool, why routing only adds a line and tool routing only removes, what was measured, what was rejected.
70+- **New install guides**: [Linux](../INSTALL.LINUX.md) and [Windows](../INSTALL.WINDOWS.md), beside the macOS one.
71+- **Updated**: the references for the configuration (`decision`, `skillRouting`, `toolRouting`), hooks (`allow`), the command line (`-p` with a decider, `mm init`'s file) and slash commands (`/shell`); the how-tos for the window mode (`/shell`), creating an agent, confirming tool calls and measuring skill routing; the architecture explanation; the package diagram.
72+
73+## Upgrading
74+
75+- **No breaking change in the configuration.** New keys: `decision`, `skillRouting`, `toolRouting`; a new hook action, `allow` (`preToolCall` only). An agent without them behaves as before.
76+- **A decider file needs `skillsDir: no-skills`** when it can be started from a project with a `skills/` folder: with `skillsDir: ""` it reads `./skills`, declares `read_skill` and refuses to start. The demos' deciders set it.
77+- **The start-up banner** gains ` | routing: …` and ` | tool routing: …` columns when they are configured; a decider's `tools:` column reads `none (decision model: N question(s))`.
78+- **`mm init` writes a longer header** (the server's facts and the tag legend) and tags its comments; files written by v0.9.0 still load as they are.
new file mode 100644
@@ -0,0 +1,78 @@
1+# mini-me v1.0.0
2+
3+*[Version française](v1.0.0.fr.md)*
4+
5+Small decision models working for the agent — they pick the skill, trim the tool list, triage commands and check what the agent reads — plus your shell one command away from the window, and `mm init` files that say where each number comes from.
6+
7+## New
8+
9+### Decision models (#123)
10+
11+A decision model does not write text: it answers questions about a text — a choice among options, a yes/no probability, a score — in a fraction of a second. mm talks to them through `POST /v1/systemone`, served by llama-server, llmman and Ollama.
12+
13+- **A decider is an agent file with a `decision:` block** listing its questions (`choice`, `noul`, `score`). `mm -config agent.decider.yaml -p "<text>"` prints the server's JSON answer on stdout, for a script or a hook. In the line mode, the window and an editor (`/ask-<name>`, `mm --ask`), it answers one line per question, followed by the JSON. A decider has no tools, no history and no hooks; mm refuses to start one that declares a tool.
14+- **Supported servers**: llama-server (`llamacpp`), llmman, Ollama, and `openai` when the server serves the route. Docker Model Runner does not serve decision models, and mm says so at start-up.
15+- **Tried with LiquidAI d1-3B** (`hf.co/LiquidAI/d1-3B-GGUF:Q4_K_M`): the same answers, to 1e-4, on llama-server, llmman and Ollama; about 0.2–0.5 s per call once the model is loaded, about 13 s for the first call. evalengine's decision-4b is refused by llmman and Ollama on this route (ticket 125, milestone v1.0.1).
16+
17+### Skill routing (#123)
18+
19+- **`skillRouting: {decider, minConfidence, timeout}`**: before each question, the decider picks the skill the question needs. When it is sure enough (0.6 by default), mm appends the skill's `$name` line to the question, as if you had typed it. A notice says what happened: `🧭 $bg-jobs (0.84)`, `🧭 no skill (…)` or `🧭 skill routing skipped: …`.
20+- It never blocks a question: a decider that is slow (2 s by default), down or unsure leaves the question as it is. It works in the line mode, the window and an editor; `-p` does not route, just as it does not expand `$skill`.
21+- Measured with d1-3B on llama-server, on the 23 cases of the skill-routing eval: 15 routed right at 0.6 and none wrong. Qwen3.5 4B, which picked the right skill on its own in 12 of the 23 cases, did in 16 with routing. `MM_EVAL=1 MM_DECIDER=<file> go test ./internal/eval -run Decider -v` measures a decider on its own.
22+
23+### Tool routing (#127)
24+
25+- **`toolRouting: {decider, dropBelow, timeout, groups}`**: before each turn, one yes/no question per group of tools ("does this request need running shell commands?"). A group the decider rules out (below `dropBelow`, 0.2 by default) is not offered to the model for that turn. A tool that belongs to no group is always offered, and any failure offers every tool.
26+- It only removes tools: the agent's own tools remain the upper limit. A notice says what was dropped: `🧰 tools: dropped web (0.08)`.
27+- On eight requests tried, every group a request needed scored 0.37 or more, and every score under 0.2 went to a group the request did not need. Not measured yet: whether a shorter tool list makes a small model choose better. A tool list that changes from one turn to the next cannot reuse the server's prompt cache.
28+
29+### Hooks can approve a tool call: `allow` (#126)
30+
31+- A `preToolCall` hook may now answer `{"action": "allow"}`: the call runs without asking you, even with `yolo: false`. This lets a hook skip the confirmation question for calls it knows are safe. A `deny` from a later hook still wins, a *never* you gave still refuses, and an agent asked by another one ignores `allow`.
32+- `demos/decision-commands/` uses it with a decider: read-only commands (`ls`, `cat`, `git status`…, 0.94–0.95 "read-only") run at once; `rm -rf /` and `dd` are refused; everything else asks you as before. About 0.4 s per command.
33+
34+### `/shell` in the window (#122)
35+
36+- **`/shell`** hands the terminal to your shell (`$SHELL`, `%COMSPEC%` on Windows) in the window's directory; `exit` brings the conversation back as you left it, with `🐚 Back from the shell.` (or the exit status).
37+- It works during a turn: the turn goes on, and its answer is there when you come back. `Ctrl-C` in the shell stops what you started, not mm.
38+- The shell's prompt starts with `(mm) ` (bash, zsh, fish, sh, cmd), so you do not type `exit` there thinking you are closing a tab; `MM_SHELL=1` is set for prompt themes that redraw the whole prompt.
39+
40+### `mm init` says where each number comes from (#121)
41+
42+- **Every number about the model is tagged**: `[measured]` (a demo of this repository ran with it), `[card]` (copied from the model card or the GGUF), `[server]` (read from the server), `[guide]` (the settings guide's machine row), `[rule]` (a rule of thumb). After a model or quantization change, the tag says what to redo. The header explains the tags the file uses.
43+- **The header keeps what the server said** about the model (`model facts`: native window, GGUF sampling, reasoning switch), and a comment above `model:` lists the settings chosen for that model, to redo together when it changes.
44+- **Without `--base-url`**, the file records the provider's default `baseUrl` and `fallback` as comments, ready to uncomment.
45+- **The model list of the `mm init` window** shows short names, as the window's header does (`Qwen3.5-4B:Q4_K_M`), with the highlighted model's full identifier under the list.
46+
47+## Demos
48+
49+Seven new demos, each with its decider and README (EN + FR) with measured results; all use LiquidAI d1-3B as the decider and, where there is one, Qwen3.5 4B as the chat model, on llmman.
50+
51+- **`demos/decision-skills/`**: a decider on its own (`-p` prints the JSON), and skill routing in front of a chat agent.
52+- **`demos/decision-only/`**: no chat model at all — a script triages a support inbox (category, urgency, personal data, an upset author); 6 of 6 categories right, about 0.6 s per message.
53+- **`demos/decision-commands/`**: command triage with the `allow` hook action.
54+- **`demos/decision-tools/`**: tool routing on a small Go project.
55+- **`demos/decision-injection/`** (#132): a hook warns the model when a file or a web page it read contains instructions addressed to an AI assistant. The text is checked paragraph by paragraph: a hidden comment scored 0.44 inside the whole README, 0.93 alone.
56+- **`demos/decision-tool-errors/`** (#133): a hook adds a note under a command output that shows an error, even when the exit code is 0.
57+- **`demos/decision-ask-check/`** (#134): a hook warns the asking agent when another agent's answer is off-topic.
58+
59+The three check demos report what the warnings changed, honestly: on their obvious cases, Qwen3.5 4B often saw the problem by itself.
60+
61+## Documentation
62+
63+- **New how-to guides** (EN + FR):
64+ - [Ask a decision model](../docs/en/how-to/ask-a-decision-model.md)
65+ - [Route skills with a decision model](../docs/en/how-to/route-skills-with-a-decision-model.md)
66+ - [Route tools with a decision model](../docs/en/how-to/route-tools-with-a-decision-model.md)
67+ - [Triage commands with a decision model](../docs/en/how-to/triage-commands-with-a-decision-model.md)
68+ - [Check outputs with a decision model](../docs/en/how-to/check-outputs-with-a-decision-model.md)
69+- **New explanation**: [Decision models](../docs/en/explanation/decision-models.md) — why a decider is an agent and not a tool, why routing only adds a line and tool routing only removes, what was measured, what was rejected.
70+- **New install guides**: [Linux](../INSTALL.LINUX.md) and [Windows](../INSTALL.WINDOWS.md), beside the macOS one.
71+- **Updated**: the references for the configuration (`decision`, `skillRouting`, `toolRouting`), hooks (`allow`), the command line (`-p` with a decider, `mm init`'s file) and slash commands (`/shell`); the how-tos for the window mode (`/shell`), creating an agent, confirming tool calls and measuring skill routing; the architecture explanation; the package diagram.
72+
73+## Upgrading
74+
75+- **No breaking change in the configuration.** New keys: `decision`, `skillRouting`, `toolRouting`; a new hook action, `allow` (`preToolCall` only). An agent without them behaves as before.
76+- **A decider file needs `skillsDir: no-skills`** when it can be started from a project with a `skills/` folder: with `skillsDir: ""` it reads `./skills`, declares `read_skill` and refuses to start. The demos' deciders set it.
77+- **The start-up banner** gains ` | routing: …` and ` | tool routing: …` columns when they are configured; a decider's `tools:` column reads `none (decision model: N question(s))`.
78+- **`mm init` writes a longer header** (the server's facts and the tag legend) and tags its comments; files written by v0.9.0 still load as they are.
added release-notes/v1.0.0.fr.md +88 -0
new file mode 100644
@@ -0,0 +1,88 @@
1+# mini-me v1.0.0
2+
3+*[English version](v1.0.0.en.md)*
4+
5+De petits modèles de décision au service de l'agent : ils choisissent le skill, réduisent la liste des outils, trient les commandes et contrôlent ce que l'agent lit. S'y ajoutent votre shell à une commande de la fenêtre, et des fichiers `mm init` qui disent d'où vient chaque nombre.
6+
7+## Nouveautés
8+
9+### Modèles de décision (#123)
10+
11+Un modèle de décision n'écrit pas de texte : il répond à des questions sur un texte (un choix parmi des options, une probabilité oui/non, une note), en une fraction de seconde. mm les interroge par `POST /v1/systemone`, que servent llama-server, llmman et Ollama.
12+
13+- **Un décideur est un fichier d'agent avec un bloc `decision:`** qui liste ses questions (`choice`, `noul`, `score`). `mm -config agent.decider.yaml -p "<texte>"` affiche sur stdout la réponse JSON du serveur, pour un script ou un hook. Dans le mode ligne, la fenêtre et un éditeur (`/ask-<nom>`, `mm --ask`), il répond par une ligne par question, suivie du JSON. Un décideur n'a ni outils, ni historique, ni hooks ; mm refuse d'en démarrer un qui déclare un outil.
14+- **Serveurs pris en charge** : llama-server (`llamacpp`), llmman, Ollama, et `openai` quand le serveur sert la route. Docker Model Runner ne sert pas de modèles de décision, et mm le dit au démarrage.
15+- **Essayé avec LiquidAI d1-3B** (`hf.co/LiquidAI/d1-3B-GGUF:Q4_K_M`) : les mêmes réponses, à 1e-4 près, sur llama-server, llmman et Ollama. Environ 0,2 à 0,5 s par appel une fois le modèle chargé, environ 13 s pour le premier appel. Le decision-4b d'evalengine est refusé par llmman et Ollama sur cette route (ticket 125, milestone v1.0.1).
16+
17+### Routage des skills (#123)
18+
19+- **`skillRouting: {decider, minConfidence, timeout}`** : avant chaque question, le décideur choisit le skill dont elle a besoin. Quand il est assez sûr (0,6 par défaut), mm ajoute à la question la ligne `$nom` du skill, comme si vous l'aviez tapée. Une notice dit ce qui s'est passé : `🧭 $bg-jobs (0.84)`, `🧭 no skill (…)` ou `🧭 skill routing skipped: …`.
20+- Il ne bloque jamais une question : un décideur lent (2 s par défaut), arrêté ou hésitant laisse la question telle quelle. Il fonctionne dans le mode ligne, la fenêtre et un éditeur ; `-p` ne route pas, de même qu'il ne développe pas `$skill`.
21+- Mesuré avec d1-3B sur llama-server, sur les 23 cas de l'éval de routage des skills : 15 routés juste au seuil de 0,6, aucun faux. Qwen3.5 4B, qui trouvait seul le bon skill dans 12 cas sur 23, le trouve dans 16 avec le routage. `MM_EVAL=1 MM_DECIDER=<fichier> go test ./internal/eval -run Decider -v` mesure un décideur seul.
22+
23+### Routage des outils (#127)
24+
25+- **`toolRouting: {decider, dropBelow, timeout, groups}`** : avant chaque tour, une question oui/non par groupe d'outils (« cette demande a-t-elle besoin de lancer des commandes shell ? »). Un groupe que le décideur écarte (sous `dropBelow`, 0,2 par défaut) n'est pas proposé au modèle pour ce tour. Un outil qui n'appartient à aucun groupe est toujours proposé, et toute erreur propose tous les outils.
26+- Il ne fait que retirer : les outils de l'agent restent la limite haute. Une notice dit ce qui a été retiré : `🧰 tools: dropped web (0.08)`.
27+- Sur huit demandes essayées, chaque groupe dont une demande avait besoin a obtenu 0,37 ou plus, et chaque note sous 0,2 est allée à un groupe inutile pour la demande. Pas encore mesuré : si une liste d'outils plus courte fait mieux choisir un petit modèle. Une liste d'outils qui change d'un tour à l'autre ne peut pas réutiliser le cache de prompt du serveur.
28+
29+### Un hook peut approuver un appel d'outil : `allow` (#126)
30+
31+- Un hook `preToolCall` peut maintenant répondre `{"action": "allow"}` : l'appel s'exécute sans vous demander, même avec `yolo: false`. Un hook peut ainsi sauter la question de confirmation pour les appels qu'il sait sans risque. Un `deny` d'un hook suivant l'emporte toujours, un *jamais* que vous avez donné refuse toujours, et un agent interrogé par un autre ignore `allow`.
32+- `demos/decision-commands/` s'en sert avec un décideur : les commandes en lecture seule (`ls`, `cat`, `git status`…, 0,94 à 0,95 « read-only ») s'exécutent tout de suite ; `rm -rf /` et `dd` sont refusées ; tout le reste vous est demandé comme avant. Environ 0,4 s par commande.
33+
34+### `/shell` dans la fenêtre (#122)
35+
36+- **`/shell`** passe le terminal à votre shell (`$SHELL`, `%COMSPEC%` sous Windows) dans le dossier de la fenêtre ; `exit` ramène la conversation telle que vous l'avez laissée, avec `🐚 Back from the shell.` (ou le statut de sortie).
37+- La commande marche pendant un tour : le tour continue, et sa réponse est là à votre retour. `Ctrl-C` dans le shell arrête ce que vous avez lancé, pas mm.
38+- Le prompt du shell commence par `(mm) ` (bash, zsh, fish, sh, cmd) : vous n'y tapez pas `exit` en croyant fermer un onglet. `MM_SHELL=1` est défini pour les thèmes de prompt qui redessinent tout le prompt.
39+
40+### `mm init` dit d'où vient chaque nombre (#121)
41+
42+- **Chaque nombre qui concerne le modèle porte un tag** :
43+ - `[measured]` : une démo de ce dépôt a tourné avec cette valeur ;
44+ - `[card]` : recopié de la carte du modèle ou du GGUF ;
45+ - `[server]` : lu sur le serveur ;
46+ - `[guide]` : la ligne machine du guide des réglages ;
47+ - `[rule]` : une règle empirique.
48+
49+ Après un changement de modèle ou de quantification, le tag dit quoi refaire. L'en-tête explique les tags que le fichier utilise.
50+- **L'en-tête garde ce que disait le serveur** sur le modèle (`model facts` : fenêtre native, échantillonnage du GGUF, interrupteur de raisonnement). Un commentaire au-dessus de `model:` liste les réglages choisis pour ce modèle, à refaire ensemble quand il change.
51+- **Sans `--base-url`**, le fichier garde en commentaire le `baseUrl` et le `fallback` par défaut du fournisseur, prêts à être décommentés.
52+- **La liste des modèles de la fenêtre `mm init`** montre des noms courts, comme l'en-tête de la fenêtre (`Qwen3.5-4B:Q4_K_M`). L'identifiant complet du modèle surligné s'affiche sous la liste.
53+
54+## Démos
55+
56+Sept nouvelles démos, chacune avec son décideur et un README (EN + FR) aux résultats mesurés. Toutes utilisent LiquidAI d1-3B comme décideur et, quand il y en a un, Qwen3.5 4B comme modèle de chat, sur llmman.
57+
58+- **`demos/decision-skills/`** : un décideur seul (`-p` affiche le JSON), et le routage des skills devant un agent de chat.
59+- **`demos/decision-only/`** : aucun modèle de chat. Un script trie une boîte de support (catégorie, urgence, données personnelles, auteur mécontent) : 6 catégories justes sur 6, environ 0,6 s par message.
60+- **`demos/decision-commands/`** : le tri des commandes avec l'action de hook `allow`.
61+- **`demos/decision-tools/`** : le routage des outils sur un petit projet Go.
62+- **`demos/decision-injection/`** (#132) : un hook avertit le modèle quand un fichier ou une page web qu'il a lu contient des instructions adressées à un assistant IA. Le texte est contrôlé paragraphe par paragraphe : un commentaire caché obtenait 0,44 dans le README entier, 0,93 seul.
63+- **`demos/decision-tool-errors/`** (#133) : un hook ajoute une note sous une sortie de commande qui montre une erreur, même quand le code de sortie vaut 0.
64+- **`demos/decision-ask-check/`** (#134) : un hook avertit l'agent qui interroge quand la réponse d'un autre agent est hors sujet.
65+
66+Les trois démos de contrôle rapportent honnêtement ce que les avertissements ont changé : sur leurs cas évidents, Qwen3.5 4B voyait souvent le problème tout seul.
67+
68+## Documentation
69+
70+- **Nouveaux guides pratiques** (EN + FR) :
71+ - [Interroger un modèle de décision](../docs/fr/how-to/ask-a-decision-model.md)
72+ - [Router les skills avec un modèle de décision](../docs/fr/how-to/route-skills-with-a-decision-model.md)
73+ - [Router les outils avec un modèle de décision](../docs/fr/how-to/route-tools-with-a-decision-model.md)
74+ - [Trier les commandes avec un modèle de décision](../docs/fr/how-to/triage-commands-with-a-decision-model.md)
75+ - [Contrôler des sorties avec un modèle de décision](../docs/fr/how-to/check-outputs-with-a-decision-model.md)
76+- **Nouvelle explication** : [Modèles de décision](../docs/fr/explanation/decision-models.md) — pourquoi un décideur est un agent et pas un outil, pourquoi le routage ne fait qu'ajouter une ligne et le routage d'outils ne fait que retirer, ce qui a été mesuré, ce qui a été écarté.
77+- **Nouveaux guides d'installation** : [Linux](../INSTALL.LINUX.md) et [Windows](../INSTALL.WINDOWS.md), à côté de celui pour macOS.
78+- **Mis à jour** :
79+ - les références de la configuration (`decision`, `skillRouting`, `toolRouting`), des hooks (`allow`), de la ligne de commande (`-p` avec un décideur, le fichier de `mm init`) et des commandes slash (`/shell`) ;
80+ - les guides du mode fenêtre (`/shell`), de la création d'un agent, de la confirmation des appels d'outils et de la mesure du routage des skills ;
81+ - l'explication de l'architecture et le diagramme des paquets.
82+
83+## Mise à jour
84+
85+- **Aucun changement incompatible dans la configuration.** Nouvelles clés : `decision`, `skillRouting`, `toolRouting` ; une nouvelle action de hook, `allow` (`preToolCall` uniquement). Un agent qui ne s'en sert pas se comporte comme avant.
86+- **Un fichier de décideur a besoin de `skillsDir: no-skills`** quand il peut être lancé depuis un projet qui a un dossier `skills/`. Avec `skillsDir: ""`, il lit `./skills`, déclare `read_skill` et refuse de démarrer. Les décideurs des démos le fixent.
87+- **La bannière de démarrage** gagne les colonnes ` | routing: …` et ` | tool routing: …` quand ils sont configurés ; la colonne `tools:` d'un décideur affiche `none (decision model: N question(s))`.
88+- **`mm init` écrit un en-tête plus long** (les faits du serveur et la légende des tags) et tague ses commentaires ; les fichiers écrits par v0.9.0 se chargent tels quels.
new file mode 100644
@@ -0,0 +1,88 @@
1+# mini-me v1.0.0
2+
3+*[English version](v1.0.0.en.md)*
4+
5+De petits modèles de décision au service de l'agent : ils choisissent le skill, réduisent la liste des outils, trient les commandes et contrôlent ce que l'agent lit. S'y ajoutent votre shell à une commande de la fenêtre, et des fichiers `mm init` qui disent d'où vient chaque nombre.
6+
7+## Nouveautés
8+
9+### Modèles de décision (#123)
10+
11+Un modèle de décision n'écrit pas de texte : il répond à des questions sur un texte (un choix parmi des options, une probabilité oui/non, une note), en une fraction de seconde. mm les interroge par `POST /v1/systemone`, que servent llama-server, llmman et Ollama.
12+
13+- **Un décideur est un fichier d'agent avec un bloc `decision:`** qui liste ses questions (`choice`, `noul`, `score`). `mm -config agent.decider.yaml -p "<texte>"` affiche sur stdout la réponse JSON du serveur, pour un script ou un hook. Dans le mode ligne, la fenêtre et un éditeur (`/ask-<nom>`, `mm --ask`), il répond par une ligne par question, suivie du JSON. Un décideur n'a ni outils, ni historique, ni hooks ; mm refuse d'en démarrer un qui déclare un outil.
14+- **Serveurs pris en charge** : llama-server (`llamacpp`), llmman, Ollama, et `openai` quand le serveur sert la route. Docker Model Runner ne sert pas de modèles de décision, et mm le dit au démarrage.
15+- **Essayé avec LiquidAI d1-3B** (`hf.co/LiquidAI/d1-3B-GGUF:Q4_K_M`) : les mêmes réponses, à 1e-4 près, sur llama-server, llmman et Ollama. Environ 0,2 à 0,5 s par appel une fois le modèle chargé, environ 13 s pour le premier appel. Le decision-4b d'evalengine est refusé par llmman et Ollama sur cette route (ticket 125, milestone v1.0.1).
16+
17+### Routage des skills (#123)
18+
19+- **`skillRouting: {decider, minConfidence, timeout}`** : avant chaque question, le décideur choisit le skill dont elle a besoin. Quand il est assez sûr (0,6 par défaut), mm ajoute à la question la ligne `$nom` du skill, comme si vous l'aviez tapée. Une notice dit ce qui s'est passé : `🧭 $bg-jobs (0.84)`, `🧭 no skill (…)` ou `🧭 skill routing skipped: …`.
20+- Il ne bloque jamais une question : un décideur lent (2 s par défaut), arrêté ou hésitant laisse la question telle quelle. Il fonctionne dans le mode ligne, la fenêtre et un éditeur ; `-p` ne route pas, de même qu'il ne développe pas `$skill`.
21+- Mesuré avec d1-3B sur llama-server, sur les 23 cas de l'éval de routage des skills : 15 routés juste au seuil de 0,6, aucun faux. Qwen3.5 4B, qui trouvait seul le bon skill dans 12 cas sur 23, le trouve dans 16 avec le routage. `MM_EVAL=1 MM_DECIDER=<fichier> go test ./internal/eval -run Decider -v` mesure un décideur seul.
22+
23+### Routage des outils (#127)
24+
25+- **`toolRouting: {decider, dropBelow, timeout, groups}`** : avant chaque tour, une question oui/non par groupe d'outils (« cette demande a-t-elle besoin de lancer des commandes shell ? »). Un groupe que le décideur écarte (sous `dropBelow`, 0,2 par défaut) n'est pas proposé au modèle pour ce tour. Un outil qui n'appartient à aucun groupe est toujours proposé, et toute erreur propose tous les outils.
26+- Il ne fait que retirer : les outils de l'agent restent la limite haute. Une notice dit ce qui a été retiré : `🧰 tools: dropped web (0.08)`.
27+- Sur huit demandes essayées, chaque groupe dont une demande avait besoin a obtenu 0,37 ou plus, et chaque note sous 0,2 est allée à un groupe inutile pour la demande. Pas encore mesuré : si une liste d'outils plus courte fait mieux choisir un petit modèle. Une liste d'outils qui change d'un tour à l'autre ne peut pas réutiliser le cache de prompt du serveur.
28+
29+### Un hook peut approuver un appel d'outil : `allow` (#126)
30+
31+- Un hook `preToolCall` peut maintenant répondre `{"action": "allow"}` : l'appel s'exécute sans vous demander, même avec `yolo: false`. Un hook peut ainsi sauter la question de confirmation pour les appels qu'il sait sans risque. Un `deny` d'un hook suivant l'emporte toujours, un *jamais* que vous avez donné refuse toujours, et un agent interrogé par un autre ignore `allow`.
32+- `demos/decision-commands/` s'en sert avec un décideur : les commandes en lecture seule (`ls`, `cat`, `git status`…, 0,94 à 0,95 « read-only ») s'exécutent tout de suite ; `rm -rf /` et `dd` sont refusées ; tout le reste vous est demandé comme avant. Environ 0,4 s par commande.
33+
34+### `/shell` dans la fenêtre (#122)
35+
36+- **`/shell`** passe le terminal à votre shell (`$SHELL`, `%COMSPEC%` sous Windows) dans le dossier de la fenêtre ; `exit` ramène la conversation telle que vous l'avez laissée, avec `🐚 Back from the shell.` (ou le statut de sortie).
37+- La commande marche pendant un tour : le tour continue, et sa réponse est là à votre retour. `Ctrl-C` dans le shell arrête ce que vous avez lancé, pas mm.
38+- Le prompt du shell commence par `(mm) ` (bash, zsh, fish, sh, cmd) : vous n'y tapez pas `exit` en croyant fermer un onglet. `MM_SHELL=1` est défini pour les thèmes de prompt qui redessinent tout le prompt.
39+
40+### `mm init` dit d'où vient chaque nombre (#121)
41+
42+- **Chaque nombre qui concerne le modèle porte un tag** :
43+ - `[measured]` : une démo de ce dépôt a tourné avec cette valeur ;
44+ - `[card]` : recopié de la carte du modèle ou du GGUF ;
45+ - `[server]` : lu sur le serveur ;
46+ - `[guide]` : la ligne machine du guide des réglages ;
47+ - `[rule]` : une règle empirique.
48+
49+ Après un changement de modèle ou de quantification, le tag dit quoi refaire. L'en-tête explique les tags que le fichier utilise.
50+- **L'en-tête garde ce que disait le serveur** sur le modèle (`model facts` : fenêtre native, échantillonnage du GGUF, interrupteur de raisonnement). Un commentaire au-dessus de `model:` liste les réglages choisis pour ce modèle, à refaire ensemble quand il change.
51+- **Sans `--base-url`**, le fichier garde en commentaire le `baseUrl` et le `fallback` par défaut du fournisseur, prêts à être décommentés.
52+- **La liste des modèles de la fenêtre `mm init`** montre des noms courts, comme l'en-tête de la fenêtre (`Qwen3.5-4B:Q4_K_M`). L'identifiant complet du modèle surligné s'affiche sous la liste.
53+
54+## Démos
55+
56+Sept nouvelles démos, chacune avec son décideur et un README (EN + FR) aux résultats mesurés. Toutes utilisent LiquidAI d1-3B comme décideur et, quand il y en a un, Qwen3.5 4B comme modèle de chat, sur llmman.
57+
58+- **`demos/decision-skills/`** : un décideur seul (`-p` affiche le JSON), et le routage des skills devant un agent de chat.
59+- **`demos/decision-only/`** : aucun modèle de chat. Un script trie une boîte de support (catégorie, urgence, données personnelles, auteur mécontent) : 6 catégories justes sur 6, environ 0,6 s par message.
60+- **`demos/decision-commands/`** : le tri des commandes avec l'action de hook `allow`.
61+- **`demos/decision-tools/`** : le routage des outils sur un petit projet Go.
62+- **`demos/decision-injection/`** (#132) : un hook avertit le modèle quand un fichier ou une page web qu'il a lu contient des instructions adressées à un assistant IA. Le texte est contrôlé paragraphe par paragraphe : un commentaire caché obtenait 0,44 dans le README entier, 0,93 seul.
63+- **`demos/decision-tool-errors/`** (#133) : un hook ajoute une note sous une sortie de commande qui montre une erreur, même quand le code de sortie vaut 0.
64+- **`demos/decision-ask-check/`** (#134) : un hook avertit l'agent qui interroge quand la réponse d'un autre agent est hors sujet.
65+
66+Les trois démos de contrôle rapportent honnêtement ce que les avertissements ont changé : sur leurs cas évidents, Qwen3.5 4B voyait souvent le problème tout seul.
67+
68+## Documentation
69+
70+- **Nouveaux guides pratiques** (EN + FR) :
71+ - [Interroger un modèle de décision](../docs/fr/how-to/ask-a-decision-model.md)
72+ - [Router les skills avec un modèle de décision](../docs/fr/how-to/route-skills-with-a-decision-model.md)
73+ - [Router les outils avec un modèle de décision](../docs/fr/how-to/route-tools-with-a-decision-model.md)
74+ - [Trier les commandes avec un modèle de décision](../docs/fr/how-to/triage-commands-with-a-decision-model.md)
75+ - [Contrôler des sorties avec un modèle de décision](../docs/fr/how-to/check-outputs-with-a-decision-model.md)
76+- **Nouvelle explication** : [Modèles de décision](../docs/fr/explanation/decision-models.md) — pourquoi un décideur est un agent et pas un outil, pourquoi le routage ne fait qu'ajouter une ligne et le routage d'outils ne fait que retirer, ce qui a été mesuré, ce qui a été écarté.
77+- **Nouveaux guides d'installation** : [Linux](../INSTALL.LINUX.md) et [Windows](../INSTALL.WINDOWS.md), à côté de celui pour macOS.
78+- **Mis à jour** :
79+ - les références de la configuration (`decision`, `skillRouting`, `toolRouting`), des hooks (`allow`), de la ligne de commande (`-p` avec un décideur, le fichier de `mm init`) et des commandes slash (`/shell`) ;
80+ - les guides du mode fenêtre (`/shell`), de la création d'un agent, de la confirmation des appels d'outils et de la mesure du routage des skills ;
81+ - l'explication de l'architecture et le diagramme des paquets.
82+
83+## Mise à jour
84+
85+- **Aucun changement incompatible dans la configuration.** Nouvelles clés : `decision`, `skillRouting`, `toolRouting` ; une nouvelle action de hook, `allow` (`preToolCall` uniquement). Un agent qui ne s'en sert pas se comporte comme avant.
86+- **Un fichier de décideur a besoin de `skillsDir: no-skills`** quand il peut être lancé depuis un projet qui a un dossier `skills/`. Avec `skillsDir: ""`, il lit `./skills`, déclare `read_skill` et refuse de démarrer. Les décideurs des démos le fixent.
87+- **La bannière de démarrage** gagne les colonnes ` | routing: …` et ` | tool routing: …` quand ils sont configurés ; la colonne `tools:` d'un décideur affiche `none (decision model: N question(s))`.
88+- **`mm init` écrit un en-tête plus long** (les faits du serveur et la légende des tags) et tague ses commentaires ; les fichiers écrits par v0.9.0 se chargent tels quels.