Open to AI engineering roles

I build AI systems.Then I measure them.

Agent pipelines that ship bespoke products overnight, LLM-driven generation for a game whose file format had to be cracked first, and the tooling I use to run a fleet of coding agents. Below: how each one works, the numbers, and what broke.

Read the case studies
bespoke demos built by an agent pipeline
89
checks every demo passes before it ships
20
game pieces mined so Claude could generate playable maps
16,465
model tiers in my open-source agent hierarchy
4
§1

Case studies

Three systems, written up the way I'd want to read them: the problem, how it's built, what the numbers say and what didn't work.

Case 01 · Agents in production

An agent pipeline that builds a different product demo for every company, overnight

For outreach to US small businesses I wanted each prospect to get something built for them, not a template with their logo on it. Codex reads the company's real website and invents a product for it, Claude builds it on a shared engine, and an audit script decides what ships.

When
Aug–Sep 2026 · 3 batches
Stack
Codex, Claude Code, Anthropic API, Next.js, Vercel, Playwright
Role
Solo: spec, orchestration, QA and deploy
Status
89 demos live behind a private gallery
bespoke demos live, across 12 US cities
89
demos from one unattended batch
~20 in 3 h
required artifacts audited per demo before deploy
20
prospect emails verified on the official site (batches 2 and 3)
79 / 80

Problem

Generic cold outreach gets ignored. A demo built from a business's own website, services and brand gets read, but building 89 of them by hand isn't possible.

How it works

  1. 1.Wrote the contract the agents work against: what to research, which files to produce and hard rules. Brand colors are read from the site's CSS, never guessed. If text contrast falls below 4.5:1, the text color changes, never the brand.
  2. 2.Phase A, Codex: reads the site, downloads first-party assets, writes the data and design specs, invents a product for that business and renders a 1440 px mockup.
  3. 3.Phase B, Claude: builds the components from the mockup, one at a time, on a shared engine.
  4. 4.Every demo has a live assistant: streaming responses from Claude with the system prompt cached and a fallback model.
  5. 5.An audit script checks 20 required files, 4 QA screenshots, valid JSON, no hotlinked assets, that the email links the demo, the registry entries and the preview image. Then a typecheck, then deploy.
Pipeline
  1. Research

    Codex reads the real site, CSS and assets

  2. Product spec + mockup

    a different product for each business

  3. Build

    Claude, component by component

  4. Auditgate

    20 files, 4 QA shots, links, preview image

  5. Typecheckgate

    tsc --noEmit before every deploy

  6. Deploy

    Vercel, served at /<company> via a proxy allowlist

What broke, and what I did about it

  • Codex never ran the type checker. One broken demo took down the build of all 40 in the first batch, so a typecheck became a gate before every deploy.
  • Its "HTTP 200" checks ran against isolated per-demo dev servers, and it never looked at the render. Visual QA moved to screenshots that I review.
  • The outreach emails came out as one template ×78: same opening, same disclaimers, same ask. I rewrote all 78 against a style guide written from that failure.
  • One demo was written against a different data schema. Fixing it would have meant inventing facts about a real company, so it stayed out of the deploy.

Case 02 · LLM-driven generation

Claude designs Golf It maps that the game actually loads

Golf It has no documented map format. I had Claude Code reverse-engineer the save file, mine the game's own data and write each course as code. The game loads the maps, re-saves them, and they get played.

When
Aug 2026 · 2 days
Stack
Claude Code, Python, Unreal save tooling (uesave, repak, umodel)
Role
Solo, directing Claude Code
Status
Working generator. The MCP server is next
pieces in a catalog extracted from the game's own asset registry
16,465
community maps parsed to learn how 2,224 assets are really used
86
save-file round trip, byte for byte (same SHA-256)
1:1
pieces in the 18-hole course, across three versions
411 → 670

Problem

Generating content for a game you don't control means working blind: an undocumented binary format, thousands of pieces with no specs and rules nobody wrote down. A model that only guesses produces maps that don't load or can't be played.

How it works

  1. 1.Decoded the Unreal save file to JSON and back, and proved the round trip byte for byte before generating anything. The voxel terrain is carried through untouched.
  2. 2.Extracted a catalog of 16,465 pieces from the game's asset registry and exported meshes to glTF, so sizes are measured, not guessed.
  3. 3.Mined 86 community maps for how pieces are actually used. Ambiguous rules were settled with data: which way a boost pushes was decided 7 to 2 by real maps.
  4. 4.Claude writes each course as a generator in a small cursor language (place, turn, climb), so a map is code that can be diffed and fixed.
  5. 5.Validators check every generated map before it reaches the game. Then the game itself loads it and saves it again.
Pipeline
  1. Decode the save filegate

    round trip byte for byte, same SHA-256

  2. Catalog

    16,465 pieces, meshes measured in glTF

  3. Usage stats

    86 community maps, 2,224 assets in use

  4. Generate

    Claude writes the course as generator code

  5. Validategate

    scripted checks on every map

  6. Load in gamegate

    the game loads, re-saves and plays it

What broke, and what I did about it

  • In v2 a bump placed without rotation blocked the lane. A screenshot from a play test caught it.
  • In v4 a tunnel came out crosswise: what had been measured as its walls were the arches at each end.
  • When moving holes between maps, the goal could land outside the hole's area. Selection now takes every piece tagged with that hole's number.
  • It's still scripts, not an MCP server. That's the next step, so any Claude session can generate and validate a map.

Case 03 · Agent tooling

The tooling I built to run a fleet of coding agents

Most nights several Claude Code and Codex sessions work in parallel. These are the pieces I built to watch them, answer them and approve what they do from my phone, plus the orchestration skill I use on top.

When
Jul–Oct 2026
Stack
Claude Agent SDK, MCP SDK, Node, WebSockets, SSE, Next.js
Role
Solo
Status
In daily use. The Designator is open source (MIT)
ways to answer an agent: terminal, phone (Torre) or chat (Claude-Discord)
3
model tiers in The Designator, down to local models at zero cost
4
end-to-end browser test suites for Claude-Discord
5
approval queue for every session, terminal or phone
1

Problem

Agents running unattended stop to ask for permission, finish with questions, or go off track, and I'm not always at the computer. I needed to see every session, answer it and approve its actions from anywhere, without breaking the sessions running in my terminals.

How it works

  1. 1.Torre: a control tower that tails every Claude Code transcript and streams it to my phone. To take over a session it resumes it through the Claude Agent SDK, and every tool call waits in canUseTool until I tap allow, always, deny or stop.
  2. 2.Sessions that stay in the terminal reach the same approval queue through PermissionRequest, Notification and Stop hooks, with notifications over Telegram or ntfy.
  3. 3.Claude-Discord: an MCP server that uses Claude Code channels, so each terminal gets its own channel in a Discord-style chat. Messages arrive as channel notifications and permission requests come back as Allow or Deny. It also tracks spend per day and flags collisions between terminals.
  4. 4.The Designator: a Claude Code skill that designs its own agent hierarchy from one objective. 2 to 4 levels, a mapping.json as the single source of truth, a capability check before each task, and one model tier per agent.
Torre: approval flow
  1. Index sessions

    tails the transcripts every 600 ms

  2. Stream to phone

    SSE, installable PWA, PIN

  3. Take control

    Agent SDK query() resumes the session

  4. Permissiongate

    canUseTool waits for my answer on the phone

  5. Terminal sessions

    hooks feed the same approval queue

  6. Notify

    Telegram buttons or ntfy

What broke, and what I did about it

  • Taking over a session that's still open in a terminal starts a second process on the same conversation. Torre now asks for confirmation if it saw activity in the last minute.
  • A hook that waits on Torre would freeze every terminal while Torre is down. The bridge exits cleanly on any failure, so the terminal falls back to its own prompt.
  • The Designator is early: the architecture works in real use, but it has no benchmark yet. That's the next thing it needs.
§2

Other systems

Smaller builds, each with an AI or systems angle. Most are private; the public ones have a link.

Hoy JuegoPicks tonight's game from your Steam library. Rules score about 14 candidates, Claude Haiku picks one and returns JSON that's validated against the list, and the rules take over if the model fails.Claude Haiku 4.5, Steam Web API, Vercel Functionsin use
Copy for my AIA browser extension: one button exports your Steam library to hand it to an AI. Then I took it to Netflix, Spotify, Instagram and YouTube.Browser extensionworks
bloatctlAn Android app that lets Claude decide what to remove from my phone. 586 → 545 packages.Kotlin, Shizukuworks
Typed mini-languageParser to AST, type checker, bytecode compiler and a stack VM. Built for a challenge about low-level work.Pythondone
Artificial evolutionBodies and brains that evolve in a physics simulation, with a 3D viewer.MuJoCo, Three.jsexperiment
Hand trackingDetects my hands and puts them into a 3D scene to grab objects. Groundwork for VR games.Computer vision, 3Din progress
Client workA real-time matching platform, a sales dashboard over two years of invoices and an operations panel wired to Trello. Details under NDA.React, Next.js, Supabase, Pythondelivered
Arcade94 browser games built by parallel Claude Code sessions sharing one repo, coordinated by folder locks and a machine-wide semaphore for browsers and builds. My favorite is El Hornero.TypeScript, Three.js, Playwrightprivate
§3

How I work

At night I leave Claude Code and Codex sessions working and review in the morning. A master session summarizes them, routes the work and acts as judge. My job is the spec, the gates and reading the results.

~/night-shift6 running
  1. instance 01 · golfit1/3

    decoding the save file

  2. instance 02 · outreach2/3

    building a demo just for it

  3. instance 03 · designator3/3

    creating the missing agent

  4. instance 04 · arcade3/3

    94 games

  5. instance 05 · bloatctl1/3

    listing the phone's packages

  6. instance 06 · master2/3

    routing tasks

Principles

  • 01

    Measure, then claim

    Write the rule before the run. If the result is negative, it gets published too.

  • 02

    Gates over trust

    Agents say "done" too early. Typecheck, audits and screenshots decide what ships, not the agent's report.

  • 03

    No templates

    If something is for someone, it's entirely for them. Not a template with the data swapped.

  • 04

    Exportable

    Every page should have a button to hand it to your AI. This one does.

Toolbox

Agents & models
Claude Code, Claude Agent SDK, Anthropic API, MCP, Codex, Gemini, gpt-image, ElevenLabs
ML
Python, PyTorch, MuJoCo
Product
TypeScript, React, Next.js, Node, Postgres (Neon, Supabase)
Infra & QA
Vercel, my own Linux VPS, Playwright, WebSockets, SSE
§4

About

I'm Rodrigo, an Argentinian developer living in Seville, Spain. I moved from Argentina in 2021. Python was my first language and I learned it on my own. Games got me into programming, and they're still where I test ideas.

Since 2026 I build custom software for clients, from real-time platforms to dashboards. The rest of my time goes into the systems on this page.

What I'm looking for

An AI engineering or forward-deployed role: sitting with the people who do the work, building the system that removes the bottleneck, and measuring that it did. Remote or in Spain. Also open to freelance.

Timeline

  1. 2021Moved from Argentina to Spain.
  2. 2026First freelance clients.
  3. Jul 2026Open-sourced The Designator.
  4. Aug 2026Golf It map generator. Built the demo pipeline. Launched this site; it ranked first on Google for my name within 20 hours.
  5. Sep 2026The arcade passes 90 games, built by parallel Claude Code sessions sharing one repo.
  6. Oct 2026Claude-Discord: every terminal gets its own chat channel.
§5

Let’s talk

If you're hiring for AI engineering, or you have a process that should be a system, write to me. I read everything.

rodrisiboldi@gmail.com

Elsewhere

Copy all of this, paste it into your AI and ask it whatever you want about me.