· GPT-6 Astra + Codex CLI · Same prompt: a million-particle three.js black hole

Same prompt, given an agent: Astra + Codex CLI screenshots itself and fixes it in three rounds

The same black hole prompt, but this time to something that can run commands, take screenshots and read back pixel statistics. GPT-6 Astra iterated three times inside Codex CLI, pushed the count to 1,048,576, found and killed the bloom overexposure the one-shot run shipped with, and the fixed-time screenshot hashes match exactly.

A black hole in deep space with an orange-gold accretion disk in spiral bands, the event horizon at the centre pure black, structure clearly separated
Run the demo WebGL · uses your GPU
drag to orbit · scroll to zoom · space to pause · 1/2/3 for palettes Open full screen ↗

The on-screen labels are in Chinese: this is the model's verbatim output from an experiment run in Chinese, and editing it would make the artifact something other than what was measured.

How it was made

Model
GPT-6 Astra + Codex CLI
gpt-6-astra
How
agent loop
Codex CLI 0.153.4
Reasoning effort
high
Turns
1
Tool calls
20
Output tokens
28.3k
Wall time
10m 34s
Artifact
575 lines, one file
Error feedback
none

The only defect in the one-shot run was bloom overexposure: mean luminance 0.41, event horizon washed out. What changed here is not the model, it is the harness — same prompt, but this time the model had a loop that could execute commands, render the page, screenshot it and read the pixel statistics back.

So it fixed that defect itself. Twenty tool calls, three rounds of self-iteration: no render errors, three palettes, pause and resume, parallax, zoom and resize/DPR checks all passing, and identical hashes for the fixed-time screenshot. The particle count is 1,048,576 — 2²⁰ exactly, not a round million someone typed.

The cost is time and tokens: 634 seconds against 181, and 28,264 output tokens against 15,278. What that buys is not needing a human to look. The two pages worth comparing in this set are this one and the one-shot one: same model, same prompt, and the only difference is whether a browser was put in its hands.

Controls: drag to orbit, scroll to zoom, space to pause, 1/2/3 for palettes, ?t=7.5 to freeze the clock.

Same prompt, other runs

three.js r170 is served from this site, so running a demo makes no third-party request. Published by the author as an individual; testing was self-funded and nothing here represents an employer's position.