A consumer health application where AI reads personal health data and gives people guidance about it. Agile Labs tested what the AI could be made to do, then engineered the controls that closed each confirmed finding, and left the attacks behind as tests that run on every release.
UltHealth holds the data people are least willing to have exposed: sleep, weight, resting heart rate, nutrition, medication habits and the notes they write about how they feel. The AI features read that record and produce guidance from it.
Two properties make that combination worth testing rather than assuming. The model reads content the user supplies, including free-text notes and uploaded material, which is untrusted input arriving in the same channel as the application’s own instructions. And the assistant reaches a private data store on the user’s behalf, which means the question is not only what it says but what it can be made to retrieve and where that could go.
Testing that ends at a report leaves the client to arrange their own remediation and to assert their own closure. Here the testing and the engineering ran as one loop, and every confirmed attack finished as a test in the client’s pipeline.
Automated probes set the floor. Engineers then worked the paths a scanner cannot reach: instructions planted in user-supplied content, retrieval behaviour, and what the assistant could be persuaded to fetch.
An attack that worked once is an anecdote. Each candidate was repeated to establish how often it succeeded, and only reproducible cases were reported.
Why the system allowed it: what the model could reach, which instruction it treated as authoritative, and which check was missing rather than which phrase got through.
The fix addressed the cause rather than the phrasing: what the assistant may reach, what it may do without a person, and where the boundary between user content and instruction sits.
The same attack, the same number of attempts, against the changed system. A finding is closed when the attack fails, not when a ticket does.
The attack becomes an assertion in the client’s own pipeline, with the expected outcome recorded.
The suite runs on each deploy, so a prompt edit or a model change that reopens the finding fails the build rather than reaching users.
Free-text notes, logged meals and uploaded material are read by the model later. Each is a place an instruction can be planted, and none of them looks like an attack when it is written.
The assistant reads a private health record on the user’s behalf. The test is whether it can be made to retrieve or reveal more than that user’s own data.
Any outbound path — a link, a share, an integration, a connected device — turns a retrieval problem into an exfiltration problem, so the paths were enumerated before the attacks were written.
Health guidance carries consequences. Testing covered whether the assistant could be pushed into advice it should decline, and whether it declined the things it should.
Every confirmed finding carries the attack, the transcript, how often it succeeded, the severity and the fix. Each was re-tested after remediation and recorded as closed on a date rather than assumed to be.
What UltHealth holds now is a changed system and the evidence that it changed: controls in the product, a regression suite in the pipeline, and a report that a customer, an investor or a regulator can read without taking the claim on trust.
AI Red Teaming → Secure AI Engineering →See what happens when an AI agent is attacked, fixed and tested again.