550 karma · joined May 2, 2011
* https://www.evantahler.com * https://github.com/evantahler * https://twitter.com/evantahler
[ my public key: https://keybase.io/evantahler; my proof: https://keybase.io/evantahler/sigs/0NsPFHC3XZlVcWViIXGSMTM73ap__K4X_p3Fgj1mwm4 ]
So… what does this mean for the right to be forgotten?
This time I fixed all the mistakes, I promise!
Along the way, me (and Claude) did a large amount of SQLite excivation to learn how apple stores all of this stuff locally. I extracted that into https://github.com/evantahler/macos-ts if you want to use a lower-level API yourself
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.
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.
The stack is opinionated: Bun, Zod, Drizzle ORM, Redis (for Resque-based background tasks and PubSub), PostgreSQL. No compilation step, sub-second startup.
You can try it right now:
bunx keryx new my-app
cd my-app
cp .env.example .env
bun install
bun dev
Requires Bun, PostgreSQL, and Redis running locally (and a `createdb bun` for the default DB).Some things I’d love feedback on:
- 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?
Code is MIT licensed: https://github.com/actionhero/keryx
Happy to answer questions about the architecture, the MCP integration, or why I think Bun is ready for this kind of framework.
`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!
- MCP
- goose
- AGENTS.md
Learn more @ https://aaif.io/press/linux-foundation-announces-the-formati...
Assuming your base images are themselves already multi-arch, most of the tooling we needed was already built into the `dockerx` build tool, which is awesome - check it out if you haven't (2). Docker has bundled all the tooling and emulation packages (qemu) needed into a single docker image that can publish multi-arch docker images for you! You run docker to emulate docker to publish docker... There are some interesting things that you'll need to do if you publish multi-stage builds, like publish a tmp tag and delete it when you are done, but it's not /too/ terrible. Since Airbyte is OSS, you can check out our connector publish script here (3) to see some examples.
I'd recommend that spending the time to work your multi-arch tooling - not only does it make the local dev experience faster/better, it:
1. unlocks ARM cloud compute, which can be faster/cheaper in many cases (AWS)
2. removes a class of emulation bugs when running AMD images on ARM - mostly around networking & timing (in the JAVA stack anyway)
Links:
1. https://github.com/airbytehq/airbyte/issues/2017
2. https://docs.docker.com/buildx/working-with-buildx
3. https://github.com/airbytehq/airbyte/blob/master/tools/integ...