🛟 Updated.
2f57ae2 parent: b859ec4 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.1 | |
| 5 | +VERSION=1.0.2 | |
| 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.1 | 5 | +VERSION=1.0.2 |
| 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.1 | |
| 5 | +VERSION=1.0.2 | |
| 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.1 | 5 | +VERSION=1.0.2 |
| 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.1" | |
| 7 | +$Version = "1.0.2" | |
| 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.1" | 7 | +$Version = "1.0.2" |
| 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
README.md +11 -1 | @@ -32,7 +32,7 @@ mm --about # what it is, in one screen | ||
| 32 | 32 | ``` |
| 33 | 33 | > `install.sh` works only on macOS and Linux |
| 34 | 34 | |
| 35 | -Or download a binary from the [releases page](https://rickub.com/bots-garden/mini-me/releases) and put it on your `PATH`. | |
| 35 | +Or download a binary from the [releases page](https://rickub.com/bots-garden/mini-me/releases) and put it on your `PATH` — step by step for [macOS](INSTALL.MACOS.md), [Linux](INSTALL.LINUX.md) and [Windows](INSTALL.WINDOWS.md). | |
| 36 | 36 | |
| 37 | 37 | Then pick a configuration file. Copy one to `agent.yaml` in your project and adjust the `model:` and `system:` keys to taste: |
| 38 | 38 | |
| @@ -124,6 +124,13 @@ Anything that speaks ACP can host `mm -acp` the same way: **JetBrains IDEs** (In | ||
| 124 | 124 | - **Unload a model**: `/unload [model]` frees a model from the server's memory — in the terminal, the window and an editor —, and the `unload_model` tool lets the agent do it itself, e.g. on another agent's model once it has answered; llmman, Ollama and llama-server in router mode. `unloadModels: false` turns both off. See [Free a model's memory](docs/en/how-to/unload-a-model.md) and `demos/unload-models/`. |
| 125 | 125 | - **Search a documentation folder**: `/docs <words>` searches the text files of the folders named in `docSearch.dirs` (`.md`, `.adoc`, `.txt`… — only the extensions listed) and returns the best passages with their `path:line` link, ranked with BM25 — no index, no model (`docSearch.searchDocs`); the `search_docs` tool lets the model do it before it answers (`docSearch.autoSearchDocs`); both off by default. See [Search a documentation folder](docs/en/how-to/search-the-docs.md) and `demos/docs-search/`. |
| 126 | 126 | - **Search earlier sessions**: with sessions on, `/memory <words>` searches the project's stored conversations (`sessions.searchMemory`), and the `search_memory` tool lets the model do it when a question refers to something decided before (`sessions.autoSearchMemory`); both off by default. The search matches words, not meanings. See [Search earlier sessions](docs/en/how-to/search-earlier-sessions.md) and `demos/memory-search/`. |
| 127 | +- **Decision models**: small models that answer questions about a text — a choice, a yes/no, a score — in a fraction of a second, through `/v1/systemone` (llama-server, llmman, Ollama). An agent file with a `decision:` block is a decider: run it with `mm -p` from a script or a hook, let it pick the skill before each question (`skillRouting`), drop the tool groups a request does not need (`toolRouting`), or approve read-only commands from a `preToolCall` hook (`allow`). See [Ask a decision model](docs/en/how-to/ask-a-decision-model.md), [Decision models](docs/en/explanation/decision-models.md) and the `demos/decision-*` folders. | |
| 128 | +- **Type while it answers**: a message sent during a turn is queued and runs once the turn ends, in order — in the line mode and the window; `Esc` (window) or `/abort` stops the turn. See [the slash commands reference](docs/en/reference/slash-commands.md). | |
| 129 | +- **Struggle signals**: when the model loops, fails several tool calls in a row, breaks a tool call, stalls, runs out of turns or fills its context window, mm says so apart from the answer — a coloured badge in the window's footer, a line in the terminal, a paragraph in an editor. The window also shows the completion's duration (`showCompletionTime`). See [Struggling models](docs/en/explanation/struggling-models.md) and `demos/struggle-signals/`. | |
| 130 | +- **Download the models at start-up**: `autoPull: true` pulls the models the agent will use that the server does not have yet — its own, its `mmConfigs` agents', its routing deciders' — with the progress on screen (llmman, Ollama, Docker Model Runner; llama.cpp gets advice instead). See [Run mini-me with llmman](docs/en/how-to/run-with-llmman.md) and `demos/auto-pull/`. | |
| 131 | +- **Models that take turns in memory**: `unloadModels: true` on an `mmConfigs` entry unloads the asking agent's model before the hand-off and the asked agent's model after it, so two models are never loaded together. See [Free a model's memory](docs/en/how-to/unload-a-model.md) and `demos/coding-helpers-unload-option/`. | |
| 132 | +- **Use mini-me from another program**: drive `mm -acp` over ACP — `demo.acp.sdk/nodejs/minime.js` gives Node.js `complete`, `stream`, cancellation and a permission callback, with no dependency. See [`demo.acp.sdk/`](demo.acp.sdk/README.en.md). | |
| 133 | +- **Test a model**: `testing/` holds two benches run by mm itself — a coordinator agent gives small tasks to a candidate agent whose model is under test, checks each result with a command, and writes a Markdown report: the model as a working agent (`testing/model-check/`) and function calling alone, with tools declared in the agent file (`testing/function-calling/`). See [`testing/`](testing/README.en.md). | |
| 127 | 134 | - **Docker Sandboxes**: the sandbox kit lives in its own repository, [mini-me-kit](https://rickub.com/bots-garden/mini-me-kit); `sbx/` explains how to use it (`sbx run …`), with two mixins (`go-toolchain`, `cli-tools`) and ready-made configurations — see `sbx/README.md` and [Run mini-me in a Docker Sandbox](docs/en/how-to/run-in-a-docker-sandbox.md). |
| 128 | 135 | |
| 129 | 136 | ## Demos |
| @@ -141,6 +148,9 @@ The `demos/` directory holds ready-made set-ups (most with a README explaining h | ||
| 141 | 148 | | `demos/mini-mes/` | small teams of agents (`riker` coordinating a specifier and a coder, `gopher` a Go specialist) | |
| 142 | 149 | | `demos/little-coder/` | a Go + htmx web-app generator for a small local model (Mellum2 12B on llmman, 32 GB RAM): a tested starter, skills, `AGENTS.md`, measured results | |
| 143 | 150 | | `demos/team/` | a team of four agents (lead, specifier, coder, tester) on one small model (Ornith 1.5 9B on llmman) building Go + htmx apps through spec and test files, with measured results | |
| 151 | +| `demos/coding-helpers-unload-option/` | the same team as `demos/coding-helpers/` with `unloadModels: true` on its `mmConfigs` entries instead of unload hooks: the two models never in memory together, measured on llmman | | |
| 152 | +| `demos/auto-pull/` | `autoPull: true` with SmolLM2-135M: a model the server does not have is downloaded at start-up, with its progress; also a team, and a misspelt repository name | | |
| 153 | +| `demos/struggle-signals/` | a fake OpenAI-compatible server and `run-all.sh` that trigger every struggle signal (loop, failed calls, broken call, stalled, max turns, context full…) without a real model | | |
| 144 | 154 | | `demo.acp.sdk/` | mini-me as a library from other languages, by driving `mm -acp` over ACP: `nodejs/minime.js` (ticket 167) — `Agent.start`, `complete`, `stream`, cancel with an `AbortSignal`, a permission callback; no dependency, 11 tests with a fake mm, four examples measured on llmman | |
| 145 | 155 | | `testing/` | model testers run by mm itself: a coordinator (Gemma 4 12B) follows a skill, gives small tasks to a `candidate` agent whose model is under test (Qwen3.5 4B for model-check, Luciole 1B for function-calling), checks each result with a command and writes a Markdown report — `model-check/` (tool calls, exact instructions, Go code that must run, several steps) and `function-calling/` (only tools declared in the candidate's `tools:`) | |
| 146 | 156 | | `dev.team/` | a team of five agents for a 32 GB laptop (ticket 152): a Qwen3.5 4B coordinator hands each request to a reformulator, a coder, a reviewer or a tutor (Gemma 4 12B, Mellum2 12B); hooks keep one model in memory at a time; measured: bug fixes, lessons and reviews work, new features not yet | |
| @@ -32,7 +32,7 @@ mm --about # what it is, in one screen | |||
| 32 | ``` | 32 | ``` |
| 33 | > `install.sh` works only on macOS and Linux | 33 | > `install.sh` works only on macOS and Linux |
| 34 | 34 | ||
| 35 | -Or download a binary from the [releases page](https://rickub.com/bots-garden/mini-me/releases) and put it on your `PATH`. | 35 | +Or download a binary from the [releases page](https://rickub.com/bots-garden/mini-me/releases) and put it on your `PATH` — step by step for [macOS](INSTALL.MACOS.md), [Linux](INSTALL.LINUX.md) and [Windows](INSTALL.WINDOWS.md). |
| 36 | 36 | ||
| 37 | Then pick a configuration file. Copy one to `agent.yaml` in your project and adjust the `model:` and `system:` keys to taste: | 37 | Then pick a configuration file. Copy one to `agent.yaml` in your project and adjust the `model:` and `system:` keys to taste: |
| 38 | 38 | ||
| @@ -124,6 +124,13 @@ Anything that speaks ACP can host `mm -acp` the same way: **JetBrains IDEs** (In | |||
| 124 | - **Unload a model**: `/unload [model]` frees a model from the server's memory — in the terminal, the window and an editor —, and the `unload_model` tool lets the agent do it itself, e.g. on another agent's model once it has answered; llmman, Ollama and llama-server in router mode. `unloadModels: false` turns both off. See [Free a model's memory](docs/en/how-to/unload-a-model.md) and `demos/unload-models/`. | 124 | - **Unload a model**: `/unload [model]` frees a model from the server's memory — in the terminal, the window and an editor —, and the `unload_model` tool lets the agent do it itself, e.g. on another agent's model once it has answered; llmman, Ollama and llama-server in router mode. `unloadModels: false` turns both off. See [Free a model's memory](docs/en/how-to/unload-a-model.md) and `demos/unload-models/`. |
| 125 | - **Search a documentation folder**: `/docs <words>` searches the text files of the folders named in `docSearch.dirs` (`.md`, `.adoc`, `.txt`… — only the extensions listed) and returns the best passages with their `path:line` link, ranked with BM25 — no index, no model (`docSearch.searchDocs`); the `search_docs` tool lets the model do it before it answers (`docSearch.autoSearchDocs`); both off by default. See [Search a documentation folder](docs/en/how-to/search-the-docs.md) and `demos/docs-search/`. | 125 | - **Search a documentation folder**: `/docs <words>` searches the text files of the folders named in `docSearch.dirs` (`.md`, `.adoc`, `.txt`… — only the extensions listed) and returns the best passages with their `path:line` link, ranked with BM25 — no index, no model (`docSearch.searchDocs`); the `search_docs` tool lets the model do it before it answers (`docSearch.autoSearchDocs`); both off by default. See [Search a documentation folder](docs/en/how-to/search-the-docs.md) and `demos/docs-search/`. |
| 126 | - **Search earlier sessions**: with sessions on, `/memory <words>` searches the project's stored conversations (`sessions.searchMemory`), and the `search_memory` tool lets the model do it when a question refers to something decided before (`sessions.autoSearchMemory`); both off by default. The search matches words, not meanings. See [Search earlier sessions](docs/en/how-to/search-earlier-sessions.md) and `demos/memory-search/`. | 126 | - **Search earlier sessions**: with sessions on, `/memory <words>` searches the project's stored conversations (`sessions.searchMemory`), and the `search_memory` tool lets the model do it when a question refers to something decided before (`sessions.autoSearchMemory`); both off by default. The search matches words, not meanings. See [Search earlier sessions](docs/en/how-to/search-earlier-sessions.md) and `demos/memory-search/`. |
| 127 | +- **Decision models**: small models that answer questions about a text — a choice, a yes/no, a score — in a fraction of a second, through `/v1/systemone` (llama-server, llmman, Ollama). An agent file with a `decision:` block is a decider: run it with `mm -p` from a script or a hook, let it pick the skill before each question (`skillRouting`), drop the tool groups a request does not need (`toolRouting`), or approve read-only commands from a `preToolCall` hook (`allow`). See [Ask a decision model](docs/en/how-to/ask-a-decision-model.md), [Decision models](docs/en/explanation/decision-models.md) and the `demos/decision-*` folders. | ||
| 128 | +- **Type while it answers**: a message sent during a turn is queued and runs once the turn ends, in order — in the line mode and the window; `Esc` (window) or `/abort` stops the turn. See [the slash commands reference](docs/en/reference/slash-commands.md). | ||
| 129 | +- **Struggle signals**: when the model loops, fails several tool calls in a row, breaks a tool call, stalls, runs out of turns or fills its context window, mm says so apart from the answer — a coloured badge in the window's footer, a line in the terminal, a paragraph in an editor. The window also shows the completion's duration (`showCompletionTime`). See [Struggling models](docs/en/explanation/struggling-models.md) and `demos/struggle-signals/`. | ||
| 130 | +- **Download the models at start-up**: `autoPull: true` pulls the models the agent will use that the server does not have yet — its own, its `mmConfigs` agents', its routing deciders' — with the progress on screen (llmman, Ollama, Docker Model Runner; llama.cpp gets advice instead). See [Run mini-me with llmman](docs/en/how-to/run-with-llmman.md) and `demos/auto-pull/`. | ||
| 131 | +- **Models that take turns in memory**: `unloadModels: true` on an `mmConfigs` entry unloads the asking agent's model before the hand-off and the asked agent's model after it, so two models are never loaded together. See [Free a model's memory](docs/en/how-to/unload-a-model.md) and `demos/coding-helpers-unload-option/`. | ||
| 132 | +- **Use mini-me from another program**: drive `mm -acp` over ACP — `demo.acp.sdk/nodejs/minime.js` gives Node.js `complete`, `stream`, cancellation and a permission callback, with no dependency. See [`demo.acp.sdk/`](demo.acp.sdk/README.en.md). | ||
| 133 | +- **Test a model**: `testing/` holds two benches run by mm itself — a coordinator agent gives small tasks to a candidate agent whose model is under test, checks each result with a command, and writes a Markdown report: the model as a working agent (`testing/model-check/`) and function calling alone, with tools declared in the agent file (`testing/function-calling/`). See [`testing/`](testing/README.en.md). | ||
| 127 | - **Docker Sandboxes**: the sandbox kit lives in its own repository, [mini-me-kit](https://rickub.com/bots-garden/mini-me-kit); `sbx/` explains how to use it (`sbx run …`), with two mixins (`go-toolchain`, `cli-tools`) and ready-made configurations — see `sbx/README.md` and [Run mini-me in a Docker Sandbox](docs/en/how-to/run-in-a-docker-sandbox.md). | 134 | - **Docker Sandboxes**: the sandbox kit lives in its own repository, [mini-me-kit](https://rickub.com/bots-garden/mini-me-kit); `sbx/` explains how to use it (`sbx run …`), with two mixins (`go-toolchain`, `cli-tools`) and ready-made configurations — see `sbx/README.md` and [Run mini-me in a Docker Sandbox](docs/en/how-to/run-in-a-docker-sandbox.md). |
| 128 | 135 | ||
| 129 | ## Demos | 136 | ## Demos |
| @@ -141,6 +148,9 @@ The `demos/` directory holds ready-made set-ups (most with a README explaining h | |||
| 141 | | `demos/mini-mes/` | small teams of agents (`riker` coordinating a specifier and a coder, `gopher` a Go specialist) | | 148 | | `demos/mini-mes/` | small teams of agents (`riker` coordinating a specifier and a coder, `gopher` a Go specialist) | |
| 142 | | `demos/little-coder/` | a Go + htmx web-app generator for a small local model (Mellum2 12B on llmman, 32 GB RAM): a tested starter, skills, `AGENTS.md`, measured results | | 149 | | `demos/little-coder/` | a Go + htmx web-app generator for a small local model (Mellum2 12B on llmman, 32 GB RAM): a tested starter, skills, `AGENTS.md`, measured results | |
| 143 | | `demos/team/` | a team of four agents (lead, specifier, coder, tester) on one small model (Ornith 1.5 9B on llmman) building Go + htmx apps through spec and test files, with measured results | | 150 | | `demos/team/` | a team of four agents (lead, specifier, coder, tester) on one small model (Ornith 1.5 9B on llmman) building Go + htmx apps through spec and test files, with measured results | |
| 151 | +| `demos/coding-helpers-unload-option/` | the same team as `demos/coding-helpers/` with `unloadModels: true` on its `mmConfigs` entries instead of unload hooks: the two models never in memory together, measured on llmman | | ||
| 152 | +| `demos/auto-pull/` | `autoPull: true` with SmolLM2-135M: a model the server does not have is downloaded at start-up, with its progress; also a team, and a misspelt repository name | | ||
| 153 | +| `demos/struggle-signals/` | a fake OpenAI-compatible server and `run-all.sh` that trigger every struggle signal (loop, failed calls, broken call, stalled, max turns, context full…) without a real model | | ||
| 144 | | `demo.acp.sdk/` | mini-me as a library from other languages, by driving `mm -acp` over ACP: `nodejs/minime.js` (ticket 167) — `Agent.start`, `complete`, `stream`, cancel with an `AbortSignal`, a permission callback; no dependency, 11 tests with a fake mm, four examples measured on llmman | | 154 | | `demo.acp.sdk/` | mini-me as a library from other languages, by driving `mm -acp` over ACP: `nodejs/minime.js` (ticket 167) — `Agent.start`, `complete`, `stream`, cancel with an `AbortSignal`, a permission callback; no dependency, 11 tests with a fake mm, four examples measured on llmman | |
| 145 | | `testing/` | model testers run by mm itself: a coordinator (Gemma 4 12B) follows a skill, gives small tasks to a `candidate` agent whose model is under test (Qwen3.5 4B for model-check, Luciole 1B for function-calling), checks each result with a command and writes a Markdown report — `model-check/` (tool calls, exact instructions, Go code that must run, several steps) and `function-calling/` (only tools declared in the candidate's `tools:`) | | 155 | | `testing/` | model testers run by mm itself: a coordinator (Gemma 4 12B) follows a skill, gives small tasks to a `candidate` agent whose model is under test (Qwen3.5 4B for model-check, Luciole 1B for function-calling), checks each result with a command and writes a Markdown report — `model-check/` (tool calls, exact instructions, Go code that must run, several steps) and `function-calling/` (only tools declared in the candidate's `tools:`) | |
| 146 | | `dev.team/` | a team of five agents for a 32 GB laptop (ticket 152): a Qwen3.5 4B coordinator hands each request to a reformulator, a coder, a reviewer or a tutor (Gemma 4 12B, Mellum2 12B); hooks keep one model in memory at a time; measured: bug fixes, lessons and reviews work, new features not yet | | 156 | | `dev.team/` | a team of five agents for a 32 GB laptop (ticket 152): a Qwen3.5 4B coordinator hands each request to a reformulator, a coder, a reviewer or a tutor (Gemma 4 12B, Mellum2 12B); hooks keep one model in memory at a time; measured: bug fixes, lessons and reviews work, new features not yet | |
modified
install.sh +1 -1 | @@ -4,7 +4,7 @@ set -euo pipefail | ||
| 4 | 4 | BINARY_NAME="mm" |
| 5 | 5 | INSTALL_DIR="/usr/local/bin" |
| 6 | 6 | |
| 7 | -rm "${INSTALL_DIR}/mm" | |
| 7 | +rm -f "${INSTALL_DIR}/mm" | |
| 8 | 8 | |
| 9 | 9 | echo "Building ${BINARY_NAME}..." |
| 10 | 10 | go build -o "${BINARY_NAME}" . |
| @@ -4,7 +4,7 @@ set -euo pipefail | |||
| 4 | BINARY_NAME="mm" | 4 | BINARY_NAME="mm" |
| 5 | INSTALL_DIR="/usr/local/bin" | 5 | INSTALL_DIR="/usr/local/bin" |
| 6 | 6 | ||
| 7 | -rm "${INSTALL_DIR}/mm" | 7 | +rm -f "${INSTALL_DIR}/mm" |
| 8 | 8 | ||
| 9 | echo "Building ${BINARY_NAME}..." | 9 | echo "Building ${BINARY_NAME}..." |
| 10 | go build -o "${BINARY_NAME}" . | 10 | go build -o "${BINARY_NAME}" . |