Sentinel

Sentinel User Guide

A Chrome extension for recording web interactions, capturing bugs, and generating step-by-step visual guides — no code required.

Chrome MV3 Side Panel React 19 TypeScript 5.9 Tailwind v4
1

Getting Started

1.1 Prerequisites

  • Node.js 18+ and npm installed on your system.
  • A Chromium-based browser: Google Chrome 114+, Microsoft Edge, or Brave.

1.2 Build from Source

Open a terminal in the project root and run:

cd extension
npm install
npm run build

This creates the extension/dist/ folder containing the production-ready extension files.

Development mode Use npm run dev for live rebuilds during development. After each rebuild, reload the extension in your browser to pick up changes.

1.3 Load in Your Browser

  1. Open your browser and navigate to chrome://extensions/.
  2. Enable Developer mode using the toggle in the top-right corner.
  3. Click Load unpacked.
  4. Select the extension/dist folder from this project.
  5. Sentinel appears in your toolbar. Pin it for easy access.

1.4 Open the Side Panel

Click the Sentinel icon in your browser toolbar. The side panel opens alongside your current page and stays open while you interact with websites — unlike popups, it won't close when you click away.

Why a side panel? Side panels persist during page navigation and interaction, making them ideal for recording sessions that span multiple pages or long workflows.
2

Recording

2.1 Start a Recording

  1. Open the Sentinel side panel by clicking its toolbar icon.
  2. Click Start Recording in the header controls.
  3. Interact with any website — clicks, typing, form submissions, keyboard shortcuts, and scrolling are all captured automatically.
  4. Watch recorded steps appear live in the Steps tab as you work.
  5. Click Stop Recording when finished.

2.2 What Gets Captured

EventDetails
ClicksButtons, links, inputs, and interactive elements. Layout-only containers (div, section) are filtered out unless they have roles or event handlers.
Text InputDebounced at 800ms per element. Only the final value is captured on blur or timeout.
KeyboardSpecial keys (Enter, Escape, Tab, arrows, F-keys) and modifier combos (Ctrl+S, etc.).
ScrollingDebounced at 1 second with a 200px minimum distance threshold.
Form SubmitCaptured on the submit event.
NavigationPage URL changes are tracked automatically.

2.3 Noise Reduction

Sentinel applies intelligent filtering to keep recordings clean and readable:

  • Input debouncing — 800ms per element; only emits the final value on blur or timeout.
  • Keyboard filtering — only special keys and modifier combos are recorded; regular typing is captured as input events.
  • Click deduplication — clicks within 300ms of each other on the same element are merged.
  • Layout container rejection — clicks on div, section, main, etc. are suppressed unless the element has a role, onclick, or tabindex.
  • Scroll throttling — 1-second debounce with a 200px minimum distance threshold.
  • Change events — removed entirely (redundant with debounced input).
3

Session Management

3.1 Save & Load

Save

Save the current recording for later use. Give it a meaningful name to keep your library organized.

Load

Load any saved session to review its steps, continue editing, or play it back on the target website.

3.2 Rename & Delete

Rename

Click the session name to edit it inline. Press Enter or click away to confirm.

Delete

Remove sessions you no longer need. This action is immediate and cannot be undone.

3.3 Storage

Sessions are stored in chrome.storage.local and persist across browser restarts. Storage is per-browser-profile — sessions are not synced across devices.

4

Visual Guides

4.1 Export an HTML Guide

Turn any recording into a polished, self-contained HTML document with screenshots:

  1. Stop the current recording (or load a saved session).
  2. Click Export HTML Guide.
  3. A .html file downloads automatically.
  4. Open it in any browser to see a step-by-step walkthrough with screenshots, selectors, and timestamps.

4.2 Guide Editor

Before exporting, refine your guide in the built-in editor. Click Edit Guide to open it in a new tab.

  • Three-column layout — table of contents sidebar, step editor, and live preview.
  • Edit step descriptions — rewrite auto-generated text to match your documentation style.
  • Reorder or remove steps — drag steps or delete irrelevant ones.
  • Live preview — see exactly how the exported guide will look as you edit, with contenteditable support.

4.3 Sharing Guides

Exported guides are completely standalone — no external dependencies, all images embedded as base64. Share them via email, Slack, your team wiki, or any file-sharing platform. Anyone with a web browser can open them.

5

Playback

5.1 Start Playback

  1. Navigate to the page where the recording started.
  2. Open the Sentinel side panel.
  3. Choose a playback speed: 0.5x, 1x, 1.5x, 2x, or 4x.
  4. Click Start Playback.

A progress bar shows the current step number and total steps. During playback, the target element is highlighted with a visual indicator.

5.2 Playback Controls

ControlDescription
PauseTemporarily halt playback at the current step.
ResumeContinue playback from where you paused.
StopEnd the playback session entirely.
Next StepAdvance to the next action (step-by-step mode only).

5.3 Step-by-Step Mode

Enable step-by-step mode to advance one action at a time. After each step executes, playback pauses and waits for you to click Next Step. This is useful for debugging workflows or demonstrating processes to others.

6

Assertions & Testing

6.1 Adding Assertions

Add assertions to turn recordings into automated tests that validate your application's state.

  1. Expand the Assertions panel in the side panel.
  2. Click Inspect Element — hover over any element on the page to highlight it, then click to select.
  3. Choose an assertion type from the dropdown.
  4. Enter an expected value (if required) and click Add Assertion.

6.2 Assertion Types

TypeDescription
Is visibleAsserts the element is visible on the page.
Is hiddenAsserts the element is not visible.
Text containsAsserts the element's text includes the expected string.
Text equalsAsserts the element's text matches exactly.
Has classAsserts the element has the specified CSS class.
Exists in DOMAsserts the element exists in the document.

6.3 Test Reports

Assertions are evaluated automatically during playback after their assigned step. When playback completes, a Test Report displays pass/fail results for each assertion with details about what was expected versus what was found.

7

Error Tracking

7.1 Captured Errors

Sentinel automatically captures JavaScript errors and network failures from the pages you're testing. View them in the Errors tab.

SourceWhat's Captured
console.errorExplicit error logging from application code.
window.onerrorUncaught exceptions with file, line, and column info.
Promise rejectionsUnhandled promise rejections with reason and stack.
CSP violationsContent Security Policy violations with directive and blocked URI.
Network failuresFailed HTTP requests detected via PerformanceObserver.

Errors are linked to the recording timeline, so you can see exactly when they occurred relative to your actions.

7.2 Issue Reports

Export captured errors and steps as a standalone issue report HTML document designed for sharing with developers. Reports include:

  • Error messages and stack traces
  • Steps to reproduce (from the recording)
  • Screenshots at each step
  • Browser and page metadata
8

Video Recording

8.1 Capture a Video

Click Record Video in the header controls to start a screen capture of the active browser tab. The recording runs alongside step recording — you can capture both simultaneously.

  • Video is encoded as WebM (VP9/VP8 codec) at 1 Mbps.
  • Maximum recording duration is 5 minutes per clip.

8.2 Managing Clips

View all recorded clips in the Videos tab. Each clip shows a thumbnail preview. Click any clip to enlarge it in a modal viewer.

8.3 Limitations

Side panel limitation Native fullscreen is not available within Chrome side panels. Use the enlarge modal to view videos at a larger size.

Video clips are stored as blob URLs in memory and are not persisted across browser restarts. Export or download clips before closing the browser if you need to keep them.

9

UI Reference

9.1 Side Panel Layout

The Sentinel side panel is organized into collapsible sections:

SectionPurpose
HeaderLogo, title, and quick-access controls (Record, Video, Export).
Status BarShows current state: Idle, Recording, Playing, or Paused.
Steps TabLive list of recorded actions with type, selector, and value.
Errors TabCaptured JavaScript errors and network failures.
Videos TabRecorded screen capture clips with thumbnails.
Recording ControlsStart/Stop recording buttons.
Playback ControlsSpeed selector, step-by-step toggle, play/pause/stop, progress bar.
SessionsSave, load, rename, and delete recorded sessions.
AssertionsElement inspector and assertion builder for automated tests.
Test ReportPass/fail results after playback with assertions.

9.2 Captured Keyboard Events

During recording, Sentinel captures these keyboard events:

CategoryKeys
NavigationEnter Tab Escape
Arrow keys
Function keysF1 through F12
Modifier combosCtrl+key, Alt+key, Cmd+key

Regular character typing is captured as text input events (debounced), not individual key presses.

10

AI Automation (MCP)

10.1 Overview

Sentinel includes a Model Context Protocol (MCP) server that lets AI assistants (Claude Code, Cursor, Copilot, etc.) control the extension programmatically. The AI can record guides, capture errors, take screenshots, navigate pages, and read your source code—all in a single conversation.

Why MCP? MCP is an open standard that connects AI models to external tools. Sentinel’s MCP server turns the extension into an AI-controllable browser automation toolkit with full project context.

Once configured, you can give the AI high-level instructions like:

  • “Perform the task addition flow and write a guide.”
  • “Evaluate task addition for JS errors.”
  • “Record me logging in and export a step-by-step guide.”

The AI will call sentinel_status() to load your project context, read source files, navigate to your dev server, and use Sentinel tools to produce the output.

10.2 Setup & Installation

There are two ways to run the MCP server. Option A (recommended) lets you start and stop it with a button inside the extension. Option B is the manual terminal fallback.

Option A — Start/Stop from the Settings tab (recommended)

  1. Install Python dependencies (once):
    pip install -r mcp-server/requirements.txt
  2. Register the native launcher (once). Open the Sentinel Settings tab → MCP Bridge. If the launcher is not yet installed you will see an amber banner with your exact command—copy and run it:
    python mcp-server/install_host.py <your-extension-id>
    The extension ID is shown in the banner and has a Copy button. After running the command, reload the extension in chrome://extensions/.
  3. From now on, use the Start and Stop buttons in the Settings tab to control the server—no terminal needed.
  4. Configure your AI client. In the Supported AI Tools section, click Install next to your tool to copy the correct config snippet, then paste it into the tool’s config file.

Option B — Manual terminal

  1. Install dependencies (once):
    pip install -r mcp-server/requirements.txt
  2. Start the server:
    python mcp-server/sentinel_mcp.py
  3. Keep the terminal open while using AI tools. Open the Sentinel side panel in Chrome and check for the green Connected badge.
Windows only The launcher (Option A) currently supports Windows. On macOS/Linux, use Option B or register the native host manually by adapting install_host.py for your platform.

10.3 MCP Tools Reference

ToolDescription
sentinel_navigateNavigate the active tab to a URL.
sentinel_screenshotCapture a screenshot of the current tab.
sentinel_statusGet extension state (recording, error tracking, counts).
sentinel_start_recordingStart recording user interactions.
sentinel_stop_recordingStop recording and return captured action count.
sentinel_inject_actionExecute a synthetic DOM action (click, input, scroll, etc.).
sentinel_get_sessionGet all recorded actions from the current session.
sentinel_export_guideGenerate an HTML guide from the recorded session.
sentinel_start_error_trackingStart capturing JS errors, network failures, and CSP violations.
sentinel_stop_error_trackingStop error tracking.
sentinel_get_errorsGet all captured errors.
sentinel_save_issueSave an issue with a screenshot (bug or feature request).
sentinel_get_issuesGet all saved issues.
sentinel_export_issuesGenerate an HTML issue report.
sentinel_wait_for_elementWait for a CSS selector to appear in the DOM.
sentinel_evaluate_selectorCheck if a selector exists and get element info.
sentinel_create_guideOne-shot: navigate, perform actions, and export a guide.
sentinel_investigateOne-shot: navigate, track errors, and return findings.

10.4 Settings Tab

The Settings tab (gear icon) is the main control center for MCP. It has three relevant sections:

MCP Bridge

Shows the server name, live WebSocket status badge, and process controls.

Start button

Visible when the server is stopped and the launcher is installed. Spawns sentinel_mcp.py as a background process.

Stop button

Visible when the server is running. Terminates the process cleanly via PID file.

Not installed banner

Shown when the native launcher hasn’t been registered. Displays the exact install command with your extension ID and a Copy button.

Status badges

Connected — WebSocket linked, AI tools ready.
Disconnected — server not running or not reachable.
Error — connection attempt failed.

Project

The Project section gives the AI persistent context about your codebase. Set three fields:

FieldDescription
Project NameHuman label shown in status responses.
Source FolderFilesystem path to your project root (e.g. C:/projects/my-app). The AI uses this with its own file-reading tools to understand the codebase before acting.
Dev Server URLThe URL of your running dev server (e.g. http://localhost:3000). The AI navigates here automatically at the start of any task.

All three fields are returned in sentinel_status() under project.name, project.path, and project.devUrl.

Install MCP locally — once you have set a Source Folder, this button writes a .mcp.json to that folder pointing to the Sentinel MCP server. This lets any AI tool that starts from that project directory pick up the server automatically, without global configuration.

Supported AI Tools

Lists all compatible AI clients (Claude Code, Claude Desktop, Cursor, VS Code Copilot, Codex). Click Install next to a tool to copy its config snippet to the clipboard, then paste it into the tool’s config file. A green check marks tools you have already set up. The Remove icon clears the installed state.

ToolConfig file
Claude Code.mcp.json
Claude Desktopclaude_desktop_config.json
Cursor.cursor/mcp.json
VS Code Copilot.vscode/settings.json
Codex.codex/config.toml

10.5 Troubleshooting MCP

Settings shows amber “Not installed” banner

The native launcher has not been registered with Chrome. Copy the command shown in the banner and run it in a terminal, then reload the extension from chrome://extensions/. This is a one-time step.

Start button does nothing / spinner hangs

The launcher is registered but Python failed to start the server. Check that python is on your PATH and that dependencies are installed (pip install -r mcp-server/requirements.txt). Also verify the registry path with regedit under HKCU\Software\Google\Chrome\NativeMessagingHosts\com.sentinel.launcher.

Extension shows “Disconnected” after clicking Start

The server process starts but the WebSocket connection takes a few seconds. Wait up to 15 seconds and the status badge will update automatically. If it stays disconnected, click the refresh icon.

Tools return “Extension not connected”

The AI client launched the MCP server but the browser extension hasn’t linked yet. Open the Sentinel side panel in Chrome, wait for the Connected badge, then retry.

WebSocket error in Chrome extension console

ERR_CONNECTION_REFUSED on port 18925 is expected when the MCP server is not running. It does not affect recording, playback, or any other feature. Start the server to clear the error.

Port 18925 already in use

A previous MCP server instance is still running. Click Stop in Settings, or find and kill the process with netstat -ano | findstr 18925 followed by taskkill /F /PID <pid>.

10.6 AI Workflow Examples

Once your project is configured in Settings, the AI loads context automatically via sentinel_status() and can act on high-level instructions. Here are common patterns:

Write a feature guide

“Perform the task addition flow and write a guide.”

  1. AI calls sentinel_status() → gets project.path and project.devUrl.
  2. AI reads relevant source files to understand the feature.
  3. AI navigates to the dev URL and starts recording.
  4. AI performs the interaction steps via sentinel_inject_action().
  5. AI stops recording and calls sentinel_export_guide() with a generated title and intro.

Evaluate a feature for errors

“Evaluate task addition for JS errors.”

  1. AI calls sentinel_status() → gets project context.
  2. AI reads the relevant source files for the feature.
  3. AI calls sentinel_start_error_tracking(), then navigates and performs the flow.
  4. AI calls sentinel_get_errors() and cross-references errors with the source code.
  5. AI reports findings with file/line references and suggested fixes.

Log a bug with screenshot

“The submit button on the contact form is misaligned — log it.”

  1. AI navigates to the relevant page.
  2. AI calls sentinel_save_issue() with type bug, a title, and notes — a screenshot is captured automatically.
  3. AI calls sentinel_export_issues() to generate a full issue report.
Tip: be specific about the feature, not the steps. You don’t need to tell the AI which buttons to click. Describe the feature or flow by name (as it appears in your source code or UI) and the AI will figure out the steps from the codebase and live browser state.
11

Architecture

11.1 Project Structure

extension/
  src/
    types.ts                — Shared TypeScript interfaces
    background.ts           — Service worker (state, screenshots, routing)
    content.ts              — Content script (recording, playback, inspection)
    App.tsx                 — Main React shell
    main.tsx                — React entry point
    index.css               — Tailwind CSS entry
    editor.tsx              — Guide editor entry point
    EditorApp.tsx           — Guide editor React app
    lib/
      messages.ts           — Typed message bus
      storage.ts            — Session CRUD operations
      guideHtml.ts          — HTML generation for guides & reports
    hooks/
      useExtensionState.ts  — Reactive hook via chrome.storage.onChanged
    components/
      Header.tsx            — Logo + title + quick controls
      StatusBar.tsx         — State indicator
      RecordingControls.tsx — Start/Stop recording
      PlaybackControls.tsx  — Speed, step-by-step, progress
      StepList.tsx          — Live action list
      ExportButton.tsx      — Export HTML guide
      SessionManager.tsx    — Session CRUD UI
      AssertionBuilder.tsx  — Element inspector + assertions
      TestReport.tsx        — Pass/fail results table
      Footer.tsx            — Version info
  public/
    manifest.json           — MV3 manifest
  dist/                     — Production build output

11.2 Tech Stack

React 19

UI framework for the side panel and guide editor.

TypeScript 5.9

Strict mode with shared types across all extension contexts.

Vite 8

Fast build tooling with multi-entry support (main, background, content).

Tailwind CSS v4

Utility-first styling via PostCSS integration. Zero runtime JS.

11.3 Chrome APIs

PermissionPurpose
activeTabAccess the current tab for screenshots and script injection.
storagePersist sessions and state across browser restarts.
scriptingInject the content script into web pages.
downloadsTrigger file downloads for exported guides.
tabsQuery and interact with browser tabs.
sidePanelOpen the persistent side panel UI.
tabCaptureCapture tab media streams for video recording.
12

Troubleshooting

12.1 Common Issues

Side panel doesn't open

Make sure you're on a regular web page (not chrome:// or chrome-extension:// pages). The extension requires an active tab with a URL that allows content script injection.

Recording doesn't capture actions

Reload the extension from chrome://extensions/ and refresh the target page. The content script must be injected before recording starts.

Playback skips steps or fails

Ensure you're on the same page (or starting URL) where the recording began. If the page content has changed, selectors may no longer match the expected elements.

Export produces a large file

Screenshots are embedded as base64 JPEG (70% quality). For long recordings with many steps, the exported file can be several megabytes. Consider trimming unnecessary steps in the guide editor before exporting.

Video recording not available

Video capture requires the tabCapture permission. Ensure the extension has this permission and that no other extension is currently capturing the tab.

12.2 Development Workflow

  1. Edit source files in extension/src/.
  2. Run npm run build (or use npm run dev for watch mode).
  3. Open chrome://extensions/ and click the reload icon on the Sentinel card.
  4. Click the toolbar icon to reopen the side panel with your changes.
Hot reloading Chrome does not support true hot-reload for extensions. You must manually click the reload button and reopen the side panel after each build.