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
| Component | Purpose |
|---|---|
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. |
| Manifest | MV3 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, orview-source:URLs (Chrome blocks extension access there).
See Permissions & privacy for the full data boundary.
How it is triggered
Three trigger paths:
- Click the toolbar icon. Opens the popup; click Capture to fire.
- Use the keyboard shortcut.
Alt+Bopens the popup,Alt+Ccaptures immediately without the popup. Both are configurable per-OS inchrome://extensions/shortcuts. - 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
- Capturing, what is captured and how, including edge cases.
- Annotation toolbar, pen, highlight, redact.
- Options & settings, customize defaults.
- Permissions & privacy, the data boundary.