deploy-copilot-teams-extension — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited deploy-copilot-teams-extension (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
az account shownpm install -g @microsoft/teamsapp-cli# Initialize with Teams Toolkit
teamsapp new --template ai-bot --name copilot-teams-ext
cd copilot-teams-ext# Register app in Azure AD
az ad app create --display-name "Copilot Teams Extension" \
--sign-in-audience AzureADMyOrg \
--web-redirect-uris "https://token.botframework.com/.auth/web/redirect"Required Graph API Permissions (least privilege):
| Permission | Type | Purpose |
|---|---|---|
User.Read | Delegated | Read user profile for personalization |
Files.Read.All | Delegated | Access SharePoint docs for knowledge |
Chat.ReadWrite | Delegated | Read/write in Teams conversations |
TeamsActivity.Send | Application | Send proactive notifications |
az bot create --resource-group $RG --name $BOT_NAME \
--kind registration --app-type SingleTenant \
--appid $APP_ID --tenant-id $TENANT_IDhttps://$APP_SERVICE.azurewebsites.net/api/messages{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.5",
"body": [
{ "type": "TextBlock", "text": "${title}", "weight": "Bolder", "size": "Medium" },
{ "type": "TextBlock", "text": "${summary}", "wrap": true },
{ "type": "FactSet", "facts": [
{ "title": "Source:", "value": "${source}" },
{ "title": "Confidence:", "value": "${confidence}" }
]}
],
"actions": [
{ "type": "Action.OpenUrl", "title": "View Source", "url": "${sourceUrl}" },
{ "type": "Action.Submit", "title": "👍 Helpful", "data": { "feedback": "positive" } }
]
}webApplicationInfo section)accessTokenAcceptedVersion: 2 in app registration manifestteamsapp deploy --env prod
# Or manual deployment
az webapp deploy --resource-group $RG --name $APP_NAME --src-path dist/# Package Teams app
teamsapp package --env prod --output-file teams-app.zip
# Upload to Teams admin center
# https://admin.teams.microsoft.com → Teams apps → Manage apps → Upload# Test in Teams
teamsapp preview --env dev
# Or install from admin center and test in Teams client| Issue | Cause | Fix |
|---|---|---|
| Bot not responding in Teams | Endpoint URL wrong | Verify Bot Service endpoint matches App Service URL |
| SSO fails silently | Wrong redirect URI | Use exact https://token.botframework.com/.auth/web/redirect |
| Adaptive Card not rendering | Schema version mismatch | Use version: "1.5" for latest Teams support |
| Graph API 403 | Missing admin consent | Grant admin consent in Azure AD portal |
| Rate limited (429) | Too many Graph calls | Implement batching with $batch endpoint |
| Card actions not working | Missing Action.Submit handler | Add onAdaptiveCardInvoke in bot code |
| App not visible in Teams | Not published by admin | Upload to admin center, approve, publish |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.