Case Study
True Cover Agent
An AI agent that plans field work to close gaps in coverage, and knows when to involve people.
Quick Take
Objective
Health programs miss the households they never counted. A survey, a vaccination campaign or a spraying round has limited teams, days and supplies, and someone has to decide which doors they knock on.
Execution
Extended True Cover, a coverage algorithm from Ona and UCSF, into a larger program in 2020, then reconstructed it in 2025 as an agent that plans field rounds and prices every trade-off.
Results
An undeployed concept, and a guideline for AI agent design: the agent makes recommendations with the right context, then a person makes the decision.
I
Problem
Health programs run on coverage: the share of children vaccinated, or of households given bednets or sprayed against malaria. A district that vaccinates 900 of 1,000 children reports 90%, but if 1,100 children actually live there, it is 82%. The missing children live in the communities nobody counted, which makes them high risk.
True Cover started in 2019 when Ona worked with UNICEF and UCSF epidemiologists for measles and immunization coverage: satellite imagery can supply the household list. A model finds rooftops, health workers visit a sample, and True Cover predicts coverage everywhere, then sends teams where it is least confident.
Back then, we did planning using an algorithm and computer vision. In 2025, my work was extending it into a larger program. I worked on a concept for planning with an agent, now a working prototype. The agent drafts a plan in seconds, and that speed created a design problem: something an agent produces looks polished, but that doesn't mean it is correct.
II
Approach
A chat beside a map
I designed a UI to be a conversation between the program manager and the agent, with important context and course correction at vital steps. The agent works the same way for any round: it reads the structures from imagery, groups them into areas, ranks the areas by need, and fits the plan to the teams, days and supplies available. The prototype's example is an indoor residual spraying round for malaria in Namialo, Mozambique. Spraying only protects an area when most of its houses are treated, so the agent has to choose fewer areas and cover them well. A measles survey or a bednet distribution changes the unit of work and the target, not the flow.
For the concept, the program manager types a request in plain language such as “IRS round for Namialo. Four squads, seven days, 220 bottles of pirimiphos-methyl.” The agent shows a map of the 1,840 structures it found in 115 spray areas, and proposes 24 areas that fit the insecticide and leave a day for mop-up. I designed for the moments when the agent stops drafting and waits on a decision from the program manager.
Asking which boundary is correct
The program manager replies “24, keep the mop-up day. But skip the flood areas.” The agent has two boundaries that could mean that: the north bank of the Monapo river drops 228 structures, and the mapped 2019 flood extent drops 311. The agent asks which one should be used since it's a method question, and previews each option on the map.

Showing the work
A program manager who signs off on a plan needs to see how the agent built it. So, while the agent builds the plan, it lists each step: structures read, last season's cases joined, areas ranked. A Stop button sits beside the list, and a user can keep asking questions while it works.

Getting help from a human
There are some calls the agent may assign low confidence. In the example, the agent proposes a plan with caveats: five roofs from the imagery are low confidence. Each one opens the satellite tile, the reasons the model doubted it, and three calls: keep, remove, or send it to the squad leader. When the program manager removes a roof, the agent reevaluates the plan.

Showing the cost of a request
The user asks whether the squads can spray the whole locality. The agent shows the arithmetic: 1,612 structures at 64 a day takes 26 spray days, and 806 bottles against 220 in stock. So it can offer alternative plans if the program manager is willing to increase days or change other variables. Whatever the plan, work spread too thin can't protect or measure anything.

A person signs off
The agent can't approve a plan. The program manager's approval locks plan 4, revision 5, and records their name and the time against it. Any later change starts a new revision that needs approving again.

The plan becomes squad-weeks
Once approved, the agent splits the 24 spray areas into four squad-weeks from the Namialo health centre, six areas each, one a day from Monday to Saturday. Locked and absent houses go on a mop-up list for the following Monday.

Staffing the squads
Supervisors put eight spray operators on four squads. The roster shows the languages each person speaks, since every household has to agree before anyone sprays. Auto-assign fills the empty slots, pairs Emakhuwa speakers with the squads whose areas need them, and explains what it did.

On a spray operator's phone
The field app follows a spray operator on Squad 1. Before leaving, the operator sees today's plan: 16 structures with 14 needed for 85%. At each structure, the app asks whether people sleep there, because the roof model found it from satellite imagery and nobody has checked it on the ground.

Correcting the map offline
When the operator removes a household, the area's target updates to 13 of 15. The app says how many more refusals the area can take before it falls short. Every result waits in a queue until the phone finds signal, and each correction goes back to the planner. That is the loop True Cover started with: what teams find in the field updates the model, and the next round goes where it is least sure.

Click through the whole flow
The prototype runs from the first request to the plan landing on a spray operator's phone.
III
Outcome
WHAT THE CONCEPT PRODUCED
SCALE1,840 → 384Structures read from satellite imagery, narrowed to the 24 spray areas four squads can cover in a week in the example round | HAND-BACKS4Moments the agent stops: an unclear boundary, doubtful roofs, a request that won't fit, and final approval | PLAN4 squad weeksSix spray areas each, sent offline to squad tablets and phones |
True Cover lost its funding before it gained traction in the field, so the figures above describe the design.
“The assistant never approves the plan. A program manager does.”
Before True Cover: Aleena, 2016
Aleena bot, 2016
In 2016, I designed the flow for a Telegram app bot named Aleena, which captured health data one value per turn and posted them into OpenMRS and OpenSRP. It could only read commands, so the numbered command menu was the whole interface.

Left to right: /start returns the command menu; answered commands show their value in the menu; a vaccination ID brings back the child’s vaccine card.
Aleena bot, 2026
In 2026, I redesigned the same visit with a language model doing the parsing. The health worker types “last Tuesday” and Aleena reads it as Tuesday, 13 October 2026. One message fills four fields and a progress message shows what is still needed. It was fun to look at what changed and what stayed the same, but it still used the same principle of narrowing what the system must decide to the goal of the session.

Left to right: one message fills the whole visit; a reading that can’t be right for 28 weeks is checked once; a treatment question goes to the clinician with her blood pressure history. Try the 2026 prototype.
What I Learned
Drafting a plan is the part a model does well, whatever the round is for, though the agent needs to be stopped so the method can match the goals. I've learned designing an agent means listing the decisions a person should be involved in and focusing on those screens first.
Team
2 epidemiologists, 1 account manager, 1 ML tech lead
Role
Product Designer
Expertise
AI / Concept / Design
Highlight
An agent that displays the tradeoffs and waits for signoff.
