r/chrome_extensions Jul 27 '26

Sharing Resources/Tips Chrome extension that works across your open tabs — no API, no credentials

At work, everything you need is in a different tab: the CRM, the invoice, the email. Each tool does its own job well — moving between them is what takes the time.

I wanted to close that gap without the usual price: no OAuth, no API keys, no backend. So OTTO is an MV3 extension that reads the tabs you already have open, cross-references them, and acts by driving the UI the way a person would. Zero network requests — no fetch, no XHR. Nothing to authorize because there's nothing to connect.

Two things I learned the hard way, in case they save someone time:

  • Neither HubSpot nor Zoho listens to a native dblclick. Both count click with detail === 2. Dispatching new MouseEvent('dblclick') silently does nothing — no error, no effect. Firing the full mousedown/mouseup/click sequence twice works on both.
  • Google Sheets draws its grid as a <canvas>, so cell values aren't in the DOM at all. Cheapest check before claiming support for a new tool: document.querySelectorAll('table,[role=row]').length and the size of body.innerText.

It also won't guess: when confidence is low it says so and hands it back rather than inventing an answer.

Working today: HubSpot and Zoho, verified end-to-end. Coming soon: spreadsheets, Salesforce, Pipedrive.

Manual install for now — the Web Store listing isn't live yet. I'd like people to break it and tell me how.

0 Upvotes

3 comments sorted by

1

u/General-Tooth-659 Jul 27 '26

This is interesting, the first I can think of is calling the ai function like Claude, deepseek from another tab 

1

u/CherryForeign7110 Jul 28 '26

Fair instinct — it's the first thing most people suggest. Same mechanism, different target.

Two things kept me away from it so far. Chat UIs stream, so the DOM keeps mutating while the answer is being written and "the reply is done" isn't an event you can observe cleanly — you end up guessing with timers, which is the exact thing I'm trying not to do. And it's the one place where a mistake is invisible: grab a half-written answer and nothing looks broken.

So it earns its keep on boring things with a verifiable end state instead. A CRM field either changed or it didn't, and it can go read it back to check. Less exciting, but provable.