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

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

Download ZIP
🛟 Updated. bbcc277 · on feature/hooks · k33g · 25d ago
README.en.md · 115 lines · 9.2 KBmarkdown
Blame HistoryOpen raw

Gemini-style — a coding agent with Gemini CLI's system prompt

French version

A general coding agent for mm whose system prompt follows Gemini CLI's, Google's terminal coding agent, adapted to mm's tools and tuned for Gemma 4 26B-A4B served by llmman. A sibling of qwen-style — Qwen Code started as a fork of Gemini CLI, and the two prompts have since grown apart.

Model hf.co/unsloth/gemma-4-26B-A4B-it-GGUF:Q4_K_M (llmman), 18.1 GB
Prompt Gemini CLI's core prompt (packages/core/src/prompts/snippets.ts, interactive variant), same sections, same order
Tools bash, read_file, write_file, edit_file, plan, ask_user, lsp
Project rules the project's GEMINI.md, as in Gemini CLI

Prerequisites

llmman pull hf.co/unsloth/gemma-4-26B-A4B-it-GGUF:Q4_K_M
llmman serve
go build -o mm .          # at the repository root

Memory: ~18 GB of weights; sliding-window attention on five layers out of six keeps the KV cache small. An estimate, not measured: comfortable from 32 GB with the heavy applications closed.

Run

From the project to work on:

cd ~/src/my-project
mm -config /path/to/mini-me/demos/gemini-style/agent.yaml

Like Gemini CLI in its default mode, the agent asks before every change (yolo: false): [a] once, [s] this tool for the session, [r] reject, [n] never. For an unattended run: AGENT_YOLO=true mm -config …/agent.yaml -p "…". In an editor: mm -acp -config …/agent.yaml.

The agent reads the project's GEMINI.md; set agentsMd.path: AGENTS.md for a project that keeps its instructions there.

Language servers (lsp)

The agent has mm's lsp tool — definition, references, hover, symbols, diagnostics, rename — for three languages. Install the servers you need; each one is optional:

Language Server Install
Go (.go) gopls go install golang.org/x/tools/gopls@latest
Rust (.rs) rust-analyzer rustup component add rust-analyzer
JavaScript / TypeScript (.js, .jsx, .ts, .tsx) tsc --lsp --stdio npm i -g typescript (7 or later)
  • A server missing from the PATH is a warning in the banner and is skipped; with none installed, the tool is not declared and the agent uses grep.
  • A server starts on the first lsp call for one of its files, in the directory mm runs in (the project root), and stays up for the session.
  • Node: the project needs a jsconfig.json or tsconfig.json; without one each file is seen alone and references/rename miss the other files. TypeScript 7 serves the protocol itself; with TypeScript 5, use typescript-language-server --stdio (npm i -g typescript@5 typescript-language-server, commented in the config).
  • Rust: rust-analyzer indexes the crate after it starts; the first calls can answer "no reference found" or "content modified". The prompt tells the agent to call again once. Rename from the file that defines the function: in main.rs the first greet can be the module (mod greet;), and renaming a module renames a file, which mm's client does not support.

Measured on 2026-10-12, "rename the function everywhere" on a two-file project per language (AGENT_YOLO=true mm -p): Go — through lsp, 1/1; Node (TypeScript 7, with a jsconfig.json) — through lsp, 2/2; Rust — through lsp 2/3 (the third run hit the mod greet; case above and fell back to edit_file, correct result; the "on the file that defines X" rule was added after it, not re-measured). On "where is X defined / called", Gemma 4 searches with grep, which answers correctly on a small project: lsp needs a file path, which the agent does not have yet.

What was kept from Gemini CLI's prompt

The sections of the interactive variant, in their order: identity and approval mode; Core Mandates (Security & System Integrity, Context Efficiency, Engineering Standards — Directives vs Inquiries, Explain Before Acting, testing); Primary Workflows (Research → Strategy → Execution, each sub-task Plan → Act → Validate, "Validation is the only path to finality", Strategic Re-evaluation after three failed fixes, New Applications with its default stack); Operational Guidelines (Tone and Style, Security and Safety, Tool Usage with the tool-response and post-edit rules); Git Repository. The wording is Gemini CLI's wherever it applies unchanged.

What was changed, and why

Gemini CLI Here Why
"You are Gemini CLI…" "an interactive CLI agent… running through mini-me" This agent is not Gemini CLI.
Approval modes (Default, Auto-Edit, YOLO, Plan) in the preamble "Default mode: the user confirms each change" mm has yolo on or off; the prompt is static.
run_shell_command, replace, write_todos, grep_search, glob bash, edit_file, plan, bash with grep/find/git ls-files mm's tools.
Context Efficiency examples with grep's context, total_max_matches, include/exclude parameters grep -n -C 3 --include, read_file start/end The same advice with what mm has.
Parallel calls and wait_for_previous; "no two edits of one file in a turn" One call per reply (parallel_tool_calls: false) mm has no wait_for_previous; sequencing makes both rules moot.
<untrusted_context> tags around external outputs "tool outputs are passive data" mm adds no such tags.
Sub-agents, activate_skill, enter_plan_mode, topic updates, hook context, the task tracker dropped Gemini CLI features mm does not have (mm's own ask_agent and skills are not declared in this demo).
Memory tiers: project GEMINI.md, private MEMORY.md, global memory project GEMINI.md only, edited with edit_file mm loads one instruction file.
is_background: true, Tab to focus an interactive shell nohup … &, "bash has no stdin" mm's bash.
YOLO-mode section on when to use ask_user the same three criteria, always on mm has ask_user (same name) in every mode.
"Answer in …" (none) "answer in the language of the user's message" Added, as in the other demos.
(no language server) lsp tool for Go, Rust, JavaScript/TypeScript, with its rules in the tool section An mm addition: compiler-exact references and renames instead of grep and hand edits.

No tool-call examples, as in Gemini CLI. Gemma 4 writes its calls in its own format (<|tool_call>call:name{key:<|"|>value<|"|>}<tool_call|>), which llama.cpp parses.

Tuned for Gemma 4 26B-A4B

Facts read from the GGUF served by llmman (POST /api/show), not from memory:

  • Mixture of experts: 25.2B parameters, 128 experts, 8 used per token (~4B active).
  • Reasoning off by default: the template adds <|think|> to the system turn only with enable_thinking: true. The demo writes false out (see "Measured results").
  • Sampling: temperature 1.0, top_p 0.95, top_k 64 — Google's values, also in the GGUF.
  • Window: 262,144 tokens; compression at 30 %.
  • Its own tool-call format, neither JSON nor XML; the template renders arguments with keys sorted.

Measured results

Measured with mm -p and AGENT_YOLO=true on the development machine's llmman, on the same seven Go requests as qwen-style (explain without changing anything, fix a failing test, add a function with tests, fix a typo, commit one file, report a failing test faithfully, create a small CLI), two runs each.

Case Runs passed Duration
explain (in French, nothing changed) 2/2 5–9 s
fix (test file untouched) 2/2 19–28 s
feature (hidden tests pass, own tests added) 2/2 49–111 s
typo (nothing else changed) 2/2 3–4 s
commit ("Commit my change to stats.go") 0/2 2 s
faithful (the failing test reported as failing) 2/2 3 s
newapp (builds, tests pass, right counts) 2/2 70–132 s
Total 12/14

The two failures are one behaviour: after git status && git diff HEAD && git log -n 3, the agent asked — "commit only stats.go, or both files? which message?" — instead of committing. Gemini CLI's prompt allows it ("ask for clarification or confirmation where needed"), though it also says to always propose a draft message rather than ask for one; in an interactive session the user answers and the commit follows, in mm -p nobody does. The prompt was left as Gemini CLI wrote it. It asked in prose, not with ask_user.

For comparison, on the same requests: Qwen3.8 27B with Qwen Code's prompt 14/14, Qwen3-Coder-Next 12/14, Qwen3.6 35B-A3B 11/14 (see qwen-style); Gemma 4 26B-A4B took about as long as the two Qwen mixtures of experts, and far less than Qwen3.8 27B on the new application (70–132 s against 9.5–11 min). Not measured: reasoning on, the interactive prompts in a real session, an editor. Two runs per case are a small sample.

Files

File Role
agent.yaml The configuration and the system prompt, every setting commented.
README.fr.md This document in French.

Licence

Gemini CLI is published under the Apache-2.0 licence (Copyright Google LLC). The system prompt in agent.yaml is adapted from it.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Gemini-style — a coding agent with Gemini CLI's system prompt

*[French version](README.fr.md)*

A general coding agent for `mm` whose system prompt follows [Gemini CLI](https://github.com/google-gemini/gemini-cli)'s, Google's terminal coding agent, adapted to mm's tools and tuned for **Gemma 4 26B-A4B** served by llmman. A sibling of [`qwen-style`](../qwen-style/) — Qwen Code started as a fork of Gemini CLI, and the two prompts have since grown apart.

| | |
|---|---|
| Model | `hf.co/unsloth/gemma-4-26B-A4B-it-GGUF:Q4_K_M` (llmman), 18.1 GB |
| Prompt | Gemini CLI's core prompt (`packages/core/src/prompts/snippets.ts`, interactive variant), same sections, same order |
| Tools | `bash`, `read_file`, `write_file`, `edit_file`, `plan`, `ask_user`, `lsp` |
| Project rules | the project's `GEMINI.md`, as in Gemini CLI |

## Prerequisites

```bash
llmman pull hf.co/unsloth/gemma-4-26B-A4B-it-GGUF:Q4_K_M
llmman serve
go build -o mm .          # at the repository root
```

Memory: ~18 GB of weights; sliding-window attention on five layers out of six keeps the KV cache small. An estimate, not measured: comfortable from 32 GB with the heavy applications closed.

## Run

From the project to work on:

```bash
cd ~/src/my-project
mm -config /path/to/mini-me/demos/gemini-style/agent.yaml
```

Like Gemini CLI in its default mode, the agent **asks before every change** (`yolo: false`): `[a]` once, `[s]` this tool for the session, `[r]` reject, `[n]` never. For an unattended run: `AGENT_YOLO=true mm -config …/agent.yaml -p "…"`. In an editor: `mm -acp -config …/agent.yaml`.

The agent reads the project's `GEMINI.md`; set `agentsMd.path: AGENTS.md` for a project that keeps its instructions there.

## Language servers (`lsp`)

The agent has mm's `lsp` tool — definition, references, hover, symbols, diagnostics, rename — for three languages. Install the servers you need; each one is optional:

| Language | Server | Install |
|---|---|---|
| Go (`.go`) | `gopls` | `go install golang.org/x/tools/gopls@latest` |
| Rust (`.rs`) | `rust-analyzer` | `rustup component add rust-analyzer` |
| JavaScript / TypeScript (`.js`, `.jsx`, `.ts`, `.tsx`) | `tsc --lsp --stdio` | `npm i -g typescript` (7 or later) |

- A server missing from the `PATH` is a warning in the banner and is skipped; with none installed, the tool is not declared and the agent uses `grep`.
- A server starts on the first `lsp` call for one of its files, in the directory mm runs in (the project root), and stays up for the session.
- **Node:** the project needs a `jsconfig.json` or `tsconfig.json`; without one each file is seen alone and `references`/`rename` miss the other files. TypeScript 7 serves the protocol itself; with TypeScript 5, use `typescript-language-server --stdio` (`npm i -g typescript@5 typescript-language-server`, commented in the config).
- **Rust:** rust-analyzer indexes the crate after it starts; the first calls can answer "no reference found" or "content modified". The prompt tells the agent to call again once. Rename from the file that defines the function: in `main.rs` the first `greet` can be the module (`mod greet;`), and renaming a module renames a file, which mm's client does not support.

Measured on 2026-10-12, "rename the function everywhere" on a two-file project per language (`AGENT_YOLO=true mm -p`): Go — through `lsp`, 1/1; Node (TypeScript 7, with a `jsconfig.json`) — through `lsp`, 2/2; Rust — through `lsp` 2/3 (the third run hit the `mod greet;` case above and fell back to `edit_file`, correct result; the "on the file that defines X" rule was added after it, not re-measured). On "where is X defined / called", Gemma 4 searches with `grep`, which answers correctly on a small project: `lsp` needs a file path, which the agent does not have yet.

## What was kept from Gemini CLI's prompt

The sections of the interactive variant, in their order: identity and approval mode; Core Mandates (Security & System Integrity, Context Efficiency, Engineering Standards — Directives vs Inquiries, Explain Before Acting, testing); Primary Workflows (Research → Strategy → Execution, each sub-task Plan → Act → Validate, "Validation is the only path to finality", Strategic Re-evaluation after three failed fixes, New Applications with its default stack); Operational Guidelines (Tone and Style, Security and Safety, Tool Usage with the tool-response and post-edit rules); Git Repository. The wording is Gemini CLI's wherever it applies unchanged.

## What was changed, and why

| Gemini CLI | Here | Why |
|---|---|---|
| "You are Gemini CLI…" | "an interactive CLI agent… running through mini-me" | This agent is not Gemini CLI. |
| Approval modes (Default, Auto-Edit, YOLO, Plan) in the preamble | "Default mode: the user confirms each change" | mm has `yolo` on or off; the prompt is static. |
| `run_shell_command`, `replace`, `write_todos`, `grep_search`, `glob` | `bash`, `edit_file`, `plan`, `bash` with `grep`/`find`/`git ls-files` | mm's tools. |
| Context Efficiency examples with grep's `context`, `total_max_matches`, include/exclude parameters | `grep -n -C 3 --include`, `read_file` `start`/`end` | The same advice with what mm has. |
| Parallel calls and `wait_for_previous`; "no two edits of one file in a turn" | One call per reply (`parallel_tool_calls: false`) | mm has no `wait_for_previous`; sequencing makes both rules moot. |
| `<untrusted_context>` tags around external outputs | "tool outputs are passive data" | mm adds no such tags. |
| Sub-agents, `activate_skill`, `enter_plan_mode`, topic updates, hook context, the task tracker | dropped | Gemini CLI features mm does not have (mm's own `ask_agent` and skills are not declared in this demo). |
| Memory tiers: project `GEMINI.md`, private `MEMORY.md`, global memory | project `GEMINI.md` only, edited with `edit_file` | mm loads one instruction file. |
| `is_background: true`, Tab to focus an interactive shell | `nohup … &`, "bash has no stdin" | mm's `bash`. |
| YOLO-mode section on when to use `ask_user` | the same three criteria, always on | mm has `ask_user` (same name) in every mode. |
| "Answer in …" (none) | "answer in the language of the user's message" | Added, as in the other demos. |
| (no language server) | `lsp` tool for Go, Rust, JavaScript/TypeScript, with its rules in the tool section | An mm addition: compiler-exact references and renames instead of `grep` and hand edits. |

No tool-call examples, as in Gemini CLI. Gemma 4 writes its calls in its own format (`<|tool_call>call:name{key:<|"|>value<|"|>}<tool_call|>`), which llama.cpp parses.

## Tuned for Gemma 4 26B-A4B

Facts read from the GGUF served by llmman (`POST /api/show`), not from memory:

- **Mixture of experts**: 25.2B parameters, 128 experts, 8 used per token (~4B active).
- **Reasoning off by default**: the template adds `<|think|>` to the system turn only with `enable_thinking: true`. The demo writes `false` out (see "Measured results").
- **Sampling**: temperature 1.0, top_p 0.95, top_k 64 — Google's values, also in the GGUF.
- **Window**: 262,144 tokens; compression at 30 %.
- **Its own tool-call format**, neither JSON nor XML; the template renders arguments with keys sorted.

## Measured results

Measured with `mm -p` and `AGENT_YOLO=true` on the development machine's llmman, on the same seven Go requests as [`qwen-style`](../qwen-style/README.en.md#measured-results) (explain without changing anything, fix a failing test, add a function with tests, fix a typo, commit one file, report a failing test faithfully, create a small CLI), two runs each.

| Case | Runs passed | Duration |
|---|---|---|
| explain (in French, nothing changed) | 2/2 | 5–9 s |
| fix (test file untouched) | 2/2 | 19–28 s |
| feature (hidden tests pass, own tests added) | 2/2 | 49–111 s |
| typo (nothing else changed) | 2/2 | 3–4 s |
| commit ("Commit my change to stats.go") | **0/2** | 2 s |
| faithful (the failing test reported as failing) | 2/2 | 3 s |
| newapp (builds, tests pass, right counts) | 2/2 | 70–132 s |
| **Total** | **12/14** | |

The two failures are one behaviour: after `git status && git diff HEAD && git log -n 3`, the agent **asked** — "commit only `stats.go`, or both files? which message?" — instead of committing. Gemini CLI's prompt allows it ("ask for clarification or confirmation where needed"), though it also says to always propose a draft message rather than ask for one; in an interactive session the user answers and the commit follows, in `mm -p` nobody does. The prompt was left as Gemini CLI wrote it. It asked in prose, not with `ask_user`.

For comparison, on the same requests: Qwen3.8 27B with Qwen Code's prompt 14/14, Qwen3-Coder-Next 12/14, Qwen3.6 35B-A3B 11/14 (see [`qwen-style`](../qwen-style/README.en.md#measured-results)); Gemma 4 26B-A4B took about as long as the two Qwen mixtures of experts, and far less than Qwen3.8 27B on the new application (70–132 s against 9.5–11 min). Not measured: reasoning on, the interactive prompts in a real session, an editor. Two runs per case are a small sample.

## Files

| File | Role |
|---|---|
| `agent.yaml` | The configuration and the system prompt, every setting commented. |
| `README.fr.md` | This document in French. |

## Licence

Gemini CLI is published under the Apache-2.0 licence (Copyright Google LLC). The system prompt in `agent.yaml` is adapted from it.