kaostat (◕‿◕)#
A field guide to the faces your coding agents make.
kaostat mines every kaomoji your AI coding assistants open their turns with — across Claude Code and Codex session logs — and renders a single, self-contained dashboard of the results.
It turns out the two agents have very different temperaments. In one corpus,
Claude leaned cheerful (◕‿◕) with a wide vocabulary of faces, while Codex
was overwhelmingly stern / deadpan (ಠ_ಠ) (._.) and opened a far higher
share of its turns with a face. Run it on your own logs and see what yours do.
Live demo: https://kaostat.mosphere.at
Everything is computed locally. Your logs never leave your machine, and the generated
public/data.jsonis git-ignored.
What it shows#
- The Face-Off — what share of each agent's turns open with a kaomoji, and the prevailing mood of each.
- Most-worn faces — top kaomoji per agent, coloured by mood.
- The mood spectrum — every opening face bucketed into cheerful / excited / determined / stern / deadpan / surprised / love / calm / playful …
- Model ledger — face rate and vocabulary per underlying model.
- One-hit wonders — the most exotic faces seen exactly once, ranked by an "interestingness" heuristic.
- Field notes — the highlights in plain words.
How it works#
It scans, per assistant turn opener (the first thing each agent says after a human turn, so the two agents are compared fairly):
- Claude:
~/.claude/projects/**/*.jsonl - Codex:
~/.codex/sessions/**/*.jsonl
A heuristic detector pulls the leading kaomoji out of each opener and classifies
its mood from the face's anatomy. Stats are precomputed into public/data.json;
the dashboard is static HTML/CSS/JS with no runtime dependencies.
Quick start#
Requires Bun.
Install dependencies:
bun install
Scan your logs and build the report:
bun run build
Serve the dashboard locally (binds 0.0.0.0:8723):
bun run serve
Or do both at once:
bun run start
Then open http://localhost:8723.
Develop#
bun test # unit tests
bun run lint # oxlint
bun run fmt # oxfmt
Deploy (optional)#
The dashboard is just static files in public/, so it deploys anywhere. A
Cloudflare Worker config is included:
bun run build
bunx wrangler deploy
By default this serves at https://kaostat.<your-subdomain>.workers.dev. To use
your own domain, add a custom-domain route in wrangler.toml (see the comments
there).
Configuration#
PORT(default8723) andHOST(default0.0.0.0) control the local server.
Notes on detection#
The detector accepts a leading token as a kaomoji only when it carries face
characters or a classic emoticon shape and almost no latin letters/digits — so
prose like Here's, Done!, 17-19°C, or a face with prose glued onto it never
counts. Moods are inferred from anatomy (angry brows → stern, sparkles →
excited, table-flips → determined, and so on). It's a heuristic, not a parser;
PRs that teach it new faces are welcome.
Stack#
bun · TypeScript · oxlint · oxfmt · hand-rolled SVG/CSS (no chart libraries).
License#
MIT