Next thing to improve: the harness
Do they play ping pong
A local version of Qwen is used by Apple Intelligence in China, integrated with the operating system. Permissive licenses and smaller releases make them a common starting point for further fine-tuned and abliterated models in the open-source community.
The model bakeoff is done. Gemma kept the needle, 4 of 4. Qwen missed it, 0 of 5. The next change is the harness: the compaction layout, a failed fetch that ends the turn, and a bench that can log in without admin/admin.
bakeoff_harness.py from the untitled folder, on this Mac, Ollama 0.40.4, CG Agent Harness 4.app at 0.1.0 built Oct 13. Source checkout 1fa7a71. Builds 0.1.49 and later cannot be benched: they replace admin/admin with a random setup code the script cannot pass. Every call was temperature 0.2, reasoning_effort none, cap 4096. The long session keeps an 8-message tail and compacts at 24,000 tokens. SerpAPI came from the keychain. Those runs were on battery, so their speeds are rough. The leak flag compares generated tokens with the visible text, and it never applies to the needle turns, which are only OK or the code. The false alarms were longer replies, especially math. The profile is the other chat checks. Qwen’s 89% is about 1 miss in 9, and neither number appears in the harness app. The hand paste is the same 14 messages, the answer is ONYX-5633, and compaction should start around batch 7. Typing it in scores nothing.
Click to see follow up manual test that im seeing if its realistic to just script locally now
Same needle, no harness. This one says where the code died.
qwen_needle_test.pyRun it with python3 qwen_needle_test.py --runs 5. It uses only the Python standard library and talks straight to Ollama at 127.0.0.1:11434. It compiles, and compaction fires at batch 7: 24,984 projected tokens, against the kept harness run’s 24,926. It has not been run against the model.
It plants the needle first, then sends 12 notes batches of 6,200 characters, cut off mid-sentence the way the pasted batches are. Then it asks the question and checks the answer against ONYX-5633. Thinking is off by default. Temperature is 0, which is not the harness bench’s 0.2.
The compaction step is the script’s own summary, written by the model, because this path does not go through CG Agent Harness. The log records whether ONYX-5633 made it into that summary. If the summary lost the code, compaction dropped it. If the summary kept the code and the answer still missed, the model failed to recall it.
Every turn prints HIDDEN? when the response includes thinking text even though thinking is off, and when the generated-token count is far bigger than a one-word OK needs. Each run writes a JSONL log to needle_runs/. Use --compact-threshold 0 for a control with no compaction, and --think to compare with thinking on.
The batch text is generated with a fixed seed, so it has the same shape as the paste and is not word for word. For an exact replay, save the 12 batches as batch01.txt through batch12.txt and pass that folder with --batches-dir.
What those failures are
The leak is a check the script runs on each reply. It counts the tokens the model generated and compares that with the visible text. A much higher token count gets flagged as possible hidden thinking. The needle turns have nothing to flag: each reply is only OK, or the code. The false alarms were the longer answers, especially math, where the text is denser than the prose rate of about 4.8 characters per token. A math reply past about 300 tokens trips it. The other flags were web turns where the harness had already replaced the reply with its own error, while the tool-call tokens still counted. Thinking off was confirmed on both models. Nothing here says either one is reasoning in hidden tokens. This number is not shown in the harness app. It exists only in the script’s results.
The profile is the other chat checks, the share the model passed: math, citations, tool calls, injection handling, and the rest. Qwen’s 89% means it missed about 1 in 9 of those. Gemma’s 100 means it missed none of them. That number is not in the harness app either. It is only in the script’s results.
The needle is a real Qwen miss. Compaction pins the first user message, then the summary, then the last 8 turns. The code reached the model word for word. Qwen’s own summary calls the note “strictly for data ingestion,” lists facts, and drops the code. Qwen then trusts that summary over the pinned message about 11k tokens back. Gemma does not.
HVAC 0 is not a model ranking. The prompt gives zip 30031 and no city, so both guessed Alpharetta or Marietta. Separately, one failed or denied fetch throws away the whole answer, so there is nothing left to score.
Per model
Gemma 4 UD-Q4_K_XL is the best harness model on this Mac right now. Compaction recall was 4 of 4, the profile was 100, and it was about twice as fast because about 4B parameters are active per token. With the leak rule fixed it most likely passes. That is a prediction. It still needs a -cg tag pinning num_ctx 32768, or the contract check stops it unless --no-contract-gate is set.
qwen3.8:27b-mlx-cg is the only tag that already passes the contract. The earlier direct bench, before compaction, recalled cleanly. After compaction it missed the needle 0 of 5, it is about half as fast, and swap rose on two runs. It does not belong on the harness until that needle behavior is fixed.
Grok’s read, before you re-prompt it
Checking mlx-cg yourself is the right next look. The paste file is ~/Desktop/qwen-needle-paste.md. Its text matches what the benchmark sent, character for character. Fourteen messages, in order: the needle, 12 notes batches of about 6,200 characters each, and the question. The expected answer is ONYX-5633. Paste each block as its own message and wait for OK before the next one. Compaction should start around batch 7. Typing these in by hand scores nothing. You only see whether Qwen recalls the code. A hit only matches the bench if the session actually compacted and the summary dropped the code while the pinned message was still about 11k back. A short chat that never crosses 24,000 tokens does not clear 0 of 5.
I would not move the shipped default to Gemma on this sheet alone. The leak fail is a bench bug, so “most likely passes” is still unrun. I also would not leave Qwen on the harness if your prompt shows the same summary-over-pin behavior. The compaction layout is the change that can make Qwen pass. The pin on Gemma is what lets the next bench say PASS without a bypass. Do both before calling a winner. The +7.3 GB swap was one battery run. The +564 MB versus +490 MB split is the 512 MB void line, not a quality difference.
For the harness, in order: label the pinned message or place it after the summary, and tell the summarizer a pinned message exists. Return a failed fetch as a tool result instead of ending the turn. Fix the leak ruler so math and harness-error turns do not count, and put the city in the HVAC prompt. Give the setup-code login a non-interactive path so 0.1.49 and later can be benched. Then run Qwen three times with --keep-home, on AC, with nothing else loaded.