Ryan Huellen

convention.sh - Stop AI agents from writing sloppy TypeScript

by
convention.sh is a hosted MCP server with 27 hand-tuned TypeScript conventions. Coding agents like Claude Code, Cursor, Codex, and Amp pull conventions just-in-time — so they don't thrash and you don't pay for tokens you don't need. Benchmarked on Claude Opus 4.7 to produce production-ready code 59% faster, 44% cheaper, and with 84% fewer input tokens vs baseline. Free tier available, no credit card required.

Add a comment

Replies

Best
Ryan Huellen
Maker
📌
Hey PH! 👋 I'm Ryan, one of the engineers behind convention.sh. The spark for this came from watching AI coding agents repeatedly make the same TypeScript mistakes — reaching for any, skipping runtime validation, writing optional fields where discriminated unions belong, and overall being sloppy. The usual suspects. Rather than paste a wall of rules into every prompt (and burn tokens on rules the agent doesn't need), we built a hosted MCP server that delivers exactly the convention the agent needs, exactly when it needs it. 27 conventions so far, all hand-tuned. Free tier is available with no credit card required — get started by adding convention.sh to your IDE of choice at https://convention.sh
Saul Fleischman

@haticus This is a clever approach to a real problem — AI agents definitely benefit from structured guidance rather than hoping they'll follow buried instructions. The MCP server pattern makes sense for keeping prompts lean while still enforcing standards. Curious how you've seen adoption skew so far between different IDE integrations.

Ben Gendler

The "just-in-time" pull approach is really clever. Having the agent pull only what it needs based on what it's actually doing makes way more sense. The benchmarks are impressive - but I'm curious how they hold up across different project structures. Our codebase has a pretty opinionated setup with specific patterns for API routes, state management, and component architecture. Can you add custom conventions alongside the 27 built-in ones, or is it a fixed set?