<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: evantahler</title><link>https://news.ycombinator.com/user?id=evantahler</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 28 Apr 2026 21:17:12 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=evantahler" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by evantahler in "CC-Canary: Detect early signs of regressions in Claude Code"]]></title><description><![CDATA[
<p>I feel like asking the thing that you are measuring, and don’t trust, to measure itself might not produce the best measurements.</p>
]]></description><pubDate>Fri, 24 Apr 2026 19:26:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=47894714</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=47894714</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47894714</guid></item><item><title><![CDATA[New comment by evantahler in "Keryx – One TypeScript action class, five transports (HTTP, WS, CLI, MCP, tasks)"]]></title><description><![CDATA[
<p>Hi HN, I’m Evan. I’ve been building API frameworks in JavaScript and Typescript for over a decade (I created Actionhero), and Keryx is the distillation of everything I’ve learned, rebuilt from scratch on Bun and TypeScript.<p>The big idea: you write one action class with a Zod schema, and the framework serves it as an HTTP endpoint, a WebSocket handler, a CLI command, a background task, and an MCP tool with the same validation, same middleware, same `run()` method. The only thing that changes is how the request arrives.<p>The MCP part is what pushed me to build this. I work on AI agent infrastructure at Arcade (we do authorization and tooling for AI agents), and I kept seeing folks bolt MCP servers onto existing APIs as a separate layer with duplicated auth, duplicated schemas, and duplicated error handling. Keryx makes your API an MCP server by default — OAuth 2.1 + PKCE built in, per-session isolation, and typed errors that agents can actually distinguish.<p>The stack is opinionated: Bun, Zod, Drizzle ORM, Redis (for Resque-based background tasks and PubSub), PostgreSQL. No compilation step, sub-second startup.<p>You can try it right now:<p><pre><code>  bunx keryx new my-app
  cd my-app
  cp .env.example .env
  bun install
  bun dev

</code></pre>
Requires Bun, PostgreSQL, and Redis running locally (and a `createdb bun` for the default DB).<p>Some things I’d love feedback on:<p>- Is the “one action, every transport” abstraction too magical, or does it feel natural once you use it?
- The MCP-native approach — is this how you’d want to add agent support to a new project?
- Anything missing from the comparison table on the homepage?<p>Code is MIT licensed: <a href="https://github.com/actionhero/keryx" rel="nofollow">https://github.com/actionhero/keryx</a><p>Happy to answer questions about the architecture, the MCP integration, or why I think Bun is ready for this kind of framework.</p>
]]></description><pubDate>Wed, 25 Mar 2026 04:51:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47513411</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=47513411</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47513411</guid></item><item><title><![CDATA[Keryx – One TypeScript action class, five transports (HTTP, WS, CLI, MCP, tasks)]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.keryxjs.com/">https://www.keryxjs.com/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47513376">https://news.ycombinator.com/item?id=47513376</a></p>
<p>Points: 10</p>
<p># Comments: 2</p>
]]></description><pubDate>Wed, 25 Mar 2026 04:48:09 +0000</pubDate><link>https://www.keryxjs.com/</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=47513376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47513376</guid></item><item><title><![CDATA[New comment by evantahler in "`mcpx` – MCP in a CLI"]]></title><description><![CDATA[
<p>I've blogged about the process of making this tool, and some of the design considerations here: <a href="https://www.evantahler.com/blog/post/2026-03-13-curl-for-mcp" rel="nofollow">https://www.evantahler.com/blog/post/2026-03-13-curl-for-mcp</a></p>
]]></description><pubDate>Fri, 13 Mar 2026 21:09:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=47369945</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=47369945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47369945</guid></item><item><title><![CDATA[New comment by evantahler in "`mcpx` – MCP in a CLI"]]></title><description><![CDATA[
<p>What if we put MCP /in/ the CLI?<p>`mcpx` is a command-line interface for MCP servers. curl for MCP.  The internet is debating CLI vs MCP like they're competitors. They're not!</p>
]]></description><pubDate>Fri, 13 Mar 2026 21:07:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47369917</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=47369917</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47369917</guid></item><item><title><![CDATA[`mcpx` – MCP in a CLI]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/evantahler/mcpx">https://github.com/evantahler/mcpx</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47369916">https://news.ycombinator.com/item?id=47369916</a></p>
<p>Points: 7</p>
<p># Comments: 3</p>
]]></description><pubDate>Fri, 13 Mar 2026 21:07:11 +0000</pubDate><link>https://github.com/evantahler/mcpx</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=47369916</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47369916</guid></item><item><title><![CDATA[New comment by evantahler in "The Linux Foundation Launches the Agentic AI Foundation"]]></title><description><![CDATA[
<p>Management of the following projects moves to the Linux Foundation:<p>- MCP<p>- goose<p>- AGENTS.md<p>Learn more @ <a href="https://aaif.io/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation-aaif-anchored-by-new-project-contributions-including-model-context-protocol-mcp-goose-and-agents-md/" rel="nofollow">https://aaif.io/press/linux-foundation-announces-the-formati...</a></p>
]]></description><pubDate>Tue, 09 Dec 2025 17:08:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=46207457</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=46207457</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46207457</guid></item><item><title><![CDATA[The Linux Foundation Launches the Agentic AI Foundation]]></title><description><![CDATA[
<p>Article URL: <a href="https://aaif.io/">https://aaif.io/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46207438">https://news.ycombinator.com/item?id=46207438</a></p>
<p>Points: 11</p>
<p># Comments: 6</p>
]]></description><pubDate>Tue, 09 Dec 2025 17:06:53 +0000</pubDate><link>https://aaif.io/</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=46207438</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46207438</guid></item><item><title><![CDATA[New comment by evantahler in "A practical guide to building agents [pdf]"]]></title><description><![CDATA[
<p>We do this at Arcade.dev with oAuth scopes and token persistence for each agent.  There is a grant required for each tool-user tuple the first time, but then it’s remembered</p>
]]></description><pubDate>Thu, 05 Jun 2025 05:41:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44188615</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=44188615</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44188615</guid></item><item><title><![CDATA[A payments protocol for the internet. Built on HTTP]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/coinbase/x402">https://github.com/coinbase/x402</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43923326">https://news.ycombinator.com/item?id=43923326</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 08 May 2025 05:30:34 +0000</pubDate><link>https://github.com/coinbase/x402</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=43923326</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43923326</guid></item><item><title><![CDATA[New comment by evantahler in "Google to embrace MCP"]]></title><description><![CDATA[
<p>check out arcade.dev for this!</p>
]]></description><pubDate>Tue, 15 Apr 2025 02:47:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=43688541</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=43688541</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43688541</guid></item><item><title><![CDATA[New comment by evantahler in "Avoid ISP Routers (2024)"]]></title><description><![CDATA[
<p>Monkey brains is great if you can get it! Cheap and reliable and you can use any router you want.</p>
]]></description><pubDate>Sun, 02 Feb 2025 03:52:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=42905648</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=42905648</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42905648</guid></item><item><title><![CDATA[New comment by evantahler in "Show HN: Outerbase Studio – Open-Source Database GUI"]]></title><description><![CDATA[
<p>SequelPro for me!</p>
]]></description><pubDate>Thu, 05 Dec 2024 06:05:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=42325403</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=42325403</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42325403</guid></item><item><title><![CDATA[New comment by evantahler in "Airbyte 1.0 – Marketplace, AI Assist, Gen AI Support and Enterprise GA"]]></title><description><![CDATA[
<p>We've been working on this for a long time - Reliability, new connectors, error handling and more!  Check out the technical release notes to learn more: <a href="https://github.com/airbytehq/airbyte/releases/tag/v1.0.0">https://github.com/airbytehq/airbyte/releases/tag/v1.0.0</a></p>
]]></description><pubDate>Tue, 24 Sep 2024 17:07:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=41638647</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=41638647</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41638647</guid></item><item><title><![CDATA[New comment by evantahler in "Reclaim the Stack"]]></title><description><![CDATA[
<p>Porter (<a href="https://www.porter.run/">https://www.porter.run/</a>) is a great product in the same vein (e.g. turn K8s into a dev-friendly Heroku-like PASS).  How does this compare?</p>
]]></description><pubDate>Sun, 08 Sep 2024 23:12:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=41484043</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=41484043</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41484043</guid></item><item><title><![CDATA[New comment by evantahler in "Ask HN: Why don't many platform data products offer self hosted?"]]></title><description><![CDATA[
<p>On the data moving / ETL/ELT space - check out Airbyte.  You can self host!</p>
]]></description><pubDate>Sun, 23 Jun 2024 17:22:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=40768999</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=40768999</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40768999</guid></item><item><title><![CDATA[Airbyte made progress on Postgres replication performance]]></title><description><![CDATA[
<p>Article URL: <a href="https://airbyte.com/blog/postgres-replication-performance-benchmark-airbyte-vs-fivetran">https://airbyte.com/blog/postgres-replication-performance-benchmark-airbyte-vs-fivetran</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=37498518">https://news.ycombinator.com/item?id=37498518</a></p>
<p>Points: 12</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 13 Sep 2023 16:02:53 +0000</pubDate><link>https://airbyte.com/blog/postgres-replication-performance-benchmark-airbyte-vs-fivetran</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=37498518</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37498518</guid></item><item><title><![CDATA[Airbyte API & Terraform Provider – available in open source]]></title><description><![CDATA[
<p>Article URL: <a href="https://airbyte.com/blog/airbytes-official-api-and-terraform-provider-now-in-open-source">https://airbyte.com/blog/airbytes-official-api-and-terraform-provider-now-in-open-source</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=36990764">https://news.ycombinator.com/item?id=36990764</a></p>
<p>Points: 19</p>
<p># Comments: 6</p>
]]></description><pubDate>Thu, 03 Aug 2023 19:43:02 +0000</pubDate><link>https://airbyte.com/blog/airbytes-official-api-and-terraform-provider-now-in-open-source</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=36990764</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36990764</guid></item><item><title><![CDATA[New comment by evantahler in "Ask HN: Could you share your personal blog here?"]]></title><description><![CDATA[
<p><a href="https://evantahler.com/blog" rel="nofollow noreferrer">https://evantahler.com/blog</a></p>
]]></description><pubDate>Wed, 05 Jul 2023 19:26:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=36605788</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=36605788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36605788</guid></item><item><title><![CDATA[Airbyte 0.50: Introducing Checkpointing, Column Selection and Schema Propagation]]></title><description><![CDATA[
<p>Article URL: <a href="https://airbyte.com/blog/announcing-airbyte-0-50-checkpointing-column-selection-and-schema-propagation">https://airbyte.com/blog/announcing-airbyte-0-50-checkpointing-column-selection-and-schema-propagation</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=36243078">https://news.ycombinator.com/item?id=36243078</a></p>
<p>Points: 8</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 08 Jun 2023 15:05:21 +0000</pubDate><link>https://airbyte.com/blog/announcing-airbyte-0-50-checkpointing-column-selection-and-schema-propagation</link><dc:creator>evantahler</dc:creator><comments>https://news.ycombinator.com/item?id=36243078</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36243078</guid></item></channel></rss>