Context Propagation in Android AI Agents: Resolving Device State Before Action Dispatch A developer built StareBrain's context propagation layer for Android AI agents, resolving device state (calendar events, saved locations, recent contacts, notifications) into action parameters at intent-parse time rather than dispatch time. Each parameter is assigned a confidence level — HIGH auto-fills silently, MEDIUM surfaces a suggestion, and LOW or UNRESOLVABLE prompts the user — so the agent avoids both asking for information the phone already has and silently filling in details it only partially knows. The snapshot approach is designed to prevent contacts or events changed after the user spoke from producing unapproved parameters. An AI agent on a phone has access to something a server-side agent doesn’t: the device itself. Calendar events, saved locations, recent contacts, active notifications — all of it is locally available before any network call is made. The question isn’t whether to use that context. It’s how to resolve it into action parameters without asking the user for information the phone already has, and without silently filling in details the phone only partially knows. This post covers the context propagation layer in StareBrain — how device state gets resolved into action parameters, how confidence thresholds decide when to auto-fill vs. suggest vs. ask, and what happens when resolution fails. When a user says “book a slot for my dentist appointment,” the agent needs to resolve: Some of these can be resolved from device state with high confidence. Others can be suggested. Others need to be asked explicitly. Collapsing all of them into a single “ask the user for everything” flow is safe but slow. Auto-filling everything without surfacing uncertainty is fast but fragile. The resolution layer sits between intent parsing and action dispatch, and its job is to decide which parameters fall into which bucket. data class DeviceContext val upcomingEvents: List