AlphaX Intelligence

Resources | August 13, 2026

How to get your IT team to let you build agentic workflows

The short version

An agentic workflow needs four things, and no more: a trigger, read access to one reference folder, one outbound call to a model API, and write access to one channel. On the recommended route, all of it runs in your cloud, under your identity provider, in your audit log.

Trigger
Read one mailbox. Mail.Read as an application permission scoped to a single mailbox with Exchange RBAC, or gmail.readonly on one dedicated Google account.
Read
One document library. Sites.Selected on one named SharePoint site, or drive.readonly on one shared drive.
Reason
Outbound HTTPS on 443 to api.anthropic.com. No inbound connection, no other egress destination.
Write
One channel. A Slack app with chat:write invited to that channel, or a bot identity on Teams.
  • Cost to your IT team: about two and a half hours. One app registration with scoped consent, one bot or service identity, one container and one secret store.
  • Nothing is installed on anybody’s laptop. No VPN, no domain join, no inbound firewall change, no access to personal files.
  • Blast radius if our credential leaks: one mailbox, one folder, one channel. It cannot read other mailboxes, enumerate your site collections or message anybody directly.
  • The one trap is on Microsoft’s side. Entra grants and Exchange RBAC grants combine as a union. Leave the unscoped Mail.Read grant in place and the scoping does nothing at all. It has to be removed.
  • Removal takes under an hour. The offboarding runbook is handed over on day one, not at the end.

The rest of this page is the detail behind those five lines. Choose your path lets you pick how we work together, and the page then shows only what applies to you. The form at the end tells us what to prepare.

Choose your path

Every engagement runs through the same four phases: scope, access, testing, aftercare. Two choices shape what the phases contain: who hosts the workflow, and whose model API key runs it after go-live. Pick below and the rest of this page shows only what applies to you. The selections sit in this page’s address, so you can copy the link and send your IT team a page that is already set correctly.

Who hosts the workflow?

Phase 1: Scope

Every engagement starts with a scope form we provide. It names the trigger, the systems the workflow touches, and the output, so the start and the end of the workflow are written down before anything is built.

Nothing outside the form gets built, and the testing phase measures against exactly what it says. If the scope needs to grow, it grows through the form.

The worked example

The example used throughout this page is a tender agent we built for a UK construction contractor. It does one thing: when an invitation to tender arrives by email, it works out which of the company’s past proposals are closest to the new opportunity, and posts that shortlist into a chat channel where a bid manager can act on it.

That is five steps:

  1. 1.A tender email lands in one monitored mailbox with a PDF attached.
  2. 2.The worker notices it, downloads the attachment and extracts the text.
  3. 3.A language model pulls out the structured facts, which are the contract value, the key dates, the award weighting and the site constraints.
  4. 4.The worker reads the company's past-proposal library out of one document folder.
  5. 5.It posts a summary into one chat channel, then replies in that same thread with the five closest past proposals, each a link plus a one-line reason, and asks a human which to build on.

From your IT team’s point of view that is four kinds of traffic: one mailbox polled, one document folder read, one outbound HTTPS call to a model API, and one channel written to. Nothing else: no inbound connection, no software on anybody’s laptop, and no access to a user’s personal files. Every workflow we build has those same four parts, so the scope form mostly names which systems fill them.

Phase 2: Access

On this route the workflow runs in your tenant, so access means a short list of scoped grants from your IT team. Everything in this phase is theirs to execute, and it is an afternoon of work, not a project.

The access steps, in order

Your IT team only does steps 3 to 5.

#StepWhoRough duration
1Scope call. We name which of the four capabilities this specific workflow needs, and against which systems.Us1 hour
2You send back the short form at the end of this page.Your IT team1 to 3 days
3Your IT team registers the app identity in your own tenant and grants the scoped consent listed below.Your IT team~1 hour
4Your IT team creates the service account or bot identity, in the cases where one is needed.Your IT team~30 minutes
5Your IT team creates the compute and the secret store in your cloud, and gives us a scoped deploy role on that one resource group or project.Your IT team1 to 2 hours
6We deploy into your tenant and run a read-only smoke test against a test mailbox and a test channel.Us~1 day
7Shadow run against real traffic, with output going to a private channel that only your IT team and the project owner can see.Both3 to 5 days
8Go live. The offboarding runbook is handed over on day one, not at the end.Both-

We shadow run in step 7 because it is the cheapest way to find out whether the agent is useful before anybody depends on it. It also means that by the time your bid team sees the agent, it has already produced a week of correct output.

What we need from your IT team

Which stack do you run?

Everything below this point shows only what applies to your answer.

Access, per capability

The middle column is what we ask for on Microsoft 365 and Teams. The right-hand column is the broader permission that would also work, and that we are deliberately not asking for.

CapabilityMicrosoft 365What we are not asking for
Trigger, read one mailboxMail.Read as an application permission, scoped to a single mailbox with Exchange RBAC for ApplicationsUnscoped tenant-wide Mail.Read or Mail.ReadWrite
Read the reference librarySites.Selected, granted on one named siteSites.Read.All or Files.Read.All
Write to one channelSee “the identity problem” belowTeamwork.Migrate.All, or any permission that reads other channels
ReasonOutbound HTTPS on 443 to api.anthropic.comAny inbound connection, any other egress destination

Scoping the mail permission actually works, but only if the broad grant is removed. Mail.Read as an application permission normally means every mailbox in the tenant, which is not a reasonable thing to ask for. Exchange RBAC for Applications fixes that: your Exchange administrator creates a pointer to the app’s service principal and assigns it the Application Mail.Read role against a resource scope covering only the one mailbox.

New-ServicePrincipal -AppId <app-id> -ObjectId <service-principal-object-id> -DisplayName "Tender Agent"
New-ManagementRoleAssignment -App <service-principal-object-id> -Role "Application Mail.Read" -CustomResourceScope "Tender Agent Mailbox"
Test-ServicePrincipalAuthorization -Identity <service-principal-object-id> -Resource <target-mailbox>

One thing silently defeats the whole exercise. Microsoft’s documentation is explicit that Entra grants and Exchange RBAC grants are combined as a union, so if the unscoped Mail.Read grant is left in place in Entra alongside the scoped RBAC assignment, the result is no effective scoping at all. The unscoped grant has to be removed. Test-ServicePrincipalAuthorization is how you confirm it, and it bypasses the permission cache, which otherwise takes between 30 minutes and 2 hours to catch up.

This feature replaces Application Access Policies. If your team already uses those, the same documentation covers the migration path.

The identity problem

IT teams usually raise this as “so you need an account on our Microsoft tenant?”.

Reading mail and reading files both work app-only, with no user account and nobody’s credentials involved. Posting into a Teams channel does not, and there is no way to make it. Microsoft Graph’s documentation for posting a channel message lists ChannelMessage.Send as a delegated permission only, and the sole application permission in that table is Teamwork.Migrate.All, which is “only supported for migration”. The obvious workaround used to be an incoming webhook, but Office 365 connectors were retired in May 2026, with the rollout beginning on 18 May and completing on 22 May. And the third instinct, a headless sign-in with the device code flow, runs into the fact that security defaults block device code flow outright as one of its basic controls, with all new tenants blocking it from 1 July 2026. Tenants on P1 or P2 licences that use Conditional Access instead are told by Microsoft to get as close as possible to a unilateral block on the same flow.

So there are three real options, and we recommend the first.

  1. 1.An Azure Bot Service identity. The agent posts as a properly named bot, which is what you want if humans are going to read its messages every day. The cost to your IT team is a Teams app package and an administrator approving its upload.
  2. 2.A dedicated licensed service account holding delegated ChannelMessage.Send. Pragmatic and quick, but the agent's messages appear as though sent by that user, and the sign-in flow has to be one your Conditional Access policy actually permits. This is the option that requires a licence.
  3. 3.A Power Automate workflow. Lightest to stand up, and the Teams connector action does work, but messages arrive as "Flow bot" with no custom name or icon, and the HTTP request trigger is very likely a premium capability requiring a paid Power Automate licence. We list it for completeness rather than recommending it.

None of this arises on Slack, because a Slack bot posts as itself by design. If chat moves to Slack, this whole problem disappears.

Programs and infrastructure

Everything runs inside your cloud. Nothing in this list requires a VPN, a domain join, an agent installed on an endpoint, or any inbound firewall change.

WhatMicrosoft / AzureWhy
RuntimeNode.js LTS in a containerThe worker is a small TypeScript service
ComputeAzure Container Apps, or a container on a VM you already runSomewhere for the worker to run, in your subscription
Secret storeAzure Key VaultCredentials and the model API key never sit in a file
Deploy accessA scoped role on one resource groupSo we can deploy and roll back, and nothing else
SourceRead access to the repo we build inSo your team can audit what is running

The costs you should expect, so none of them are a surprise later: container compute, which for a workload like the tender agent is small; language model API usage, billed on volume; one Microsoft 365 licence only if you pick the service-account option above; and a Power Automate premium licence only if you pick that option.

What we have actually run

The demo behind this document ran with delegated authentication inside our own Microsoft tenant, because it was a demo. The architecture recommended above, which is app-only credentials scoped to a single mailbox and a single document library, is the documented least-privilege pattern rather than something we have already operated end to end in a client environment.

Step 6, the read-only smoke test, confirms the pattern against your configuration. It stays read-only so that a wrong assumption there costs nothing. We verify your access policies, your management scopes and your document library layout rather than assume them.

That discipline gives your team a check to apply to any vendor. Our demo declared six delegated Graph permissions. When we went back through what the code actually calls, two of them, Team.ReadBasic.All and Channel.ReadBasic.All, were never exercised at all, because the team and channel identifiers come from configuration rather than from a lookup. They are not in the table above. If a request asks for a permission, ask which API call needs it.

Which administrator has to do what

Most delays come from a ticket sitting with someone who does not hold the role required to action it.

GrantWho can do it
Tenant-wide admin consent for Graph application permissionsPrivileged Role Administrator. Cloud Application Administrator, Application Administrator and AI Administrator can consent to everything except Graph application permissions
Granting the app access to one SharePoint siteA SharePoint Administrator or higher, calling POST /sites/{siteId}/permissions. The caller needs delegated Sites.FullControl.All
Scoping Mail.Read to one mailboxA member of Organization Management, or an Exchange Administrator in Entra
Approving a Teams app package uploadTeams Administrator
Creating the compute, secret store and deploy roleWhoever owns the relevant Azure subscription

Phase 3: Testing

We run the testing phase ourselves, on both routes. Model and API usage during testing is billed at cost, with no margin. It is a small amount, and it exists only to confirm the workflow behaves.

Testing has one exit condition: the workflow agreed in the scope form runs end to end on its own and gets the right answer. When it does, testing is over and the workflow goes live.

Phase 4: Aftercare

Maintenance is £1,000 per year. It covers fixes to the workflow for as long as the fee is paid, under the service levels below.

PeriodResponseResolution
First 3 months after go-live12 hours12 hours
After that, while the fee is paid24 hours24 hours

Whose model API key runs it after go-live?

We recommend your own API key. At handover we rotate the workflow onto a key that you own. The provider bills you directly, your compliance team keeps full control of the data terms, and nothing about your usage flows through us. If your organization already runs Copilot or another AI vendor, your team has done this before.

FAQs from IT teams

Where does the data go, and where does it stop?

Documents and message text go from your tenant to the model API and back. Nothing is written to storage we control, because the worker runs in your cloud and its only persistent state is a delta token and a set of processed message identifiers.

What does the model provider do with it?

We answer this from our current Anthropic commercial terms rather than from memory, and we put it in writing at the scope call. Ask us for the training, retention and sub-processing position, and for the processing region stated explicitly, which for a UK or EU client is usually the first thing asked.

What is logged, and where can we see it?

Every API call the worker makes appears in your own audit log, because it authenticates as an identity in your tenant. The worker’s own logs go to your cloud’s logging service, in your subscription.

What is the blast radius if your credentials leak?

Bounded by the scoping in Phase 2, which is the main reason for insisting on it. A leaked credential for this workflow reads one mailbox, reads one document folder and posts to one channel. It cannot read other mailboxes, enumerate your document libraries or message anybody directly. That is a materially different incident from the same leak against a tenant-wide mail permission.

How often do credentials rotate?

Ask us for the cadence and the mechanism, and hold us to two things whatever the answer is: shorter than the project, and automated rather than diarised.

How do we revoke everything?

Follow the offboarding runbook below. It takes under an hour.

Who can change what is running, and how do we find out?

Changes go through the repo your team can read, and material changes get the same shadow run treatment as the initial deployment before they touch live output. Ask us at the scope call whether you get a change notification and through what channel, so it is agreed rather than assumed.

What happens when the agent gets something wrong, and who is accountable?

It will sometimes get things wrong, which is why the tender agent ranks proposals and asks a human which to use rather than drafting the bid itself. Every workflow we build keeps a human at the point where the decision has consequences. The liability and indemnification position sits in the master services agreement, and you should read it there rather than accept a summary of it here.

Is this shadow IT?

No, and that is largely the point of running it in your tenant. It uses your identity provider, appears in your audit log, is subject to your access policies, and is removed by your administrators using the offboarding runbook below.

What does it cost us?

Phase 2 and Phase 4 above.

Offboarding runbook

Handed over on day one, because a workflow you cannot remove cleanly is one you should not install.

  1. 1.Remove the Exchange role assignment: Remove-ManagementRoleAssignment against the assignment created in Phase 2, then Remove-ServicePrincipal.
  2. 2.Remove the site permission: Remove-MgSitePermission -SiteId $siteId -PermissionId $permissionId, or DELETE /sites/{sitesId}/permissions/{permissionId} directly. Note that unlike granting the permission, deleting it takes application Sites.FullControl.All rather than a delegated call.
  3. 3.Delete the app registration in Entra. This invalidates every token issued to it.
  4. 4.Remove the Teams app package.
  5. 5.Delete the container app, and the secret from Key Vault.
  6. 6.Disable or delete the service account, if the Phase 2 option requiring one was used.
  7. 7.Rotate the model API key, which is the only credential shared between your environment and ours.

Steps 3 and 5 alone stop the workflow dead. The rest is cleanup.

Tell us what to prepare

This is your request pack. It carries the path you chose above, so the scope call starts from decisions already made. Fill it in and send it to us, or copy it as an email for your IT team first. We do not need site IDs, tenant IDs or channel identifiers here. Those get resolved during the read-only smoke test.

Your selections

The workflow runs in your tenant. You supply the model API key. Change either at the top of this page if that is wrong.

Your stack

Microsoft 365 and Teams. Change the selector in Phase 2 if that is wrong.

Capabilities needed

Outbound 443 to api.anthropic.com is always needed, so it is not listed here.

If anything in Phase 2 looks larger than it needs to be for the workflow you have in mind, say so in the box above and we will cut it. A permission we cannot point at a specific API call for is one we should not be asking for.

Sakky Baral · AlphaX Intelligence

AlphaX Intelligence is on a mission to deploy agents that work as hard as you do.