Skip to content

Add Security Skills Toolkit plugin 🤖🤖🤖#2116

Open
harrider wants to merge 11 commits into
github:mainfrom
harrider:harrider/skill/add-security-skills-toolkit
Open

Add Security Skills Toolkit plugin 🤖🤖🤖#2116
harrider wants to merge 11 commits into
github:mainfrom
harrider:harrider/skill/add-security-skills-toolkit

Conversation

@harrider

Copy link
Copy Markdown

Pull Request Checklist

  • I have read and followed the CONTRIBUTING.md guidelines.
  • I have read and followed the Guidance for submissions involving paid services.
  • My contribution adds a new instruction, prompt, agent, skill, workflow, or canvas extension file in the correct directory.
  • The file follows the required naming convention.
  • The content is clearly structured and follows the example format.
  • I have tested my instructions, prompt, agent, skill, workflow, or canvas extension with GitHub Copilot.
  • I have run npm start and verified that README.md is up to date.
  • I am targeting the staged branch for this pull request.

Description

Adds the security-skills-toolkit plugin — an AI-powered helper for developers modernizing the security posture of Azure-based applications. A developer describes a security concern in plain language, and an orchestrator agent routes to a specialist skill that pulls relevant public Microsoft documentation and helps plan/apply changes, with the developer in control throughout.

The plugin ships 1 agent + 19 skills (all prefixed sst-):

  • Agent: sst-security-skills-orchestrator — classifies a concern and routes to the right skill.
  • Secretless-auth migrations (7): sst-storage-secretless-auth, sst-sql-secretless-auth, sst-cosmosdb-secretless-auth, sst-redis-secretless-auth, sst-eventhub-secretless-auth, sst-servicebus-secretless-auth, sst-cognitive-secretless-auth — move from keys/SAS/passwords to Microsoft Entra managed identity.
  • MSAL.js modernization (10): an sst-msaljs-migration router plus 9 version-hop skills (browser/Angular/Node/React).
  • Container hygiene (1): sst-container-vulnerability-patching.
  • Fallback (1): sst-general-security-helper for concerns without a dedicated skill.

All guidance is grounded in publicly available Microsoft documentation (Entra/managed identity, MSAL.js, SFI/Zero Trust).


Type of Contribution

  • New instruction file.
  • New prompt file.
  • New agent file.
  • New plugin.
  • New skill file.
  • New agentic workflow.
  • New canvas extension.
  • Update to existing instruction, prompt, agent, plugin, skill, workflow, or canvas extension.
  • Other (please specify):

Additional Notes

  • Authored in source form on staged: the plugin folder contains only .github/plugin/plugin.json + README.md; the agent lives in top-level agents/ and the 19 skills in top-level skills/, referenced declaratively from plugin.json (CI materializes them on publish).
  • Regenerated outputs are committed alongside the source: .github/plugin/marketplace.json and docs/README.{agents,plugins,skills}.md (npm run build produces no further diff).
  • npm run plugin:validatesecurity-skills-toolkit is valid; all 19 sst-* skills pass npm run skill:validate.
  • Locally verified end-to-end in the GitHub Copilot CLI (real copilot plugin install): the orchestrator agent is discoverable/selectable and routes correctly to the sst- skills (tested MSAL.js migration and storage secretless-auth).
  • License: MIT; author: "Awesome Copilot Community".

Copilot AI review requested due to automatic review settings June 24, 2026 17:19
@harrider harrider requested a review from aaronpowell as a code owner June 24, 2026 17:19
@github-actions github-actions Bot added agent PR touches agents new-submission PR adds at least one new contribution plugin PR touches plugins skills PR touches skills labels Jun 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🔒 PR Risk Scan Results

Scanned 26 changed file(s).

Severity Count
🔴 High 0
🟠 Medium 52
ℹ️ Info 0
Severity Rule File Line Match
🟠 package-exec-command docs/README.skills.md 31 | [acreadiness-assess](../skills/acreadiness-assess/SKILL.md)<br />`gh skills install github/awesome-copilot acreadiness-assess` | Run the AgentRC readiness assessment on the curre
🟠 unpinned-version-indicator skills/sst-cognitive-secretless-auth/SKILL.md 370 pip install azure-ai-textanalytics>=5.3.0
🟠 unpinned-version-indicator skills/sst-cognitive-secretless-auth/SKILL.md 371 pip install azure-identity>=1.15.0
🟠 unpinned-version-indicator skills/sst-cognitive-secretless-auth/SKILL.md 372 pip install openai>=1.0.0
🟠 unpinned-version-indicator skills/sst-cognitive-secretless-auth/SKILL.md 430 - [ ] **Dependencies Updated**: Azure SDK packages support Managed Identity (Azure.Identity >= 1.10.0)
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v2-to-v3/SKILL.md 133 { "rxjs": "~6.6.7" }
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v2-to-v3/SKILL.md 138 { "rxjs": "^7.0.0" }
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v2-to-v3/SKILL.md 150 "@​​azure/msal-angular": "^2.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v2-to-v3/SKILL.md 157 "@​​azure/msal-angular": "^3.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v3-to-v4/SKILL.md 109 "@​​azure/msal-angular": "^3.1.0",
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v3-to-v4/SKILL.md 110 "@​​azure/msal-browser": "^4.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v3-to-v4/SKILL.md 115 "@​​azure/msal-angular": "^4.0.0",
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v3-to-v4/SKILL.md 116 "@​​azure/msal-browser": "^4.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v3-to-v4/SKILL.md 160 this.loginDisplay = this.authService.instance.getAllAccounts().length > 0;
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v3-to-v4/SKILL.md 187 this.loginDisplay = this.authService.instance.getAllAccounts().length > 0;
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v4-to-v5/SKILL.md 163 "@​​azure/msal-angular": "^4.0.0",
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v4-to-v5/SKILL.md 164 "@​​azure/msal-browser": "^5.4.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v4-to-v5/SKILL.md 173 "@​​azure/msal-angular": "^5.0.0",
🟠 unpinned-version-indicator skills/sst-msaljs-migration-angular-v4-to-v5/SKILL.md 174 "@​​azure/msal-browser": "^5.4.0"
🟠 package-exec-command skills/sst-msaljs-migration-angular-v4-to-v5/SKILL.md 462 npx tsc --noEmit
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v2-to-v3/SKILL.md 112 package.json → "@​​azure/msal-browser": "^2.x.x"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v2-to-v3/SKILL.md 432 "@​​azure/msal-browser": "^2.38.3"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v2-to-v3/SKILL.md 441 "@​​azure/msal-browser": "^3.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v3-to-v4/SKILL.md 132 "@​​azure/msal-browser": "^3.27.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v3-to-v4/SKILL.md 141 "@​​azure/msal-browser": "^4.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v4-to-v5/SKILL.md 81 Simply changing `"@​​azure/msal-browser": "^4.x.x"` to `"^5.2.0"` in `package.json` will **break your application**. MSAL Browser v5 includes:
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v4-to-v5/SKILL.md 1058 "@​​azure/msal-browser": "^4.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-browser-v4-to-v5/SKILL.md 1067 "@​​azure/msal-browser": "^5.2.0"
🟠 package-exec-command skills/sst-msaljs-migration-browser-v4-to-v5/SKILL.md 1200 npx tsc --noEmit
🟠 unpinned-version-indicator skills/sst-msaljs-migration-node-v2-to-v3/SKILL.md 103 "@​​azure/msal-node": "^3.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-node-v3-to-v5/SKILL.md 92 ``- `"node": "^16 || ^18"```
🟠 unpinned-version-indicator skills/sst-msaljs-migration-node-v3-to-v5/SKILL.md 243 "@​​azure/msal-node": "^5.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md 364 "@​​azure/msal-browser": "^3.x.x"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md 365 "@​​azure/msal-browser": "^4.x.x"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md 368 "@​​azure/msal-browser": "^5.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md 591 "@​​azure/msal-react": "^3.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md 600 "@​​azure/msal-react": "^5.0.0"
🟠 unpinned-version-indicator skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md 609 "@​​azure/msal-browser": "^5.0.0",
🟠 unpinned-version-indicator skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md 610 "@​​azure/msal-react": "^5.0.0"
🟠 unpinned-version-indicator skills/sst-servicebus-secretless-auth/SKILL.md 388 pip install azure-servicebus>=7.11.0
🟠 unpinned-version-indicator skills/sst-servicebus-secretless-auth/SKILL.md 389 pip install azure-identity>=1.15.0
🟠 unpinned-version-indicator skills/sst-servicebus-secretless-auth/SKILL.md 398 <version>7.14.0</version>
🟠 unpinned-version-indicator skills/sst-servicebus-secretless-auth/SKILL.md 403 <version>1.11.0</version>
🟠 unpinned-version-indicator skills/sst-servicebus-secretless-auth/SKILL.md 500 - [ ] **Dependencies Updated**: Azure SDK packages support Managed Identity (Azure.Messaging.ServiceBus >= 7.17.0, Azure.Identity >= 1.10.0)
🟠 unpinned-version-indicator skills/sst-sql-secretless-auth/SKILL.md 634 <version>12.4.x</version>
🟠 unpinned-version-indicator skills/sst-sql-secretless-auth/SKILL.md 639 <version>1.10.x</version>
🟠 unpinned-version-indicator skills/sst-storage-secretless-auth/SKILL.md 342 azure-storage-blob>=12.19.0
🟠 unpinned-version-indicator skills/sst-storage-secretless-auth/SKILL.md 343 azure-identity>=1.15.0
🟠 unpinned-version-indicator skills/sst-storage-secretless-auth/SKILL.md 390 <version>12.25.0</version>
🟠 unpinned-version-indicator skills/sst-storage-secretless-auth/SKILL.md 395 <version>1.11.0</version>
🟠 unpinned-version-indicator skills/sst-storage-secretless-auth/SKILL.md 427 "@​​azure/storage-blob": "^12.17.0",
🟠 unpinned-version-indicator skills/sst-storage-secretless-auth/SKILL.md 428 "@​​azure/identity": "^4.0.0"

This is an automated soft-gate report. Findings indicate review targets and do not block merge by themselves.

@github-actions github-actions Bot added the skill-check-warning Skill validator reported warnings label Jun 24, 2026
@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

🔍 Skill Validator Results

⚠️ Warnings or advisories found

Scope Checked
Skills 19
Agents 1
Total 20
Severity Count
❌ Errors 0
⚠️ Warnings 17
ℹ️ Advisories 0

Summary

Level Finding
ℹ️ Found 19 skill(s)
ℹ️ [sst-cognitive-secretless-auth] 📊 sst-cognitive-secretless-auth: 6,060 BPE tokens [chars/4: 6,670] (comprehensive ✗), 55 sections, 23 code blocks
ℹ️ [sst-cognitive-secretless-auth] ⚠ Skill is 6,060 BPE tokens (chars/4 estimate: 6,670) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
ℹ️ [sst-container-vulnerability-patching] 📊 sst-container-vulnerability-patching: 7,270 BPE tokens [chars/4: 8,020] (comprehensive ✗), 39 sections, 11 code blocks
ℹ️ [sst-container-vulnerability-patching] ⚠ Skill is 7,270 BPE tokens (chars/4 estimate: 8,020) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
ℹ️ [sst-cosmosdb-secretless-auth] 📊 sst-cosmosdb-secretless-auth: 5,197 BPE tokens [chars/4: 5,743] (comprehensive ✗), 32 sections, 19 code blocks
ℹ️ [sst-cosmosdb-secretless-auth] ⚠ Skill is 5,197 BPE tokens (chars/4 estimate: 5,743) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
ℹ️ [sst-eventhub-secretless-auth] 📊 sst-eventhub-secretless-auth: 4,600 BPE tokens [chars/4: 5,149] (standard ~), 29 sections, 16 code blocks
ℹ️ [sst-eventhub-secretless-auth] ⚠ Skill is 4,600 BPE tokens (chars/4 estimate: 5,149) — approaching "comprehensive" range where gains diminish.
ℹ️ [sst-general-security-helper] 📊 sst-general-security-helper: 3,421 BPE tokens [chars/4: 3,990] (standard ~), 28 sections, 3 code blocks
Full validator output
Found 19 skill(s)
[sst-cognitive-secretless-auth] 📊 sst-cognitive-secretless-auth: 6,060 BPE tokens [chars/4: 6,670] (comprehensive ✗), 55 sections, 23 code blocks
[sst-cognitive-secretless-auth]    ⚠  Skill is 6,060 BPE tokens (chars/4 estimate: 6,670) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-container-vulnerability-patching] 📊 sst-container-vulnerability-patching: 7,270 BPE tokens [chars/4: 8,020] (comprehensive ✗), 39 sections, 11 code blocks
[sst-container-vulnerability-patching]    ⚠  Skill is 7,270 BPE tokens (chars/4 estimate: 8,020) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-cosmosdb-secretless-auth] 📊 sst-cosmosdb-secretless-auth: 5,197 BPE tokens [chars/4: 5,743] (comprehensive ✗), 32 sections, 19 code blocks
[sst-cosmosdb-secretless-auth]    ⚠  Skill is 5,197 BPE tokens (chars/4 estimate: 5,743) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-eventhub-secretless-auth] 📊 sst-eventhub-secretless-auth: 4,600 BPE tokens [chars/4: 5,149] (standard ~), 29 sections, 16 code blocks
[sst-eventhub-secretless-auth]    ⚠  Skill is 4,600 BPE tokens (chars/4 estimate: 5,149) — approaching "comprehensive" range where gains diminish.
[sst-general-security-helper] 📊 sst-general-security-helper: 3,421 BPE tokens [chars/4: 3,990] (standard ~), 28 sections, 3 code blocks
[sst-general-security-helper]    ⚠  Skill is 3,421 BPE tokens (chars/4 estimate: 3,990) — approaching "comprehensive" range where gains diminish.
[sst-msaljs-migration-angular-v2-to-v3] 📊 sst-msaljs-migration-angular-v2-to-v3: 3,459 BPE tokens [chars/4: 3,571] (standard ~), 20 sections, 13 code blocks
[sst-msaljs-migration-angular-v2-to-v3]    ⚠  Skill is 3,459 BPE tokens (chars/4 estimate: 3,571) — approaching "comprehensive" range where gains diminish.
[sst-msaljs-migration-angular-v3-to-v4] 📊 sst-msaljs-migration-angular-v3-to-v4: 2,501 BPE tokens [chars/4: 2,583] (standard ~), 18 sections, 8 code blocks
[sst-msaljs-migration-angular-v3-to-v4]    ⚠  Skill is 2,501 BPE tokens (chars/4 estimate: 2,583) — approaching "comprehensive" range where gains diminish.
[sst-msaljs-migration-angular-v4-to-v5] 📊 sst-msaljs-migration-angular-v4-to-v5: 4,956 BPE tokens [chars/4: 5,069] (standard ~), 39 sections, 29 code blocks
[sst-msaljs-migration-angular-v4-to-v5]    ⚠  Skill is 4,956 BPE tokens (chars/4 estimate: 5,069) — approaching "comprehensive" range where gains diminish.
[sst-msaljs-migration-browser-v2-to-v3] 📊 sst-msaljs-migration-browser-v2-to-v3: 5,404 BPE tokens [chars/4: 5,556] (comprehensive ✗), 35 sections, 21 code blocks
[sst-msaljs-migration-browser-v2-to-v3]    ⚠  Skill is 5,404 BPE tokens (chars/4 estimate: 5,556) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-msaljs-migration-browser-v3-to-v4] 📊 sst-msaljs-migration-browser-v3-to-v4: 3,161 BPE tokens [chars/4: 3,283] (standard ~), 31 sections, 11 code blocks
[sst-msaljs-migration-browser-v3-to-v4]    ⚠  Skill is 3,161 BPE tokens (chars/4 estimate: 3,283) — approaching "comprehensive" range where gains diminish.
[sst-msaljs-migration-browser-v4-to-v5] 📊 sst-msaljs-migration-browser-v4-to-v5: 11,457 BPE tokens [chars/4: 12,074] (comprehensive ✗), 64 sections, 67 code blocks
[sst-msaljs-migration-browser-v4-to-v5]    ⚠  Skill is 11,457 BPE tokens (chars/4 estimate: 12,074) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-msaljs-migration-node-v2-to-v3] 📊 sst-msaljs-migration-node-v2-to-v3: 1,458 BPE tokens [chars/4: 1,516] (detailed ✓), 11 sections, 3 code blocks
[sst-msaljs-migration-node-v3-to-v5] 📊 sst-msaljs-migration-node-v3-to-v5: 2,920 BPE tokens [chars/4: 2,892] (standard ~), 16 sections, 11 code blocks
[sst-msaljs-migration-node-v3-to-v5]    ⚠  Skill is 2,920 BPE tokens (chars/4 estimate: 2,892) — approaching "comprehensive" range where gains diminish.
[sst-msaljs-migration-react-v3-to-v5] 📊 sst-msaljs-migration-react-v3-to-v5: 6,262 BPE tokens [chars/4: 6,263] (comprehensive ✗), 45 sections, 39 code blocks
[sst-msaljs-migration-react-v3-to-v5]    ⚠  Skill is 6,262 BPE tokens (chars/4 estimate: 6,263) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-msaljs-migration] 📊 sst-msaljs-migration: 1,443 BPE tokens [chars/4: 1,339] (detailed ✓), 8 sections, 1 code blocks
[sst-redis-secretless-auth] 📊 sst-redis-secretless-auth: 4,582 BPE tokens [chars/4: 5,298] (standard ~), 22 sections, 4 code blocks
[sst-redis-secretless-auth]    ⚠  Skill is 4,582 BPE tokens (chars/4 estimate: 5,298) — approaching "comprehensive" range where gains diminish.
[sst-servicebus-secretless-auth] 📊 sst-servicebus-secretless-auth: 6,299 BPE tokens [chars/4: 6,987] (comprehensive ✗), 64 sections, 29 code blocks
[sst-servicebus-secretless-auth]    ⚠  Skill is 6,299 BPE tokens (chars/4 estimate: 6,987) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-sql-secretless-auth] 📊 sst-sql-secretless-auth: 14,049 BPE tokens [chars/4: 15,697] (comprehensive ✗), 78 sections, 41 code blocks
[sst-sql-secretless-auth]    ⚠  Skill is 14,049 BPE tokens (chars/4 estimate: 15,697) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
[sst-storage-secretless-auth] 📊 sst-storage-secretless-auth: 7,617 BPE tokens [chars/4: 8,395] (comprehensive ✗), 48 sections, 36 code blocks
[sst-storage-secretless-auth]    ⚠  Skill is 7,617 BPE tokens (chars/4 estimate: 8,395) — "comprehensive" skills hurt performance by 2.9pp on average. Consider splitting into 2–3 focused skills.
Found 1 agent(s)
Validated 1 agent(s)
✅ All checks passed (19 skill(s), 1 agent(s))

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new security-skills-toolkit plugin to the Awesome Copilot marketplace, centered around an orchestrator agent that routes developers to specialized security modernization skills (managed identity/secretless-auth migrations, MSAL.js upgrade hops, and a general SFI-guided helper).

Changes:

  • Introduces the security-skills-toolkit plugin (manifest + README) and lists it in the marketplace + generated docs.
  • Adds the sst-security-skills-orchestrator agent as the plugin entrypoint.
  • Adds the sst-* skill set (secretless-auth migrations + MSAL.js migration router and hop skills).

Reviewed changes

Copilot reviewed 26 out of 26 changed files in this pull request and generated 21 comments.

Show a summary per file
File Description
.github/plugin/marketplace.json Registers the new plugin in the generated marketplace index.
agents/sst-security-skills-orchestrator.agent.md Adds the orchestrator agent definition and routing instructions.
docs/README.agents.md Adds the orchestrator agent to generated agent documentation.
docs/README.plugins.md Adds the plugin to generated plugin documentation.
docs/README.skills.md Adds the new sst-* skills to generated skill documentation.
plugins/security-skills-toolkit/.github/plugin/plugin.json Defines plugin metadata and references the agent + skills included in the plugin.
plugins/security-skills-toolkit/README.md Provides installation and usage docs for the plugin and its capabilities.
skills/sst-cognitive-secretless-auth/SKILL.md Skill for migrating Azure Cognitive/AI Services from API keys to Entra/managed identity.
skills/sst-container-vulnerability-patching/SKILL.md Skill for container base-image vulnerability patching guidance grounded in public docs.
skills/sst-cosmosdb-secretless-auth/SKILL.md Skill for migrating Cosmos DB from keys to Entra/managed identity auth.
skills/sst-eventhub-secretless-auth/SKILL.md Skill for migrating Event Hubs from SAS/connection strings to Entra/managed identity.
skills/sst-general-security-helper/SKILL.md General SFI-guided helper skill for concerns without a dedicated specialist skill.
skills/sst-msaljs-migration/SKILL.md Router/orchestrator skill for MSAL.js migrations across package/version hops.
skills/sst-msaljs-migration-angular-v2-to-v3/SKILL.md MSAL Angular v2→v3 hop guidance skill.
skills/sst-msaljs-migration-angular-v3-to-v4/SKILL.md MSAL Angular v3→v4 hop guidance skill.
skills/sst-msaljs-migration-angular-v4-to-v5/SKILL.md MSAL Angular v4→v5 hop guidance skill.
skills/sst-msaljs-migration-browser-v2-to-v3/SKILL.md MSAL Browser v2→v3 hop guidance skill.
skills/sst-msaljs-migration-browser-v3-to-v4/SKILL.md MSAL Browser v3→v4 hop guidance skill.
skills/sst-msaljs-migration-browser-v4-to-v5/SKILL.md MSAL Browser v4→v5 hop guidance skill.
skills/sst-msaljs-migration-node-v2-to-v3/SKILL.md MSAL Node v2→v3 hop guidance skill.
skills/sst-msaljs-migration-node-v3-to-v5/SKILL.md MSAL Node v3→v5 hop guidance skill.
skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md MSAL React v3→v5 hop guidance skill.
skills/sst-redis-secretless-auth/SKILL.md Skill for migrating Azure Cache for Redis from access keys to Entra/managed identity.
skills/sst-servicebus-secretless-auth/SKILL.md Skill for migrating Azure Service Bus from SAS/connection strings to Entra/managed identity.
skills/sst-sql-secretless-auth/SKILL.md Skill for migrating Azure SQL from SQL auth to Entra/managed identity.
skills/sst-storage-secretless-auth/SKILL.md Skill for migrating Azure Storage from shared keys to Entra/managed identity.

Comment thread plugins/security-skills-toolkit/.github/plugin/plugin.json
Comment thread agents/sst-security-skills-orchestrator.agent.md
Comment thread skills/sst-servicebus-secretless-auth/SKILL.md Outdated
Comment thread skills/sst-redis-secretless-auth/SKILL.md Outdated
Comment thread skills/sst-msaljs-migration/SKILL.md Outdated
Comment thread skills/sst-container-vulnerability-patching/SKILL.md Outdated
Comment thread skills/sst-msaljs-migration-browser-v4-to-v5/SKILL.md Outdated
Comment thread skills/sst-msaljs-migration-react-v3-to-v5/SKILL.md Outdated
Comment thread skills/sst-sql-secretless-auth/SKILL.md Outdated
Comment thread skills/sst-storage-secretless-auth/SKILL.md Outdated
@github-actions github-actions Bot added the skill-check-error Skill validator reported errors label Jun 24, 2026
@github-actions github-actions Bot removed the skill-check-error Skill validator reported errors label Jun 24, 2026
@aaronpowell aaronpowell changed the base branch from staged to main June 25, 2026 04:41
@github-actions github-actions Bot added the targets-main PR targets main instead of staged label Jun 25, 2026
@aaronpowell aaronpowell removed targets-main PR targets main instead of staged migration: bulk-retarget labels Jun 25, 2026

## Who You Are

You are the **Security Skills Orchestrator** — a collaborative partner, not a script executor.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
You are the **Security Skills Orchestrator** — a collaborative partner, not a script executor.
You are the **Security Skills Orchestrator** — a collaborative partner.

This captures the identity piece, I think it is enough. I've had some cases where wording like "not a script executor" caused the model to limit itself.


**You do NOT own:** Code changes (skills own that). Portal navigation (developer owns that with skill guidance).

**The one rule:** You are a ROUTER. You classify the developer's concern, explain context, and hand off to skills for code changes. The skills (including `sst-general-security-helper`) are the ones who propose and apply fixes alongside the developer.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This conflicts with the output control section which was also "the one rule"


### Explanation-first edit gate (binds every skill you route to)

Routing to a skill does **not** authorize it to edit. Every skill you hand off to starts in **explanation mode** and stays there until the developer **explicitly asks for changes**. This gate is yours to enforce — a skill running its own procedural steps does not lift it.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't this just friction against the built-in permissions in most harnesses? Why would this agent ask for read or write when the harness is also going to ask and enforce?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The other point being that the harnesses checks are deterministic.

Comment on lines +100 to +110
Ask the developer to describe their security concern. They might say:
- "I need to migrate my storage account to managed identity"
- "I have a container vulnerability I need to patch"
- "My app uses an old version of MSAL.JS"
- "I want to improve my app's authentication security"
- Something more general or vague

If the concern is vague, ask clarifying questions to understand:
- What Azure service or technology is involved?
- What's the current authentication/security pattern?
- What's the target state they want to reach?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Ask the developer to describe their security concern. They might say:
- "I need to migrate my storage account to managed identity"
- "I have a container vulnerability I need to patch"
- "My app uses an old version of MSAL.JS"
- "I want to improve my app's authentication security"
- Something more general or vague
If the concern is vague, ask clarifying questions to understand:
- What Azure service or technology is involved?
- What's the current authentication/security pattern?
- What's the target state they want to reach?
Ask the developer to describe their security concern. If the concern is vague, ask clarifying questions to understand:
- What Azure service or technology is involved?
- What's the current authentication/security pattern?
- What's the target state they want to reach?

This should be sufficient here. No? The other lines are a very limited subset of possible inputs, I don't that is going to help much

When a developer first interacts with you, display this welcome:

```
🛡️ Security Skills Toolkit

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs to be more clear on what it supports. If I ask questions about AWS this isn't going to be helpful. Call out that it is focused around Azure

✅ Scan your source code for relevant patterns and configurations
✅ Propose changes based on public Microsoft security documentation
❌ NOT make any changes without your explicit approval
❌ NOT send your code to any external service

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't so clear, it depends on what model provider and play they are using, make it more clear that this is scoped to this agent / skills


Then route to `sst-general-security-helper` with the developer's choice and context.

### Context Passed to Skills

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This confuses me a bit, skills are loaded into the current context, they already have all of this unless it is routed through a sub agent.


**You do NOT own:** Code changes (skills own that). Portal navigation (developer owns that with skill guidance).

**The one rule:** You are a ROUTER. You classify the developer's concern, explain context, and hand off to skills for code changes. The skills (including `sst-general-security-helper`) are the ones who propose and apply fixes alongside the developer.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This confuses me. The agent stays the same when the skill is being executed. Skills don't "propose and apply fixes", skills only provide instructions and context to the agent

- {relevant Azure service documentation}

### Next Steps
1. Review the changes — the skill did its best, but you know your codebase best

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please run a markdown linter over all of the new files. Headings should have a newline after them

You are the developer's **first stop** on the way to the right specialist — and more than that, you're their partner in improving their application's security posture. Your accurate classification of concerns and correct routing to skills ensures developers get the right guidance. Take care in your analysis — a misrouted concern can cause wasted effort and frustration.

**Remember:**
- You are a ROUTER, not a REMEDIATOR — skills do the actual work

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, this is inaccurate.

@@ -0,0 +1,335 @@
# Security Skills Toolkit

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't follow the conventions in this repo, check out some of the other plugins, but the structure is roughly this and much more terse.

# Plugin name

One line description

## What's in the plugin

### Custom agent

### Skills

## Prerequisites

## Usage

## License

MIT


## Overview

This skill helps you migrate Azure Cognitive Services and Azure AI Services from API key-based authentication to Microsoft Entra ID (Managed Identity) — a security best practice aligned with [**Pillar 1: Protect identities and secrets**](https://learn.microsoft.com/en-us/security/zero-trust/sfi/secure-future-initiative-identity-overview) of Microsoft's [Secure Future Initiative](https://learn.microsoft.com/en-us/security/zero-trust/sfi/secure-future-initiative-overview) and [Zero Trust principles](https://learn.microsoft.com/security/zero-trust/).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This skill helps you migrate Azure Cognitive Services and Azure AI Services from API key-based authentication to Microsoft Entra ID (Managed Identity) — a security best practice aligned with [**Pillar 1: Protect identities and secrets**](https://learn.microsoft.com/en-us/security/zero-trust/sfi/secure-future-initiative-identity-overview) of Microsoft's [Secure Future Initiative](https://learn.microsoft.com/en-us/security/zero-trust/sfi/secure-future-initiative-overview) and [Zero Trust principles](https://learn.microsoft.com/security/zero-trust/).
This skill helps you migrate Azure Cognitive Services and Azure AI Services from API key-based authentication to Microsoft Entra ID (Managed Identity) — a security best practice aligned with [**Pillar 1: Protect identities and secrets**](https://learn.microsoft.com/security/zero-trust/sfi/secure-future-initiative-identity-overview) of Microsoft's [Secure Future Initiative](https://learn.microsoft.com/security/zero-trust/sfi/secure-future-initiative-overview) and [Zero Trust principles](https://learn.microsoft.com/security/zero-trust/).

Here, but in all of the links, don't use the en-us locale, let the website decide on that.


---

## Step-by-Step Guide

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aspire? 😄

using Azure.AI.TextAnalytics;

var endpoint = new Uri("https://your-service.services.ai.azure.com/");
var credential = new ManagedIdentityCredential(); // ✅ Managed Identity

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just leaving the one comment here, but please fix in all locations.

- **No digest pinning**: Not using `FROM image@sha256:...` for reproducibility
- **Unversioned package installs**: `RUN pip install requests` without version pinning
- **Stale base images**: Tags that may be significantly behind current patches
- **No security update layer**: No `RUN apt-get update && apt-get upgrade` or equivalent

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is missing one of the most important: use images with the smallest surface area. e.g. distroless when possible. chiseled in ubuntu, etc

```dockerfile
FROM <base-image-registry>/<base-image>:<base-image-tag>

# Custom layers: Install or update packages

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# Custom layers: Install or update packages
# Custom layers: Install or update packages if needed


3. **Identify the package manager and ecosystem**:
- Debian/Ubuntu: `apt-get`, `apt`
- RHEL/CentOS: `yum`, `dnf`

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- RHEL/CentOS: `yum`, `dnf`
- RHEL/CentOS: `yum`, `dnf`
- Azure Linux: `tdnf`


**After (Remediated)**:
```dockerfile
FROM ubuntu:20.04

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We shouldn't use a version of ubuntu that is out of support as the example

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you update, the package would be libssl3 in newer versions


## 🔍 Troubleshooting

### Dockerfile Retrieval Issues

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't seem like it should be needed? This isn't novel information for an agent


**Error handling:** If `System.Data.SqlClient` is detected instead of `Microsoft.Data.SqlClient`, halt the Entra auth migration and report: "System.Data.SqlClient does not support MI. Switch to Microsoft.Data.SqlClient 5.2.2+ first" (source: Step 5 driver prerequisites table).

---

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a massive skill, best practice is the file should be around ~400-500 lines max and the rest gets split into resources/ as needed


```bash
# Example: enable server-level auditing to a storage account
az sql server audit-policy update \

@keegan-caruso keegan-caruso Jun 25, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be done with IAC?

@@ -0,0 +1,359 @@
---
name: sst-redis-secretless-auth
description: 'Helps you migrate Azure Cache for Redis from access key authentication to Microsoft Entra ID (Managed Identity) authentication — eliminating shared secrets and aligning with identity-based security best practices.'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this also cover Azure Managed Redis? They are different services.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent PR touches agents new-submission PR adds at least one new contribution plugin PR touches plugins skill-check-warning Skill validator reported warnings skills PR touches skills

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants