# Tutorial: your first session with mini-me 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. ## Prerequisites - Go 1.25 or later on your `PATH` (`go version` answers). - Docker Desktop with Docker Model Runner enabled and reachable on `http://localhost:12434`. - 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 `. - A terminal open at the root of the repository (the directory that holds `main.go` and `agent.yaml`). ## Step 1 — Build the binary Type: ```bash go build -o mm . ``` You should see no output at all. A file named `mm` now sits in the current directory. We have just compiled the whole agent into a single executable. ## Step 2 — Start the agent Type: ```bash ./mm ``` You should see a banner like this one (the model name is the one from `agent.yaml`): ``` 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 Agent ready. Commands: "/quit" to exit, "/abort" to stop current generation, "/compact" to compress the history, "/new" to start a new session. Shortcut: Ctrl+C to abort generation, or Ctrl+C at prompt to quit. > ``` 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. We have just loaded the configuration, connected to the model server, and declared the tools the model may call. ## Step 3 — Ask a question that needs a command At the `>` prompt, type: ``` list the files in this directory ``` 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: ``` ⚙ 1 command(s) ``` followed by the numbered list of the commands that ran, in green. 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. ## Step 4 — Leave At the `>` prompt, type: ``` /quit ``` The program exits. Pressing `Ctrl+C` at the prompt does the same and prints `Goodbye.` first. ## What now? You have built `mm`, run one tool-calling turn, and exited. To go further: - To run it on llama.cpp, host it in an editor, or add skills → see the [how-to guides](../how-to/) - To look up a flag, a YAML key or a slash command → see the [reference](../reference/) - To understand how the loop and the two front ends fit together → see the [explanation](../explanation/)