What I ship
Builds
Things I ship: indie products, open-source skills, and MCP servers. Most of these started as scratching my own itch and ended up useful to other people. The through-line is trust infrastructure for agents: permissions, provenance, memory hygiene, and proportionate review. I run agents against my own email, money, and publishing, so the guardrails get built first.
36 open projects · 2,859 GitHub stars across public repos as of August 3, 2026
Chain of Thought
Podcast covering how AI is reshaping infrastructure, software, strategy, and entire industries.
66+ episodes. Guests from NVIDIA, Google DeepMind, Cisco, AMD, MongoDB, Databricks, Vercel & more. The show is where I sharpen the thesis my writing and investing operate on.
Explore the show Listen at chainofthought.show (opens in new tab)
Open source & tools
MCP servers
-
Local Google Workspace MCP server for Gmail, Calendar, Drive, Docs, and Sheets.
Personal MCP server I built to wire Claude Code into my own calendar + inbox + drive. OAuth at install, no third-party broker.
-
Substack publishing + analytics MCP server.
Long-form posts are draft-only by design, short-form Notes publish immediately. Powers a chunk of the Chain of Thought newsletter workflow.
-
Podcast Index API MCP server.
Search podcasts, track guest appearances, monitor trending shows, check feed health. On npm.
-
Transistor.fm MCP server: episodes, analytics, transcripts, webhooks.
The API-parity pass and the get_download_summary + compare_episodes analytics tools I built here were merged upstream into gxjansen/Transistor-MCP. This is my packaged, npm-published build of it — the one that runs the Chain of Thought publish workflow.
-
OP3 podcast analytics MCP server: downloads, geography, listening app share.
Read-only MCP server for the Open Podcast Prefix Project. Pulls the listener analytics Transistor alone can’t give you: geography, devices, and app share.
-
Google Search Console MCP server: search analytics, sitemaps, URL inspection.
Query the search data that decides whether anything else here gets found — clicks, impressions, and the striking-distance queries worth working on. Refreshes tokens against Google directly rather than pulling in the full googleapis client. Read tools work on a read-only scope; sitemap writes and URL inspection ask for the full one.
-
Owner-side YouTube Analytics MCP server: watch time, retention, traffic sources, playlists.
The numbers behind a public view count: how long people watched, where they arrived from, where in a video they left. That data is owner-only and needs OAuth, so no API key reaches it. Nine tools, every one a read, with the channel filter hardcoded rather than taken from tool input. A derived episode-race tool re-indexes videos to days since their own publish, so a new episode compares against the last few at the same age. The analytics leg alongside gsc-mcp: search there, video here.
-
Check a social post against a platform’s real character limits.
The counting an agent cannot do by inspection: X bills every URL at 23 characters via t.co and weights non-Latin at 2×, Bluesky counts 300 graphemes so a family emoji is one, Mastodon counts grapheme clusters and bills a handle by its username alone. Every limit carries a primary source, and four platforms are deliberately missing because no published source states their numbers.
Agent skills
-
Opinionated starter for managing personal/work context with Claude Code.
Drop-in template for the slash-command + skill + memory-routing system I use across my own private working repos. Used daily.
-
Memory and hygiene for agent workspaces.
Six lifecycle skills — start, update, end, today, reconcile, recover — that give an AI coding agent persistent state, decision logs with the paths not taken, and cleanup for the messes parallel sessions leave. Configurable state layout via workspace.yaml. Graduated out of agent-skills.
-
Would your benchmark numbers survive an adversarial reviewer?
Benchmark-credibility auditor: 36 scoreable sub-checks across seven dimensions (pre-registration, contamination, holdout hygiene, judge validity, statistical honesty, reproducibility, leaderboard publishing), a JSON result schema for CI trend-tracking, and three synthetic fixture benchmarks that prove the audit works.
-
One canonical home per fact; every copy audited.
Deterministic drift auditor for facts hand-copied across docs — stdlib Python CLI (45 tests), a .ssot.yaml manifest with typed normalization, pre-commit hook, GitHub Action, and an AI skill wrapper for discovery. Never mutates a repo it audits.
-
Build agent skills that don’t rot.
Skill generator that makes the design decisions most generators skip — invocation control, arguments, context budget — then validates the result mechanically. Its spec knowledge is a pinned snapshot watched by weekly CI, so it stays current as Claude Code evolves. Graduated out of agent-skills.
-
Production-tested skills for Claude Code.
Nine drop-in skills: session memory, multi-agent code review, eval integrity audits, SSOT checks, drift reconciliation, worktree recovery, skill scaffolding, guest-circuit research, and angel diligence. Ships with an installer (install/update/diff). Built for my own daily work, generalized for anyone — the incubator that skills graduate from.
-
Audit a repo against its own code, or get it ready to open-source.
Most documentation tools grade prose. This one asks whether your claims are true: for every claim that something is prevented, blocked, or guaranteed, it goes and finds the mechanism, then grades it Enforced, Advisory, or Guidance. A warning that prints but does not block is not enforcement. Ships six checklist packs, five README templates, and optional modules for the failure modes that recur — unmeasured self-proof, fact drift, pinned specs nobody watches, and dashboards that say "live" over a dead cron.
-
The curation loop for agent memory.
Capture, recall, and a read-only curator that finds rot and contradictions in your agent memory before it is confidently wrong. Plain markdown and JSON, five slash commands, human-reviewed diffs, no vector store.
-
One prompt adds a reproducible demo GIF to any repo README.
Claude Code skill that records, optimizes, and embeds a demo GIF — vhs for terminals, Playwright for web. The recording script is committed, so the GIF regenerates when the tool changes instead of rotting. Dogfoods itself: its own README GIF was rendered by the skill.
Building something in AI infra or dev tools? I angel-invest in this space. How I think about it.
Writing & creator tools
-
Audit + rewrite AI writing patterns. Public Claude Code skill.
Open-source skill that flags and rewrites AI writing patterns: 60+ pattern categories, a 100+-entry replacement table, and a zero-dependency detector engine. The same rules I use to audit my own drafts.
-
Agent replies parseable in one pass — verdict first.
Skill that reorders how an agent reports: the first sentence answers the question, detail layers underneath so you can stop reading anywhere, and every claim traces to something observed. Ships real unedited before/after outputs. Sibling of avoid-ai-writing — this governs working replies, that one published prose.
-
Catches AI writing patterns in your drafts, right in the browser.
Live in the Chrome Web Store. Flags the AI-writing tells (em-dash tics, hedging, formulaic "not just X but Y" constructions) inline as you draft. Same detection rules as the open-source skill.
-
Curated list of AI tools that actually move the needle for solo creators.
New skill repos and MCP servers land here as I find or build them.
-
Curated learning path from "what is AI?" to building with Claude Code.
An ordered route through AI literacy rather than a link dump — foundations first, then hands-on work with coding agents. Built for people who keep being handed a reading list and no sequence.
-
Benchmark any podcast against a peer set using only public data.
CLI that compares a show to its peers on catalog depth, publishing cadence, transcript availability, and feed hygiene — all from public RSS and Apple metadata. No download estimates, no scraping, every number sourced and timestamped.
Hobby projects
-
Army composition & cost planning for Age of Empires II.
Plan armies, compare civs, and cost out builds across 100+ units and 51 civilizations — offline-capable PWA for AoE2: Definitive Edition. Built because the community spreadsheets are miserable.
-
Cross-platform DJ set track identification.
Personal hobby project for DJ set identification across SoundCloud, 1001tracklists, and Shazam.
Mojo libraries
Pure-Mojo libraries that mirror the Python stdlib APIs developers already know, filling ecosystem gaps for the Mojo language. Each ships with tests anchored to an external ground truth: official spec suites, byte-for-byte Python parity, or real-world corpora.
-
RSS, Atom, and JSON Feed parsing in pure Mojo.
The first feed/XML library in the Mojo ecosystem — every syndication format since 1999, strict-mode validation, 130+ MB/s compiled. Verified against a 138-feed real-world corpus. Mirrors Python's feedparser.
-
CommonMark parser and HTML renderer in pure Mojo.
98.6% CommonMark spec conformance (643/652), including 132/132 on the emphasis rules where markdown parsers usually die.
-
Liberal HTML parsing + readability extraction in pure Mojo.
Tag-soup-tolerant tokenizer with Mozilla-derived main-content scoring and a confidence gate for thin/paywalled pages.
-
General-purpose XML parsing in pure Mojo.
An xml.etree.ElementTree-shaped DOM — fromstring/tostring, find/findall/iter, scoped Clark-notation namespaces — built on the same pull parser as mojo-feed. Element-for-element byte match against CPython's xml.etree on a 14-document general-XML corpus; 6,000-iteration fuzz with zero crashes. Fills what had been the ecosystem's cleanest open gap. Mirrors Python's xml.etree.ElementTree.
-
SRT and WebVTT transcript parser in pure Mojo.
Parses podcast transcripts into cues with speakers and timestamps, round-trips both formats, and cuts clip windows. Built to chew Chain of Thought episode transcripts.
-
Unicode normalization + casefold in pure Mojo.
NFC/NFD/NFKC/NFKD and casefold, generated from the Unicode Character Database. 20,034/20,034 rows on the official conformance suite. Mirrors Python's unicodedata.
-
Myers text diff and unified_diff in pure Mojo.
Myers O(ND) diff with unified-diff output that byte-matches Python's difflib. 5,000-line diffs in under a millisecond. Mirrors Python's difflib.
-
Standalone jinja-flavored template engine in pure Mojo.
Expressions, filters, loops, conditionals, HTML autoescape. Renders 43/43 fixtures byte-for-byte identical to Jinja2. The first standalone template engine in the ecosystem.
-
tar archive reader/writer in pure Mojo.
ustar/GNU/pax formats; GNU tar reads its output byte-identically. Hardened against hostile archives. Mirrors Python's tarfile.
-
RESP2 Redis client in pure Mojo.
A redis-py-shaped client over libc sockets, tested against a live server and hardened against hostile replies. Mirrors Python's redis-py.
-
URL parsing and encoding in pure Mojo.
Mirrors Python's urllib.parse: parse/build URLs, quote/unquote, urlencode, parse_qs, urljoin. 161/161 byte-for-byte parity against CPython's own urllib.parse fixtures, 41/41 on the RFC 3986 Section 5.4 urljoin conformance table.
Support this work
Most of what's on this page is free and open source, built in time that isn't billed to anyone. GitHub Sponsors is how people who get value from it can chip in.
Quoted in The New York Times, ABC News, Vox & SD Times · guest on JavaScript Jabber and Humans of Reliability · moderated panels at INTERACT.