56 karma · joined September 20, 2012
CTO / founder. I spend most of my time designing multi-agent systems, experimenting with LLM reasoning, and shipping actual products instead of demos. Currently focused on autonomous agents, orchestration, and making AI useful beyond toy use-cases.
Background in software engineering, distributed systems, and teaching. I’ve worked with startups, governments, and enterprise teams—usually stepping in where things are messy and need to scale.
I care about: • shipping over talking • clear thinking over hype • systems that actually work in production
Expect posts about AI, architecture, dev tooling, and occasional strong opinions.
I believe we are starting the age of personalized hardware, and Waveshare & co are doing a great job at bringing affordable, multi-purpose devices our way.
Would love to hear your experiences if you try out this build.
S3 doesn't have enough floating point processing power, so what I do is to split the model in two, run the model in series, and represent floating point values as block floating point, essentially compressing the floating point representations.
The null test peak sits at -60dB in the worst case, in 193 different NAM profiles I tested, which is basically inaudible. You can listen to the different profiles here https://playtaurus.com/blog/running-nam-a2-full-natively-on-... and listen to the difference between A2-full and A2-lite, vs A2-full and my approach.
We should ship a compatibility matrix... at some point we were hoping to report test262 coverage for ECMAScript compliance, but we had to prioritize the release. Of course any of the typical web APIs work, including localStorage, and even so far as the Web Audio API (and we're working on WebRTC to make it cross platform. It's especially interesting to be able to build real-time communication apps, say, on an ESP32-S3, with just the web semantics).
In short, most app code stays inside the portable model. You need to know the target when you use host APIs that are constrained on small devices: blocking I/O, memory limits, file sizes, and of course you can combine it with native code for the target. I'm building a guitar effects processor, for example, where the UI is powered by Gea Stack but all the audio processing happens natively (https://github.com/dashersw/coyopedal).
On AI: yes, it's mostly me plus agents for the compiler. We have a team at Coyotiv that helps with everything else. I use Claude Code with Claude Opus as the main model and Sonnet subagents for parallel work, with a fair bit of Fable. I also combine this with whatever GPT model is available over Codex. During the past 6 months I've started working on the compiler, I've changed several model versions :)
What makes AI perform on a compiler:
Hard gates the agents can't argue with, like a diff gate that names every program whose output changed, plus conformance sweeps, a diary that captures past failures so they don't repeat, and treating a passing exit code as insufficient and the outputs get checked against Node.js behavior and unit tests.
The biggest differentiator for me is, even though I'm a pretty relaxed manager for humans, I'm a heavy micro-manager for AI. I read its thinking tokens and its code live and as soon as I spot something I don't like, I intervene and guide the model to the output I want to see.
It wasn't easy, Gea Stack in total I think burnt more than a million dollars in AI credits, and I've been working on it literally non-stop for 6 months.
There were a lot of hurdles along the way and we solve them as we come across them. Keeping values native when JS uses them dynamically was a challenge. d = new Date(); d.foo = 1 is easy if you box everything, but then it's a slow interpreter (like some other projects in the field). So we had to invent a new mechanism; native types get a side table for extra properties.
Generics and union types were also challenging: one JS generic can need several different C++ layouts.
eval is limited: new Function runs on a small evaluator written in C++, and direct eval isn't supported yet.
TLDR; it's 11x slower than Node.js and 23x slower than Gea Stack with Hono. With raw HTTP server, Perry is ~27% faster than Node.js and Gea is 3.5x faster than Perry.
Having said that, I personally designed the logo and visual aesthetic and it serves a purpose. We believe in firmware freedom and hardware hackability, just like it was the norm in 70s and 80s. Of course it could have been executed better, but the current form is a specific choice after many iterations and certainly not low-effort. Too bad it reminds people of AI-slop, for an older generation it reminds other things.
Regular arrays are dense, but we keep a presence bit for every element so we can identify sparse arrays and differentiate holes from undefined's. And finally, there's no Error.stack support right now.
And just to clarify, of course, this limitation is only for "eval", not regular TypeScript :)
Most libs from npm compile fine, including Hono, and we are now working on Fastify and MongoDB native driver.
We had an earlier prototype with a full-stack Gea-compiled app with dynamic fallbacks, but I believe we can do better.
And yes, of course, we tried compiling TypeScript compiler to C++ via Gea Stack, but had to deprioritize to get the release out the door.
We also have limited support for `new Function("...")` via a small evaluator written in C++ that parses and runs the generated body. We mainly built this for Fastify's generated routing functions so it doesn't support classes, asynchronous, destructuring, etc, but conditionals, loops, variable declarations etc work.
There is no "eval" yet, but the same support shape could be added for it too, as the mechanism is already there.
The approaches and the limitations are documented here:
https://github.com/geastack/compiler/blob/main/docs/EVAL.md https://github.com/geastack/compiler/blob/main/docs/DYNAMIC-...
So there's no byte code, and while not every single dynamic language feature has a corresponding static compilation, the base is pretty broad. So much so that Hono, the web framework, with all its dependencies, compile just fine.
There's a broader philosophy of "firmware freedom" that we want to bring to the world. Practically, you should buy hardware for what it is, and run your own firmware on it. E-book readers and unlocked bootloaders in the Android world is doing a pretty good job at this, so we want to contribute to this movement by making the development of such solutions dead simple, both for humans and AI. Incidentally, TypeScript, JSX, and CSS happen to be the languages AI knows best.
So, it's an ambitious project with a real team behind it, with commercialization on the horizon.