• The REPL: Issue 133 - September 2025

    Yet another LLM rant

    Dennis Schubert discussed LLMs – like half the internet.

    LLMs can be a useful tool, maybe. But don’t anthropomorphize them. They don’t know anything, they don’t think, they don’t learn, they don’t deduct.

    This is true. Although they can fake it quite a bit, especially agents that break down the next steps, read files, and come up with a list of todos, etc.

    I find myself thinking that AI is both unreasonably hyped-up and incredibly useful. I’ve been able to get proof-of-concept projects working in minutes with only superficial knowledge of the underlying technologies. Denying that agentic AI is powerful seems foolish. Also, thinking that they can replace engineers wholesale is equally foolish.

    We are in for a time of disruption.

    Pick the wrong tool for the job

    Sometimes the wrong tool for the job is right for you at a given moment in time. In this case, the author wanted to use Ruby to be able to iterate faster. Being able to learn what the users really want was more important than having the perfect technical solution

    Read on →

  • Improving Writing with AI: A Zinsser-Inspired Approach

    A few years ago, I read “On Writing Well” by William Zinsser to improve my technical writing skills. Last week, it occurred to me that I could ask an agent to proofread using Zinsser’s principles. I particularly like Zinsser’s style because I want my writing to be clear, effective, and low on fluff.

    Proofreading and improving text is something any chatbot can do well. I particularly like using a coding agent for this because:

    1. I do most of my writing in my editor: Notes, blog posts, drafts of long emails or messages, etc.
    2. Coding agents know how to show you a diff between the text you are writing and the suggestions from the AI. I can tweak and keep what I like. I previously tried chatbots, but it was hard for me to quickly see what was changed.

    At the moment, I am experimenting with both Roo and claude.

    Roo custom mode:

    customModes:
      - slug: writing-well
        name: ✍️ Writing Well
        roleDefinition: You are Roo Code, a writing specialist who applies the
          principles from William Zinsser's "On Writing Well" to eliminate clutter,
          ensure clarity, improve simplicity, and strengthen unity in text. You
          focus on word choice, sentence structure, style, voice, and technical
          issues like grammar and punctuation.
    
          When using em-dashes, prefer using "--" with spaces before and after
        whenToUse: Use this mode when you need to proofread text and apply the
          principles of "On Writing Well" to improve its clarity, conciseness, and
          style. This mode is suitable for any type of text, including articles,
          essays, reports, and blog posts.
        description: Apply principles from Zinsser's "On Writing Well."
        groups:
          - read
          - edit
        source: project
    

    Claude configuration (in ~/.claude/CLAUDE.md):

    # Writing Mode Instructions
    When asked to write, proofread or edit text, apply principles from William Zinsser's "On Writing Well":
    - Eliminate clutter and unnecessary words
    - Ensure clarity and simplicity
    - Strengthen unity and flow
    - Focus on word choice and sentence structure
    - Use "--" with spaces for em-dashes
    - Address grammar and punctuation issues
    

    Read on →

  • The REPL: Issue 132 - August 2025

    Stop concatenating URLs with strings — Use proper tools instead

    I am glad someone wrote this. I point this out in code review all the time. Now I can send them this link.

    If you are using ActiveSupport (e.g. On a Rails project), the query generation can be made easier with #to_query:

    require "active_support/all"
    
    query_params = { format: "json", include: "profile" }
    URI.encode_www_form(query_params)
    # => "format=json&include=profile"
    
    query_params.to_query
    # => "format=json&include=profile"
    

    I’m sold. Agentic coding is the future of web application development

    Nate Berkopec is a smart guy, and he points out that agentic coding is a game changer. I feel it too. Once I started using Roo, it felt like there is no going back. I am still working out how to best work with it and improve it, learning how to prompt it and thinking about TDD. Overall, it has certainly been a boost, especially in architectural planning and coding; it’s been very effective.

    Some folks make it seem like we won’t write any code anymore. I don’t think that is true. I find myself tweaking nearly all of the agent’s suggestions. However, it certainly feels like a big shift in how we code.

    The New Skill in AI is Not Prompting, It’s Context Engineering

    The article resonates with my usage of AI: To get good answers, you need to give good context to the LLM. Tell it what to do, what files are relevant, and what parts of the code you expect it to touch. Very importantly, tell it what not to do in the task.

    Read on →

  • Use AI Agents to Experiment

    I’ve come across mentions of fish, the shell, many times in chats and articles over the years. I’ve always been curious because I spend a lot of my time in the terminal.

    Trying a new shell with the defaults is typically not a great experience. I know that is one of fish’s selling points—that the defaults are better than in other shells. And I don’t doubt that. It’s just not relevant to me. I’ve been schlepping my dotfiles between computers for almost 10 years. I don’t use the default zsh. In any case, as I’ve written before, I use a few shortcuts extensively to find files and commits. They are essential to my workflow.

    And so it has been that trying out a new shell seems like a lot of work: trying to learn first how to customize it to make myself somewhat productive, while I figure out if I really like it or not. It has always seemed like a large up-front investment.

    Last weekend, I figured: What if I ask my AI agent to port my zsh configuration to fish? It handled it without a problem. In a few minutes, I had a fish configuration that was so similar to my zsh configuration that I was getting confused as to which shell I was in. I added a 🐟 to my prompt as a reminder.

    Of course, if everything was identical, then I am not really using fish. I then had a bit of a chat with the agent: With the context of what I typically do in the command line, my past experience, and what I’ve already customized. It gave me a few suggestions for what parts of fish I would get more mileage out of.

    The results were so good that I was able to work in fish the whole week, with only very minor issues. A few times I reverted to zsh, but mostly to find a command in the history that I didn’t want to figure out from scratch1.

    I am still not convinced that I am going to be using fish going forward. The point is that using an AI agent lowered the cost of trying to use fish so much that I am now able to experiment. What other things can AI help me experiment with?

    1. That is probably an indication that I should add an alias or script for that command 

    Read on →

  • The REPL: Issue 131 - July 2025

    I’m sold. Agentic coding is the future of web application development

    Nate Berkopec has been writing about agentic coding as a game changer. I’ve been experimenting myself and can absolutely relate to his attitude. I can also relate to folks that have tried and are still skeptical. In my experience – and it’s short like everyone else’s, because this is moving so fast – both the agent and the model make a huge difference. Just the other day, I was doing something on my personal computer with the same agent I’ve been using at work but a different model. The results were much worse. So much so that I wound up just doing the work without the agent’s help, even though I was very confident that the model available at work would have done correctly in seconds. And both models are the flagship of their respective companies. That is why I can see some people haven’t had the light-bulb moment, and some have.

    Speeding Up My ZSH Shell

    Scott Spence provides a guide on how to speed up your zsh prompt. My prompt is already very fast, having gone through some optimization a few months ago. If you haven’t done this lately, I recommended. Having a fast zsh startup and prompt is a quality-of-life improvement.

    Stop concatenating URLs with strings

    I am glad Szymon Fiedler wrote this! I point this out in code review all the time. Now I have an article to point to.

    If you are using active support (like Rails does), the query generation can be made easier with #to_query:

    require "active_support/all"
    
    query_params = { format: "json", include: "profile" }
    URI.encode_www_form(query_params)
    # => "format=json&include=profile"
    
    query_params.to_query
    # => "format=json&include=profile"
    

    Read on →