📦 Mini Me
f5170d0 parent: 99e21b0 modified
.tickets/issues/0154-improve-code-edition.yaml +2 -1 | @@ -6,8 +6,9 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-25T09:48:22.741Z |
| 9 | -updatedAt: 2026-10-25T09:48:36.954Z | |
| 9 | +updatedAt: 2026-10-26T04:54:43.499Z | |
| 10 | 10 | labels: [] |
| 11 | +milestone: v2.0.0 | |
| 11 | 12 | epic: Debug |
| 12 | 13 | body: | |
| 13 | 14 | How to fix: |
| @@ -6,8 +6,9 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-25T09:48:22.741Z | 8 | createdAt: 2026-10-25T09:48:22.741Z |
| 9 | -updatedAt: 2026-10-25T09:48:36.954Z | 9 | +updatedAt: 2026-10-26T04:54:43.499Z |
| 10 | labels: [] | 10 | labels: [] |
| 11 | +milestone: v2.0.0 | ||
| 11 | epic: Debug | 12 | epic: Debug |
| 12 | body: | | 13 | body: | |
| 13 | How to fix: | 14 | How to fix: |
modified
.tickets/issues/0159-list-use-cases-for-mini-me.yaml +121 -5 | @@ -6,9 +6,125 @@ author: | ||
| 6 | 6 | name: k33g |
| 7 | 7 | email: ph.charriere@gmail.com |
| 8 | 8 | createdAt: 2026-10-25T18:27:48.558Z |
| 9 | -updatedAt: 2026-10-25T18:27:48.558Z | |
| 10 | -labels: [] | |
| 11 | -milestone: v1.0.1 | |
| 12 | -body: "" | |
| 13 | -tasks: [] | |
| 9 | +updatedAt: 2026-10-26T04:43:30.769Z | |
| 10 | +labels: | |
| 11 | + - documentation | |
| 12 | +milestone: v2.0.0 | |
| 13 | +epic: Ideas | |
| 14 | +body: | | |
| 15 | + Use cases where Mini Me (mm) is a good fit, written from what it already does (each "Demo" is a folder under `demos/` that runs today). What they share: a **local, small model** (llmman, Ollama, llama.cpp, Docker Model Runner), **one YAML file per agent**, and the same agent usable in the terminal, the window (`mm -tui`), an editor (ACP, Zed), or a script (`mm -p`, `mm --ask`). | |
| 16 | + | |
| 17 | + ## 1. Coding on your machine, code never leaves it | |
| 18 | + | |
| 19 | + | Use case | What mm brings | Demo | | |
| 20 | + |---|---|---| | |
| 21 | + | Coding assistant for confidential or air-gapped code | Local models only, bash and file tools, AGENTS.md for the project's rules | `codex-style`, `gemini-style`, `qwen-style`, `agents-md-file` | | |
| 22 | + | A specialist for one stack, on a 32 GB laptop | A prompt and skills tuned to one model and one stack | `little-coder` (Go + htmx) | | |
| 23 | + | Step-by-step project work the model does not lose track of | The `plan` tool, shown after each step | `plans` | | |
| 24 | + | Starting a new project from a few questions | `ask_user` forms, then a confirmed plan | `project-wizard` | | |
| 25 | + | Coding assistant inside the editor | ACP: Zed runs mm as its agent (`mm -acp`), with its own permission dialog | `codex-style`, `gemini-style`, `qwen-style` (`mm -acp -config …`) | | |
| 26 | + | Remembering past decisions of a project | Sessions + `/memory` search over earlier conversations | `memory-search` | | |
| 27 | + | |
| 28 | + ## 2. Teams of small agents instead of one big model | |
| 29 | + | |
| 30 | + | Use case | What mm brings | Demo | | |
| 31 | + |---|---|---| | |
| 32 | + | Lead / coder / reviewer on one local model | `mmConfigs` + `ask_agent`, each agent its own file and prompt | `blog-team`, `team`, `llmman` | | |
| 33 | + | Several specialists on a machine that holds one model at a time | `mmConfigs.<name>.unloadModels` (or hooks): models take turns in memory | `coding-helpers-unload-option`, `unload-models` | | |
| 34 | + | Interactive documentation for several languages | A router agent + one specialist per language | `coding-helpers` | | |
| 35 | + | A game or a story with several characters | Coordinator + specialists | `dungeon`, `decision-dnd` | | |
| 36 | + | |
| 37 | + ## 3. Answers grounded in your own documents | |
| 38 | + | |
| 39 | + | Use case | What mm brings | Demo | | |
| 40 | + |---|---|---| | |
| 41 | + | Q&A on a project's or a library's docs, without RAG infrastructure | `docSearch` over Markdown folders, `/docs` | `docs-search` (Ratatui) | | |
| 42 | + | Tutorials and how-tos written on demand, saved only when asked | A prompt tuned for teaching; `save_answer` writes the file only on request | `programming-answers`, `programming-answers-2` (`save_answer`) | | |
| 43 | + | Press review on any topic | A news-search tool from an MCP server (`ddg_search_news`) | `news-roundup` | | |
| 44 | + | Translation of texts and docs (EN ↔ FR), e.g. keeping a bilingual doc in sync | A single-purpose agent, `mm -p` in a script | `translator` | | |
| 45 | + | |
| 46 | + ## 4. Decisions, triage and checks with a decision model (no text generation) | |
| 47 | + | |
| 48 | + | Use case | What mm brings | Demo | | |
| 49 | + |---|---|---| | |
| 50 | + | Support-ticket or issue triage (category, urgency, team) | A decider answers typed questions in one pass, JSON out of `mm -p` | `decision-only`, `decision-questions` | | |
| 51 | + | Moderation of comments, reviews | Same, with `noul` / `choice` / `score` questions | `decision-moderation`, `decision-reviews` | | |
| 52 | + | Command risk check before a shell command runs | A `preToolCall` hook asks a decider | `decision-commands` | | |
| 53 | + | Prompt-injection check on files and web pages read | A `postToolCall` hook | `decision-injection` | | |
| 54 | + | Picking the right skill or the right tools for a small model | `skillRouting`, `toolRouting` | `decision-skills`, `decision-tools` | | |
| 55 | + | Safety guard on every question | Guard models (Granite Guardian…) | `guard`, `guards` | | |
| 56 | + | |
| 57 | + ## 5. Automation: mm as a command in scripts and pipelines | |
| 58 | + | |
| 59 | + | Use case | What mm brings | Demo | | |
| 60 | + |---|---|---| | |
| 61 | + | Extracting structured data (JSON) from text | `structuredOutput` (Go types), `mm -p` prints the JSON | `structured-output`, `structured-output-pizza` | | |
| 62 | + | Operations assistant that can only do what you allow | Declared `tools:` (scripts or WebAssembly), no bash, `yolo: false` | `declared-tools`, `wasm-tools` | | |
| 63 | + | Policy around an agent (logging, blocking, rewriting) | Hooks, also as sandboxed WebAssembly | `hooks`, `hooks-ask`, `wasm-hooks` | | |
| 64 | + | A machine set up in one command | `autoPull`: missing models downloaded at start-up | `auto-pull` | | |
| 65 | + | |
| 66 | + ## 6. Learning and evaluating small models | |
| 67 | + | |
| 68 | + | Use case | What mm brings | Demo | | |
| 69 | + |---|---|---| | |
| 70 | + | Seeing when and how a small model struggles | Struggle signals (loops, broken calls, stalls, failures in a row) | `struggle-signals` | | |
| 71 | + | Comparing models on the same agent | One prompt adapted per model family, `mm init` presets | `qwen-style`, `codex-style`, `gemini-style` | | |
| 72 | + | Teaching how a coding agent works | A small, readable Go code base; every mechanism has a demo and an explanation page | `docs/*/explanation/` | | |
| 73 | + | |
| 74 | + ## Use cases without a demo yet (see tasks) | |
| 75 | + | |
| 76 | + - **Commit messages and changelogs in CI**: `git diff | mm -p` with a structured output (type, scope, summary) — runs on a CI runner with a small model. | |
| 77 | + - **Pre-commit review**: a git hook runs a reviewer agent with `mm -p` and a decider that says block / warn / pass. | |
| 78 | + - **Log triage on a server**: an agent with read-only declared tools (`journalctl`, `grep`) that summarises what failed and why, offline. | |
| 79 | + - **Issue labelling for IssueSpec tickets** (`.tickets/issues/*.yaml`): a decider proposes labels and a milestone for each new ticket. | |
| 80 | + - **Docs translation in the release process**: the translator agent checks that each `docs/en` page has an up-to-date `docs/fr` twin. | |
| 81 | +tasks: | |
| 82 | + - id: 1 | |
| 83 | + title: "Demo: commit messages / changelog in CI (mm -p + structuredOutput)" | |
| 84 | + state: open | |
| 85 | + priority: none | |
| 86 | + author: | |
| 87 | + name: k33g | |
| 88 | + email: ph.charriere@gmail.com | |
| 89 | + createdAt: 2026-10-26T03:00:00.000Z | |
| 90 | + - id: 2 | |
| 91 | + title: "Demo: pre-commit review (reviewer agent + decider block / warn / pass)" | |
| 92 | + state: open | |
| 93 | + priority: none | |
| 94 | + author: | |
| 95 | + name: k33g | |
| 96 | + email: ph.charriere@gmail.com | |
| 97 | + createdAt: 2026-10-26T03:00:00.000Z | |
| 98 | + - id: 3 | |
| 99 | + title: "Demo: log triage with read-only declared tools" | |
| 100 | + state: open | |
| 101 | + priority: none | |
| 102 | + author: | |
| 103 | + name: k33g | |
| 104 | + email: ph.charriere@gmail.com | |
| 105 | + createdAt: 2026-10-26T03:00:00.000Z | |
| 106 | + - id: 4 | |
| 107 | + title: "Demo: IssueSpec ticket labelling with a decider" | |
| 108 | + state: open | |
| 109 | + priority: none | |
| 110 | + author: | |
| 111 | + name: k33g | |
| 112 | + email: ph.charriere@gmail.com | |
| 113 | + createdAt: 2026-10-26T03:00:00.000Z | |
| 114 | + - id: 5 | |
| 115 | + title: "Demo: docs translation check (docs/en vs docs/fr)" | |
| 116 | + state: open | |
| 117 | + priority: none | |
| 118 | + author: | |
| 119 | + name: k33g | |
| 120 | + email: ph.charriere@gmail.com | |
| 121 | + createdAt: 2026-10-26T03:00:00.000Z | |
| 122 | + - id: 6 | |
| 123 | + title: "Docs: a use-case page (EN + FR) built from this list, linking the demos" | |
| 124 | + state: open | |
| 125 | + priority: none | |
| 126 | + author: | |
| 127 | + name: k33g | |
| 128 | + email: ph.charriere@gmail.com | |
| 129 | + createdAt: 2026-10-26T03:00:00.000Z | |
| 14 | 130 | comments: [] |
| @@ -6,9 +6,125 @@ author: | |||
| 6 | name: k33g | 6 | name: k33g |
| 7 | email: ph.charriere@gmail.com | 7 | email: ph.charriere@gmail.com |
| 8 | createdAt: 2026-10-25T18:27:48.558Z | 8 | createdAt: 2026-10-25T18:27:48.558Z |
| 9 | -updatedAt: 2026-10-25T18:27:48.558Z | 9 | +updatedAt: 2026-10-26T04:43:30.769Z |
| 10 | -labels: [] | 10 | +labels: |
| 11 | -milestone: v1.0.1 | 11 | + - documentation |
| 12 | -body: "" | 12 | +milestone: v2.0.0 |
| 13 | -tasks: [] | 13 | +epic: Ideas |
| 14 | +body: | | ||
| 15 | + Use cases where Mini Me (mm) is a good fit, written from what it already does (each "Demo" is a folder under `demos/` that runs today). What they share: a **local, small model** (llmman, Ollama, llama.cpp, Docker Model Runner), **one YAML file per agent**, and the same agent usable in the terminal, the window (`mm -tui`), an editor (ACP, Zed), or a script (`mm -p`, `mm --ask`). | ||
| 16 | + | ||
| 17 | + ## 1. Coding on your machine, code never leaves it | ||
| 18 | + | ||
| 19 | + | Use case | What mm brings | Demo | | ||
| 20 | + |---|---|---| | ||
| 21 | + | Coding assistant for confidential or air-gapped code | Local models only, bash and file tools, AGENTS.md for the project's rules | `codex-style`, `gemini-style`, `qwen-style`, `agents-md-file` | | ||
| 22 | + | A specialist for one stack, on a 32 GB laptop | A prompt and skills tuned to one model and one stack | `little-coder` (Go + htmx) | | ||
| 23 | + | Step-by-step project work the model does not lose track of | The `plan` tool, shown after each step | `plans` | | ||
| 24 | + | Starting a new project from a few questions | `ask_user` forms, then a confirmed plan | `project-wizard` | | ||
| 25 | + | Coding assistant inside the editor | ACP: Zed runs mm as its agent (`mm -acp`), with its own permission dialog | `codex-style`, `gemini-style`, `qwen-style` (`mm -acp -config …`) | | ||
| 26 | + | Remembering past decisions of a project | Sessions + `/memory` search over earlier conversations | `memory-search` | | ||
| 27 | + | ||
| 28 | + ## 2. Teams of small agents instead of one big model | ||
| 29 | + | ||
| 30 | + | Use case | What mm brings | Demo | | ||
| 31 | + |---|---|---| | ||
| 32 | + | Lead / coder / reviewer on one local model | `mmConfigs` + `ask_agent`, each agent its own file and prompt | `blog-team`, `team`, `llmman` | | ||
| 33 | + | Several specialists on a machine that holds one model at a time | `mmConfigs.<name>.unloadModels` (or hooks): models take turns in memory | `coding-helpers-unload-option`, `unload-models` | | ||
| 34 | + | Interactive documentation for several languages | A router agent + one specialist per language | `coding-helpers` | | ||
| 35 | + | A game or a story with several characters | Coordinator + specialists | `dungeon`, `decision-dnd` | | ||
| 36 | + | ||
| 37 | + ## 3. Answers grounded in your own documents | ||
| 38 | + | ||
| 39 | + | Use case | What mm brings | Demo | | ||
| 40 | + |---|---|---| | ||
| 41 | + | Q&A on a project's or a library's docs, without RAG infrastructure | `docSearch` over Markdown folders, `/docs` | `docs-search` (Ratatui) | | ||
| 42 | + | Tutorials and how-tos written on demand, saved only when asked | A prompt tuned for teaching; `save_answer` writes the file only on request | `programming-answers`, `programming-answers-2` (`save_answer`) | | ||
| 43 | + | Press review on any topic | A news-search tool from an MCP server (`ddg_search_news`) | `news-roundup` | | ||
| 44 | + | Translation of texts and docs (EN ↔ FR), e.g. keeping a bilingual doc in sync | A single-purpose agent, `mm -p` in a script | `translator` | | ||
| 45 | + | ||
| 46 | + ## 4. Decisions, triage and checks with a decision model (no text generation) | ||
| 47 | + | ||
| 48 | + | Use case | What mm brings | Demo | | ||
| 49 | + |---|---|---| | ||
| 50 | + | Support-ticket or issue triage (category, urgency, team) | A decider answers typed questions in one pass, JSON out of `mm -p` | `decision-only`, `decision-questions` | | ||
| 51 | + | Moderation of comments, reviews | Same, with `noul` / `choice` / `score` questions | `decision-moderation`, `decision-reviews` | | ||
| 52 | + | Command risk check before a shell command runs | A `preToolCall` hook asks a decider | `decision-commands` | | ||
| 53 | + | Prompt-injection check on files and web pages read | A `postToolCall` hook | `decision-injection` | | ||
| 54 | + | Picking the right skill or the right tools for a small model | `skillRouting`, `toolRouting` | `decision-skills`, `decision-tools` | | ||
| 55 | + | Safety guard on every question | Guard models (Granite Guardian…) | `guard`, `guards` | | ||
| 56 | + | ||
| 57 | + ## 5. Automation: mm as a command in scripts and pipelines | ||
| 58 | + | ||
| 59 | + | Use case | What mm brings | Demo | | ||
| 60 | + |---|---|---| | ||
| 61 | + | Extracting structured data (JSON) from text | `structuredOutput` (Go types), `mm -p` prints the JSON | `structured-output`, `structured-output-pizza` | | ||
| 62 | + | Operations assistant that can only do what you allow | Declared `tools:` (scripts or WebAssembly), no bash, `yolo: false` | `declared-tools`, `wasm-tools` | | ||
| 63 | + | Policy around an agent (logging, blocking, rewriting) | Hooks, also as sandboxed WebAssembly | `hooks`, `hooks-ask`, `wasm-hooks` | | ||
| 64 | + | A machine set up in one command | `autoPull`: missing models downloaded at start-up | `auto-pull` | | ||
| 65 | + | ||
| 66 | + ## 6. Learning and evaluating small models | ||
| 67 | + | ||
| 68 | + | Use case | What mm brings | Demo | | ||
| 69 | + |---|---|---| | ||
| 70 | + | Seeing when and how a small model struggles | Struggle signals (loops, broken calls, stalls, failures in a row) | `struggle-signals` | | ||
| 71 | + | Comparing models on the same agent | One prompt adapted per model family, `mm init` presets | `qwen-style`, `codex-style`, `gemini-style` | | ||
| 72 | + | Teaching how a coding agent works | A small, readable Go code base; every mechanism has a demo and an explanation page | `docs/*/explanation/` | | ||
| 73 | + | ||
| 74 | + ## Use cases without a demo yet (see tasks) | ||
| 75 | + | ||
| 76 | + - **Commit messages and changelogs in CI**: `git diff | mm -p` with a structured output (type, scope, summary) — runs on a CI runner with a small model. | ||
| 77 | + - **Pre-commit review**: a git hook runs a reviewer agent with `mm -p` and a decider that says block / warn / pass. | ||
| 78 | + - **Log triage on a server**: an agent with read-only declared tools (`journalctl`, `grep`) that summarises what failed and why, offline. | ||
| 79 | + - **Issue labelling for IssueSpec tickets** (`.tickets/issues/*.yaml`): a decider proposes labels and a milestone for each new ticket. | ||
| 80 | + - **Docs translation in the release process**: the translator agent checks that each `docs/en` page has an up-to-date `docs/fr` twin. | ||
| 81 | +tasks: | ||
| 82 | + - id: 1 | ||
| 83 | + title: "Demo: commit messages / changelog in CI (mm -p + structuredOutput)" | ||
| 84 | + state: open | ||
| 85 | + priority: none | ||
| 86 | + author: | ||
| 87 | + name: k33g | ||
| 88 | + email: ph.charriere@gmail.com | ||
| 89 | + createdAt: 2026-10-26T03:00:00.000Z | ||
| 90 | + - id: 2 | ||
| 91 | + title: "Demo: pre-commit review (reviewer agent + decider block / warn / pass)" | ||
| 92 | + state: open | ||
| 93 | + priority: none | ||
| 94 | + author: | ||
| 95 | + name: k33g | ||
| 96 | + email: ph.charriere@gmail.com | ||
| 97 | + createdAt: 2026-10-26T03:00:00.000Z | ||
| 98 | + - id: 3 | ||
| 99 | + title: "Demo: log triage with read-only declared tools" | ||
| 100 | + state: open | ||
| 101 | + priority: none | ||
| 102 | + author: | ||
| 103 | + name: k33g | ||
| 104 | + email: ph.charriere@gmail.com | ||
| 105 | + createdAt: 2026-10-26T03:00:00.000Z | ||
| 106 | + - id: 4 | ||
| 107 | + title: "Demo: IssueSpec ticket labelling with a decider" | ||
| 108 | + state: open | ||
| 109 | + priority: none | ||
| 110 | + author: | ||
| 111 | + name: k33g | ||
| 112 | + email: ph.charriere@gmail.com | ||
| 113 | + createdAt: 2026-10-26T03:00:00.000Z | ||
| 114 | + - id: 5 | ||
| 115 | + title: "Demo: docs translation check (docs/en vs docs/fr)" | ||
| 116 | + state: open | ||
| 117 | + priority: none | ||
| 118 | + author: | ||
| 119 | + name: k33g | ||
| 120 | + email: ph.charriere@gmail.com | ||
| 121 | + createdAt: 2026-10-26T03:00:00.000Z | ||
| 122 | + - id: 6 | ||
| 123 | + title: "Docs: a use-case page (EN + FR) built from this list, linking the demos" | ||
| 124 | + state: open | ||
| 125 | + priority: none | ||
| 126 | + author: | ||
| 127 | + name: k33g | ||
| 128 | + email: ph.charriere@gmail.com | ||
| 129 | + createdAt: 2026-10-26T03:00:00.000Z | ||
| 14 | comments: [] | 130 | comments: [] |
added
.tickets/issues/0165-how-to-unload-models-when-using-decision-models.yaml +16 -0 | new file mode 100644 | ||
| @@ -0,0 +1,16 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 165 | |
| 3 | +title: How to unload models when using decision models | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-10-26T05:00:19.639Z | |
| 9 | +updatedAt: 2026-10-26T05:01:18.763Z | |
| 10 | +labels: | |
| 11 | + - decision models | |
| 12 | +milestone: v1.0.2 | |
| 13 | +epic: Decision models | |
| 14 | +body: "" | |
| 15 | +tasks: [] | |
| 16 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 165 | ||
| 3 | +title: How to unload models when using decision models | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-10-26T05:00:19.639Z | ||
| 9 | +updatedAt: 2026-10-26T05:01:18.763Z | ||
| 10 | +labels: | ||
| 11 | + - decision models | ||
| 12 | +milestone: v1.0.2 | ||
| 13 | +epic: Decision models | ||
| 14 | +body: "" | ||
| 15 | +tasks: [] | ||
| 16 | +comments: [] | ||
added
.tickets/issues/0166-think-on-how-to-simplify-usage-of-decision-model.yaml +16 -0 | new file mode 100644 | ||
| @@ -0,0 +1,16 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 166 | |
| 3 | +title: Think on how to simplify usage of decision model + chat model (like for unload chat model) | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-10-26T05:01:03.034Z | |
| 9 | +updatedAt: 2026-10-26T05:01:40.912Z | |
| 10 | +labels: | |
| 11 | + - decision models | |
| 12 | +milestone: v1.0.2 | |
| 13 | +epic: Decision models | |
| 14 | +body: "" | |
| 15 | +tasks: [] | |
| 16 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 166 | ||
| 3 | +title: Think on how to simplify usage of decision model + chat model (like for unload chat model) | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-10-26T05:01:03.034Z | ||
| 9 | +updatedAt: 2026-10-26T05:01:40.912Z | ||
| 10 | +labels: | ||
| 11 | + - decision models | ||
| 12 | +milestone: v1.0.2 | ||
| 13 | +epic: Decision models | ||
| 14 | +body: "" | ||
| 15 | +tasks: [] | ||
| 16 | +comments: [] | ||
modified
.tickets/labels.yaml +2 -0 | @@ -48,3 +48,5 @@ labels: | ||
| 48 | 48 | color: "#1d76db" |
| 49 | 49 | - name: wasm |
| 50 | 50 | color: "#5319e7" |
| 51 | + - name: decision models | |
| 52 | + color: "#f9d0c4" | |
| @@ -48,3 +48,5 @@ labels: | |||
| 48 | color: "#1d76db" | 48 | color: "#1d76db" |
| 49 | - name: wasm | 49 | - name: wasm |
| 50 | color: "#5319e7" | 50 | color: "#5319e7" |
| 51 | + - name: decision models | ||
| 52 | + color: "#f9d0c4" | ||
modified
.tickets/milestones.yaml +6 -1 | @@ -36,6 +36,11 @@ milestones: | ||
| 36 | 36 | state: closed |
| 37 | 37 | dueOn: 2026-11-31 |
| 38 | 38 | - title: v1.0.1 |
| 39 | - state: open | |
| 39 | + state: closed | |
| 40 | + dueOn: 2026-10-26 | |
| 40 | 41 | - title: v2.0.0 |
| 41 | 42 | state: open |
| 43 | + dueOn: 2026-11-29 | |
| 44 | + - title: v1.0.2 | |
| 45 | + state: open | |
| 46 | + dueOn: 2026-10-31 | |
| @@ -36,6 +36,11 @@ milestones: | |||
| 36 | state: closed | 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: closed |
| 40 | + dueOn: 2026-10-26 | ||
| 40 | - title: v2.0.0 | 41 | - title: v2.0.0 |
| 41 | state: open | 42 | state: open |
| 43 | + dueOn: 2026-11-29 | ||
| 44 | + - title: v1.0.2 | ||
| 45 | + state: open | ||
| 46 | + dueOn: 2026-10-31 | ||
modified
INSTALL.LINUX.md +1 -1 | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | |
| 3 | 3 | ```bash |
| 4 | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=1.0.0 | |
| 5 | +VERSION=1.0.1 | |
| 6 | 6 | case "$(uname -m)" in |
| 7 | 7 | x86_64) ARCH=amd64 ;; |
| 8 | 8 | aarch64|arm64) ARCH=arm64 ;; |
| @@ -2,7 +2,7 @@ | |||
| 2 | 2 | ||
| 3 | ```bash | 3 | ```bash |
| 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 4 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 5 | -VERSION=1.0.0 | 5 | +VERSION=1.0.1 |
| 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=1.0.0 | |
| 5 | +VERSION=1.0.1 | |
| 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=1.0.0 | 5 | +VERSION=1.0.1 |
| 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 = "1.0.0" | |
| 7 | +$Version = "1.0.1" | |
| 8 | 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } |
| 9 | 9 | $Asset = "mm-$Version-windows-$Arch.exe" |
| 10 | 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" |
| @@ -4,7 +4,7 @@ In PowerShell (no administrator rights needed): | |||
| 4 | 4 | ||
| 5 | ```powershell | 5 | ```powershell |
| 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases | 6 | # download the binary release in https://rickub.com/bots-garden/mini-me/releases |
| 7 | -$Version = "1.0.0" | 7 | +$Version = "1.0.1" |
| 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } | 8 | $Arch = if ($env:PROCESSOR_ARCHITECTURE -eq "ARM64") { "arm64" } else { "amd64" } |
| 9 | $Asset = "mm-$Version-windows-$Arch.exe" | 9 | $Asset = "mm-$Version-windows-$Arch.exe" |
| 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" | 10 | $Base = "https://rickub.com/bots-garden/mini-me/releases/download/v$Version" |
modified
release-notes/README.md +2 -1 | @@ -4,7 +4,8 @@ One note per tag, in English (`.en.md`) and French (`.fr.md`). Rebuilt on 2026-1 | ||
| 4 | 4 | |
| 5 | 5 | | Version | Date | Summary | | |
| 6 | 6 | |---|---|---|---| |
| 7 | -| [v1.0.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) | | |
| 7 | +| [v1.0.1](v1.0.1.en.md) | not tagged yet | Messages typed during an answer wait their turn, the window shows when the model struggles and how long an answer takes, models can be downloaded at start-up and take turns in memory during a hand-off, and deciders need no boilerplate. | [FR](v1.0.1.fr.md) | | |
| 8 | +| [v1.0.0](v1.0.0.en.md) | 2026-10-22 | 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 | 9 | | [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) | |
| 9 | 10 | | [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) | |
| 10 | 11 | | [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) | |
| @@ -4,7 +4,8 @@ One note per tag, in English (`.en.md`) and French (`.fr.md`). Rebuilt on 2026-1 | |||
| 4 | 4 | ||
| 5 | | Version | Date | Summary | | | 5 | | Version | Date | Summary | | |
| 6 | |---|---|---|---| | 6 | |---|---|---|---| |
| 7 | -| [v1.0.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) | | 7 | +| [v1.0.1](v1.0.1.en.md) | not tagged yet | Messages typed during an answer wait their turn, the window shows when the model struggles and how long an answer takes, models can be downloaded at start-up and take turns in memory during a hand-off, and deciders need no boilerplate. | [FR](v1.0.1.fr.md) | |
| 8 | +| [v1.0.0](v1.0.0.en.md) | 2026-10-22 | 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) | | 9 | | [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) | |
| 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) | | 10 | | [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) | |
| 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) | | 11 | | [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) | |
added
release-notes/v1.0.1.en.md +115 -0 | new file mode 100644 | ||
| @@ -0,0 +1,115 @@ | ||
| 1 | +# mini-me v1.0.1 | |
| 2 | + | |
| 3 | +*[Version française](v1.0.1.fr.md)* | |
| 4 | + | |
| 5 | +Messages typed during an answer wait their turn, the window shows when the model struggles and how long an answer takes, models can be downloaded at start-up and take turns in memory during a hand-off, and deciders need no boilerplate. | |
| 6 | + | |
| 7 | +## New | |
| 8 | + | |
| 9 | +### A message typed during an answer is queued (#155) | |
| 10 | + | |
| 11 | +- **Typing during a turn no longer cancels it.** In the window and the line mode, what you send while the agent answers waits and runs once the turn ends, in order. A notice says so: `⏳ Queued (N) — runs once this turn ends`. In the window the rule above the input reads `N queued — Esc stops it · Enter queues more`. | |
| 12 | +- To stop the turn, use `Esc` in the window, or `/abort` / `Ctrl+C` in the line mode. The queue then runs. | |
| 13 | +- In an editor, a prompt that arrives during a turn waits for it to end. Whether the editor sends it at once, queues it, or cancels the turn first is the editor's choice. | |
| 14 | + | |
| 15 | +### Struggle signals (#153, #160) | |
| 16 | + | |
| 17 | +- **When the model struggles, mm says so apart from the answer.** `⚠` marks a warning (the turn goes on) and `✖` marks a severe signal (the turn was stopped). | |
| 18 | +- **The signals:** | |
| 19 | + - `loop: <tool> ×N` and `stuck: <tool> ×N`; | |
| 20 | + - `failing: N tool calls in a row` (three failed calls or more with different inputs, new in #160); | |
| 21 | + - `broken tool call`, `stream cut — retried`, `runaway tool call`; | |
| 22 | + - `stalled`, `max turns reached`, `unknown tool: <name>`, `empty answer`; | |
| 23 | + - `context N% full` (80 % or more of the context window). | |
| 24 | +- **Where they show:** | |
| 25 | + - in the window, the worst signal of the turn is a coloured badge on the right of the footer, kept until the next question; | |
| 26 | + - in the terminal, it is a line of its own; | |
| 27 | + - in an editor, it is a paragraph signed by mm. | |
| 28 | +- [`demos/struggle-signals/`](../demos/struggle-signals/) shows every signal without a real model. | |
| 29 | + | |
| 30 | +### Completion duration in the window (#158) | |
| 31 | + | |
| 32 | +- The window's status bar shows `⏱ 4.2s`, ticking while a turn or an `/ask` runs, then the final duration until the next question. | |
| 33 | +- **`showCompletionTime: false`** hides it. | |
| 34 | + | |
| 35 | +### Download the models at start-up: `autoPull` (#61, #162, #163, #164) | |
| 36 | + | |
| 37 | +- **`autoPull: true`** makes mm check, at start-up, that the server has the models this agent will use: its own, its `mmConfigs` agents' and its routing deciders'. mm downloads the ones the server does not list and shows the progress on stderr, then `⬇ pulled <model> in …`. | |
| 38 | +- If the agent's own model cannot be downloaded (a misspelt name, for example), mm stops with the server's message. A failure on another model is only a warning. | |
| 39 | +- **By provider:** | |
| 40 | + - llmman and Ollama: through `/api/pull`; | |
| 41 | + - Docker Model Runner: through the runner's `/models/create`; | |
| 42 | + - llama.cpp: nothing to download through its API, so mm warns and says how to start `llama-server` with the model. | |
| 43 | +- **Off by default.** | |
| 44 | +- **Tried live on llmman only:** a download with in-place progress, a second start with nothing to pull, and a misspelt name stopping mm. **Not tried on a real server:** Ollama, Docker Model Runner and llama-server. The Docker Model Runner route is the one `docker model pull` uses, and mm confirms the download by reading the model list afterwards. | |
| 45 | +- An agent started with `mm --ask` downloads nothing. | |
| 46 | + | |
| 47 | +### Models take turns in memory during a hand-off: `mmConfigs.<name>.unloadModels` (#161) | |
| 48 | + | |
| 49 | +- **`unloadModels: true` on an `mmConfigs` entry**: before handing a question to that agent, mm unloads the asking agent's model. When the answer is back, it unloads the asked agent's model. Each unload shows a `🧹` line. | |
| 50 | +- The unload hooks are no longer needed for this. This works for `ask_agent`, `/ask` and `mm --ask`. | |
| 51 | +- **Measured with [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/)** on llmman: a Rust question took 31 s and a Go question 79 s. The server never held both models at once. | |
| 52 | + | |
| 53 | +### Deciders need no boilerplate (#141) | |
| 54 | + | |
| 55 | +- A file with a `decision:` block now turns off its own built-in tools, skills, sessions and doc search. The `bashTool: false`, `editTools: false`, `skillsDir: no-skills` lines are no longer needed. | |
| 56 | +- mm still refuses to start a decider that explicitly declares MCP servers, LSP servers, `mmConfigs` or `tools:`. | |
| 57 | +- A decider also ignores `AGENTS.md`, and its banner says so: `ignored (decision model)`. | |
| 58 | + | |
| 59 | +### Show a decider's answer in the chat: `decision.display` (#157) | |
| 60 | + | |
| 61 | +- **`display: true` in a decider's `decision:` block**: `-p` adds `"display": true` to the JSON. A `preGeneration` hook can then return the decider's answers as its reply's `display`. | |
| 62 | +- mm shows them, formatted and in another colour, between the question and the answer. This works in the window, the terminal and an editor. The chat model never receives them. | |
| 63 | +- The Go and Node hooks of `decision-chat`, `decision-chat-golang` and `decision-dnd` already handle it. | |
| 64 | + | |
| 65 | +## Fixed | |
| 66 | + | |
| 67 | +- **`mm init --yes`** wrote `# your answer:` above `yolo:` although the value was the usage's default. It now writes `# usage <name>'s default`. | |
| 68 | +- **The line mode**: a struggle line or a `🧹` / hook notice printed during an `/ask` was glued to the streamed answer. It now starts on its own line. | |
| 69 | +- **The line mode**: reaching the end of a piped stdin during a turn could cancel the turn. It no longer does. | |
| 70 | + | |
| 71 | +## Demos | |
| 72 | + | |
| 73 | +- **New decision-model demos** (d1-3B on llmman, READMEs EN + FR with measured results): | |
| 74 | + - [`demos/decision-reviews/`](../demos/decision-reviews/): customer reviews. d1-3B scored 28/28 and d1-omni-600M 26/28. | |
| 75 | + - [`demos/decision-moderation/`](../demos/decision-moderation/): blog comments. d1-3B scored 31/32 and d1-omni-600M 24/32. | |
| 76 | + - [`demos/decision-chat/`](../demos/decision-chat/): a chat agent shaped by a decider through a `preGeneration` hook (Qwen3.5 4B). | |
| 77 | + - [`demos/decision-chat-golang/`](../demos/decision-chat-golang/): the same flow for Go, with the hook written in Go. | |
| 78 | + - [`demos/decision-dnd/`](../demos/decision-dnd/): a Dungeon Master helped by a spell-picking decider, with `DECIDER_DUMP` to keep each decider answer as a JSON file. | |
| 79 | + - [`demos/decision-questions/`](../demos/decision-questions/): the four deciders of the question-writing guide. | |
| 80 | +- **Flow diagrams** (`<demo>-flow.drawio`, `.svg`, `.png`) in every decision demo. | |
| 81 | +- [`demos/struggle-signals/`](../demos/struggle-signals/): a fake OpenAI-compatible server and `run-all.sh`, which trigger every struggle signal. | |
| 82 | +- [`demos/auto-pull/`](../demos/auto-pull/): `autoPull` with SmolLM2-135M. It has a single agent, a team, and a misspelt repository name. | |
| 83 | +- [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/): `unloadModels: true` on `mmConfigs` entries. | |
| 84 | +- [`demos/coding-helpers/`](../demos/coding-helpers/): it now uses `preAsk` / `postAsk` unload hooks, so its models are never loaded together. A Rust question took 37 s. | |
| 85 | +- [`dev.team/`](../dev.team/): a team of five agents for a 32 GB laptop (coordinator, reformulator, coder, reviewer, tutor), with diagrams and a Docker sandbox set-up for Zed. Bug fixes, lessons and reviews worked in the measurements. New features did not yet. | |
| 86 | + | |
| 87 | +## Documentation | |
| 88 | + | |
| 89 | +- **New pages** (EN + FR): | |
| 90 | + - [How to write the questions of a decider](../docs/en/how-to/write-decision-questions.md); | |
| 91 | + - [mm init](../docs/en/explanation/mm-init.md): where each piece of information comes from; | |
| 92 | + - [Struggling models](../docs/en/explanation/struggling-models.md). | |
| 93 | +- **Updated references:** | |
| 94 | + - [configuration](../docs/en/reference/configuration.md): `autoPull`, `showCompletionTime`, `mmConfigs.unloadModels`, `decision.display`, the decider rules, and a `planTool` row that was missing; | |
| 95 | + - [command line](../docs/en/reference/cli.md): the struggle signals and the completion duration; | |
| 96 | + - [slash commands](../docs/en/reference/slash-commands.md): the queue; | |
| 97 | + - [hooks](../docs/en/reference/hooks.md): `display`, and the order of the unloads around a hand-off; | |
| 98 | + - [ACP](../docs/en/reference/acp.md). | |
| 99 | +- **Updated how-tos:** | |
| 100 | + - [the window mode](../docs/en/how-to/use-the-window-mode.md); | |
| 101 | + - [freeing a model's memory](../docs/en/how-to/unload-a-model.md); | |
| 102 | + - [letting the agent call other agents](../docs/en/how-to/let-the-agent-call-other-agents.md); | |
| 103 | + - running with [llmman](../docs/en/how-to/run-with-llmman.md), [Ollama](../docs/en/how-to/run-with-ollama.md) and [llama.cpp](../docs/en/how-to/run-with-llama-cpp.md) (`autoPull`); | |
| 104 | + - [asking a decision model](../docs/en/how-to/ask-a-decision-model.md). | |
| 105 | + | |
| 106 | +## Upgrading | |
| 107 | + | |
| 108 | +- **One change in behaviour:** text you type during an answer is now queued instead of cancelling the turn. Use `Esc` (window) or `/abort` / `Ctrl+C` (line mode) to stop a turn. | |
| 109 | +- **New keys, all optional:** | |
| 110 | + - `autoPull` (default `false`); | |
| 111 | + - `showCompletionTime` (default `true`); | |
| 112 | + - `unloadModels` on an `mmConfigs` entry (default `false`); | |
| 113 | + - `display` in a `decision:` block (default `false`). | |
| 114 | +- **Decider files**: the `…: false` lines and `skillsDir: no-skills` can be removed. Files that keep them still load. | |
| 115 | +- **Not checked live in an editor (Zed):** the queue, the struggle signals, `decision.display` and `unloadModels`. They were tested in the line mode and the window. | |
| new file mode 100644 | |||
| @@ -0,0 +1,115 @@ | |||
| 1 | +# mini-me v1.0.1 | ||
| 2 | + | ||
| 3 | +*[Version française](v1.0.1.fr.md)* | ||
| 4 | + | ||
| 5 | +Messages typed during an answer wait their turn, the window shows when the model struggles and how long an answer takes, models can be downloaded at start-up and take turns in memory during a hand-off, and deciders need no boilerplate. | ||
| 6 | + | ||
| 7 | +## New | ||
| 8 | + | ||
| 9 | +### A message typed during an answer is queued (#155) | ||
| 10 | + | ||
| 11 | +- **Typing during a turn no longer cancels it.** In the window and the line mode, what you send while the agent answers waits and runs once the turn ends, in order. A notice says so: `⏳ Queued (N) — runs once this turn ends`. In the window the rule above the input reads `N queued — Esc stops it · Enter queues more`. | ||
| 12 | +- To stop the turn, use `Esc` in the window, or `/abort` / `Ctrl+C` in the line mode. The queue then runs. | ||
| 13 | +- In an editor, a prompt that arrives during a turn waits for it to end. Whether the editor sends it at once, queues it, or cancels the turn first is the editor's choice. | ||
| 14 | + | ||
| 15 | +### Struggle signals (#153, #160) | ||
| 16 | + | ||
| 17 | +- **When the model struggles, mm says so apart from the answer.** `⚠` marks a warning (the turn goes on) and `✖` marks a severe signal (the turn was stopped). | ||
| 18 | +- **The signals:** | ||
| 19 | + - `loop: <tool> ×N` and `stuck: <tool> ×N`; | ||
| 20 | + - `failing: N tool calls in a row` (three failed calls or more with different inputs, new in #160); | ||
| 21 | + - `broken tool call`, `stream cut — retried`, `runaway tool call`; | ||
| 22 | + - `stalled`, `max turns reached`, `unknown tool: <name>`, `empty answer`; | ||
| 23 | + - `context N% full` (80 % or more of the context window). | ||
| 24 | +- **Where they show:** | ||
| 25 | + - in the window, the worst signal of the turn is a coloured badge on the right of the footer, kept until the next question; | ||
| 26 | + - in the terminal, it is a line of its own; | ||
| 27 | + - in an editor, it is a paragraph signed by mm. | ||
| 28 | +- [`demos/struggle-signals/`](../demos/struggle-signals/) shows every signal without a real model. | ||
| 29 | + | ||
| 30 | +### Completion duration in the window (#158) | ||
| 31 | + | ||
| 32 | +- The window's status bar shows `⏱ 4.2s`, ticking while a turn or an `/ask` runs, then the final duration until the next question. | ||
| 33 | +- **`showCompletionTime: false`** hides it. | ||
| 34 | + | ||
| 35 | +### Download the models at start-up: `autoPull` (#61, #162, #163, #164) | ||
| 36 | + | ||
| 37 | +- **`autoPull: true`** makes mm check, at start-up, that the server has the models this agent will use: its own, its `mmConfigs` agents' and its routing deciders'. mm downloads the ones the server does not list and shows the progress on stderr, then `⬇ pulled <model> in …`. | ||
| 38 | +- If the agent's own model cannot be downloaded (a misspelt name, for example), mm stops with the server's message. A failure on another model is only a warning. | ||
| 39 | +- **By provider:** | ||
| 40 | + - llmman and Ollama: through `/api/pull`; | ||
| 41 | + - Docker Model Runner: through the runner's `/models/create`; | ||
| 42 | + - llama.cpp: nothing to download through its API, so mm warns and says how to start `llama-server` with the model. | ||
| 43 | +- **Off by default.** | ||
| 44 | +- **Tried live on llmman only:** a download with in-place progress, a second start with nothing to pull, and a misspelt name stopping mm. **Not tried on a real server:** Ollama, Docker Model Runner and llama-server. The Docker Model Runner route is the one `docker model pull` uses, and mm confirms the download by reading the model list afterwards. | ||
| 45 | +- An agent started with `mm --ask` downloads nothing. | ||
| 46 | + | ||
| 47 | +### Models take turns in memory during a hand-off: `mmConfigs.<name>.unloadModels` (#161) | ||
| 48 | + | ||
| 49 | +- **`unloadModels: true` on an `mmConfigs` entry**: before handing a question to that agent, mm unloads the asking agent's model. When the answer is back, it unloads the asked agent's model. Each unload shows a `🧹` line. | ||
| 50 | +- The unload hooks are no longer needed for this. This works for `ask_agent`, `/ask` and `mm --ask`. | ||
| 51 | +- **Measured with [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/)** on llmman: a Rust question took 31 s and a Go question 79 s. The server never held both models at once. | ||
| 52 | + | ||
| 53 | +### Deciders need no boilerplate (#141) | ||
| 54 | + | ||
| 55 | +- A file with a `decision:` block now turns off its own built-in tools, skills, sessions and doc search. The `bashTool: false`, `editTools: false`, `skillsDir: no-skills` lines are no longer needed. | ||
| 56 | +- mm still refuses to start a decider that explicitly declares MCP servers, LSP servers, `mmConfigs` or `tools:`. | ||
| 57 | +- A decider also ignores `AGENTS.md`, and its banner says so: `ignored (decision model)`. | ||
| 58 | + | ||
| 59 | +### Show a decider's answer in the chat: `decision.display` (#157) | ||
| 60 | + | ||
| 61 | +- **`display: true` in a decider's `decision:` block**: `-p` adds `"display": true` to the JSON. A `preGeneration` hook can then return the decider's answers as its reply's `display`. | ||
| 62 | +- mm shows them, formatted and in another colour, between the question and the answer. This works in the window, the terminal and an editor. The chat model never receives them. | ||
| 63 | +- The Go and Node hooks of `decision-chat`, `decision-chat-golang` and `decision-dnd` already handle it. | ||
| 64 | + | ||
| 65 | +## Fixed | ||
| 66 | + | ||
| 67 | +- **`mm init --yes`** wrote `# your answer:` above `yolo:` although the value was the usage's default. It now writes `# usage <name>'s default`. | ||
| 68 | +- **The line mode**: a struggle line or a `🧹` / hook notice printed during an `/ask` was glued to the streamed answer. It now starts on its own line. | ||
| 69 | +- **The line mode**: reaching the end of a piped stdin during a turn could cancel the turn. It no longer does. | ||
| 70 | + | ||
| 71 | +## Demos | ||
| 72 | + | ||
| 73 | +- **New decision-model demos** (d1-3B on llmman, READMEs EN + FR with measured results): | ||
| 74 | + - [`demos/decision-reviews/`](../demos/decision-reviews/): customer reviews. d1-3B scored 28/28 and d1-omni-600M 26/28. | ||
| 75 | + - [`demos/decision-moderation/`](../demos/decision-moderation/): blog comments. d1-3B scored 31/32 and d1-omni-600M 24/32. | ||
| 76 | + - [`demos/decision-chat/`](../demos/decision-chat/): a chat agent shaped by a decider through a `preGeneration` hook (Qwen3.5 4B). | ||
| 77 | + - [`demos/decision-chat-golang/`](../demos/decision-chat-golang/): the same flow for Go, with the hook written in Go. | ||
| 78 | + - [`demos/decision-dnd/`](../demos/decision-dnd/): a Dungeon Master helped by a spell-picking decider, with `DECIDER_DUMP` to keep each decider answer as a JSON file. | ||
| 79 | + - [`demos/decision-questions/`](../demos/decision-questions/): the four deciders of the question-writing guide. | ||
| 80 | +- **Flow diagrams** (`<demo>-flow.drawio`, `.svg`, `.png`) in every decision demo. | ||
| 81 | +- [`demos/struggle-signals/`](../demos/struggle-signals/): a fake OpenAI-compatible server and `run-all.sh`, which trigger every struggle signal. | ||
| 82 | +- [`demos/auto-pull/`](../demos/auto-pull/): `autoPull` with SmolLM2-135M. It has a single agent, a team, and a misspelt repository name. | ||
| 83 | +- [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/): `unloadModels: true` on `mmConfigs` entries. | ||
| 84 | +- [`demos/coding-helpers/`](../demos/coding-helpers/): it now uses `preAsk` / `postAsk` unload hooks, so its models are never loaded together. A Rust question took 37 s. | ||
| 85 | +- [`dev.team/`](../dev.team/): a team of five agents for a 32 GB laptop (coordinator, reformulator, coder, reviewer, tutor), with diagrams and a Docker sandbox set-up for Zed. Bug fixes, lessons and reviews worked in the measurements. New features did not yet. | ||
| 86 | + | ||
| 87 | +## Documentation | ||
| 88 | + | ||
| 89 | +- **New pages** (EN + FR): | ||
| 90 | + - [How to write the questions of a decider](../docs/en/how-to/write-decision-questions.md); | ||
| 91 | + - [mm init](../docs/en/explanation/mm-init.md): where each piece of information comes from; | ||
| 92 | + - [Struggling models](../docs/en/explanation/struggling-models.md). | ||
| 93 | +- **Updated references:** | ||
| 94 | + - [configuration](../docs/en/reference/configuration.md): `autoPull`, `showCompletionTime`, `mmConfigs.unloadModels`, `decision.display`, the decider rules, and a `planTool` row that was missing; | ||
| 95 | + - [command line](../docs/en/reference/cli.md): the struggle signals and the completion duration; | ||
| 96 | + - [slash commands](../docs/en/reference/slash-commands.md): the queue; | ||
| 97 | + - [hooks](../docs/en/reference/hooks.md): `display`, and the order of the unloads around a hand-off; | ||
| 98 | + - [ACP](../docs/en/reference/acp.md). | ||
| 99 | +- **Updated how-tos:** | ||
| 100 | + - [the window mode](../docs/en/how-to/use-the-window-mode.md); | ||
| 101 | + - [freeing a model's memory](../docs/en/how-to/unload-a-model.md); | ||
| 102 | + - [letting the agent call other agents](../docs/en/how-to/let-the-agent-call-other-agents.md); | ||
| 103 | + - running with [llmman](../docs/en/how-to/run-with-llmman.md), [Ollama](../docs/en/how-to/run-with-ollama.md) and [llama.cpp](../docs/en/how-to/run-with-llama-cpp.md) (`autoPull`); | ||
| 104 | + - [asking a decision model](../docs/en/how-to/ask-a-decision-model.md). | ||
| 105 | + | ||
| 106 | +## Upgrading | ||
| 107 | + | ||
| 108 | +- **One change in behaviour:** text you type during an answer is now queued instead of cancelling the turn. Use `Esc` (window) or `/abort` / `Ctrl+C` (line mode) to stop a turn. | ||
| 109 | +- **New keys, all optional:** | ||
| 110 | + - `autoPull` (default `false`); | ||
| 111 | + - `showCompletionTime` (default `true`); | ||
| 112 | + - `unloadModels` on an `mmConfigs` entry (default `false`); | ||
| 113 | + - `display` in a `decision:` block (default `false`). | ||
| 114 | +- **Decider files**: the `…: false` lines and `skillsDir: no-skills` can be removed. Files that keep them still load. | ||
| 115 | +- **Not checked live in an editor (Zed):** the queue, the struggle signals, `decision.display` and `unloadModels`. They were tested in the line mode and the window. | ||
added
release-notes/v1.0.1.fr.md +122 -0 | new file mode 100644 | ||
| @@ -0,0 +1,122 @@ | ||
| 1 | +# mini-me v1.0.1 | |
| 2 | + | |
| 3 | +*[English version](v1.0.1.en.md)* | |
| 4 | + | |
| 5 | +Les messages tapés pendant une réponse attendent leur tour. La fenêtre signale quand le modèle peine et affiche la durée de chaque réponse. Les modèles peuvent être téléchargés au démarrage et se relayer en mémoire pendant un passage de relais, et les deciders n'ont plus besoin de lignes répétitives. | |
| 6 | + | |
| 7 | +## Nouveautés | |
| 8 | + | |
| 9 | +### Un message tapé pendant une réponse est mis en file d'attente (#155) | |
| 10 | + | |
| 11 | +- **Taper pendant un tour ne l'annule plus.** Dans la fenêtre et en mode ligne, ce que vous envoyez pendant que l'agent répond attend la fin du tour, puis s'exécute, dans l'ordre. Un avis le confirme : `⏳ Queued (N) — runs once this turn ends`. Dans la fenêtre, la ligne au-dessus de la saisie affiche `N queued — Esc stops it · Enter queues more`. | |
| 12 | +- Pour arrêter le tour, utilisez `Échap` dans la fenêtre, ou `/abort` / `Ctrl+C` en mode ligne. La file s'exécute ensuite. | |
| 13 | +- Dans un éditeur, un prompt qui arrive pendant un tour attend la fin de ce tour. L'éditeur choisit de l'envoyer tout de suite, de le mettre en file ou d'annuler d'abord le tour. | |
| 14 | + | |
| 15 | +### Signaux de difficulté (#153, #160) | |
| 16 | + | |
| 17 | +- **Quand le modèle peine, mm le signale à part de la réponse.** `⚠` est un avertissement : le tour continue. `✖` est un signal grave : le tour a été arrêté. | |
| 18 | +- **Les signaux :** | |
| 19 | + - `loop: <tool> ×N` et `stuck: <tool> ×N` ; | |
| 20 | + - `failing: N tool calls in a row`, quand au moins trois appels d'affilée échouent avec des entrées différentes (nouveau, #160) ; | |
| 21 | + - `broken tool call`, `stream cut — retried`, `runaway tool call` ; | |
| 22 | + - `stalled`, `max turns reached`, `unknown tool: <name>`, `empty answer` ; | |
| 23 | + - `context N% full`, quand 80 % ou plus de la fenêtre de contexte est rempli. | |
| 24 | +- **Où ils s'affichent :** | |
| 25 | + - dans la fenêtre, le pire signal du tour devient un badge coloré à droite du pied de page, jusqu'à la question suivante ; | |
| 26 | + - dans le terminal, il occupe sa propre ligne ; | |
| 27 | + - dans un éditeur, c'est un paragraphe signé par mm. | |
| 28 | +- [`demos/struggle-signals/`](../demos/struggle-signals/) montre chaque signal sans vrai modèle. | |
| 29 | + | |
| 30 | +### Durée de la complétion dans la fenêtre (#158) | |
| 31 | + | |
| 32 | +- La barre d'état de la fenêtre affiche `⏱ 4.2s`. Le compteur défile pendant un tour ou un `/ask`, puis garde la durée finale jusqu'à la question suivante. | |
| 33 | +- **`showCompletionTime: false`** la masque. | |
| 34 | + | |
| 35 | +### Télécharger les modèles au démarrage : `autoPull` (#61, #162, #163, #164) | |
| 36 | + | |
| 37 | +- **`autoPull: true`** fait vérifier à mm, au démarrage, que le serveur a les modèles dont l'agent aura besoin : le sien, ceux de ses agents `mmConfigs` et ceux de ses deciders de routage. | |
| 38 | +- mm télécharge ceux que le serveur ne liste pas, affiche la progression sur stderr, puis `⬇ pulled <model> in …`. | |
| 39 | +- Si le modèle de l'agent lui-même ne peut pas être téléchargé (nom mal orthographié, par exemple), mm s'arrête avec le message du serveur. Un échec sur un autre modèle n'est qu'un avertissement. | |
| 40 | +- **Selon le fournisseur :** | |
| 41 | + - llmman et Ollama : par `/api/pull` ; | |
| 42 | + - Docker Model Runner : par `/models/create` du runner ; | |
| 43 | + - llama.cpp : son API ne permet pas de télécharger, donc mm avertit et explique comment lancer `llama-server` avec le modèle. | |
| 44 | +- **Désactivé par défaut.** | |
| 45 | +- **Essayé en vrai sur llmman seulement :** | |
| 46 | + - un téléchargement avec la progression réécrite sur place ; | |
| 47 | + - un second démarrage sans rien à télécharger ; | |
| 48 | + - un nom mal orthographié qui arrête mm. | |
| 49 | +- **Pas essayé sur un vrai serveur :** Ollama, Docker Model Runner, llama-server. Pour Docker Model Runner, mm passe par la route de `docker model pull`, et vérifie le téléchargement en relisant ensuite la liste des modèles. | |
| 50 | +- Un agent lancé par `mm --ask` ne télécharge rien. | |
| 51 | + | |
| 52 | +### Les modèles se relaient en mémoire pendant un passage de relais : `mmConfigs.<nom>.unloadModels` (#161) | |
| 53 | + | |
| 54 | +- **`unloadModels: true` sur une entrée `mmConfigs`** : avant de passer une question à cet agent, mm décharge le modèle de l'agent qui demande. Au retour de la réponse, il décharge celui de l'agent interrogé. Chaque déchargement affiche une ligne `🧹`. | |
| 55 | +- Plus besoin des hooks de déchargement pour cela. Cela marche pour `ask_agent`, `/ask` et `mm --ask`. | |
| 56 | +- **Mesuré avec [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/)** sur llmman : 31 s pour une question Rust, 79 s pour une question Go. Le serveur n'a jamais eu les deux modèles chargés en même temps. | |
| 57 | + | |
| 58 | +### Plus de lignes répétitives dans les deciders (#141) | |
| 59 | + | |
| 60 | +- Un fichier avec un bloc `decision:` désactive maintenant de lui-même ses outils intégrés, ses skills, ses sessions et sa recherche de documentation. Les lignes `bashTool: false`, `editTools: false` et `skillsDir: no-skills` ne servent plus. | |
| 61 | +- mm refuse toujours de démarrer un decider qui déclare explicitement des serveurs MCP ou LSP, des `mmConfigs` ou des `tools:`. | |
| 62 | +- Un decider ignore aussi `AGENTS.md`, et sa bannière l'indique : `ignored (decision model)`. | |
| 63 | + | |
| 64 | +### Afficher la réponse d'un decider dans la conversation : `decision.display` (#157) | |
| 65 | + | |
| 66 | +- **`display: true` dans le bloc `decision:` d'un decider** : `-p` ajoute `"display": true` au JSON. Un hook `preGeneration` peut alors renvoyer les réponses du decider dans le `display` de sa réponse. | |
| 67 | +- mm les affiche, mises en forme et dans une autre couleur, entre la question et la réponse. Cela marche dans la fenêtre, le terminal et un éditeur. Le modèle de chat ne les reçoit jamais. | |
| 68 | +- Les hooks Go et Node de `decision-chat`, `decision-chat-golang` et `decision-dnd` le gèrent déjà. | |
| 69 | + | |
| 70 | +## Corrections | |
| 71 | + | |
| 72 | +- **`mm init --yes`** écrivait `# your answer:` au-dessus de `yolo:`, alors que la valeur était celle de l'usage par défaut. Il écrit maintenant `# usage <nom>'s default`. | |
| 73 | +- **Mode ligne :** une ligne de difficulté, ou un avis `🧹` ou de hook affiché pendant un `/ask`, se collait à la réponse en cours d'affichage. Il commence maintenant sur sa propre ligne. | |
| 74 | +- **Mode ligne :** atteindre la fin d'une entrée standard redirigée pendant un tour pouvait annuler ce tour. Ce n'est plus le cas. | |
| 75 | + | |
| 76 | +## Démos | |
| 77 | + | |
| 78 | +- **Nouvelles démos de modèles de décision** (d1-3B sur llmman, README EN + FR avec résultats mesurés) : | |
| 79 | + - [`demos/decision-reviews/`](../demos/decision-reviews/) : des avis clients. Score : 28/28 avec d1-3B, 26/28 avec d1-omni-600M. | |
| 80 | + - [`demos/decision-moderation/`](../demos/decision-moderation/) : des commentaires de blog. Score : 31/32 avec d1-3B, 24/32 avec d1-omni-600M. | |
| 81 | + - [`demos/decision-chat/`](../demos/decision-chat/) : un agent de chat dont un decider oriente les réponses, par un hook `preGeneration` (Qwen3.5 4B). | |
| 82 | + - [`demos/decision-chat-golang/`](../demos/decision-chat-golang/) : le même principe pour Go, avec un hook écrit en Go. | |
| 83 | + - [`demos/decision-dnd/`](../demos/decision-dnd/) : un maître du jeu aidé par un decider qui choisit le sort. `DECIDER_DUMP` garde chaque réponse du decider dans un fichier JSON. | |
| 84 | + - [`demos/decision-questions/`](../demos/decision-questions/) : les quatre deciders du guide d'écriture des questions. | |
| 85 | +- **Diagrammes de flux** (`<demo>-flow.drawio`, `.svg`, `.png`) dans chaque démo de décision. | |
| 86 | +- [`demos/struggle-signals/`](../demos/struggle-signals/) : un faux serveur compatible OpenAI et `run-all.sh`, qui déclenchent chaque signal de difficulté. | |
| 87 | +- [`demos/auto-pull/`](../demos/auto-pull/) : `autoPull` avec SmolLM2-135M, avec un agent seul, une équipe, et un nom de dépôt mal orthographié. | |
| 88 | +- [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/) : `unloadModels: true` sur les entrées `mmConfigs`. | |
| 89 | +- [`demos/coding-helpers/`](../demos/coding-helpers/) : ses hooks de déchargement `preAsk` / `postAsk` font que ses modèles ne sont jamais chargés ensemble. Une question Rust a pris 37 s. | |
| 90 | +- [`dev.team/`](../dev.team/) : une équipe de cinq agents pour un portable de 32 Go (coordinateur, reformulateur, codeur, relecteur, tuteur), avec diagrammes et une configuration de bac à sable Docker pour Zed. Mesures : | |
| 91 | + - les corrections de bugs, les leçons et les relectures fonctionnent ; | |
| 92 | + - les nouvelles fonctionnalités, pas encore. | |
| 93 | + | |
| 94 | +## Documentation | |
| 95 | + | |
| 96 | +- **Nouvelles pages** (EN + FR) : | |
| 97 | + - [Comment écrire les questions d'un decider](../docs/fr/how-to/write-decision-questions.md) ; | |
| 98 | + - [mm init](../docs/fr/explanation/mm-init.md) : d'où vient chaque information ; | |
| 99 | + - [Modèles en difficulté](../docs/fr/explanation/struggling-models.md). | |
| 100 | +- **Références mises à jour :** | |
| 101 | + - [configuration](../docs/fr/reference/configuration.md) : `autoPull`, `showCompletionTime`, `mmConfigs.unloadModels`, `decision.display`, les règles des deciders, et une ligne `planTool` qui manquait ; | |
| 102 | + - [ligne de commande](../docs/fr/reference/cli.md) : les signaux de difficulté et la durée de complétion ; | |
| 103 | + - [commandes slash](../docs/fr/reference/slash-commands.md) : la file d'attente ; | |
| 104 | + - [hooks](../docs/fr/reference/hooks.md) : `display` et l'ordre des déchargements autour d'un passage de relais ; | |
| 105 | + - [ACP](../docs/fr/reference/acp.md). | |
| 106 | +- **Guides mis à jour :** | |
| 107 | + - [le mode fenêtre](../docs/fr/how-to/use-the-window-mode.md) ; | |
| 108 | + - [libérer la mémoire d'un modèle](../docs/fr/how-to/unload-a-model.md) ; | |
| 109 | + - [laisser l'agent appeler d'autres agents](../docs/fr/how-to/let-the-agent-call-other-agents.md) ; | |
| 110 | + - utiliser [llmman](../docs/fr/how-to/run-with-llmman.md), [Ollama](../docs/fr/how-to/run-with-ollama.md) et [llama.cpp](../docs/fr/how-to/run-with-llama-cpp.md), pour `autoPull` ; | |
| 111 | + - [interroger un modèle de décision](../docs/fr/how-to/ask-a-decision-model.md). | |
| 112 | + | |
| 113 | +## Mise à jour | |
| 114 | + | |
| 115 | +- **Un changement de comportement :** le texte tapé pendant une réponse est mis en file d'attente au lieu d'annuler le tour. Pour arrêter un tour : `Échap` dans la fenêtre, `/abort` ou `Ctrl+C` en mode ligne. | |
| 116 | +- **Nouvelles clés, toutes facultatives :** | |
| 117 | + - `autoPull`, `false` par défaut ; | |
| 118 | + - `showCompletionTime`, `true` par défaut ; | |
| 119 | + - `unloadModels` sur une entrée `mmConfigs`, `false` par défaut ; | |
| 120 | + - `display` dans un bloc `decision:`, `false` par défaut. | |
| 121 | +- **Fichiers de decider :** les lignes `…: false` et `skillsDir: no-skills` peuvent être supprimées. Les fichiers qui les gardent se chargent toujours. | |
| 122 | +- **Pas vérifié en vrai dans un éditeur (Zed) :** la file d'attente, les signaux de difficulté, `decision.display` et `unloadModels`. Ils ont été testés en mode ligne et dans la fenêtre. | |
| new file mode 100644 | |||
| @@ -0,0 +1,122 @@ | |||
| 1 | +# mini-me v1.0.1 | ||
| 2 | + | ||
| 3 | +*[English version](v1.0.1.en.md)* | ||
| 4 | + | ||
| 5 | +Les messages tapés pendant une réponse attendent leur tour. La fenêtre signale quand le modèle peine et affiche la durée de chaque réponse. Les modèles peuvent être téléchargés au démarrage et se relayer en mémoire pendant un passage de relais, et les deciders n'ont plus besoin de lignes répétitives. | ||
| 6 | + | ||
| 7 | +## Nouveautés | ||
| 8 | + | ||
| 9 | +### Un message tapé pendant une réponse est mis en file d'attente (#155) | ||
| 10 | + | ||
| 11 | +- **Taper pendant un tour ne l'annule plus.** Dans la fenêtre et en mode ligne, ce que vous envoyez pendant que l'agent répond attend la fin du tour, puis s'exécute, dans l'ordre. Un avis le confirme : `⏳ Queued (N) — runs once this turn ends`. Dans la fenêtre, la ligne au-dessus de la saisie affiche `N queued — Esc stops it · Enter queues more`. | ||
| 12 | +- Pour arrêter le tour, utilisez `Échap` dans la fenêtre, ou `/abort` / `Ctrl+C` en mode ligne. La file s'exécute ensuite. | ||
| 13 | +- Dans un éditeur, un prompt qui arrive pendant un tour attend la fin de ce tour. L'éditeur choisit de l'envoyer tout de suite, de le mettre en file ou d'annuler d'abord le tour. | ||
| 14 | + | ||
| 15 | +### Signaux de difficulté (#153, #160) | ||
| 16 | + | ||
| 17 | +- **Quand le modèle peine, mm le signale à part de la réponse.** `⚠` est un avertissement : le tour continue. `✖` est un signal grave : le tour a été arrêté. | ||
| 18 | +- **Les signaux :** | ||
| 19 | + - `loop: <tool> ×N` et `stuck: <tool> ×N` ; | ||
| 20 | + - `failing: N tool calls in a row`, quand au moins trois appels d'affilée échouent avec des entrées différentes (nouveau, #160) ; | ||
| 21 | + - `broken tool call`, `stream cut — retried`, `runaway tool call` ; | ||
| 22 | + - `stalled`, `max turns reached`, `unknown tool: <name>`, `empty answer` ; | ||
| 23 | + - `context N% full`, quand 80 % ou plus de la fenêtre de contexte est rempli. | ||
| 24 | +- **Où ils s'affichent :** | ||
| 25 | + - dans la fenêtre, le pire signal du tour devient un badge coloré à droite du pied de page, jusqu'à la question suivante ; | ||
| 26 | + - dans le terminal, il occupe sa propre ligne ; | ||
| 27 | + - dans un éditeur, c'est un paragraphe signé par mm. | ||
| 28 | +- [`demos/struggle-signals/`](../demos/struggle-signals/) montre chaque signal sans vrai modèle. | ||
| 29 | + | ||
| 30 | +### Durée de la complétion dans la fenêtre (#158) | ||
| 31 | + | ||
| 32 | +- La barre d'état de la fenêtre affiche `⏱ 4.2s`. Le compteur défile pendant un tour ou un `/ask`, puis garde la durée finale jusqu'à la question suivante. | ||
| 33 | +- **`showCompletionTime: false`** la masque. | ||
| 34 | + | ||
| 35 | +### Télécharger les modèles au démarrage : `autoPull` (#61, #162, #163, #164) | ||
| 36 | + | ||
| 37 | +- **`autoPull: true`** fait vérifier à mm, au démarrage, que le serveur a les modèles dont l'agent aura besoin : le sien, ceux de ses agents `mmConfigs` et ceux de ses deciders de routage. | ||
| 38 | +- mm télécharge ceux que le serveur ne liste pas, affiche la progression sur stderr, puis `⬇ pulled <model> in …`. | ||
| 39 | +- Si le modèle de l'agent lui-même ne peut pas être téléchargé (nom mal orthographié, par exemple), mm s'arrête avec le message du serveur. Un échec sur un autre modèle n'est qu'un avertissement. | ||
| 40 | +- **Selon le fournisseur :** | ||
| 41 | + - llmman et Ollama : par `/api/pull` ; | ||
| 42 | + - Docker Model Runner : par `/models/create` du runner ; | ||
| 43 | + - llama.cpp : son API ne permet pas de télécharger, donc mm avertit et explique comment lancer `llama-server` avec le modèle. | ||
| 44 | +- **Désactivé par défaut.** | ||
| 45 | +- **Essayé en vrai sur llmman seulement :** | ||
| 46 | + - un téléchargement avec la progression réécrite sur place ; | ||
| 47 | + - un second démarrage sans rien à télécharger ; | ||
| 48 | + - un nom mal orthographié qui arrête mm. | ||
| 49 | +- **Pas essayé sur un vrai serveur :** Ollama, Docker Model Runner, llama-server. Pour Docker Model Runner, mm passe par la route de `docker model pull`, et vérifie le téléchargement en relisant ensuite la liste des modèles. | ||
| 50 | +- Un agent lancé par `mm --ask` ne télécharge rien. | ||
| 51 | + | ||
| 52 | +### Les modèles se relaient en mémoire pendant un passage de relais : `mmConfigs.<nom>.unloadModels` (#161) | ||
| 53 | + | ||
| 54 | +- **`unloadModels: true` sur une entrée `mmConfigs`** : avant de passer une question à cet agent, mm décharge le modèle de l'agent qui demande. Au retour de la réponse, il décharge celui de l'agent interrogé. Chaque déchargement affiche une ligne `🧹`. | ||
| 55 | +- Plus besoin des hooks de déchargement pour cela. Cela marche pour `ask_agent`, `/ask` et `mm --ask`. | ||
| 56 | +- **Mesuré avec [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/)** sur llmman : 31 s pour une question Rust, 79 s pour une question Go. Le serveur n'a jamais eu les deux modèles chargés en même temps. | ||
| 57 | + | ||
| 58 | +### Plus de lignes répétitives dans les deciders (#141) | ||
| 59 | + | ||
| 60 | +- Un fichier avec un bloc `decision:` désactive maintenant de lui-même ses outils intégrés, ses skills, ses sessions et sa recherche de documentation. Les lignes `bashTool: false`, `editTools: false` et `skillsDir: no-skills` ne servent plus. | ||
| 61 | +- mm refuse toujours de démarrer un decider qui déclare explicitement des serveurs MCP ou LSP, des `mmConfigs` ou des `tools:`. | ||
| 62 | +- Un decider ignore aussi `AGENTS.md`, et sa bannière l'indique : `ignored (decision model)`. | ||
| 63 | + | ||
| 64 | +### Afficher la réponse d'un decider dans la conversation : `decision.display` (#157) | ||
| 65 | + | ||
| 66 | +- **`display: true` dans le bloc `decision:` d'un decider** : `-p` ajoute `"display": true` au JSON. Un hook `preGeneration` peut alors renvoyer les réponses du decider dans le `display` de sa réponse. | ||
| 67 | +- mm les affiche, mises en forme et dans une autre couleur, entre la question et la réponse. Cela marche dans la fenêtre, le terminal et un éditeur. Le modèle de chat ne les reçoit jamais. | ||
| 68 | +- Les hooks Go et Node de `decision-chat`, `decision-chat-golang` et `decision-dnd` le gèrent déjà. | ||
| 69 | + | ||
| 70 | +## Corrections | ||
| 71 | + | ||
| 72 | +- **`mm init --yes`** écrivait `# your answer:` au-dessus de `yolo:`, alors que la valeur était celle de l'usage par défaut. Il écrit maintenant `# usage <nom>'s default`. | ||
| 73 | +- **Mode ligne :** une ligne de difficulté, ou un avis `🧹` ou de hook affiché pendant un `/ask`, se collait à la réponse en cours d'affichage. Il commence maintenant sur sa propre ligne. | ||
| 74 | +- **Mode ligne :** atteindre la fin d'une entrée standard redirigée pendant un tour pouvait annuler ce tour. Ce n'est plus le cas. | ||
| 75 | + | ||
| 76 | +## Démos | ||
| 77 | + | ||
| 78 | +- **Nouvelles démos de modèles de décision** (d1-3B sur llmman, README EN + FR avec résultats mesurés) : | ||
| 79 | + - [`demos/decision-reviews/`](../demos/decision-reviews/) : des avis clients. Score : 28/28 avec d1-3B, 26/28 avec d1-omni-600M. | ||
| 80 | + - [`demos/decision-moderation/`](../demos/decision-moderation/) : des commentaires de blog. Score : 31/32 avec d1-3B, 24/32 avec d1-omni-600M. | ||
| 81 | + - [`demos/decision-chat/`](../demos/decision-chat/) : un agent de chat dont un decider oriente les réponses, par un hook `preGeneration` (Qwen3.5 4B). | ||
| 82 | + - [`demos/decision-chat-golang/`](../demos/decision-chat-golang/) : le même principe pour Go, avec un hook écrit en Go. | ||
| 83 | + - [`demos/decision-dnd/`](../demos/decision-dnd/) : un maître du jeu aidé par un decider qui choisit le sort. `DECIDER_DUMP` garde chaque réponse du decider dans un fichier JSON. | ||
| 84 | + - [`demos/decision-questions/`](../demos/decision-questions/) : les quatre deciders du guide d'écriture des questions. | ||
| 85 | +- **Diagrammes de flux** (`<demo>-flow.drawio`, `.svg`, `.png`) dans chaque démo de décision. | ||
| 86 | +- [`demos/struggle-signals/`](../demos/struggle-signals/) : un faux serveur compatible OpenAI et `run-all.sh`, qui déclenchent chaque signal de difficulté. | ||
| 87 | +- [`demos/auto-pull/`](../demos/auto-pull/) : `autoPull` avec SmolLM2-135M, avec un agent seul, une équipe, et un nom de dépôt mal orthographié. | ||
| 88 | +- [`demos/coding-helpers-unload-option/`](../demos/coding-helpers-unload-option/) : `unloadModels: true` sur les entrées `mmConfigs`. | ||
| 89 | +- [`demos/coding-helpers/`](../demos/coding-helpers/) : ses hooks de déchargement `preAsk` / `postAsk` font que ses modèles ne sont jamais chargés ensemble. Une question Rust a pris 37 s. | ||
| 90 | +- [`dev.team/`](../dev.team/) : une équipe de cinq agents pour un portable de 32 Go (coordinateur, reformulateur, codeur, relecteur, tuteur), avec diagrammes et une configuration de bac à sable Docker pour Zed. Mesures : | ||
| 91 | + - les corrections de bugs, les leçons et les relectures fonctionnent ; | ||
| 92 | + - les nouvelles fonctionnalités, pas encore. | ||
| 93 | + | ||
| 94 | +## Documentation | ||
| 95 | + | ||
| 96 | +- **Nouvelles pages** (EN + FR) : | ||
| 97 | + - [Comment écrire les questions d'un decider](../docs/fr/how-to/write-decision-questions.md) ; | ||
| 98 | + - [mm init](../docs/fr/explanation/mm-init.md) : d'où vient chaque information ; | ||
| 99 | + - [Modèles en difficulté](../docs/fr/explanation/struggling-models.md). | ||
| 100 | +- **Références mises à jour :** | ||
| 101 | + - [configuration](../docs/fr/reference/configuration.md) : `autoPull`, `showCompletionTime`, `mmConfigs.unloadModels`, `decision.display`, les règles des deciders, et une ligne `planTool` qui manquait ; | ||
| 102 | + - [ligne de commande](../docs/fr/reference/cli.md) : les signaux de difficulté et la durée de complétion ; | ||
| 103 | + - [commandes slash](../docs/fr/reference/slash-commands.md) : la file d'attente ; | ||
| 104 | + - [hooks](../docs/fr/reference/hooks.md) : `display` et l'ordre des déchargements autour d'un passage de relais ; | ||
| 105 | + - [ACP](../docs/fr/reference/acp.md). | ||
| 106 | +- **Guides mis à jour :** | ||
| 107 | + - [le mode fenêtre](../docs/fr/how-to/use-the-window-mode.md) ; | ||
| 108 | + - [libérer la mémoire d'un modèle](../docs/fr/how-to/unload-a-model.md) ; | ||
| 109 | + - [laisser l'agent appeler d'autres agents](../docs/fr/how-to/let-the-agent-call-other-agents.md) ; | ||
| 110 | + - utiliser [llmman](../docs/fr/how-to/run-with-llmman.md), [Ollama](../docs/fr/how-to/run-with-ollama.md) et [llama.cpp](../docs/fr/how-to/run-with-llama-cpp.md), pour `autoPull` ; | ||
| 111 | + - [interroger un modèle de décision](../docs/fr/how-to/ask-a-decision-model.md). | ||
| 112 | + | ||
| 113 | +## Mise à jour | ||
| 114 | + | ||
| 115 | +- **Un changement de comportement :** le texte tapé pendant une réponse est mis en file d'attente au lieu d'annuler le tour. Pour arrêter un tour : `Échap` dans la fenêtre, `/abort` ou `Ctrl+C` en mode ligne. | ||
| 116 | +- **Nouvelles clés, toutes facultatives :** | ||
| 117 | + - `autoPull`, `false` par défaut ; | ||
| 118 | + - `showCompletionTime`, `true` par défaut ; | ||
| 119 | + - `unloadModels` sur une entrée `mmConfigs`, `false` par défaut ; | ||
| 120 | + - `display` dans un bloc `decision:`, `false` par défaut. | ||
| 121 | +- **Fichiers de decider :** les lignes `…: false` et `skillsDir: no-skills` peuvent être supprimées. Les fichiers qui les gardent se chargent toujours. | ||
| 122 | +- **Pas vérifié en vrai dans un éditeur (Zed) :** la file d'attente, les signaux de difficulté, `decision.display` et `unloadModels`. Ils ont été testés en mode ligne et dans la fenêtre. | ||