I build tools that solve problems I encounter in my own workflow - whether that's managing pull requests across repositories, getting readable diff output, or ensuring code examples actually work.
Developer Tools & Libraries
Tools I've built to solve developer workflow problems.
tokendiff
A Go library and CLI for human-readable, token-level diffing.
Standard diff tools optimize for minimal edit distance, but often produce output that's hard for humans to parse - fragmenting changes across common words like "the" or "for." tokendiff uses a histogram-based algorithm with heuristics tuned for readability.
- Language: Go
- State: Released
- Links: GitHub ・ Blog post: Diff Algorithm Spelunking
diffx
A Go implementation of the Myers O(ND) diff algorithm with preprocessing, heuristics, and postprocessing for improved output quality.
Built as the algorithm layer underneath tokendiff, with a clean Element interface for custom diffing beyond strings.
- Language: Go
- State: Released
- Links: GitHub
OASprey
OpenAPI specification validation for Jest. Validates that HTTP responses match their OpenAPI schemas at test time.
Forked and streamlined from OpenAPIValidators to reduce dependencies and improve maintainability.
fenestro
A Go CLI that ingests HTML and renders it in helpful windows. Built to support diff output visualization.
- Language: Go
- State: In development
- Links: GitHub
afdocs
A CLI tool that tests documentation sites against the Agent-Friendly Documentation Spec. Checks llms.txt discovery, markdown availability, page size risks, content negotiation, URL stability, and more. Point it at a docs URL and it reports how well the site serves AI agent consumers.
- Language: TypeScript
- State: Active development
- Links: afdocs.dev ・ GitHub ・ npm
agentsummons
A Go library and CLI for invoking agent harnesses (Antigravity CLI, Claude Code, Codex CLI) in headless mode.
Every headless-agent experiment rediscovers the same invocation lore: which binary, which permission-bypass flag, which harness swallows your prompt. agentsummons owns that knowledge once so your scripts and experiments don't have to. Distributed via Homebrew, npm, and PyPI with prebuilt static binaries.
- Language: Go
- State: Active development
- Links: agentsummons.dev ・ GitHub ・ npm ・ PyPI
agentminutes
A Go library and CLI that parses native agent harness session transcripts into one unified, comparable event schema.
Every harness invents its own transcript format, and those transcripts are ground truth for how an agent actually behaved: which tools it chose, what it saw back, what it spent. agentminutes makes sessions analyzable and comparable across harnesses. Companion to agentsummons: agentsummons convenes the meeting, agentminutes takes the minutes.
- Language: Go
- State: Active development
- Links: agentminutes.dev ・ GitHub ・ npm ・ PyPI
skill-validator
A Go CLI that validates Agent Skills against the agentskills.io specification. Checks directory structure, frontmatter, content quality, cross-contamination risk, and token budget composition. Built to support my ecosystem-scale analysis of 673 skills across 41 repositories.
- Language: Go
- State: Active development
- Links: GitHub ・ Blog post: Agent Skill Analysis ・ Interactive Report
skillxp
A skill invocation runner: installs an Agent Skill in a fresh fixture, invokes an agent harness headlessly, and reports what actually reached the model.
Skill authors publish for 25+ platforms that each load, present, and manage skills differently, and mostly invisibly. skillxp answers "what did the platform actually do with my skill" from transcript evidence rather than model self-reporting. Builds on agentsummons and agentminutes, and powers the agent-skill-implementation loading benchmark.
- Language: Go
- State: Active development
- Links: skillxp.dev ・ GitHub ・ npm ・ PyPI
Documentation Infrastructure
Tools I built during my time at MongoDB (2021 - 2026), focused on code example quality at scale.
Audit CLI
A Go CLI for analyzing documentation source files - tracking code examples, includes, procedures, and cross-references across large documentation sets with monorepo structure awareness.
Used to audit content and infrastructure to perform maintenance work, product updates, or identify needed process improvements and education opportunities.
- Language: Go
- State: In production at MongoDB
- Scope: 40+ documentation projects, 35,000+ code examples, one zillion documentation source files
- Links: GitHub ・ Documentation
GDCD (Great Docs Code Devourer)
Fetches and analyzes documentation data from internal APIs, tracking code examples and page metadata. Used to audit 35,000+ code examples across 40+ repositories, resulting in an 88-page analysis for documentation leadership.
- Language: Go
- State: In production at MongoDB
DODEC (Database of Devoured Code)
Query tool for aggregating and reporting on code example data stored in MongoDB. Supports weekly and monthly reporting and trend analysis.
- Language: Go
- State: In production at MongoDB
Cross-Language Comparison Frameworks
Testing utilities for validating code example output across programming languages. Each implementation provides a fluent API for comparing actual output against expected results, with support for MongoDB-specific types, ellipsis patterns, and flexible matching.
- Languages: Go, Java, Python, C#/.NET, JavaScript, MongoDB Shell
- State: In production at MongoDB
- Scope: Used across MongoDB's documentation
macOS Apps
Native macOS applications built with SwiftUI.
PR Focus
A native macOS dashboard app for managing pull request activity across GitHub repositories. Helps developers track incoming PRs, review requests, and PR status without context-switching to the browser or having to check many repositories.
- Stack: SwiftUI, Realm Database, GitHub GraphQL API
- State: Live on Mac App Store ・ Website
Issuenator
Watches GitHub repositories for new issues and surfaces them in a native interface. Built for developers who maintain multiple repositories.
- Stack: SwiftUI, SwiftData
- State: TestFlight Alpha ・ Website
Geta
A GM toolkit for tabletop gaming - generates shops, taverns, NPCs, and other elements for game masters.
- Stack: SwiftUI, SwiftData
- State: In development
iOS Apps
Native iOS applications built with SwiftUI.
Shattered Ring
A companion app for the video game Elden Ring - helps players track NPCs, Quests, Locations, and Bosses since the game did not provide an in-game system for this.
- Stack: SwiftUI, Realm Database
- State: Live on App Store ・ Website
TeaLixir
A tea-tracking app for tea enthusiasts - save tea details, log preparations with additions and tasting notes, and discover patterns in your preferences.
- Stack: SwiftUI, SwiftData, CloudKit
- State: Live on App Store ・ Website
Pocket Codex
A reference app for video game data - provides searchable, offline access to game information. Includes a custom data pipeline with web crawling, HTML parsing, and automated code generation.
- Stack: SwiftUI, SwiftData, Go (data pipeline)
- State: TestFlight Alpha
Coffeelicious
A coffee-and-espresso tracking app for coffee enthusiasts - save bean details, log preparations with additions and tasting notes, and discover patterns in your preferences. (TeaLixir, but for coffee!)
- Stack: SwiftUI, SwiftData, CloudKit
- State: In development
Writing & Workshops
Technical content about building software.
Blog
I write about software development, documentation infrastructure, and the tools I build:
- Diff Algorithm Spelunking - Designing human-readable diff output
- Code Example Audit Series - Auditing 35,000+ code examples at scale
- Testing Documentation Code Examples - Unit testing approaches across 9 SDKs
Workshops
Training materials for technical writers on code example testing and documentation workflows:
- Creating Tested Code Examples
- Working with Tested Code Examples
- Removing Hard-Coded Code Blocks
Technical Focus
Primary languages: Go, Swift, TypeScript
Domains: Developer tooling, documentation infrastructure, native app development
Approach: I build tools that solve problems I actually have. Everything here started as "I wish this existed" and became "I'll build it myself."