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.txtWorks 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.
You're in. Paste this before </head> on every page:
API key and MCP setup (shown once)
Your API key. Store it somewhere safe; it is not shown again.
Connect Claude Code:
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.
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