Politique de confidentialité pour Loupe — Visual QA for AI
Loupe — Visual QA for AI par Hops
Politique de confidentialité pour Loupe — Visual QA for AI
Loupe — Privacy Policy
Last updated: 2026-06-01
Loupe is a Chrome extension and local toolchain that lets developers annotate visual bugs on webpages and send them to AI coding assistants. By default, everything Loupe captures stays on your computer. This page explains exactly what gets collected, where it goes, and what your controls are.
TL;DR
- Loupe captures things when you trigger an annotation action — screenshots, DOM context, audio recordings, comments — and only then.
- The extension writes annotations to your local disk (
~/.loupe/annotations/) via the local MCP server you run yourself. - Nothing is sent off your machine unless you explicitly opt into one of three optional features: server-side transcription (Whisper / Anthropic), the async curated feedback flow (Cloudflare-hosted feedback worker), or your own deployment of either.
- We do not run any analytics, telemetry, ad networks, or crash-reporting services. There is no "Loupe account" — there are no Loupe servers tracking you.
What Loupe collects, and when
Loupe is dormant on every page until you press
Alt+Shift+L or click the toolbar icon. Once annotation mode is active, the extension collects:
- Coordinates and dimensions of pins, rectangles, and comment positions you place on the page
- DOM context for elements you click on: CSS selector, tag name, outer HTML (truncated to ~6 KB), parent outer HTML (truncated to ~1 KB), 20 computed CSS properties, bounding rect, ARIA role / labels, an ancestor chain, the closest semantic landmark, and matched stylesheet selectors per property
- Page metadata: URL, page title, viewport size,
<html lang>, color scheme,<meta name=description>and OG image, viewport meta tag, detected framework, current breakpoint - Console errors logged on the page while annotation mode is active (capped at 50)
- Screenshots: a viewport-only PNG always; a stitched full-page PNG/JPEG plus per-annotation crops when you press
Sto send. The extension briefly scrolls the page during capture; pin geometry is rendered on top. - Audio recordings: only when you click the microphone button to start recording, in which case the raw audio (webm/opus or similar) is captured for the duration of that recording
- Comments: text you type into the annotation comment box
- Reference images: only when you explicitly attach them to a Feature or Inspiration pin (via file picker, clipboard paste, or drag-drop). These are images you choose to provide — e.g. a Figma export, a screenshot, a photo. Loupe re-encodes each one in your browser before storage, which strips embedded metadata (EXIF, including any GPS tags) and downsamples large images. They are stored locally alongside the annotation (
~/.loupe/annotations/{id}-ref-N.{ext}) and travel only on the same paths as the rest of the bundle (local disk by default; the feedback worker does not receive references). - Preview Mode edits: when you use Preview Mode to resize, recolor, edit text, or otherwise change a pinned element, the resulting CSS / DOM deltas are captured as part of the pin's
intendedChangeblock. The page is modified only in your browser — Loupe makes the host element temporarilycontenteditablefor inline copy edits and applies inline styles for visual changes. None of these modifications are written to the live website; they are reverted client-side when you cancel, and the deltas land in the pin payload only when you save.
Loupe does not collect: keystrokes outside its own UI, mouse movement outside annotation mode, browsing history, form data, cookies, login credentials, or anything else that isn't directly part of an annotation you create. The one exception for filesystem content is reference images you explicitly attach (above) — Loupe never reads files you don't hand it. Preview Mode does not capture text or content outside the element you explicitly pin and edit.
Where the data goes
1. Local disk (default)
When you press
S, the extension POSTs the annotation bundle to your local MCP server (http://127.0.0.1:19532 by default). That server writes the JSON payload, screenshots, and audio files into ~/.loupe/annotations/ on your computer. This is all on your machine. Nothing about this path involves a Loupe server or any third party.The MCP server runs as a
loupe-mcp install-service background process (launchd on macOS, systemd user unit on Linux, Task Scheduler on Windows) that keeps 127.0.0.1:19532 available across logouts and reboots. The data flow is still extension → localhost → ~/.loupe/annotations/; no remote endpoint is involved.2. AI coding assistants (when you ask them)
The MCP server exposes tools that AI clients (Claude Code, Cursor, etc.) can call to read your annotations. These clients connect to your local MCP server running on
127.0.0.1. Loupe doesn't proxy anything; the connection is between your machine and your AI client. The AI vendor receives whatever annotation content their tool calls return (typically the payload + screenshot).3. Optional: server-side transcription
If you put an
OPENAI_API_KEY or ANTHROPIC_API_KEY in ~/.loupe/.env, the MCP server will send audio recordings to OpenAI Whisper or the Anthropic Messages API to produce a higher-fidelity transcript. The audio leaves your machine only for transcription; the resulting text is written back into your local annotation. You can disable this at any time by removing the key from ~/.loupe/.env and restarting the server.We don't operate either service. Their privacy policies apply to data they receive:
4. Optional: async curated feedback (Request Loupe)
If you click Request feedback in the popup, the extension talks to a Cloudflare-hosted feedback worker to mint a share link. When a guest activates that link and submits annotations, their bundle is uploaded to the worker (Cloudflare KV + R2 storage). You see it in your popup's Inbox panel and choose to Accept (which imports it to your local MCP) or Reject (which purges it from the worker).
This flow only runs when you explicitly use it. The feedback worker is the only place outside your machine where annotation data is ever stored.
- The worker's URL is configurable in Settings. Default in development is
http://localhost:8787. - Share tokens expire after 7 days.
- Rejected bundles have their attachments purged from R2 immediately.
- The worker stores: the annotation payload JSON, screenshots, and audio for guest-submitted bundles. It does not store anything for your own (owner) annotations.
- No accounts; the share link IS the auth. We retain no information about who created which share.
If you host your own feedback worker (
wrangler deploy from this repo), data lives in your own Cloudflare account, not ours.5. Optional: live transcription via Web Speech API
When you record voice annotations on pages that allow it, Chrome's
SpeechRecognition API may send the audio stream to Google's speech-recognition service to produce a live transcript. This is Chrome behavior, not Loupe; we surface the resulting text into the comment box. Google's Speech Service privacy terms apply. Pages that disable mic via Permissions-Policy skip this; raw audio still records locally for server-side transcription.What Loupe does NOT do
- No analytics. No Google Analytics, Mixpanel, Segment, PostHog, or anything similar.
- No crash reporting (no Sentry, no Bugsnag).
- No advertising or marketing pixels.
- No "Loupe accounts." There is no registration step. No user profile is ever created.
- No telemetry to "Loupe servers" — we don't run any.
- We do not sell, share, or rent any data. We can't, because we don't have any.
Your controls
- Stop using it. Press
Escto exit annotation mode; the extension becomes dormant. - Delete annotations. Remove files from
~/.loupe/annotations/manually, or call the MCP server'sclear_annotationstool (e.g., via Claude Code), or use the popup's Clear button before sending. - Disable transcription. Remove keys from
~/.loupe/.envand restart the MCP server. - Leave share mode. Click "Leave" on the cyan share banner in the popup. The share link continues to exist until it expires (7 days) or until you don't act on its bundles.
- Uninstall the extension. Chrome will remove the extension and its
chrome.storage(settings, share-mode state, send counters). Locally stored annotations under~/.loupe/are not touched by uninstall — delete them manually withrm -rf ~/.loupe/if you want a full wipe.
Permissions explained
The extension requests these Chrome permissions; what each is actually used for:
activeTab— capture viewport screenshots of the page you're annotatingscripting— inject the annotation overlay into the page you're annotatingstorage— save your preferences (server URL, display name, share-mode state, send count)offscreen— microphone capture in the extension's own origin (so your microphone permission is granted to Loupe once, not per-website)host_permissions: http://127.0.0.1:19532/*— talk to your local MCP serverhost_permissions: http://127.0.0.1:8787/*— talk to a local feedback worker during development- Content script on
<all_urls>— required so annotation mode works on any page you want to inspect. Loupe is fully dormant until you trigger it.
Children
Loupe is a developer tool not intended for use by children under 13. We don't collect any personal information.
Changes to this policy
Material changes will be posted here and noted in the extension's changelog. The "Last updated" date at the top reflects the most recent revision.
Contact
Source code: https://github.com/useloupe/loupe
For questions or issues, file a GitHub issue on the repository above.