Skip to content

Extension overview

The Toado Chrome extension is the capture surface. It is a Manifest V3 extension that runs alongside any page you visit and, on click, captures the screenshot and DevTools state, then ships it to your Toado backend.

What it is, technically

ComponentPurpose
Service worker (background/serviceWorker.ts)Persistent-ish background script. Owns auth, the offline queue, the capture orchestrator, and message routing between popup, content scripts, and the API.
Content scripts (MAIN world)Run inside the page’s JS context. Hook console.*, fetch, XMLHttpRequest, error and unhandledrejection events to capture data the moment it happens.
Content scripts (ISOLATED world)Run in the extension’s sandboxed JS context on the same page. Bridge captured data from MAIN to the service worker. Implements the capture trigger pipeline.
Popup (popup/)The small UI that opens when you click the toolbar icon. Project picker, sign-in CTA, capture button.
Options page (options/)Full-page settings UI. Account binding, default project, capture defaults, redaction defaults, telemetry toggle, keyboard shortcuts.
ManifestMV3 manifest declaring permissions, content scripts, the service worker, the popup, the options page, and the keyboard commands.

Source lives at apps/extension/.

Versions

Current version is 0.1.4 (matching the manifest). The version is shown in the extension’s options page footer.

What it captures

See Capturing for the complete list. The short version:

  • Screenshot of the visible viewport.
  • Full console log (with stack traces).
  • Network requests (method, URL, status, timing, headers, response sizes; bodies where size and CSP allow).
  • Uncaught errors and unhandled promise rejections.
  • Performance entries (navigation timing, long tasks, key Web Vitals).
  • The current URL.

What it does not capture

  • Anything the user did not see (offscreen content, content in cross-origin iframes).
  • Cookies, local storage values, or session tokens (deliberately).
  • Form input values, unless the user explicitly opts in (we do not auto-capture what people type).
  • Anything from chrome://, chrome-extension://, the Chrome Web Store, or view-source: URLs (Chrome blocks extension access there).

See Permissions & privacy for the full data boundary.

How it is triggered

Three trigger paths:

  1. Click the toolbar icon. Opens the popup; click Capture to fire.
  2. Use the keyboard shortcut. Alt+B opens the popup, Alt+C captures immediately without the popup. Both are configurable per-OS in chrome://extensions/shortcuts.
  3. Programmatically (future). The roadmap includes a triggerable URL scheme for embedding capture into other dev tools.

What you see after a capture

The new ticket opens in a fresh tab. The screenshot is rendered with the annotation toolbar above it. A capture-health banner appears if any data category failed to record. Within a few seconds, an AI-generated title replaces the placeholder.

If the API is unreachable when you capture, the capture is queued locally instead. The toolbar icon shows a badge with the queued count. See Offline mode.

Where to next