| 💾 Saved. d722711 k33g 5h ago | 1 | # Tutorial: your first session with mini-me |
| 2 | |
| 3 | By the end of this tutorial, you will have built the `mm` binary, started it against Docker Model Runner, asked it one question that makes it run a shell command, and left cleanly. No prior knowledge of the project is required. |
| 4 | |
| 5 | ## Prerequisites |
| 6 | |
| 7 | - Go 1.25 or later on your `PATH` (`go version` answers). |
| 8 | - Docker Desktop with Docker Model Runner enabled and reachable on `http://localhost:12434`. |
| 9 | - The model named in `agent.yaml` pulled locally. The file shipped with the project names `huggingface.co/jetbrains/mellum2-12b-a2.5b-instruct-gguf-q4_k_m:Q4_K_M`; pull it with `docker model pull <that name>`. |
| 10 | - A terminal open at the root of the repository (the directory that holds `main.go` and `agent.yaml`). |
| 11 | |
| 12 | ## Step 1 — Build the binary |
| 13 | |
| 14 | Type: |
| 15 | |
| 16 | ```bash |
| 17 | go build -o mm . |
| 18 | ``` |
| 19 | |
| 20 | You should see no output at all. A file named `mm` now sits in the current directory. |
| 21 | |
| 22 | We have just compiled the whole agent into a single executable. |
| 23 | |
| 24 | ## Step 2 — Start the agent |
| 25 | |
| 26 | Type: |
| 27 | |
| 28 | ```bash |
| 29 | ./mm |
| 30 | ``` |
| 31 | |
| 32 | You should see a banner like this one (the model name is the one from `agent.yaml`): |
| 33 | |
| 34 | ``` |
| 35 | config: agent.yaml | provider: dmr | model: huggingface.co/jetbrains/mellum2-12b-a2.5b-instruct-gguf-q4_k_m:Q4_K_M | ctx: unknown | tools: bash, read_file, write_file, edit_file | skills: 0 |
| 36 | Agent ready. Commands: "/quit" to exit, "/abort" to stop current generation, "/compact" to compress the history, "/new" to start a new session. |
| 37 | Shortcut: Ctrl+C to abort generation, or Ctrl+C at prompt to quit. |
| 38 | |
| 39 | > |
| 40 | ``` |
| 41 | |
| 42 | If a dimmed `[warning: dmr: nothing answers at …]` line appears above the banner, Docker Model Runner is not running: start it, then run `./mm` again. The agent starts anyway, but the next step would fail. |
| 43 | |
| 44 | We have just loaded the configuration, connected to the model server, and declared the tools the model may call. |
| 45 | |
| 46 | ## Step 3 — Ask a question that needs a command |
| 47 | |
| 48 | At the `>` prompt, type: |
| 49 | |
| 50 | ``` |
| 51 | list the files in this directory |
| 52 | ``` |
| 53 | |
| 54 | You should see, in order: a spinner while the model thinks, a line starting with `🛠️ bash:` showing the command the model chose (typically `ls` or `ls -la`), the first lines of that command's output indented and dimmed, then the model's answer in plain text. The turn ends with a dimmed recap such as: |
| 55 | |
| 56 | ``` |
| 57 | ⚙ 1 command(s) |
| 58 | ``` |
| 59 | |
| 60 | followed by the numbered list of the commands that ran, in green. |
| 61 | |
| 62 | We have just watched the agent loop once: the model asked for a tool, the tool ran, its output went back to the model, and the model answered. |
| 63 | |
| 64 | ## Step 4 — Leave |
| 65 | |
| 66 | At the `>` prompt, type: |
| 67 | |
| 68 | ``` |
| 69 | /quit |
| 70 | ``` |
| 71 | |
| 72 | The program exits. Pressing `Ctrl+C` at the prompt does the same and prints `Goodbye.` first. |
| 73 | |
| 74 | ## What now? |
| 75 | |
| 76 | You have built `mm`, run one tool-calling turn, and exited. To go further: |
| 77 | |
| 78 | - To run it on llama.cpp, host it in an editor, or add skills → see the [how-to guides](../how-to/) |
| 79 | - To look up a flag, a YAML key or a slash command → see the [reference](../reference/) |
| 80 | - To understand how the loop and the two front ends fit together → see the [explanation](../explanation/) |