Charm released an AI coding agent that works in your terminal called Crush. I was eager to give it a try as I dread using the experience of using Cursor’s vscode-centric UI.
I quite literally do not understand charm’s business model.
One of the items on my todo.txt
for this site
implementing opengraph images metadata.
This metadata is relatively straightforward to add by adding HTML
properties such as:
meta property="og:title" content ="title_here"/>
.
Unchanging static images are also a simple tag:
<meta property="og:image" content="path/to/png" />
.
The less straightforward part is dynamically generating an image per
page.
This is a relatively good candidate for experimenting with an AI tool such as Crush as:
- I’ve done this before using tools like Hugo so I know some of the pitfalls
- Its low risk. If it breaks it’s not a huge deal.
- I already have all the metadata needed stored in the yaml frontmatter of each post. For example, each markdown file I write starts with something like:
---
title: "a working KVM solution"
date: 2025-08-01
tags: ["office", "productivity"]
description: "The KVM solution I landed on that (for once) isn't terrible"
type: note
<snip>
A few months ago, inspired by this wonderful site, I made a mock up of an announcement document in the style of a old school press release for Low Orbit Security. I used that as a base for what the og-image should look like.

The tool I ended up building is a bit hacky, but works well. My goal was to build a tool that would:
- Generate an HTML page using the same CSS as this site.
- Format it using an old school press release inspired format.
- Convert the page to a png
- Save it as a png.
The output ended up looking like this:

Crush
I’m familiar and generally a fan of Charm so it’s no surprise that Crush is pretty much exactly what I expected, a TUI coding agent that has the charm look and feel. I was able to finish the feature relatively quickly and integrate it into the static site generator build script with minimal hiccups. It looks and feels familiar if you’ve used Claude Code, but just with the familiar charm polish.
The first real task I used Crush for was to edit my neovim config to
open up a Cursor style side pane using <leader>ai
.
This worked ok-ish (using gemini flash) but it allowed me to understand
how to navigate using Crush which was relatively intuitive. There were
some visual bugs associated with this approach, especially once I
started using crush from within a neovim window.
Having a dedicated pane was useful so I could either keep an eye on things it was doing (allowing or denying changes as necessary) or being able to quickly close it when I was working on something manually.

The diff UI was a bit jarring at first (possibly because of the tokyodark colorscheme) but if you’re sticking to prompts that making fairly precise edits it’s not bad. I generally think it’s hard to read git-diffs anywhere if they’re more than a few dozen lines.

I particularly enjoyed Crush keeping a list of changed files and, most importantly for reasons I discuss below, the model/cost.

The ctrl-p
options are also a really nice addition.
Specifically the quick switching between models and the summary option
were ones I’d use regularly.


Thoughts
Besides the TUI UX, the most important part of Crush is it’s model
agnostic approach, allowing you to pick and choose which models you’re
sending your data to using. I would love to test this out
using models hosted locally, something not possible using tools like
Claude Code.
Despite enjoying the experience for writing code, I won’t be using it
to do so until I have a datacenter selfhosted GPU setup
simply due to cost. To fully implement this relatively straightforward
feature it cost $23.04 using mostly Sonnet 4 (not the thinking model)
for the heavy lifting and Gemini flash for quick edits and doc
updates.
This took me about 45 minutes to implement whereas it would have taken me a few hours over a couple of days to implement from scratch. A nice boost in efficiency, but the point of this site is personal enjoyment not absolute efficiency.
If it were about efficiency I would have just made a hugo theme…
When it comes to pricing companies like Cursor have two distinct advantages:
- Optimizations: The Cursor team has clearly put a massive amount of time and effort into optimizing what is sent to the model for processing via complex caching mechanism
- Economies of scale: The economies of scale
advantage companies like Cursor are able to capitalize on to ensure
incredibly low API pricing on premium models by partnering with
companies like Anthropic is borderline monopolistic. For about the same
price I paid in API fees to add this single og-image feature using a
tool I prefer, I could instead get pay slightly less per month to get an
absurd amount of prompts using larger models like
sonnet-4-thinking
if I simply use cursor.
From looking at Cursor output you can see I racked up $50.13 in API fees but the cost is still $0.

With that being said, I will still be experimenting with Crush for smaller tasks that don’t require intensive (read: expensive) models. Using smaller models to answer questions about a fairly simple codebase or make quick changes to a homelab is a great use case for me.