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.
Chain of Thought
Podcast covering how AI is reshaping infrastructure, software, strategy, and entire industries.
61+ 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-MCP (opens in new tab) Maintained
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.
Claude Code skills & starters
-
Opinionated starter for managing personal/work context with Claude Code.
Drop-in template for the slash-command + skill + memory-routing system I use across personal-context and cot-production. 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 claude-code-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 claude-code-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.
-
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: 53 pattern categories, a 109-entry replacement table, and a zero-dependency detector engine. The same rules I use to audit my own drafts.
-
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.
- ai-tools-for-creators (opens in new tab) Maintained
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.
-
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.
Quoted in The New York Times, ABC News, Vox & SD Times · guest on JavaScript Jabber and Humans of Reliability · moderated panels at INTERACT.