See your users' browser console. From anywhere.
ConsoleLogServer captures console.* output from real browsers, stores it in durable label-indexed storage, and makes it searchable by session, user, app, environment, and level — from a web UI or the terminal.
One script tag
Drop cls.js into your page with an API key. No SDK, no build step — it hooks the console and streams logs.
Search by anything
Filter by session, user, app, environment, level, and time range. Click any label to pivot the whole view.
Built for AI agents
A companion CLI queries the same logs from the terminal — point Claude Code, Codex, or any coding agent at one user's session to investigate a bug. Ships with a drop-in agent skill.
Team & API keys
Invite your team into an organization, mint per-org API keys, and revoke them the moment they leak.
Durable storage
Logs land in Loki — durable, label-indexed, and fast to query over wide time windows.
Self-hostable
Ships as a single Go binary in one container. Run it on your own infrastructure, keep your data.
-
1
Drop in the snippet
Add one script tag with your API key. It hooks the console and batches messages to the ingest endpoint.
-
2
Logs stream in
Every console.log/warn/error from your users' browsers arrives tagged with session, user, app, and environment labels.
-
3
Search in the UI or CLI
Filter by session, level, and time in the browser — or query the same logs from the terminal, built for AI agents debugging a specific session.
<script src="/static/cls.js" defer></script> <script> CLS.init({ endpoint: '/ingest', apiKey: 'ak_live_…', defaultLabels: { app: 'web', env: 'prod' }, }); CLS.identify({ userId: 'u123' }); CLS.hookConsole(); </script>
$ cls -labels session=s_92fa -level error -start -1h
Stop guessing what broke in the browser.
Capture the console once, then search every session. Self-hostable as a single Go binary.
Get started