Zero-invasive UI-to-Code inspector. Hover any element, press Alt+C, paste to your AI agent, and save 94.5% tokens for UI tasks in your giant codebase.
Translate What You See To What Your Agent Needs.
You are a VibeCoder? Ever tried to describe a UI element with human language then see your agent burn your quota just to figure out what on Earth you are talking about, then fix the wrong thing?
You are a Senior who knows what Ctrl + Shift + I is to copy the right thing and give it to your Agent, but you feel pathetic spending your life doing that?
I cured the curse. Hover on what you want the AI to change, press Alt + C, then Ctrl + V.
HoverSource Component Metadata with Alt + C.Alt + X to toggle): Drag a targeting crosshair to snap against horizontal/vertical edges and measure pixel-perfect offsets. Copies HoverSource Design Placement Metadata with Alt + C.Alt + C / Alt + Shift + C): Copies a structured Markdown block to your clipboard — component name, exact file path with line/column, computed styles, parent visual effects with CSS source locations, layout constraints, JSDoc comments, and raw JSX attributes (or snapping offsets and absolute CSS anchors in Design Mode). Pressing Alt + Shift + C copies the metadata of all ancestor layers under the cursor plus a minified structural HTML skeleton of the target element, providing the AI with layout and nesting context.Alt + P): Locks dynamic elements (like tooltips, popovers, or dropdowns) in place so you can hover and capture them without them disappearing.Alt + H): Show or hide the developer overlay bounding box and floating spec card.Alt + Shift + Scroll): Cycle through overlapping DOM elements under the cursor using a scroll combination, showing a clean 2D overlapping layer stack in the tooltip to easily target parent/child elements. Customize shortcuts in the dashboard.To measure the efficiency gains, we ran comprehensive benchmarks with an AI coding agent (Gemini 3.5 Flash) performing style modification tasks in a dry-run environment (logged using chronicle-mcp). We compared three prompt variations:
The benchmarks were performed on two public open-source projects of different scales:
| Metric | Pure Natural Language (A) | Senior Developer (B) | HoverSource Metadata (C) | Delta (C vs A) |
|---|---|---|---|---|
| Task Achievement | 60.0% (6/10) | 100.0% (10/10) | 100.0% (10/10) | +66.7% |
| Avg Agent Steps | 65.6 | 18.0 | 17.1 | -73.9% |
| Avg Tool Calls | 30.5 | 6.5 | 5.9 | -80.7% |
| Avg Execution Time | 142.0s | 44.2s | 16.4s | -88.5% (8.7x faster) |
| Avg Cumulative Input Tokens | 651,681 | 37,858 | 35,733 | -94.5% (18.2x fewer tokens) |
| Avg Peak Context Window | 28,257 | 7,372 | 6,486 | -77.0% |
| Metric | Pure Natural Language (A) | Senior Developer (B) | HoverSource Metadata (C) | Delta (C vs A) |
|---|---|---|---|---|
| Task Achievement | 100.0% (5/5) | 100.0% (5/5) | 100.0% (5/5) | - |
| Avg Agent Steps | 34.4 | 22.0 | 26.0 | -24.4% |
| Avg Tool Calls | 15.2 | 8.8 | 11.0 | -27.6% |
| Avg Execution Time | 34.4s | 38.8s | 24.8s | -27.9% (1.4x faster) |
| Avg Cumulative Input Tokens | 118,354 | 44,382 | 61,255 | -48.2% (1.9x fewer tokens) |
| Avg Peak Context Window | 14,140 | 8,589 | 9,984 | -29.4% |
grep) to locate the card and CSS files. In Cal.com's monorepo, this overhead exploded. The agent had to list multiple directories, inspect packages, and evaluate ambiguous components across different packages (such as packages/ui vs packages/coss-ui) just to find the active Button code. Guided by HoverSource, the agent went straight to the exact target line in a single turn.HoverSource runs in two distinct interaction modes depending on your task. You can toggle between them at any time by pressing Alt + X.
Ideal for debugging, modifying, or refactoring existing elements.
Alt + C copies Component Metadata (see Clipboard Output).Ideal for positioning new UI elements (cards, badges, modals, tooltips) relative to existing elements.
dX, dY).Alt + C copies Design Placement Metadata containing:
top, left, white-space).HoverSource supports resolving metadata for multiple frontend frameworks at different levels of depth depending on what information is exposed by the framework's development mode:
| Metadata Field | React (Non-Invasive / Invasive) | Vue (Non-Invasive / Invasive) | Svelte (Non-Invasive) | Angular (Non-Invasive / Invasive) | SolidJS (Non-Invasive) | Preact (Non-Invasive) | Astro (Non-Invasive) | Vanilla / Fallback |
|---|---|---|---|---|---|---|---|---|
| Component Name | Resolved | Resolved | Resolved | Resolved | Resolved | Resolved | Resolved | Fallback (DOM tag) |
| File Path | Resolved | Resolved | Resolved | Unresolved / Resolved* | Resolved | Resolved | Resolved | Partially Resolved** |
| Line Number | Resolved | None / Resolved* | Resolved | None / Resolved* | Resolved | Resolved | Resolved | Resolved** |
| Column Number | Resolved | None / Resolved* | Resolved | None / Resolved* | Resolved | Resolved | Resolved | Resolved** |
| Tag Name & Classes | Resolved | Resolved | Resolved | Resolved | Resolved | Resolved | Resolved | Resolved |
* Note: Vue and Angular require compile-time template tagging (Invasive mode via hs install --vue or hs install --angular) to expose line/column locations (and file path for Angular). Other frameworks resolve them out-of-the-box in development mode (Non-Invasive). For server-side environments (React Server Components / SSR in Next.js), React utilizes automatic, zero-config on-disk runtime patching during dev server execution.
** Note: Vanilla JS/TS resolves source locations dynamically via runtime monkey patching of DOM creation APIs (document.createElement and Element.prototype.innerHTML setter). Static elements in index.html or elements created before the overlay is injected will remain unresolved (Unknown).
For Next.js 14+ projects, HoverSource automatically resolves source code locations (file path, line, and column) for both server-rendered components (SSR) and React Server Components (RSC) when launched using hs dev or hs start.
__source), HoverSource reads the source locations directly without performance overhead. For RSC elements where compiler-level source attributes are stripped, HoverSource resolves locations dynamically on the server.For projects not using a component framework, HoverSource resolves source locations dynamically using a runtime monkey-patching approach:
document.createElement to capture the stack trace when an element is instantiated.Element.prototype.innerHTML setter to capture the stack trace and tag the element and its direct children.data-hs-source attribute.Unknown.
<head> during active development:
<script src="http://127.0.0.1:7300/hoversource-overlay.js"></script>
When utilizing HoverSource in Web Application Proxy Mode (hs --target=<url>), the reverse proxy employs dedicated routing and headers interception layers to handle modern browser restrictions: