尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Framework-agnostic element inspector for developers — click any UI element to see its source, navigate the component tree, and take action
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A multi-framework element inspector for developers. Inspect an instrumented UI element to see its source, navigate the component tree, and take action.
For published versions and exact publication dates, see the public
Vite package registry metadata.
Its versions and time fields are package history, separate from studio notes
and the unreleased changes in this checkout. A publication date is not proof of
successful operation on every platform.
npm install -D @aylith/inspekt-vite
// vite.config.ts
import { defineConfig } from 'vite';
import { inspekt } from '@aylith/inspekt-vite';
export default defineConfig({
plugins: [
// Keep your existing framework plugins here (for example react()).
inspekt({
editor: 'cursor', // or 'vscode', 'webstorm', 'zed', ...
}),
],
});
Start your existing dev script (usually npm run dev), open its reported URL,
and use Ctrl+Alt+Click on an element. Ordinary clicks keep working. The popover
should show the actual file and line; expand Show source for a snippet and
use Copy path to take the reference back to your editor. Escape closes it.
The Vite route needs no Chrome extension, daemon or coding-agent setup. Keep the server local; editor launching requires your chosen editor to be installed.
Current Windows release limitation: a clean Windows test of published
@aylith/[email protected] / @aylith/[email protected] found that normalized
C:/... paths fall back to DOM-only inspection. The published plugin also uses
the configured rather than actual server origin and leaves a dev-module link in
production HTML. Corrections in this checkout are not a published package update.
See the first-use verification procedure;
other platforms and framework versions need their own acceptance checks.
Linux local-package proof (24 September 2026): from source revision
52623f4f4ebe66d6b63000ebb75cfab306da0fb3, locally packed core 0.4.0,
CLI 0.1.0 and Vite 0.2.1 archives installed into a fresh isolated React 19/Vite 8
consumer. In system Chromium, an ordinary click still worked; Ctrl+Alt+Click
identified the actual src/main.jsx:8:5:button, Show source returned that
file's exact button line, and Copy Path returned its exact file:line.
Reload, Escape, keyboard toggle, narrow dark/reduced-motion placement, a denied
outside-root snippet request and a production build without the inspector also
passed. The repeatable proof is scripts/vite-first-use-proof.mjs; its --local-tarballs
mode now consumes core, CLI and Vite archives and accepts --temp-base,
--playwright and --chromium for Linux. The core/CLI/Vite archive SHA-256
values were 4a03329ba5a8290276c17d1d462c1110cd55817cdccaaee052ef695f06dd9ff8,
d7d14bfa9e9d4e91de22aacb796bdae5b057ce6b991aeef0a57fe45c5c3d39d0
and 5526dbd5fa739ce7471ee3c4353dc2dc7a0e4ae946e10e53649a6f7acd50cd4d.
The full local test graph passed 21/21 tasks with a task-owned TMPDIR passed
through Turbo's environment. This does not verify current npm registry
bytes, Windows or macOS, other frameworks, editor/daemon/agent enrollment or
an unaided first-time user; it is not a package publication or public release.
| Shortcut | Action |
|---|---|
Ctrl+Alt+Click | Inspect element (show popover with actions) |
Shift+Alt+Click | Open file in IDE immediately |
Ctrl+Alt+I | Toggle Inspekt on/off |
Ctrl+Alt+O | Toggle overlay (component name badges) |
Ctrl+Alt+T | Toggle component tree panel |
Escape | Close popover / tree panel |
On Mac, Cmd replaces Ctrl.
| Package | Description |
|---|---|
@aylith/inspekt | Published runtime, plugins and agent tools, with inspekt, inspekt-daemon, and inspekt-mcp commands; the source-built Chrome extension is separate |
@aylith/inspekt-core | Runtime UI — overlay, popover, tree panel, highlighting. Pure vanilla JS/CSS in Shadow DOM |
@aylith/inspekt-vite | Vite plugin — injects source location attributes at build time |
@aylith/inspekt-bundlers | Webpack, Rspack, esbuild, and Rollup plugins (via unplugin) |
@aylith/inspekt-cli | CLI utility — open files in IDE from terminal |
@aylith/inspekt-chrome | Chrome extension — global settings and standalone inspector |
@aylith/inspekt-daemon | Localhost HTTP server holding the grab queue the extension writes to |
@aylith/inspekt-mcp | MCP server exposing the grab queue to agents over stdio |
@aylith/inspekt-skill |
import { inspekt } from '@aylith/inspekt-vite';
export default defineConfig({
plugins: [inspekt()],
});
import { webpack } from '@aylith/inspekt-bundlers';
module.exports = {
plugins: [webpack()],
};
import { rspack } from '@aylith/inspekt-bundlers';
module.exports = {
plugins: [rspack()],
};
import { esbuild } from '@aylith/inspekt-bundlers';
await build({
plugins: [esbuild()],
});
inspekt({
// Framework detection (auto-detected if omitted)
framework: 'react', // 'react' | 'vue' | 'svelte' | 'solid' | 'auto'
// IDE to open files in
editor: 'cursor', // 'vscode' | 'cursor' | 'webstorm' | 'zed' | ...
// Docker path mapping (auto-detect from docker-compose)
dockerCompose: true,
// Or manual mapping
pathMapping: {
'/app/': '/home/user/projects/my-app/',
},
// File filtering
include: ['src/**/*.{tsx,jsx,vue,svelte}'],
exclude: ['node_modules/**', '**/*.test.*'],
});
When your app runs in a Docker container, file paths point to container paths (/app/src/...). Inspekt fixes this automatically:
// Auto-detect from docker-compose.yaml volume mounts
inspekt({ dockerCompose: true });
// Or specify manually
inspekt({
pathMapping: {
'/app/': process.cwd() + '/',
},
});
Add your own actions to the inspector popover:
import { createInspekt } from '@aylith/inspekt-core';
const inspekt = createInspekt();
inspekt.registerAction({
id: 'open-jira',
label: 'Search Jira',
icon: '<svg>...</svg>',
handler(element) {
window.open(`https://jira.example.com/search?q=${element.componentName}`);
},
});
inspekt.on('inspect', (element) => {
console.log('Inspected:', element.filePath, element.componentName);
});
inspekt.on('action', (actionId, element) => {
console.log('Action:', actionId, 'on', element.componentName);
});
The Chrome extension provides:
The Vite quick-start does not require this extension. There is no verified Chrome Store installer yet. For the optional source-built extension, use the repository-root dist/ directory after building, then load it unpacked in Chrome's developer mode.
npx @aylith/inspekt setup generates a token, writes it to ~/.inspekt/config.json, and
registers the Inspekt MCP server with every agent it finds installed (Claude Code,
Cursor, Codex, Gemini CLI, Antigravity).
With the daemon running (inspekt-daemon), "Send to Agent" in the popover appends
the grabbed element — file, line, component, surrounding source, page URL — to a
shared queue. The agent reads it through the MCP tools grab_latest, list_grabs,
get_grab, mark_grab_processed, clear_queue, and open_grab_in_editor, so
"fix this button" resolves to a real file and line.
Every mutating daemon route requires the X-Inspekt-Token header. The token and
handshake files are written owner-only.
VS Code, VS Code Insiders, Cursor, Windsurf, WebStorm, PhpStorm, PyCharm, IntelliJ IDEA, Sublime Text, Zed, Vim/Neovim, Emacs.
data-insp-path attributes onto every component's root element with the source file path, line, and columnCtrl+Alt+Click, Inspekt walks up the DOM to find the nearest data-insp-path, shows a popover with actions, and highlights the elementAll Inspekt UI renders inside Shadow DOM to prevent any style conflicts with your app.
git clone https://github.com/aylith-labs/inspekt.git
cd inspekt
bun install
bun run build
bun run --filter 'inspekt-playground' dev
The checks CI runs, in order:
bun run lint # biome check .
bun run typecheck
bun run test
bun run build
bun run verify:exports # declared entrypoints resolve against the built output
MIT
| Installable skill telling a skill-aware agent when to read a grab |