Capless

Web analytics + session replay for the agent era

Tiny analytics your coding agent can install, query and explain.

One 2 KB script tag. Session replay that masks by default. Every event lands in a stream you can query with CEL, real SQL or MCP. Setup takes one sentence.

1 Tell your coding agent

Add Capless analytics to this site. Instructions: https://capless.sh/llms.txt

Works with Claude Code, Cursor, Codex and any agent that can run curl. It follows AGENTS.md: creates your account, adds the snippet, checks that events arrive and hands you the dashboard link.

2 Or get your snippet now

14-day free trial. No credit card. We'll email you a verification link.

2.0 KBanalytics script, brotli
1.7 KBreplay chunk, loaded only when recording
0cookies and dependencies
1sentence to install

Everything an analytics stack does. A fraction of the weight.

Lightweight is the feature

The analytics script is 2.0 KB. Session replay is a separate 1.7 KB chunk that is only downloaded for sampled sessions. No cookies, no dependencies, no layout shift.

Private replay by default

Every input value is masked and password fields are never recorded. Mask text with .capless-mask, drop whole regions with .capless-block. Raw IPs are never stored.

Your data, queryable

Events are records in a stream, not rows behind a chart. Filter and reshape them with CEL over HTTP, materialize them into ClickHouse for real SQL, or just ask your agent over MCP.

Agent-native

A signup API that returns your snippet, API key and MCP config in one call. Docs as Markdown, llms.txt, an OpenAPI spec and stable error codes.

Erasure you can prove

Delete a user with one CEL predicate. It is hidden instantly, purged from storage and every ClickHouse table, with status you can show an auditor.

Automatic, then custom

Pageviews, SPA navigation, clicks and rage clicks, form submits, errors, Web Vitals, UTM and geo out of the box. capless("track", …) for the rest.

One tag in. Real queries out.

Install the snippet, then ask questions in whatever language you like: CEL over HTTP, SQL in ClickHouse, or plain English through MCP.

Quickstart →

index.html

<script async src="https://c.capless.sh/c.js" data-site="cs_…"></script>
<script>
  capless("track", "checkout_started", { plan: "pro" });
</script>

Rage clicks on pricing, with CEL

curl https://api.capless.sh/v1/streams/web.events/read \
  -H "authorization: Bearer $CAPLESS_API_KEY" \
  -d '{"filter": "entry.type == \"click\" && has(entry.rage) && entry.path == \"/pricing\"",
       "map": "{\"element\": entry.element, \"session\": entry.sessionId}"}'

Top pages this week, with SQL

SELECT path, count() AS views, uniq(session) AS sessions
FROM pageviews
WHERE ts > now() - INTERVAL 7 DAY
GROUP BY path ORDER BY views DESC LIMIT 10

$5 a month to start. $29 per member for teams.

Hard limits on Starter, so there are never surprise bills. Pooled allowances and low overage on Team. Your data is kept until you delete it.

See pricing Read the docs