🛟 Updated.
36b4793 parent: fcfbb59 added
.tickets/issues/0066-mini-me-as-a-sdk.yaml +13 -0 | new file mode 100644 | ||
| @@ -0,0 +1,13 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 66 | |
| 3 | +title: Mini Me as a SDK | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-10-02T05:32:33.878Z | |
| 9 | +updatedAt: 2026-10-02T05:32:33.878Z | |
| 10 | +labels: [] | |
| 11 | +body: "" | |
| 12 | +tasks: [] | |
| 13 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 66 | ||
| 3 | +title: Mini Me as a SDK | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-10-02T05:32:33.878Z | ||
| 9 | +updatedAt: 2026-10-02T05:32:33.878Z | ||
| 10 | +labels: [] | ||
| 11 | +body: "" | ||
| 12 | +tasks: [] | ||
| 13 | +comments: [] | ||
added
.tickets/issues/0067-enable-disable-reasoning-mode.yaml +13 -0 | new file mode 100644 | ||
| @@ -0,0 +1,13 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 67 | |
| 3 | +title: Enable / Disable reasoning mode | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-10-02T06:09:42.599Z | |
| 9 | +updatedAt: 2026-10-02T06:09:42.599Z | |
| 10 | +labels: [] | |
| 11 | +body: "" | |
| 12 | +tasks: [] | |
| 13 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 67 | ||
| 3 | +title: Enable / Disable reasoning mode | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-10-02T06:09:42.599Z | ||
| 9 | +updatedAt: 2026-10-02T06:09:42.599Z | ||
| 10 | +labels: [] | ||
| 11 | +body: "" | ||
| 12 | +tasks: [] | ||
| 13 | +comments: [] | ||
added
.tickets/issues/0068-recall-the-last-commands-last.yaml +13 -0 | new file mode 100644 | ||
| @@ -0,0 +1,13 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 68 | |
| 3 | +title: Recall the last commands (/last) | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-10-02T07:01:13.955Z | |
| 9 | +updatedAt: 2026-10-02T07:01:13.955Z | |
| 10 | +labels: [] | |
| 11 | +body: "" | |
| 12 | +tasks: [] | |
| 13 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 68 | ||
| 3 | +title: Recall the last commands (/last) | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-10-02T07:01:13.955Z | ||
| 9 | +updatedAt: 2026-10-02T07:01:13.955Z | ||
| 10 | +labels: [] | ||
| 11 | +body: "" | ||
| 12 | +tasks: [] | ||
| 13 | +comments: [] | ||
added
.tickets/issues/0069-create-skills-to-search-some-specific-knowlege-o.yaml +14 -0 | new file mode 100644 | ||
| @@ -0,0 +1,14 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 69 | |
| 3 | +title: Create skills to search some specific knowlege on internet | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-10-02T09:26:19.729Z | |
| 9 | +updatedAt: 2026-10-02T09:27:01.494Z | |
| 10 | +labels: [] | |
| 11 | +body: | | |
| 12 | + For example Genkit skill with the appropriate links to the documentation (for fetching) | |
| 13 | +tasks: [] | |
| 14 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 69 | ||
| 3 | +title: Create skills to search some specific knowlege on internet | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-10-02T09:26:19.729Z | ||
| 9 | +updatedAt: 2026-10-02T09:27:01.494Z | ||
| 10 | +labels: [] | ||
| 11 | +body: | | ||
| 12 | + For example Genkit skill with the appropriate links to the documentation (for fetching) | ||
| 13 | +tasks: [] | ||
| 14 | +comments: [] | ||
added
.tickets/issues/0070-add-github-gitlab-other-identity-to-the-mini-me.yaml +13 -0 | new file mode 100644 | ||
| @@ -0,0 +1,13 @@ | ||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | |
| 2 | +id: 70 | |
| 3 | +title: Add GitHub / GitLab / Other ... identity to the Mini Me Agent (but hidden) | |
| 4 | +state: open | |
| 5 | +author: | |
| 6 | + name: k33g | |
| 7 | + email: ph.charriere@gmail.com | |
| 8 | +createdAt: 2026-10-02T14:22:29.427Z | |
| 9 | +updatedAt: 2026-10-02T14:22:29.427Z | |
| 10 | +labels: [] | |
| 11 | +body: "" | |
| 12 | +tasks: [] | |
| 13 | +comments: [] | |
| new file mode 100644 | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | +# Managed by IssueSpec. Hand edits are welcome; keep the schema valid. | ||
| 2 | +id: 70 | ||
| 3 | +title: Add GitHub / GitLab / Other ... identity to the Mini Me Agent (but hidden) | ||
| 4 | +state: open | ||
| 5 | +author: | ||
| 6 | + name: k33g | ||
| 7 | + email: ph.charriere@gmail.com | ||
| 8 | +createdAt: 2026-10-02T14:22:29.427Z | ||
| 9 | +updatedAt: 2026-10-02T14:22:29.427Z | ||
| 10 | +labels: [] | ||
| 11 | +body: "" | ||
| 12 | +tasks: [] | ||
| 13 | +comments: [] | ||
added
agent.llmman.yaml +200 -0 | new file mode 100644 | ||
| @@ -0,0 +1,200 @@ | ||
| 1 | +# Agent settings — mini-me served by llmman (https://github.com/llmmanorg/llmman) | |
| 2 | +# through its OpenAI-compatible endpoint (/v1/chat/completions). | |
| 3 | +# | |
| 4 | +# llmman pull hf.co/unsloth/Qwen3.5-4B-GGUF:Q4_K_M # optional: the first question pulls it otherwise | |
| 5 | +# llmman serve # 127.0.0.1:17434 | |
| 6 | +# | |
| 7 | +# llmman loads the model on the first request (in its own llama-server) and | |
| 8 | +# unloads it after five idle minutes. | |
| 9 | +provider: llmman | |
| 10 | + | |
| 11 | +# The model id exactly as `llmman list` / GET /v1/models spells it. | |
| 12 | +model: huggingface.co/jetbrains/mellum2-12b-a2.5b-instruct-gguf-q4_k_m:Q4_K_M | |
| 13 | +#model: hf.co/ornith-ai/Ornith-1.5-35B-A3B-GGUF:Q4_K_M | |
| 14 | + | |
| 15 | +# `llmman serve`'s default bind; the OpenAI routes sit under /v1. | |
| 16 | +baseUrl: http://127.0.0.1:17434/v1 | |
| 17 | + | |
| 18 | +# From a Docker sandbox, the daemon runs on the host. | |
| 19 | +fallback: http://host.docker.internal:17434/v1 | |
| 20 | + | |
| 21 | +# Only when the daemon was started with LLMMAN_API_KEYS (mandatory when it | |
| 22 | +# listens beyond loopback); unset otherwise. The key never goes in this file. | |
| 23 | +# apiKeyEnv: LLMMAN_API_KEY | |
| 24 | + | |
| 25 | +# The `bash` tool. | |
| 26 | +# `false` removes it: the model can still read and edit files (editTools) and load skills, | |
| 27 | +# but never runs a command. If you turn it off, reword the system prompt below — it says "You have a bash tool". | |
| 28 | +bashTool: true | |
| 29 | + | |
| 30 | +# The built-in file tools: read_file, write_file, edit_file. | |
| 31 | +editTools: true | |
| 32 | + | |
| 33 | +# The built-in plan tool for managing multi-step plans. | |
| 34 | +# Set to false to disable plan creation and tracking via the `plan` tool. | |
| 35 | +planTool: true | |
| 36 | + | |
| 37 | +# Language servers for the `lsp` tool (definition, references, hover, symbols, diagnostics, rename). | |
| 38 | +# The file extension picks the server. A server missing from the PATH is skipped with a warning. | |
| 39 | +# No server listed = no `lsp` tool. Examples (uncomment what you have installed): | |
| 40 | +# lsp: | |
| 41 | +# servers: | |
| 42 | +# - name: gopls | |
| 43 | +# command: gopls | |
| 44 | +# extensions: [".go"] | |
| 45 | +# - name: typescript | |
| 46 | +# command: typescript-language-server | |
| 47 | +# args: ["--stdio"] | |
| 48 | +# extensions: [".ts", ".tsx", ".js", ".jsx"] | |
| 49 | +# - name: python | |
| 50 | +# command: pyright-langserver | |
| 51 | +# args: ["--stdio"] | |
| 52 | +# extensions: [".py"] | |
| 53 | +# - name: rust | |
| 54 | +# command: rust-analyzer | |
| 55 | +# extensions: [".rs"] | |
| 56 | + | |
| 57 | +# How many tokens the server actually serves. | |
| 58 | +# 0 = ask llmman: /api/ps tells it once the model is loaded, so the window is | |
| 59 | +# learned before the second question. Set it here if you want it from the start | |
| 60 | +# — and to the same value as LLMMAN_CONTEXT_LENGTH if you set that variable. | |
| 61 | +contextWindow: 0 | |
| 62 | + | |
| 63 | +# Max number of characters a tool returns to the model. | |
| 64 | +# Context safeguard: beyond that, the output is truncated (beginning + end kept). | |
| 65 | +maxOutput: 16000 | |
| 66 | + | |
| 67 | +# Max number of model <-> tools round trips for a single question. | |
| 68 | +# Raise it for tasks that need long chains of commands. | |
| 69 | +maxTurns: 40 | |
| 70 | + | |
| 71 | +# Where the `read_skill` tool looks for its markdown procedures. | |
| 72 | +# The path is relative to the CURRENT DIRECTORY: run the agent from demo-llmman/. | |
| 73 | +# skillsDir: ../skills | |
| 74 | + | |
| 75 | +# Persistent sessions, per project. | |
| 76 | +# When enabled, every conversation is saved as one JSON file under `dir`. | |
| 77 | +# `/sessions` lists them, `/resume` continues one; in an editor, "Reload Agent" replays the thread. | |
| 78 | +sessions: | |
| 79 | + enabled: true | |
| 80 | + dir: .mm/sessions | |
| 81 | + | |
| 82 | +# How many lines of a command's output are echoed to the terminal. | |
| 83 | +# 0 disables it. | |
| 84 | +previewLines: 20 | |
| 85 | + | |
| 86 | +displayCommands: true | |
| 87 | +# Show what a thinking model reasons about before it answers (dim italic in the | |
| 88 | +# terminal, its own style in the window, a thought chunk in an editor). | |
| 89 | +# The reasoning is always READ — it is what keeps the watchdog alive while the | |
| 90 | +# model thinks — this only says whether to show it. | |
| 91 | +showThinking: true | |
| 92 | + | |
| 93 | + | |
| 94 | +# The system prompt: what the agent is, and what it is allowed to do. | |
| 95 | +# This is the knob to play with — it is the shortest path to changing behaviour. | |
| 96 | +system: | | |
| 97 | + Your name is Bob. | |
| 98 | + You are a coding agent working in a terminal. | |
| 99 | + You have a "bash" tool to run shell commands. | |
| 100 | + Use it to explore files, run tests, inspect the repository, etc. | |
| 101 | + Chain several commands if needed, then answer clearly in English. | |
| 102 | + | |
| 103 | + A request often mixes things you answer from yourself ("say hello") with | |
| 104 | + things only a command can answer ("list the files"). Handle every part, in | |
| 105 | + the order asked, and run a command for each part that needs one. | |
| 106 | + Never state the contents of a file, the output of a command, or the state of | |
| 107 | + the repository unless a command in THIS answer returned it. What you did not | |
| 108 | + read, you do not know: run the command instead of recalling it. | |
| 109 | + | |
| 110 | + SKILLS | |
| 111 | + You have a second tool, `read_skill`. Its description lists the procedures | |
| 112 | + available for this project — one per kind of task. | |
| 113 | + | |
| 114 | + Any request to DO something to a Go project is a skill, not a shell command | |
| 115 | + you invent. Match the request against that list, call `read_skill` FIRST, | |
| 116 | + before any bash command, and then follow what it says step by step. | |
| 117 | + | |
| 118 | + FILE EDITING | |
| 119 | + You have three tools for files: `read_file`, `edit_file` and `write_file`. | |
| 120 | + They are how a file gets read and changed here: each change is exact, | |
| 121 | + checked before it is written, and comes back as a diff with line numbers. | |
| 122 | + bash is for running things — building, testing, listing, searching. | |
| 123 | + | |
| 124 | + - Read before you write: call `read_file` on the file (numbered=true when | |
| 125 | + you need line numbers). You cannot target text you have not seen; never | |
| 126 | + rely on what you think you remember about a file. | |
| 127 | + - To change an existing file, call `edit_file` with one or more {old, new} | |
| 128 | + pairs. `old` is copied from the file character for character — same | |
| 129 | + spaces, same indentation, same line breaks — and appears exactly once: | |
| 130 | + add the surrounding lines until it is unique. Several pairs are applied | |
| 131 | + together, against the original file. An empty `new` deletes the text. | |
| 132 | + - Call `write_file` only to create a file, or to rewrite one entirely and | |
| 133 | + on purpose. On an existing file it replaces everything, including what | |
| 134 | + you did not intend to touch. | |
| 135 | + - Read the diff the tool returns: it says exactly what changed and on which | |
| 136 | + line. If `edit_file` refuses — text not found, ambiguous, overlapping | |
| 137 | + edits — read the file again and fix `old`. Do not fall back to | |
| 138 | + `write_file` to force the change through. | |
| 139 | + - After editing code, run the narrowest check with bash: the formatter, the | |
| 140 | + compiler, or the test covering that file. | |
| 141 | + | |
| 142 | + RULES | |
| 143 | + - Keep everything the file already does, unless the user asked to remove it. | |
| 144 | + - Touch only the files the request is about. Do not add tests, files or | |
| 145 | + features that were not asked for. | |
| 146 | + - Never run a git command unless the user says git, commit or push. | |
| 147 | + - Never move, rename or delete a file unless the user asked for it. | |
| 148 | + - Then answer in English, in a few lines. | |
| 149 | + - If you don't know how to use a <cli>, run `<cli> --help` (or `<cli> help`) | |
| 150 | + to understand the options, then run the command. | |
| 151 | + | |
| 152 | + BACKGROUND JOBS | |
| 153 | + Never let a command block the answer. Anything that serves, watches or runs | |
| 154 | + long goes to the background, with BOTH streams redirected and its pid kept: | |
| 155 | + | |
| 156 | + nohup <command> > /tmp/<job>.log 2>&1 & echo $! > /tmp/<job>.pid | |
| 157 | + | |
| 158 | + Redirecting only stdout still blocks until the process exits. Read the | |
| 159 | + `bg-jobs` skill before you wait on, inspect or stop such a job — each has a | |
| 160 | + rule you cannot guess. Stop every job you started before you finish, and say | |
| 161 | + which ones you left running. | |
| 162 | + | |
| 163 | +# Generation settings (OpenAI API keys). Low temperature for a coding agent: | |
| 164 | +# we want precise and reproducible answers, not creativity. | |
| 165 | +sampling: | |
| 166 | + temperature: 0.0 | |
| 167 | + parallel_tool_calls: false | |
| 168 | + top_p: 0.9 | |
| 169 | + max_tokens: 4096 | |
| 170 | + | |
| 171 | +# Silence allowed between two tokens once the answer has started. | |
| 172 | +watchdogTimeout: 30s | |
| 173 | + | |
| 174 | +# Silence allowed while the model reads the prompt, before the first token: | |
| 175 | +# on a laptop a 25k-token prompt can take minutes. llama-server reports its | |
| 176 | +# progress meanwhile, through llmman ("Reading the prompt 12.0k/25.3k tokens"), and each report | |
| 177 | +# restarts this clock, so it only has to cover one batch of the prompt. | |
| 178 | +firstTokenTimeout: 3m | |
| 179 | + | |
| 180 | +# Context compression. | |
| 181 | +# ON here: the agent learns the window from /api/ps, so `threshold` has a number to apply to. | |
| 182 | +context: | |
| 183 | + enabled: true | |
| 184 | + | |
| 185 | + # Compress when the history reaches this share of the window. | |
| 186 | + threshold: 75 | |
| 187 | + | |
| 188 | + # Fallback on the message count, for when the window is unknown. | |
| 189 | + # One command costs 2 messages (call + response), so 80 is roughly 30 commands of history. | |
| 190 | + maxMessages: 80 | |
| 191 | + | |
| 192 | + # How many recent questions (with their commands and answers) are kept as-is instead of being summarised. | |
| 193 | + # The model works on the last few turns, so summarising them would make it redo what it just did. | |
| 194 | + keepLastTurns: 3 | |
| 195 | + | |
| 196 | + # max_tokens of the summary request. Reasoning is turned off for it on this provider | |
| 197 | + # (a thinking model would otherwise spend the budget thinking and write nothing). | |
| 198 | + summaryMaxTokens: 1200 | |
| 199 | + | |
| 200 | + showStats: true | |
| new file mode 100644 | |||
| @@ -0,0 +1,200 @@ | |||
| 1 | +# Agent settings — mini-me served by llmman (https://github.com/llmmanorg/llmman) | ||
| 2 | +# through its OpenAI-compatible endpoint (/v1/chat/completions). | ||
| 3 | +# | ||
| 4 | +# llmman pull hf.co/unsloth/Qwen3.5-4B-GGUF:Q4_K_M # optional: the first question pulls it otherwise | ||
| 5 | +# llmman serve # 127.0.0.1:17434 | ||
| 6 | +# | ||
| 7 | +# llmman loads the model on the first request (in its own llama-server) and | ||
| 8 | +# unloads it after five idle minutes. | ||
| 9 | +provider: llmman | ||
| 10 | + | ||
| 11 | +# The model id exactly as `llmman list` / GET /v1/models spells it. | ||
| 12 | +model: huggingface.co/jetbrains/mellum2-12b-a2.5b-instruct-gguf-q4_k_m:Q4_K_M | ||
| 13 | +#model: hf.co/ornith-ai/Ornith-1.5-35B-A3B-GGUF:Q4_K_M | ||
| 14 | + | ||
| 15 | +# `llmman serve`'s default bind; the OpenAI routes sit under /v1. | ||
| 16 | +baseUrl: http://127.0.0.1:17434/v1 | ||
| 17 | + | ||
| 18 | +# From a Docker sandbox, the daemon runs on the host. | ||
| 19 | +fallback: http://host.docker.internal:17434/v1 | ||
| 20 | + | ||
| 21 | +# Only when the daemon was started with LLMMAN_API_KEYS (mandatory when it | ||
| 22 | +# listens beyond loopback); unset otherwise. The key never goes in this file. | ||
| 23 | +# apiKeyEnv: LLMMAN_API_KEY | ||
| 24 | + | ||
| 25 | +# The `bash` tool. | ||
| 26 | +# `false` removes it: the model can still read and edit files (editTools) and load skills, | ||
| 27 | +# but never runs a command. If you turn it off, reword the system prompt below — it says "You have a bash tool". | ||
| 28 | +bashTool: true | ||
| 29 | + | ||
| 30 | +# The built-in file tools: read_file, write_file, edit_file. | ||
| 31 | +editTools: true | ||
| 32 | + | ||
| 33 | +# The built-in plan tool for managing multi-step plans. | ||
| 34 | +# Set to false to disable plan creation and tracking via the `plan` tool. | ||
| 35 | +planTool: true | ||
| 36 | + | ||
| 37 | +# Language servers for the `lsp` tool (definition, references, hover, symbols, diagnostics, rename). | ||
| 38 | +# The file extension picks the server. A server missing from the PATH is skipped with a warning. | ||
| 39 | +# No server listed = no `lsp` tool. Examples (uncomment what you have installed): | ||
| 40 | +# lsp: | ||
| 41 | +# servers: | ||
| 42 | +# - name: gopls | ||
| 43 | +# command: gopls | ||
| 44 | +# extensions: [".go"] | ||
| 45 | +# - name: typescript | ||
| 46 | +# command: typescript-language-server | ||
| 47 | +# args: ["--stdio"] | ||
| 48 | +# extensions: [".ts", ".tsx", ".js", ".jsx"] | ||
| 49 | +# - name: python | ||
| 50 | +# command: pyright-langserver | ||
| 51 | +# args: ["--stdio"] | ||
| 52 | +# extensions: [".py"] | ||
| 53 | +# - name: rust | ||
| 54 | +# command: rust-analyzer | ||
| 55 | +# extensions: [".rs"] | ||
| 56 | + | ||
| 57 | +# How many tokens the server actually serves. | ||
| 58 | +# 0 = ask llmman: /api/ps tells it once the model is loaded, so the window is | ||
| 59 | +# learned before the second question. Set it here if you want it from the start | ||
| 60 | +# — and to the same value as LLMMAN_CONTEXT_LENGTH if you set that variable. | ||
| 61 | +contextWindow: 0 | ||
| 62 | + | ||
| 63 | +# Max number of characters a tool returns to the model. | ||
| 64 | +# Context safeguard: beyond that, the output is truncated (beginning + end kept). | ||
| 65 | +maxOutput: 16000 | ||
| 66 | + | ||
| 67 | +# Max number of model <-> tools round trips for a single question. | ||
| 68 | +# Raise it for tasks that need long chains of commands. | ||
| 69 | +maxTurns: 40 | ||
| 70 | + | ||
| 71 | +# Where the `read_skill` tool looks for its markdown procedures. | ||
| 72 | +# The path is relative to the CURRENT DIRECTORY: run the agent from demo-llmman/. | ||
| 73 | +# skillsDir: ../skills | ||
| 74 | + | ||
| 75 | +# Persistent sessions, per project. | ||
| 76 | +# When enabled, every conversation is saved as one JSON file under `dir`. | ||
| 77 | +# `/sessions` lists them, `/resume` continues one; in an editor, "Reload Agent" replays the thread. | ||
| 78 | +sessions: | ||
| 79 | + enabled: true | ||
| 80 | + dir: .mm/sessions | ||
| 81 | + | ||
| 82 | +# How many lines of a command's output are echoed to the terminal. | ||
| 83 | +# 0 disables it. | ||
| 84 | +previewLines: 20 | ||
| 85 | + | ||
| 86 | +displayCommands: true | ||
| 87 | +# Show what a thinking model reasons about before it answers (dim italic in the | ||
| 88 | +# terminal, its own style in the window, a thought chunk in an editor). | ||
| 89 | +# The reasoning is always READ — it is what keeps the watchdog alive while the | ||
| 90 | +# model thinks — this only says whether to show it. | ||
| 91 | +showThinking: true | ||
| 92 | + | ||
| 93 | + | ||
| 94 | +# The system prompt: what the agent is, and what it is allowed to do. | ||
| 95 | +# This is the knob to play with — it is the shortest path to changing behaviour. | ||
| 96 | +system: | | ||
| 97 | + Your name is Bob. | ||
| 98 | + You are a coding agent working in a terminal. | ||
| 99 | + You have a "bash" tool to run shell commands. | ||
| 100 | + Use it to explore files, run tests, inspect the repository, etc. | ||
| 101 | + Chain several commands if needed, then answer clearly in English. | ||
| 102 | + | ||
| 103 | + A request often mixes things you answer from yourself ("say hello") with | ||
| 104 | + things only a command can answer ("list the files"). Handle every part, in | ||
| 105 | + the order asked, and run a command for each part that needs one. | ||
| 106 | + Never state the contents of a file, the output of a command, or the state of | ||
| 107 | + the repository unless a command in THIS answer returned it. What you did not | ||
| 108 | + read, you do not know: run the command instead of recalling it. | ||
| 109 | + | ||
| 110 | + SKILLS | ||
| 111 | + You have a second tool, `read_skill`. Its description lists the procedures | ||
| 112 | + available for this project — one per kind of task. | ||
| 113 | + | ||
| 114 | + Any request to DO something to a Go project is a skill, not a shell command | ||
| 115 | + you invent. Match the request against that list, call `read_skill` FIRST, | ||
| 116 | + before any bash command, and then follow what it says step by step. | ||
| 117 | + | ||
| 118 | + FILE EDITING | ||
| 119 | + You have three tools for files: `read_file`, `edit_file` and `write_file`. | ||
| 120 | + They are how a file gets read and changed here: each change is exact, | ||
| 121 | + checked before it is written, and comes back as a diff with line numbers. | ||
| 122 | + bash is for running things — building, testing, listing, searching. | ||
| 123 | + | ||
| 124 | + - Read before you write: call `read_file` on the file (numbered=true when | ||
| 125 | + you need line numbers). You cannot target text you have not seen; never | ||
| 126 | + rely on what you think you remember about a file. | ||
| 127 | + - To change an existing file, call `edit_file` with one or more {old, new} | ||
| 128 | + pairs. `old` is copied from the file character for character — same | ||
| 129 | + spaces, same indentation, same line breaks — and appears exactly once: | ||
| 130 | + add the surrounding lines until it is unique. Several pairs are applied | ||
| 131 | + together, against the original file. An empty `new` deletes the text. | ||
| 132 | + - Call `write_file` only to create a file, or to rewrite one entirely and | ||
| 133 | + on purpose. On an existing file it replaces everything, including what | ||
| 134 | + you did not intend to touch. | ||
| 135 | + - Read the diff the tool returns: it says exactly what changed and on which | ||
| 136 | + line. If `edit_file` refuses — text not found, ambiguous, overlapping | ||
| 137 | + edits — read the file again and fix `old`. Do not fall back to | ||
| 138 | + `write_file` to force the change through. | ||
| 139 | + - After editing code, run the narrowest check with bash: the formatter, the | ||
| 140 | + compiler, or the test covering that file. | ||
| 141 | + | ||
| 142 | + RULES | ||
| 143 | + - Keep everything the file already does, unless the user asked to remove it. | ||
| 144 | + - Touch only the files the request is about. Do not add tests, files or | ||
| 145 | + features that were not asked for. | ||
| 146 | + - Never run a git command unless the user says git, commit or push. | ||
| 147 | + - Never move, rename or delete a file unless the user asked for it. | ||
| 148 | + - Then answer in English, in a few lines. | ||
| 149 | + - If you don't know how to use a <cli>, run `<cli> --help` (or `<cli> help`) | ||
| 150 | + to understand the options, then run the command. | ||
| 151 | + | ||
| 152 | + BACKGROUND JOBS | ||
| 153 | + Never let a command block the answer. Anything that serves, watches or runs | ||
| 154 | + long goes to the background, with BOTH streams redirected and its pid kept: | ||
| 155 | + | ||
| 156 | + nohup <command> > /tmp/<job>.log 2>&1 & echo $! > /tmp/<job>.pid | ||
| 157 | + | ||
| 158 | + Redirecting only stdout still blocks until the process exits. Read the | ||
| 159 | + `bg-jobs` skill before you wait on, inspect or stop such a job — each has a | ||
| 160 | + rule you cannot guess. Stop every job you started before you finish, and say | ||
| 161 | + which ones you left running. | ||
| 162 | + | ||
| 163 | +# Generation settings (OpenAI API keys). Low temperature for a coding agent: | ||
| 164 | +# we want precise and reproducible answers, not creativity. | ||
| 165 | +sampling: | ||
| 166 | + temperature: 0.0 | ||
| 167 | + parallel_tool_calls: false | ||
| 168 | + top_p: 0.9 | ||
| 169 | + max_tokens: 4096 | ||
| 170 | + | ||
| 171 | +# Silence allowed between two tokens once the answer has started. | ||
| 172 | +watchdogTimeout: 30s | ||
| 173 | + | ||
| 174 | +# Silence allowed while the model reads the prompt, before the first token: | ||
| 175 | +# on a laptop a 25k-token prompt can take minutes. llama-server reports its | ||
| 176 | +# progress meanwhile, through llmman ("Reading the prompt 12.0k/25.3k tokens"), and each report | ||
| 177 | +# restarts this clock, so it only has to cover one batch of the prompt. | ||
| 178 | +firstTokenTimeout: 3m | ||
| 179 | + | ||
| 180 | +# Context compression. | ||
| 181 | +# ON here: the agent learns the window from /api/ps, so `threshold` has a number to apply to. | ||
| 182 | +context: | ||
| 183 | + enabled: true | ||
| 184 | + | ||
| 185 | + # Compress when the history reaches this share of the window. | ||
| 186 | + threshold: 75 | ||
| 187 | + | ||
| 188 | + # Fallback on the message count, for when the window is unknown. | ||
| 189 | + # One command costs 2 messages (call + response), so 80 is roughly 30 commands of history. | ||
| 190 | + maxMessages: 80 | ||
| 191 | + | ||
| 192 | + # How many recent questions (with their commands and answers) are kept as-is instead of being summarised. | ||
| 193 | + # The model works on the last few turns, so summarising them would make it redo what it just did. | ||
| 194 | + keepLastTurns: 3 | ||
| 195 | + | ||
| 196 | + # max_tokens of the summary request. Reasoning is turned off for it on this provider | ||
| 197 | + # (a thinking model would otherwise spend the budget thinking and write nothing). | ||
| 198 | + summaryMaxTokens: 1200 | ||
| 199 | + | ||
| 200 | + showStats: true | ||