mini-coder 0.5.12 → 0.5.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/BENCHMARK.md CHANGED
@@ -1,10 +1,16 @@
1
+ # CORE GOAL
2
+
3
+ **Terminal-Bench is a signal, not the product. The target is a better coding agent, not a higher benchmark score from benchmark-shaped patches.**
4
+
5
+ - Do not add fixes to fix an issue with specific terminal bench evals, focus on improving the agent's behaviour.
6
+ - Benchmarks run headless mode in one shot. Make sure you use `tmux` often to check that the TUI and multiturn UX is still
7
+ good.
8
+
1
9
  # Benchmark workflow
2
10
 
3
11
  Use this as the default tuning loop for `mini-coder` on Terminal-Bench.
4
12
 
5
- The goal is not to rerun the whole benchmark after every change. The goal is to get fast enough feedback that small prompt / loop / tool-use changes can be judged quickly, then promote only the promising ones to bigger runs.
6
-
7
- Terminal-Bench is a signal, not the product. The target is a better coding agent, not a higher benchmark score from benchmark-shaped patches.
13
+ The goal is not to rerun the whole benchmark after every change. The goal is to get fast enough feedback that small changes can be judged quickly, then promote only the promising ones to bigger runs.
8
14
 
9
15
  ## Principles
10
16
 
@@ -19,39 +25,8 @@ Terminal-Bench is a signal, not the product. The target is a better coding agent
19
25
 
20
26
  ## Suites
21
27
 
22
- ### 1. Guardrail suite
23
-
24
- Use this to catch regressions on known-good behavior.
25
-
26
- Tasks:
27
-
28
- - `cancel-async-tasks`
29
- - `bn-fit-modify`
30
- - `sparql-university`
31
- - `extract-elf`
32
-
33
- Settings:
34
-
35
- - `1` attempt
36
- - `2` concurrent
37
- - `0` retries
38
-
39
- Estimated wall time:
40
-
41
- - about `8–10 minutes`
42
-
43
- ### 2. Fast suite
44
-
45
- Use this after almost every small change.
46
-
47
- Tasks:
48
-
49
- - `polyglot-rust-c`
50
- - `overfull-hbox`
51
- - `gcode-to-text`
52
- - `mteb-retrieve`
53
- - `dna-insert`
54
- - `torch-tensor-parallelism`
28
+ There is a full 89 test baseline run with 2 attemps in the teminal-bench folder. Use the evals in it
29
+ to determine your fast evals to start your optimization process and iterations.
55
30
 
56
31
  Settings:
57
32
 
@@ -59,67 +34,6 @@ Settings:
59
34
  - `2` concurrent
60
35
  - `0` retries
61
36
 
62
- Estimated wall time:
63
-
64
- - about `44 minutes`
65
-
66
- ### 3. Focused suite
67
-
68
- Use this only if a change looks good on the fast suite.
69
-
70
- Tasks:
71
-
72
- - `polyglot-rust-c`
73
- - `overfull-hbox`
74
- - `gcode-to-text`
75
- - `mteb-retrieve`
76
- - `torch-tensor-parallelism`
77
- - `filter-js-from-html`
78
- - `configure-git-webserver`
79
- - `qemu-alpine-ssh`
80
-
81
- Settings:
82
-
83
- - `2` attempts
84
- - `2` concurrent
85
- - `0` retries
86
-
87
- Estimated wall time:
88
-
89
- - about `1.1 hours`
90
-
91
- ### 4. Broad promotion suite
92
-
93
- Use this after 1–3 promising changes, or overnight.
94
-
95
- Options:
96
-
97
- - rerun recent failures
98
- - wider local failure suite
99
- - full leaderboard-style run
100
-
101
- Typical settings for rerunning recent failures:
102
-
103
- - `4` attempts
104
- - `2` concurrent
105
- - `0` retries
106
-
107
- ## Baseline procedure
108
-
109
- Before changing code:
110
-
111
- 1. run the guardrail suite
112
- 2. run the fast suite
113
- 3. run the fast suite again
114
-
115
- That gives a fresh local baseline for:
116
-
117
- - pass count
118
- - runtime
119
- - variance / noise
120
-
121
- Do not compare a new change only against an old run from days ago if a fresh same-HEAD baseline is available.
122
-
123
37
  ## Experiment quality bar
124
38
 
125
39
  Before changing code, write the hypothesis in two layers:
@@ -133,13 +47,6 @@ Only run an experiment if you can answer all of these:
133
47
  - why should that help outside Terminal-Bench?
134
48
  - what would make this change obviously overfit?
135
49
 
136
- Good experiment themes:
137
-
138
- - verification-equivalence before completion
139
- - artifact-grounded verification of final outputs
140
- - preferring a task-named local source of truth over approximations
141
- - reducing shell thrash before first meaningful verification
142
-
143
50
  Reject or redesign experiments that:
144
51
 
145
52
  - depend on benchmark-specific task names, file names, package names, or tool names in product logic
@@ -162,108 +69,13 @@ For each change:
162
69
  5. form **one** narrow hypothesis
163
70
  6. make **one** small change
164
71
  7. run:
165
- - guardrails
166
72
  - fast suite
167
- 8. compare to baseline
73
+ 8. compare to baseline or your reference run
168
74
  9. decide:
169
75
  - keep
170
76
  - revert
171
77
  - refine
172
78
 
173
- Only run the focused suite if:
174
-
175
- - the fast suite improved, and
176
- - the guardrails did not regress
177
-
178
- Only run the broad promotion suite if:
179
-
180
- - the focused suite also looks good, or
181
- - enough promising changes have accumulated to justify it
182
-
183
- ## Decision rules
184
-
185
- Treat the fast suite as a noisy but useful signal.
186
-
187
- For the 12-trial fast suite:
188
-
189
- - `+2` or more passes: probably meaningful improvement
190
- - `-2` or more passes: probably meaningful regression
191
- - `±1`: likely noise unless it repeats
192
-
193
- Keep a change if:
194
-
195
- - the fast suite improves materially
196
- - guardrails do not regress
197
- - the result repeats on another fast-suite rerun
198
- - the mechanism is still a general agent-quality improvement, not just a benchmark-specific patch
199
-
200
- Revert a change if:
201
-
202
- - it clearly loses fast-suite passes, or
203
- - it regresses guardrails
204
-
205
- Call it inconclusive if:
206
-
207
- - the delta is tiny and does not repeat
208
-
209
- Also prefer:
210
-
211
- - a smaller, more general improvement over a larger but obviously benchmark-specific patch
212
- - a clearly exercised mechanism over a theory that never fired in the target runs
213
-
214
- ## Failure buckets to optimize against
215
-
216
- Use these as the main buckets when inspecting logs:
217
-
218
- ### Exact-contract / cleanup misses
219
-
220
- Examples:
221
-
222
- - right artifact, wrong path
223
- - right output plus extra junk
224
- - correct core work, but violates a strict file / in-place requirement
225
-
226
- ### Verification-equivalence / premature completion
227
-
228
- Examples:
229
-
230
- - waited too long to run a meaningful check
231
- - never checked the exact contract
232
- - stopped after a weaker non-equivalent check
233
- - verified the intended design instead of the written artifact
234
-
235
- ### Source-of-truth selection gaps
236
-
237
- Examples:
238
-
239
- - task names an exact local tool/package/interface, but the agent uses an approximation instead
240
- - lower-level library reasoning replaces package-local or task-local semantics
241
-
242
- ### Over-exploration / shell thrash
243
-
244
- Examples:
245
-
246
- - too many shell / read steps before first write
247
- - repeated discovery commands without narrowing the problem
248
-
249
- ### Persistent correctness gaps
250
-
251
- Examples:
252
-
253
- - `torch-tensor-parallelism`
254
- - `filter-js-from-html`
255
- - `configure-git-webserver`
256
-
257
- ### Long-horizon / timeout-heavy tasks
258
-
259
- These are useful for promotion runs, not tight inner loops.
260
- Examples:
261
-
262
- - `gpt2-codegolf`
263
- - `query-optimize`
264
- - `winning-avg-corewars`
265
- - `train-fasttext`
266
-
267
79
  ## Behavior analysis requirements
268
80
 
269
81
  Behavior analysis depends on structured agent logs.
@@ -281,128 +93,15 @@ Per trial, keep:
281
93
  - structured `agent/mini-coder.ndjson`
282
94
  - timestamps
283
95
 
284
- With those artifacts, analyze things like:
285
-
286
- - time to first tool call
287
- - time to first edit
288
- - number of `shell` / `read` / `grep` / `edit` calls
289
- - whether the agent ran a verifier-like shell command
290
- - whether it used the named local source of truth when one was available
291
- - whether it verified the final artifact it actually wrote
292
- - whether a dynamic intervention visibly exercised
293
- - whether it had a local pass before ending
294
- - whether it kept changing files after a pass-worthy state
295
- - whether it left extra artifacts
296
-
297
- ## Commands
298
-
299
- ### Guardrail suite
300
-
301
- ```bash
302
- GUARDRAIL_TASKS=(
303
- cancel-async-tasks
304
- bn-fit-modify
305
- sparql-university
306
- extract-elf
307
- )
308
-
309
- cmd=(
310
- harbor run -y
311
- --job-name local-guardrails-$(date +%F__%H-%M-%S)
312
- --jobs-dir "$PWD/terminal-bench/jobs"
313
- --agent-import-path mini_coder_local_agent:MiniCoderLocalAgent
314
- --model openai-codex/gpt-5.4
315
- --dataset terminal-bench@2.0
316
- --n-attempts 1
317
- --n-concurrent 2
318
- --max-retries 0
319
- )
320
-
321
- for t in "${GUARDRAIL_TASKS[@]}"; do
322
- cmd+=(--include-task-name "$t")
323
- done
324
-
325
- PYTHONPATH="$PWD/terminal-bench" "${cmd[@]}"
326
- ```
327
-
328
- ### Fast suite
329
-
330
- ```bash
331
- FAST_TASKS=(
332
- polyglot-rust-c
333
- overfull-hbox
334
- gcode-to-text
335
- mteb-retrieve
336
- dna-insert
337
- torch-tensor-parallelism
338
- )
339
-
340
- cmd=(
341
- harbor run -y
342
- --job-name local-fast-$(date +%F__%H-%M-%S)
343
- --jobs-dir "$PWD/terminal-bench/jobs"
344
- --agent-import-path mini_coder_local_agent:MiniCoderLocalAgent
345
- --model openai-codex/gpt-5.4
346
- --dataset terminal-bench@2.0
347
- --n-attempts 2
348
- --n-concurrent 2
349
- --max-retries 0
350
- )
351
-
352
- for t in "${FAST_TASKS[@]}"; do
353
- cmd+=(--include-task-name "$t")
354
- done
355
-
356
- PYTHONPATH="$PWD/terminal-bench" "${cmd[@]}"
357
- ```
358
-
359
- ### Focused suite
360
-
361
- ```bash
362
- FOCUS_TASKS=(
363
- polyglot-rust-c
364
- overfull-hbox
365
- gcode-to-text
366
- mteb-retrieve
367
- torch-tensor-parallelism
368
- filter-js-from-html
369
- configure-git-webserver
370
- qemu-alpine-ssh
371
- )
372
-
373
- cmd=(
374
- harbor run -y
375
- --job-name local-focus-$(date +%F__%H-%M-%S)
376
- --jobs-dir "$PWD/terminal-bench/jobs"
377
- --agent-import-path mini_coder_local_agent:MiniCoderLocalAgent
378
- --model openai-codex/gpt-5.4
379
- --dataset terminal-bench@2.0
380
- --n-attempts 2
381
- --n-concurrent 2
382
- --max-retries 0
383
- )
384
-
385
- for t in "${FOCUS_TASKS[@]}"; do
386
- cmd+=(--include-task-name "$t")
387
- done
388
-
389
- PYTHONPATH="$PWD/terminal-bench" "${cmd[@]}"
390
- ```
391
-
392
96
  ## Minimal experiment log format
393
97
 
98
+ You are running in a loop, make sure to keep your progress tracked so you
99
+ can continue between loop iterations, this is to avoid context pressure.:w
394
100
  Keep this in `PROGRESS.md`, a final summary for each completed change:
395
101
 
396
102
  - benchmark symptom
397
103
  - general behavior gap
398
104
  - why this should help outside Terminal-Bench
399
- - overfitting risk / why this is still general
400
- - trigger evidence, if relevant
401
105
  - hypothesis
402
- - files changed
403
- - local verification
404
- - guardrail result
405
- - fast-suite result
406
- - focused-suite result, if run
407
- - mechanism exercised?
106
+ - verification method
408
107
  - keep / revert / refine (Make the decision very visible in the file).
package/PROGRESS.md CHANGED
@@ -1,5 +1,4 @@
1
1
  # CURRENT TASK PROGRESS
2
2
 
3
- - Benchmark loop stopped.
4
- - In-progress experiment changes reverted.
5
3
  - Progress reset for a fresh benchmark restart.
4
+ - Benchmark for baseline is running (command in `benchmark-baseline.sh`)
package/README.md CHANGED
@@ -39,7 +39,7 @@ $ mc
39
39
 
40
40
  ## Tools
41
41
 
42
- Six built-in tools, plus a conditional read-only image tool:
42
+ Six built-in tools, plus a conditional read-only image tool and any configured MCP tools:
43
43
 
44
44
  - **`shell`** — runs commands in the user's shell. Returns stdout, stderr, and exit code. Large output is truncated to protect model context.
45
45
  - **`read`** — reads UTF-8 text files from disk, optionally by line window.
@@ -48,8 +48,7 @@ Six built-in tools, plus a conditional read-only image tool:
48
48
  - **`todoWrite`** — creates or updates the session todo list incrementally and returns the full current snapshot.
49
49
  - **`todoRead`** — returns the full current session todo list snapshot.
50
50
  - **`readImage`** — reads PNG, JPEG, GIF, and WebP files as model input. Only registered when the active model supports images.
51
-
52
- Plugins can add more tools, but the core stays intentionally small.
51
+ - **Configured MCP tools** — tools discovered from `settings.json` Streamable HTTP MCP servers. Imported tool names are prefixed with the server name, for example `docs__search`.
53
52
 
54
53
  ## Features
55
54
 
@@ -58,25 +57,27 @@ Plugins can add more tools, but the core stays intentionally small.
58
57
  - **Session persistence** — SQLite-backed sessions with undo, fork, resume, and cumulative usage stats. Sessions are scoped to the working directory.
59
58
  - **Reasoning and verbosity controls** — toggle thinking visibility and verbose tool rendering on demand. Preferences persist across launches.
60
59
  - **[AGENTS.md](https://agents.md) support** — project-specific instructions discovered root-to-leaf, with `~/.agents/` for global instructions.
61
- - **[Agent Skills](https://agentskills.io)** — skill catalogs exposed in the prompt. `/skill:name` injects a skill body into the next user message.
62
- - **Plugins** — optional tools, integrations, theme overrides, and prompt suffixes without bloating the core.
60
+ - **[Agent Skills](https://agentskills.io)** — skill catalogs exposed in the prompt. `/skill:name` injects a skill body into the next user message, and `/skill` opens a picker that fills in the selected skill reference without submitting.
61
+ - **Settings-driven MCP tools** — connect Streamable HTTP MCP servers from `~/.config/mini-coder/settings.json` and expose their tools directly in the core runtime.
63
62
 
64
63
  ## Commands
65
64
 
66
- | Command | Description |
67
- | ------------ | ------------------------------------------------------------------------------------------------------ |
68
- | `/model` | Switch models and save the choice as the global default. |
69
- | `/session` | Open the session picker for the current working directory. |
70
- | `/new` | Start a fresh session and reset the running token and cost totals. |
71
- | `/fork` | Fork the current chat into a new session, keep the original, and add a UI-only `Forked session.` note. |
72
- | `/undo` | Remove the last conversational turn without touching filesystem changes. |
73
- | `/reasoning` | Show or hide model thinking. The setting is saved and restored on launch. |
74
- | `/verbose` | Expand shell output plus edit previews and edit errors in the conversation log. |
75
- | `/todo` | Show the current session todo list in the conversation log as a UI-only checklist block. |
76
- | `/login` | Sign in with a supported OAuth provider. |
77
- | `/logout` | Remove saved OAuth credentials for a logged-in provider. |
78
- | `/effort` | Choose low, medium, high, or xhigh reasoning effort. |
79
- | `/help` | Show commands, current toggles, loaded AGENTS.md files, skills, and plugins. |
65
+ | Command | Description |
66
+ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
67
+ | `/model` | Switch models and save the choice as the global default. |
68
+ | `/session` | Open the session picker for the current working directory. |
69
+ | `/new` | Start a fresh session and reset the running token and cost totals. |
70
+ | `/fork` | Fork the current chat into a new session, keep the original, and add a UI-only `Forked session.` note. |
71
+ | `/undo` | Remove the last conversational turn without touching filesystem changes. |
72
+ | `/reasoning` | Show or hide model thinking. The setting is saved and restored on launch. |
73
+ | `/verbose` | Toggle compact vs full rendering for verbose-aware tool previews/results, including shell, read, grep, edit previews/errors, and MCP tool blocks. |
74
+ | `/mcp` | Open the MCP server picker and toggle configured servers on or off for future turns. |
75
+ | `/todo` | Show the current session todo list in the conversation log as a UI-only checklist block. |
76
+ | `/login` | Sign in with a supported OAuth provider. |
77
+ | `/logout` | Remove saved OAuth credentials for a logged-in provider. |
78
+ | `/effort` | Choose low, medium, high, or xhigh reasoning effort. |
79
+ | `/help` | Show commands, current toggles, loaded AGENTS.md files, skills, and MCP servers with on/off state. |
80
+ | `/skill:name` | Insert a discovered skill into the next message. Submit `/skill` or pick `/skill:name` from slash-command autocomplete to choose a skill without auto-submitting. |
80
81
 
81
82
  ## Key bindings
82
83
 
@@ -85,7 +86,7 @@ Plugins can add more tools, but the core stays intentionally small.
85
86
  | `Enter` | Submit message |
86
87
  | `Shift+Enter` | Insert newline |
87
88
  | `Escape` | Dismiss the overlay without changing the draft; otherwise interrupt the running turn; otherwise do nothing |
88
- | `Tab` | Autocomplete a path, or open the command picker when the draft starts with `/` |
89
+ | `Tab` | Autocomplete a path, or open the command picker when the draft starts with `/` without clearing the draft |
89
90
  | `Ctrl+R` | Search global raw input history |
90
91
  | `Ctrl+C` | Graceful exit |
91
92
  | `Ctrl+D` | Graceful exit when the input is empty |
@@ -105,9 +106,40 @@ $ printf '%s\n' 'fix the failing tests' | mc
105
106
  - Starts when `-p/--prompt` is provided or when stdin or stdout is not a TTY.
106
107
  - If stdout is redirected but stdin is still interactive, pass `-p`; headless mode will not fall back to an interactive prompt.
107
108
  - Uses the same parser as the TUI for plain text, `/skill:name`, and standalone image paths.
109
+ - Without `--json`, keeps stdout script-friendly by writing only the final assistant text there, while lightweight assistant commentary snippets from tool-use turns go to stderr.
108
110
  - With `--json`, writes NDJSON events for completed assistant/tool-result messages plus `done` / `error` / `aborted` outcomes; queued `user_message` events may also appear. Streaming deltas are omitted.
109
111
  - Headless runs still persist like normal sessions and show up in `/session` history for that working directory.
110
- - Interactive slash commands such as `/model`, `/session`, and `/help` are not available in headless mode.
112
+ - Interactive slash commands such as `/skill` without a name, `/model`, `/session`, `/mcp`, and `/help` are not available in headless mode.
113
+
114
+ ## Settings
115
+
116
+ Global defaults live in `~/.config/mini-coder/settings.json`.
117
+
118
+ ```json
119
+ {
120
+ "customProviders": [
121
+ {
122
+ "name": "lm-studio",
123
+ "baseUrl": "http://127.0.0.1:1234/v1"
124
+ }
125
+ ],
126
+ "mcp": {
127
+ "servers": [
128
+ {
129
+ "name": "docs",
130
+ "url": "http://127.0.0.1:8787/mcp",
131
+ "enabled": true
132
+ }
133
+ ]
134
+ }
135
+ }
136
+ ```
137
+
138
+ - `mcp.servers` currently supports Streamable HTTP MCP endpoints.
139
+ - Each server `name` becomes the imported tool prefix, so a remote `search` tool appears as `docs__search`.
140
+ - MCP servers with `enabled: true` connect at startup; disabled ones stay disconnected until you turn them back on.
141
+ - Invalid MCP URLs are skipped immediately, and enabled servers that are unreachable are skipped with a warning.
142
+ - `/mcp` can enable or disable configured MCP servers during the current app run, and that on/off state is persisted.
111
143
 
112
144
  ## Docs
113
145
 
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ cd -- "$(dirname -- "${BASH_SOURCE[0]}")"
5
+
6
+ PYTHONPATH="$PWD/terminal-bench" harbor run -y \
7
+ --job-name benchmark-baseline-full-$(date +%F__%H-%M-%S) \
8
+ --jobs-dir "$PWD/terminal-bench/jobs" \
9
+ --agent-import-path mini_coder_agent:MiniCoderAgent \
10
+ --ak version=0.5.12 \
11
+ --model openai-codex/gpt-5.4 \
12
+ --dataset terminal-bench@2.0 \
13
+ --n-attempts 2 \
14
+ --n-concurrent 2 \
15
+ --max-retries 0