npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@benmalaga/absolutely

v0.1.0

Published

Spotify Wrapped for your AI coding agent. Reads your local Claude Code transcripts, counts the funny stuff (em-dashes, groveling, 'the tests pass'), and prints a shareable card. Local and read-only.

Readme

absolutely

Spotify Wrapped for your AI coding agent.

It read every session. It counted every em-dash. It has notes.

npm CI Runs locally Uploads Dependencies License


Your AI coding agent has been busy. It has agreed with you, apologized to you, promised that this time it would definitely work, and quietly emitted a small mountain of em-dashes while doing it. All of that is sitting in plain JSONL on your own disk.

absolutely reads those local transcripts, counts the funny stuff, and prints a Wrapped-style stats card you can screenshot and post. It is genuinely funny and technically real: every number on the card is a literal count from your own sessions. Nothing is invented, nothing is uploaded, nothing is even written back. It runs offline in a couple of seconds.

The name is a tribute to the phrase that started it all: "You're absolutely right."

Demo

absolutely demo

Recorded against a synthetic session fixture (generic project names, no private data). Reproduce it with python3 demo/generate_fixture.py then vhs demo/demo.tape. Run it on your own sessions with just npx @benmalaga/absolutely.

Install

npx @benmalaga/absolutely

That's it. No account, no API key, no config. It finds your Claude Code transcripts under ~/.claude/projects and wraps them.

Install it globally and the command is just absolutely:

npm install -g @benmalaga/absolutely
absolutely

The card

+----------------------------------------------------------+
|                        ABSOLUTELY                        |
|                  your AI agent, wrapped                  |
+----------------------------------------------------------+
|                                                          |
|                          21,327                          |
|                        em-dashes                         |
|     A crime spree. Find-and-replace is right there.      |
|                                                          |
+----------------------------------------------------------+
|                                                          |
| Tool calls                                        72,348 |
|   in your name                                           |
| Lines changed                                    768,709 |
|   665,636 added, 103,073 removed                         |
| Em-dashes emitted                                 21,327 |
|   the founder's nemesis                                  |
| Most-used tool                                      Bash |
|   24,461 calls                                           |
| Most-edited file                            src/index.js |
|   519 touches                                            |
| Busiest hour                                         8pm |
|   peak grind                                             |
| Longest session                        12,314 tool calls |
|   one sitting                                            |
| "Absolutely right" count                               6 |
|   groveling logged                                       |
| Apologies                                              9 |
|   all forgiven                                           |
| Thinking blocks                                   19,977 |
|   the quiet part                                         |
|                                                          |
+----------------------------------------------------------+
|                                                          |
|                   its most-used phrase                   |
|         "said let me / i'll just before working"         |
|                         x 26,950                         |
|                                                          |
|                  THE EM-DASH MAXIMALIST                  |
|   21,327 em-dashes. This tool exists to count them and   |
|                     it is exhausted.                     |
|                                                          |
+----------------------------------------------------------+
|              1,329 sessions over 100 days                |
|          read-only - nothing left your machine           |
+----------------------------------------------------------+

In a real terminal the headline number is cyan, the stats are green, the phrase is yellow, and the superlative is in your agent's signature color of shame.

If your card made you laugh, a star costs you nothing and helps other people find it.

The behavioral lexicon

The comedy is in the counting. absolutely scans only the agent's own prose (not your prompts, not tool output) for the tics every coding agent has:

| Stat | What it counts | | --- | --- | | Em-dashes emitted | The agent's favorite punctuation mark, totaled. The marquee number. | | "You're absolutely right" | The groveling phrase the tool is named for, plus its variants. | | Agreed with you | The wider agreement reflex: "you're right", "good catch", "fair point". | | Apologized | "I apologize", "my mistake", "sorry about that". | | Perfect / excellent | The hype reflex, applied to your code, your idea, or itself. | | Promised it would just work | "this should fix it", "now it works", "easy", "just a quick". | | Claimed the tests pass | "all tests pass", "everything is green". Citations: zero. | | Said "let me" / "I'll just" | The throat-clear that precedes every burst of work. | | Tool calls | Every Bash, Edit, Read, and Write it ran on your behalf. | | Lines changed | Additions and removals, derived from the actual Edit / Write payloads. | | Most-edited file | The one file it could not leave alone. | | Busiest hour / day | When the grind peaked, from message timestamps. | | Longest session | The single transcript with the most tool calls. One sitting. |

It picks the funniest headline number, surfaces the most-used phrase, and closes with a roast-style superlative (The Em-Dash Maximalist, The Serial Apologizer, Trust Me Bro It Passes, and friends) tuned to whichever tic stood out most.

How it compares

Most tools that touch your Claude Code data are built to answer "how much did this cost / how many tokens." absolutely is the only one built to answer "how did my agent behave", and to make it shareable. It counts nothing you can bill.

| | absolutely | token/cost trackers | Claude Code /cost | | --- | --- | --- | --- | | Counts behavioral tics (em-dashes, groveling, "tests pass") | yes | no | no | | Shareable Wrapped-style card (terminal + SVG) | yes | usually a table | no | | Runs fully local, zero network calls | yes | varies | yes | | Read-only (never writes to a transcript) | yes | varies | yes | | Zero runtime dependencies | yes | varies | n/a | | Reports token spend / dollar cost | no, on purpose | yes | yes |

If you want dollars and tokens, use a cost tracker. If you want to know how many times your agent told you that you were absolutely right, you are in the right place.

Usage

absolutely                       # wrap everything it can find
absolutely --limit 50            # just your 50 most recent sessions
absolutely --svg wrapped.svg     # also write a shareable SVG card to post
absolutely --json | jq .totals   # the raw numbers, for the curious
absolutely --dir ./some/path     # analyze transcripts under a specific folder

The --svg card is an 800x1000 image in the dark Wrapped aesthetic, ready to drop on social. It is plain SVG with zero dependencies, so it converts to PNG with anything (a browser, rsvg-convert, Quick Look on macOS) if you want a raster.

Privacy

This is the whole point, so it gets its own section.

  • Everything runs on your machine. No account, no API key, no network calls, no telemetry. Pull your ethernet cable and it works exactly the same.
  • Read-only. It opens your transcripts, reads them, and closes them. It never writes to, moves, or deletes a transcript. The only thing it ever writes is the SVG card, and only when you pass --svg.
  • Nothing is uploaded, ever. The numbers on the card came from your disk and stay on your disk. What you do with the screenshot is your business.
  • Zero dependencies. The entire tool is a handful of small files using only the Node standard library. You can read all of it in ten minutes.

What it reads

absolutely supports Claude Code, which writes one JSONL transcript per session under ~/.claude/projects/<project>/<session>.jsonl. It parses that format directly and tolerates partial or malformed lines without crashing.

Cursor and most other agents store chat history in SQLite rather than JSONL, so a zero-dependency reader can't parse them cleanly yet. If your agent exports plain JSONL logs, point absolutely at them with --dir. Support for more agents is the most-wanted contribution (see below).

FAQ

Does it send my code anywhere? No. It makes zero network calls. The card is built entirely from local files and printed to your terminal.

Will the numbers be accurate? Yes. Every count is a literal scan of your transcripts, and --json shows you the raw totals if you want to check the math. The jokes are editorial; the numbers are not.

My "you're absolutely right" count is low. Am I doing it wrong? You may have a well-behaved agent, or a custom system prompt that bans the phrase. Check your em-dash count instead. That one is never zero.

Why is em-dash counting the headline? Because it is the funniest true thing about how these models write, and because the author of this tool is contractually forbidden from using em-dashes himself. The irony writes itself, in commas.

It found no transcripts. You either haven't run Claude Code yet, or your history lives elsewhere. Run a session or two, or point it at your logs with --dir <path>.

Is this affiliated with Anthropic or Spotify? No. It is an independent, local, read-only parody of the "Wrapped" format. It touches your own files and no one else's services.

Contributing

The lexicon is the heart of this, and your best material is welcome. New tics to count, new superlatives, and support for more agents (especially the SQLite ones) are all great PRs. See CONTRIBUTING.md.

Recording the demo

The card is the whole pitch, so it deserves a moving picture. This is the exact sequence to cast a short, loopable clip for the top of this README and for social:

# 1. Get a clean, wide, dark terminal (about 80x40, large font).
# 2. Clear it so the recording starts on an empty screen.
clear

# 3. Run absolutely against a real history so every number is genuine.
npx @benmalaga/absolutely --limit 300

# 4. Let the finished card sit on screen for ~2 seconds, then stop.

Two easy ways to capture it:

  • asciinema (crisp, tiny, text-based): asciinema rec demo.cast, run the command above, exit, then either embed the .cast or convert it to a GIF with agg demo.cast docs/demo.gif.
  • A screen recorder (QuickTime, Kap, or terminalizer): record the window, trim to the run, and export a GIF or short MP4.

Keep it under 20 seconds, no audio, and loopable. Drop the file at docs/demo.gif and replace the placeholder line in the Demo section with ![absolutely demo](docs/demo.gif).

Repo setup (topics + About)

For discovery, set the GitHub About sidebar description to the one-liner above and add these repo topics:

claude-code  cli  developer-tools  ai  ai-agents  wrapped  stats
terminal  nodejs  privacy  local-first  humor

License

MIT.