Curated lessons on getting started building agents with Copilot Studio
This report summarizes scanner evidence for microsoft/agent-academy, a JavaScript project with 3,626 GitHub stars. SynthScan examined 59,561 lines of code across 253 source files, recording 73 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.7 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 63 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 2 finding(s).
Which changes need focused human review? 73 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 73 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | WRITING_STYLE.md | 92 | > ### Why multi-agent systems matter | CODE |
| MEDIUM | docs/index.md | 91 | - **Interested in the foundations of AI agents?** [AI Agents for Beginners](https://microsoft.github.io/ai-agents-for-be | CODE |
| MEDIUM | docs/recruit/01-introduction-to-agents/index.md | 64 | ## Retrieval-Augmented Generation (RAG) | COMMENT |
| MEDIUM | docs/recruit/06-create-agent-from-conversation/index.md | 136 | ### 🌿 What is generative orchestration in the context of agents? {#what-is-generative-orchestration-in-the-context-of-ag | COMMENT |
| MEDIUM | docs/operative-v2/03-multi-agent/index.md | 22 | # 🚨 Mission 03: Multi-Agent Systems {#mission-03-multi-agent-systems} | COMMENT |
| MEDIUM | docs/operative-v2/03-multi-agent/index.md | 57 | ## 🧠 What are multi-agent systems? {#what-are-multi-agent-systems} | COMMENT |
| MEDIUM | docs/operative-v2/03-multi-agent/index.md | 63 | ### Why multi-agent systems matter | COMMENT |
| MEDIUM | docs/operative-v2/03-multi-agent/index.md | 135 | ## 🎯 Multi-agent architecture patterns {#multi-agent-architecture-patterns} | COMMENT |
| MEDIUM | docs/operative-v2/03-multi-agent/index.md | 558 | ### 3.2.4 Test multi-agent collaboration | COMMENT |
| MEDIUM | docs/operative-v2/03-multi-agent/evaluation.md | 1 | # Lab Rewrite Evaluation — operative/03-multi-agent | COMMENT |
| MEDIUM | docs/operative-v2/03-multi-agent/evaluation.md | 218 | ### 3.2.4 Test multi-agent collaboration | COMMENT |
| MEDIUM | docs/operative/03-multi-agent/index.md | 20 | # 🚨 Mission 03: Multi-Agent Systems {#mission-03-multi-agent-systems} | COMMENT |
| MEDIUM | docs/operative/03-multi-agent/index.md | 55 | ### Why multi-agent systems matter | COMMENT |
| MEDIUM | docs/operative/03-multi-agent/index.md | 128 | ## 🎯 Multi-agent architecture patterns {#multi-agent-architecture-patterns} | COMMENT |
| MEDIUM | docs/operative/03-multi-agent/index.md | 711 | ### 3.2.4 Test multi-agent collaboration | COMMENT |
| MEDIUM | docs/recruit-nextgen/01-introduction-to-agents/index.md | 102 | ## The Knowledge: Retrieval-Augmented Generation (RAG) | COMMENT |
| MEDIUM | docs/special-ops/azure-ai-search-rag/index.md | 22 | # 🔎 Build a RAG Agent with Azure AI Search {#azure-ai-search-rag} | COMMENT |
| MEDIUM | docs/special-ops/azure-ai-search-rag/index.md | 47 | ## ❓ What is Retrieval-Augmented Generation (RAG)? {#what-is-rag} | COMMENT |
| MEDIUM | docs/special-ops/azure-ai-search-rag/index.md | 134 | ### Deploy a text embedding model | COMMENT |
| MEDIUM | docs/special-ops/azure-ai-search-rag/index.md | 245 | ## 🧪 Lab 1.3 — Build the RAG-enabled agent {#lab1.3-build-agent} | COMMENT |
| MEDIUM | docs/special-ops/yaml-specialist/index.md | 512 | ## 🧪 Lab 4.1 - Add Knowledge Sources and Guardrails {#lab-4-1-add-knowledge-sources-and-guardrails} | COMMENT |
| MEDIUM | docs/intelligence-officer/06-business-skills/index.md | 218 | ### Lab 7.4: Exercise chronology and guardrails | COMMENT |
| MEDIUM | docs/operative-nextgen/03-connected-agent/index.md | 282 | ### 3.4 Test multi-agent collaboration | COMMENT |
| MEDIUM | …perative-nextgen/04-model-response-and-safety/index.md | 267 | ### 4.3 Add and evaluate the instruction guardrails | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docs/recruit/07-add-new-topic-with-trigger/index.md | 430 | #### Step 1: Trigger phrase | COMMENT |
| LOW⚡ | docs/recruit/07-add-new-topic-with-trigger/index.md | 436 | #### Step 2: Agent asks for details using an Adaptive card | COMMENT |
| LOW⚡ | docs/recruit/07-add-new-topic-with-trigger/index.md | 444 | #### Step 3: User provides dates | COMMENT |
| LOW⚡ | docs/recruit/07-add-new-topic-with-trigger/index.md | 448 | #### Step 4: Cloud flow executed | COMMENT |
| LOW⚡ | docs/recruit/07-add-new-topic-with-trigger/index.md | 452 | #### Step 5: Send a confirmation message to the user | COMMENT |
| LOW | docs/recruit/00-course-setup/index.md | 63 | ## Step 1: Get a Microsoft 365 Account | COMMENT |
| LOW | docs/recruit/00-course-setup/index.md | 79 | ## Step 2: Start a Copilot Studio Trial | COMMENT |
| LOW | docs/recruit/00-course-setup/index.md | 102 | ## Step 3: Create new developer environment | COMMENT |
| LOW | docs/recruit/00-course-setup/index.md | 125 | ## Step 4: Enable Ability to Publish with the Copilot Studio Trial | COMMENT |
| LOW | docs/recruit/00-course-setup/index.md | 193 | ## Step 5: Create new SharePoint site | COMMENT |
| LOW | docs/recruit-nextgen/00-course-setup/index.md | 66 | ## Step 1: Get a Microsoft 365 Account | COMMENT |
| LOW | docs/recruit-nextgen/00-course-setup/index.md | 79 | ## Step 2: Start a Copilot Studio Trial | COMMENT |
| LOW | docs/recruit-nextgen/00-course-setup/index.md | 102 | ## Step 3: Create new developer environment | COMMENT |
| LOW | docs/recruit-nextgen/00-course-setup/index.md | 125 | ## Step 4: Enable Ability to Publish with the Copilot Studio Trial | COMMENT |
| LOW | docs/recruit-nextgen/00-course-setup/index.md | 193 | ## Step 5: Create new SharePoint site | COMMENT |
| LOW⚡ | docs/special-ops/yaml-specialist/index.md | 454 | # Step 1: Use AI to detect country from timezone | COMMENT |
| LOW⚡ | docs/special-ops/yaml-specialist/index.md | 462 | # Step 2: Show detected country to user | COMMENT |
| LOW⚡ | docs/special-ops/yaml-specialist/index.md | 469 | # Step 3: Ask user to confirm or correct | COMMENT |
| LOW⚡ | docs/special-ops/yaml-specialist/index.md | 478 | # Step 4: Use AI to interpret user's confirmation or correction | COMMENT |
| LOW⚡ | docs/special-ops/yaml-specialist/index.md | 486 | # Step 5: Store confirmed country in global variable | COMMENT |
| LOW⚡ | docs/special-ops/yaml-specialist/index.md | 492 | # Step 6: Confirm to user | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/operative-v2/06-ai-safety/index.md | 113 | 1. **Clear identification**: Use labels like "AI-powered" or "Generated by AI" on responses | CODE |
| HIGH | docs/operative-v2/06-ai-safety/index.md | 362 | 🤖 AI Safety Notice: My responses are generated by AI and include built-in | CODE |
| HIGH | docs/operative/06-ai-safety/index.md | 107 | 1. **Clear identification**: Use labels like "AI-powered" or "Generated by AI" on responses | CODE |
| HIGH | docs/operative/06-ai-safety/index.md | 338 | 🤖 AI Safety Notice: My responses are generated by AI and include built-in | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/recruit/06-create-agent-from-conversation/index.md | 130 | ## 🔮 OK, I've created my agent... how do I next ground it with knowledge? {#ok-ive-created-my-agent-how-do-i-next-ground | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …rver-secured/Configuration/HRMCPServerConfiguration.cs | 21 | public const string SectionName = "AzureAd"; | COMMENT |
| LOW | …rver-secured/Configuration/HRMCPServerConfiguration.cs | 41 | public string Audience { get; set; } = string.Empty; | COMMENT |
| LOW | …mcp-oauth/assets/hr-mcp-server-secured/Tools/Models.cs | 41 | /// The candidate's current role | COMMENT |
| LOW | …ts/hr-mcp-server-secured/Services/ICandidateService.cs | 1 | namespace HRMCPServer.Services; | COMMENT |
| LOW | …ts/hr-mcp-server-secured/Services/ICandidateService.cs | 21 | /// <summary> | COMMENT |
| LOW | …r-mcp-server-secured/Services/IAuthorizationService.cs | 1 | namespace HRMCPServer.Services; | COMMENT |
| LOW | …r-mcp-server-secured/Services/IAuthorizationService.cs | 21 | /// <summary> | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …uit/08-add-adaptive-card/assets/8.1_RequestDevice.json | 83 | "placeholder": "Please provide any specific requirements or comments", | CODE |
| LOW | …1-obtain-user-feedback/assets/11.3.1_CSATFeedback.json | 181 | "placeholder": "Placeholder text", | CODE |
| LOW | …1-obtain-user-feedback/assets/11.3.1_CSATFeedback.json | 271 | "placeholder": "Enter any additional comments you'd like to share", | CODE |
| LOW | …1-obtain-user-feedback/assets/11.3.1_CSATFeedback.json | 181 | "placeholder": "Placeholder text", | CODE |
| LOW | …1-obtain-user-feedback/assets/11.3.1_CSATFeedback.json | 271 | "placeholder": "Enter any additional comments you'd like to share", | CODE |
| LOW | .github/skills/agent-academy-report/SKILL.md | 53 | - **Name normalization**: If only an email address is available, it converts it to a display name — e.g. `john.doe@examp | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …nd-model-driven-app/assets/zava-data/load_zava_data.py | 15 | CODE | |
| LOW | …skills/agent-academy-report/scripts/generate_charts.py | 21 | CODE | |
| LOW | …skills/agent-academy-report/scripts/generate_charts.py | 22 | CODE | |
| LOW | …thub/skills/agent-academy-report/scripts/export_pdf.py | 12 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …skills/agent-academy-report/scripts/generate_charts.py | 282 | CODE | |
| LOW | …thub/skills/agent-academy-report/scripts/export_pdf.py | 91 | CODE | |
| LOW | …/skills/agent-academy-report/scripts/build_markdown.py | 49 | CODE | |
| LOW | …/skills/agent-academy-report/scripts/build_markdown.py | 503 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …skills/agent-academy-report/scripts/generate_charts.py | 88 | def chart_completions_over_time(records, charts_dir): | CODE |
| LOW | …skills/agent-academy-report/scripts/generate_charts.py | 127 | def chart_sentiment_by_course(feedback, course_stats, charts_dir): | CODE |