I'm a data scientist in Chapel Hill, North Carolina. Right now I work in the financial tech space building MCP servers and analytics tools for insurance-linked securities data at Korra (formerly Ledger Investing).

Some cool stuff I've worked on recently

As a part of building out the MCP capabilities for Korra, I often find that I wish I could just take a quick look at the insurance triangles in a transaction. It's useful to see what you're uploading and understand if there are any trends that you can spot in the moment, as an ongoing check for reasonableness. There are other ways to do this same thing, but they all require some loss of context – switching to the web UI, opening a Jupyter notebook, whatever, they all kind of bring you out of the flow.

A reinsurance loss triangle, drawn in a terminal

So instead, I wondered if we could just draw the triangles in the terminal itself. To do that, I made a Claude Code plugin, and built a /bermuda slash command to run it, which you can see below. The experience I wanted to create was of flipping through several different charts to find one that was useful for the situation. Because of that I knew I couldn't just keep passing the whole JSON dataset into Claude Code's context, and a hook is only useful if you know which chart you want to look at. If the whole point is to find what looks weird, that's not especially helpful.

You can see how the Claude Code client uses the MCP connection to help a user select from among their triangles and then pass the data through to a renderer. What I decided to do was repurpose the user-input drawer native to Claude Code and pass the glyph-creating hooks through as components of each of the questions. Arrowing through the options list re-renders the same triangle's data eight ways: heatmap, completeness, right edge, age-to-age factors, growth curve, sunset, mountain, and a paid-versus-reported scatter. Those are grouped into three sections, in pages in the drawer: Shape and Coverage, Development, and Paid vs. Reported.

The hook structure means the charts themselves don't cost the user and agent tokens or context until they decide on one to expand (or just escape to exit without expanding). In fact it takes two hooks: PreToolUse expands the placeholder into glyph art, but when the user picks an option AskUserQuestion echoes the entire question structure back to the model. To avoid that, a script runs on PostToolUse to blank them back out.

The same views, drawn in a browser

The composed glyphs here are derived from the bermuda library's native charts, which come with Vega-Lite via Altair in the Python library. You can check out these fully rendered versions:

Sometimes the environment won't give you a browser: an airgapped network, a locked-down laptop, an agent session with nowhere to put an image. It's there for a low-resolution look at what's in the ballpark before you commit to doing heavier analytical tasks.

I had fun making this.

Elsewhere

I'm on GitHub, LinkedIn, résumé, a longer work history, some older writing from a stretch in 2017 when I was posting analyses regularly, Oscar selection guesses and scores from the 98th Academy Awards, and charts of my running data pulled nightly from Strava.