Build, deploy, evaluate, optimize, and fine-tune Microsoft Foundry AI agents and models through their complete development lifecycle.
- GitHub stars
- 1,636
- Files
- 200
- Last commit
- Nov 11, 2026
- License
- MIT
- Allowed tools
- —
What does the microsoft-foundry skill do?
microsoft-foundry is an agent skill. Build, deploy, evaluate, optimize, and fine-tune Microsoft Foundry AI agents and models through their complete development lifecycle.
Summary generated from the skill's SKILL.md.
About the microsoft-foundry skill
Managing the complete lifecycle of Microsoft Foundry AI agents and models is what this skill enables for developers. It provides a structured way to scaffold, deploy, evaluate, and optimize hosted agents, voice agents, and prompt agents. Users can move from initial project creation and resource provisioning to advanced model fine-tuning using techniques like SFT, DPO, and RFT.
An agent should load this skill when it needs to manage Foundry projects, handle model deployment with intelligent routing, or perform continuous monitoring of agent performance. The skill relies on tools like azd for deployment and specific MCP tools for prompt optimization and trace analysis. It distinguishes itself by offering specialized workflows for complex tasks such as VNet isolation for private networks, dataset curation from production traces, and managing RBAC permissions or resource quotas. Developers can use it to troubleshoot deployment failures by querying telemetry and viewing hosted agent logs.
What an agent can do with it
- 1Deploy and test hosted agentsA developer can deploy hosted agents to Foundry and perform smoke tests to ensure they are working correctly.
- 2Fine-tune models for specific tasksYou can customize models using SFT, DPO, or RFT with graders to improve performance.
- 3Optimize agent prompts and instructionsAn AI client can improve the quality of an agent by optimizing its instructions and prompts through an evaluation-driven workflow.
- 4Set up secure network isolationDevelopers can deploy Foundry with VNet isolation to ensure network security.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the microsoft-foundry skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the microsoft-foundry skill in Claude Code
~/.claude/skills/microsoft-foundry/SKILL.md
$ npx degit microsoft/azure-skills/skills/microsoft-foundry ~/.claude/skills/microsoft-foundryInstall the microsoft-foundry skill in Claude Code (project)
.claude/skills/microsoft-foundry/SKILL.md
$ npx degit microsoft/azure-skills/skills/microsoft-foundry .claude/skills/microsoft-foundryInstall the microsoft-foundry skill in Codex
~/.agents/skills/microsoft-foundry/SKILL.md
$ npx degit microsoft/azure-skills/skills/microsoft-foundry ~/.agents/skills/microsoft-foundryInstall the microsoft-foundry skill in Gemini CLI
~/.gemini/skills/microsoft-foundry/SKILL.md
$ npx degit microsoft/azure-skills/skills/microsoft-foundry ~/.gemini/skills/microsoft-foundryInstall the microsoft-foundry skill in Claude.ai
npx degit microsoft/azure-skills/skills/microsoft-foundry microsoft-foundry && zip -r microsoft-foundry.zip microsoft-foundry # claude.ai → Customize → Skills → + → Create skill → Upload a skill → microsoft-foundry.zip
Automated checks
Ran Nov 14, 2026Full report →Passed our automated checks. That is not a security audit: read the scripts before you let an agent run them. How checks work
- Source repository linked and reachablemicrosoft/azure-skills/skills/microsoft-foundry is public and reachablegithub.com/microsoft/azure-skills/tree/HEAD/skills/microsoft ↗Pass
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit 2026-11-11github.com/microsoft/azure-skills/commits ↗Pass
- No download-and-run or credential theft in scripts5 of 38 scripts read; no download-and-run, remote eval, base64 execution or credential uploadPass
- No hidden instructions in SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/microsoft/azure-skills/blob/HEAD/skills/microsoft ↗Pass
- Pre-approved tools are scopedNo pre-approved tools; the agent asks before using onegithub.com/microsoft/azure-skills/blob/HEAD/skills/microsoft ↗Pass
SKILL.md
View on GitHubMicrosoft Foundry Skill
This skill helps developers work with Microsoft Foundry resources, covering model discovery and deployment, complete dev lifecycle of AI agent, evaluation workflows, and troubleshooting.
Pre-Execution Requirements
Follow each applicable subsection below before starting its corresponding action or workflow.
Dependency Check and Setup
MANDATORY: As the first step after this skill loads, run the dependency check and setup script below from this skill's root and wait for it to finish before continuing. The script checks first and installs only missing dependencies; it does not reinstall dependencies that are already available.
You MUST complete this check before reading or entering any sub-skill, workflow, or workflow-specific reference.
./scripts/check-and-setup-dependencies.sh # macOS / Linux
./scripts/check-and-setup-dependencies.ps1 # Windows (pwsh)
Strictly follow the script output for subsequent actions.
Workflow Guidance
MANDATORY: Before executing ANY workflow-specific steps, you MUST read the corresponding sub-skill document. Do not call workflow-specific MCP tools for a workflow without reading its skill document. This applies even if you already know the MCP tool parameters — the skill document contains required workflow steps, pre-checks, and validation logic that must be followed. This rule applies on every new user message that triggers a different workflow, even if the skill is already loaded.
Foundry MCP
MANDATORY: Before using Foundry MCP operations, call the Azure MCP foundry tool and inspect the available Foundry MCP tools and related parameters. Treat this as the discovery/help step for MCP-based workflows.
azd
MANDATORY: Before executing ANY azd command, you MUST read azd-guidance and strictly follow the shared rules defined in it, especially the AZURE_DEV_USER_AGENT setting rules.
Sub-Skills
This skill includes specialized sub-skills for specific workflows. When a sub-skill matches the task, strictly follow its workflow:
| Sub-Skill | When to Use | Reference |
|---|---|---|
| deploy | Deploy hosted agents to Foundry, smoke-test a deployment, create or update prompt agents, and manage agent versions and multi-environment deploys. | deploy |
| cicd | Set up a CI/CD deployment pipeline for a Foundry agent. | cicd |
| invoke | Send messages to an agent, single or multi-turn conversations | invoke |
| routine | Schedule or event-trigger Foundry agents with routines; use azd for CRUD, enable/disable, manual dispatch, and viewing past runs, or define routines in azure.yaml. |
routine |
| invocations-ws | Build, deploy, and connect to custom Hosted agents that use developer-defined duplex real-time or media streams over invocations_ws. |
invocations-ws |
| observe | Evaluate agent quality, run batch evals, analyze failures, optimize prompts, improve agent instructions, compare versions, set up CI/CD monitoring, and enable continuous production evaluation | observe |
| insights | Pull generated agent insights, evidence, and recommendations from an existing monitor; read-only retrieval, not a new analysis run | insights |
| trace | Query traces, analyze latency/failures, correlate eval results to specific responses via App Insights customEvents |
trace |
| troubleshoot | View hosted agent logs, query telemetry, diagnose failures | troubleshoot |
| validate | Use only when the user explicitly asks to use this validation sub-skill or to validate Microsoft Foundry hosted-agent code against best practices. Never invoke it proactively or add it to another workflow. | validate |
| create (quick start) | Create a new hosted Foundry agent from scratch end-to-end — scaffold, provision or use an existing Foundry project, deploy, and smoke-test. Do not use for any work on existing code. For anything not covered by the quickstart, use create. | create/quick-start-hosted.md |
| create | Use when the standard end-to-end happy path (quick start) doesn't fit. Create a new Foundry agent, update code of an existing agent, continue development of an existing agent, wire connections at scaffold time, or use advanced setup or A2A (Agent2Agent). | create |
| create managed harness | Create or continue developing a Prompt Agent that explicitly uses the Foundry-managed Copilot harness. Uses azd and azure.yaml, not the ordinary Prompt Agent MCP workflow. |
create-managed-harness |
| create voice | Create, configure, or extend a Foundry Voice Agent, defaulting generic requests to managed Prompt Voice and supporting GPT-Live Voice, self-deployed Prompt Voice, or two-agent Hosted Voice. | create-voice |
| agent-optimizer | Make existing Python hosted-agent code optimization-ready, configure eval.yaml, run Agent Optimizer jobs, apply candidates locally, and deploy through azd after review. | agent-optimizer |
| eval-datasets | Harvest production traces into evaluation datasets, manage dataset versions and splits, track evaluation metrics over time, detect regressions, and maintain full lineage from trace to deployment. Use for: create dataset from traces, dataset versioning, evaluation trending, regression detection, dataset comparison, eval lineage. | eval-datasets |
| project/create | Creating a new Microsoft Foundry project for hosting agents and models. Use when onboarding to Foundry or setting up new infrastructure. | project/create/create-foundry-project.md |
| resource/create | Creating Azure AI Services multi-service resource (Foundry resource) using Azure CLI. Use when manually provisioning AI Services resources with granular control. | resource/create/create-foundry-resource.md |
| private-network | Answer questions about Foundry network isolation and deploy Foundry with VNet isolation (BYO VNet, Managed VNet, hybrid). Covers architecture concepts, template selection, deployment, and post-deployment validation. | resource/private-network/private-network.md |
| models/deploy-model | Unified model deployment with intelligent routing. Handles quick preset deployments, fully customized deployments (version/SKU/capacity/RAI), and capacity discovery across regions. Routes to sub-skills: preset (quick deploy), customize (full control), capacity (find availability). |
models/deploy-model/SKILL.md |
| quota | Managing quotas and capacity for Microsoft Foundry resources. Use when checking quota usage, troubleshooting deployment failures due to insufficient quota, requesting quota increases, or planning capacity. | quota/quota.md |
| rbac | Managing RBAC permissions, role assignments, managed identities, and service principals for Microsoft Foundry resources. Use for access control, auditing permissions, and CI/CD setup. | rbac/rbac.md |
| finetuning | Fine-tune models on Microsoft Foundry — SFT distillation, DPO preference optimization, RFT with graders and tool calling. Dataset preparation, grader calibration, training, checkpoint selection, deployment, evaluation. Use for: fine-tune, SFT, DPO, RFT, training data, grader, distillation, fine-tuned model, large file upload. | finetuning/SKILL.md |
| azd-guidance | Provide shared azd knowledge and guidance for managing Foundry agents. Read this first for any workflows related to azd. | azd-guidance |
💡 Tip: For a complete onboarding flow:
project/create(public) orprivate-network(VNet isolation) →models/deploy-model→ agent workflows (create→deploy→invoke).
💡 Fine-Tuning: Use
finetuningfor all model customization — SFT distillation, DPO preference optimization, and RFT with graders. Includes quickstart, grader calibration, and training curve analysis.
💡 Model Deployment: Use
models/deploy-modelfor all deployment scenarios — it intelligently routes between quick preset deployment, customized deployment with full control, and capacity discovery across regions.
💡 Prompt Optimization: For requests like "optimize my prompt" or "improve my agent instructions," load observe and use the
prompt_optimizeMCP tool through that eval-driven workflow.
Infrastructure Lifecycle
Match user intent to the correct infrastructure workflow.
| User Intent | Workflow |
|---|---|
| "Create Foundry" / "Set up Foundry" (ambiguous) | Use AskUserQuestion: (a) just an AI Services resource, (b) a project with public access, or (c) a project with network isolation? Route: (a) → resource/create, (b) → project/create, (c) → private-network |
| Set up Foundry with VNet isolation | private-network |
| Create a Foundry project (public) | project/create |
| Create a bare Foundry resource | resource/create |
Agent Development Lifecycle
Match user intent to the correct agent workflow. Read each sub-skill in order before executing.
| User Intent | Workflow (read in order) |
|---|---|
| Create or develop a Voice Agent (GPT-Live Voice, Prompt Voice, or Hosted Voice) | dependency check and setup → azd-guidance → create-voice → deploy → invoke |
| Create or develop an explicitly requested Managed Harness Agent / Copilot harness agent | dependency check and setup → azd-guidance → create-managed-harness → deploy → invoke |
| Create a new hosted agent end-to-end (scaffold + deploy + test) | dependency check and setup → azd-guidance → quick-start-hosted (self-contained end-to-end) |
| Anything beyond the standard quickstart (existing code, migration, re-hosting, deployment customization, scaffold-time connections, A2A (Agent2Agent), recovery) | dependency check and setup → azd-guidance → create → deploy → invoke |
| Optimize existing Python hosted agent | dependency check and setup → azd-guidance → agent-optimizer → scaffold/review → eval.yaml → optimize → apply candidate → deploy → invoke |
| Deploy an agent (code already exists) | dependency check and setup → azd-guidance → deploy (includes eval-suite setup) → invoke → observe (evaluate/optimize) |
| Update/redeploy an agent after code changes | dependency check and setup → azd-guidance → deploy (includes eval-suite setup) → invoke → observe (evaluate/optimize) |
| Set up a CI/CD deployment pipeline for a hosted agent | dependency check and setup → azd-guidance → cicd |
| Invoke/test/chat with an agent | dependency check and setup → azd-guidance → invoke |
| Schedule/event-trigger an agent, or CRUD/enable/disable/dispatch a routine | dependency check and setup → azd-guidance → routine |
| Optimize / improve agent prompt or instructions | observe (Step 4: Optimize) |
| Evaluate and optimize agent (full loop) | observe |
| Enable continuous evaluation monitoring | observe (Step 6: CI/CD & Monitoring) |
| Pull agent insights / list generated issues and recommendations | dependency check and setup → insights (all pages with expanded evidence; read-only) |
| Troubleshoot an agent issue | dependency check and setup → azd-guidance → invoke → troubleshoot |
| Fix a broken agent (troubleshoot + redeploy) | dependency check and setup → azd-guidance → invoke → troubleshoot → apply fixes → deploy → invoke |
Agent: .foundry Workspace Standard
Every agent source folder can keep Foundry-specific cache and overlay state under .foundry/:
<agent-root>/
.foundry/
agent-metadata.yaml
agent-metadata.prod.yaml
suites/
datasets/
evaluators/
results/
- In azd projects, derive deployment context (project endpoint, agent name/version, ACR, App Insights) from
azure.yamlplusazd env get-values; do not duplicate those values in metadata when azd already provides them. agent-metadata.yamlis the preferred local/dev overlay for non-azd values, remote Foundry suite references, local cache paths, result summaries, and explicit overrides. Optional sidecar files such asagent-metadata.prod.yamlcan hold a single prod or CI-targeted overlay without mixing multiple environments in one file.suites/,datasets/, andevaluators/are local cache folders. Reuse them when they are current, and ask before refreshing or overwriting them.- See Agent Metadata Contract for the canonical schema and workflow rules.
Agent: Setup References
- Standard Agent Setup — advanced setup for production workloads that need data-residency control (bring-your-own Cosmos DB / Storage / AI Search via a Foundry capability host). The default
azd ai agentflow uses Basic Agent Setup and does not provisioncapabilityHosts/agents— do not flag its absence as a bug. For default post-provision state, see the "Expected env-var fingerprint" section in foundry-agent/create/create-hosted.md.
Agent: Common Project Context Resolution
Agent skills should run this step only when they need configuration values they don't already have. If a value (for example, agent root, environment, project endpoint, or agent name) is already known from the user's message or a previous skill in the same session, skip resolution for that value.
Step 1: Discover Agent Roots and azd Context
First check whether the workspace has azure.yaml with services using host: azure.ai.agent.
- One azd agent service -> classify its top-level agent type from
kindandharness. Forkind: voiceor legacykind: prompt-voice, read Voice Agent subtypes, then use the service'sprojectfolder or theazure.yamldirectory as the agent root. - Multiple azd agent services -> classify Voice services with Voice Agent subtypes:
- Selecting a Hosted Voice wrapper includes its named
kind: hostedtarget as an upstream dependency; deploy and verification must report both services separately. - Selecting the
kind: hostedtarget alone scopes changes/debugging to the target container and does not automatically modify the wrapper. - Otherwise -> require the user to choose the target service/folder.
- Selecting a Hosted Voice wrapper includes its named
- No azd agent service -> search the workspace for
.foundry/folders that containagent-metadata.yamloragent-metadata.<env>.yaml.- One match -> use that agent root.
- Multiple matches -> require the user to choose the target agent folder.
- No matches -> for insights, ask only for missing remote inputs without initializing local files; for create/deploy workflows, seed a new
.foundry/folder during setup; for other workflows, stop and ask the user which agent source folder to initialize.
After selecting an agent root, keep all local .foundry cache inspection, source inspection, evaluator suggestions, dataset suggestions, and prompt-optimization context inside that folder only. Do not scan sibling agent folders unless the user explicitly switches roots.
Step 2: Resolve Environment and Deployment Context
If azure.yaml is present, resolve the azd environment first:
- Environment explicitly named by the user
AZURE_ENV_NAMEfromazd env get-values- azd default environment from
.azure/config.json - Environment already selected earlier in the session
Run azd env get-values for the selected environment when project/deployment values are not already known. Prefer azd values for deployment context:
| azd Variable | Resolves To |
|---|---|
AZURE_AI_PROJECT_ENDPOINT or AZURE_AIPROJECT_ENDPOINT |
Project endpoint |
AGENT_<SERVICE>_NAME |
Agent name for the selected azd service |
AGENT_<SERVICE>_VERSION |
Agent version for the selected azd service |
AZURE_CONTAINER_REGISTRY_NAME or AZURE_CONTAINER_REGISTRY_ENDPOINT |
ACR registry name / image URL prefix |
APPLICATIONINSIGHTS_CONNECTION_STRING |
App Insights connection string for trace workflows |
AZURE_SUBSCRIPTION_ID, AZURE_RESOURCE_GROUP, AZURE_AI_ACCOUNT_NAME, AZURE_AI_PROJECT_NAME |
Azure resource lookup and Playground links |
When azd supplies these values, use them as the source of truth and do not copy them into .foundry/agent-metadata*.yaml on metadata writes.
Step 3: Select Metadata Overlay and Resolve Environment
Inside the selected agent root, choose the metadata file in this order:
- Metadata filename or path explicitly provided by the user or workflow
- If an explicit environment is already known and
.foundry/agent-metadata.<env>.yamlexists, use that file .foundry/agent-metadata.yaml- If multiple metadata files remain and no rule above selects one, prompt the user to choose
Read the selected metadata file and resolve any remaining environment choice in this order:
- Environment explicitly named by the user
- If the selected metadata file defines exactly one environment, use it
- Environment already selected earlier in the session
defaultEnvironmentfrom metadata
If the selected metadata file still contains multiple environments and none of the rules above selects one, prompt the user to choose. Keep the selected agent root, metadata file, environment, and whether context came from azd or metadata visible in every workflow summary.
If the selected environment exposes older testSuites[] metadata but not evaluationSuites[], treat testSuites[] as the source for this session and normalize each entry in memory to the evaluationSuites[] shape before continuing. If the metadata is older still and only exposes legacy testCases[], normalize that list the same way. Preserve dataset and evaluator fields, keep any existing tags, and map legacy priority to tags.tier only when tags.tier is missing: P0 -> smoke, P1 -> regression, P2 -> coverage.
Step 4: Resolve eval.yaml Local Evaluation Intent
If eval.yaml exists in the selected agent root, parse it before generating new suites:
agent.name-> target agent candidate; verify it matches the selected azd/metadata agent before using it.dataset.local_uri-> local seed dataset candidate; legacydataset_filemay be normalized in memory.dataset.name/dataset.version-> registered dataset candidate.validation_dataset-> optional validation dataset candidate.evaluators[]-> candidate Foundry evaluator names; verify withevaluator_catalog_getbefore treating them as remote evaluators.name-> local eval/suite candidate; verify remotely before persisting assuiteName.options.eval_model,options.optimization_model,options.max_candidates,options.optimization_config.model_search_space,options.pass_threshold,max_samples,trace_days, andgeneration_instruction-> setup defaults.
Treat eval.yaml as local evaluation intent, not proof that a Foundry suite exists. Persist synced suite/dataset/evaluator references to .foundry only after remote lookup or registration succeeds.
Step 5: Resolve Common Configuration
Layer sources in this order:
- Explicit user input and values already selected in the session
- azd environment values for deployment context
.foundry/agent-metadata*.yamloverlay values and remote suite/cache referencesazure.yamlandeval.yamllocal source configuration- User prompts for anything still missing
If azd and metadata both provide the same value and they differ, stop and ask which source is authoritative. If they match, use the azd value and avoid rewriting the duplicate on future metadata writes.
| Effective Value | Preferred Source | Used By |
|---|---|---|
| Project endpoint | azd env | deploy, invoke, observe, trace, troubleshoot |
| Agent name/version | azd agent variables, then azure.yaml |
invoke, observe, trace, troubleshoot |
| ACR | azd env | deploy |
| Evaluation suites and cache paths | .foundry/agent-metadata*.yaml |
observe, eval-datasets |
| Local seed dataset/evaluator intent | eval.yaml |
observe, eval-datasets |
Step 6: Write Metadata Overlay (Create/Deploy/Observe Only)
On any metadata write (deploy, auto-setup, dataset refresh, or trace-to-dataset update), persist only non-derivable overlay/cache state in the selected metadata file:
- azd binding (
azd.environmentName,azd.service) when useful for future resolution evaluationSuites[]with remote suite/dataset/evaluator references and local cache pathslastEval, result files, comparison summaries, or explicit non-azd overrides
Do not copy azd-owned deployment values into metadata when azd already provides them. If the selected file is a preferred single-environment file, rewrite only that one environment block. If the selected file is a legacy multi-environment file, rewrite only the selected environment block. Never copy or merge environments across sibling metadata files automatically. If the selected environment still uses older testSuites[] or legacy testCases[], rewrite it to evaluationSuites[] and remove migrated priority fields from the rewritten entries.
Files in this skill
200microsoft-foundry skill questions
How do I install the microsoft-foundry skill in Claude Code?
Run npx degit microsoft/azure-skills/skills/microsoft-foundry ~/.claude/skills/microsoft-foundry. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the microsoft-foundry skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.
What should I do before starting any workflow in this skill?
You must run the dependency check and setup script from the skill's root and wait for it to finish.
Can I use this skill for deploying Azure Functions?
No, this skill should not be used for Azure Functions or App Service; use azure-deploy for general Azure deployment instead.
How do I optimize my agent's prompts or instructions?
You should load the 'observe' sub-skill and use the prompt_optimize MCP tool through its evaluation-driven workflow.