Give Your MAUI Agent Hands — Contacts, Reminders & Location as AI Tools
A conversational model on its own is, as Allan Ritchie puts it, “a very articulate box with no arms.” The interesting part isn’t the chat — it’s giving the model a small, safe set of things it can actually do on the device. Building on Shiny.Health.Extensions.AI, this post introduces three more device services exposed as AI tools for your .NET MAUI app.
What you’ll learn
- The tool-calling pattern for device services — how a model goes from talking about an action to actually performing it via
IChatClientandAITool - Contacts with
Shiny.Contacts.Extensions.AI— exposesearch_contactsandget_contact, and opt in tocreate_contact,update_contact, anddelete_contact - Reminders with
Shiny.Notifications.Extensions.AI—list_reminders,create_reminder(one-shot or daily), andcancel_reminder, framed the way people actually speak - Location with
Shiny.Locations.Extensions.AI— a read-only tool wiring upget_current_location,get_distance_to, andestimate_travel_time - How the packages compose — concatenate the
.Toolsfrom each and hand the whole pile to a single chat client so one sentence can light up all three services - The safety model — capability builders are an allow-list you control, not an OS permission prompt, so you still request real permissions yourself
Allan is refreshingly honest about the boundaries too: distances are straight-line great-circle estimates, not routed ETAs, and every result carries a note so the model answers “about 4 km as the crow flies” instead of pretending to be a maps provider. Read the full post to see the DI wiring, the real-world prompts each tool handles, and how to safely give your assistant a few hands.