Internal work should not become desktop choreography
Focus-stealing helper windows turn a simple question into desktop choreography. The analysis itself isn't the problem. The problem is an internal step leaking into the foreground as if you'd asked for it. You asked what's in the image. You did not ask for window management.
Under the hoodHow it works
- The analysis path should consume attachment bytes or bounded derivatives without invoking a foreground viewer.
- Window and process observation belongs in acceptance because a correct answer alone cannot prove this behavior.
Keep image understanding available and keep the preparation in the background.
Decode through a bounded native path
Native image libraries read common formats directly and never launch a viewer. Bounds matter: giant images get resized, long animations get sampled, and malformed files fail loudly instead of silently. Your original file is never touched.
Under the hoodHow it works
- Bound decoded dimensions, total pixels, sampled frame count, memory, and model payload size.
- Preserve orientation and media type while treating malformed or unsupported data as an explicit error.
Preserve the original for explicit operations
The analysis preview is not the file. Ask to convert, edit, or save later, and the action runs on the original through the proper tool. Quiet by default doesn't have to mean incapable when a visible action is what you actually want.
Under the hoodHow it works
- Keep the source attachment identity separate from the bounded visual representation sent for understanding.
- Explicit save, conversion, edit, and reveal operations use the original file through the appropriate tool path.
Carry visuals through every request path
A privacy rule that holds in the first message but breaks in follow-ups or background runs isn't a rule, it's a habit. Every request path needs the same private visual boundary. If a path can't carry images, it queues the context. It never falls back to opening the file in another app.
Under the hoodHow it works
- Normal turns, follow-ups, steering, and background runs need one shared attachment boundary.
- A request path without visual transport should queue context through a supported turn shape instead of opening a helper app.
Verify the foreground, not only the answer
A correct answer doesn't prove the experience was clean. Watch which app owns focus, whether Preview appeared, what processes launched, whether the original survived. Test with the formats that used to trigger helper apps. That's where regressions show up.
Under the hoodHow it works
- Capture answer correctness, foreground ownership, unexpected launches, memory bounds, and source preservation separately.
- Repeat with rapid follow-ups so cached preparation does not reintroduce a foreground fallback.
Sources and scope
We wrote this from Axiom's current code, regression tests, and recorded product checks. If a behavior has only passed a source test, we do not describe it as proven on every Mac. There are no invented benchmark numbers here.