📦 Mini Me
697da3e parent: b84bab9 modified
.tickets/milestones.yaml +1 -1 | @@ -33,7 +33,7 @@ milestones: | ||
| 33 | 33 | - title: v0.9.0 |
| 34 | 34 | state: closed |
| 35 | 35 | - title: v1.0.0 |
| 36 | - state: open | |
| 36 | + state: closed | |
| 37 | 37 | dueOn: 2026-11-31 |
| 38 | 38 | - title: v1.0.1 |
| 39 | 39 | state: open |
| @@ -33,7 +33,7 @@ milestones: | |||
| 33 | - title: v0.9.0 | 33 | - title: v0.9.0 |
| 34 | state: closed | 34 | state: closed |
| 35 | - title: v1.0.0 | 35 | - title: v1.0.0 |
| 36 | - state: open | 36 | + state: closed |
| 37 | dueOn: 2026-11-31 | 37 | dueOn: 2026-11-31 |
| 38 | - title: v1.0.1 | 38 | - title: v1.0.1 |
| 39 | state: open | 39 | state: open |
modified
INSTALL.LINUX.md +1 -1 | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | ```bash |
| 4 | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=0.9.0 | |
| 5 | +VERSION=1.0.0 | |
| 6 | 6 | case "$(uname -m)" in |
| 7 | 7 | x86_64) ARCH=amd64 ;; |
| 8 | 8 | aarch64|arm64) ARCH=arm64 ;; |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ```bash | 3 | ```bash |
| 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=0.9.0 | 5 | +VERSION=1.0.0 |
| 6 | case "$(uname -m)" in | 6 | case "$(uname -m)" in |
| 7 | x86_64) ARCH=amd64 ;; | 7 | x86_64) ARCH=amd64 ;; |
| 8 | aarch64|arm64) ARCH=arm64 ;; | 8 | aarch64|arm64) ARCH=arm64 ;; |
modified
INSTALL.MACOS.md +1 -1 | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | ```bash |
| 4 | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=0.3.0 | |
| 5 | +VERSION=1.0.0 | |
| 6 | 6 | curl -fsSLO "https://rickub.com/bots-garden/mini-me/releases/download/v${VERSION}/mm-${VERSION}-darwin-arm64" |
| 7 | 7 | chmod +x ./mm-${VERSION}-darwin-arm64 |
| 8 | 8 | xattr -cr ./mm-${VERSION}-darwin-arm64 |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ```bash | 3 | ```bash |
| 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=0.3.0 | 5 | +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-arm64 | 7 | chmod +x ./mm-${VERSION}-darwin-arm64 |
| 8 | xattr -cr ./mm-${VERSION}-darwin-arm64 | 8 | xattr -cr ./mm-${VERSION}-darwin-arm64 |
modified
INSTALL.WINDOWS.md +1 -1 | @@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed): | ||
| 4 | 4 | |
| 5 | 5 | ```powershell |
| 6 | 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 7 | -$Version = "0.9.0" | |
| 7 | +$Version = "1.0.0" | |
| 8 | 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } |
| 9 | 9 | $Asset = "mm-$Version-windows-$Arch.exe" |
| 10 | 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" |
| @@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed): | |||
| 4 | 4 | ||
| 5 | ```powershell | 5 | ```powershell |
| 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 7 | -$Version = "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 | ||
| 4 | 4 | |
| 5 | 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 | 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 | 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 | 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) | |
| @@ -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. | ||