harness-fe
Works with Astro via the React-compatible JSX runtime to provide source-aware instrumentation and runtime capture.
Enables edge runtime capture in Cloudflare Workers using HTTP-batch transport, allowing server-side events to flow into the same gateway as Node routes.
Supports multi-window Electron apps with unified session tracking so the agent gets a single cross-window timeline.
Provides source-aware instrumentation and server-side capture (errors, route durations, uncaught exceptions) for Next.js applications via dedicated packages.
Collects server-side error and performance data (Server Component errors, Route Handler durations, uncaught exceptions) from Node.js runtimes.
Instruments React applications with source location attributes (file:line:column) via build plugins or a custom JSX runtime, enabling precise agent feedback.
Works with Remix via the React-compatible JSX runtime to provide source-aware instrumentation and runtime capture.
Supports multi-window Tauri apps with unified session tracking so the agent gets a single cross-window timeline.
Enables edge runtime capture in Vercel Edge routes using HTTP-batch transport, allowing server-side events to flow into the same gateway as Node routes.
Injects source location attributes into components during Vite builds via a dedicated plugin.
Injects source location attributes into components during Webpack builds via a dedicated plugin.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@harness-fefind and fix the runtime error on the current page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Features
Source-Aware Instrumentation — Injects
data-morphix-locanddata-morphix-compattributes into JSX / Vue elements (via build plugin OR@harness-fe/react-jsxjsxImportSource), giving AI agents precise file:line:column references for every UI element.MCP Gateway — Connects AI agents (Claude, Cursor, Kiro) to browser + server runtimes via WebSocket / HTTP. Solo mode auto-spawns a shared loopback gateway; team mode (
harness --governed) adds RBAC tokens, project→agent binding, and audit. Bidirectional command/event communication with a unified timeline per page-load.Browser Runtime + Overlay — A lightweight browser SDK that captures console / network / errors / DOM (rrweb), exposes an in-page "H" overlay so users can file annotated screenshots (arrow + text on a snapdom-captured PNG), and surfaces a "My reports" view to manage their submissions. The overlay is extensible — add custom action buttons via
registerOverlayPluginto send the current scene/logs to your own system (issue tracker, Slack, webhook). See docs/overlay-plugins.md.Server-Side Capture (Next.js) —
@harness-fe/node-runtimecollects Server Component errors, Route Handler / Server Action durations, and uncaught Node exceptions.<HarnessScript>is a Server Component that uses Reactcache()to bind the same sessionId across SSR and the client runtime — one refresh = onesessions/{id}/timeline.jsonl.Edge Runtime Compatible — When Next emits an Edge worker bundle the SDK auto-switches to an HTTP-batch transport (
POST /eventson the gateway) so Cloudflare Workers / Vercel Edge routes flow into the same gateway as Node routes.Visitor Identity — Anonymous, stable per-browser identifier (
localStorage) + optionaluserIdfrom the app's auth layer. Lets agents build a real user journey across refreshes, tabs, and same-origin iframes.Annotated Feedback Loop — Users file tasks through the overlay; the screenshot's arrow + text annotations are flattened into the PNG so vision models read the annotations directly off pixels. Agents fetch the image via
tasks_get_attachmentas a native MCP image-content block.Multi-Bundler & Multi-Framework — Stable on Vite + React, Webpack + React, Vite/Webpack + Vue 3, Next.js (App + Pages Router, webpack + Turbopack). Any React 17+ toolchain via
@harness-fe/react-jsxjsxImportSource.Zero Production Overhead — All instrumentation, WebSocket / HTTP connections, the overlay, and the Node SDK are gated behind
NODE_ENV === 'development'.
Related MCP server: Kaboom Browser AI Devtools MCP
How It Works
Harness-FE uses a three-layer architecture to connect AI agents with your running application:
graph LR
Agent["🤖 AI Agent<br/>(Claude / Kiro)"]
GW["⚡ Gateway<br/>(harness)"]
Plugin["🔧 Build Plugin<br/>(Vite / Webpack)"]
Runtime["🌐 Runtime Client<br/>(Browser)"]
Agent <-->|stdio or HTTP-MCP| GW
GW <-->|WebSocket /ws| Plugin
GW <-->|WebSocket /ws| RuntimeLayer | Role | Communication |
Build Plugin | Transforms source files at dev-time, injecting location and component metadata into JSX/Vue templates. Sends HMR and error events to the gateway. | WebSocket |
Runtime Client | Runs in the browser, captures DOM snapshots, executes commands (click, type, query), and renders annotation overlays. | WebSocket |
Gateway | The central bridge. Exposes tools to AI agents via stdio MCP (solo) or HTTP MCP (team), stores events, and routes commands/events between agents and browser/plugin peers. | stdio or HTTP-MCP ↔ AI Agent, WebSocket ↔ Peers |
Data flow: Bundler transforms source → Browser renders instrumented DOM → Runtime captures state → Gateway relays to AI Agent → Agent sends commands back through the same path.
Supported Environments
Environment | Version | Status |
Vite + React | 5.x – 7.x | ✅ Stable ( |
Webpack + React | 5.x | ✅ Stable ( |
Vite + Vue 3 | 5.x – 7.x | ✅ Stable |
Webpack + Vue 3 | 5.x | ✅ Stable |
Next.js (App + Pages Router) | 13+ | ✅ Stable ( |
Any React toolchain (Remix, Astro, Turbopack, …) | React 17+ | ✅ Stable via |
Getting Started
In a hurry? Jump to the 90-second Quickstart.
Prerequisites
Node.js >= 20
pnpm >= 8 (recommended), npm >= 9, or yarn >= 1.22
Installation
pnpm (recommended):
pnpm add -D @harness-fe/vite @harness-fe/runtimenpm:
npm install -D @harness-fe/vite @harness-fe/runtimeyarn:
yarn add -D @harness-fe/vite @harness-fe/runtimeWhich path are you on?
You are… | Use | Auth | Setup |
Solo dev — one app, local |
| none (loopback trusted) | Quick start below + |
A team — many apps sharing one gateway |
| scoped token per agent |
Whichever path: install the skill first (npx @harness-fe/skill install) so your agent knows how to use harness-fe without you spelling out each tool. See docs/agent-setup.md.
Quick start — Vite + React (6 steps)
Install packages:
pnpm add -D @harness-fe/vite @harness-fe/runtimeConfigure Vite — add the plugin to your
vite.config.ts:import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import { harnessFE } from '@harness-fe/vite'; export default defineConfig({ plugins: [react(), harnessFE()] });Install the agent skill (recommended — do this first) — teach your agent how to drive harness-fe so you don't have to hand-hold it:
npx @harness-fe/skill install # auto-detects Claude Code / Cursor / KiroThe skill drops a curated playbook (mental model + tool catalog + decision flows) into your IDE. Your agent then knows which tool to reach for from a plain-English bug report — you describe the problem, it drives the app.
Wire the MCP server — add harness-fe to your agent's
.mcp.json(solo / local — no token, trusted on loopback):{ "mcpServers": { "harness-fe": { "type": "stdio", "command": "npx", "args": ["-y", "@harness-fe/cli", "mcp"] } } }harness mcpauto-spawns a shared gateway on127.0.0.1:47729and proxies MCP traffic to it. Multiple IDE windows share the same gateway automatically. Sharing across a team? Use governed mode instead. Phone / second-machine debugging: docs/lan-mode.md.Start your dev server —
pnpm dev.Describe a problem to your agent — "the increment button does nothing" — and it uses the skill + tools to inspect console/network, locate the source (
file:line), fix, and verify. The agent that built it never leaves.
Adopting in legacy Vue projects? See docs/vue2-compat.md — the plugin will never break your build, but you may want to dry-run first to see which files miss out on source-aware tagging.
Embedding in Electron / Tauri / multi-window hosts? See docs/electron.md for how to make every renderer share one sessionId so the agent gets a unified cross-window timeline.
Quick start — Next.js (App or Pages Router)
For Next.js the recommended path is plugin-less (via react-jsx for source tagging + next for SSR session continuity). Two file touches.
Install:
pnpm add -D @harness-fe/next @harness-fe/react-jsx @harness-fe/runtime @harness-fe/node-runtimetsconfig.json— enable the source-tag JSX runtime:{ "compilerOptions": { "jsxImportSource": "@harness-fe/react-jsx" } }next.config.mjs— wrap withwithHarness():import { withHarness } from '@harness-fe/next/config'; export default withHarness({/* …your config… */}, { projectId: 'my-app' });app/layout.tsx— drop in the Server Component (yes, no'use client'needed):import { HarnessScript } from '@harness-fe/next'; import { getCurrentUser } from '@/lib/auth'; export default async function RootLayout({ children }) { const user = await getCurrentUser().catch(() => null); return ( <html><body> <HarnessScript projectId="my-app" userId={user?.id} buildId={process.env.NEXT_PUBLIC_GIT_SHA} /> {children} </body></html> ); }pnpm dev. Twopeer connectedlines should show in the gateway log per refresh — onerole=node-runtime, onerole=runtime-client, same sessionId.
Optional — structured logs with @harness-fe/log
For explicit logs (instead of relying on auto-captured console.*), use the isomorphic logger. Same import works in Server Components, Route Handlers, Server Actions, and Client Components — events from both server and client land in the same session timeline.
pnpm add @harness-fe/logimport { log } from '@harness-fe/log';
// Anywhere — Server Component, Route Handler, Client Component, shared util
log.info('Cart loaded', { items: items.length });
log.scope('checkout').warn('Stripe latency high', { ms: latency });
log.error('Webhook failed', err);Agents can ask "show me all log.warn(...) in this session" because log events are tagged app-log — distinct from auto-captured server-log / browser console. See packages/log/README.md for details.
User feedback (in-page overlay)
When the runtime loads in dev a discreet "H" mark appears bottom-right. Clicking opens the info card. From there users can:
Copy snapshot — markdown block with project / build / session / tab / url ready to paste to an agent.
Report a problem — picks an element →
snapdomcaptures it with 32 px context → user draws arrows + text → flattened PNG ships as part of atask.submitevent. Vision-capable agents read the annotations directly off the pixels.My reports — list of this visitor's tasks across all sessions: status, agent's resolution note, inline edit, copy-for-agent, delete with two-click confirm.
Packages
Package | Description |
Shared types, Zod schemas, message + wire definitions | |
Core library — WS bridge, event store, recording/replay, caller identity + per-project tenant isolation. No HTTP server; gateway owns all transports. | |
Gateway — MCP (stdio + HTTP, per-session), | |
| |
React SPA served at | |
Standalone browser sandbox + interceptor lib ( | |
Browser SDK — capture(via | |
Node SDK — Server Component / Route Handler / uncaught error capture. Dual transport: WS in Node runtime, HTTP-batch in Edge runtime | |
Next.js integration — | |
Isomorphic structured logger — same | |
| |
Vite plugin | |
Webpack plugin | |
Core unplugin (shared by all bundler plugins) | |
⭐ Start here — curated agent playbook; |
Documentation
VISION.md — Why this project exists; the three deployment directions that drive the roadmap
docs/agent-setup.md — ⭐ Connect your agent: install the skill first, then wire
.mcp.json(solo or governed)docs/gateway-team-mode.md — Share one gateway across a team: governed mode, scope RBAC, project→agent binding, audit
ARCHITECTURE.md — Package responsibilities, data flow diagrams, sessionId resolution chain, and protocol reference
docs/architecture/sandbox.md — The
@harness-fe/sandboxlib (browser API patching + interceptor middleware) — design + safety contract + 9-channel matrixROADMAP.md — Milestones, organised by mission direction
docs/troubleshooting.md — Events not showing? sessionId mismatch? Where do timeline files live? Start here
CONTRIBUTING.md — Development setup, commit conventions, and PR process
License
MIT © 2026 MorphixAI
This server cannot be deployed
Maintenance
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Chrome DevTools Protocol-based MCP server that enables AI coding assistants to control browsers for JavaScript debugging, reverse engineering, web scraping, and API debugging.866 npm1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for browser debugging, inspection, and verification that streams console logs, network errors, and user actions into AI coding assistants.65AGPL 3.0
- AlicenseAqualityAmaintenanceAn MCP server that connects AI agents to a running Chrome tab via the Chrome DevTools Protocol (CDP), enabling runtime debugging and page inspection.624153 npm1ISC
- FlicenseNot gradedqualityDmaintenanceMCP server that connects AI agents to browser DevTools via CDP, enabling real-time access to console logs, network requests, and page state.-