GEMINI LABJP
PRO35 — July 17, the date reports had pointed to, has passed without an official Gemini 3.5 Pro announcement or model card. July 24 is being cited as the fallbackNB2LITE — Nano Banana 2 Lite, otherwise known as Gemini 3.1 Flash-Lite Image, arrives as the fastest of the family: roughly four seconds per image at $0.034 per thousandOMNI — Gemini Omni Flash enters public preview, generating video up to ten seconds long at $0.10 per second of outputEDIT — Omni Flash is built around conversational editing. Swap a character, relight a scene, or change the angle in plain language, and the original audio and video tracks stay intactSYNTHID — Both new models carry SynthID watermarking, so anything they produce can be checked for provenance from inside the Gemini appSHUTDOWN — The older image generation models are deprecated and switch off on August 17. Worth checking your migration windowPRO35 — July 17, the date reports had pointed to, has passed without an official Gemini 3.5 Pro announcement or model card. July 24 is being cited as the fallbackNB2LITE — Nano Banana 2 Lite, otherwise known as Gemini 3.1 Flash-Lite Image, arrives as the fastest of the family: roughly four seconds per image at $0.034 per thousandOMNI — Gemini Omni Flash enters public preview, generating video up to ten seconds long at $0.10 per second of outputEDIT — Omni Flash is built around conversational editing. Swap a character, relight a scene, or change the angle in plain language, and the original audio and video tracks stay intactSYNTHID — Both new models carry SynthID watermarking, so anything they produce can be checked for provenance from inside the Gemini appSHUTDOWN — The older image generation models are deprecated and switch off on August 17. Worth checking your migration window
Articles/Dev Tools
Dev Tools/2026-06-13Advanced

Getting Ready for Gemini in Chrome's Auto Browse — Structuring a Web App Agents Can Actually Operate

Before Gemini's auto browse reaches Android Chrome, here is how I reshaped my own web app so an agent can reliably operate it — pinning down action targets, the accessibility tree, JSON-LD, and guarding destructive actions, all with implementation code.

Gemini74Chromeauto browse2accessibility2structured data2AI agents3

Premium Article

Last month I asked a hands-on AI browser agent to operate the store flow on a small app-showcase site I run as an indie developer. The instruction was simple — "sort the popular wallpapers cheapest first, then add the top one to the cart" — something a human finishes in seconds. The agent couldn't open the sort dropdown, and stalled there two times out of three. The cause wasn't the model's intelligence. It was that the UI I had built myself offered no reliable "target" to click.

Gemini in Chrome's Android rollout announced at I/O 26 (late June, devices with 4GB+ RAM, starting from en-US) and its auto browse feature feel like the doorway to an era where this kind of automated operation runs routinely in ordinary users' hands. Here I want to record the specific places I changed to move my web app toward a structure that an agent can operate reliably, with before-and-after code.

Auto Browse Stalls on UIs Built for Eyes Only

A browser agent like auto browse ultimately sees the same screen a human does, but when it decides what to operate, it reads the accessibility tree first — the semantically annotated element tree the browser maintains internally. If that tree lacks the information "this is the sort control" or "this is the add-to-cart button," the agent is left guessing from coordinates and text alone, and a wrong guess means a missed action.

The sort dropdown I stalled on was a cluster of styled div elements. Visually it looked like a select box; in the accessibility tree it was a "meaningless box." Humans can parse it by sight, but the agent gets no handle. I've come to see this as the first place worth fixing for the auto browse era.

Pin the Action Targets — Accessible Names and Stable Hooks

The first thing I fixed was making sure operable targets can always be found by the same name and attributes. Before the refactor, decoration came first: buttons were icon-only and labels relied on tooltips.

Before:

<!-- Looks like a cart button, but to an agent it's an unnamed div -->
<div class="cart-icon" onclick="addToCart(123)">
  <svg>...</svg>
</div>
 
<!-- Sort: a custom implementation instead of a native select -->
<div class="sort-dropdown" data-open="false">
  <span>Sort</span>
  <ul class="options">
    <li onclick="sortBy('price-asc')">Price: low to high</li>
  </ul>
</div>

After, I gave them native elements, accessible names, and a stable hook attribute that never changes.

<!-- role and aria-label state "what button this is." data-action is a stable hook -->
<button
  type="button"
  aria-label="Add this wallpaper to cart"
  data-action="add-to-cart"
  data-product-id="123"
  onclick="addToCart(123)">
  <svg aria-hidden="true">...</svg>
  <span class="visually-hidden">Add to cart</span>
</button>
 
<!-- Sort goes back to a native select; the tree recognizes it as a combobox automatically -->
<label for="sort-order">Sort</label>
<select id="sort-order" data-action="sort-order" onchange="applySort(this.value)">
  <option value="popular">Most popular</option>
  <option value="price-asc">Price: low to high</option>
  <option value="price-desc">Price: high to low</option>
</select>

Three things matter here. First, a native select is far easier for an agent than a custom dropdown. Second, aria-label lets you name the function independently of the visual design. Third, a stable attribute like data-action means you can change class names for design reasons without breaking the agent's handle. Because I refactor class names often for visual reasons, I standardized on routing operable hooks to data-action.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
The refactor that lifted agent task completion from 2-of-5 to 5-of-5 by pinning action targets with data attributes and accessible names
Implementation code for making page intent machine-readable via the accessibility tree and JSON-LD (landmarks / Product schema)
A confirmation-gate pattern that prevents agents from auto-executing destructive actions like account deletion or checkout
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Gemini Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Dev Tools2026-06-24
Folding a Local Gemma 4 into Daily Work — Practical Notes on the Ollama API and Response Speed
Taking a local Gemma 4 you can now run interactively and folding it into real work: how to hit Ollama's local API from a script, tricks to improve perceived response speed, and a two-tier fallback that automatically routes to the cloud Gemini API — code included.
Dev Tools2026-06-24
Running Gemma 4 Locally on Windows — A Hands-On LLM in Two Commands with Ollama
How to run Google's lightweight open model Gemma 4 locally on a Windows laptop. With Ollama, you go from install to running in effectively two commands. Plus how to split work between the cloud Gemini API and a local Gemma.
Dev Tools2026-06-21
Finding Every Reference to the Image Preview Models Before They Stop on June 25
gemini-3.1-flash-image-preview and gemini-3-pro-image-preview stop on June 25. Here is a dependency audit for surfacing references buried in rarely-run branches and batches before the cutoff.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →