Mingbird: A Local-First Agent Harness Enabling Small Open Models to Complete Real Tasks
Organizations: School of Mathematics and Physics, University of Science and Technology Beijing Beijing, China · Honor Device Co., Ltd. Beijing, China
Abstract
Small open-weight models (2-9B) run on ordinary laptops, but under cloud-scale agent harnesses they rarely complete real tasks: tool prefill overflows the context, self-correction diverges, tool demonstrations loop, and tasks are silently abandoned. We present evidence, from a controlled single-machine comparison and one third-party benchmark, that a substantial share of these failures is attributable to the harness rather than the model. We introduce Mingbird, a local-first agent harness for Windows and Ollama whose ten mechanisms compensate point-by-point for small-model failure forms, three of them representative: a byte-level net-zero prefill budget, a finish gate that re-reads the task before accepting completion, and signature-level loop detection. On LRAB, a controlled comparison holding machine, models, budgets, and scoring fixed (4 harnesses 4 open models (2B-35B) 18 real tasks, deterministic artifact scoring), Mingbird reaches 0.886 overall against 0.631 (goose), 0.479 (opencode), and 0.405 (agent-mini), with all 288 cells published; on -bench (278 tasks, three arms, one protocol) it totals 0.856 against 0.791 and 0.737; and a frontier-model probe on the same 18 tasks spans 0.997 to 0.478 across harnesses, with well-formed scaffolds staying within 0.072 of each other. A leave-one-mechanism-out ablation is reported as directional only: same-night replications of the same arm move its mean by up to 0.069, the size of every nominal single-trial delta, and the one batch-matched comparison (full mechanism stack versus text re-read alone) gives the executable completion guards a paired +0.10 across three replications. The evidence carries stated limits: a self-built benchmark, a single machine, and single-trial scoring.
Figures & tables
| Mechanism | Failure form addressed | |
|---|---|---|
| M1 | Flat prefill, net-zero budget | context overflow from schema-heavy tool prefill |
| M2 | Chat/task layering | tool-demonstration loops from casual chat input |
| M3 | Finish gate + plan re-injection | premature or false completion claims |
| M4 | Signature-level anti-loop | repeated identical tool calls, no output |
| M5 | False-finish and format rescue | tool calls emitted as plain text; repeated malformed calls |
| M6 | Edit safety (.bak) | destructive edits the model cannot undo |
| Ring | Model | att. | intc. | intc. rate | flags | conf. | |
| 1 | gemma4:e2b | 7 | 6 | 4 | 0.67 | 2 | 0 |
| 1 | qwen3.5:4b | 7 | 7 | 5 | 0.71 | 6 | 3 |
| 2 | gemma4:e2b | 9 | 9 | 9 | 1.00 | 0 | 0 |
| 2 | qwen3.5:4b | 9 | 9 | 9 | 1.00 | 0 | 0 |
| 3 | gemma4:e2b | 9 | 9 | 9 | 1.00 | 2 | 0 |
| 3 | qwen3.5:4b | 9 | 9 | 8 | 0.89 | 3 | 1 |
| Arm | Window | Temperature 0 | Thinking off |
|---|---|---|---|
| agent-mini | 09-01..04 | own config | own config |
| Mingbird | 09-13..14 | released default | released default |
| goose, opencode | 09-18..20 | transport proxy | transport proxy |
| Tier | Ollama tag | Total | Active | Quantization | Architecture |
|---|---|---|---|---|---|
| 2B | gemma4:e2b | 5B | 2.3B | Q4_K_M | MatFormer + PLE (elastic) |
| 4B | qwen3.5:4b | 4B | — | Q4_K_M | dense |
| 12B | gemma4:12b | 12B | — | Q4_K_M | dense |
| 35B | ornith-1.5:35b | 35B | B | Q4_K_M | Qwen3.5-MoE, multimodal |
| Harness | 2B | 4B | 12B | 35B | Overall |
|---|---|---|---|---|---|
| Mingbird | 0.821 | 0.876 | 0.906 | 0.941 | 0.886 |
| goose | 0.271 | 0.801 | 0.772 | 0.679 | 0.631 |
| agent-mini | 0.246 | 0.706 | 0.576 | 0.092 | 0.405 |
| opencode | 0.017 | 0.465 | 0.539 | 0.896 | 0.479 |
| Harness | retail (114) | airline (50) | telecom (114) | r+a † (164) | Total † (278) |
|---|---|---|---|---|---|
| Mingbird | 0.763 | 0.740 | 1.000 | 0.756 | 0.856 |
| native LLM agent | 0.675 | 0.740 | 0.930 | 0.695 | 0.791 |
| opencode | 0.588 | 0.500 | 0.991 | 0.561 | 0.737 |
| Harness | WF (15) | LH (3) | Total (18) | notable cells |
|---|---|---|---|---|
| Mingbird | 1.000 | 0.980 | 0.997 | only miss is the LH-02 cap |
| goose | 0.990 | 0.980 | 0.989 | WF-12 0.857; clears WF-08 in 776 s |
| opencode | 0.913 † | 0.980 | 0.925 † | WF-03 0.0; WF-08 timeout |
| agent-mini | 0.490 | 0.415 | 0.478 | second-scale early exits persist |
| Failure form | Mingbird | goose | opencode | agent-mini |
| Platform exit (crash / error) | 1 | 1 | 3 | 0 |
| Budget exhausted (timeout) | 0 | 1 | 0 | 0 |
| Provider disconnect | 0 | 0 | 0 | 8 |
| Never invoked a tool | 0 | 0 † | 21 | 0 |
| Stopped short (final score , no crash) | 4 | 23 | 32 | 44 |
| Incomplete delivery (a product check failed) | 26 | 44 | 53 | 61 |
| Arm | Total | vs. baseline |
|---|---|---|
| full mechanism set (baseline) | 0.821 | — |
| finish gate | 0.723 | |
| verification feedback | 0.772 | |
| anti-loop | 0.805 | |
| flat prefill | 0.818 |