Protection caseworkers in the Lake Chad Basin spend hours turning survivor interviews into case forms. A voice agent could help, but one that fills gaps is dangerous. An invented statement like “her passport was confiscated” can become a trafficking indicator in a legal-adjacent record. With Reticent AI, the caseworker debriefs the agent after the interview. The agent never speaks to the survivor. It asks about missing fields and proposes values through JSON Schema tool calls on the AssemblyAI Voice Agent API. Only a deterministic case engine can write to the record. Every saved field must be: Grounded: A quote from the caseworker’s transcript must support the exact value. “From Niger” cannot support “Nigeria.” Read back: Code verifies that the agent said the value aloud. It is saved only after a clear yes. A no rejects it, while “maybe” triggers another question. Attributed: Every fact is labeled as survivor-reported, caseworker-observed, document-seen, or caseworker inference. If the caseworker says “I think,” code records it as inference, regardless of the model’s label. An impression may trigger protection, but never counts as evidence. Gated: Palermo Act, Means, and Purpose indicators are determined by code and cite supporting quotes. High-risk, urgent, and child cases require supervisor review. Across four synthetic scenarios, all 62 engine decisions matched expectations. An adversarial run blocked 13 unsafe shortcuts, including invented quotes, wrong values, premature confirmation, and personal data. All 14 unit tests passed. Recognition key terms contain no answer values, keeping the transcript independent of expected answers. The agent does not judge credibility from hesitation or tone, store names, or determine whether trafficking occurred. It uses synthetic data and supports English and French only. built by team TRACE, third place (Call for Code AI: United Against Trafficking) and first place (Open Atlas 2026 Hackathon and AI x City Hackathon26
Category tags: