Troubleshooting
Diagnose widget, hub, bridge, project-routing, and watcher-lease states.
Start with the exact status shown in the widget's Agent or Settings panel.
MCP not configured
The widget has no beaconUrl. Mount it with both routing values:
<VibeCheck
beaconUrl="http://127.0.0.1:4200"
projectId="my-storefront"
/>MCP server offline
Start the hub and check its public health route:
npx -y @wcgw/vibe-check-mcp@0.3.0 hub
curl http://127.0.0.1:4200/api/healthIf you changed the port, update the hub's VIBE_CHECK_PORT, the bridge's
VIBE_CHECK_HUB_URL, and the widget's beaconUrl together.
Waiting for an agent
This is good browser-to-hub connectivity with no watcher. In an agent session,
call list_projects, then watch_for_issue with the displayed project_id.
The status changes only after the lease is acquired.
Agent disconnected
The watcher missed heartbeats. Restart or reconnect the MCP client; after the
15-second lease expiry, call watch_for_issue again.
A second agent was rejected
The original watcher remains the owner. Continue in that session, or call
release_project there before changing sessions. Retrying from the rejected
session does not steal the lease.
project-ambiguous
Several dev servers are active. Call list_projects and pass the intended
project_id. Give each widget a stable, unique ID instead of relying only on its
localhost port.
Port 4200 is already in use
A VibeCheck hub may already own it; reuse that one for all projects. To choose a different port:
VIBE_CHECK_PORT=4300 npx -y @wcgw/vibe-check-mcp@0.3.0 hub
VIBE_CHECK_HUB_URL=http://127.0.0.1:4300 npx -y @wcgw/vibe-check-mcp@0.3.0 connectThe bridge does not appear in the agent
- Restart the client after changing MCP configuration.
- Confirm its command ends in
connect. - Start the hub first;
connectfails fast when the hub is unavailable. - In Claude Code, run
claude mcp list.
The widget does not appear
- Confirm it is mounted and not gated out by the current environment.
<PerfToggle />starts as a collapsed pill; press Alt+Shift+V.- For Next.js, load it client-side with
ssr: false.
A metric is unavailable
VibeCheck feature-detects browser APIs. Memory and LoAF attribution are
Chromium-only; unsupported Web Vital entry types remain null. This does not
prevent hub or agent communication.