Meet Your Assistant Where You Already Are
For most knowledge workers, Microsoft Teams is the default. It's where chat happens, where meetings live, where files surface. Asking people to jump out of Teams into a separate tab to talk to their AI assistant is a small tax — but a real one, paid over and over throughout the day.
So we stopped asking. hiroi now runs as a first-class Microsoft Teams app. Same assistant, same calendar and email integrations, same knowledge base — but inside the Teams sidebar, one-on-one chat, or @-mentioned in a channel. The assistant you've configured on your website is now also the assistant you can message at 9:02 AM to ask "What's my day look like?"
Here's what shipped.
One-on-One and Channel Messaging
Start a direct message with the agent and it behaves like any other chat — text in, assistant response out. Same LLM, same grounding, same persona. The Teams conversation is a full-fledged channel for your PA.
In group chats and channels, the agent only responds when it's explicitly @-mentioned. That's by design. An agent that fires off on every message in a 50-person channel is a recipe for muted notifications and an uninstall within a week. We let the agent observe silently and only engage when someone actually wants it.
Calendar, Inline
The most immediate win is calendar. Once you've signed in, you can ask the agent things like:
- "What's on my calendar tomorrow?"
- "Find my 1:1 with Jamie this week."
- "Am I free Thursday afternoon?"
The agent searches your calendar with the same Microsoft Graph access it uses in the web dashboard. Results come back as Adaptive Cards — interactive cards inside Teams with fields, links, and buttons that actually do things.
Event Details With One-Tap Actions
When the agent shows you an event, it doesn't just list the details. The event card includes:
- A Join button that opens the Teams meeting directly.
- Accept / Tentative / Decline buttons that RSVP on your behalf.
- The event body, attendee list, and relevant links.
Tapping Accept fires a respond_to_event tool call, sends the RSVP through Graph, and the card updates in place. No context switching, no opening Outlook, no second consent screen. The workflow lives where the conversation already is.
Keyword Calendar Search
Beyond "what's next" questions, the agent supports keyword search across your events. "Find the strategy review Alex invited me to last month" works — search_my_calendar combs through your event titles, bodies, and attendee lists to surface the right one. This is the kind of search that's always been technically possible through Outlook but nobody uses, because opening the advanced search dialog is more work than just scrolling.
Email From the Sidebar
The same integration that powers calendar also powers email. You can ask the agent to:
- Read recent emails from a specific sender.
- Summarize your unread inbox.
- Draft a reply and send it on your behalf.
Email drafting is interactive — the agent shows you a draft, you can iterate in chat ("make it shorter," "mention the Q2 deadline"), and you approve the send with a button press. The agent never sends silently. Human in the loop, every time.
OneDrive and SharePoint File Search
Your files live across OneDrive, SharePoint sites, and shared Teams. Finding anything usually means jumping through three or four search bars. The agent collapses that into a single question:
"Find the Q1 pricing deck."
The agent searches across your accessible OneDrive and SharePoint stores through Graph, ranks the results, and returns links you can click to open. It also surfaces recent files if you just want to know what you were working on yesterday.
Proactive Messages and Reminders
Not every assistant interaction is user-initiated. Your PA also sends proactive messages — the agent can ping you in Teams when something happens: a meeting is about to start, a follow-up you asked it to track has come due, a campaign finished running. Proactive messaging runs on persisted conversation references, so the agent can reach you even after a container restart or across replicas.
This is the difference between "a place to ask questions" and "an assistant that actually notices things." The Teams agent is the natural surface for both.
Signing In (And Staying Signed In)
The Teams agent uses a sign-in card to authorize your Microsoft account for calendar, email, and file access. The flow takes about fifteen seconds the first time: tap the card, approve the scopes in a browser tab, and the tab auto-closes when you're done. From that point on, the agent has acting-user tokens cached and refreshed automatically.
A few things worth calling out for anyone deploying this at scale:
- Tokens persist across replicas and container restarts — you don't lose your session when the underlying infrastructure cycles.
- 401 recovery is clean. If a token goes stale mid-conversation, the agent invalidates it, surfaces a friendly re-auth prompt, and picks up where you left off. No mystery error messages.
- Sign-in card cooldowns — the agent won't spam you with auth prompts if you dismiss them. Dismissing once quiets the prompt for a sensible window.
- Nightly token pruning — stale, expired, or orphaned tokens get cleaned up on a schedule, so the token store stays small and predictable.
Bot Framework JWTs on inbound activities are verified against Microsoft's public keys before the agent processes anything. You cannot spoof messages into the agent without a valid signed token.
Booked Meetings Get a Teams Join Link
A small detail that matters a lot: when the assistant books a meeting on your behalf — whether through the web widget, a phone call, or directly in the Teams agent — the resulting calendar event includes a Teams meeting link by default. No separate Teams meeting creation step. The calendar event is the meeting.
For anyone who has ever scheduled a call and then scrambled five minutes beforehand to figure out the join URL, this is a small quality-of-life improvement that pays back every single meeting.
Usage Analytics
For IT and admin teams, the new Teams Usage tile on the analytics dashboard shows monthly active users and the top individual users of the agent. This is backed by /api/analytics/teams-usage — the same endpoint powers the tile and any custom dashboard you want to wire up.
MAU tracking matters because Teams agents scale differently than web widgets. You want to know which teams actually adopt the agent, which are dormant, and whether a new feature moved the needle.
Packaging the App for Your Tenant
Installing the agent in your own tenant takes one CLI command:
flask package-teams-app
This bundles the manifest, icons, and branding into a Teams-compatible zip. Drop it into Teams Admin Center, approve it for your org, and users can add the agent from the app store. No Developer Portal sprinkling, no manual icon uploads.
The Point
You should not have to train your team to use a new tool for every capability you add to your assistant. The assistant should show up in the tools your team already uses.
The hiroi Teams agent is available now on any plan that includes the PA features. Install the app, sign in, and ask it what your week looks like. If you've already invested in configuring your assistant for your business, Teams is just another channel where it now works.
Add hiroi to Teams from your dashboard, or message your IT admin for the packaged app zip.