Month: February 2026

Knee of the Curve

Knee of the Curve

There’s so much ink being spilled about AI that it’s hard to keep track of it all. But I’m doing my best to stay connected to the important stuff, or at least things most relevant to my job.

Here’s a list of articles and essays that I’ve read recently that I found memorable for one reason or another, roughly in descending order of broad relevance:

The first three are especially powerful. If you’re reading this, read them instead.

Coming Up For Air

Coming Up For Air

Believe it or not, I’m not going to say anything about Claude today.

I wrote a post a couple years ago about statistics I tracked while doing daily crossword puzzles. I took a couple years off, but last year I was back at it, this time using a calendar from the New York Times.

The NYT crosswords are supposed to get harder as the week goes on, with Monday being easiest, and weekend ones being the most difficult. I wanted to prove that out, so I noted my average solve time (capped at 30 minutes) on every puzzle, and then computed an average solve time for each day. The results are below:

Lo and behold, my experience aligns perfectly! I thought that was cool.

Over My Skis

Over My Skis

A few minutes ago I just published my first Go module. But here’s the thing: I don’t know Go. What madness is this?

Granted, I’ve been by myself most of this weekend, but in that time I’ve published 3 new public projects:

Plus, I have a fourth project in the works that’ll affect this blog materially. And I’ve built a sophisticated “AI Chief of Staff” for my own use (not published yet, but I will eventually in some form), and I’ve made a handful of smaller one-off utilities. And I’ve started spec-ing out a major project. And I’ve matured my local Claude Code configuration and spruced up my dotfiles. And, and, and.

It’s absolutely bonkers the throughput coding agents enable. Knee of the curve indeed.

No Seriously, Don’t Stop

No Seriously, Don’t Stop

I’m starting to feel a compulsion to keep as many Claude Code terminals running as I possibly can. Ready for lunch? Try to kick off a large implementation. Bathroom break needed? Run a research project in parallel. Bedtime? Don’t you dare until you have your swarm of agent teams configured with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS and everything allowed thanks to --dangerously-skip-permissions.

Time to git add --all && git commit -m "yolo" && git push -f up in this business!

And is it time to graduate to Gas Town? I’m already using beads to good effect, and I’ve now reached Stage 6 on the Steve’s Evolution of the Developer chart.

Can’t Stop Won’t Stop

Can’t Stop Won’t Stop

Yup, it’s another post about Claude (and I don’t think it’ll be my last).

Yesterday I had a need to share an extensive discussion I had in the Claude desktop app with a person who isn’t (yet) an AI user. I didn’t want to share the conversation with a public link (even if an obscure one). So I built a tool that takes a Claude export archive and turns it into a navigable website. From there I simply printed the relevant conversation to PDF and sent that via email. Easy peasy.

And by “I built” I obviously mean I asked Claude Code to do it. Took less than an hour of wall clock time, only about 10 minutes of it requiring my active attention. The result is now on GitHub for your enjoyment. Amount of code I hand-wrote: zero. That includes the documentation.

There were other solutions out there, but I thought it’d take no more time just to build a tool to my exact specifications. And I was right. That was a revelation. The times they are a changin’, fellow software nerds. What I first mentioned as a far off possibility back in 2017 seems now a reality.

Swords Are No More Use Here

Swords Are No More Use Here

I’ve been spending an awful lot of time with Claude Code as of late (including passing the Claude Code in Action course, because I do love badges).

The lingua franca of coding agents seems to be Markdown, which is totally cool, I’m a big fan. But in my experience to date (which involves a bunch of Spec Kit), Claude models don’t write syntactically correct Markdown every time. Admittedly I haven’t tried other models, and Opus 4.6 just came out yesterday so maybe things will improve, but for now there seem to be a couple consistent problems:

  • Emphasis is used in place of properly hierarchical headers (violates MD036)
  • Lists are not proceeded by a line break (which will cause the list items to run together when rendered)
  • Items that should be on multiple lines do not have an extra line break between them (again, causing them to render as a single line)

I got tired of these issues, and thus created a simple set of instructions to tell Claude not to do the above, and a hook to automatically lint all markdown files and tell the model to fix any issues that slip through. Dropped these into my global configuration, and so far, so good!

Here’s my CLAUDE.md:

## Markdown Formatting

When generating or editing markdown files, always follow these rules for proper rendering:

- Use `-` for unordered lists, `1.` for ordered lists (not `*` or other markers)
- Include a blank line before bulleted (`-`) or numbered (`1.`) lists
- Include a blank line before fenced code blocks (```)
- Include a blank line before headers (`#`, `##`, etc.) except at file start
- Include a blank line between headers and content
- Do not use emphasis (`**`) as a header
- Always specify a language in a fenced code block
- Include a blank line between lines that should be rendered on separate lines

And my settings.json:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|MultiEdit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx markdownlint-cli --disable MD013 -- \"**/*.md\" || $(exit 2)"
          }
        ]
      }
    ]
  }
}

That little bit at the end of the command is important, because a post tool use hook must return an exit code of 2 to let Claude know that something needs tending (and markdownlint-cli doesn’t return that code by default when there’s a problem).

Hope these are helpful!