Your app's dashcam.
Powered by AI.
Overseer silently records a 15-second rolling buffer in the browser. When an error happens, it saves the clip, creates an incident, and dispatches an AI agent to investigate — automatically.
Zero network cost until something breaks. No sessions stored on your servers. Just a tiny client-side DVR that only phones home when it matters.
How It Works
Think of it like a dashcam. Always recording, never uploading — until the moment it matters.
Silent Recording
A 15-second circular buffer runs in the browser. DOM snapshots, mouse movements, clicks, network requests, console logs — all captured locally in RAM.
Error Detected
Unhandled exception, promise rejection, or manual captureException() fires. The SDK flushes the 15-second buffer.
Clip Sent
Only now does data leave the browser. The replay clip, error context, breadcrumbs, and user info are POSTed as one incident payload.
AI Investigates
Overseer creates an incident, groups by fingerprint, and dispatches an AI agent to analyze the root cause, suggest files, and optionally auto-fix.
Why 15 seconds?
Most user actions leading to a crash happen within the last 10-15 seconds. A longer window wastes memory; a shorter one misses context. 15 seconds captures the full user journey to the error — the click, the navigation, the API call that failed — without storing minutes of idle browsing.
Zero performance impact with the extension
The Codmir browser extension moves all recording work into an isolated content script. Your app's main thread stays untouched — no MutationObservers, no DOM walking, no jank.
Without the extension, the SDK's built-in recorder handles everything as a fallback. Same 15-second DVR, same API. The extension just makes it faster.
Architecture
Overseer vs. Sentry
Same mission, fundamentally different approach
What Gets Recorded
Everything you need to reproduce a bug, nothing you don't
DOM Snapshots
Full HTML + incremental mutations via MutationObserver
Mouse & Clicks
Movement at 20fps, click targets with coordinates
Scroll & Input
Scroll position (throttled 100ms), form input values
Network
Fetch & XHR — method, URL, status code, duration
Console
log, warn, error with serialized arguments
Viewport
Window resize events and dimensions
Timestamps
Millisecond-precision timing on every event
Re-snapshots
Full DOM re-captured every 5s for safety
Privacy by Design
Overseer never records what it shouldn't. Sensitive data is handled automatically before it enters the buffer.
Passwords auto-masked
All input[type=password] fields replaced with ••••
Credit cards detected
CC patterns auto-redacted from input values
[data-private] masking
Add the attribute to any element to mask its content
[data-block-replay] exclusion
Entire element tree excluded from recording
Client-side only
Buffer lives in RAM — nothing sent until an error occurs
Self-hostable
Run on your infrastructure — data never leaves your network
AI-Powered Incident Resolution
Overseer doesn't just collect errors. It investigates them.
Fingerprint & Group
Errors are deduplicated by stack trace fingerprint. Recurring issues get their event count incremented, not duplicated.
Signal Ranking
AI ranks detected issues by severity, blast radius, and recency. Critical signals (score ≥ 80) trigger immediate alerts.
Agent Dispatch
For high-severity issues, an AI agent is auto-dispatched to analyze the codebase, identify root cause, and suggest or apply a fix.
Autofix Workflow
Critical issues can trigger an automated fix pipeline: analyze → branch → patch → PR → human review. You stay in control.
Issue → Ticket Flow
Every detected issue can become a ticket with one click. Context, replay, and suggested fix are carried over automatically.
Smart Notifications
Configurable alerts via Slack, email, or the Codmir companion. AI learns your dismiss patterns and adjusts intrusiveness.
AI Inner Thoughts
See exactly how the AI reasons about your incidents. Every investigation is transparent — you read its mind as it works.
No other tool shows you this. The reasoning chain is recorded, replayable, and searchable.
Stack trace points to line 42 in UserProfile.tsx. The error is ‘Cannot read property 'email' of undefined’. This means the user object is null when the component renders.
The 15s replay shows the user navigated from /settings to /profile. The network tab shows GET /api/user returned 200 but with an empty body. So the API returned success but no data. That’s the real bug — it’s not a frontend issue.
Found src/app/api/user/route.ts. The handler returns {} when the session token is expired instead of a 401. The frontend trusts the 200 status and tries to read user.email from an empty object. Two bugs: the API should return 401, and the frontend should handle empty responses.
Found 3 similar incidents in the last 48 hours, all after the auth token refactor in commit a3f8c2d. This is a regression. Confidence: 94%.
Two changes needed. 1) In route.ts, check session validity before returning — return 401 if expired. 2) In UserProfile.tsx, add a null guard. The API fix is the root cause; the frontend fix is defense in depth.
Every thought is stored in the Reasoning Ledger — a tamper-evident chain of AI decisions you can audit, search, and replay at any time.
Everything You Need
Comprehensive observability built for modern development
Automatic Error Tracking
Capture unhandled errors, promise rejections, and console errors automatically with full stack traces and breadcrumbs.
Session Replay
Replay the 15-second clip before any error. See DOM changes, mouse movements, clicks, network calls, and console output.
Performance Metrics
Track Core Web Vitals (LCP, FID, CLS) and custom metrics out of the box. Correlate slowdowns with errors.
Lightweight SDK
Under 10KB gzipped. Tree-shakeable and optimized for minimal bundle impact. Works with any framework.
Privacy-First
Passwords and credit cards auto-masked. Block any element with data-block-replay. All data stays client-side until an error occurs.
Self-Hostable
Run Overseer on your own infrastructure. Redis for hot storage, R2/S3 for cold archives. Your data never leaves your network.
Installation
Get started in under 5 minutes with any framework
Choose your framework:
1Install the package
npm install @codmir/sdk2Initialize Overseer
// instrumentation-client.ts
import * as Codmir from '@codmir/sdk/nextjs';
Codmir.init({
dsn: process.env.NEXT_PUBLIC_OVERSEER_DSN,
environment: process.env.NODE_ENV,
release: process.env.NEXT_PUBLIC_APP_VERSION,
// Session replay sampling
replaysSessionSampleRate: 0.1,
replaysOnErrorSampleRate: 1.0,
});3Capture errors
// In your error boundary or anywhere
import { captureException, captureMessage } from '@codmir/sdk/nextjs';
// Capture an error
try {
await riskyOperation();
} catch (error) {
captureException(error);
}
// Capture a message
captureMessage('User completed onboarding', 'info');
// Set user context
import { setUser } from '@codmir/sdk/nextjs';
setUser({ id: user.id, email: user.email });Core API
Simple, familiar API inspired by the best in the industry
captureException()Capture an error with optional context
captureException(error, {
tags: { feature: 'checkout' },
extra: { orderId: '123' }
});captureMessage()Log a message with severity level
captureMessage('Payment processed', 'info');setUser()Set user context for errors
setUser({
id: user.id,
email: user.email,
username: user.name
});addBreadcrumb()Add navigation/action context
addBreadcrumb({
category: 'navigation',
message: 'Opened settings',
level: 'info'
});Simple Pricing
Free to start. Pay only when you scale.
- 5,000 errors/month
- 15s session replay
- Error grouping & fingerprinting
- 7-day retention
- 1 project
- 100,000 errors/month
- 15s session replay
- AI investigation & autofix
- 90-day retention
- Unlimited projects
- Slack & email alerts
- Unlimited errors
- Self-hosted option
- Custom retention
- SSO & audit logs
- Dedicated support
Ready to get started?
Start capturing errors and understanding your users in minutes. Free for small projects, scales with your team.