feat: add agent skills support for declarative agents#15607
Open
sebastienlevert wants to merge 20 commits intoOfficeDev:devfrom
Open
feat: add agent skills support for declarative agents#15607sebastienlevert wants to merge 20 commits intoOfficeDev:devfrom
sebastienlevert wants to merge 20 commits intoOfficeDev:devfrom
Conversation
Add end-to-end support for agent skills in M365 Agents Toolkit: - Manifest wrapper: AgentSkillElement, CRUD operations (add/remove/has/get), max 10 skills, x-agent_skills extension property with agent_skills fallback - Packaging: bundle skill directories in createAppPackage, validate path boundary and SKILL.md existence - Validation: skill folder/SKILL.md/frontmatter validation, error aggregation, telemetry, log formatting for CLI and VS Code - FxCore.addSkill(): new/existing skill flows, SKILL.md template generation, path normalization, confirmation dialog - Question flow: skill name, description, expose-to-copilot questions - CLI: atk add skill command with options and telemetry - VS Code: handler, command registration, telemetry events - Localization: all English strings for prompts and messages - Tests: 51 new unit tests across wrapper, packaging, validation, and command Co-authored-by: Copilot <[email protected]>
…ore conflict - Rename checkCopilotAccess.title to checkCopilotAccess in all 16 nls files to match the %teamstoolkit.commands.checkCopilotAccess% reference in package.json - Remove redundant 'files' property from package.json since .vscodeignore is used for vsce packaging (newer vsce rejects having both) Co-authored-by: Copilot <[email protected]>
- Add TreeViewCommand for addSkill below Add Action in the Development pane - Add fx-extension.addSkill command entry in package.json with enablement - Add localization keys (title, description, running, blockTooltip) across all 16 locales - Remove diagnostic logging from localizeUtils.ts and treeViewCommand.ts - Skill item shows only for declarative agent projects (isDeclarativeCopilotApp) Co-authored-by: Copilot <[email protected]>
- Replace ConfirmQuestion with SingleSelectQuestion (yes/no options) - Update FxCore.addSkill to compare string 'yes' instead of boolean - Add localization keys for yes/no options - Update CLI option type from boolean to string - Update tests accordingly - all 11 passing Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
The addSkill flow had a showMessage() confirm dialog before proceeding, which interrupted the quickpick-only UX. Remove it so the flow stays entirely within the VS Code quickpick area. Co-authored-by: Copilot <[email protected]>
Adds back the warn-level showMessage confirmation (matching addPlugin pattern) that asks users to confirm before modifying files. This was accidentally removed when the pre-action confirmation was stripped. Co-authored-by: Copilot <[email protected]>
- Allow uppercase letters in skill names (not just lowercase) - Validate for duplicate skill names (check if folder already exists) - Rename CLI flags: --name, --description, --expose-to-copilot, --from - Update validation error messages and placeholder text Co-authored-by: Copilot <[email protected]>
When adding an existing skill via --from, the name and description are already in the SKILL.md file, so they shouldn't be required. Skip the name/description prompts in the question flow when --from is provided. Co-authored-by: Copilot <[email protected]>
When importing an existing skill via --from: - Validate folder name uses only letters, numbers, and hyphens - Read SKILL.md frontmatter and verify the name matches the folder name - Error out with clear messages if either check fails Co-authored-by: Copilot <[email protected]>
Add AgentSkillsEnabled feature flag (default: false) following the established pattern (like EmbeddedKnowledge before cleanup). Gates: - VS Code tree view item (treeViewManager.ts) - VS Code command enablement (package.json) - VS Code context (extension.ts setContext) - CLI 'atk add skill' command (add.ts) Set TEAMSFX_AGENT_SKILLS=true to enable the feature. Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
Add re-export of AgentSkillElement interface so it can be imported by consumers and test files. Previously the type was imported from generated-types and used internally but not re-exported, causing TS2459 errors in the manifest test suite. Co-authored-by: Copilot <[email protected]>
Co-authored-by: Copilot <[email protected]>
tecton
reviewed
Mar 27, 2026
Contributor
tecton
left a comment
There was a problem hiding this comment.
I met "(×) Error: unknown.InternalError: The "path" argument must be of type string. Received undefined" when running atk new skill under DA project. Could you please fix it?
Contributor
Author
Do you mean atk add skill? |
Contributor
Contributor
Author
- Use path.resolve(projectPath, teamsManifestPath) for manifest file resolution to handle both absolute and relative paths correctly - Revert localized package.nls.*.json files (pipeline handles translations) Co-authored-by: Copilot <[email protected]>
- Update treeViewManager test to expect 9 items (Add Skill added) - Apply prettier formatting to CopilotGptManifestUtils and test files Co-authored-by: Copilot <[email protected]>
- Merge upstream/dev to stay current - Fix CopilotGptManifestUtils.ts formatting (CI lint-pr.sh) - Add 5 new unit tests for addSkill coverage gaps: - copilotExtensions manifest format path - Skill outside appPackage validation - SKILL.md without name frontmatter - showMessage error handling - DA manifest with empty file property Co-authored-by: Copilot <[email protected]>
- Add 7 tests for addSkillQuestionNode (pattern validation, duplicates, conditions) - Add 4 tests for logValidationErrors with skill errors (VSC + CLI) - Add 1 test for validate driver with non-empty skillValidationResult - Remove 3 unused NLS keys (expose.description, from.title, from.placeholder) Co-authored-by: Copilot <[email protected]>
- Test VSCode View Agent Manifest button triggers openFile - Test CLI platform success message path - Test logValidationErrors with undefined skillValidationResult (covers ?? [] partials) Co-authored-by: Copilot <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Feature: https://msazure.visualstudio.com/Microsoft%20Teams%20Extensibility/_workitems/edit/37278479
Summary
This PR adds comprehensive Agent Skills support to the Microsoft 365 Agents Toolkit, enabling declarative agents to bundle reusable skill definitions. Skills are markdown-based instruction sets (SKILL.md files) that can be packaged within the appPackage and referenced from the declarative agent manifest.
What are Agent Skills?
Agent Skills allow declarative agent authors to decompose agent behavior into modular, reusable instruction bundles. Each skill:
appPackage/skills/{skill-name}/SKILL.mdfile with frontmatter (name, description) and markdown instructionsagent_skillspropertyexpose_skill_to_copilotChanges by Package
@microsoft/app-manifest(packages/manifest)agent_skillsas a first-class propertyAgentSkillElementtype:folder(required string) +expose_skill_to_copilot(optional boolean)DeclarativeAgentManifestWrapperwith full skill CRUD operations:addSkill(),removeSkill(),getSkill(),hasSkill(),getSkills()@microsoft/teamsfx-core(packages/fx-core)FxCore.addSkill()lifecycle method following the establishedaddPlugin/addKnowledgepatternsaddSkillQuestionNode) with:copilotGptManifestUtils.addSkill()to update the DA manifest with new skill entriesskills/{name}/SKILL.mdwith frontmatter and template content--fromflag for importing existing skill folders:name:frontmatter matches the folder name--fromis providedaddPluginpattern)@microsoft/m365agentstoolkit-cli(packages/cli)atk add skillCLI command with options:--name— Skill name (required for new skills)--description— Skill description (required for new skills)--expose-to-copilot— Yes/No, defaults to No--from— Import existing skill folder--manifest-file— App manifest path (defaults to./appPackage/manifest.json)VS Code Extension (packages/vscode-extension)
isDeclarativeCopilotApp)fx-extension.addSkillcommand with proper enablement conditionsCLI Usage Examples
Validation Rules
^[a-zA-Z][a-zA-Z0-9-]*$"A skill named 'X' already exists"SkillLimitExceededSkillOutsideAppPackageSkillMdNotFoundSkillNameMismatchInvalidSkillFolderNameTesting