typed outputs
Every subagent fan-out defines a JSON schema and the harness retries until the output validates, so orchestration is always consuming typed data.
ai engineer · redondo beach, ca
I am an AI Innovation Engineer at Planet DDS, working in Team Artemis, our AI innovation lab. New products start there, so I can build the whole lifecycle without legacy constraints and measure it honestly, with people keeping the decisions and approvals at a few named gates. I work in language, so what I engineer are the prompts, workflows, and contracts the agents run under, and I leave training models to others. Then I carry what held up to the rest of engineering through an org-wide AI SDLC repository, which holds the context an engineer needs to adopt the pipeline and tailor it to their own stack, and through my talks.
On the largest feature so far, a 42-minute prototype walkthrough became 351 requirements and a dependency-wired ticket graph, and agent lanes merged 75 tickets in 30 waves over about four days, with a human approving every merge. See my production engineering results or how it works.
Every stage of the AI SDLC is a prompt I engineered. Someone can arrive with a production incident, a designer's prototype, a feature request, or a security question and ask our context-ask workflow how to proceed. The repository provides the context and the established workflows, so the answer comes out of the specs, the learnings, and the code that are already there, and the work is routed into the pipeline below.
The work arrives as a prototype, a Figma file, a ticket, a production incident, a security question, a meeting transcript, or a freeform prompt, and the front door I built routes it. Small work takes a single lane to a PR and big features take the spec funnel.
Parallel readers map the request against the shipped specs and the code, and they author requirements with permanent IDs before any code is written. The spec is then minted into thin tickets wired by blocked-by edges, so the loop can compute what is ready.
I make every plan survive a 5-lens reviewer panel before it runs. Then file-isolated agent teams build each ticket, and parallel lanes drain the ticket graph in dependency order.
I derive the test cases before any code exists, under the same rules QA uses after merge, and anything underspecified becomes a line a human rules on. After the build the lead re-runs every gate, drives the live app in a browser, and reads the database for ground truth.
The deploy stage works as an AI release engineer. I wrote it to read live production state first and build a go/no-go card from it, including a rollback answer with a named owner. On a green card it queues the pipelines, and a named human approves the gate every time, because the agent has no approve path at all.
After the deploy it checks the live revisions and migrations against values written down ahead of time. Then it reads the error logs every ten minutes while people test, and every new error signature becomes a row for a human to look at.
Learnings are captured before ship and applied automatically by future planning runs. Every run leaves code, specs, learnings, e2e tests, and a test-case ledger in the repository, and that is how the context concentrates there for the next person or agent who asks.
watch the whole loop run: the lane, the intake funnel, the drain replay, and the deploy →
I treat the prompts the way a team treats its code. They are versioned in the repository, and they run under contracts that make a multi-agent system something you can debug.
Every subagent fan-out defines a JSON schema and the harness retries until the output validates, so orchestration is always consuming typed data.
Spawn caps, a 3-strike rule keyed on root cause, and broken-baseline hard stops mean a run halts and escalates when it stops making progress.
Each requirement has a permanent, immutable ID, so an agent can go read the behavior it is building and a test can cite the row it proves.
Autonomy runs from L0 (assisted) to L3 (auto-merge), and heavy-risk changes such as migrations, auth, money, and sensitive data always cap at human-merge.
read the full method: nine principles and the five artifacts →
Production work at Planet DDS, written up in terms that travel outside the company that paid for it. Over nine months on a HIPAA-covered product, the three repositories this pipeline works in have merged 3,143 pull requests, and the repository now holds 2,087 live requirement rows and 859 learning files that every run reads before it plans.
This was the second full run of the pipeline, in August. A teammate walked me through his prototype for 42 minutes on an engineering sync, and I saved the transcript on purpose as spec input. Thirteen autonomous readers extracted 511 requirement candidates from it in about 25 minutes, I ruled the scope at two designed gates, and by the time the drain started the spec held 351 requirements and the dependency graph held 73 tickets.
Agent lanes then drained it in 30 waves over a little more than four days, two lanes at first and three from wave 13, merging 17 to 19 tickets a day through a model-provider outage and two nights where my machine went to sleep. I approved all 75 merges myself. The first run, a 45-ticket epic in July, is the one I presented publicly as "Agentic Loops and Graphs", and a third project began adopting the pipeline before this one had finished.
That epic drained clean with every lane green, and then QA reopened 37% of its tickets, 35 of the 93 it had grown to by then, which was a real disappointment. A fix drain over those 35 came back at 37% again, and that is what sent me looking upstream. When I traced the findings back, about half of them were spec gaps and rulings rather than code defects, so I pulled QA's test-case derivation left of the build, and now the implementer, the verifier, and QA all execute from one ledger. I re-ran the derivation blind against seven reopened tickets with their inputs frozen, and it reproduced the later QA finding on all seven. The re-open rate since has been about 15%, and on stage in September I promised 18% or lower on the next full drain and said what result would prove me wrong.
Until September a deploy here was a person at a keyboard with a checklist in their head. I wrote the deploy command by encoding what I had improvised by hand during one release night, and it shipped on September 14. It reads production first, derives the delta of pull requests, tickets, and migrations since the last green run, and prints a go/no-go card. On the first live window the card came back NO-GO on two checks, which was the system working, because it had named the two things only I could rule on. I typed my rulings in words, they were stored on the card with my name, and every production write still waited for a named human.
On September 18 one window shipped three products in 50 minutes with all four pipelines green, and the order mattered, because two of the products publish contracts that the third one's new endpoints consume, so its backend went first and everything else ran in parallel. The command verified by re-reading production, soaked the error logs every ten minutes while people tested, and compiled release notes that list all 58 tickets with their pull requests and authors, which I did not write by hand. Two of that night's approvals and their log watch were still done by hand, and they are rows in the ledger now, so the next window records them from the start. Each release leaves a ledger in git that the agent, the testers, and the log monitor all write to.
read the full case studies and explore the 75-ticket drain graph →
An enterprise SDLC has to fit the enterprise it runs in, which means its regulatory requirements, its non-functional requirements, its stack, and the way its teams already write code. I build the pipeline so that it reads all of those from the repository.
I ran a STRIDE threat model on a healthcare AI product and promoted its findings into three living spec catalogs: a security baseline, a HIPAA overlay that expresses the technical safeguards as engineering controls, and a PHI-handling catalog. The pipeline checks them at its review gates, and the gaps in our live posture became a requirement-cited backlog the agents can drain.
I put the team's stack into the repository so the agents can learn it there. Architecture, service boundaries, and the asymmetries that bite in production live in CLAUDE.md files, skills, and the learnings catalog, and the agents verify their work against the team's real running app and real database.
A team's conventions become rules files, hooks, and review lenses, so they are consulted while the code is being written and checked again at review. When I have to correct an agent twice, that correction becomes a persistent rule and the next run starts with it.
I want to be modest about how far this has been proven. So far it is one company, one stack, and one regulatory regime, which is HIPAA. My evidence that the patterns travel is a survey I did of another team's prompt suite, about 6,800 lines with 21 slash commands, where five patterns carried over and were adopted into a different team's greenfield codebase. Since then I have templatized the pipeline in an org-wide repository so that teams on other stacks can adopt it, and I will know more about how well it travels as the company's established products take it up. The specs, the learnings, and the ledgers are all plain files in git, so the context belongs to the team that owns the repository.
Talks at the Irvine AI meetup, where I am one of the hosts, held at Planet DDS headquarters. The field reports track the same arc as the work itself, running from prompt engineering to context engineering to loop and graph engineering, and in September to the whole loop, from intake through the production deploy. At the September meetup I also gave a second, lighter talk ranking the month's frontier AI news by how much it changes the work we do as engineers.

A live demonstration of Compound Learnings, which is the recursively self-improving part of the prompt pipeline. The learnings are captured before ship and then applied automatically by future planning runs, so the debugging from one session becomes the head start for the next one.
How to get from fuzzy inputs to versioned functional requirements, and how to treat end-to-end tests as first-class artifacts that live in the repo instead of as an afterthought. This is the talk where I make the case that a requirement catalog should be infrastructure rather than documentation.
Prototype to specification to dependency graph to agent-executed tickets, walking the full drain from end to end. This is the talk about the first full run of the pipeline, a 45-ticket epic in July, which the case studies pick up from, and it covers how much engineering it actually takes to let agents ship production software, and where a human still has to decide.
The third field report, and the first one that reaches production. I walked the loop one level at a time, from the single-ticket lane to the intake funnel to the 75-ticket drain, and then to the part I am most excited about, which is the deploy command working as an AI release engineer. It reads production, prints a go/no-go card for a named human to rule on, runs the pipelines, verifies by re-reading production, and watches the logs while people test. I also showed how a 37% QA re-open rate traced back to the spec, and made a public promise of 18% or lower on the next drain.
A countdown of the ten AI events between our August and September meetups that I think change the work of engineers the most, with every source on the last slide. My picks included the Opus 5.5 and GPT-6 price cuts, which make cost per decision the number to optimize in an agentic workflow, the sandbox escapes at every frontier lab, which mean an eval sandbox is a production security boundary, and Anthropic's R&D Automation Index at number one, because a monitor in front of every agent action, with everything reviewed again afterward, is the architecture I have been building toward with my own drains and release gates.
// attendance figures are my own estimates rather than gate counts
I work in Team Artemis, the company's AI innovation lab, where new products are built. I designed and I run the agentic SDLC described above on those products, which is 15 compound commands, 6 spec commands, and a deterministic debate engine. Much of the work crossed roles. I lifted QA's test-case rules into the pipeline so the implementer, the verifier, and QA all execute from one ledger, I turned a designer's 42-minute prototype walkthrough into 351 requirements, and I wrote the deploy command that release approvers and testers now work inside. Then I lifted the prompt pipelines out of two product repositories into an org-wide AI SDLC repository, templatized so that an engineer on any tech stack has the context to adopt the pipeline and tailor it, and that repository and my talks are how the approach is reaching the company's established products. I am also one of the hosts of the Irvine AI meetup, which is held at our headquarters.
A cross-platform JUCE plugin for microtonal scale design, and a research harness where an agent runs experiments against a frozen, hash-pinned scorer.
I led full-stack delivery across web and mobile in React, Swift, Kotlin, Node.js, and GraphQL.
I managed full-stack teams shipping financial products, with a lot of attention going to secure auth, PII handling, and revenue tracking.
I led full-stack and mobile development of AT&T's streaming video service, and I led the Innovation Lab, where we built ML prototypes for sentiment analysis.
I shipped the flagship iPad and Apple TV streaming apps and migrated the codebase from Objective-C to Swift.
I am open to Staff AI Engineer roles at AI labs and enterprise engineering teams, and to consulting engagements. I build agent-driven software delivery workflows, including requirements, testing, and release controls.
To start a conversation, email me with your team or organization, the role or problem you have in mind, and the relevant case study. For a project, include the scope and timing you are considering so I have the context for a useful reply.