About

Hi, I'm Charan.
I build intelligent systems.

AI & Automation Engineer in Bangalore. I ship production LLM systems — and I'm the kind of engineer who thinks a millisecond of lag isn't a bug, it's a flameout. GAUNTLET is a small proof of that instinct, pointed at regression infrastructure.

I'm an AI engineer who ships production LLM systems — from a Springer-published model that reads chest X-rays well enough for a radiologist to take seriously, to document pipelines that run themselves. Before any of that, I wrote real-time control code for jet engines at DRDO, where the deadlines were measured in microseconds and "mostly works" wasn't a passing grade.

That's the throughline in everything I build: the interesting part isn't the demo, it's the part that has to hold up when nobody's watching. A model looks like magic in a notebook and falls apart in production; the job is the gap in between. GAUNTLET is that instinct applied to CI — not "did the build pass," but "what quietly broke, and who owns it."

This is one project. There are 18 more (and a few jet engines) over at charanreddy.dev — if this one made you curious, that's the door.

What I learned building this

Exit codes lie; logs don't.

The single most "real" decision here — letting a tool exit 0 and still FAIL on log content — is the one that made it feel like actual EDA infrastructure instead of a toy task runner.

Threads are underrated.

Everyone reaches for asyncio. But when your workers live inside subprocess.wait(), the GIL is already released — a plain ThreadPoolExecutor gave real parallelism for a fraction of the complexity.

A status enum is a design.

The whole product lives or dies on WAIVED and SKIPPED being distinct from PASS and FAIL. Getting those four states right — and how they flow through the diff — was 80% of the actual thinking.

Killing a process is harder than starting one.

A shell wrapper dying while its child simulator lives on is a classic infra bug. Process groups, a grace period, then a hard kill — and making that portable across POSIX and Windows — took more care than the happy path.

Scope discipline is a feature.

No plugins, no async, no web server in the core. Saying no to good ideas kept it small enough to actually read — which, for a study project, was the entire point.

Have an idea? Let's talk.

Want to build something — or break
something interesting?

Freelance, full-time, or a "hey does this approach make sense" DM — all welcome. Fastest path is a call; the form works too.

Opens your mail client with the message pre-filled — no tracking, no server.