RSSAmplifier

Blog

David Wells - Everything

Everything new from David Wells — writing and projects.

davidwells.ioRSS feed ↗50 posts

Latest posts

Trigger an AI Agent by Sending an Email

Wire AWS SES inbound email to GitHub Actions so a single dictated email can kick off an AI agent that files an issue, does the work, and opens a PR waiting for review.

The Surprisingly Simple Anatomy of an AI Agent

Strip away the hype and an AI agent is six plain parts - a model, prompts, skills, tools, access, and memory. The whole mental model, minus the marketing.

NAX: Multi-Model Agent Workflows on Netlify

How Netlify Agent Executor turns Claude, Gemini, and Codex into repeatable multi-step workflows that can review, cross-check, and ship real work.

Devtools Utilities

A grouped set of CLI, monorepo, package-management, and workflow utilities for automating local development.

Multi-Agent Coding Without Worktree Chaos

A practical workflow for running multiple coding agents on one branch without duplicate work, file collisions, or constant worktree management.

ddb-migration-tools

Stage-aware DynamoDB migration tooling for TypeScript serverless projects.

@davidwells/dx-args

Forgiving argv parser for CLIs that accepts loose key/value syntax, globs, and typo-tolerant long flags.

Run Codex, Claude, & Gemini From GitHub Issues with Netlify Agent Runners

Use Netlify Agent Runners and a GitHub Actions workflow to turn issues and PR comments into scoped Codex, Claude, or Gemini coding runs.

cron-burgundy

Simple macOS cron manager with missed-job recovery for local automation workflows.

Smart Deploys for Serverless Monorepos

How to make serverless monorepo deploys faster and safer by deriving deployment waves from git changes, package dependencies, and infrastructure-as-code graphs.

@davidwells/git-split-diffs

Terminal diff viewer for splitting git diffs into clearer side-by-side review output.

@davidwells/extract-deps

Dependency extraction utility for finding imports, requires, and exports in JavaScript and TypeScript code without AST parsing.

comment-block-migrator

Migration utility for updating Markdown Magic comment block syntax across markdown files.

Building a Forgiving CLI Argument Parser

dx-args adds argv normalization, glob grouping, and oparser value parsing so your CLI keeps working when someone types a slightly imperfect command.

comment-block-replacer

File replacement utility for processing comment blocks and writing generated content back to disk.

comment-block-transformer

Transform engine for applying configured Markdown Magic-style comment block transforms.

comment-block-parser

Comment-block parser used by Markdown Magic to find automation blocks in markdown and source files.

Using superwhisper to speed up your dev flow

Superwhisper is a talk-to-text app for your Mac that speeds up my development workflow tremendously!!!! So you can imagine a world where basically you're just talking to your computer and it is listening to you kind of ramble on and then it takes what you say, and feeds it into whatever tool you're…

Creating AI-Infused GitHub Repos in One Command

A practical shell workflow for turning new project setup into one repeatable command that creates the repo, pushes it, installs AI skills, and connects remote AI agents.

@davidwells/matcher

Flexible matching utility for strings, regular expressions, functions, arrays, and object criteria.

Building Idempotent APIs with AWS Lambda Powertools

In today's distributed systems, ensuring reliable and consistent API behavior is crucial. One of the key challenges developers face is handling duplicate requests gracefully. This is where idempotency comes into play. This post will guide serverless developers and AWS users through implementing…

Idempotent Requests Demo

Demo showing retry-safe request flows on the client and server with idempotency keys.

Powerful polling with waitFor

Recently, whilst doing some client work, I was running into some issues around retries and transient errors. This was making a giant try/catch nightmare scenario and I found myself playing whack-a-mole by sprinkling retry logic in a bunch of different places. There had to be a better way, I…

@davidwells/parse-time

Parser for turning messy human time strings into JavaScript Date objects.

FAST Serverless JavaScript on AWS Lambda with LLRT

I recently did a spike on a new runtime for AWS Lambda called LLRT (Low Latency Runtime). It came out about a year ago but I hadn't dug into it until recently. Why is LLRT cool? LLRT offers several compelling advantages over traditional Node.js runtimes: 1. Lightning-Fast Cold Starts : LLRT is…

@davidwells/box-logger

Terminal formatting utility for boxes, headers, dividers, and structured CLI output.

@davidwells/wait-for

Flexible polling and retry utility for waiting on async systems with cancellation, backoff, callbacks, and timeouts.

LLRT Lambda Runtime Spike

Example of using the AWS LLRT JavaScript runtime with Serverless Framework.

Serverless ESM Functions with No Build Step

Example project showing pure ESM AWS Lambda functions with Serverless Framework and no bundling step.

Big risks. Big rewards

Nothing ventured, nothing gained. Big things require big actions. Risking it all is self-explanatory. The payoff will be outsized, while the reverse will be dicey. Life is a series of chances. You can play it safe and conservatively or go all in. I've been on both ends of this spectrum. Playing it…

Parsing React-like Props in Markdown Comments with oparser

How a forgiving key-value parser lets markdown-magic accept JSX-style options in HTML comments, even when humans forget quotes and closing braces.

How to synchronize remote content in markdown files

Markdown is an amazing authoring format. It frees us from the shackles of Microsoft word and let's you focus primarily on the content. As a developer, you will write ALOT of markdown over the course of your career. But like any text document, docs can grow stale over time. As a project grows, we…

Don’t suffer fools. Thank them

Throughout your journey on this planet, you are bound to encounter "the fool". There's no way around it. These people will pop up when you least (and most) expect it. But there is good news! You don't need to suffer at their expense. Instead, you should be thanking your lucky stars. Why? We learn…

What would you do if you knew you couldn't fail?

What a startling question. Wow. If I couldn't fail. What a world that would be. It seems like a pipedream. Something spoken at a self help seminar. Ether is the wind. Pixel dust. Nonsense. But it's more real than you, or I, think. You see, it's all about framing . Let me explain. If you try…

git-er-done: Query Git History from JavaScript

git-er-done turns git diffs into a JavaScript API for smarter CI, monorepo automation, release tooling, and build skips.

Media Provenance - A Solution to Generative AI Fakes

Generative AI made fake media cheap. A proposal for signed edit histories and links to original source material as the new baseline for trust.

Using unbundled ESM in AWS Lambda Functions

ESM modules are finally gaining support for CJS. This means npm packages that use will work in ESM land. Hooray 🎉. I've used bundling with esBuild in the past with AWS Lambda. I didn't love the build step and how many npm packages wouldn't work in pure ESM land so I put it on the shelf. But... now…

@davidwells/smart-log

Logging utility for CLIs with debug namespaces, JSON mode, silent mode, and log dumping.

Deep log available methods on JavaScript Objects & Classes

Sometimes won't give us all the available methods on a javascript Object or Class. This makes exploring the API of a given thing difficult. To fix this we can use the utility function , below in this post, to deep log an object/class with all its methods. I use this utility a lot when exploring new…

Automating dev workflows with karabiner

Karabiner is an mac automation tool that allows you to set global hot keys to trigger different actions on your computer. I'd tried it in the past but the config was very complicated "Extensible Data Notation" format and I gave up. But at some point they started using and the config was now…

Programmatically sync a folder of git repositories

When building sites, I typically keep the contents of the site in a separate GitHub repository. Why? 1. To keep things nice and tidy and to allow for the site code to be used as more of a template for other projects. 2. Additionally, when you have your content in a separate repo, it's easier to add…

Search DOM for arbitrary text then scroll to it

Using JavaScript to find arbitrary DOM nodes based on their inner text. AKA full page search

Improving Event Listener DX

Making DX of event listeners nice and crisp

@davidwells/fs-utils

Small reusable file-system utilities for Node.js scripts and developer tools.

@davidwells/md-utils

Small markdown utility package for parsing and transforming markdown content.

glob-monster

Older file globber utility that understands regular expressions for project file discovery.

@analytics/visitor-source

Get visitor source.

@analytics/url-utils

URL utils.

@analytics/redact-utils

Utility library for redacting event data.

@analytics/session-storage-utils

Tiny SessionStorage utility library.