GPT-5.6 Sol: GA Status, Benchmarks, and Practical Model Routing

Research timestamp: July 10, 2026 (UTC). Bottom line: GPT-5.6 is no longer only a limited preview. OpenAI announced general availability on July 9 across ChatGPT, Codex, and the API, with a gradual account rollout. If an eligible account does not show it yet, that is a rollout/access state, not evidence that the model is still preview-only.

What changed since the July 7 note

The earlier release-date uncertainty is resolved.

GPT-5.6 family at a glance

ModelPositioningAPI price / 1M inputAPI price / 1M outputBest use
GPT-5.6 SolFrontier capability$5.00$30.00Difficult coding, research, computer use, high-stakes review
GPT-5.6 TerraBalanced tier$2.50$15.00Strong everyday agent and knowledge work
GPT-5.6 LunaLowest-cost / fastest tier$1.00$6.00High-volume routing, drafts, lightweight tool work
GPT-5.5Current stable predecessor$5.00$30.00Existing workflows and fast ChatGPT default behavior

OpenAI describes ultra as a multi-agent setting for the hardest work. Treat it as an orchestration mode with potentially higher cost and latency, not as a simple model-name upgrade.

Interactive benchmark explorer

The numbers below are vendor-published results, primarily from OpenAI's July 9 comparison table. They are useful directional signals, but they do not make every model comparison apples-to-apples: harnesses, effort levels, tool access, prompts, and evaluation dates can differ.

<div style="max-width:980px;margin:0 auto">
  <div style="display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px">
    <button data-metric="terminal">Terminal-Bench 2.1</button>
    <button data-metric="swe">SWE-Bench Pro</button>
    <button data-metric="agents">Agents' Last Exam</button>
  </div>
  <div style="position:relative;height:360px"><canvas id="benchmarkChart"></canvas></div>
  <p id="benchmarkNote" style="margin:10px 0 0;color:var(--color-text-secondary);font-size:13px"></p>
</div>
<script>
const Chart = Solaris.libs.Chart;
const metrics = {
  terminal: {
    label: 'Terminal-Bench 2.1 (%)',
    note: 'OpenAI-published coding-agent comparison. Sol Ultra: 91.9%; chart shows Sol standard effort at 88.8%.',
    values: [
      ['GPT-5.6 Sol',88.8,'#c48628'], ['GPT-5.6 Terra',87.4,'#4f8d75'],
      ['GPT-5.6 Luna',84.7,'#7997b8'], ['GPT-5.5',85.6,'#8d7cbe'],
      ['Claude Fable 5',83.1,'#ca6b50'], ['Claude Opus 4.8',78.9,'#b06d96'],
      ['Gemini 3.1 Pro',70.7,'#6e8da3']
    ]
  },
  swe: {
    label: 'SWE-Bench Pro (%)',
    note: 'OpenAI-published table. Claude Fable 5 leads this specific reported comparison; benchmark leadership is workload-specific.',
    values: [
      ['GPT-5.6 Sol',64.6,'#c48628'], ['GPT-5.6 Terra',63.4,'#4f8d75'],
      ['GPT-5.6 Luna',62.7,'#7997b8'], ['GPT-5.5',59.4,'#8d7cbe'],
      ['Claude Fable 5',80.0,'#ca6b50'], ['Claude Opus 4.8',69.2,'#b06d96'],
      ['Gemini 3.1 Pro',54.2,'#6e8da3']
    ]
  },
  agents: {
    label: "Agents' Last Exam (%)",
    note: 'General agent benchmark from the OpenAI comparison table. This is not a substitute for an evaluation on your own repository and tool stack.',
    values: [
      ['GPT-5.6 Sol',52.7,'#c48628'], ['GPT-5.6 Terra',50.4,'#4f8d75'],
      ['GPT-5.6 Luna',50.3,'#7997b8'], ['GPT-5.5',46.9,'#8d7cbe'],
      ['Claude Fable 5',40.5,'#ca6b50'], ['Claude Opus 4.8',45.2,'#b06d96'],
      ['Gemini 3.1 Pro',32.1,'#6e8da3']
    ]
  }
};
let chart;
function render(metric) {
  const m = metrics[metric];
  if (chart) chart.destroy();
  chart = new Chart(document.getElementById('benchmarkChart'), {
    type:'bar',
    data:{
      labels:m.values.map(x=>x[0]),
      datasets:[{label:m.label,data:m.values.map(x=>x[1]),backgroundColor:m.values.map(x=>x[2]),borderRadius:3}]
    },
    options:{
      indexAxis:'y', responsive:true, maintainAspectRatio:false,
      plugins:{legend:{display:false},tooltip:{callbacks:{label:c=>' '+c.raw+'%'}}},
      scales:{x:{beginAtZero:true,max:100,grid:{color:'rgba(128,128,128,.18)'},ticks:{callback:v=>v+'%'}},y:{grid:{display:false}}}
    }
  });
  document.getElementById('benchmarkNote').textContent=m.note;
}
document.querySelectorAll('[data-metric]').forEach(b=>b.onclick=()=>render(b.dataset.metric));
render('terminal');
</script>

Cost and coding-agent trade-offs

This view intentionally uses only figures with current official prices in the cited sources. GLM-5.2 is shown as a deployment option elsewhere in this note, but not plotted here because its official platform pricing is denominated separately and provider pricing varies.

<div style="max-width:980px;margin:0 auto">
  <div id="costPlot" style="width:100%;height:380px"></div>
  <p style="margin:8px 0 0;color:var(--color-text-secondary);font-size:13px">X = published blended list price for 1M input + 1M output tokens. Y = vendor-published Terminal-Bench 2.1 score. Hover points for details.</p>
</div>
<script>
const d3 = Solaris.libs.d3;
const host = document.getElementById('costPlot');
const data = [
  {name:'GPT-5.6 Luna', cost:7, score:84.7, color:'#7997b8'},
  {name:'GPT-5.6 Terra', cost:17.5, score:87.4, color:'#4f8d75'},
  {name:'GPT-5.6 Sol', cost:35, score:88.8, color:'#c48628'},
  {name:'Claude Fable 5', cost:60, score:83.1, color:'#ca6b50'}
];
function draw() {
  host.innerHTML='';
  const w=host.clientWidth||760,h=360,m={top:30,right:30,bottom:58,left:54};
  const svg=d3.select(host).append('svg').attr('width',w).attr('height',h).style('overflow','visible');
  const x=d3.scaleLinear().domain([0,65]).range([m.left,w-m.right]);
  const y=d3.scaleLinear().domain([80,90]).nice().range([h-m.bottom,m.top]);
  svg.append('g').attr('transform','translate(0,'+(h-m.bottom)+')').call(d3.axisBottom(x).ticks(6).tickFormat(d=>'$'+d));
  svg.append('g').attr('transform','translate('+m.left+',0)').call(d3.axisLeft(y).ticks(5).tickFormat(d=>d+'%'));
  svg.append('g').attr('stroke','currentColor').attr('opacity',.13).selectAll('line')
    .data(y.ticks(5)).join('line').attr('x1',m.left).attr('x2',w-m.right).attr('y1',d=>y(d)).attr('y2',d=>y(d));
  const tip=d3.select(host).append('div').style('position','absolute').style('display','none').style('padding','7px 9px').style('border','1px solid var(--color-border)').style('background','var(--color-bg)').style('font-size','12px').style('pointer-events','none');
  d3.select(host).style('position','relative');
  svg.selectAll('circle').data(data).join('circle').attr('cx',d=>x(d.cost)).attr('cy',d=>y(d.score)).attr('r',10).attr('fill',d=>d.color)
    .on('mouseenter',(e,d)=>tip.style('display','block').html('<b>'+d.name+'</b><br>$'+d.cost+' blended / 1M in + 1M out<br>'+d.score+'% Terminal-Bench 2.1'))
    .on('mousemove',e=>tip.style('left',(e.offsetX+14)+'px').style('top',(e.offsetY-8)+'px'))
    .on('mouseleave',()=>tip.style('display','none'));
  svg.selectAll('text.label').data(data).join('text').attr('class','label').attr('x',d=>x(d.cost)).attr('y',d=>y(d.score)-16).attr('text-anchor','middle').attr('font-size',12).text(d=>d.name.replace('GPT-5.6 ',''));
  svg.append('text').attr('x',(m.left+w-m.right)/2).attr('y',h-14).attr('text-anchor','middle').attr('font-size',12).text('Published blended list price per 1M input + 1M output tokens');
}
new ResizeObserver(draw).observe(host); draw();
</script>

Model availability and routing reality

Model / familyCurrent accessImportant caveat
GPT-5.6 Sol / Terra / LunaGA in ChatGPT, Codex, and API; individual account exposure can lagSol is not the default fast ChatGPT model; GPT-5.5 Instant remains the default
Claude Fable 5General product/API availabilityCybersecurity, biology, chemistry, and distillation requests can route to Opus 4.8
Claude Mythos 5Restricted trusted-access programIt is not the standard public model; 30-day retention applies for safety monitoring
Claude Opus 4.8General availabilityAlso serves as the safety fallback for some Fable 5 requests
GLM-5.2Z.ai coding products, API routes, and downloadable weightsMIT-licensed weights and a claimed stable 1M context do not eliminate infrastructure and reliability trade-offs

The important Anthropic distinction

Fable 5 and Mythos 5 are not the same product behavior, even though Anthropic says they use the same underlying model. Fable is the broadly usable safeguarded product. For certain cyber, biology, chemistry, and distillation requests, Anthropic automatically routes to Opus 4.8 and informs the user. Anthropic reports that more than 95% of Fable sessions have no fallback, but an agent evaluation should log the actual model used per run.

A three-dimensional routing map

This is a conceptual map, not a benchmark. It makes the operating trade-off visible: closed frontier capability, broad safeguarded access, and open-weight control occupy different places.

<div style="max-width:980px;margin:0 auto">
  <div id="routing3d" style="position:relative;height:355px;overflow:hidden;border:1px solid var(--color-border);background:var(--color-bg);touch-action:none">
    <div id="routingLabels" style="position:absolute;inset:0;pointer-events:none;z-index:2"></div>
    <div style="position:absolute;left:10px;top:10px;z-index:3;display:flex;gap:6px;pointer-events:none;font-size:11px">
      <span style="padding:3px 6px;background:var(--color-bg-alt);border:1px solid var(--color-border);color:#c48628">Capability</span>
      <span style="padding:3px 6px;background:var(--color-bg-alt);border:1px solid var(--color-border);color:#4f8d75">Access</span>
      <span style="padding:3px 6px;background:var(--color-bg-alt);border:1px solid var(--color-border);color:#7997b8">Deployment control</span>
    </div>
  </div>
  <div style="display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 0 8px">
    <span style="font-size:13px;color:var(--color-text-secondary)">Drag to rotate. Scroll or use controls to zoom. Click a marker for routing context.</span>
    <span style="display:flex;gap:5px"><button id="routingZoomOut" type="button" aria-label="Zoom out">βˆ’</button><button id="routingReset" type="button">Reset</button><button id="routingZoomIn" type="button" aria-label="Zoom in">+</button></span>
  </div>
  <div id="routingLegend" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:7px"></div>
  <div id="routingDetail" style="margin-top:10px;padding:9px 11px;border-left:3px solid var(--color-accent);background:var(--color-bg-alt);font-size:13px;color:var(--color-text-secondary)">Select a marker to see why it occupies this part of the routing map.</div>
</div>
<script>
const THREE = Solaris.libs.THREE;
const host = document.getElementById('routing3d');
const labelLayer = document.getElementById('routingLabels');
const legend = document.getElementById('routingLegend');
const detail = document.getElementById('routingDetail');
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(42, 1, 0.1, 100);
const target = new THREE.Vector3(0, 0, 0);
camera.position.set(6.8, 4.8, 8.2); camera.lookAt(target);
const renderer = new THREE.WebGLRenderer({antialias:true, alpha:true});
renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
renderer.setClearColor(0x000000, 0);
renderer.domElement.style.cssText = 'display:block;width:100%;height:100%;cursor:grab';
host.insertBefore(renderer.domElement, labelLayer);
scene.add(new THREE.HemisphereLight(0xffffff, 0x3b3b3b, 1.55));
const key = new THREE.DirectionalLight(0xffffff, 1.4); key.position.set(4, 6, 5); scene.add(key);
const world = new THREE.Group(); scene.add(world);
const grid = new THREE.GridHelper(5.8, 12, 0x9a9a9a, 0xd9d9d9);
grid.position.y=-1.45; grid.material.opacity=.25; grid.material.transparent=true; world.add(grid);
function line(a,b,color){return new THREE.Line(new THREE.BufferGeometry().setFromPoints([new THREE.Vector3(...a),new THREE.Vector3(...b)]),new THREE.LineBasicMaterial({color,transparent:true,opacity:.72}));}
world.add(line([-2.15,-1.35,0],[2.15,-1.35,0],0xc48628)); world.add(line([0,-1.35,0],[0,2.25,0],0x4f8d75)); world.add(line([0,-1.35,-2.15],[0,-1.35,2.15],0x7997b8));
const entries=[
  {name:'GPT-5.6 Sol',p:[.95,1.15,-.35],c:'#c48628',why:'High-capability closed frontier tier. Best first evaluation for difficult coding, research, and multi-tool work.'},
  {name:'GPT-5.6 Terra',p:[-.45,.72,-.18],c:'#4f8d75',why:'Balanced OpenAI tier: a practical cost/capability candidate for everyday agent work.'},
  {name:'GPT-5.6 Luna',p:[-1.35,.15,.58],c:'#7997b8',why:'Lowest-cost GPT-5.6 tier: suited to high-volume routing and routine tool tasks.'},
  {name:'Claude Fable 5',p:[1.38,.66,.72],c:'#ca6b50',why:'Strong general frontier option, but sensitive cyber/bio/chemistry requests may route to Opus 4.8.'},
  {name:'Claude Mythos 5',p:[1.58,-.88,-.18],c:'#b06d96',why:'Highest-risk capability access is restricted to trusted programs; it is not the ordinary public product path.'},
  {name:'GLM-5.2',p:[-.72,-.42,1.42],c:'#6e8da3',why:'Open-weight, 1M-context option. It offers more deployment control, with more responsibility for serving and evaluation.'}
];
const markers=[], labels=[];
function setDetail(e){detail.style.borderLeftColor=e.c;detail.innerHTML='<strong style="color:var(--color-text)">'+e.name+'</strong><br>'+e.why;legend.querySelectorAll('[data-name]').forEach(el=>el.style.outline=el.dataset.name===e.name?'2px solid '+e.c:'none');labels.forEach(x=>x.el.style.opacity=x.entry.name===e.name?'1':'.78');}
entries.forEach(e=>{
  const color=new THREE.Color(e.c), group=new THREE.Group(); group.position.set(...e.p); group.userData=e;
  const orb=new THREE.Mesh(new THREE.IcosahedronGeometry(.24,2),new THREE.MeshStandardMaterial({color,emissive:color,emissiveIntensity:.14,roughness:.28,metalness:.2}));
  const halo=new THREE.Mesh(new THREE.TorusGeometry(.36,.018,10,44),new THREE.MeshBasicMaterial({color,transparent:true,opacity:.68})); halo.rotation.x=Math.PI/2; group.add(orb,halo);world.add(group);markers.push(group);
  const label=document.createElement('div');label.textContent=e.name;label.style.cssText='position:absolute;transform:translate(-50%,-50%);padding:3px 6px;border:1px solid '+e.c+';background:var(--color-bg);color:var(--color-text);font-size:11px;line-height:1.1;white-space:nowrap;border-radius:3px;box-shadow:0 1px 4px rgba(0,0,0,.14)';labelLayer.appendChild(label);labels.push({entry:e,group,el:label});
  const button=document.createElement('button');button.type='button';button.dataset.name=e.name;button.style.cssText='display:flex;align-items:center;gap:7px;text-align:left;padding:7px 8px;background:transparent;color:var(--color-text);border:1px solid var(--color-border);border-radius:4px';button.innerHTML='<span style="width:9px;height:9px;border-radius:50%;background:'+e.c+';display:inline-block;flex:0 0 auto"></span><span>'+e.name+'</span>';button.onclick=()=>{setDetail(e);render();};legend.appendChild(button);
});
const raycaster=new THREE.Raycaster(), pointer=new THREE.Vector2();let drag=false,moved=false,last={x:0,y:0},rotation={x:-.18,y:.48},fov=42;
function placeLabels(){const w=host.clientWidth,h=host.clientHeight;labels.forEach(x=>{const v=x.group.getWorldPosition(new THREE.Vector3());v.project(camera);const visible=v.z>-1&&v.z<1;const px=Math.max(54,Math.min(w-54,(v.x*.5+.5)*w));const py=Math.max(20,Math.min(h-20,(-v.y*.5+.5)*h));x.el.style.display=visible?'block':'none';x.el.style.left=px+'px';x.el.style.top=py+'px';});}
function render(){world.rotation.set(rotation.x,rotation.y,0);world.updateMatrixWorld(true);camera.lookAt(target);renderer.render(scene,camera);placeLabels();}
function resize(){const w=Math.max(1,host.clientWidth),h=Math.max(1,host.clientHeight);camera.aspect=w/h;camera.updateProjectionMatrix();renderer.setSize(w,h,false);render();}
function zoom(delta){fov=Math.max(27,Math.min(62,fov+delta));camera.fov=fov;camera.updateProjectionMatrix();render();}
function pick(e){const r=renderer.domElement.getBoundingClientRect();pointer.x=((e.clientX-r.left)/r.width)*2-1;pointer.y=-((e.clientY-r.top)/r.height)*2+1;raycaster.setFromCamera(pointer,camera);const hit=raycaster.intersectObjects(markers,true)[0];if(hit){let o=hit.object;while(o&&!o.userData.name)o=o.parent;if(o)setDetail(o.userData);}}
renderer.domElement.addEventListener('pointerdown',e=>{drag=true;moved=false;last={x:e.clientX,y:e.clientY};renderer.domElement.setPointerCapture(e.pointerId);renderer.domElement.style.cursor='grabbing';});
renderer.domElement.addEventListener('pointermove',e=>{if(!drag)return;const dx=e.clientX-last.x,dy=e.clientY-last.y;moved||=Math.abs(dx)+Math.abs(dy)>2;rotation.y+=dx*.008;rotation.x=Math.max(-.62,Math.min(.36,rotation.x+dy*.008));last={x:e.clientX,y:e.clientY};render();});
renderer.domElement.addEventListener('pointerup',e=>{drag=false;renderer.domElement.releasePointerCapture(e.pointerId);renderer.domElement.style.cursor='grab';if(!moved)pick(e);});
renderer.domElement.addEventListener('wheel',e=>{e.preventDefault();zoom(e.deltaY>0?3:-3);},{passive:false});
document.getElementById('routingZoomIn').onclick=()=>zoom(-3);document.getElementById('routingZoomOut').onclick=()=>zoom(3);document.getElementById('routingReset').onclick=()=>{rotation={x:-.18,y:.48};fov=42;camera.fov=fov;camera.updateProjectionMatrix();setDetail(entries[0]);render();};
new ResizeObserver(resize).observe(host);setDetail(entries[0]);resize();
</script>

GLM-5.2: where it fits

GLM-5.2 is a legitimate strategic alternative, but the correct framing is open-weight long-context control, not β€œit beats every closed frontier model.”

Z.ai's June 16 release states:

Use GLM-5.2 when you need local or controlled deployment, very long repository context, or lower-cost experimentation and you can own the serving/evaluation stack. Do not use a vendor table alone to assume it will outperform Sol or Fable on your specific agent harness.

Practical routing recommendation

JobFirst model to evaluateWhy
Difficult implementation, debugging, multi-tool workGPT-5.6 SolCurrent GA frontier option with strong vendor-reported terminal and agent results
Everyday coding agent with cost sensitivityGPT-5.6 TerraBetter cost/capability balance than Sol on OpenAI's stated positioning
High-volume drafting, classification, routine tool callsGPT-5.6 LunaLowest OpenAI list price in this family
Long-running complex coding where Anthropic product behavior is acceptableClaude Fable 5Strong published SWE-Bench Pro result; evaluate fallback behavior
Sensitive cyber/bio research under approved controlsClaude Mythos 5 only with trusted access, otherwise controlled Sol evaluationMythos is restricted; Fable can silently become Opus 4.8 for scoped topics
1M-context or self-hosted research/codingGLM-5.2Open weights and long-context focus; validate with your own test set
Existing stable ChatGPT conversational workflowGPT-5.5 InstantStill the default fast model in ChatGPT

Evaluation protocol before changing production routing

  1. Use 20-50 representative tasks from the actual repository/workflow.
  2. Record model ID, effort, tool harness, prompt, retries, wall time, token use, and final verification result.
  3. For Fable, record whether a request was routed to Opus 4.8.
  4. Score completed tasks with deterministic checks: tests, lint, build, screenshots, and reviewer acceptance.
  5. Set a hard spend cap and maximum tool-call count per run.
  6. Promote a model only after it improves the success/cost/latency trade-off on this exact workload.

Sources

Primary sources are preferred. Benchmark numbers should be read as their publishers' reported results, not independent universal rankings.