Posts

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...