Skene
Product
Pricing
Docs
Blog
About
Log In
ProductPricingDocsBlogAbout
Log In
Dithered Skene hero background
Fix the code tomorrow

You can't recover today's data.

Coding agents rewrite the lines that record events to your Supabase tables as a side effect of every feature. Skene catches the break on the pull request, while the data is still recoverable.

Catches what your coding agents change
Cursor logoClaude Code logoCodex logo

The problem

Analytics is not retroactive.

Product, growth, and pricing decisions run on event data. Funnels, retention, attribution. Those charts come from rows your app writes into Supabase, one insert per event, sitting in your code. When one of those writes breaks, the table does not error. It just stops filling, and the dashboard keeps drawing from data that is quietly missing.

That is the part that does not heal. A bug in a feature, you fix and redeploy. A metric you never recorded is gone for good. You cannot backfill an event that did not fire. Broken tracking is not a bug you handle later, it is a permanent hole in your history.

Event write indexing icon

Skene reads every event your app writes to Supabase.

Every insert into an event table, indexed by file, line, table, and payload shape.

Skene parses the codebase the way a linter does. It finds every write that records an event into your database, builds an index of which table each one lands in and what columns it sets, and reads your Supabase schema as the contract. That pairing is the baseline every PR gets checked against.

Read the docsOpen GitHub
×
Starting journey analysis…

This may take a few minutes. Stay on this page to see live pipeline updates.

Analyzing Schema
Events from codebase
Generating Journey
Discovery
From sign up to account creation
SIGNALTYPEFOUND ATSTATUS
Account CreatedSupabasepublic.accountsCan be tracked (DB)
Signup Page ViewedGitHubapp/admin/(auth)/login/page.tsxRecommended
Signup Form SubmittedGitHubapp/admin/(auth)/login/page.tsxRecommended
Auth User CreatedSupabaseauth.usersCan be tracked (DB)
auth.users.insertGitHub–Can be tracked (DB)
user creates an account recordGitHub–Can be tracked (DB)
refactor: consolidate checkout flow tracking
Open
feat/checkout-v2→main
skenebotcommented now

Analytics diff detected

Missing callcheckout_started — not found in new state
Renamed eventpurchase_complete → order_confirmed
Payload shape changecart_viewed — field "items" removed
Conditional no longer firesupsell_shown — condition block unreachable
Caught on review. Not on a dashboard that's been wrong for weeks.
Broken event write detection icon

Drop one insert. Your table stops filling for three sprints.

Removed writes. Renamed or dropped columns. Wrong types. Payloads your schema cannot store. Conditional writes that no longer run.

When a PR changes a file that writes events, Skene compares the new state against the index and your schema. Missing inserts, renamed columns, type mismatches, and conditional writes that no longer fire all show up as a comment on the PR. Caught on review, not on a table that has been empty since a refactor weeks ago.

Open GitHub
Supabase schema alignment icon

The event fired. Did it land?

Skene checks every event against the Supabase table and columns it maps to.

Tracking that compiles is not tracking that works. A renamed column or a payload your schema cannot store will pass tests and still never reach the table it was meant to fill. Skene treats your Supabase schema as the contract. When an event stops matching the table it lands in, the mismatch shows up on the PR, with the event, the column, and what stops being recorded.

Skene for SupabaseRead the docs
Analytics events
checkout_started
purchase_complete
cart_viewed
public·events
event_nametext
order_idint4
cart_itemsmissing
created_attimestamptz
Skene checking events against schema…
feat: add purchase_complete tracking
Open
feat/purchase-events→main
skenebotcommented now

Schema mismatch detected

purchase_complete→public.events
Type mismatchpayload.purchase_id · text → column is int4
Missing columnpayload.cart_items · column does not exist

From install to a clean instrumentation surface.

A baseline of every event write you already have, drift caught on the PR that introduced it, and an instrumentation surface that stays consistent as the codebase grows.

Read the docsOpen GitHub
1. EVERY EVENT WRITE, INDEXED AGAINST YOUR SCHEMA
2. DRIFT FLAGGED ON THE PR THAT INTRODUCED IT
3. EVENT WRITES THAT STAY ALIGNED WITH SUPABASE

Four ways to plug Skene in.

MCP server for your coding agent. GitHub Action for CI. Cloud API for custom runs. One-time repo audit.

Install the MCP server into Cursor or Claude Code and Skene runs before the agent commits. Add the GitHub Action and it runs on every PR. Hit the cloud API directly from any script. Or run a one-time audit of your current instrumentation surface before you adopt anything else.

Read the docsOpen GitHub
MCP server
Cursor · Claude Code
GitHub Action
Runs on every PR
Cloud API
Any script, any time
Repo audit
One-time · no commitment
MCP server
Skene runs before the agent commits. Catches analytics issues in the agent loop, not after the PR lands.
skene mcp --cursor

Separation of duties

The agent writes the tracking. It should not grade its own work.

Skene does not write code, and it does not compete with Cursor, Claude Code, Codex, or Devin. It runs alongside them. An agent checking the instrumentation it just wrote is the conflict of interest the check exists to remove. The gate has to sit outside the tool that made the change.

It is also not a product analytics tool, an instrumentation library, or a customer data platform. It validates that the events your app writes to Supabase still fire and still match your schema after the next PR. That position, the independent gate in the pull request and the record of what every event is supposed to do, is the point. It is the seat, not the data.

Built in the open,
with our design partners.

Open GitHub
Pixelated Skene CTA background

See what your last 10 PRs quietly broke.

Install in a minute. The first repo audit runs in about as long as your CI does.

Pay for cloud validation runs.

Billed monthlyBilled yearly
ProPopular
$29/mo

1.5M monthly tokens

  • Local MCP server
  • GitHub Action with PR comments
  • Cloud validation API
  • 1.5M monthly tokens
Try for free →
Scale
$99/mo

6M monthly tokens

  • 6M monthly tokens (4x Pro)
Try for free →
Ultra
$199/mo

15M monthly tokens

  • 15M monthly tokens (10x Pro)
  • Priority support
Try for free →
Skene

Product

How it worksFeaturesSupabaseArchitectureIntegrationsSecurityPricing

Resources

DocumentationGlossaryPlaybooksBlog

Company

AboutOpen sourceContactPrivacyTerms
© 2026 Skene. All rights reserved.
Privacy PolicyTerms of Service
Skene