02Notes / Field Notes

I sketched the boxes. Fable 5 built the app.

Every feature in this month's Tessera release started as a box drawn badly on paper and one sentence of intent. I handed the build to Claude Fable 5, got out of the way, and read the diffs.

Published
14 June 2026
Category
Notes
Reading time
7 min
Tags
AI, Claude, Agents, Method, Tessera

Every feature in this month's Tessera release started life as a box drawn badly on paper and a single sentence of intent. I handed the build to Claude Fable 5, got out of the way, and read the diffs that came back. Accounts and cross-device sync, global and country leaderboards, mini-leagues you can start with friends, and a rebuilt stats dashboard underneath it all. None of it took a spec.

This is a note about that way of working, because the method is the whole story. There is no clever prompt at the centre of it, no agent framework, no elaborate scaffolding. A rough drawing, a line of intent, and a model good enough to hold the rest in its head.

Days after the last push, the United States government had Fable 5 switched off. I will come back to that at the end. The work first.

The whole brief: a sketch and a sentence

A hand-drawn wireframe of the Tessera screen in a spiral notebook: a 4x4 grid, a header, controls below it, and rough boxes for buttons.
The entire brief for the screen. A box, a grid, some scribbles for buttons, signed Coops.

Most features started as a rough drawing and a line like "let people start a private league with an invite code." No ticket, no spec, no acceptance criteria. The thinness of the brief was the point. A capable model can hold the whole repository in its head, so my job was to decide what to build, sketch it, and then judge what came back. Decide, delegate, review. That is the loop.

It only works if the agent respects what is already there. Tessera is Next.js 16 on Vercel, with Supabase for accounts and PostHog for analytics. Every change had to match the patterns in the repo, run across the stack, and verify itself in a real browser before it counted as done. Here is what the loop actually produced.

Accounts, without the friction tax

The rule for accounts was simple. Nobody should have to sign up to play. Tessera stays playable cold, no login, streak saved on the device. An account is an upgrade you reach for when you want your streak to follow you to your phone, or when you want on a leaderboard.

So accounts are built around a handle. Setting a public handle is the single act that opts you into everything social. The validation is deliberately small and strict: 3 to 20 characters, letters, numbers, underscores and hyphens only, no all-digit names, a short blocklist for the obvious reserved words, and case-insensitive uniqueness enforced at the database with a lowercased index. Your casing is preserved for display. Two people cannot both be "Cooper."

Underneath, cross-device sync reconciles the streak counter and your stored results between the browser you played on this morning and the phone you finish on tonight. The thing a daily player would actually miss if it broke.

Leaderboards that respect the player

Two boards per puzzle, global and by country. Ranking is honest to the game: fewest moves first, and ties broken by fastest solve time. Top 100 on each board, and if you finished outside it you still see your own rank pinned, because a leaderboard that hides you is just a wall.

The detail I am proud of is one you never see. The internal user id never leaves the server. The only public identity is the handle you chose. The board is computed server-side and the row that is "you" is flagged on the way out, so the client gets ranks and handles and nothing it could use to deanonymise anyone. Social features are where privacy quietly leaks. This one does not.

Mini-leagues, designed to be read aloud

A league is a private board for a group. You create one, you get a seven character invite code, you share it, friends join. The standings show two things: the leaderboard for today, and a running tally of days won, where winning a day means you had the best result in the league for that puzzle. The season-long bragging right, not just today's.

The small craft decision here is the invite code. It is drawn from an alphabet with no zero, O, one, I or L, because the whole point of an invite code is that you say it to someone across a table or read it off a screen without a typo. Codes are checked for collisions and regenerated on the rare clash. None of that was in my one-line brief. The agent made the right call because it understood what the code was for.

The stats rebuild, and the bug that was not a bug

The dashboard that watches all of this got rebuilt too. A new accounts view tracks the sign-up funnel and ground-truth account counts. The query layer got a cache so the dashboard stops hammering PostHog into rate limits.

But the story worth telling is the retention stat, because it was reading 0% and that was clearly wrong. Thousands of people were visibly coming back every day.

It was not the SQL. The data could not answer the question. Tessera runs PostHog cookieless by default, for privacy, which means the anonymous id resets every session. So "did this person return tomorrow" is unanswerable for the roughly 99% of players who never opt in. Tomorrow they are a new stranger. Any retention metric built on identity is structurally zero, forever, three layers down from where the symptom appeared.

The fix was hiding in the game itself. Tessera keeps a streak counter in local storage, separate from analytics consent, and it only ticks up when you also solved yesterday. So a solve carrying a streak of two or more is, by definition, a player who came back. Retention without identity, sitting in plain sight in the game state. Three habit metrics got rebuilt on that signal in a single pass.

What the method shipped

The live Tessera puzzle for #49, a 4x4 grid of letter tiles with hint outlines, controls below, and the new accounts and leagues prompt.
The same screen, shipped. The grid, the controls, and the accounts prompt that opens the door to leaderboards and leagues.

A sketch and a sentence sounds too thin to produce anything you would trust. So here is the result, measured honestly.

74%

solve today, also solved yesterday

66%

returning players

47

longest active streak (days)

~15k

people solved at least one

Daily retention: 74%. Of the people who solve today's puzzle, roughly three in four also solved yesterday's. The seven day average sits at 74%, yesterday alone was 72%. Returning players, the share of a month's solves coming from someone mid-streak, is 66%. The longest active streak anyone holds is 47 consecutive days. The biggest single day so far was 1,140 solves on 18 May. Around 15,000 people have solved at least one.

I want to be precise about what 74% measures, because precision is what makes it believable. It is not a vanity cut. It is measured from a counter that exists whether or not you ever consented to analytics, on a privacy posture that throws away the easy way to fake it. That is the number I would put in front of anyone asking whether this is a habit or a curiosity. People do not accidentally do something 47 days in a row. A puzzle you come back to three days in four is not a toy. It is a routine, and routines are the whole game in daily formats.

Every feature in this release points at that number. Streaks give you a reason to return. Leaderboards and leagues give you someone to return for. The stats rebuild is just how I can see it happening.

The model that built it got switched off

Now the part I did not plan for. On 12 June, Anthropic disabled Fable 5 and its larger sibling Mythos 5 to comply with a United States export control directive, issued on national security grounds. The order barred access by any foreign national anywhere, which includes me, a designer in the UK. The most capable tool in my kit became unavailable between one build and the next, by government order, with no notice. Anthropic's own position is that the directive followed a narrow jailbreak finding and that it disagreed such a thing should ground a model used by hundreds of millions. That argument will run for a while.

What made losing Fable 5 survivable is that the loop was never about the model. Sketch the intent, delegate the build, read the diff, ship. When Fable 5 went dark this weekend, the same loop carried straight on with its successor. Slightly different feel, same shape of work, same puzzle game getting better.

So I am not precious about which model sits behind the curtain next quarter. I am precious about the practice, and about the number it produced.

Three in four, back the next day. Draw the box, write the sentence, get out of the way, and check that people keep coming back. That last part is the only job a person still has to do well.

Sources

Reporting on the Fable 5 and Mythos 5 shutdown: