Sentinel User Guide
A Chrome extension for recording web interactions, capturing bugs, and generating step-by-step visual guides — no code required.
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.
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
- Open your browser and navigate to
chrome://extensions/. - Enable Developer mode using the toggle in the top-right corner.
- Click Load unpacked.
- Select the
extension/distfolder from this project. - 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.
Recording
2.1 Start a Recording
- Open the Sentinel side panel by clicking its toolbar icon.
- Click Start Recording in the header controls.
- Interact with any website — clicks, typing, form submissions, keyboard shortcuts, and scrolling are all captured automatically.
- Watch recorded steps appear live in the Steps tab as you work.
- Click Stop Recording when finished.
2.2 What Gets Captured
| Event | Details |
|---|---|
| Clicks | Buttons, links, inputs, and interactive elements. Layout-only containers (div, section) are filtered out unless they have roles or event handlers. |
| Text Input | Debounced at 800ms per element. Only the final value is captured on blur or timeout. |
| Keyboard | Special keys (Enter, Escape, Tab, arrows, F-keys) and modifier combos (Ctrl+S, etc.). |
| Scrolling | Debounced at 1 second with a 200px minimum distance threshold. |
| Form Submit | Captured on the submit event. |
| Navigation | Page 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 arole,onclick, ortabindex. - Scroll throttling — 1-second debounce with a 200px minimum distance threshold.
- Change events — removed entirely (redundant with debounced input).
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.
Visual Guides
4.1 Export an HTML Guide
Turn any recording into a polished, self-contained HTML document with screenshots:
- Stop the current recording (or load a saved session).
- Click Export HTML Guide.
- A
.htmlfile downloads automatically. - 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
contenteditablesupport.
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.
Playback
5.1 Start Playback
- Navigate to the page where the recording started.
- Open the Sentinel side panel.
- Choose a playback speed: 0.5x, 1x, 1.5x, 2x, or 4x.
- 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
| Control | Description |
|---|---|
| Pause | Temporarily halt playback at the current step. |
| Resume | Continue playback from where you paused. |
| Stop | End the playback session entirely. |
| Next Step | Advance 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.
Assertions & Testing
6.1 Adding Assertions
Add assertions to turn recordings into automated tests that validate your application's state.
- Expand the Assertions panel in the side panel.
- Click Inspect Element — hover over any element on the page to highlight it, then click to select.
- Choose an assertion type from the dropdown.
- Enter an expected value (if required) and click Add Assertion.
6.2 Assertion Types
| Type | Description |
|---|---|
| Is visible | Asserts the element is visible on the page. |
| Is hidden | Asserts the element is not visible. |
| Text contains | Asserts the element's text includes the expected string. |
| Text equals | Asserts the element's text matches exactly. |
| Has class | Asserts the element has the specified CSS class. |
| Exists in DOM | Asserts 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.
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.
| Source | What's Captured |
|---|---|
console.error | Explicit error logging from application code. |
window.onerror | Uncaught exceptions with file, line, and column info. |
| Promise rejections | Unhandled promise rejections with reason and stack. |
| CSP violations | Content Security Policy violations with directive and blocked URI. |
| Network failures | Failed 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
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
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.
UI Reference
9.1 Side Panel Layout
The Sentinel side panel is organized into collapsible sections:
| Section | Purpose |
|---|---|
| Header | Logo, title, and quick-access controls (Record, Video, Export). |
| Status Bar | Shows current state: Idle, Recording, Playing, or Paused. |
| Steps Tab | Live list of recorded actions with type, selector, and value. |
| Errors Tab | Captured JavaScript errors and network failures. |
| Videos Tab | Recorded screen capture clips with thumbnails. |
| Recording Controls | Start/Stop recording buttons. |
| Playback Controls | Speed selector, step-by-step toggle, play/pause/stop, progress bar. |
| Sessions | Save, load, rename, and delete recorded sessions. |
| Assertions | Element inspector and assertion builder for automated tests. |
| Test Report | Pass/fail results after playback with assertions. |
9.2 Captured Keyboard Events
During recording, Sentinel captures these keyboard events:
| Category | Keys |
|---|---|
| Navigation | Enter Tab Escape |
| Arrow keys | ↑ ↓ ← → |
| Function keys | F1 through F12 |
| Modifier combos | Ctrl+key, Alt+key, Cmd+key |
Regular character typing is captured as text input events (debounced), not individual key presses.
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.
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)
- Install Python dependencies (once):
pip install -r mcp-server/requirements.txt - 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:
The extension ID is shown in the banner and has a Copy button. After running the command, reload the extension inpython mcp-server/install_host.py <your-extension-id>chrome://extensions/. - From now on, use the Start and Stop buttons in the Settings tab to control the server—no terminal needed.
- 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
- Install dependencies (once):
pip install -r mcp-server/requirements.txt - Start the server:
python mcp-server/sentinel_mcp.py - Keep the terminal open while using AI tools. Open the Sentinel side panel in Chrome and check for the green Connected badge.
install_host.py for your platform.
10.3 MCP Tools Reference
| Tool | Description |
|---|---|
sentinel_navigate | Navigate the active tab to a URL. |
sentinel_screenshot | Capture a screenshot of the current tab. |
sentinel_status | Get extension state (recording, error tracking, counts). |
sentinel_start_recording | Start recording user interactions. |
sentinel_stop_recording | Stop recording and return captured action count. |
sentinel_inject_action | Execute a synthetic DOM action (click, input, scroll, etc.). |
sentinel_get_session | Get all recorded actions from the current session. |
sentinel_export_guide | Generate an HTML guide from the recorded session. |
sentinel_start_error_tracking | Start capturing JS errors, network failures, and CSP violations. |
sentinel_stop_error_tracking | Stop error tracking. |
sentinel_get_errors | Get all captured errors. |
sentinel_save_issue | Save an issue with a screenshot (bug or feature request). |
sentinel_get_issues | Get all saved issues. |
sentinel_export_issues | Generate an HTML issue report. |
sentinel_wait_for_element | Wait for a CSS selector to appear in the DOM. |
sentinel_evaluate_selector | Check if a selector exists and get element info. |
sentinel_create_guide | One-shot: navigate, perform actions, and export a guide. |
sentinel_investigate | One-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:
| Field | Description |
|---|---|
| Project Name | Human label shown in status responses. |
| Source Folder | Filesystem 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 URL | The 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.
| Tool | Config file |
|---|---|
| Claude Code | .mcp.json |
| Claude Desktop | claude_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.”
- AI calls
sentinel_status()→ getsproject.pathandproject.devUrl. - AI reads relevant source files to understand the feature.
- AI navigates to the dev URL and starts recording.
- AI performs the interaction steps via
sentinel_inject_action(). - 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.”
- AI calls
sentinel_status()→ gets project context. - AI reads the relevant source files for the feature.
- AI calls
sentinel_start_error_tracking(), then navigates and performs the flow. - AI calls
sentinel_get_errors()and cross-references errors with the source code. - 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.”
- AI navigates to the relevant page.
- AI calls
sentinel_save_issue()with typebug, a title, and notes — a screenshot is captured automatically. - AI calls
sentinel_export_issues()to generate a full issue report.
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
| Permission | Purpose |
|---|---|
activeTab | Access the current tab for screenshots and script injection. |
storage | Persist sessions and state across browser restarts. |
scripting | Inject the content script into web pages. |
downloads | Trigger file downloads for exported guides. |
tabs | Query and interact with browser tabs. |
sidePanel | Open the persistent side panel UI. |
tabCapture | Capture tab media streams for video recording. |
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
- Edit source files in
extension/src/. - Run
npm run build(or usenpm run devfor watch mode). - Open
chrome://extensions/and click the reload icon on the Sentinel card. - Click the toolbar icon to reopen the side panel with your changes.