Communication is hard, but sometimes I can fix it.

We used to type code to tell the computer what to do. When that gets tedious, we made libraries and functions until the code was more communicative.

Now I type English words to tell the agent what to tell the computer what to do. Sometimes that gets tedious, and then I need to find new ways to make it easier.

Here’s an example.

Iterating could be easier.

The work: I’m getting Claude to build a program that turns Claude conversation logs into a vertical HTML comic.

some conversation log lines in Claude's jsonl format
some Claude conversation history in html

As we iterate on this, I ask it a lot of questions about the output. This way, I learn something about the problem domain (how Claude Code records conversations). And then I get it to tweak the output to my liking.

In the example above, I wondered where the Background command "Start dev server on alternate ports" notification came from, so I asked Claude how I could know. To ask it, I had to cut and paste the text from the HTML, and then Claude had to grep the HTML to see what I was talking about, and also grep the JSONL to find the input. What if later, a very similar message appeared? It couldn’t tell exactly what I was talking about.

I can’t just point to the UI.

This wasn’t the first time I struggled to refer to a panel in the comic. This time, my frustration served as an alarm: do something about it, Jess. There has to be a better way to tell it which panel I’m talking about.

When communication gets difficult, that’s a signal. I can change this.

So I made it make a way to point to the UI.

In this case, I asked Claude to add a reference tag to each panel. The reference tag for each panel contains the line number (that was its idea) and filename (that was my idea) of the JSONL line represented by this panel. I push ‘r’ to toggle whether these reference tags show (my idea). When I click one, the value is copied (its idea).

the html comic with references.

Now I can ask the same question more succinctly: How can I find out where episode-8-before:L63 came from?

Claude understood and added a hover effect that highlights the originating bash tool call.

That hover effect is OK; I used it a few times. Those reference tags are gold! I’ve used them a dozen times already, and development is smoother for it. Claude can find the panel I’m talking about quickly both in the input JSONL and the output HTML. Our communication is streamlined.

This was a great idea. Iterating is much easier now!

I am in the loop and on the loop.

There are (at least) two feedback loops running here. One is the development loop, with Claude doing what I ask and then me checking whether that is indeed what I want. Here, I’m a human in the loop with the AI. This works well since we’re prototyping, learning the domain and discovering what output I want.

Then there’s a meta-level feedback loop, the “is this working?” check when I feel resistance. Frustration, tedium, annoyance–these feelings are a signal to me that maybe this work could be easier. I step back and think about how the AI could work more accurately and smoothly. Annie Vella called this the “middle loop,” and Kief Morris renamed it “human on the loop.”

Here, I’m both in the development loop with the AI, and I’m “on the loop” as a thoughtful collaborator, smoothing the development loop when it gets rough.

Resistance will be assimilated.

As developers using software to build software, we have potential to mold our own work environment. With AI making software change superfast, changing our program to make debugging easier pays off immediately. Also, this is fun!

Discover more from Jessitron

Subscribe now to keep reading and get access to the full archive.

Continue reading