Simon Willison’s Weblog

Subscribe

July 2026

36 posts: 3 entries, 7 links, 4 quotes, 3 notes, 19 beats

July 9, 2026

The new GPT-5.6 family: Luna, Terra, Sol

Visit The new GPT-5.6 family: Luna, Terra, Sol

OpenAI’s latest flagship model hit general availability this morning, and comes in three sizes: Luna, Terra, and Sol (from smallest to largest).

[... 661 words]

Sighting 4:16 PM — California Towhee, in San Mateo County, CA, US
California Towhee
California Towhee
California Towhee
California Towhee

July 10, 2026

[...] Work on web and mobile runs in the cloud. Work in the desktop app can also use local files and desktop apps with your permission. At launch, cloud Work conversations do not appear in desktop Work; desktop Work threads and local files remain on that computer.

OpenAI, trying (unsuccessfully) to clarify ChatGPT Work

# 1:05 am / ai, openai, chatgpt

The reality is to make augmented reality glasses, you need to put a camera next to your eyes that is continuously recording everything you see and processing that to put information over it.

There is not another way around it. And there's certainly not a chip that can fit in the stem of a glasses that is both powerful enough and power miserly enough to do that in real time.

You have to send that data to a cloud. You gotta do it. [...] Or you can build something the size of a Vision Pro with a battery pack that lives somewhere else. Those are the current choices in this world.

And it means if you want to build the product that everyone thinks is the next thing, you are going to have to invade people's privacy.

And maybe you shouldn't. Like, there's an incredible argument for, nope, you shouldn't do that. Nope, the trade-offs required to make this product are so high at a societal level that we should stop it.

Nilay Patel, The Vergecast

# 5:05 pm / augmented-reality, privacy, ai, nilay-patel, ai-ethics

July 11, 2026

Sighting 7:42 PM – 7:49 PM — Black-crowned Night Heron, California Brown Pelican, Pacific Harbor Seal, Great Blue Heron, in Monterey Bay National Marine Sanctuary, CA, US, CA
Black-crowned Night Heron
Black-crowned Night Heron
Black-crowned Night Heron
Black-crowned Night Heron
California Brown Pelican
California Brown Pelican
Pacific Harbor Seal
Pacific Harbor Seal
Great Blue Heron
Great Blue Heron

The first dot-release since 4.0 a few days ago, introducing a number of minor new features.

  • sqlite-utils insert and sqlite-utils upsert now accept a --code option for providing a block of Python code (or a path to a .py file) that defines a rows() function or rows iterable of rows to insert, as an alternative to importing from a file. (#684)

sqlite-utils already had features that allow you to pass blocks of Python code as CLI arguments, for example this one for the sqlite-utils convert command:

sqlite-utils convert content.db articles headline '
def convert(value):
    return value.upper()'

Allowing blocks of code to generate new rows directly was on obvious extension of that pattern:

sqlite-utils insert data.db creatures --code '
def rows():
    yield {"id": 1, "name": "Cleo"}
    yield {"id": 2, "name": "Suna"}
' --pk id

A long-standing feature request which turned out to be a simple implementation.

  • New table.drop_index(name) method and sqlite-utils drop-index command for dropping an index by name. Both accept ignore=True/--ignore to ignore a missing index. (#626)
  • sqlite-utils query can now read the SQL query from standard input by passing - in place of the query, for example echo "select * from dogs" | sqlite-utils query dogs.db -. (#765)

Two more small features. I had Codex review all open issues and highlight the easiest ones!

  • sqlite-utils upsert can now infer the primary key of an existing table, so --pk can be omitted when upserting into a table that already has a primary key.

Another Codex suggestion, an obvious missing CLI feature from a Python library improvement that shipped in the 4.0 release.

  • table.transform() and table.transform_sql() now accept strict=True or strict=False to change a table’s SQLite strict mode. Omitting the option preserves the existing mode. (#787)
  • The sqlite-utils transform command now accepts --strict and --no-strict to change a table’s strict mode. (#787)

These two were inspired by Prefer STRICT tables in SQLite by Evan Hahn, which did the rounds on Hacker News today. Evan pointed out that:

Unfortunately, I don’t think there’s a way to ALTER a table to make it strict. I think you have to copy the data out of the non-strict table into the strict one.

That's exactly what the sqlite-utils transform mechanism does, so I extended it to add the ability to switch tables from strict to non-strict and vice-versa.

Here's the GPT-5.6 Sol xhigh Codex transcript I used to implement those new strict table features. One of the most useful prompts I ran was this one:

use uv run python -c and manually exercise the new .transform(strict=) option, see if you can find any edge-cases or bugs

Effectively telling the model to manually test its work, outside of the automated tests it had already written. This turned up two minor issues that we then fixed.

2026 » July

MTWTFSS
  12345
6789101112
13141516171819
20212223242526
2728293031