• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
stevekrouse

stevekrouse

steve-eval

How to write like Steve Krouse
Public
Like
steve-eval
Home
Code
3
AGENTS.md
EVAL.md
README.md
Connections
Environment variables
Branches
1
Pull requests
Remixes
History
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
README.md
Code
/
README.md
Search
…
Viewing readonly version of main branch: v23
View latest version
README.md

steve-eval

A rubric and workflow for rewriting LLM-drafted essays to match my voice.

I created this to see if I could get LLMs to write non-slop in my voice that I'd enjoy reading, and maybe even put my name on (only if it was good enough).

Creating the rubric

I build this with Codex in a Ralph Wiggum loop:

  1. Pull a bunch of blogs I've written and a couple I haven't
  2. Make a rubric that would uniquely identify my writing
  3. Score all the posts by the rubric.
  4. Based on those scorings, update the rubric accordingly (backprop?)
  5. Repeat until the rubric reliably can tell the difference between me and others

My n-dash watermark

The best part of this process was when I came back after a while and the rubric had gotten nerfed. It removed this rule that I had added manually:

Instant fail — Em-dashes or touching dashes (-14)

Em-dashes (—) or n-dashes without spaces on both sides in the author's own prose. Steve ONLY uses spaced n-dashes: word – aside – word. Any other dash style is not Steve. Dashes in direct quotations or poem attributions are excluded.

If you think about it, this rule kinda represents a watermark for my writing. Up until recently, I didn't realize that I was typing n-dashes instead of m-dashes! I don't even know how to type an m-dash and now I don't want to know. If you ever see writing with an m-dash or with the dashes touching the works on either side of it – unlike this – then you know it definitively wasn't me.

But after a couple hours of my Ralph Wiggum loop, this rule had disappared! I asked the AI why and it linked me to this passage that I had supposedly written:

This tool—and others like it—are stops on our way toward end-programmer programming.

Catching Stars, Val Town Blog

I laughed out loud. That post was ghost-written for me by our new team member Pete Millspaugh! The Steve Eval was correctly identifying text not written by me!

Even before this result, we had stopped the ghost-writing practice. I'm not a fan. I much prefer when the byline is accurate, and posts are written by the people who say they wrote them. We had only done it that time out of a mistaken feeling that people would prefer to hear from me, the founder. But that only works if we're doing it authentically, so it didn't make sense. I just updated the author on that post to Pete, because after all, he did write it.

Writing new posts

To write a new post, I would vomit out all my thoughts about the blog by voice and then give AI that transcript. Then I'd tell it to do the following in another Ralph Wiggum loop:

  1. Write a draft blog post
  2. Score it with the steve-eval
  3. Based on the feedback, create a new draft
  4. Repeat until the score is > 90.

I wrote two blogs with this approach, in part:

  • Intelligence Buying Intelligence
  • What if you never had to get an API key ever again?

The AI-produced results weren't great, so I spent a lot of time editing and in many cases rewriting whole sections by hand.

Conclusion

This was a fun exercise, but mostly not very helpful for me yet, but I'm excited for when AI is good enough to be able to do this well.

I was excited to see that the folks at Every are thinking in similar directions:

  • AI Style Guides: How to Help AI Write Like You
  • How to Build an AI Style Guide

But it is fun to learn that I have a fairly unique watermark – long live my en-dash clauses with spaces around it! – and to get a bit clearer about what I think good writing in my voice looks like.

FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
© 2026 Val Town, Inc.