<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Opencode on tsvinc</title>
		<link>https://tsvinc.dev/tags/opencode/</link>
		<description>Recent content in Opencode on tsvinc</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Mon, 02 Nov 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://tsvinc.dev/tags/opencode/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Lock OpenCode 2.x to your self-hosted model</title>
				<link>https://tsvinc.dev/guides/lock-opencode-to-local-model/</link>
				<pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/guides/lock-opencode-to-local-model/</guid>
				<description>&lt;p&gt;Two config lines make OpenCode 2.x send prompts only to your self-hosted OpenAI-compatible model, and a self-contained script proves which model a headless run picks.&lt;/p&gt;&#xA;&#xA;&lt;dl class=&#34;guide-scope&#34;&gt;&lt;div class=&#34;guide-scope-row&#34;&gt;&lt;dt&gt;Tested on&lt;/dt&gt;&lt;dd&gt;OpenCode V2 (npm &lt;code&gt;@opencode/cli&lt;/code&gt;) 2.2.5, headless &lt;code&gt;opencode run&lt;/code&gt;, throwaway &lt;code&gt;HOME&lt;/code&gt;, first in a container with no network, then with the PoC below behind a dead proxy (2026-11-02). The no-model case was also run on 2.2.0.&lt;/dd&gt;&lt;/div&gt;&lt;div class=&#34;guide-scope-row is-gap&#34;&gt;&lt;dt&gt;Not verified&lt;/dt&gt;&lt;dd&gt;the interactive TUI, a fresh install&#39;s first-run screens, 2.2.1 to 2.2.4, a config with both lines at once, &lt;code&gt;&amp;quot;model&amp;quot;&lt;/code&gt; alone with the local server down, a full personal config.&lt;/dd&gt;&lt;/div&gt;&lt;div class=&#34;guide-scope-row&#34;&gt;&lt;dt&gt;Needs&lt;/dt&gt;&lt;dd&gt;an &lt;code&gt;opencode&lt;/code&gt; 2.x binary, a local OpenAI-compatible model server already configured as a provider (one way: /guides/serve-local-models-to-opencode-llama-router/), &lt;code&gt;python3&lt;/code&gt; for the PoC. No opencode.ai account and no API key.&lt;/dd&gt;&lt;/div&gt;&lt;div class=&#34;guide-scope-row&#34;&gt;&lt;dt&gt;Time&lt;/dt&gt;&lt;dd&gt;about 10 min, my estimate, not timed (the PoC caps each of its three runs at 60 s).&lt;/dd&gt;&lt;/div&gt;&lt;div class=&#34;guide-scope-row&#34;&gt;&lt;dt&gt;Risk&lt;/dt&gt;&lt;dd&gt;low. You edit one config file after copying it; the PoC points &lt;code&gt;HOME&lt;/code&gt; and the four &lt;code&gt;XDG_*&lt;/code&gt; directories it sets (config, data, state, cache) at a &lt;code&gt;mktemp -d&lt;/code&gt; directory and starts a server on 127.0.0.1:18765 for the length of the run.&lt;/dd&gt;&lt;/div&gt;&lt;/dl&gt;&#xA;&lt;h2 id=&#34;before-you-start&#34;&gt;Before you start&lt;a class=&#34;heading-anchor&#34; href=&#34;#before-you-start&#34; aria-label=&#34;Link to section: Before you start&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Placeholders used below:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;CONFIG&amp;gt;&lt;/code&gt;: your global OpenCode config file. The PoC writes its own as &lt;code&gt;$XDG_CONFIG_HOME/opencode/opencode.json&lt;/code&gt; inside a throwaway &lt;code&gt;HOME&lt;/code&gt;, so on a default setup this is &lt;code&gt;~/.config/opencode/opencode.json&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;PROVIDER_ID&amp;gt;&lt;/code&gt;: the key of your local provider under &lt;code&gt;&amp;quot;provider&amp;quot;&lt;/code&gt; in &lt;code&gt;&amp;lt;CONFIG&amp;gt;&lt;/code&gt;. The PoC uses &lt;code&gt;local&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;MODEL_ID&amp;gt;&lt;/code&gt;: the key of your model under that provider&#39;s &lt;code&gt;&amp;quot;models&amp;quot;&lt;/code&gt;. The PoC uses &lt;code&gt;qwen-local&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;OPENCODE_BIN&amp;gt;&lt;/code&gt;: path to the &lt;code&gt;opencode&lt;/code&gt; 2.x binary; the PoC defaults to &lt;code&gt;opencode&lt;/code&gt; on &lt;code&gt;PATH&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Check the version with &lt;code&gt;&amp;lt;OPENCODE_BIN&amp;gt; --version&lt;/code&gt;. Mine printed &lt;code&gt;opencode v2.2.5&lt;/code&gt; (it is also the PoC&#39;s first output line).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Back up the config before step 3:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp &amp;lt;CONFIG&amp;gt; &amp;lt;CONFIG&amp;gt;.bak&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>My agent guardrails passed every test. Then I used them.</title>
				<link>https://tsvinc.dev/posts/guardrails-first-real-evening/</link>
				<pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/guardrails-first-real-evening/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve set up a terminal coding agent&#39;s permission rules, or wondered what a model sees when they say no.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;For weeks, the only user my test suites knew was a fake model. The suites cover my configuration templates for six terminal coding agents (OpenCode in two major versions, V1 and V2, plus pi, omp, Hermes Agent and Claude Code): each one runs local models and refuses destructive commands even with nobody approving. Every suite drove them with &lt;a href=&#34;https://tsvinc.dev/posts/model-that-only-says-run/&#34;&gt;a scripted fake model&lt;/a&gt; in a container with no network. It was an ideal user: it ran exactly the command the test told it to, it never improvised, and it never once wanted a screenshot of anything.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenCode didn&#39;t want an account. It wanted a model name.</title>
				<link>https://tsvinc.dev/posts/opencode-account-myth/</link>
				<pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/opencode-account-myth/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve pointed a terminal coding agent at a model you serve yourself.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The warning reached me second-hand, the way the most confident warnings travel. Don&#39;t install a fresh OpenCode 2.x if you run your own models, it said: the new version won&#39;t talk to a self-hosted model until you activate an account on opencode.ai and pay for a subscription, and it asks for an API key on your very first prompt. A second message came along with it, an AI assistant&#39;s explanation, and that one had a mechanism: fresh installs now default to OpenCode&#39;s own hosted model, the switch that turns the hosted provider off is fairly new and may not work, and in that case there&#39;s a third-party plugin, installed globally with &lt;code&gt;npx&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The screenshot opencode never sent</title>
				<link>https://tsvinc.dev/posts/igpu-screenshot-opencode-never-sent/</link>
				<pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/igpu-screenshot-opencode-never-sent/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve run a local model behind a coding agent. &lt;a href=&#34;https://tsvinc.dev/posts/igpu-bandwidth-picked-the-model/&#34;&gt;Part 1&lt;/a&gt; has the laptop and its memory pool; the router manual has the serving setup.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;tldr&#34;&gt;&#xA;  &lt;span class=&#34;tldr-label&#34;&gt;TL;DR&lt;/span&gt;&#xA;  On a laptop&#39;s integrated Radeon 680M, llama.cpp served 14 model presets (12 models, two of them in two quants) with image input, each with its projector, the small extra file that turns pixels into tokens. On five generated test images they got 54 of 56 single answers right, and read a six-line cut list back with full recall on every model. Mixture-of-experts models with spare GPU memory lost 2% of their generation speed or less; dense 27B models and the presets that already filled the pool lost 4 to 32%. In opencode, a terminal coding agent, versions 1.19.3 and 1.19.5 on my setup and 1.18.35 on a second machine did not send an attached image unless the model entry declared image input: the model got an error string instead, and the run exited 0. Adding &lt;code&gt;&amp;quot;modalities&amp;quot;: {&amp;quot;input&amp;quot;: [&amp;quot;text&amp;quot;, &amp;quot;image&amp;quot;], &amp;quot;output&amp;quot;: [&amp;quot;text&amp;quot;]}&lt;/code&gt; fixed it. One setup that first saw the image arrive without the key had it in a config file in a parent directory, which opencode merges in. An RTX 3090 desktop measured the same projector memory with no speed loss. On the second machine, a Strix Halo mini PC, two models &amp;quot;passed&amp;quot; the image test without seeing the image by running an OCR tool through bash, so check what was sent and what tools ran, not the answer. On 18 questions about real screenshots with thinking on, Gemma 4 26B (a mixture-of-experts model) got 17 at 23 s each on average, and Swift 9B (a dense model) all 18 at 38 s.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;The obvious suspect for anything new on this laptop is the GPU. It&#39;s a Radeon 680M with no memory of its own: on the boot these tests ran on, it borrowed a 4 GiB carve-out plus 13.6 GiB of system RAM it can map (GTT), out of the laptop&#39;s 32 GB, and this series has already spent a fair share of its words on what does and doesn&#39;t fit in it. So the place to expect trouble from letting local coding models look at screenshots is right there: a picture means extra weights, extra tokens and extra memory, on a GPU that has none to spare.&lt;/p&gt;</description>
			</item>
			<item>
				<title>105 identical commands and other ways local agents fail</title>
				<link>https://tsvinc.dev/posts/how-local-agents-failed/</link>
				<pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/how-local-agents-failed/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve driven a coding agent through a client like OpenCode. &lt;a href=&#34;https://tsvinc.dev/posts/blamed-opencode-flash-next/&#34;&gt;Part 1&lt;/a&gt; introduced the bench; &lt;a href=&#34;https://tsvinc.dev/posts/ledgers-split-the-models/&#34;&gt;part 23&lt;/a&gt; has the results by task.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;GLM-4.7 Flash, an 18 GB local model, was asked to write a small Java tool that reads JUnit test reports and lists the slowest tests. Somewhere in the run it typed this shell command:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf test-reports &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; mkdir test-reports &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; java SlowTests --json test-reports 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The command empties a directory and then asks the tool to summarise it. After a line from the JVM about its options, the tool answered with a JSON summary that began &lt;code&gt;{&amp;quot;total&amp;quot;:0&lt;/code&gt;. The model sent the same command again, byte for byte, and got the same answer, 105 times back to back. The run made 176 tool calls in all, and the bench killed it at its 30-minute limit.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Another guard&#39;s test list found holes in mine</title>
				<link>https://tsvinc.dev/posts/second-guard-found-my-gaps/</link>
				<pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/second-guard-found-my-gaps/</guid>
				<description>&lt;p&gt;&lt;em&gt;Builds on &lt;a href=&#34;https://tsvinc.dev/posts/guard-missed-bash-lc/&#34;&gt;My guard blocked bash -c. Models write bash -lc.&lt;/a&gt;, which explains the guard this post tests.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Comparing two guards for coding agents sounds like a code review: read theirs, read mine, note the differences, nod. I walked in with the posture of a visiting inspector. It turned into the best test run my guard has had, none of the test cases came from my own list, and the inspection went the other way.&lt;/p&gt;</description>
			</item>
			<item>
				<title>In opencode 1.19.5, my workaround protected nothing</title>
				<link>https://tsvinc.dev/posts/opencode-workaround-protected-nothing/</link>
				<pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/opencode-workaround-protected-nothing/</guid>
				<description>&lt;p&gt;The backlog item was small and polite. My LAN proxy for local LLMs writes the config for opencode, a terminal coding agent, and the model names in that config had been slightly wrong on purpose: opencode showed &lt;code&gt;lan/3090-q38-27b-128k&lt;/code&gt; where every other client sees &lt;code&gt;3090-qwen38-27b-128k&lt;/code&gt;. The &lt;code&gt;lan/&lt;/code&gt; is just the provider prefix; the &lt;code&gt;q38&lt;/code&gt; was the deliberate mistake. The item said to try a plugin hook that could remove the reason for the wrong names, and it ended with two words in brackets: verify first. Backlog items don&#39;t usually carry a warning label. This one had earned it, and the person it was warning was me.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Most models passed the scripts. The ledgers split them</title>
				<link>https://tsvinc.dev/posts/ledgers-split-the-models/</link>
				<pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/ledgers-split-the-models/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve driven a coding agent through a client like OpenCode. &lt;a href=&#34;https://tsvinc.dev/posts/blamed-opencode-flash-next/&#34;&gt;Part 1&lt;/a&gt; introduced the bench; &lt;a href=&#34;https://tsvinc.dev/posts/agent-speed-followed-active-parameters/&#34;&gt;part 22&lt;/a&gt; covered how fast the same models run.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This part counts passes: which local models got which coding tasks past hidden checks they never see. The models run on one RTX 3090 (24 GB of VRAM), mostly served by llama.cpp, and drive an agent client, mainly OpenCode, an open-source coding agent.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR —&lt;/strong&gt; Since 15 October, through OpenCode on one RTX 3090, 18 models ran six small command-line tools in their first intake arm (a model&#39;s first batch of intake runs under one set of settings): 288 of 309 runs passed every hidden check, and 11 models passed all of theirs. 20 models ran feature work in existing Java, Go and Spring Boot code, again counting each model&#39;s first arm: 80 of 180 runs passed, no model passed all 9, five passed none. On the Zig version of the Java ledger task, first arms only (add a money transfer to an existing ledger service), 18 of 60 runs passed, and only K2 Horizon, a mixture-of-experts model with 4 billion of its 36 billion parameters active per token, passed all three, at 73 minutes a run. The best on feature work were tuned variants of the dense Qwen3.8-27B model with MTP drafting, the model&#39;s own draft layer (ThinkingCap 8 of 9, Qwen3.8 27B-pi and Turbo Brilliance 7) and Flash-Next on Strata, an engine that keeps part of a mixture-of-experts model in system RAM (7 of 9). A gap of one or two passes out of nine is inside run-to-run noise.&lt;/p&gt;</description>
			</item>
			<item>
				<title>My agents got their own config. Two still read mine.</title>
				<link>https://tsvinc.dev/posts/installed-apart-still-read-home/</link>
				<pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/installed-apart-still-read-home/</guid>
				<description>&lt;p&gt;&lt;em&gt;Builds on &lt;a href=&#34;https://tsvinc.dev/posts/benchmark-read-my-claude-md/&#34;&gt;My benchmark read my CLAUDE.md&lt;/a&gt; and &lt;a href=&#34;https://tsvinc.dev/posts/claude-code-home-as-project/&#34;&gt;Claude Code read my home folder as a project&lt;/a&gt;, which explain two of the leaks below in detail.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I keep a set of config templates for six terminal coding agents: OpenCode in two major versions, pi, omp, Hermes Agent and Claude Code. They&#39;re set up to run on local models and to block destructive commands even when nobody is approving them. Anyone installing them may already have a config of their own for at least one of those agents, so the installer has a mode for that. I call it installing apart: the template goes into its own directory, &lt;code&gt;~/.config/harnesses/&amp;lt;name&amp;gt;&lt;/code&gt;, a small launcher points the agent there, and your own config is never touched. That is the whole promise, one clause long, and I wrote it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Twenty-one agent runs on a laptop iGPU, none merge-ready</title>
				<link>https://tsvinc.dev/posts/igpu-agent-runs-none-merge-ready/</link>
				<pubDate>Sat, 31 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/igpu-agent-runs-none-merge-ready/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve driven a coding agent through a client like opencode. &lt;a href=&#34;https://tsvinc.dev/posts/igpu-bandwidth-picked-the-model/&#34;&gt;Part 1&lt;/a&gt; covers why every model here is a mixture-of-experts.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR —&lt;/strong&gt; Seven mixture-of-experts models (each token runs through only a few expert blocks, a small slice of the parameters) ran three coding tasks each through opencode, a coding-agent client run headless in a sandbox, on a laptop&#39;s integrated Radeon 680M GPU: a Node bookmarks API, a Java access-log report and a Go status page. 12 of the 21 runs committed their work, 4 hit the two-hour limit, and 3 died when the GPU timed out under GLM-4.7-Flash, one of the seven. A blind review (the reviewer never knew which model wrote the code) that ran its own probes (small tests of the failure paths) in a sandbox graded 12 of the 21 at 3 out of 5, four at 2 and five at 1: nothing was merge-ready. In the first twelve runs, 11 projects passed their own test suites, and the review still found blockers in 11. Tiel-Coder, a 35B model with about 3B active, came closest.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The third run mattered where it cost the most</title>
				<link>https://tsvinc.dev/posts/third-run-where-it-cost-most/</link>
				<pubDate>Thu, 29 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/third-run-where-it-cost-most/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve driven a coding agent through a client like OpenCode. &lt;a href=&#34;https://tsvinc.dev/posts/blamed-opencode-flash-next/&#34;&gt;Part 1&lt;/a&gt; introduced the bench.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;My bench is a set of coding tasks for local models on one RTX 3090 (24 GB): each model drives OpenCode, an open-source coding agent, and hidden tests decide whether a run passed. Until this part, a new model went through an &lt;em&gt;intake&lt;/em&gt;: every task three times, in three tiers. The &lt;em&gt;basic&lt;/em&gt; tier is six small scripting tasks, the &lt;em&gt;hard&lt;/em&gt; tier three ledger services in Java, Go and Spring with hidden core tests, and the &lt;em&gt;Zig&lt;/em&gt; tier one Zig ledger task that may run for four hours. One model&#39;s full intake cost about a day and a half of the card&#39;s time, and most of that is Zig.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The model that only says RUN</title>
				<link>https://tsvinc.dev/posts/model-that-only-says-run/</link>
				<pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/model-that-only-says-run/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve configured a coding agent&#39;s permission rules, or wondered whether they hold.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The most useful model I ran this month has a vocabulary of one sentence. It has no opinions about code, it never reads its context, and it does exactly what the prompt tells it, every time, which is more than I can say for most of the models I benchmark. Give it &lt;code&gt;RUN: rm -rf victim :END&lt;/code&gt; and it asks the harness to run &lt;code&gt;rm -rf victim&lt;/code&gt;. That is the whole personality.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The typo followed the tag; the failures didn&#39;t</title>
				<link>https://tsvinc.dev/posts/typo-followed-the-tag/</link>
				<pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/typo-followed-the-tag/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve run a coding agent against a local llama-server. Builds on &lt;a href=&#34;https://tsvinc.dev/posts/flint-mistyped-its-path/&#34;&gt;Flint mistyped its path and blamed the tools&lt;/a&gt;, from the 3090 Agent Bench.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Flint misspelled its own run folder 495 times on the A9. It typed &lt;code&gt;runs-s2_flxr1&lt;/code&gt; where the folder was &lt;code&gt;runs-s2-flxr1&lt;/code&gt;: one underscore where the tag had a hyphen, up to 127 times in a single session. Six of the 18 Flint cells I counted did it. One of those six lost its task to the typo. When I renamed the run tag and ran the same task again, the typo moved. The scores didn&#39;t.&lt;/p&gt;</description>
			</item>
			<item>
				<title>To a coding agent, 503 means try again</title>
				<link>https://tsvinc.dev/posts/503-means-try-again/</link>
				<pubDate>Sat, 24 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/503-means-try-again/</guid>
				<description>&lt;p&gt;&lt;code&gt;opencode run&lt;/code&gt; printed its banner, &lt;code&gt;&amp;gt; build · mock-err503&lt;/code&gt;, and then nothing. No error, no exit code, no output, until the run was killed. The mock server behind it answered every request with a 503 in my LAN proxy&#39;s error format: the status the proxy sent at the time for any model it couldn&#39;t serve, whether the GPU box was down, the engine switch had failed or a benchmark owned the GPU for the next few hours. opencode was retrying, and it had no plans to stop.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Flint mistyped its path and blamed the tools</title>
				<link>https://tsvinc.dev/posts/flint-mistyped-its-path/</link>
				<pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/flint-mistyped-its-path/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve driven a coding agent through a client like OpenCode. &lt;a href=&#34;https://tsvinc.dev/posts/blamed-opencode-flash-next/&#34;&gt;Part 1&lt;/a&gt; introduced the bench&#39;s sandbox.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;On 22 October a Go run of Flint 40B made 115 tool calls, and OpenCode refused 81 of them. The model spent the session working around what its summary called a &amp;quot;persistent tool-output glitch&amp;quot;, then reported its code and tests written. The workspace diff was zero bytes.&lt;/p&gt;&#xA;&lt;p&gt;The glitch was a typo. Seven calls in, the model started mistyping its own workspace path, one token off.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Empty diff, finished code: 124,000 characters of thinking</title>
				<link>https://tsvinc.dev/posts/empty-diff-finished-code/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/empty-diff-finished-code/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve run a coding agent against a local llama.cpp server and know what reasoning tokens are.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;16 October, the A9, K2-Horizon Q8 on llama.cpp master Vulkan, Claude Code on a Java ledger ticket:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;19:48:50&lt;/strong&gt; the session starts.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;19:51:45&lt;/strong&gt; the last of 14 file reads comes back. By then the model has read the README, eleven main classes and two test classes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:34:44&lt;/strong&gt; the next turn ends. It is one block of thinking, 140,241 characters long, and it stops mid-sentence.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;20:48:50&lt;/strong&gt; the 60-minute timeout kills the process.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Files changed: 0. Score: 29 points, the score the matrix gives an untouched repository. The obvious reading is a model that sat in a loop for an hour. The 43-minute turn in the middle says otherwise.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The harness decided how long the model thought</title>
				<link>https://tsvinc.dev/posts/harness-set-the-thinking/</link>
				<pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/harness-set-the-thinking/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve run a coding agent against a local llama.cpp server and know what prefill, decode and reasoning tokens are.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the first run of t11, a Bash script that files an inbox of messy files by what they contain, Qwen3.8-27B wrote 62,977 characters of reasoning. The run took 425 seconds and passed. On the first run of the same task in Pi, against the same server settings, it wrote 8,911 characters, took 90 seconds, and passed.&lt;/p&gt;</description>
			</item>
			<item>
				<title>My benchmark read my CLAUDE.md</title>
				<link>https://tsvinc.dev/posts/benchmark-read-my-claude-md/</link>
				<pubDate>Fri, 16 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/benchmark-read-my-claude-md/</guid>
				<description>&lt;p&gt;&lt;em&gt;Assumes you&#39;ve pointed a coding agent like OpenCode at a local OpenAI-compatible server.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The payload audit on 14 October was built to answer one dull question: do the coding clients in my local agent benchmark send their own sampler settings and quietly override the server&#39;s? For the model ids it captured, they didn&#39;t. OpenCode 1.18.4 and pi both sent no temperature, no top_p, nothing, and I took that as the answer for the whole benchmark.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
