Gemini-style — a coding agent with Gemini CLI's system prompt
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
PATHis a warning in the banner and is skipped; with none installed, the tool is not declared and the agent usesgrep. - A server starts on the first
lspcall 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.jsonortsconfig.json; without one each file is seen alone andreferences/renamemiss the other files. TypeScript 7 serves the protocol itself; with TypeScript 5, usetypescript-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.rsthe firstgreetcan 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 withenable_thinking: true. The demo writesfalseout (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 |
|