The new GPT-5.6 family: Luna, Terra, Sol
From Leadership in Tech · subscribed via aiste.ulozaite@gmail.com · original ↗ · unsubscribe
| The new GPT-5.6 family: Luna, Terra, Sol (function() { // Apply theme immediately to prevent flash const theme = localStorage.getItem(‘theme’); if (theme === ‘light’ | theme === ‘dark’) { document.documentElement.setAttribute(‘data-theme’, theme); } })(); |
Simon Willison’s Weblog
Sponsored by: Dynatrace — When agents enter the SDLC, observability becomes the enabler to move from code generation to scalable engineering. Read the blog for a framework to get started
The new GPT-5.6 family: Luna, Terra, Sol
9th July 2026
OpenAI’s latest flagship model hit general availability this morning, and comes in three sizes: Luna, Terra, and Sol (from smallest to largest).
The new models are priced per 1M input/output tokens as Luna $1/$6, Terra $2.50/$15, Sol $5/$30. For comparison, the Claude Opus series are $5/$25 and the Claude Fable 5 is $10/$50, but price-per-million tokens doesn’t tell us much now that the number of reasoning tokens can differ so much between models for the same task.
All three models have a February 16th 2026 knowledge cutoff, a million token context window, and 128,000 maximum output tokens.
OpenAI’s biggest benchmark claim concerns long-running agentic performance, with one benchmark showing all three models outperforming Claude Fable 5:
We trained GPT-5.6 to get more useful work from every token. On Agents’ Last Exam, an evaluation of long-running professional workflows across 55 fields, GPT-5.6 Sol sets a new high of 53.6, eclipsing Claude Fable 5 (adaptive reasoning) by 13.1 points. Even at medium reasoning, it beats Fable 5 by 11.4 points at roughly one-quarter the estimated cost. That efficiency extends to smaller models, which are essential to making intelligence more abundant and affordable: GPT-5.6 Terra and GPT-5.6 Luna outperform Fable 5 at around one-sixteenth the cost.
Amusingly, one self-reported benchmark that Fable 5 crushed the GPT-5.6 family on was SWE-Bench Pro, where Fable 5 got 80% compared to GPT-5.6 Sol getting 64.6%. This may help explain why OpenAI chose to publish this article yesterday specifically calling out SWE-Bench Pro for problems they found while auditing that benchmark:
In light of these results, we estimate that ~30% of SWE-bench Pro tasks are broken, and advise that model developers carefully examine results
I’ve had some early access to GPT-5.6 Sol—it’s definitely very competent, though so far it hasn’t struck me as better than Fable at the kind of complex coding tasks I’ve been using with Anthropic’s model.
As usual, the model guidance for using GPT-5.6 has the most interesting details. There are a bunch of new API features that I need to explore (and probably add support for in LLM), including:
- Programmatic Tool Calling allows the models to “compose and run JavaScript that orchestrates tool calls”—which sounds to me like it could help bridge the gap between MCPs and full terminal sessions that can compose CLI utilities in useful ways. Also reminiscent of the dynamic filtering mechanism Anthropic added to their web search tool, which allows code execution against web results as part of a single model turn.
- Multi-agent lets the model “spin up subagents for parallel, focused work”—the sub-agent pattern now baked into the core API.
- Prompt cache breakpoints brings the Claude model of prompt caching to OpenAI, letting you be explicit about where the cache breakpoints are rather than relying on the API to detect them automatically. Personally I much prefer automatic detection (still supported by OpenAI), but presumably there are optimization cost savings to be had here if you put the work in.
- You can now set detail: original on image requests to avoid resizing the image at all before it is processed.
Here’s a full page with 18 different pelicans—for reasoning efforts none, low, medium, high, xhigh, and max across the three different models. It also lists their token and calculated costs—the least expensive was gpt-5.6-luna at effort none for 0.71 cents, the most expensive was gpt-5.6-sol at max reasoning level for 48.55 cents.

In further pelican news, if you jump to 17:50 in their livestream from this morning you’ll see OpenAI’s own demo of 3D pelicans riding a tricycle, a bicycle, a pony, and another pelican!

Posted 9th July 2026 at 7:46 pm · Follow me on Mastodon, Bluesky, Twitter or subscribe to my newsletter
More recent articles
- Now we have a timeline of the OpenAI accidental attack against Hugging Face - 7th August 2026
- One-shotting a Raccoon Heist game using Claude Fable 5 - 5th August 2026
- New release of LLM adds support for reasoning traces, OpenAI Responses, server-side tools, and smarter logging - 4th August 2026
This is The new GPT-5.6 family: Luna, Terra, Sol by Simon Willison, posted on 9th July 2026.
ai 2,177 openai 446 generative-ai 1,928 llms 1,895 llm-tool-use 75 llm-pricing 89 pelican-riding-a-bicycle 131 llm-release 221 gpt-5 31
Next: Kimi K3, and what we can still learn from the pelican benchmark
Previous: sqlite-utils 4.0, now with database schema migrations
Monthly briefing
Sponsor me for $10/month and get a curated email digest of the month’s most important LLM developments.
Pay me to send you less!
- Disclosures
- Colophon
- ©
- 2002
- 2003
- 2004
- 2005
- 2006
- 2007
- 2008
- 2009
- 2010
- 2011
- 2012
- 2013
- 2014
- 2015
- 2016
- 2017
- 2018
- 2019
- 2020
- 2021
- 2022
- 2023
- 2024
- 2025
- 2026
| image-gallery:not(:defined) img {max-height: 150px;} captioned-image-gallery:not(:defined) > figure {max-height: 240px; overflow: hidden;} document.addEventListener(‘DOMContentLoaded’, () => { document.querySelectorAll(‘h2[id],h3[id],h4[id],h5[id],h6[id]’).forEach(el => { const id = el.getAttribute(‘id’); const permalinkContext = el.closest(‘[data-permalink-context]’); if (permalinkContext) { const url = permalinkContext.getAttribute(‘data-permalink-context’); const hashLink = document.createElement(‘a’); hashLink.style.borderBottom = ‘none’; hashLink.style.color = ‘#666’; hashLink.style.fontSize = ‘1em’; hashLink.style.opacity = 0.8; hashLink.setAttribute(‘href’, url + ‘#’ + id); hashLink.innerText = ‘#’; el.appendChild(document.createTextNode(‘\u00A0’)); el.appendChild(hashLink); } }); }); const config = [ {“tag”: “lite-youtube”, “js”: “/static/lite-yt-embed.js”, “css”: “/static/lite-yt-embed.css”}, {“tag”: “image-gallery”, “js”: “/static/image-gallery.js”, “css”: null}, {“tag”: “captioned-image-gallery”, “js”: “/static/captioned-image-gallery.js”, “css”: null}, {“tag”: “click-to-play”, “js”: “/static/click-to-play.js”, “css”: “/static/click-to-play.css”}, {“tag”: “github-code”, “js”: “/static/github-code.js”, “css”: null} ]; for (const {tag, js, css} of config) { if (document.querySelector(tag)) { if (css) { document.head.appendChild( Object.assign(document.createElement(‘link’), { rel: ‘stylesheet’, href: css }) ); } if (js) { await import(js); } } } document.addEventListener(‘DOMContentLoaded’, () => { if (window.localStorage.getItem(‘ADMIN’)) { document.querySelectorAll(‘.edit-page-link’).forEach(el => { const url = el.getAttribute(‘data-admin-url’); if (url) { const a = document.createElement(‘a’); a.href = url; a.className = ‘edit-link’; a.innerHTML = ‘ Edit’; el.appendChild(a); el.style.display = ‘block’; } }); } }); // Random tag navigation - shows button if recently came from tag random (function() { const stored = localStorage.getItem(‘random_tag’); if (!stored) return; try { const data = JSON.parse(stored); const elapsed = Date.now() - data.timestamp; // Only show if within 5 seconds if (elapsed > 5000) return; const header = document.getElementById(‘smallhead-inner’); if (!header) return; const btn = document.createElement(‘a’); btn.href = ‘/random/’ + encodeURIComponent(data.tag) + ‘/’; btn.className = ‘random-tag-nav’; btn.innerHTML = ‘ Random ‘ + data.tag; btn.addEventListener(‘click’, function(e) { // Bump the timestamp before navigating localStorage.setItem(‘random_tag’, JSON.stringify({ tag: data.tag, timestamp: Date.now() })); }); // Insert before the Subscribe link const subscribeLink = document.getElementById(‘smallhead-about’); if (subscribeLink) { header.insertBefore(btn, subscribeLink); } else { header.appendChild(btn); } } catch (e) { // Invalid JSON, clear it localStorage.removeItem(‘random_tag’); } })(); // Theme toggle functionality (function() { const toggle = document.getElementById(‘theme-toggle’); const iconAuto = document.getElementById(‘icon-auto’); const iconLight = document.getElementById(‘icon-light’); const iconDark = document.getElementById(‘icon-dark’); // Theme states: ‘auto’ (default), ‘light’, ‘dark’ function getTheme() { return localStorage.getItem(‘theme’) | ‘auto’; } function setTheme(theme) { if (theme === ‘auto’) { localStorage.removeItem(‘theme’); document.documentElement.removeAttribute(‘data-theme’); } else { localStorage.setItem(‘theme’, theme); document.documentElement.setAttribute(‘data-theme’, theme); } updateIcon(theme); } function updateIcon(theme) { iconAuto.style.display = theme === ‘auto’ ? ‘block’ : ‘none’; iconLight.style.display = theme === ‘light’ ? ‘block’ : ‘none’; iconDark.style.display = theme === ‘dark’ ? ‘block’ : ‘none’; // Update aria-label for accessibility const labels = { ‘auto’: ‘Theme: Auto (system preference). Click to switch to light.’, ‘light’: ‘Theme: Light. Click to switch to dark.’, ‘dark’: ‘Theme: Dark. Click to switch to auto.’ }; toggle.setAttribute(‘aria-label’, labels[theme]); } // Cycle through themes: auto -> light -> dark -> auto function cycleTheme() { const current = getTheme(); const next = current === ‘auto’ ? ‘light’ : current === ‘light’ ? ‘dark’ : ‘auto’; setTheme(next); } // Initialize updateIcon(getTheme()); toggle.addEventListener(‘click’, cycleTheme); })(); |