Migrating To Astro

A short, fast rollercoaster

I've run Thought Eddies as a more dynamic, experimental blog since the beginning of this year. I'd heard about Astro and wanted to put a more personal touch on my web presence.

Find the Groove

Using Checkpoints with Coding Agents

Working with Cursor was my first experience with the UX pattern of checkpoints when working with a coding agent. If you're not familiar, it works like this. The user types a message into an agent-based IDE tool like Cursor, Windsurf, or Cline and submits it to the agent. The agent reads files,...

State Of Code Agents - July 2025

Agents can make progress independently, but they also make messes

I use code agents to help me code in various capacities. Everything from fully "vibe coded" tools to scripts to specific, well described tasks.

Gemini Hidden Reasoning

The performance costs of thinking and provider defaults

While building Tomo and several prototypes using LLMs, I've experimented with several popular language models. It's generally easier to prototype using the OpenAI chat responses API because most providers support this early API spec (mostly). This approach makes it pretty simple to switch between...

A few strategies to make LLMs useful for you

I was reading your blog and had a question about this: "I noticed that my coworker was prompting for specific technical implementations, and Claude was struggling, pulling in too much context and taking an unfocused approach, whereas I would have been much more vague and general to start and...

Create a Link Blog

RSS feeds for blogs and things you write or create are great. If you read a lot, you probably also have a lot of articles you've read that you share with others and occasionally revisit.

LLM Chat UI Concepts

A few concepts for LLM chat UIs

To write this post, I was going to take myself through some of the history of different chat interfaces. This is not that post. I was too impatient and decided to go in without any appreciation for prior art (beyond what I'm already aware of), because it seemed more fun at the time.

Models as Force Multipliers and their Limits in Software Development

You need to use models to build software to really understand their limits

I'm on a flight and wanted to write code to work on an idea. After a few moments of shifting mental gears, I popped open Zed, which allows me to code with a local LLM using ollama. My default impulse when writing code is to prompt a model. At first, I felt somewhat negative about this but with...

Goose as a Task Runner

Goose is a CLI language model-based agent. Goose exposes a chat interface and uses tool calling (mostly to invoke shell commands) to accomplish the objective prompted by the user. These tasks can include everything from writing code to running tests to converting a folder full of mov files to...

Document Citations

Using Claude Citations to annotate the sources for document Q&A

The following is an implementation of document Q&A with citations using Anthropic's press release for Claude Citations, a feature meant to reduce LLM hallucinations and provide clarity for which part of the source text the model is using to produce answers to questions. The content below the next...

LLM Conversation Branching

Visualizing and navigating branched conversations with LLMs and embeddings

I wrote about Conversation Branching on my main blog and I've been prototyping an LLM chat app called Delta that has first-class conversation branching. LLM conversations typically follow a linear path, making it unintuitive to explore alternative directions or recover from miscommunications. This...

The Unreasonable Effectiveness of Generating UI with React and Tailwind

Writing React/Tailwind with LLMs is effortless

If you've experimented with Claude Artifacts or v0.dev, maybe you've been delighted (as I have) that the language model can conjure a UI for an idea you describe. Most of my experience building software, especially professionally, comes from working on the "backend". Building frontend (read: user...