A field guide to the faces your coding agents make — kaomoji stats mined from Claude Code & Codex session logs.
1

Configure Feed

Select the types of activity you want to include in your feed.

TypeScript 48.3%
CSS 26.2%
JavaScript 17.2%
HTML 8.3%
2 1 0

Clone this repository

https://tangled.org/alice.mosphere.at/kaostat https://tangled.org/did:plc:gxuzsriuzpplw4r6w23nyugd
git@tangled.org:alice.mosphere.at/kaostat git@tangled.org:did:plc:gxuzsriuzpplw4r6w23nyugd

For self-hosted knots, clone URLs may differ based on your setup.



README.md

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.json is 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 (default 8723) and HOST (default 0.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