Skip to content (Press Enter to skip to main content)

Blog Posts

ATP - Agent Trigger Protocol

Close-up of a mixing board.
Close-up of a mixing board.

Thinking about how to make AI agents more useful. Or did I just reinvent webhooks?

Photo by Alexey Ruban on Unsplash-

In which I think about how we use agents, or maybe just reinvent webhooks.

I'm always looking to find ways to become more productive. It's helpful to discuss architectural concepts with a Large Language Model--great for when you don't have a coworker to toss ideas around with. A conversational approach seems best. (EG: "What if we made this service easily overridden in config?") A LLM is lacking in several ways compared to a real flesh-and-blood coworker. For one, they never initiate a conversation with you. Sure coworkers are annoying at times, but don't you want someone to let you know there's doughnuts in the kitchen?

How can we do that with LLMs? How can we have an external event trigger an agent's workflow? I've done a bit of searching and there doesn't seem to be an accepted solution. Certainly multiple people have come up with solutions, but I haven't found a name for it. Someone has to name it, so I'll take a shot: ATP, or Agent Trigger Protocol.

Read more →

Image credit: Chris Lawton on Unsplash

About four years ago, I moved this site from an aging Drupal installation to GatsbyJS. I was happy with the performance, but the whole thing did feel overly complex for a simple blog. Finally in 2025, I'm switching again to Astro. And I used the Cursor IDE to build the site.

Read more →

Image credit: marcos mayer on Unsplash

"When I was your age, we used to do callback functions all the way down and be happy with it!"

-Someone (Possibly me.)

If you've written JavaScript for a while, you've probably seen code that needed several asynchronous steps and used callbacks within callbacks. This often led to the dreaded Pyramid of doom and made the logic very difficult to understand. Things are easier since ES2015 with the introduction of Promises, and then async/await in ES2017. I often wonder though: "Do we really need async/await?

Read more →

Image credit: Pascal van de Vendel

I use MacOS for most of my work and one annoying thing slowly creeping up on me is how slow it is to open a new terminal window. Finally, I reached the breaking point when it seemed like every new terminal login was taking several seconds. Small delays like this can really break you out of your flow. I had to take action.

Read more →

Image credit: Giuseppe Milo

You may have thought about switching to a static site, but what do you give up? If you're moving from a fully-featured Content Management System, you lose a lot. Like many choices, it's a tradeoff. A CMS offers many features and capabilities, while a static site excels at speed and simplicity.

Read more →