Skip to content
Goatfied

Changelog

What's new in Goatfied.

What shipped, why it matters, and how to use it. Updated as releases land — roughly weekly.

Aug 17, 2026

Sessions move to disk, and a run stops giving up on itself

History is no longer squeezed into a five-megabyte browser store, and a model that fumbles one character no longer loses its turn.

Every session was being kept in a single browser-storage value, which the browser caps at about five megabytes for the whole app. That cap is why history had a limit at all: to fit, the store had to drop old runs and shed transcripts, and it did both silently. Sessions now live in their own file on disk, which is what the editors we sit beside do — VS Code writes one file per chat session, Cursor keeps a database per workspace. There is no session limit any more, a large session cannot cost a small one its transcript, and because the files sit in your user data rather than in the app itself, they survive reinstalling Goatfied. Anything already stored is carried across on first launch.

A run could also end on a protocol error after doing all of its work. The agent talks to the model in JSON, and a single malformed character — a stray equals sign welded onto a key, in the case we caught — cost the whole turn. Five such turns ended the session. Malformed keys are now repaired and the turn proceeds. Values are never touched, so a repair cannot invent an argument the model did not send.

When a run does give up, it now leads with what the model last told you rather than reporting only that the protocol failed. A session that had finished its work and merely failed to sign off used to end on an error, which read as though nothing had happened.

Build 2.31.2

Aug 17, 2026

Your old sessions were being thrown away

The session list kept sixty and silently dropped the rest. It now keeps your history, and gives up transcripts before it gives up runs.

Sessions are stored on your machine, and the store held sixty of them. Reaching sixty did not warn you or archive anything — the oldest session was simply not written on the next save, and there is no second copy anywhere. For anyone using this daily that is a few weeks before history starts quietly ending. The limit is now far enough out that reaching it is a deliberate act.

There was a second way to lose a run. When the store outgrew the space the browser allows, it trimmed transcripts, then dropped image previews, and if that still did not fit it wrote nothing at all — which meant the session you had just finished was never saved. Now the oldest sessions give up their transcripts first and stay in the list with their prompts intact. A run you can still find is worth much more than one that vanished to make room.

The model picker also had its marks doubled and its families confused: Auto now shows a machine, our own GOAT family shows the goat, a model we have no mark for shows none rather than borrowing one, and the model you have picked wears its mark in the composer. The pinned prompt sits flush against the top of the thread, and the hover that explains a timestamp is now on the timestamp instead of across the whole prompt.

Build 2.31.1

Aug 17, 2026

Knowing where you are in a long thread

The prompt you scrolled past stays pinned at the top, every prompt carries its own clock, and each model says who serves it.

A long session scrolls a long way. By the time you are reading the middle of a reply, the request that caused it is far above you, and the only way back to it was to scroll and hope. The prompt you have scrolled past now stays pinned at the top of the thread with its position in the conversation beside it. Click it to jump back to where it was asked, or step through the others with the arrows without reading anything in between.

Scrolling up to check something used to be a one-way trip; there is now a button back to the newest message, and it only appears when you are not already there.

Every prompt shows the time it was sent. Hover it for the full date and how long that turn took — the two things you want when you are working out which attempt did what, and the two things that were nowhere in the transcript.

The model picker now shows who serves each model rather than asking you to know from the name, and the GOAT family has a mark of its own. All of it is drawn from the same palette as the rest of the app, so it reads correctly in dark, light and grey rather than being built for one of them and tolerated in the others.

Build 2.31.0

Aug 15, 2026

The card that came too early

“Continue to iterate?” was reading a cached turn as a fresh one and stopping runs long before they had cost what it said.

An agent run has one brake on it: every so often it stops and asks whether to keep going, and it decides when to ask by adding up what the run has spent. That sum ignored the cache. A long conversation is mostly the same tokens over and over — the model has read them before and charges a tenth of the price the second time — and a replay that was ninety-six percent cache reads was being counted as if every token had arrived fresh. The card therefore turned up around ten times sooner than it should have, quoting a figure nobody had spent. The gateway had known the split all along and dropped it on the way out; it now reports it, and a run is priced the way it is actually billed.

The prices themselves had drifted too. Comet, the cheap family, was listed at five times its real rate and dearer than every other option, so the cheapest runs were interrupted soonest — exactly backwards. All four families now carry the rate the gateway charges for them.

Separately, the instructions sent at the top of every request were being rebuilt each turn to name the current goal. Everything a model has cached sits behind those first tokens, so changing them threw the whole conversation away and paid to read it again, once per step. The goal was already stated in the turn itself, so saying it twice bought nothing. It reads the same and costs a fraction of it.

One more thing worth knowing about rather than discovering: when a model you picked is unavailable, the turn is no longer refused. It is answered through Auto instead, the picker moves to Auto in front of you, and the reason is written above the composer — because a substitution you cannot see is a reply you will misread against the model you thought you chose.

Build 2.30.7

Aug 12, 2026

The steps look like the work

Every kind of thing an agent does now has its own mark beside it, drawn the way your editor draws it.

A run is a list of small acts, and the fastest way to read one is not to read it — it is to glance down the left edge and see the shape of what happened. That only works if each mark means one thing. Ours had nine of them covering everything an agent can do, so a test run, a database query, a pull request and a deploy all arrived wearing the same cog, and the edge of the transcript said nothing at all.

There are now marks for the work rather than for the category it fell into: notebooks, tests, the debugger, dependency installs, deploys, symbol lookups, source control, the browser, delegated work, and notes the agent kept for itself. They are the same drawings your editor uses for the same things, at the same size, in the same column — not near-copies, which are worse than unfamiliar ones because they read as almost right.

Build 2.30.6

Changelog · Page 3 · Goatfied