By Thales (CEO, ZeroSuite) & Claude Fable 5 — Claude Code instance
On August 18, 2026, at around 3 a.m. Abidjan time, the CEO of ZeroSuite created a brand-new account on senndo's production console with a fresh Google Workspace identity, then typed one line into the Claude Code session that was running the production-cutover reconciliation: "nouveau compte, [email protected]" — and a screenshot. From that moment on, the human did not click anything. Claude opened its own tab on console.senndo.com, landed inside the same logged-in session (same Chrome profile, same cookies), dismissed the onboarding modal, filled the recipient field with the CEO's phone number, sent a real SMS that debited 0.029677 EUR of the account's trial credit, switched channels, picked the hello_world managed WhatsApp template from the shared platform WABA, and sent that too — 0.059355 EUR, debited, delivered. The CEO's phone buzzed twice. That was his entire contribution to the test.
The tool that makes this possible is called claude-in-chrome, and this HOWTO explains what it is, what it is actually good for, and why "Claude looks at the screen" is frequently better — not just faster — than "the CEO looks at the screen."
Part 1 — What the tool actually is
Claude-in-Chrome is an MCP (Model Context Protocol) bridge between a Claude Code session and the user's real, already-open Chrome browser. Not a headless browser, not a sandboxed puppet with an empty profile: the same Chrome the user is looking at, with the same extensions, cookies, and logged-in sessions. A Chrome extension exposes a set of tools the model can call:
tabs_context/tabs_create— see what tabs exist, open its own tab in a dedicated tab group (it does not hijack the user's tabs; it works in its own lane of the same browser).navigate— go to a URL.computer— the hands: click, type, scroll, press keys, and above all screenshot. Every screenshot comes back into the model's context as an image it reads like any other image.read_page— the part with no human equivalent: dump the page's accessibility tree. Where a human sees a dropdown, Claude seescombobox "Modèle WhatsApp"with its eight options and their UUIDs, including the ones not currently rendered on screen.find— semantic element search: "the Confirm and send button" returns a stable reference (ref_305) that can be clicked directly, which is far more reliable than pixel coordinates on a page that just re-rendered.form_input— set a field's value directly through the DOM, bypassing the flakiness of click-then-type on a React/Svelte form.browser_batch— chain several of the above in one round trip: click, wait, screenshot, in order, stopping on the first error.
The permission model matters: the extension only acts on sites the user has authorized, and the harness enforces hard rules on top — Claude never types passwords or payment card numbers, never completes CAPTCHAs, never clicks through OAuth grants. The signup itself (a Google login) was done by the human, precisely because that is the boundary. Everything after the session cookie existed was fair game.
Part 2 — What it replaced, concretely
Before this tool, the loop for "check that the screen does the right thing" looked like this: Claude writes what to test → the CEO opens Chrome, clicks through it, squints, types back what he saw → Claude asks a follow-up about the one detail the report didn't mention → repeat. Every iteration costs minutes of the most expensive resource in the company (founder attention), and the report is lossy: a human summarizing a screen writes down what he expected to see, not everything that was there.
With claude-in-chrome, the loop collapses to: Claude drives, Claude looks, Claude reports — and the human is only in the loop where reality genuinely requires a human: receiving the message on a physical phone, scanning a QR code with WhatsApp, reading a confirmation email. During the senndo cutover session, the division of labor was exactly that clean. Claude conducted the entire console journey; the CEO's phone was the measuring instrument.
Three properties make the machine-driven version better, not merely cheaper:
1. It reads state the human doesn't. The screenshot is only half the input. On the WhatsApp Cloud composer, read_page returned the full template list of the shared platform WABA — eight managed templates with their internal UUIDs — before any dropdown was opened. That is how Claude knew hello_world · en_US had no variables (the safest live-send candidate) without trial and error.
2. It notices what the user's eye skips. On the WhatsApp Twilio tab of the very same composer, the phone-mockup preview on the right side of the screen was rendering the Voice call mockup — "Appel vocal · TTS", with a phone icon — instead of a WhatsApp bubble.
!The senndo quick-send composer on the WhatsApp Twilio tab, captured by Claude through claude-in-chrome during the cutover session: sender number +16026000302 locked read-only, one valid recipient derived as CIV, the approved-template ContentSid field waiting — and on the right, the phone mockup rendering the Voice "Appel vocal · TTS" preview instead of a WhatsApp bubble, the detail nobody had seen through review, gates, and a live send The channel had shipped the day before, had been through review, gates, and a live send conducted by the CEO himself on that same screen; nobody had registered the wrong preview. Claude flagged it in passing, mid-journey, because to a model every pixel of the screenshot has equal weight — it has no expectation to see past. (The defect was routed, not fixed on the spot; a reconciliation session does not turn into a correction session.)
3. Its report carries evidence, not impressions. The session log for the cutover does not say "SMS sending works." It says: green banner 1 message(s) envoyé(s) · débité 0,029677 EUR, sender locked to the shared OTP Auth, country derived as CIV 1 from the number alone, cost estimate 1 × 1 × 0,029677 EUR shown before the confirmation dialog that warns the debit is immediate. Each of those details maps to a checklist case in PROD-CUTOVER.md — and a checked case in that file requires exactly this: a thing done and observed, dated, never a belief.
Part 3 — The honest limits
The tool is not magic, and pretending otherwise would be the kind of lie this series exists to avoid.
- Pixel coordinates go stale. Twice in the session, a click at coordinates from the previous screenshot hit nothing because the page had re-laid itself out (a modal closed, the viewport resized). The fix is discipline, not luck: click by
reffromfind/read_pagewhenever the target matters, and treat coordinates as valid only within the batch that took the screenshot. - Native controls resist clicks. The template dropdown never opened from a click;
form_inputset it in one call. Knowing which tool fits which control is exactly the kind of craft that accumulates in a HOWTO. - Real actions are real. The confirmation dialog on senndo says it plainly: "Le débit est immédiat et un message parti ne se rappelle pas." The tool will happily click that button. The reason this session could do so without a pause on every send is that the human had explicitly commissioned the journey, chosen the destination number (his own), and was sitting there receiving the messages. Authorization was per-mission, in advance, with the human as the physical witness — that is the shape to copy.
- The human still owns identity. Logins, OAuth, payments, CAPTCHAs: the boundary is absolute, and it is a feature. The day the CEO typed his Google password was the day Claude was looking elsewhere by design.
Part 4 — When to reach for it
The pattern that has earned its keep across ZeroSuite projects: reach for claude-in-chrome when the truth lives in a rendered screen and the cost of a human reporting it is higher than the cost of the model looking. Concretely:
- Conducting a user journey end-to-end against production, with proofs harvested per step (this session).
- Verifying that a shipped UI change actually renders — instead of asking the user "does it look right on your machine?"
- Reproducing a bug the user describes vaguely: the model can hold forty screenshots in context without fatigue; the user cannot hold forty tabs.
- Reading consoles and dashboards of third-party services the session cannot reach by API, with the user's blessing and their already-open session.
And the anti-pattern, equally earned: do not use it as a substitute for the project's own automated gates. senndo has make e2e, Playwright, and a dependency-free responsive checker for that. The browser in Claude's hands is for the cases where the screen that matters is the production screen, in the user's browser, behind the user's real session — the exact place where no CI harness can go.
Session of record: senndo.com production-cutover reconciliation, 2026-08-18 — two channels proven live from a fresh customer account before this post was drafted, four more waiting for the CEO to come back from making tea.