{"owner":"microsoft","repo":"agent-framework","hasSkills":true,"totalSkillsCount":169,"totalTokensCount":66716,"categories":["anthropic-skill","copilot-instructions","root-instruction","plugin-manifest","subagent-persona"],"hasMcp":true,"mcpConfig":{"mcpServers":{"agent-framework":{"command":"npx","args":["-y","@modelcontextprotocol/server-agent-framework"]}}},"found":["dotnet/.github/skills/pull-requests/SKILL.md","dotnet/.github/skills/project-structure/SKILL.md","dotnet/.github/skills/verify-dotnet-samples/SKILL.md","python/.github/skills/python-testing/SKILL.md","dotnet/.github/skills/build-and-test/SKILL.md",".github/skills/pull-requests/SKILL.md","dotnet/.github/skills/verify-samples-tool/SKILL.md","python/.github/skills/python-feature-lifecycle/SKILL.md","python/.github/skills/python-development/SKILL.md","python/.github/skills/pull-requests/SKILL.md","python/.github/skills/python-package-management/SKILL.md","python/.github/skills/python-code-quality/SKILL.md","python/.github/skills/agent-framework-py-release/SKILL.md","python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md","python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md","dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md","dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md","dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md","dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md","python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md","python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md","python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md","python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md","python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md","python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md","python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md","python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md",".github/copilot-instructions.md","dotnet/AGENTS.md","python/AGENTS.md","python/packages/tools/README.md","python/packages/redis/AGENTS.md","python/packages/redis/README.md","python/packages/purview/AGENTS.md","python/packages/purview/README.md","python/packages/orchestrations/README.md","python/packages/openai/AGENTS.md","python/packages/openai/README.md","python/packages/ollama/AGENTS.md","python/packages/ollama/README.md","python/packages/monty/AGENTS.md","python/packages/monty/README.md","python/packages/mistral/AGENTS.md","python/packages/mistral/README.md","python/packages/mem0/AGENTS.md","python/packages/mem0/README.md","python/packages/lab/AGENTS.md","python/packages/lab/README.md","python/packages/hyperlight/README.md","python/packages/hosting-telegram/README.md","python/packages/hosting-responses/README.md","python/packages/hosting-mcp/AGENTS.md","python/packages/hosting-mcp/README.md","python/packages/hosting-a2a/AGENTS.md","python/packages/hosting-a2a/README.md","python/packages/hosting/README.md","python/packages/github_copilot/AGENTS.md","python/packages/github_copilot/README.md","python/packages/gemini/AGENTS.md","python/packages/gemini/README.md","python/packages/foundry_local/AGENTS.md","python/packages/foundry_local/README.md","python/packages/foundry_hosting/README.md","python/packages/foundry/README.md","python/packages/devui/AGENTS.md","python/packages/devui/dev.md","python/packages/devui/README.md","python/packages/declarative/AGENTS.md","python/packages/declarative/README.md","python/packages/core/AGENTS.md","python/packages/core/pyrightconfig.dependency.json","python/packages/core/README.md","python/packages/copilotstudio/AGENTS.md","python/packages/copilotstudio/README.md","python/packages/claude/AGENTS.md","python/packages/claude/README.md","python/packages/chatkit/AGENTS.md","python/packages/chatkit/README.md","python/packages/bedrock/AGENTS.md","python/packages/bedrock/README.md","python/packages/azure-cosmos-memory/AGENTS.md","python/packages/azure-cosmos-memory/README.md","python/packages/azure-cosmos/AGENTS.md","python/packages/azure-cosmos/README.md","python/packages/azure-contentunderstanding/AGENTS.md","python/packages/azure-contentunderstanding/README.md","python/packages/azure-ai-search/AGENTS.md","python/packages/azure-ai-search/README.md","python/packages/anthropic/AGENTS.md","python/packages/anthropic/README.md","python/packages/ag-ui/AGENTS.md","python/packages/ag-ui/README.md","python/packages/a2a/AGENTS.md","python/packages/a2a/README.md","dotnet/samples/02-agents/Agents/README.md","python/packages/lab/gaia/README.md","python/packages/lab/lightning/README.md","python/packages/lab/tau2/README.md","python/packages/devui/frontend/components.json","python/packages/devui/frontend/package.json","python/packages/devui/frontend/package-lock.json","python/packages/devui/frontend/README.md","python/packages/devui/frontend/tsconfig.app.json","python/packages/devui/frontend/tsconfig.json","python/packages/devui/frontend/tsconfig.node.json","python/packages/core/.vscode/launch.json","python/packages/ag-ui/agent_framework_ag_ui_examples/README.md","python/packages/ag-ui/getting_started/README.md","python/samples/02-agents/skills/README.md","python/samples/02-agents/tools/README.md","dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md","dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md","dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md","dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md","dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md","dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md","dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md","dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md","dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md","dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md","dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md","dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md","dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md","dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md","dotnet/src/Shared/Foundry/Agents/README.md","python/packages/declarative/tests/workflows/http_request.yaml","python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json","python/samples/02-agents/skills/mixed_skills/README.md","python/samples/02-agents/skills/mcp_based_skill/README.md","python/samples/02-agents/skills/file_based_skill/README.md","python/samples/02-agents/skills/code_defined_skill/README.md","python/samples/02-agents/skills/class_based_skill/README.md","python/samples/02-agents/skills/script_approval/README.md","python/samples/02-agents/skills/skill_filtering/README.md","python/samples/02-agents/skills/skills_auto_approval/README.md","python/samples/02-agents/tools/local_code_interpreter/README.md","python/samples/02-agents/tools/monty_code_interpreter/README.md","python/samples/03-workflows/declarative/function_tools/README.md","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md","dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md","dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json","dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json","python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml","python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml","python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md","dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md","dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md","dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md","dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md","python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md","python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md","python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md","python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md"],"skills":{"dotnet/.github/skills/pull-requests/SKILL.md":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","dotnet/.github/skills/project-structure/SKILL.md":"---\nname: project-structure\ndescription: Explains the project structure of the agent-framework .NET solution\n---\n\n# Agent Framework .NET Project Structure\n\n```\ndotnet/\n├── src/\n│   ├── Microsoft.Agents.AI/                      # Core AI agent implementations\n│   ├── Microsoft.Agents.AI.Abstractions/         # Core AI agent abstractions\n│   ├── Microsoft.Agents.AI.A2A/                  # Agent-to-Agent (A2A) provider\n│   ├── Microsoft.Agents.AI.OpenAI/               # OpenAI provider\n│   ├── Microsoft.Agents.AI.Foundry/               # Microsoft Foundry Agents (v2) provider\n│   ├── Microsoft.Agents.AI.AzureAI.Persistent/   # Legacy Microsoft Foundry Agents (v1) provider\n│   ├── Microsoft.Agents.AI.Anthropic/            # Anthropic provider\n│   ├── Microsoft.Agents.AI.Workflows/            # Workflow orchestration\n│   └── ...                                       # Other packages\n├── samples/                                      # Sample applications\n└── tests/                                        # Unit and integration tests\n```\n\n## Main Folders\n\n| Folder | Contents |\n|--------|----------|\n| `src/` | Source code projects |\n| `tests/` | Test projects — named `<Source-Code-Project>.UnitTests` or `<Source-Code-Project>.IntegrationTests` |\n| `samples/` | Sample projects |\n| `src/Shared`, `src/LegacySupport` | Shared code files included by multiple source code projects (see README.md files in these folders or their subdirectories for instructions on how to include them in a project) |\n","dotnet/.github/skills/verify-dotnet-samples/SKILL.md":"---\nname: verify-dotnet-samples\ndescription: How to build, run and verify the .NET sample projects in the Agent Framework repository. Use this when a user wants to verify that the samples still function as expected.\n---\n\n# Verifying .NET Sample Projects\n\n## Sample Pre-requisites\n\nWe should only support verifying samples that:\n1. Use environment variables for configuration.\n2. Have no complex setup requirements, e.g., where multiple applications need to be run together, or where we need to launch a browser, etc.\n\nAlways report to the user which samples were run and which were not, and why.\n\n## Verifying a sample\n\nSamples should be verified to ensure that they actually work as intended and that their output matches what is expected.\nFor each sample that is run, output should be produced that shows the result and explains the reasoning about what output\nwas expected, what was produced, and why it didn't match what the sample was expected to produce.\n\nSteps to verify a sample:\n1. Read the code for the sample\n1. Check what environment variables are required for the sample\n1. Check if each environment variable has been set\n1. If there are any missing, give the user a list of missing environment variables to set and terminate\n1. Summarize what the expected output of the sample should be\n1. Run the sample\n1. Show the user any output from the sample run as it gets produced, so that they can see the run progress\n1. Check the output of the run against expectations\n1. After running all requested samples, produce output for each sample that was verified:\n  1. If expectations were matched, output the following:\n     ```text\n     [Sample Name] Succeeded\n     ```\n  1. If expectations were not matched, output the following:\n     ```text\n     [Sample Name] Failed\n     Actual Output:\n     [What the sample produced]\n     Expected Output:\n     [Explanation of what was expected and why the actual output didn't match expectations]\n     ```\n\n## Environment Variables\n\nMost samples use environment variables to configure settings.\n\n```csharp\nvar endpoint = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_ENDPOINT\") ?? throw new InvalidOperationException(\"AZURE_OPENAI_ENDPOINT is not set.\");\nvar deploymentName = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_DEPLOYMENT_NAME\") ?? \"gpt-4o-mini\";\n```\n\nTo run a sample, the environment variables should be set first.\nBefore running a sample, check whether each environment variable in the sample has a value and\nthen give the user a list of environment variables to set.\n\nYou can provide the user some examples of how to set the variables like this:\n\n```bash\nexport AZURE_OPENAI_ENDPOINT=\"https://my-openai-instance.openai.azure.com/\"\nexport AZURE_OPENAI_DEPLOYMENT_NAME=\"gpt-4o-mini\"\n```\n\nTo check if a variable has a value use e.g.:\n\n```bash\necho $AZURE_OPENAI_ENDPOINT\n```\n\n## How to Run a Sample (General Pattern)\n\n```bash\ncd dotnet/samples/<category>/<sample-dir>\ndotnet run\n```\n\nFor multi-targeted projects (e.g., Durable console apps), specify the framework:\n\n```bash\ndotnet run --framework net10.0\n```\n","python/.github/skills/python-testing/SKILL.md":"---\nname: python-testing\ndescription: >\n  Guidelines for writing and running tests in the Agent Framework Python\n  codebase. Use this when creating, modifying, or running tests.\n---\n\n# Python Testing\n\nCI enforces at least 85% line coverage for every package classified Beta or Production/Stable.\nAlpha packages are report-only, and the DevUI and experimental Lab packages are excluded from\naggregate coverage enforcement. Tests should be fast, reliable, and maintainable.\nWhen adding new code, check that the relevant sections of the codebase are covered by tests, and add new tests as needed. When modifying existing code, update or add tests to cover the changes.\nWe run tests in two stages, for a PR each commit is tested with unit tests only (using `-m \"not integration\"`), and the full suite including integration tests is run when merging.\n\nWhen an API is marked as deprecated, migrate ordinary tests to its replacement in the same change. Retain only\nfocused tests that validate the deprecated behavior and warning; integration tests, samples, and unrelated unit\ntests should use the supported API.\n\n## Running Tests\n\n```bash\n# Run tests for all packages in parallel\nuv run poe test\n\n# Run tests for a specific workspace package\nuv run poe test -P core\n\n# Run all selected tests in a single pytest invocation\nuv run poe test -A\n\n# With coverage\nuv run poe test -A -C\nuv run poe test -P core -C\n\n# Run only unit tests (exclude integration tests)\nuv run poe test -A -m \"not integration\"\n\n# Run only integration tests\nuv run poe test -A -m integration\n```\n\nDirect package execution still works when you need it:\n\n```bash\nuv run --directory packages/core poe test\n```\n\n## Test Configuration\n\n- **Async mode**: `asyncio_mode = \"auto\"` is enabled — do NOT use `@pytest.mark.asyncio`, but do mark tests with `async def` and use `await` for async calls\n- **Timeout**: Default 60 seconds per test\n- **Import mode**: `importlib` for cross-package isolation\n- **Parallelization**: Large packages (core, ag-ui, orchestrations, anthropic) use `pytest-xdist` (`-n auto --dist worksteal`) in their `poe test` task. The aggregate `uv run poe test -A` sweep also uses xdist across the selected packages.\n\n## Test Directory Structure\n\nTest directories must NOT contain `__init__.py` files.\n\nNon-core packages must place tests in a uniquely-named subdirectory:\n\n```\npackages/anthropic/\n├── tests/\n│   └── anthropic/       # Unique subdirectory matching package name\n│       ├── conftest.py\n│       └── test_client.py\n```\n\nCore package can use `tests/` directly with topic subdirectories:\n\n```\npackages/core/\n├── tests/\n│   ├── conftest.py\n│   ├── core/\n│   │   └── test_agents.py\n│   └── openai/\n│       └── test_client.py\n```\n\n## Fixture Guidelines\n\n- Use `conftest.py` for shared fixtures within a test directory\n- Before adding new fixtures, check if existing ones can be reused or extended\n- Use descriptive names: `mapper`, `test_request`, `mock_client`\n\n## File Naming\n\n- Files starting with `test_` are test files — do not use this prefix for helpers\n- Prefer extending an existing test file that already covers the same component or behavior; create a new file only for a distinct surface without an appropriate existing file\n- Use `conftest.py` for shared utilities\n\n## Integration Tests\n\nIntegration tests require external services (OpenAI, Azure, etc.) and are controlled by three markers:\n\n1. **`@pytest.mark.flaky`** — marks the test as potentially flaky since it depends on external services\n2. **`@pytest.mark.integration`** — used for test selection, so integration tests can be included/excluded with `-m integration` / `-m \"not integration\"`\n3. **`@skip_if_..._integration_tests_disabled`** decorator — skips the test when the required API keys or service endpoints are missing\n\n### Adding New Integration Tests\n\nAll three markers must be applied to every new integration test:\n\n```python\n@pytest.mark.flaky\n@pytest.mark.integration\n@skip_if_openai_integration_tests_disabled\nasync def test_openai_chat_completion() -> None:\n    ...\n```\n\nFor test files where all tests are integration tests (e.g., Azure Functions, Durable Task), use the module-level `pytestmark` list:\n\n```python\npytestmark = [\n    pytest.mark.flaky,\n    pytest.mark.integration,\n    pytest.mark.sample(\"01_single_agent\"),\n    pytest.mark.usefixtures(\"function_app_for_test\"),\n]\n```\n\n### CI Workflow\n\nThe merge CI workflow (`python-merge-tests.yml`) splits integration tests into parallel jobs by provider with change-based detection:\n\n- **Unit tests** — always run all non-integration tests\n- **OpenAI integration** — runs when `packages/core/agent_framework/openai/` or core infrastructure changes\n- **Azure OpenAI integration** — runs when `packages/core/agent_framework/azure/` or core changes\n- **Misc integration** — Anthropic, Ollama, MCP tests; runs when their packages or core change\n- **Functions integration** — Azure Functions + Durable Task; runs when their packages or core change\n- **Foundry integration** — runs when `packages/foundry/` or core changes\n\nCore infrastructure changes (e.g., `_agents.py`, `_types.py`) trigger all integration test jobs. Scheduled and manual runs always execute all jobs.\n\n### Keeping CI Workflows in Sync\n\nTwo workflow files define the same set of parallel test jobs:\n\n- **`python-merge-tests.yml`** — runs on PRs, merge queue, schedule, and manual dispatch. Uses path-based change detection to skip unaffected integration jobs.\n- **`python-integration-tests.yml`** — called from the manual integration test orchestrator (`integration-tests-manual.yml`). Always runs all jobs (no path filtering).\n\nThese workflows must be kept in sync. When you add, remove, or modify a test job, update **both** files. The job structure, pytest commands, and xdist flags should match between them. The only difference is that `python-merge-tests.yml` has path filters and conditional job execution, while `python-integration-tests.yml` does not.\n\n### Updating the CI When Adding Integration Tests for a New Provider\n\nWhen adding integration tests for a new provider package, you must update **both** `python-merge-tests.yml` and `python-integration-tests.yml`:\n\n1. **Add a path filter** for the new provider in the `paths-filter` job in `python-merge-tests.yml` so the CI knows which file changes should trigger those tests.\n2. **Add the test job to both workflow files** — either add them to the existing `python-tests-misc-integration` job, or create a dedicated job if the provider:\n   - Has a large number of integration tests\n   - Requires special infrastructure setup (emulators, Docker containers, etc.)\n   - Has long-running tests that would slow down the misc job\n\nThe `python-tests-misc-integration` job is intended for small integration test suites that don't need dedicated infrastructure. When a provider's integration tests grow large or gain special requirements, split them out into their own job (like `python-tests-functions` was split out for Azure Functions + Durable Task).\n\n## Best Practices\n\n- Run only related tests, not the entire suite\n- Review existing tests to understand coding style before creating new ones\n- Use print statements for debugging, then remove them when done\n- Resolve all errors and warnings before committing\n","dotnet/.github/skills/build-and-test/SKILL.md":"---\nname: build-and-test\ndescription: How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.\n---\n\n- Only **UnitTest** projects need to be run locally; IntegrationTests require external dependencies.\n- See `../project-structure/SKILL.md` for project structure details.\n\n## Build, Test, and Lint Commands\n\n```bash\n# From dotnet/ directory\ndotnet restore --tl:off   # Restore dependencies for all projects\ndotnet build --tl:off     # Build all projects\ndotnet test               # Run all tests\ndotnet format             # Auto-fix formatting for all projects\n\n# Build/test/format a specific project (preferred for isolated/internal changes)\ndotnet build src/Microsoft.Agents.AI.<Package> --tl:off\ndotnet test --project tests/Microsoft.Agents.AI.<Package>.UnitTests\ndotnet format src/Microsoft.Agents.AI.<Package>\n\n# Run a single test\n# Replace the filter values with the appropriate assembly, namespace, class, and method names for the test you want to run and use * as a wildcard elsewhere, e.g. \"/*/*/HttpClientTests/GetAsync_ReturnsSuccessStatusCode\"\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for some projects\ndotnet test --filter-query \"/<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>\" --ignore-exit-code 8\n\n# Run unit tests only\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for integration test projects\ndotnet test --filter-query \"/*UnitTests*/*/*/*\" --ignore-exit-code 8\n```\n\nUse `--tl:off` when building to avoid flickering when running commands in the agent.\n\n## Speeding Up Builds and Testing\n\nThe full solution is large. Use these shortcuts:\n\n| Change type | What to do |\n|-------------|------------|\n| Isolated/Internal logic | Build only the affected project and its `*.UnitTests` project. Fix issues, then build the full solution and run all unit tests. |\n| Public API surface | Build the full solution and run all unit tests immediately. |\n\nExample: Building a single code project for all target frameworks\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions\n```\n\nExample: Building a single code project for just .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions -f net10.0\n```\n\nExample: Running tests for a single project using .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0\n```\n\nExample: Running a single test in a specific project using .NET 10.\nProvide the full namespace, class name, and method name for the test you want to run:\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0 --filter-query \"/*/Microsoft.Agents.AI.Abstractions.UnitTests/AgentRunOptionsTests/CloningConstructorCopiesProperties\"\n```\n\n### Multi-target framework tip\n\nMost projects target multiple .NET frameworks. If the affected code does **not** use `#if` directives for framework-specific logic, pass `-f net10.0` to speed up building and testing.\n\n### Package Restore tip\n\n`dotnet build` will try and restore packages for all projects on each build, which can be slow.\nUnless packages have been changed, or it's the first time building the solution, add `--no-restore` to the build command to skip this step and speed up builds.\n\nJust remember to run `dotnet restore` after pulling changes, making changes to project references, or when building for the first time.\n\n### Testing on Linux tip\n\nUnit tests target both .NET Framework as well as .NET Core. When running on Linux, only the .NET Core tests can be run, as .NET Framework is not supported on Linux.\n\nTo run only the .NET Core tests, use the `-f net10.0` option with `dotnet test`.\n\n### Microsoft Testing Platform (MTP)\n\nTests use the [Microsoft Testing Platform](https://learn.microsoft.com/dotnet/core/testing/unit-testing-platform-intro) via xUnit v3. Key differences from the legacy VSTest runner:\n\n- **`dotnet test` requires `--project`** to specify a test project directly (positional arguments are no longer supported).\n- **Test output** uses the MTP format (e.g., `[✓112/x0/↓0]` progress and `Test run summary: Passed!`).\n- **TRX reports** use `--report-xunit-trx` instead of `--logger trx`.\n- **Code coverage** uses `Microsoft.Testing.Extensions.CodeCoverage` with `--coverage --coverage-output-format cobertura`.\n- **Running a test project directly** is supported via `dotnet run --project <test-project>`. This bypasses the `dotnet test` infrastructure and runs the test executable directly with the MTP command line.\n\n- **Running tests across the solution** with a filter may cause some projects to match zero tests, which MTP treats as a failure (exit code 8). Use `--ignore-exit-code 8` to suppress this:\n\n```bash\n# Run all unit tests across the solution, ignoring projects with no matching tests\ndotnet test --solution ./agent-framework-dotnet.slnx --no-build -f net10.0 --ignore-exit-code 8\n```\n\n- **Running tests with `--solution` for a specific TFM** requires all projects in the solution to support that TFM. Not all projects target every framework (e.g., some are `net10.0`-only). Use `./dotnet/eng/scripts/New-FilteredSolution.ps1` to generate a filtered solution:\n\n```powershell\n# Generate a filtered solution for net472 and run tests\n$filtered = ./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net472\ndotnet test --solution $filtered --no-build -f net472 --ignore-exit-code 8\n\n# Exclude samples and keep only unit test projects\n./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net10.0 -ExcludeSamples -TestProjectNameFilter \"*UnitTests*\" -OutputPath dotnet/filtered-unit.slnx\n```\n\n```bash\n# Run tests via dotnet test (uses MTP under the hood)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Run tests with code coverage (Cobertura format)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 --coverage --coverage-output-format cobertura --coverage-settings ./tests/coverage.runsettings\n\n# Run tests directly via dotnet run (MTP native command line)\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Show MTP command line help\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 -- -?\n```\n",".github/skills/pull-requests/SKILL.md":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Stable specifications\n\nFor Python function-calling loop changes, read\n[`docs/specs/004-python-function-calling-loop.md`](../../../docs/specs/004-python-function-calling-loop.md)\nand validate the PR against it. Do not edit that specification by default. It\nis a stable cross-package contract, not a per-PR changelog. A specification\nchange is warranted only when the PR intentionally changes normative behavior,\nthe scenario inventory, an acknowledged coverage gap, or the authoritative\nscenario-to-test mapping; keep any such edit to the smallest affected sections.\n\n### Community project listings\n\nWhen either `python/samples/community-projects.md` or\n`dotnet/samples/community-projects.md` changes, load and apply the\n[`community-projects`](../community-projects/SKILL.md) skill before reviewing\nor approving the change. Load it as well when an issue or pull request proposes\nan external project listing, even if neither catalog file has changed yet.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","dotnet/.github/skills/verify-samples-tool/SKILL.md":"﻿---\nname: verify-samples-tool\ndescription: How to use the verify-samples tool to run, verify, and manage sample definitions in the Agent Framework repository. Use this when adding, updating, or running sample verification.\n---\n\n# verify-samples Tool\n\nThe `verify-samples` project (`dotnet/eng/verify-samples/`) is an automated tool that runs sample projects and verifies their output using deterministic checks and AI-powered verification.\n\n## Running verify-samples\n\n**Important:** By default, samples must be pre-built before running verify-samples. Build the solution first, or pass `--build` to build samples during the run:\n\n```bash\ncd dotnet\ndotnet build agent-framework-dotnet.slnx -f net10.0\n```\n\nThen run verify-samples:\n\n```bash\n# Run all samples across all categories\ndotnet run --project eng/verify-samples -- --log results.log --csv results.csv\n\n# Run a specific category\ndotnet run --project eng/verify-samples -- --category 02-agents --log results.log\n\n# Run specific samples by name\ndotnet run --project eng/verify-samples -- Agent_Step02_StructuredOutput Agent_Step09_AsFunctionTool\n\n# Control parallelism (default 8)\ndotnet run --project eng/verify-samples -- --parallel 8 --log results.log\n\n# Build samples during run (skips the need for a prior build step)\n# This may cause build conflicts as multiple samples are built in parallel, so use with caution\ndotnet run --project eng/verify-samples -- --build --log results.log\n\n# Combine options\ndotnet run --project eng/verify-samples -- --category 03-workflows --parallel 4 --log results.log --csv results.csv --md results.md\n```\n\n### Required Environment Variables\n\nThe tool itself needs:\n- `AZURE_OPENAI_ENDPOINT` — for the AI verification agent\n- `AZURE_OPENAI_DEPLOYMENT_NAME` (optional, defaults to `gpt-5-mini`)\n\nIndividual samples require their own env vars (for example, `FOUNDRY_PROJECT_ENDPOINT`). The tool automatically checks and skips samples with missing env vars.\n\n### Output Files\n\n- `--log results.log` — detailed per-sample log with stdout/stderr, AI reasoning, and a summary\n- `--csv results.csv` — tabular summary with Sample, ProjectPath, Status, FailedChecks, and Failures columns\n- `--md results.md` — Markdown summary with results table and collapsible failure details (suitable for GitHub PR comments)\n\n## Sample Categories\n\nDefinitions are in the `dotnet/eng/verify-samples/` directory:\n\n| Category | Config File | Registered Key |\n|----------|-------------|----------------|\n| 01-get-started | `GetStartedSamples.cs` | `01-get-started` |\n| 02-agents | `AgentsSamples.cs` | `02-agents` |\n| 03-workflows | `WorkflowSamples.cs` | `03-workflows` |\n\nCategories are registered in `VerifyOptions.cs` in the `s_sampleSets` dictionary.\n\n## SampleDefinition Properties\n\nEach sample is defined as a `SampleDefinition` in the appropriate config file. Key properties:\n\n```csharp\nnew SampleDefinition\n{\n    // Required: Display name for the sample\n    Name = \"Agent_Step02_StructuredOutput\",\n\n    // Required: Relative path from dotnet/ to the sample project directory\n    ProjectPath = \"samples/02-agents/Agents/Agent_Step02_StructuredOutput\",\n\n    // Environment variables the sample requires (throws if missing)\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n\n    // Environment variables with defaults that would prompt on console if unset\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n\n    // Skip this sample with a reason (for structural issues only)\n    SkipReason = null, // or \"Requires external service X.\"\n\n    // Deterministic checks: substrings that must appear in stdout\n    MustContain = [\"=== Section Header ===\"],\n\n    // Substrings that must NOT appear in stdout\n    MustNotContain = [],\n\n    // If true, only MustContain checks are used (no AI verification)\n    IsDeterministic = false,\n\n    // AI verification: natural-language descriptions of expected output\n    // Each entry describes one aspect to verify independently\n    ExpectedOutputDescription =\n    [\n        \"The output should show structured person information with Name, Age, and Occupation fields.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n\n    // Stdin inputs to feed to the sample (for interactive samples)\n    Inputs = [\"Y\", \"Y\", \"Y\"],\n\n    // Delay between stdin inputs in ms (default 2000, increase for LLM calls between inputs)\n    InputDelayMs = 3000,\n}\n```\n\n## How to Add a New Sample Definition\n\n1. **Check the sample's Program.cs** to understand:\n   - What environment variables it reads (look for `GetEnvironmentVariable`)\n   - Whether it needs stdin input (look for `Console.ReadLine`, `Application.GetInput`)\n   - Whether it has an external loop (look for `EXIT` patterns in YAML workflows)\n   - What output it produces (section headers, markers, expected behavior)\n   - Whether it exits on its own or runs as a server\n\n2. **Choose the right verification strategy:**\n   - **Deterministic** (`IsDeterministic = true`): Use `MustContain` for samples with fixed output strings. No AI verification.\n   - **AI-verified** (default): Use `ExpectedOutputDescription` with semantic descriptions. Write expectations that are flexible enough for non-deterministic LLM output.\n   - **Both**: Use `MustContain` for fixed markers AND `ExpectedOutputDescription` for LLM-generated content.\n\n3. **Set `SkipReason` only for structural issues:**\n   - Web servers that don't exit\n   - Multi-process client/server architectures\n   - Samples requiring external infrastructure (MCP servers you can't reach, Docker, etc.)\n   - Do NOT skip for missing env vars — the tool checks those dynamically.\n\n4. **For interactive samples, provide `Inputs`:**\n   - Samples using `Application.GetInput(args)` need one initial input\n   - Samples with `Console.ReadLine()` approval loops need `\"Y\"` inputs\n   - YAML workflows with `externalLoop` need `\"EXIT\"` as the last input\n   - Set `InputDelayMs` to 3000-8000ms for samples with LLM calls between inputs\n\n5. **Add the definition** to the appropriate config file (e.g., `AgentsSamples.cs`) in the `All` list.\n\n6. **Register new categories** (if needed) in `VerifyOptions.cs` `s_sampleSets` dictionary.\n\n### Writing Good ExpectedOutputDescription\n\n- Write descriptions that are **semantically flexible** — LLM output varies between runs\n- Each array entry should describe **one independent aspect** to verify\n- Always include `\"The output should not contain error messages or stack traces.\"` as the last entry\n- Avoid exact wording expectations — use \"should mention\", \"should contain information about\", \"should show\"\n- Bad: `\"The output should say 'The weather in Amsterdam is cloudy with a high of 15°C'\"`\n- Good: `\"The output should contain weather information about Amsterdam mentioning cloudy weather with a high of 15°C.\"`\n\n### Example: Simple LLM Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_With_AzureOpenAIChatCompletion\",\n    ProjectPath = \"samples/02-agents/AgentProviders/azure/Agent_With_AzureOpenAIChatCompletion\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    ExpectedOutputDescription =\n    [\n        \"The output should contain a joke about a pirate.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n},\n```\n\n### Example: Deterministic Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Visualization\",\n    ProjectPath = \"samples/03-workflows/Visualization\",\n    IsDeterministic = true,\n    MustContain = [\"Generating workflow visualization...\", \"Mermaid string:\", \"DiGraph string:\"],\n    ExpectedOutputDescription = [\"The output should show workflow visualization in Mermaid and DiGraph formats.\"],\n},\n```\n\n### Example: Interactive Sample with Approval Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"FoundryAgent_Hosted_MCP\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/FoundryAgent_Hosted_MCP\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"Y\", \"Y\", \"Y\", \"Y\", \"Y\"],\n    InputDelayMs = 5000,\n    ExpectedOutputDescription = [\"The output should show an agent using the Microsoft Learn MCP tool with approval prompts.\"],\n},\n```\n\n### Example: Declarative Workflow with External Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Declarative_FunctionTools\",\n    ProjectPath = \"samples/03-workflows/Declarative/FunctionTools\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"What are today's specials?\", \"EXIT\"],\n    InputDelayMs = 8000,\n    ExpectedOutputDescription = [\"The output should show a workflow calling function tools to answer a question about restaurant specials.\"],\n},\n```\n\n### Example: Skipped Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_MCP_Server\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/Agent_MCP_Server\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    SkipReason = \"Runs as an MCP stdio server that does not exit on its own.\",\n},\n```\n\n","python/.github/skills/python-feature-lifecycle/SKILL.md":"---\nname: python-feature-lifecycle\ndescription: >\n  Guidance for package and feature lifecycle in the Agent Framework Python\n  codebase, including stage meanings, feature-stage decorators, feature enums,\n  and how to move APIs from one stage to the next.\n---\n\n# Python Feature Lifecycle\n\n## Two lifecycle levels\n\nAgent Framework uses lifecycle at two different levels:\n\n1. **Package lifecycle** — the maturity of the package as a whole\n2. **Feature lifecycle** — the maturity of a specific API or feature inside that package\n\nThese are related, but they are **not the same thing**.\n\n- The **package stage is the default** for everything in the package.\n- **Feature-stage decorators are only for exceptions** when a feature is behind the package's default stage.\n- Do **not** decorate every class or function just because the package is experimental or release candidate.\n\nThis skill describes staged API behavior within a package. For creating or promoting a package, including sample\nplacement, meta-package membership, versioning, and lazy-loading namespace decisions, follow the\n`python-package-management` skill.\n\n### Important default\n\nIf a package is still in **beta / experimental preview**, all public APIs in that package are experimental by default.\n\n- Do **not** add `@experimental(...)` everywhere in that package.\n- The package stage already communicates that default.\n\nOnce a package moves forward, you can keep individual features behind:\n\n- If a package moves to **release candidate**, a feature may remain **experimental**\n- If a package moves to **released / GA**, a feature may remain **experimental** or **release candidate**\n\nThat is the main use case for feature-stage decorators.\n\n## The four stages\n\n### 1. Experimental\n\nUse for features that are still unstable and may change or be removed without notice.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ExperimentalFeature, experimental\n\n\n@experimental(feature_id=ExperimentalFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds an experimental warning block to the docstring\n- Records feature metadata on the decorated object\n- Emits a runtime warning the first time the feature is used (once per feature by default)\n\nEnum setup:\n\n- Add an all-caps member to `ExperimentalFeature`\n- Reuse the same feature ID across all APIs that belong to the same conceptual feature\n\n### 2. Release candidate\n\nUse for features that are nearly stable but may still receive small refinements before GA.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ReleaseCandidateFeature, release_candidate\n\n\n@release_candidate(feature_id=ReleaseCandidateFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds a release-candidate note to the docstring\n- Records feature metadata on the decorated object\n- Does **not** emit the experimental warning\n\nEnum setup:\n\n- Add an all-caps member to `ReleaseCandidateFeature`\n\n### 3. Released\n\nUse for stable GA APIs.\n\nCode pattern:\n\n- **No feature-stage decorator**\n- **No entry** in `ExperimentalFeature`\n- **No entry** in `ReleaseCandidateFeature`\n\nIf a feature is fully released, remove any stage-specific feature annotation.\n\n### 4. Deprecated\n\nUse for APIs that still exist but should not be used for new code.\n\nCode pattern:\n\n```python\nimport sys\n\nif sys.version_info >= (3, 13):\n    from warnings import deprecated  # type: ignore # pragma: no cover\nelse:\n    from typing_extensions import deprecated  # type: ignore # pragma: no cover\n\n\n@deprecated(\"MyOldFeature is deprecated. Use MyNewFeature instead.\")\nclass MyOldFeature:\n    ...\n```\n\nBehavior:\n\n- Uses the repository's version-conditional deprecation import pattern\n- Should describe what to use instead\n\nDeprecated APIs should not also carry feature-stage decorators.\n\n## Expected decorators by stage\n\n| Feature stage | Expected annotation |\n| --- | --- |\n| Experimental | `@experimental(feature_id=ExperimentalFeature.X)` |\n| Release candidate | `@release_candidate(feature_id=ReleaseCandidateFeature.X)` |\n| Released | No feature-stage decorator |\n| Deprecated | `@deprecated(\"...\")` |\n\n## Feature enums\n\nThe feature enums are the inventory of currently staged features:\n\n- `ExperimentalFeature`\n- `ReleaseCandidateFeature`\n\nGuidance:\n\n- Use one enum member per conceptual feature, not per class\n- Ideally, an ADR already defines the overall feature boundary and therefore the feature ID that staged APIs for that feature should reuse\n- Keep feature IDs all caps\n- Reuse the same member across related APIs for the same feature\n- Remove enum members when the feature no longer belongs to that stage\n- Treat these enums as **current-stage inventories**, not as a stable consumer introspection API\n\nMinimal consumer guidance:\n\n- Treat `__feature_stage__` and `__feature_id__` as optional staged metadata, not as stable contracts\n- Use `getattr(obj, \"__feature_stage__\", None)` and `getattr(obj, \"__feature_id__\", None)` rather than direct attribute access\n- Treat missing metadata as \"no explicit feature-stage annotation\"\n- For warning filters while a feature is staged, match the literal feature ID string\n- Do **not** rely on `ExperimentalFeature.X`, `ReleaseCandidateFeature.X`, or the continued presence of `__feature_id__` after a feature moves stages or is released\n\nFor consumers, the enums are also re-exported from `agent_framework`.\n\nFor internal implementation code inside `agent_framework`, continue to import the enums and decorators from `._feature_stage`.\n\n## Package stage vs feature stage\n\nUse the following rules:\n\n### Package is experimental / beta\n\n- All public APIs are experimental by default\n- Do **not** add feature-stage decorators just to restate that\n- Only introduce feature-level annotations later if the package advances first\n\n### Package is release candidate\n\n- All public APIs are RC by default\n- Do **not** decorate everything\n- Add `@experimental(...)` only for features that are intentionally still behind the package\n\n### Package is released / GA\n\n- All public APIs are released by default\n- Add `@experimental(...)` or `@release_candidate(...)` only for features still being held back\n\n## Moving a feature from one stage to the next\n\n### Experimental -> Release candidate\n\n1. Move the feature ID from `ExperimentalFeature` to `ReleaseCandidateFeature`\n2. Replace `@experimental(...)` with `@release_candidate(...)`\n3. Update any tests or docs that mention the old stage\n\n### Experimental -> Released\n\n1. Remove `@experimental(...)`\n2. Remove the feature from `ExperimentalFeature`\n3. Do not add a replacement feature-stage decorator\n\n### Release candidate -> Released\n\n1. Remove `@release_candidate(...)`\n2. Remove the feature from `ReleaseCandidateFeature`\n3. Leave the API undecorated\n\n### Any stage -> Deprecated\n\n1. Remove any feature-stage decorator\n2. Remove the feature from the stage enum\n3. Add `@deprecated(\"...\")`\n4. Update docs/tests to reflect the replacement path\n\n## Promotion guidance\n\nFeatures do **not** have to pass through every stage.\n\n- It is usually a good idea to move features in order when that reflects reality\n- But it is completely acceptable to go **experimental -> released**\n- Do **not** force a feature through release candidate if there is no real RC period\n\nLikewise, when a package advances, do not automatically move every feature with it.\n\n- Promote features based on actual readiness\n- Keep lagging features explicitly marked only when they are behind the package default\n\n## Practical rules of thumb\n\n- **Package default first, feature exceptions second**\n- **Do not decorate everything in preview packages**\n- **Do not double-annotate members of an already-staged class**\n- **Use enums only for currently staged features**\n- **Do not treat stage enums as a compatibility contract**\n- **Treat `__feature_stage__` and `__feature_id__` as optional metadata; use `getattr`**\n- **Remove stage annotations once a feature is released or deprecated**\n","python/.github/skills/python-development/SKILL.md":"---\nname: python-development\ndescription: >\n  Coding standards, conventions, and patterns for developing Python code in the\n  Agent Framework repository. Use this when writing or modifying Python source\n  files in the python/ directory.\n---\n\n# Python Development Standards\n\n## File Header\n\nEvery `.py` file must start with:\n\n```python\n# Copyright (c) Microsoft. All rights reserved.\n```\n\n## Type Annotations\n\n- Always specify return types and parameter types\n- Use `Type | None` instead of `Optional[Type]`\n- Use `from __future__ import annotations` to enable postponed evaluation\n- Use suffix `T` for TypeVar names: `ChatResponseT = TypeVar(\"ChatResponseT\", bound=ChatResponse)`\n- Use `Mapping` instead of `MutableMapping` for read-only input parameters\n- Prefer `# type: ignore[...]` over unnecessary casts, or `isinstance` checks, when these are internally called and executed methods\n    But make sure the ignore is specific for both mypy and pyright so that we don't miss other mistakes\n- Internal private helpers may be used across `agent_framework*` modules when intentional; use a targeted\n  `# pyright: ignore[reportPrivateUsage]` instead of making the helper public just to satisfy pyright.\n- Do not add trivial pass-through or one-line helper functions solely to appease typing. Prefer targeted ignores,\n  casts, or clearer annotations over adding runtime overhead without a design benefit.\n\n## Function Parameters\n\n- Positional parameters: up to 3 fully expected parameters\n- Use keyword-only arguments (after `*`) for optional parameters\n- Provide string-based overrides to avoid requiring extra imports:\n\n```python\ndef create_agent(name: str, tool_mode: Literal['auto', 'required', 'none'] | ChatToolMode) -> Agent:\n    if isinstance(tool_mode, str):\n        tool_mode = ChatToolMode(tool_mode)\n```\n\n- Avoid shadowing built-ins (use `next_handler` instead of `next`)\n- Avoid `**kwargs` unless needed for subclass extensibility; prefer named parameters\n\n## Docstrings\n\nUse Google-style docstrings for all public APIs:\n\n```python\ndef equal(arg1: str, arg2: str) -> bool:\n    \"\"\"Compares two strings and returns True if they are the same.\n\n    Args:\n        arg1: The first string to compare.\n        arg2: The second string to compare.\n\n    Returns:\n        True if the strings are the same, False otherwise.\n\n    Raises:\n        ValueError: If one of the strings is empty.\n    \"\"\"\n```\n\n- Always document Agent Framework specific exceptions\n- Explicitly use `Keyword Args` when applicable\n- Only document standard Python exceptions when the condition is non-obvious\n\n## Import Structure\n\n```python\n# Core\nfrom agent_framework import Agent, Message, tool\n\n# Components\nfrom agent_framework.observability import enable_sensitive_telemetry\n\n# Connectors (lazy-loaded)\nfrom agent_framework.openai import OpenAIChatClient\nfrom agent_framework.foundry import FoundryChatClient\n```\n\n## Public API and Exports\n\nIn `__init__.py` files that define package-level public APIs, use direct re-export imports plus an explicit\n`__all__`. Avoid identity aliases like `from ._agents import Agent as Agent`, and avoid\n`from module import *`.\n\nDo not define `__all__` in internal non-`__init__.py` modules. Exception: modules intentionally exposed as a\npublic import surface (for example, `agent_framework.observability`) should define `__all__`.\n\n```python\n__all__ = [\"Agent\", \"Message\", \"ChatResponse\"]\n\nfrom ._agents import Agent\nfrom ._types import Message, ChatResponse\n```\n\nSpecial case: the root `agent_framework/__init__.py` uses lazy runtime exports. For root public API changes:\n- Add the symbol to `_LAZY_MODULE_EXPORTS` and keep `_LAZY_EXPORTS` derived from it.\n- Keep the explicit runtime `__all__` synchronized; it is still required for `from agent_framework import *`.\n- Add the same public symbol to `agent_framework/__init__.pyi` so pyright, mypy, and editors see the typed surface.\n- Put runtime deprecation behavior in the owning module via that module's `__getattr__`; avoid root-level\n  special-case branches for individual deprecated exports.\n- Identity aliases are appropriate in `.pyi` stubs because they mark re-exported names for type checkers; avoid them\n  in runtime `.py` modules unless there is a specific compatibility reason.\n\n## Performance Guidelines\n\n- Cache expensive computations (e.g., JSON schema generation)\n- Prefer `match/case` on `.type` attribute over `isinstance()` in hot paths\n- Avoid redundant serialization — compute once, reuse\n\n## Style\n\n- Line length: 120 characters\n- Format only files you changed, not the entire codebase\n- Prefer attributes over inheritance when parameters are mostly the same\n- Async by default — assume everything is asynchronous\n\n## Naming Conventions for Connectors\n\n- `_prepare_<object>_for_<purpose>` for methods that prepare data for external services\n- `_parse_<object>_from_<source>` for methods that process data from external services\n","python/.github/skills/pull-requests/SKILL.md":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","python/.github/skills/python-package-management/SKILL.md":"---\nname: python-package-management\ndescription: >\n  Guide for managing packages in the Agent Framework Python monorepo, including\n  creating new connector packages, versioning, and the lazy-loading pattern.\n  Use this when adding, modifying, or releasing packages.\n---\n\n# Python Package Management\n\n## Monorepo Structure\n\n```\npython/\n├── pyproject.toml              # Root package (agent-framework)\n├── packages/\n│   ├── core/                   # agent-framework-core (main package)\n│   ├── foundry/                # agent-framework-foundry\n│   ├── lab/                    # Standalone uv project, excluded from the root workspace\n│   ├── anthropic/              # agent-framework-anthropic\n│   └── ...                     # Other connector packages\n```\n\n- `agent-framework-core` contains core abstractions and OpenAI/Azure OpenAI built-in\n- Provider packages extend core with specific integrations\n- Root `agent-framework` depends on `agent-framework-core[all]`. Despite the existing extra name, this is a\n  curated standard install set, not every package at a particular lifecycle stage.\n- Entries in `agent-framework-core[all]` carry lower and upper bounds. Workspace integrations use the version\n  released with the current Core cohort as their lower bound so pip does not backtrack across old cyclic\n  `core[all] -> integration -> core` combinations.\n- `packages/lab` is intentionally excluded from the root uv workspace. It has its own\n  `pyproject.toml`, `uv.lock`, environment, CI matrix, and dependency updates so experimental\n  dependencies cannot constrain released provider packages. Lab resolves released Core and provider\n  distributions rather than local root-workspace packages.\n\n## Dependency Management\n\nUses [uv](https://github.com/astral-sh/uv) for dependency management and\n[poethepoet](https://github.com/nat-n/poethepoet) for task automation.\n\n```bash\n# Full setup (venv + install + prek hooks)\nuv run poe setup\n\n# Install dependencies from lockfile (frozen resolution with prerelease policy)\nuv run poe install\n\n# Create venv with specific Python version\nuv run poe venv --python 3.12\n\n# Intentionally upgrade a specific dependency to reduce lockfile conflicts\nuv lock --upgrade-package <dependency-name> && uv run poe install\n\n# Refresh exact development and on-demand tool pins, lockfiles, and validation\nuv run poe upgrade-dev-dependencies\n\n# Release cuts: refresh uv.lock and probe changed packages at both bound extremes.\n# The release probe has a shared five-minute deadline.\nuv run poe validate-python-release --base-ref upstream/main\n\n# Exhaustive test+typing matrix (slow; use for deliberate dependency-range work or CI)\nuv run poe validate-dependency-bounds-test\n# Defaults to --package \"*\"; scope locally whenever possible.\nuv run poe validate-dependency-bounds-test --package core\n\n# Then expand bounds for one dependency in the target package\nuv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"\n\n# Repo-wide automation can reuse the same task\nuv run poe validate-dependency-bounds-project --mode upper --package \"*\"\n\n# Add a dependency to one project and run both validators for that project/dependency\nuv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"\n\n# Work on the standalone Lab project\ncd packages/lab\nuv sync --all-extras --all-groups\nuv run poe test\n```\n\n### Dependency Bound Notes\n\n- Stable dependencies (`>=1.0`) should typically be bounded as `>=<known-good>,<next-major>`.\n- Prerelease (`dev`/`a`/`b`/`rc`) and `<1.0` dependencies should use hard bounds with an explicit upper cap (avoid open-ended ranges).\n- For `<1.0` dependencies, prefer the broadest validated range the package can really support. That may be a patch line, a minor line, or multiple minor lines when checks/tests show the broader lane is compatible.\n- Prefer supporting multiple majors when practical; if APIs diverge across supported majors, use version-conditional imports/paths.\n- For release-only version, lifecycle, pin, and internal-floor edits, use `validate-python-release`. It refreshes\n  `uv.lock`, finds changed package metadata relative to the selected main ref, and runs the changed packages'\n  published runtime dependencies and non-development extras through lock-independent `lowest-direct` and `highest`\n  import probes on the minimum Python minor supported by each package's internal editable closure. The probes run\n  concurrently under one 300-second deadline; pass `--python` only when an explicit interpreter override is needed.\n- For deliberate external dependency-range changes, use\n  `validate-dependency-bounds-project --mode both` for the target package/dependency to find and validate the actual\n  minimum and maximum constraints. Scope the exhaustive `validate-dependency-bounds-test` matrix to affected\n  packages during local iteration; reserve the workspace-wide form for CI or an intentional full audit. The same\n  project task can drive repo-wide upper-bound automation by using `--package \"*\"` and omitting `--dependency`.\n- Prefer targeted lock updates with `uv lock --upgrade-package <dependency-name>` to reduce `uv.lock` merge conflicts.\n- Use `add-dependency-and-validate-bounds` for package-scoped dependency additions plus bound validation in one command.\n- Keep the test framework and Poe in the root `dev` group across Python\n  versions. Put script-only libraries in `tool-runtime`. Put tools used by\n  only one Python version in a named `tool-*` group or pinned\n  `tooling/requirements-*.txt` file, and add the smallest relevant group or\n  bundle to each command. Keep source/type-check support that is part of a\n  package's import surface in a package dependency group. Put package-specific\n  test fixtures in a `test` group.\n- Use `upgrade-dev-dependencies` for repo-wide development and tool dependency\n  refreshes; it repins exact dependencies across development groups and\n  `tooling/requirements-*.txt`, refreshes `uv.lock`, and reruns `check` and\n  `typing`.\n- Upgrade the root uv version manually as one coordinated change across the\n  `dev` requirement, `[tool.uv].required-version`, setup workflows, and the\n  uv pre-commit revision. Automated dependency updates intentionally ignore\n  the root uv pin.\n- Run Lab dependency and validation commands from `packages/lab`; root workspace tasks deliberately do not\n  discover or update the Lab project.\n\n## Meta-package Membership\n\nPackage lifecycle and membership in the root `agent-framework` meta-package are independent decisions. A package\nstarts outside `agent-framework-core[all]`, and promotion to `beta`, `rc`, or `released` does not add it\nautomatically.\n\nAdding a package to or removing a package from the standard install set requires an agreed GitHub issue and an\nexplicit core-team decision. For additions, consider:\n\n- whether the package is useful across common Agent Framework workloads rather than for one specialized storage\n  backend, hosting adapter, channel, or deployment target;\n- whether its dependency footprint is proportionate and compatible with the meta-package's supported Python and\n  platform matrix, especially for native, heavyweight, or conflict-prone dependencies;\n- whether it belongs in the documented standard getting-started experience; and\n- whether including one package would create an expectation that an open-ended family of alternative backends or\n  adapters must also be included.\n\nDefault to a separate install when the case is unclear. Existing membership is not precedent for every package in\nthe same lifecycle stage or category.\n\nFor removals, the issue must also assess compatibility for existing `pip install agent-framework` and\n`agent-framework-core[all]` users, document any migration or replacement path, determine whether the change is\nbreaking, and identify the required Core and root meta-package version changes. Do not treat removal as ordinary\ndependency cleanup.\n\nTrack the decision in the `Meta package` column of `python/PACKAGE_STATUS.md`. When membership changes, update\n`packages/core/pyproject.toml` `[project.optional-dependencies].all`, the Core and root package versions as required,\nand the status table in the same change.\n\n## Lazy Loading Pattern\n\n### Root core API\n\nThe root `agent_framework` package is a lazy public API surface:\n\n- Runtime exports live in `packages/core/agent_framework/__init__.py`.\n- Typing/editor exports live in `packages/core/agent_framework/__init__.pyi`.\n- Add or move root exports in `_LAZY_MODULE_EXPORTS`, keep the explicit runtime `__all__` in sync, and add the same\n  symbol to the `.pyi` file.\n- Keep deprecation behavior in the owning module (for example, a module-level `__getattr__` that warns and returns\n  the deprecated alias). Do not add one-off deprecated-symbol branches to root `__getattr__`.\n- Validate root API changes with `uv run poe syntax -P core`, `uv run poe pyright -P core`, and import smoke tests\n  for both `from agent_framework import <symbol>` and `from agent_framework import *`.\n\n### Provider namespaces\n\nProvider folders in core use `__getattr__` to lazy load from connector packages:\n\n```python\n# In agent_framework/foundry/__init__.py\n_IMPORTS: dict[str, tuple[str, str]] = {\n    \"FoundryChatClient\": (\"agent_framework_foundry\", \"agent-framework-foundry\"),\n}\n\ndef __getattr__(name: str) -> Any:\n    if name in _IMPORTS:\n        import_path, package_name = _IMPORTS[name]\n        try:\n            return getattr(importlib.import_module(import_path), name)\n        except ModuleNotFoundError as exc:\n            raise ModuleNotFoundError(\n                f\"The package {package_name} is required to use `{name}`. \"\n                f\"Install it with: pip install {package_name}\"\n            ) from exc\n```\n\n### Namespace compatibility\n\nThe core namespace module and the objects it re-exports have different compatibility rules:\n\n- While an owning package is `alpha`, `beta`, or `rc`, imports for objects from that package may be added, removed,\n  or moved between approved lazy-loading namespaces by explicit core-team decision. Those object paths follow the\n  owning package's prerelease lifecycle.\n- Do not remove a core namespace module unless it is empty after the change and is used exclusively by packages\n  that have not reached `released`.\n- If a namespace exposes objects from any released package, keep the namespace. Changing import paths for released\n  objects requires a deprecated forwarding path where feasible; otherwise the agreed issue must include migration\n  guidance, explicit breaking-change acknowledgement, and the required Core and root meta-package version changes.\n\n## Adding a New Connector Package\n\n**Important:** Do not create a new package unless approved by the core team.\n\nEvery new package starts as `alpha`.\n\n### Alpha package checklist\n\n1. Create directory under `packages/` (e.g., `packages/my-connector/`)\n2. Add the package to `tool.uv.sources` in root `pyproject.toml`\n3. Set the package version to the alpha pattern: `1.0.0a<date>`\n4. Set the package classifier to `Development Status :: 3 - Alpha`\n5. Include samples inside the package (e.g., `packages/my-connector/samples/`)\n6. Do **NOT** add to `[all]` extra in `packages/core/pyproject.toml`\n7. Do **NOT** create lazy loading in core yet\n8. Add the package to `python/PACKAGE_STATUS.md` with lifecycle state `alpha` and meta-package membership `no`,\n   and keep that file updated when packages are added, removed, renamed, promoted, or have their membership\n   changed. If the package exposes individually staged APIs, keep the feature list there current too.\n9. Keep the `Typing :: Typed` classifier and the `py.typed` marker in step. The classifier alone is a\n   promise PEP 561 keeps through the `py.typed` file inside the package directory, and that file is\n   the signal checkers act on: a package that declares `Typing :: Typed` without shipping it is not\n   treated as typed, so its API falls back to whatever a checker does with an untyped import\n   (`Any`, `Unknown`, or a missing-stub diagnostic) instead of the inline annotations. Check both,\n   not one:\n\n   ```bash\n   # every package that claims to be typed must ship the marker\n   cd python/packages\n   for d in */; do\n     d=${d%/}\n     [ -f \"$d/pyproject.toml\" ] || continue\n     if grep -q \"Typing :: Typed\" \"$d/pyproject.toml\" && ! ls \"$d\"/agent_framework*/py.typed >/dev/null 2>&1; then\n       echo \"missing py.typed: $d\"\n     fi\n   done\n   ```\n\n   Note that `py.typed` only makes annotations that are already there visible; it adds none, so a\n   package that has not been type-checked may surface further errors once the marker lands.\n\nRecommended dependency workflow during connector implementation:\n\n1. Add the dependency to the target package:\n   `uv run poe add-dependency-to-project --package core --dependency \"<dependency-spec>\"`\n2. Implement connector code and tests.\n3. Validate dependency bounds for that package/dependency:\n   `uv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"`\n4. If the package has meaningful tests/checks that validate dependency compatibility, you can use the add + validation flow in one command:\n   `uv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"`\n   If compatibility checks are not in place yet, add the dependency first, then implement tests before running bound validation.\n\n### Promotion path\n\nCreate a GitHub issue for every package promotion and get core-team agreement before implementing the promotion.\nThe issue must record:\n\n- the current and target lifecycle stages;\n- whether the package should be included in the root meta-package, with rationale based on the criteria above; and\n- the lazy-loading namespace decision for the transition: `alpha` -> `beta` selects whether and where to expose the\n  package, while `beta` -> `rc` and `rc` -> `released` preserve the existing namespace by default and may change\n  the package's prerelease object imports only by explicit core-team decision and under the namespace compatibility\n  rules above.\n\nRecord an explicit `no` or `none` when the package should remain outside the meta-package or should not have a\nlazy-loading namespace. Do not infer either decision from the target lifecycle stage.\n\nPromotion work is not isolated to the package being promoted. If a promotion changes dependency\nmetadata for downstream packages, also update the dependent packages' own versions so they publish\nnew metadata alongside the promoted dependency bounds.\nApply the internal package dependency update rules from the versioning section below during\npromotions as well as standalone version update work.\n\n#### Alpha -> Beta\n\nMove a package to `beta` when it is stable enough for broader prerelease use.\n\n1. Update the package version to the beta pattern: `1.0.0b<date>`\n2. Update the classifier to `Development Status :: 4 - Beta`\n3. Move samples to the root `samples/` tree and remove package-local samples\n4. Apply the lazy-loading decision recorded in the promotion issue, creating or updating the approved namespace\n   when applicable\n5. Apply the meta-package decision recorded in the promotion issue. The default is to remain excluded; add the\n   package to `[all]` only when inclusion is explicitly approved.\n6. Update the lifecycle state and meta-package membership in `python/PACKAGE_STATUS.md`\n\nAfter `alpha`, there should be no samples left inside a package folder.\n\n#### Beta -> RC\n\nMove a package to `rc` when its API is close to the final released shape.\n\n1. Update the package version to the release-candidate pattern: `1.0.0rc<number>`\n2. Keep the classifier at `Development Status :: 4 - Beta` because PyPI does not have a separate\n   release-candidate classifier\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; the stage\n   transition alone does not add it to `core[all]`\n4. Preserve the existing lazy-loading namespace by default. Changes to the package's prerelease object imports are\n   discouraged and require explicit core-team approval recorded in the promotion issue; apply the namespace\n   compatibility rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `rc` and keep its membership value current\n\n#### RC -> Released\n\nMove a package to `released` when it no longer carries a prerelease qualifier.\n\n1. Update the package version to the stable pattern: `1.0.0`\n2. Update the classifier to `Development Status :: 5 - Production/Stable`\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; release does\n   not imply inclusion in `core[all]`\n4. Preserve the lazy-loading namespace used at RC by default. Any final changes to the package's prerelease object\n   imports require explicit core-team approval recorded in the promotion issue; apply the namespace compatibility\n   rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `released` and keep its membership value current\n7. Update all `README.md` files that install that package with\n   `pip install agent-framework-... --pre` so they use `pip install agent-framework-...` without\n   the `--pre` suffix\n\n## Versioning\n\n### Internal package dependency updates\n\n- If package A depends on package B within this repository, only update package A's dependency\n  declaration when the work on package B actually affects package A.\n- If package A does not need anything from the package B change, leave package A's dependency\n  declaration unchanged.\n- If package A does need something from the package B change, update package A's dependency\n  declaration to the version or versioning scheme that matches what package A now requires.\n- If package B is promoted to a different lifecycle stage, update package A's dependency\n  declaration to the new versioning scheme for package B even when the only change is the stage\n  transition itself.\n- When Core releases, advance each workspace package floor in `agent-framework-core[all]` to that package's\n  co-released version, including unchanged packages at their existing version. Keep an upper bound appropriate\n  for the package's current major version. This release-cohort metadata is independent of whether the package\n  itself needed a version bump.\n- Use this guidance both for ordinary version updates and for package promotion work.\n\n- All non-core packages declare a lower bound on `agent-framework-core`\n- When core version bumps with breaking changes, update the lower bound in all packages\n- Non-core packages version independently; only raise core bound when using new core APIs\n- If promoting a package changes a dependent package's published dependency metadata, bump the\n  dependent package's own version in the correct lifecycle pattern for its current stage\n- Lifecycle version patterns:\n  - `alpha`: `1.0.0a<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `beta`: `1.0.0b<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `rc`: `1.0.0rc<number>` where `<number>` increments only when the package has changes\n  - `released`: `X.Y.Z` using semver per package\n- For alpha/beta date stamps, use the current Pacific date as the cutoff, not UTC and not the user's local\n  timezone. Same-Pacific-day re-cuts use a `.postN` suffix. Honor an explicit user-provided date over this\n  default.\n- Keep the `Development Status` classifier in `pyproject.toml` aligned with the lifecycle stage:\n  - `alpha` -> `Development Status :: 3 - Alpha`\n  - `beta` -> `Development Status :: 4 - Beta`\n  - `rc` -> `Development Status :: 4 - Beta`\n  - `released` -> `Development Status :: 5 - Production/Stable`\n- See the PyPI classifier list for the available classifier values:\n  `https://pypi.org/classifiers/`\n\n## Installation Options\n\n```bash\npip install agent-framework-core          # Core only\npip install agent-framework-core[all]     # Core + curated standard integrations\npip install agent-framework               # Same standard install set as core[all]\npip install agent-framework-foundry       # Specific connector (pulls in core)\n```\n\n## Maintaining Documentation\n\nWhen changing a package, check if its `AGENTS.md` needs updates:\n- Adding/removing/renaming public classes or functions\n- Changing the package's purpose or architecture\n- Modifying import paths or usage patterns\n\nKeep `python/PACKAGE_STATUS.md` updated when:\n- A package is added, removed, renamed, or promoted between lifecycle stages\n- A package is added to or removed from the root meta-package\n- A package starts or stops exposing individually staged experimental or release-candidate APIs\n\nWhen a package adds, removes, or renames environment variables, update the related documentation in the same\nchange:\n- The package's `README.md` for package-level configuration/env var guidance\n- `samples/README.md` if the package is included in `packages/core/pyproject.toml` `[all]` and the env var is\n  part of the consolidated package env-var inventory\n- Any affected sample/package-local `.env.example`, `.env.template`, or sample README files when sample setup\n  changes alongside the package\n","python/.github/skills/python-code-quality/SKILL.md":"---\nname: python-code-quality\ndescription: >\n  Code quality checks, linting, formatting, and type checking commands for the\n  Agent Framework Python codebase. Use this when running checks, fixing lint\n  errors, or troubleshooting CI failures.\n---\n\n# Python Code Quality\n\n## Quick Commands\n\nAll commands run from the `python/` directory:\n\n```bash\n# Syntax formatting + checks (parallel across packages by default)\nuv run poe syntax\nuv run poe syntax -P core\nuv run poe syntax -F    # Format only\nuv run poe syntax -C    # Check only\nuv run poe syntax -S    # Samples only\n\n# Type checking\n#\n# Division of labor (see \"Type checking architecture\" below):\n#   - Pyright (strict) is the source-code type checker.\n#   - Pyright (relaxed `basic`), mypy, pyrefly, ty, zuban all check the TESTS;\n#     pyright/pyrefly/ty also check the SAMPLES (mypy/zuban skip script-style samples).\nuv run poe pyright       # Pyright (strict) over SOURCE, fan-out across packages\nuv run poe pyright -P core\nuv run poe pyright -A\nuv run poe test-typing   # mypy + pyrefly + ty + zuban + pyright over each package's TESTS\nuv run poe test-typing -P core\nuv run poe test-typing -S                       # samples (pyrefly + ty + pyright)\nuv run poe test-typing -P core --checker mypy   # narrow to one checker (repeatable)\nuv run poe test-typing -P core --checker pyright # relaxed pyright over the tests\nuv run poe mypy          # alias: MyPy over the tests only\nuv run poe mypy -P core\nuv run poe typing        # Pyright (source) + the tests checkers\nuv run poe typing -P core\nuv run poe typing -A\n\n# All package-level checks in parallel (syntax + pyright)\nuv run poe check-packages\n\n# Full check (packages + samples + tests + markdown)\nuv run poe check\nuv run poe check -P core\n\n# Samples only\nuv run poe check -S\nuv run poe pyright -S\n\n# Markdown code blocks\nuv run poe markdown-code-lint\n```\n\nPoe and the pytest toolchain stay in the cross-version development\nenvironment. Ruff and the type checkers use pinned\n`tooling/requirements-*.txt` files; prek is selected from the `tool-hooks`\ndependency group only when needed.\n\n## Pre-commit Hooks (prek)\n\nPrek hooks run automatically on commit. They stay lightweight and only check\nchanged files.\n\n```bash\n# Install hooks\nuv run poe prek-install\n\n# Run all hooks manually\nuv run --group tool-hooks prek run -a\n\n# Run on last commit\nuv run --group tool-hooks prek run --last-commit\n```\n\nThey run changed-package syntax formatting/checking, markdown code lint only\nwhen markdown files change, and sample syntax lint/pyright only when files\nunder `samples/` change.\nThey intentionally do not run workspace `pyright` or `mypy` by default.\n\n## Type checking architecture\n\nFollowing the \"too many type checkers\" approach, type checkers are split by target:\n\n| Target | Checker(s) | Mode | Config |\n|--------|-----------|------|--------|\n| Source (`agent_framework*`) | **pyright** | strict | `[tool.pyright]` in `pyproject.toml` |\n| Tests | pyright, mypy, pyrefly, ty, zuban | relaxed/basic | `pyrightconfig.tests.json`, `[tool.mypy]`, `pyrefly.toml`, `ty` rules |\n| Samples | pyright, pyrefly, ty | basic | `pyrightconfig.samples.json`, `pyrefly.samples.toml`, `ty.samples.toml` |\n\n- **Pyright is the only *strict* source-code checker**, and it ALSO runs in a relaxed\n  `basic` profile over the tests and samples (so the surfaces customers copy from are\n  validated by every checker, including pyright). MyPy was removed from source; its\n  `[tool.mypy]` block is now a *relaxed* profile used only for tests/samples.\n- The extra checkers run over tests/samples because those exercise the public API the way\n  users do. The profile is intentionally relaxed (private access allowed, untyped test\n  bodies allowed) so authors aren't forced into ugly over-annotation.\n- **Gating checkers** are `pyright`, `mypy`, `pyrefly`, `ty`, and `zuban` — all five run by\n  default and gate CI. `zuban` is the strictest of the mypy-compatible pair, so the same\n  `[tool.mypy]` config yields more findings; suppress zuban-only friction with shared\n  `# type: ignore[code]`. Suppress relaxed-pyright friction with `# pyright: ignore[rule]`.\n- **Samples** add `pyright` to `pyrefly` + `ty` — mypy/zuban can't resolve script-style\n  sample layouts (numeric-prefixed dirs, duplicate `main.py`), but pyright handles them.\n- `pyrefly.samples.toml` enables fallback lookup for standalone sibling imports.\n  The ty sample profile uses first-party `root = [\".\"]` for PEP 723 sibling helpers,\n  preserving automatic extra-path lookup for the existing samples.\n- The strict source-pyright (`[tool.pyright]`) enforces `reportUnnecessaryTypeIgnoreComment`\n  and excludes tests/samples; the relaxed test/sample pyright configs do not flag unnecessary\n  ignores.\n\n## Ruff Configuration\n\n- Line length: 120\n- Target: Python 3.10+\n- Auto-fix enabled\n- Rules: ASYNC, B, CPY, D, E, ERA, F, FIX, I, INP, ISC, Q, RET, RSE, RUF, SIM, T20, TD, W, T100, S\n- Scripts directory is excluded from checks\n\n## Pyright Configuration\n\n- **Source**: strict mode (`[tool.pyright]`), `reportUnnecessaryTypeIgnoreComment = \"error\"`,\n  excludes tests, samples, .venv, packages/devui/frontend.\n- **Tests**: relaxed `basic` profile (`pyrightconfig.tests.json`) — private import/usage and\n  not-required TypedDict access allowed; runs as the `pyright` checker in `test-typing`.\n- **Samples**: relaxed `basic` profile (`pyrightconfig.samples.json`, with a py310 variant) —\n  runs as the `pyright` checker in `test-typing -S`.\n\n## Parallel Execution\n\nThe task runner (`scripts/task_runner.py`) executes the cross-product of\n(package × task) in parallel using ThreadPoolExecutor. Single items run\nin-process with streaming output.\n\n## CI Workflow\n\nCI splits into 4 parallel jobs:\n1. **Pre-commit hooks** — lightweight hooks (SKIP=poe-check)\n2. **Package checks** — syntax/pyright (source) via check-packages\n3. **Samples & markdown** — `check -S` plus `markdown-code-lint`\n4. **Test Typing** — change-detected mypy/pyrefly/ty over tests (`ci-test-typing`)\n","python/.github/skills/agent-framework-py-release/SKILL.md":"# agent-framework-py-release\n\nPath: `python/.github/skills/agent-framework-py-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/agent-framework-py-release/SKILL.md)","python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md":"# foundry-hosted-agent-validation\n\nPath: `python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md)","python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md":"# foundry-config-setup\n\nPath: `python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md)","dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md":"# regex-tester\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md)","python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md":"# valuation\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md)","python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md":"# risk-scoring\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md)","python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md)","python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md)","python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md":"# volume-converter\n\nPath: `python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md)","python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md":"# length-converter\n\nPath: `python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md":"# valuation\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md":"# risk-scoring\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md":"# support-style\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md":"# escalation-policy\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md)","python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md":"# support-style\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md)","python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md":"# escalation-policy\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md)",".github/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/.github/copilot-instructions.md)","dotnet/AGENTS.md":"# dotnet - AI Agent Protocol & Instructions\n\nPath: `dotnet/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/AGENTS.md)","python/AGENTS.md":"# python - AI Agent Protocol & Instructions\n\nPath: `python/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/AGENTS.md)","python/packages/tools/README.md":"# tools Documentation\n\nPath: `python/packages/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/tools/README.md)","python/packages/redis/AGENTS.md":"# Redis Skill\n\nPath: `python/packages/redis/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/AGENTS.md)","python/packages/redis/README.md":"# redis Documentation\n\nPath: `python/packages/redis/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/README.md)","python/packages/purview/AGENTS.md":"# Purview Skill\n\nPath: `python/packages/purview/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/AGENTS.md)","python/packages/purview/README.md":"# purview Documentation\n\nPath: `python/packages/purview/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/README.md)","python/packages/orchestrations/README.md":"# orchestrations Documentation\n\nPath: `python/packages/orchestrations/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/orchestrations/README.md)","python/packages/openai/AGENTS.md":"# Openai Skill\n\nPath: `python/packages/openai/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/AGENTS.md)","python/packages/openai/README.md":"# openai Documentation\n\nPath: `python/packages/openai/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/README.md)","python/packages/ollama/AGENTS.md":"# Ollama Skill\n\nPath: `python/packages/ollama/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/AGENTS.md)","python/packages/ollama/README.md":"# ollama Documentation\n\nPath: `python/packages/ollama/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/README.md)","python/packages/monty/AGENTS.md":"# Monty Skill\n\nPath: `python/packages/monty/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/AGENTS.md)","python/packages/monty/README.md":"# monty Documentation\n\nPath: `python/packages/monty/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/README.md)","python/packages/mistral/AGENTS.md":"# Mistral Skill\n\nPath: `python/packages/mistral/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/AGENTS.md)","python/packages/mistral/README.md":"# mistral Documentation\n\nPath: `python/packages/mistral/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/README.md)","python/packages/mem0/AGENTS.md":"# Mem0 Skill\n\nPath: `python/packages/mem0/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/AGENTS.md)","python/packages/mem0/README.md":"# mem0 Documentation\n\nPath: `python/packages/mem0/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/README.md)","python/packages/lab/AGENTS.md":"# Lab Skill\n\nPath: `python/packages/lab/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/AGENTS.md)","python/packages/lab/README.md":"# lab Documentation\n\nPath: `python/packages/lab/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/README.md)","python/packages/hyperlight/README.md":"# hyperlight Documentation\n\nPath: `python/packages/hyperlight/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hyperlight/README.md)","python/packages/hosting-telegram/README.md":"# hosting-telegram Documentation\n\nPath: `python/packages/hosting-telegram/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-telegram/README.md)","python/packages/hosting-responses/README.md":"# hosting-responses Documentation\n\nPath: `python/packages/hosting-responses/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-responses/README.md)","python/packages/hosting-mcp/AGENTS.md":"# Hosting-mcp Skill\n\nPath: `python/packages/hosting-mcp/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/AGENTS.md)","python/packages/hosting-mcp/README.md":"# hosting-mcp Documentation\n\nPath: `python/packages/hosting-mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/README.md)","python/packages/hosting-a2a/AGENTS.md":"# Hosting-a2a Skill\n\nPath: `python/packages/hosting-a2a/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/AGENTS.md)","python/packages/hosting-a2a/README.md":"# hosting-a2a Documentation\n\nPath: `python/packages/hosting-a2a/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/README.md)","python/packages/hosting/README.md":"# hosting Documentation\n\nPath: `python/packages/hosting/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting/README.md)","python/packages/github_copilot/AGENTS.md":"# Github_copilot Skill\n\nPath: `python/packages/github_copilot/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/AGENTS.md)","python/packages/github_copilot/README.md":"# github_copilot Documentation\n\nPath: `python/packages/github_copilot/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/README.md)","python/packages/gemini/AGENTS.md":"# Gemini Skill\n\nPath: `python/packages/gemini/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/AGENTS.md)","python/packages/gemini/README.md":"# gemini Documentation\n\nPath: `python/packages/gemini/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/README.md)","python/packages/foundry_local/AGENTS.md":"# Foundry_local Skill\n\nPath: `python/packages/foundry_local/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/AGENTS.md)","python/packages/foundry_local/README.md":"# foundry_local Documentation\n\nPath: `python/packages/foundry_local/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/README.md)","python/packages/foundry_hosting/README.md":"# foundry_hosting Documentation\n\nPath: `python/packages/foundry_hosting/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_hosting/README.md)","python/packages/foundry/README.md":"# foundry Documentation\n\nPath: `python/packages/foundry/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry/README.md)","python/packages/devui/AGENTS.md":"# Devui Skill\n\nPath: `python/packages/devui/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/AGENTS.md)","python/packages/devui/dev.md":"# Devui Skill\n\nPath: `python/packages/devui/dev.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/dev.md)","python/packages/devui/README.md":"# devui Documentation\n\nPath: `python/packages/devui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/README.md)","python/packages/declarative/AGENTS.md":"# Declarative Skill\n\nPath: `python/packages/declarative/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/AGENTS.md)","python/packages/declarative/README.md":"# declarative Documentation\n\nPath: `python/packages/declarative/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/README.md)","python/packages/core/AGENTS.md":"# Core Skill\n\nPath: `python/packages/core/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/AGENTS.md)","python/packages/core/pyrightconfig.dependency.json":"# Core Skill\n\nPath: `python/packages/core/pyrightconfig.dependency.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/pyrightconfig.dependency.json)","python/packages/core/README.md":"# core Documentation\n\nPath: `python/packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/README.md)","python/packages/copilotstudio/AGENTS.md":"# Copilotstudio Skill\n\nPath: `python/packages/copilotstudio/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/AGENTS.md)","python/packages/copilotstudio/README.md":"# copilotstudio Documentation\n\nPath: `python/packages/copilotstudio/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/README.md)","python/packages/claude/AGENTS.md":"# Claude Skill\n\nPath: `python/packages/claude/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/AGENTS.md)","python/packages/claude/README.md":"# claude Documentation\n\nPath: `python/packages/claude/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/README.md)","python/packages/chatkit/AGENTS.md":"# Chatkit Skill\n\nPath: `python/packages/chatkit/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/AGENTS.md)","python/packages/chatkit/README.md":"# chatkit Documentation\n\nPath: `python/packages/chatkit/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/README.md)","python/packages/bedrock/AGENTS.md":"# Bedrock Skill\n\nPath: `python/packages/bedrock/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/AGENTS.md)","python/packages/bedrock/README.md":"# bedrock Documentation\n\nPath: `python/packages/bedrock/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/README.md)","python/packages/azure-cosmos-memory/AGENTS.md":"# Azure-cosmos-memory Skill\n\nPath: `python/packages/azure-cosmos-memory/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/AGENTS.md)","python/packages/azure-cosmos-memory/README.md":"# azure-cosmos-memory Documentation\n\nPath: `python/packages/azure-cosmos-memory/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/README.md)","python/packages/azure-cosmos/AGENTS.md":"# Azure-cosmos Skill\n\nPath: `python/packages/azure-cosmos/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/AGENTS.md)","python/packages/azure-cosmos/README.md":"# azure-cosmos Documentation\n\nPath: `python/packages/azure-cosmos/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/README.md)","python/packages/azure-contentunderstanding/AGENTS.md":"# Azure-contentunderstanding Skill\n\nPath: `python/packages/azure-contentunderstanding/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/AGENTS.md)","python/packages/azure-contentunderstanding/README.md":"# azure-contentunderstanding Documentation\n\nPath: `python/packages/azure-contentunderstanding/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/README.md)","python/packages/azure-ai-search/AGENTS.md":"# Azure-ai-search Skill\n\nPath: `python/packages/azure-ai-search/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/AGENTS.md)","python/packages/azure-ai-search/README.md":"# azure-ai-search Documentation\n\nPath: `python/packages/azure-ai-search/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/README.md)","python/packages/anthropic/AGENTS.md":"# Anthropic Skill\n\nPath: `python/packages/anthropic/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/AGENTS.md)","python/packages/anthropic/README.md":"# anthropic Documentation\n\nPath: `python/packages/anthropic/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/README.md)","python/packages/ag-ui/AGENTS.md":"# Ag-ui Skill\n\nPath: `python/packages/ag-ui/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/AGENTS.md)","python/packages/ag-ui/README.md":"# ag-ui Documentation\n\nPath: `python/packages/ag-ui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/README.md)","python/packages/a2a/AGENTS.md":"# A2a Skill\n\nPath: `python/packages/a2a/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/AGENTS.md)","python/packages/a2a/README.md":"# a2a Documentation\n\nPath: `python/packages/a2a/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/README.md)","dotnet/samples/02-agents/Agents/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/README.md)","python/packages/lab/gaia/README.md":"# gaia Documentation\n\nPath: `python/packages/lab/gaia/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/gaia/README.md)","python/packages/lab/lightning/README.md":"# lightning Documentation\n\nPath: `python/packages/lab/lightning/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/lightning/README.md)","python/packages/lab/tau2/README.md":"# tau2 Documentation\n\nPath: `python/packages/lab/tau2/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/tau2/README.md)","python/packages/devui/frontend/components.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/components.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/components.json)","python/packages/devui/frontend/package.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package.json)","python/packages/devui/frontend/package-lock.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package-lock.json)","python/packages/devui/frontend/README.md":"# frontend Documentation\n\nPath: `python/packages/devui/frontend/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/README.md)","python/packages/devui/frontend/tsconfig.app.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.app.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.app.json)","python/packages/devui/frontend/tsconfig.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.json)","python/packages/devui/frontend/tsconfig.node.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.node.json)","python/packages/core/.vscode/launch.json":"# .vscode Skill\n\nPath: `python/packages/core/.vscode/launch.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/.vscode/launch.json)","python/packages/ag-ui/agent_framework_ag_ui_examples/README.md":"# agent_framework_ag_ui_examples Documentation\n\nPath: `python/packages/ag-ui/agent_framework_ag_ui_examples/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/README.md)","python/packages/ag-ui/getting_started/README.md":"# getting_started Documentation\n\nPath: `python/packages/ag-ui/getting_started/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/getting_started/README.md)","python/samples/02-agents/skills/README.md":"# Skills Skill\n\nPath: `python/samples/02-agents/skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/README.md)","python/samples/02-agents/tools/README.md":"# tools Documentation\n\nPath: `python/samples/02-agents/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/README.md)","dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md)","dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md)","dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md)","dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md)","dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md)","dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md)","dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md)","dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md)","dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md)","dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md)","dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md)","dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md)","dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md":"# A2AAgent_AsFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md)","dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md)","dotnet/src/Shared/Foundry/Agents/README.md":"# Subagent: readme\n\nPath: `dotnet/src/Shared/Foundry/Agents/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/src/Shared/Foundry/Agents/README.md)","python/packages/declarative/tests/workflows/http_request.yaml":"# Workflows Skill\n\nPath: `python/packages/declarative/tests/workflows/http_request.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/tests/workflows/http_request.yaml)","python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json":"# .vscode Skill\n\nPath: `python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json)","python/samples/02-agents/skills/mixed_skills/README.md":"# Mixed_skills Skill\n\nPath: `python/samples/02-agents/skills/mixed_skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/README.md)","python/samples/02-agents/skills/mcp_based_skill/README.md":"# Mcp_based_skill Skill\n\nPath: `python/samples/02-agents/skills/mcp_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mcp_based_skill/README.md)","python/samples/02-agents/skills/file_based_skill/README.md":"# File_based_skill Skill\n\nPath: `python/samples/02-agents/skills/file_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/README.md)","python/samples/02-agents/skills/code_defined_skill/README.md":"# Code_defined_skill Skill\n\nPath: `python/samples/02-agents/skills/code_defined_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/code_defined_skill/README.md)","python/samples/02-agents/skills/class_based_skill/README.md":"# Class_based_skill Skill\n\nPath: `python/samples/02-agents/skills/class_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/class_based_skill/README.md)","python/samples/02-agents/skills/script_approval/README.md":"# Script_approval Skill\n\nPath: `python/samples/02-agents/skills/script_approval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/script_approval/README.md)","python/samples/02-agents/skills/skill_filtering/README.md":"# Skill_filtering Skill\n\nPath: `python/samples/02-agents/skills/skill_filtering/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/README.md)","python/samples/02-agents/skills/skills_auto_approval/README.md":"# Skills_auto_approval Skill\n\nPath: `python/samples/02-agents/skills/skills_auto_approval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skills_auto_approval/README.md)","python/samples/02-agents/tools/local_code_interpreter/README.md":"# local_code_interpreter Documentation\n\nPath: `python/samples/02-agents/tools/local_code_interpreter/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/local_code_interpreter/README.md)","python/samples/02-agents/tools/monty_code_interpreter/README.md":"# monty_code_interpreter Documentation\n\nPath: `python/samples/02-agents/tools/monty_code_interpreter/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/monty_code_interpreter/README.md)","python/samples/03-workflows/declarative/function_tools/README.md":"# function_tools Documentation\n\nPath: `python/samples/03-workflows/declarative/function_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/03-workflows/declarative/function_tools/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md":"# Agent_Step17_OpenAPITools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md":"# Agent_Step13_Plugins Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md":"# Agent_Step09_UsingMcpClientAsTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md":"# Agent_Step03_UsingFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md)","dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md":"# Agent_Anthropic_Step03_UsingFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md":"# Hosted-McpTools Documentation\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md":"# Hosted-LocalTools Documentation\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md)","dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json":"# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json)","dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json":"# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json)","python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml":"# Tools Skill\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml)","python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml":"# Tools Skill\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml)","python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md":"# tools Documentation\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md)","dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md)","python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md":"# References Skill\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md)","python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md":"# References Skill\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md)","python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md":"# References Skill\n\nPath: `python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md)","python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md":"# References Skill\n\nPath: `python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md)"},"files":{"dotnet/.github/skills/pull-requests/SKILL.md":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","dotnet/.github/skills/project-structure/SKILL.md":"---\nname: project-structure\ndescription: Explains the project structure of the agent-framework .NET solution\n---\n\n# Agent Framework .NET Project Structure\n\n```\ndotnet/\n├── src/\n│   ├── Microsoft.Agents.AI/                      # Core AI agent implementations\n│   ├── Microsoft.Agents.AI.Abstractions/         # Core AI agent abstractions\n│   ├── Microsoft.Agents.AI.A2A/                  # Agent-to-Agent (A2A) provider\n│   ├── Microsoft.Agents.AI.OpenAI/               # OpenAI provider\n│   ├── Microsoft.Agents.AI.Foundry/               # Microsoft Foundry Agents (v2) provider\n│   ├── Microsoft.Agents.AI.AzureAI.Persistent/   # Legacy Microsoft Foundry Agents (v1) provider\n│   ├── Microsoft.Agents.AI.Anthropic/            # Anthropic provider\n│   ├── Microsoft.Agents.AI.Workflows/            # Workflow orchestration\n│   └── ...                                       # Other packages\n├── samples/                                      # Sample applications\n└── tests/                                        # Unit and integration tests\n```\n\n## Main Folders\n\n| Folder | Contents |\n|--------|----------|\n| `src/` | Source code projects |\n| `tests/` | Test projects — named `<Source-Code-Project>.UnitTests` or `<Source-Code-Project>.IntegrationTests` |\n| `samples/` | Sample projects |\n| `src/Shared`, `src/LegacySupport` | Shared code files included by multiple source code projects (see README.md files in these folders or their subdirectories for instructions on how to include them in a project) |\n","dotnet/.github/skills/verify-dotnet-samples/SKILL.md":"---\nname: verify-dotnet-samples\ndescription: How to build, run and verify the .NET sample projects in the Agent Framework repository. Use this when a user wants to verify that the samples still function as expected.\n---\n\n# Verifying .NET Sample Projects\n\n## Sample Pre-requisites\n\nWe should only support verifying samples that:\n1. Use environment variables for configuration.\n2. Have no complex setup requirements, e.g., where multiple applications need to be run together, or where we need to launch a browser, etc.\n\nAlways report to the user which samples were run and which were not, and why.\n\n## Verifying a sample\n\nSamples should be verified to ensure that they actually work as intended and that their output matches what is expected.\nFor each sample that is run, output should be produced that shows the result and explains the reasoning about what output\nwas expected, what was produced, and why it didn't match what the sample was expected to produce.\n\nSteps to verify a sample:\n1. Read the code for the sample\n1. Check what environment variables are required for the sample\n1. Check if each environment variable has been set\n1. If there are any missing, give the user a list of missing environment variables to set and terminate\n1. Summarize what the expected output of the sample should be\n1. Run the sample\n1. Show the user any output from the sample run as it gets produced, so that they can see the run progress\n1. Check the output of the run against expectations\n1. After running all requested samples, produce output for each sample that was verified:\n  1. If expectations were matched, output the following:\n     ```text\n     [Sample Name] Succeeded\n     ```\n  1. If expectations were not matched, output the following:\n     ```text\n     [Sample Name] Failed\n     Actual Output:\n     [What the sample produced]\n     Expected Output:\n     [Explanation of what was expected and why the actual output didn't match expectations]\n     ```\n\n## Environment Variables\n\nMost samples use environment variables to configure settings.\n\n```csharp\nvar endpoint = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_ENDPOINT\") ?? throw new InvalidOperationException(\"AZURE_OPENAI_ENDPOINT is not set.\");\nvar deploymentName = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_DEPLOYMENT_NAME\") ?? \"gpt-4o-mini\";\n```\n\nTo run a sample, the environment variables should be set first.\nBefore running a sample, check whether each environment variable in the sample has a value and\nthen give the user a list of environment variables to set.\n\nYou can provide the user some examples of how to set the variables like this:\n\n```bash\nexport AZURE_OPENAI_ENDPOINT=\"https://my-openai-instance.openai.azure.com/\"\nexport AZURE_OPENAI_DEPLOYMENT_NAME=\"gpt-4o-mini\"\n```\n\nTo check if a variable has a value use e.g.:\n\n```bash\necho $AZURE_OPENAI_ENDPOINT\n```\n\n## How to Run a Sample (General Pattern)\n\n```bash\ncd dotnet/samples/<category>/<sample-dir>\ndotnet run\n```\n\nFor multi-targeted projects (e.g., Durable console apps), specify the framework:\n\n```bash\ndotnet run --framework net10.0\n```\n","python/.github/skills/python-testing/SKILL.md":"---\nname: python-testing\ndescription: >\n  Guidelines for writing and running tests in the Agent Framework Python\n  codebase. Use this when creating, modifying, or running tests.\n---\n\n# Python Testing\n\nCI enforces at least 85% line coverage for every package classified Beta or Production/Stable.\nAlpha packages are report-only, and the DevUI and experimental Lab packages are excluded from\naggregate coverage enforcement. Tests should be fast, reliable, and maintainable.\nWhen adding new code, check that the relevant sections of the codebase are covered by tests, and add new tests as needed. When modifying existing code, update or add tests to cover the changes.\nWe run tests in two stages, for a PR each commit is tested with unit tests only (using `-m \"not integration\"`), and the full suite including integration tests is run when merging.\n\nWhen an API is marked as deprecated, migrate ordinary tests to its replacement in the same change. Retain only\nfocused tests that validate the deprecated behavior and warning; integration tests, samples, and unrelated unit\ntests should use the supported API.\n\n## Running Tests\n\n```bash\n# Run tests for all packages in parallel\nuv run poe test\n\n# Run tests for a specific workspace package\nuv run poe test -P core\n\n# Run all selected tests in a single pytest invocation\nuv run poe test -A\n\n# With coverage\nuv run poe test -A -C\nuv run poe test -P core -C\n\n# Run only unit tests (exclude integration tests)\nuv run poe test -A -m \"not integration\"\n\n# Run only integration tests\nuv run poe test -A -m integration\n```\n\nDirect package execution still works when you need it:\n\n```bash\nuv run --directory packages/core poe test\n```\n\n## Test Configuration\n\n- **Async mode**: `asyncio_mode = \"auto\"` is enabled — do NOT use `@pytest.mark.asyncio`, but do mark tests with `async def` and use `await` for async calls\n- **Timeout**: Default 60 seconds per test\n- **Import mode**: `importlib` for cross-package isolation\n- **Parallelization**: Large packages (core, ag-ui, orchestrations, anthropic) use `pytest-xdist` (`-n auto --dist worksteal`) in their `poe test` task. The aggregate `uv run poe test -A` sweep also uses xdist across the selected packages.\n\n## Test Directory Structure\n\nTest directories must NOT contain `__init__.py` files.\n\nNon-core packages must place tests in a uniquely-named subdirectory:\n\n```\npackages/anthropic/\n├── tests/\n│   └── anthropic/       # Unique subdirectory matching package name\n│       ├── conftest.py\n│       └── test_client.py\n```\n\nCore package can use `tests/` directly with topic subdirectories:\n\n```\npackages/core/\n├── tests/\n│   ├── conftest.py\n│   ├── core/\n│   │   └── test_agents.py\n│   └── openai/\n│       └── test_client.py\n```\n\n## Fixture Guidelines\n\n- Use `conftest.py` for shared fixtures within a test directory\n- Before adding new fixtures, check if existing ones can be reused or extended\n- Use descriptive names: `mapper`, `test_request`, `mock_client`\n\n## File Naming\n\n- Files starting with `test_` are test files — do not use this prefix for helpers\n- Prefer extending an existing test file that already covers the same component or behavior; create a new file only for a distinct surface without an appropriate existing file\n- Use `conftest.py` for shared utilities\n\n## Integration Tests\n\nIntegration tests require external services (OpenAI, Azure, etc.) and are controlled by three markers:\n\n1. **`@pytest.mark.flaky`** — marks the test as potentially flaky since it depends on external services\n2. **`@pytest.mark.integration`** — used for test selection, so integration tests can be included/excluded with `-m integration` / `-m \"not integration\"`\n3. **`@skip_if_..._integration_tests_disabled`** decorator — skips the test when the required API keys or service endpoints are missing\n\n### Adding New Integration Tests\n\nAll three markers must be applied to every new integration test:\n\n```python\n@pytest.mark.flaky\n@pytest.mark.integration\n@skip_if_openai_integration_tests_disabled\nasync def test_openai_chat_completion() -> None:\n    ...\n```\n\nFor test files where all tests are integration tests (e.g., Azure Functions, Durable Task), use the module-level `pytestmark` list:\n\n```python\npytestmark = [\n    pytest.mark.flaky,\n    pytest.mark.integration,\n    pytest.mark.sample(\"01_single_agent\"),\n    pytest.mark.usefixtures(\"function_app_for_test\"),\n]\n```\n\n### CI Workflow\n\nThe merge CI workflow (`python-merge-tests.yml`) splits integration tests into parallel jobs by provider with change-based detection:\n\n- **Unit tests** — always run all non-integration tests\n- **OpenAI integration** — runs when `packages/core/agent_framework/openai/` or core infrastructure changes\n- **Azure OpenAI integration** — runs when `packages/core/agent_framework/azure/` or core changes\n- **Misc integration** — Anthropic, Ollama, MCP tests; runs when their packages or core change\n- **Functions integration** — Azure Functions + Durable Task; runs when their packages or core change\n- **Foundry integration** — runs when `packages/foundry/` or core changes\n\nCore infrastructure changes (e.g., `_agents.py`, `_types.py`) trigger all integration test jobs. Scheduled and manual runs always execute all jobs.\n\n### Keeping CI Workflows in Sync\n\nTwo workflow files define the same set of parallel test jobs:\n\n- **`python-merge-tests.yml`** — runs on PRs, merge queue, schedule, and manual dispatch. Uses path-based change detection to skip unaffected integration jobs.\n- **`python-integration-tests.yml`** — called from the manual integration test orchestrator (`integration-tests-manual.yml`). Always runs all jobs (no path filtering).\n\nThese workflows must be kept in sync. When you add, remove, or modify a test job, update **both** files. The job structure, pytest commands, and xdist flags should match between them. The only difference is that `python-merge-tests.yml` has path filters and conditional job execution, while `python-integration-tests.yml` does not.\n\n### Updating the CI When Adding Integration Tests for a New Provider\n\nWhen adding integration tests for a new provider package, you must update **both** `python-merge-tests.yml` and `python-integration-tests.yml`:\n\n1. **Add a path filter** for the new provider in the `paths-filter` job in `python-merge-tests.yml` so the CI knows which file changes should trigger those tests.\n2. **Add the test job to both workflow files** — either add them to the existing `python-tests-misc-integration` job, or create a dedicated job if the provider:\n   - Has a large number of integration tests\n   - Requires special infrastructure setup (emulators, Docker containers, etc.)\n   - Has long-running tests that would slow down the misc job\n\nThe `python-tests-misc-integration` job is intended for small integration test suites that don't need dedicated infrastructure. When a provider's integration tests grow large or gain special requirements, split them out into their own job (like `python-tests-functions` was split out for Azure Functions + Durable Task).\n\n## Best Practices\n\n- Run only related tests, not the entire suite\n- Review existing tests to understand coding style before creating new ones\n- Use print statements for debugging, then remove them when done\n- Resolve all errors and warnings before committing\n","dotnet/.github/skills/build-and-test/SKILL.md":"---\nname: build-and-test\ndescription: How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.\n---\n\n- Only **UnitTest** projects need to be run locally; IntegrationTests require external dependencies.\n- See `../project-structure/SKILL.md` for project structure details.\n\n## Build, Test, and Lint Commands\n\n```bash\n# From dotnet/ directory\ndotnet restore --tl:off   # Restore dependencies for all projects\ndotnet build --tl:off     # Build all projects\ndotnet test               # Run all tests\ndotnet format             # Auto-fix formatting for all projects\n\n# Build/test/format a specific project (preferred for isolated/internal changes)\ndotnet build src/Microsoft.Agents.AI.<Package> --tl:off\ndotnet test --project tests/Microsoft.Agents.AI.<Package>.UnitTests\ndotnet format src/Microsoft.Agents.AI.<Package>\n\n# Run a single test\n# Replace the filter values with the appropriate assembly, namespace, class, and method names for the test you want to run and use * as a wildcard elsewhere, e.g. \"/*/*/HttpClientTests/GetAsync_ReturnsSuccessStatusCode\"\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for some projects\ndotnet test --filter-query \"/<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>\" --ignore-exit-code 8\n\n# Run unit tests only\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for integration test projects\ndotnet test --filter-query \"/*UnitTests*/*/*/*\" --ignore-exit-code 8\n```\n\nUse `--tl:off` when building to avoid flickering when running commands in the agent.\n\n## Speeding Up Builds and Testing\n\nThe full solution is large. Use these shortcuts:\n\n| Change type | What to do |\n|-------------|------------|\n| Isolated/Internal logic | Build only the affected project and its `*.UnitTests` project. Fix issues, then build the full solution and run all unit tests. |\n| Public API surface | Build the full solution and run all unit tests immediately. |\n\nExample: Building a single code project for all target frameworks\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions\n```\n\nExample: Building a single code project for just .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions -f net10.0\n```\n\nExample: Running tests for a single project using .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0\n```\n\nExample: Running a single test in a specific project using .NET 10.\nProvide the full namespace, class name, and method name for the test you want to run:\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0 --filter-query \"/*/Microsoft.Agents.AI.Abstractions.UnitTests/AgentRunOptionsTests/CloningConstructorCopiesProperties\"\n```\n\n### Multi-target framework tip\n\nMost projects target multiple .NET frameworks. If the affected code does **not** use `#if` directives for framework-specific logic, pass `-f net10.0` to speed up building and testing.\n\n### Package Restore tip\n\n`dotnet build` will try and restore packages for all projects on each build, which can be slow.\nUnless packages have been changed, or it's the first time building the solution, add `--no-restore` to the build command to skip this step and speed up builds.\n\nJust remember to run `dotnet restore` after pulling changes, making changes to project references, or when building for the first time.\n\n### Testing on Linux tip\n\nUnit tests target both .NET Framework as well as .NET Core. When running on Linux, only the .NET Core tests can be run, as .NET Framework is not supported on Linux.\n\nTo run only the .NET Core tests, use the `-f net10.0` option with `dotnet test`.\n\n### Microsoft Testing Platform (MTP)\n\nTests use the [Microsoft Testing Platform](https://learn.microsoft.com/dotnet/core/testing/unit-testing-platform-intro) via xUnit v3. Key differences from the legacy VSTest runner:\n\n- **`dotnet test` requires `--project`** to specify a test project directly (positional arguments are no longer supported).\n- **Test output** uses the MTP format (e.g., `[✓112/x0/↓0]` progress and `Test run summary: Passed!`).\n- **TRX reports** use `--report-xunit-trx` instead of `--logger trx`.\n- **Code coverage** uses `Microsoft.Testing.Extensions.CodeCoverage` with `--coverage --coverage-output-format cobertura`.\n- **Running a test project directly** is supported via `dotnet run --project <test-project>`. This bypasses the `dotnet test` infrastructure and runs the test executable directly with the MTP command line.\n\n- **Running tests across the solution** with a filter may cause some projects to match zero tests, which MTP treats as a failure (exit code 8). Use `--ignore-exit-code 8` to suppress this:\n\n```bash\n# Run all unit tests across the solution, ignoring projects with no matching tests\ndotnet test --solution ./agent-framework-dotnet.slnx --no-build -f net10.0 --ignore-exit-code 8\n```\n\n- **Running tests with `--solution` for a specific TFM** requires all projects in the solution to support that TFM. Not all projects target every framework (e.g., some are `net10.0`-only). Use `./dotnet/eng/scripts/New-FilteredSolution.ps1` to generate a filtered solution:\n\n```powershell\n# Generate a filtered solution for net472 and run tests\n$filtered = ./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net472\ndotnet test --solution $filtered --no-build -f net472 --ignore-exit-code 8\n\n# Exclude samples and keep only unit test projects\n./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net10.0 -ExcludeSamples -TestProjectNameFilter \"*UnitTests*\" -OutputPath dotnet/filtered-unit.slnx\n```\n\n```bash\n# Run tests via dotnet test (uses MTP under the hood)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Run tests with code coverage (Cobertura format)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 --coverage --coverage-output-format cobertura --coverage-settings ./tests/coverage.runsettings\n\n# Run tests directly via dotnet run (MTP native command line)\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Show MTP command line help\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 -- -?\n```\n",".github/skills/pull-requests/SKILL.md":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Stable specifications\n\nFor Python function-calling loop changes, read\n[`docs/specs/004-python-function-calling-loop.md`](../../../docs/specs/004-python-function-calling-loop.md)\nand validate the PR against it. Do not edit that specification by default. It\nis a stable cross-package contract, not a per-PR changelog. A specification\nchange is warranted only when the PR intentionally changes normative behavior,\nthe scenario inventory, an acknowledged coverage gap, or the authoritative\nscenario-to-test mapping; keep any such edit to the smallest affected sections.\n\n### Community project listings\n\nWhen either `python/samples/community-projects.md` or\n`dotnet/samples/community-projects.md` changes, load and apply the\n[`community-projects`](../community-projects/SKILL.md) skill before reviewing\nor approving the change. Load it as well when an issue or pull request proposes\nan external project listing, even if neither catalog file has changed yet.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","dotnet/.github/skills/verify-samples-tool/SKILL.md":"﻿---\nname: verify-samples-tool\ndescription: How to use the verify-samples tool to run, verify, and manage sample definitions in the Agent Framework repository. Use this when adding, updating, or running sample verification.\n---\n\n# verify-samples Tool\n\nThe `verify-samples` project (`dotnet/eng/verify-samples/`) is an automated tool that runs sample projects and verifies their output using deterministic checks and AI-powered verification.\n\n## Running verify-samples\n\n**Important:** By default, samples must be pre-built before running verify-samples. Build the solution first, or pass `--build` to build samples during the run:\n\n```bash\ncd dotnet\ndotnet build agent-framework-dotnet.slnx -f net10.0\n```\n\nThen run verify-samples:\n\n```bash\n# Run all samples across all categories\ndotnet run --project eng/verify-samples -- --log results.log --csv results.csv\n\n# Run a specific category\ndotnet run --project eng/verify-samples -- --category 02-agents --log results.log\n\n# Run specific samples by name\ndotnet run --project eng/verify-samples -- Agent_Step02_StructuredOutput Agent_Step09_AsFunctionTool\n\n# Control parallelism (default 8)\ndotnet run --project eng/verify-samples -- --parallel 8 --log results.log\n\n# Build samples during run (skips the need for a prior build step)\n# This may cause build conflicts as multiple samples are built in parallel, so use with caution\ndotnet run --project eng/verify-samples -- --build --log results.log\n\n# Combine options\ndotnet run --project eng/verify-samples -- --category 03-workflows --parallel 4 --log results.log --csv results.csv --md results.md\n```\n\n### Required Environment Variables\n\nThe tool itself needs:\n- `AZURE_OPENAI_ENDPOINT` — for the AI verification agent\n- `AZURE_OPENAI_DEPLOYMENT_NAME` (optional, defaults to `gpt-5-mini`)\n\nIndividual samples require their own env vars (for example, `FOUNDRY_PROJECT_ENDPOINT`). The tool automatically checks and skips samples with missing env vars.\n\n### Output Files\n\n- `--log results.log` — detailed per-sample log with stdout/stderr, AI reasoning, and a summary\n- `--csv results.csv` — tabular summary with Sample, ProjectPath, Status, FailedChecks, and Failures columns\n- `--md results.md` — Markdown summary with results table and collapsible failure details (suitable for GitHub PR comments)\n\n## Sample Categories\n\nDefinitions are in the `dotnet/eng/verify-samples/` directory:\n\n| Category | Config File | Registered Key |\n|----------|-------------|----------------|\n| 01-get-started | `GetStartedSamples.cs` | `01-get-started` |\n| 02-agents | `AgentsSamples.cs` | `02-agents` |\n| 03-workflows | `WorkflowSamples.cs` | `03-workflows` |\n\nCategories are registered in `VerifyOptions.cs` in the `s_sampleSets` dictionary.\n\n## SampleDefinition Properties\n\nEach sample is defined as a `SampleDefinition` in the appropriate config file. Key properties:\n\n```csharp\nnew SampleDefinition\n{\n    // Required: Display name for the sample\n    Name = \"Agent_Step02_StructuredOutput\",\n\n    // Required: Relative path from dotnet/ to the sample project directory\n    ProjectPath = \"samples/02-agents/Agents/Agent_Step02_StructuredOutput\",\n\n    // Environment variables the sample requires (throws if missing)\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n\n    // Environment variables with defaults that would prompt on console if unset\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n\n    // Skip this sample with a reason (for structural issues only)\n    SkipReason = null, // or \"Requires external service X.\"\n\n    // Deterministic checks: substrings that must appear in stdout\n    MustContain = [\"=== Section Header ===\"],\n\n    // Substrings that must NOT appear in stdout\n    MustNotContain = [],\n\n    // If true, only MustContain checks are used (no AI verification)\n    IsDeterministic = false,\n\n    // AI verification: natural-language descriptions of expected output\n    // Each entry describes one aspect to verify independently\n    ExpectedOutputDescription =\n    [\n        \"The output should show structured person information with Name, Age, and Occupation fields.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n\n    // Stdin inputs to feed to the sample (for interactive samples)\n    Inputs = [\"Y\", \"Y\", \"Y\"],\n\n    // Delay between stdin inputs in ms (default 2000, increase for LLM calls between inputs)\n    InputDelayMs = 3000,\n}\n```\n\n## How to Add a New Sample Definition\n\n1. **Check the sample's Program.cs** to understand:\n   - What environment variables it reads (look for `GetEnvironmentVariable`)\n   - Whether it needs stdin input (look for `Console.ReadLine`, `Application.GetInput`)\n   - Whether it has an external loop (look for `EXIT` patterns in YAML workflows)\n   - What output it produces (section headers, markers, expected behavior)\n   - Whether it exits on its own or runs as a server\n\n2. **Choose the right verification strategy:**\n   - **Deterministic** (`IsDeterministic = true`): Use `MustContain` for samples with fixed output strings. No AI verification.\n   - **AI-verified** (default): Use `ExpectedOutputDescription` with semantic descriptions. Write expectations that are flexible enough for non-deterministic LLM output.\n   - **Both**: Use `MustContain` for fixed markers AND `ExpectedOutputDescription` for LLM-generated content.\n\n3. **Set `SkipReason` only for structural issues:**\n   - Web servers that don't exit\n   - Multi-process client/server architectures\n   - Samples requiring external infrastructure (MCP servers you can't reach, Docker, etc.)\n   - Do NOT skip for missing env vars — the tool checks those dynamically.\n\n4. **For interactive samples, provide `Inputs`:**\n   - Samples using `Application.GetInput(args)` need one initial input\n   - Samples with `Console.ReadLine()` approval loops need `\"Y\"` inputs\n   - YAML workflows with `externalLoop` need `\"EXIT\"` as the last input\n   - Set `InputDelayMs` to 3000-8000ms for samples with LLM calls between inputs\n\n5. **Add the definition** to the appropriate config file (e.g., `AgentsSamples.cs`) in the `All` list.\n\n6. **Register new categories** (if needed) in `VerifyOptions.cs` `s_sampleSets` dictionary.\n\n### Writing Good ExpectedOutputDescription\n\n- Write descriptions that are **semantically flexible** — LLM output varies between runs\n- Each array entry should describe **one independent aspect** to verify\n- Always include `\"The output should not contain error messages or stack traces.\"` as the last entry\n- Avoid exact wording expectations — use \"should mention\", \"should contain information about\", \"should show\"\n- Bad: `\"The output should say 'The weather in Amsterdam is cloudy with a high of 15°C'\"`\n- Good: `\"The output should contain weather information about Amsterdam mentioning cloudy weather with a high of 15°C.\"`\n\n### Example: Simple LLM Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_With_AzureOpenAIChatCompletion\",\n    ProjectPath = \"samples/02-agents/AgentProviders/azure/Agent_With_AzureOpenAIChatCompletion\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    ExpectedOutputDescription =\n    [\n        \"The output should contain a joke about a pirate.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n},\n```\n\n### Example: Deterministic Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Visualization\",\n    ProjectPath = \"samples/03-workflows/Visualization\",\n    IsDeterministic = true,\n    MustContain = [\"Generating workflow visualization...\", \"Mermaid string:\", \"DiGraph string:\"],\n    ExpectedOutputDescription = [\"The output should show workflow visualization in Mermaid and DiGraph formats.\"],\n},\n```\n\n### Example: Interactive Sample with Approval Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"FoundryAgent_Hosted_MCP\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/FoundryAgent_Hosted_MCP\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"Y\", \"Y\", \"Y\", \"Y\", \"Y\"],\n    InputDelayMs = 5000,\n    ExpectedOutputDescription = [\"The output should show an agent using the Microsoft Learn MCP tool with approval prompts.\"],\n},\n```\n\n### Example: Declarative Workflow with External Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Declarative_FunctionTools\",\n    ProjectPath = \"samples/03-workflows/Declarative/FunctionTools\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"What are today's specials?\", \"EXIT\"],\n    InputDelayMs = 8000,\n    ExpectedOutputDescription = [\"The output should show a workflow calling function tools to answer a question about restaurant specials.\"],\n},\n```\n\n### Example: Skipped Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_MCP_Server\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/Agent_MCP_Server\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    SkipReason = \"Runs as an MCP stdio server that does not exit on its own.\",\n},\n```\n\n","python/.github/skills/python-feature-lifecycle/SKILL.md":"---\nname: python-feature-lifecycle\ndescription: >\n  Guidance for package and feature lifecycle in the Agent Framework Python\n  codebase, including stage meanings, feature-stage decorators, feature enums,\n  and how to move APIs from one stage to the next.\n---\n\n# Python Feature Lifecycle\n\n## Two lifecycle levels\n\nAgent Framework uses lifecycle at two different levels:\n\n1. **Package lifecycle** — the maturity of the package as a whole\n2. **Feature lifecycle** — the maturity of a specific API or feature inside that package\n\nThese are related, but they are **not the same thing**.\n\n- The **package stage is the default** for everything in the package.\n- **Feature-stage decorators are only for exceptions** when a feature is behind the package's default stage.\n- Do **not** decorate every class or function just because the package is experimental or release candidate.\n\nThis skill describes staged API behavior within a package. For creating or promoting a package, including sample\nplacement, meta-package membership, versioning, and lazy-loading namespace decisions, follow the\n`python-package-management` skill.\n\n### Important default\n\nIf a package is still in **beta / experimental preview**, all public APIs in that package are experimental by default.\n\n- Do **not** add `@experimental(...)` everywhere in that package.\n- The package stage already communicates that default.\n\nOnce a package moves forward, you can keep individual features behind:\n\n- If a package moves to **release candidate**, a feature may remain **experimental**\n- If a package moves to **released / GA**, a feature may remain **experimental** or **release candidate**\n\nThat is the main use case for feature-stage decorators.\n\n## The four stages\n\n### 1. Experimental\n\nUse for features that are still unstable and may change or be removed without notice.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ExperimentalFeature, experimental\n\n\n@experimental(feature_id=ExperimentalFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds an experimental warning block to the docstring\n- Records feature metadata on the decorated object\n- Emits a runtime warning the first time the feature is used (once per feature by default)\n\nEnum setup:\n\n- Add an all-caps member to `ExperimentalFeature`\n- Reuse the same feature ID across all APIs that belong to the same conceptual feature\n\n### 2. Release candidate\n\nUse for features that are nearly stable but may still receive small refinements before GA.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ReleaseCandidateFeature, release_candidate\n\n\n@release_candidate(feature_id=ReleaseCandidateFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds a release-candidate note to the docstring\n- Records feature metadata on the decorated object\n- Does **not** emit the experimental warning\n\nEnum setup:\n\n- Add an all-caps member to `ReleaseCandidateFeature`\n\n### 3. Released\n\nUse for stable GA APIs.\n\nCode pattern:\n\n- **No feature-stage decorator**\n- **No entry** in `ExperimentalFeature`\n- **No entry** in `ReleaseCandidateFeature`\n\nIf a feature is fully released, remove any stage-specific feature annotation.\n\n### 4. Deprecated\n\nUse for APIs that still exist but should not be used for new code.\n\nCode pattern:\n\n```python\nimport sys\n\nif sys.version_info >= (3, 13):\n    from warnings import deprecated  # type: ignore # pragma: no cover\nelse:\n    from typing_extensions import deprecated  # type: ignore # pragma: no cover\n\n\n@deprecated(\"MyOldFeature is deprecated. Use MyNewFeature instead.\")\nclass MyOldFeature:\n    ...\n```\n\nBehavior:\n\n- Uses the repository's version-conditional deprecation import pattern\n- Should describe what to use instead\n\nDeprecated APIs should not also carry feature-stage decorators.\n\n## Expected decorators by stage\n\n| Feature stage | Expected annotation |\n| --- | --- |\n| Experimental | `@experimental(feature_id=ExperimentalFeature.X)` |\n| Release candidate | `@release_candidate(feature_id=ReleaseCandidateFeature.X)` |\n| Released | No feature-stage decorator |\n| Deprecated | `@deprecated(\"...\")` |\n\n## Feature enums\n\nThe feature enums are the inventory of currently staged features:\n\n- `ExperimentalFeature`\n- `ReleaseCandidateFeature`\n\nGuidance:\n\n- Use one enum member per conceptual feature, not per class\n- Ideally, an ADR already defines the overall feature boundary and therefore the feature ID that staged APIs for that feature should reuse\n- Keep feature IDs all caps\n- Reuse the same member across related APIs for the same feature\n- Remove enum members when the feature no longer belongs to that stage\n- Treat these enums as **current-stage inventories**, not as a stable consumer introspection API\n\nMinimal consumer guidance:\n\n- Treat `__feature_stage__` and `__feature_id__` as optional staged metadata, not as stable contracts\n- Use `getattr(obj, \"__feature_stage__\", None)` and `getattr(obj, \"__feature_id__\", None)` rather than direct attribute access\n- Treat missing metadata as \"no explicit feature-stage annotation\"\n- For warning filters while a feature is staged, match the literal feature ID string\n- Do **not** rely on `ExperimentalFeature.X`, `ReleaseCandidateFeature.X`, or the continued presence of `__feature_id__` after a feature moves stages or is released\n\nFor consumers, the enums are also re-exported from `agent_framework`.\n\nFor internal implementation code inside `agent_framework`, continue to import the enums and decorators from `._feature_stage`.\n\n## Package stage vs feature stage\n\nUse the following rules:\n\n### Package is experimental / beta\n\n- All public APIs are experimental by default\n- Do **not** add feature-stage decorators just to restate that\n- Only introduce feature-level annotations later if the package advances first\n\n### Package is release candidate\n\n- All public APIs are RC by default\n- Do **not** decorate everything\n- Add `@experimental(...)` only for features that are intentionally still behind the package\n\n### Package is released / GA\n\n- All public APIs are released by default\n- Add `@experimental(...)` or `@release_candidate(...)` only for features still being held back\n\n## Moving a feature from one stage to the next\n\n### Experimental -> Release candidate\n\n1. Move the feature ID from `ExperimentalFeature` to `ReleaseCandidateFeature`\n2. Replace `@experimental(...)` with `@release_candidate(...)`\n3. Update any tests or docs that mention the old stage\n\n### Experimental -> Released\n\n1. Remove `@experimental(...)`\n2. Remove the feature from `ExperimentalFeature`\n3. Do not add a replacement feature-stage decorator\n\n### Release candidate -> Released\n\n1. Remove `@release_candidate(...)`\n2. Remove the feature from `ReleaseCandidateFeature`\n3. Leave the API undecorated\n\n### Any stage -> Deprecated\n\n1. Remove any feature-stage decorator\n2. Remove the feature from the stage enum\n3. Add `@deprecated(\"...\")`\n4. Update docs/tests to reflect the replacement path\n\n## Promotion guidance\n\nFeatures do **not** have to pass through every stage.\n\n- It is usually a good idea to move features in order when that reflects reality\n- But it is completely acceptable to go **experimental -> released**\n- Do **not** force a feature through release candidate if there is no real RC period\n\nLikewise, when a package advances, do not automatically move every feature with it.\n\n- Promote features based on actual readiness\n- Keep lagging features explicitly marked only when they are behind the package default\n\n## Practical rules of thumb\n\n- **Package default first, feature exceptions second**\n- **Do not decorate everything in preview packages**\n- **Do not double-annotate members of an already-staged class**\n- **Use enums only for currently staged features**\n- **Do not treat stage enums as a compatibility contract**\n- **Treat `__feature_stage__` and `__feature_id__` as optional metadata; use `getattr`**\n- **Remove stage annotations once a feature is released or deprecated**\n","python/.github/skills/python-development/SKILL.md":"---\nname: python-development\ndescription: >\n  Coding standards, conventions, and patterns for developing Python code in the\n  Agent Framework repository. Use this when writing or modifying Python source\n  files in the python/ directory.\n---\n\n# Python Development Standards\n\n## File Header\n\nEvery `.py` file must start with:\n\n```python\n# Copyright (c) Microsoft. All rights reserved.\n```\n\n## Type Annotations\n\n- Always specify return types and parameter types\n- Use `Type | None` instead of `Optional[Type]`\n- Use `from __future__ import annotations` to enable postponed evaluation\n- Use suffix `T` for TypeVar names: `ChatResponseT = TypeVar(\"ChatResponseT\", bound=ChatResponse)`\n- Use `Mapping` instead of `MutableMapping` for read-only input parameters\n- Prefer `# type: ignore[...]` over unnecessary casts, or `isinstance` checks, when these are internally called and executed methods\n    But make sure the ignore is specific for both mypy and pyright so that we don't miss other mistakes\n- Internal private helpers may be used across `agent_framework*` modules when intentional; use a targeted\n  `# pyright: ignore[reportPrivateUsage]` instead of making the helper public just to satisfy pyright.\n- Do not add trivial pass-through or one-line helper functions solely to appease typing. Prefer targeted ignores,\n  casts, or clearer annotations over adding runtime overhead without a design benefit.\n\n## Function Parameters\n\n- Positional parameters: up to 3 fully expected parameters\n- Use keyword-only arguments (after `*`) for optional parameters\n- Provide string-based overrides to avoid requiring extra imports:\n\n```python\ndef create_agent(name: str, tool_mode: Literal['auto', 'required', 'none'] | ChatToolMode) -> Agent:\n    if isinstance(tool_mode, str):\n        tool_mode = ChatToolMode(tool_mode)\n```\n\n- Avoid shadowing built-ins (use `next_handler` instead of `next`)\n- Avoid `**kwargs` unless needed for subclass extensibility; prefer named parameters\n\n## Docstrings\n\nUse Google-style docstrings for all public APIs:\n\n```python\ndef equal(arg1: str, arg2: str) -> bool:\n    \"\"\"Compares two strings and returns True if they are the same.\n\n    Args:\n        arg1: The first string to compare.\n        arg2: The second string to compare.\n\n    Returns:\n        True if the strings are the same, False otherwise.\n\n    Raises:\n        ValueError: If one of the strings is empty.\n    \"\"\"\n```\n\n- Always document Agent Framework specific exceptions\n- Explicitly use `Keyword Args` when applicable\n- Only document standard Python exceptions when the condition is non-obvious\n\n## Import Structure\n\n```python\n# Core\nfrom agent_framework import Agent, Message, tool\n\n# Components\nfrom agent_framework.observability import enable_sensitive_telemetry\n\n# Connectors (lazy-loaded)\nfrom agent_framework.openai import OpenAIChatClient\nfrom agent_framework.foundry import FoundryChatClient\n```\n\n## Public API and Exports\n\nIn `__init__.py` files that define package-level public APIs, use direct re-export imports plus an explicit\n`__all__`. Avoid identity aliases like `from ._agents import Agent as Agent`, and avoid\n`from module import *`.\n\nDo not define `__all__` in internal non-`__init__.py` modules. Exception: modules intentionally exposed as a\npublic import surface (for example, `agent_framework.observability`) should define `__all__`.\n\n```python\n__all__ = [\"Agent\", \"Message\", \"ChatResponse\"]\n\nfrom ._agents import Agent\nfrom ._types import Message, ChatResponse\n```\n\nSpecial case: the root `agent_framework/__init__.py` uses lazy runtime exports. For root public API changes:\n- Add the symbol to `_LAZY_MODULE_EXPORTS` and keep `_LAZY_EXPORTS` derived from it.\n- Keep the explicit runtime `__all__` synchronized; it is still required for `from agent_framework import *`.\n- Add the same public symbol to `agent_framework/__init__.pyi` so pyright, mypy, and editors see the typed surface.\n- Put runtime deprecation behavior in the owning module via that module's `__getattr__`; avoid root-level\n  special-case branches for individual deprecated exports.\n- Identity aliases are appropriate in `.pyi` stubs because they mark re-exported names for type checkers; avoid them\n  in runtime `.py` modules unless there is a specific compatibility reason.\n\n## Performance Guidelines\n\n- Cache expensive computations (e.g., JSON schema generation)\n- Prefer `match/case` on `.type` attribute over `isinstance()` in hot paths\n- Avoid redundant serialization — compute once, reuse\n\n## Style\n\n- Line length: 120 characters\n- Format only files you changed, not the entire codebase\n- Prefer attributes over inheritance when parameters are mostly the same\n- Async by default — assume everything is asynchronous\n\n## Naming Conventions for Connectors\n\n- `_prepare_<object>_for_<purpose>` for methods that prepare data for external services\n- `_parse_<object>_from_<source>` for methods that process data from external services\n","python/.github/skills/pull-requests/SKILL.md":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","python/.github/skills/python-package-management/SKILL.md":"---\nname: python-package-management\ndescription: >\n  Guide for managing packages in the Agent Framework Python monorepo, including\n  creating new connector packages, versioning, and the lazy-loading pattern.\n  Use this when adding, modifying, or releasing packages.\n---\n\n# Python Package Management\n\n## Monorepo Structure\n\n```\npython/\n├── pyproject.toml              # Root package (agent-framework)\n├── packages/\n│   ├── core/                   # agent-framework-core (main package)\n│   ├── foundry/                # agent-framework-foundry\n│   ├── lab/                    # Standalone uv project, excluded from the root workspace\n│   ├── anthropic/              # agent-framework-anthropic\n│   └── ...                     # Other connector packages\n```\n\n- `agent-framework-core` contains core abstractions and OpenAI/Azure OpenAI built-in\n- Provider packages extend core with specific integrations\n- Root `agent-framework` depends on `agent-framework-core[all]`. Despite the existing extra name, this is a\n  curated standard install set, not every package at a particular lifecycle stage.\n- Entries in `agent-framework-core[all]` carry lower and upper bounds. Workspace integrations use the version\n  released with the current Core cohort as their lower bound so pip does not backtrack across old cyclic\n  `core[all] -> integration -> core` combinations.\n- `packages/lab` is intentionally excluded from the root uv workspace. It has its own\n  `pyproject.toml`, `uv.lock`, environment, CI matrix, and dependency updates so experimental\n  dependencies cannot constrain released provider packages. Lab resolves released Core and provider\n  distributions rather than local root-workspace packages.\n\n## Dependency Management\n\nUses [uv](https://github.com/astral-sh/uv) for dependency management and\n[poethepoet](https://github.com/nat-n/poethepoet) for task automation.\n\n```bash\n# Full setup (venv + install + prek hooks)\nuv run poe setup\n\n# Install dependencies from lockfile (frozen resolution with prerelease policy)\nuv run poe install\n\n# Create venv with specific Python version\nuv run poe venv --python 3.12\n\n# Intentionally upgrade a specific dependency to reduce lockfile conflicts\nuv lock --upgrade-package <dependency-name> && uv run poe install\n\n# Refresh exact development and on-demand tool pins, lockfiles, and validation\nuv run poe upgrade-dev-dependencies\n\n# Release cuts: refresh uv.lock and probe changed packages at both bound extremes.\n# The release probe has a shared five-minute deadline.\nuv run poe validate-python-release --base-ref upstream/main\n\n# Exhaustive test+typing matrix (slow; use for deliberate dependency-range work or CI)\nuv run poe validate-dependency-bounds-test\n# Defaults to --package \"*\"; scope locally whenever possible.\nuv run poe validate-dependency-bounds-test --package core\n\n# Then expand bounds for one dependency in the target package\nuv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"\n\n# Repo-wide automation can reuse the same task\nuv run poe validate-dependency-bounds-project --mode upper --package \"*\"\n\n# Add a dependency to one project and run both validators for that project/dependency\nuv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"\n\n# Work on the standalone Lab project\ncd packages/lab\nuv sync --all-extras --all-groups\nuv run poe test\n```\n\n### Dependency Bound Notes\n\n- Stable dependencies (`>=1.0`) should typically be bounded as `>=<known-good>,<next-major>`.\n- Prerelease (`dev`/`a`/`b`/`rc`) and `<1.0` dependencies should use hard bounds with an explicit upper cap (avoid open-ended ranges).\n- For `<1.0` dependencies, prefer the broadest validated range the package can really support. That may be a patch line, a minor line, or multiple minor lines when checks/tests show the broader lane is compatible.\n- Prefer supporting multiple majors when practical; if APIs diverge across supported majors, use version-conditional imports/paths.\n- For release-only version, lifecycle, pin, and internal-floor edits, use `validate-python-release`. It refreshes\n  `uv.lock`, finds changed package metadata relative to the selected main ref, and runs the changed packages'\n  published runtime dependencies and non-development extras through lock-independent `lowest-direct` and `highest`\n  import probes on the minimum Python minor supported by each package's internal editable closure. The probes run\n  concurrently under one 300-second deadline; pass `--python` only when an explicit interpreter override is needed.\n- For deliberate external dependency-range changes, use\n  `validate-dependency-bounds-project --mode both` for the target package/dependency to find and validate the actual\n  minimum and maximum constraints. Scope the exhaustive `validate-dependency-bounds-test` matrix to affected\n  packages during local iteration; reserve the workspace-wide form for CI or an intentional full audit. The same\n  project task can drive repo-wide upper-bound automation by using `--package \"*\"` and omitting `--dependency`.\n- Prefer targeted lock updates with `uv lock --upgrade-package <dependency-name>` to reduce `uv.lock` merge conflicts.\n- Use `add-dependency-and-validate-bounds` for package-scoped dependency additions plus bound validation in one command.\n- Keep the test framework and Poe in the root `dev` group across Python\n  versions. Put script-only libraries in `tool-runtime`. Put tools used by\n  only one Python version in a named `tool-*` group or pinned\n  `tooling/requirements-*.txt` file, and add the smallest relevant group or\n  bundle to each command. Keep source/type-check support that is part of a\n  package's import surface in a package dependency group. Put package-specific\n  test fixtures in a `test` group.\n- Use `upgrade-dev-dependencies` for repo-wide development and tool dependency\n  refreshes; it repins exact dependencies across development groups and\n  `tooling/requirements-*.txt`, refreshes `uv.lock`, and reruns `check` and\n  `typing`.\n- Upgrade the root uv version manually as one coordinated change across the\n  `dev` requirement, `[tool.uv].required-version`, setup workflows, and the\n  uv pre-commit revision. Automated dependency updates intentionally ignore\n  the root uv pin.\n- Run Lab dependency and validation commands from `packages/lab`; root workspace tasks deliberately do not\n  discover or update the Lab project.\n\n## Meta-package Membership\n\nPackage lifecycle and membership in the root `agent-framework` meta-package are independent decisions. A package\nstarts outside `agent-framework-core[all]`, and promotion to `beta`, `rc`, or `released` does not add it\nautomatically.\n\nAdding a package to or removing a package from the standard install set requires an agreed GitHub issue and an\nexplicit core-team decision. For additions, consider:\n\n- whether the package is useful across common Agent Framework workloads rather than for one specialized storage\n  backend, hosting adapter, channel, or deployment target;\n- whether its dependency footprint is proportionate and compatible with the meta-package's supported Python and\n  platform matrix, especially for native, heavyweight, or conflict-prone dependencies;\n- whether it belongs in the documented standard getting-started experience; and\n- whether including one package would create an expectation that an open-ended family of alternative backends or\n  adapters must also be included.\n\nDefault to a separate install when the case is unclear. Existing membership is not precedent for every package in\nthe same lifecycle stage or category.\n\nFor removals, the issue must also assess compatibility for existing `pip install agent-framework` and\n`agent-framework-core[all]` users, document any migration or replacement path, determine whether the change is\nbreaking, and identify the required Core and root meta-package version changes. Do not treat removal as ordinary\ndependency cleanup.\n\nTrack the decision in the `Meta package` column of `python/PACKAGE_STATUS.md`. When membership changes, update\n`packages/core/pyproject.toml` `[project.optional-dependencies].all`, the Core and root package versions as required,\nand the status table in the same change.\n\n## Lazy Loading Pattern\n\n### Root core API\n\nThe root `agent_framework` package is a lazy public API surface:\n\n- Runtime exports live in `packages/core/agent_framework/__init__.py`.\n- Typing/editor exports live in `packages/core/agent_framework/__init__.pyi`.\n- Add or move root exports in `_LAZY_MODULE_EXPORTS`, keep the explicit runtime `__all__` in sync, and add the same\n  symbol to the `.pyi` file.\n- Keep deprecation behavior in the owning module (for example, a module-level `__getattr__` that warns and returns\n  the deprecated alias). Do not add one-off deprecated-symbol branches to root `__getattr__`.\n- Validate root API changes with `uv run poe syntax -P core`, `uv run poe pyright -P core`, and import smoke tests\n  for both `from agent_framework import <symbol>` and `from agent_framework import *`.\n\n### Provider namespaces\n\nProvider folders in core use `__getattr__` to lazy load from connector packages:\n\n```python\n# In agent_framework/foundry/__init__.py\n_IMPORTS: dict[str, tuple[str, str]] = {\n    \"FoundryChatClient\": (\"agent_framework_foundry\", \"agent-framework-foundry\"),\n}\n\ndef __getattr__(name: str) -> Any:\n    if name in _IMPORTS:\n        import_path, package_name = _IMPORTS[name]\n        try:\n            return getattr(importlib.import_module(import_path), name)\n        except ModuleNotFoundError as exc:\n            raise ModuleNotFoundError(\n                f\"The package {package_name} is required to use `{name}`. \"\n                f\"Install it with: pip install {package_name}\"\n            ) from exc\n```\n\n### Namespace compatibility\n\nThe core namespace module and the objects it re-exports have different compatibility rules:\n\n- While an owning package is `alpha`, `beta`, or `rc`, imports for objects from that package may be added, removed,\n  or moved between approved lazy-loading namespaces by explicit core-team decision. Those object paths follow the\n  owning package's prerelease lifecycle.\n- Do not remove a core namespace module unless it is empty after the change and is used exclusively by packages\n  that have not reached `released`.\n- If a namespace exposes objects from any released package, keep the namespace. Changing import paths for released\n  objects requires a deprecated forwarding path where feasible; otherwise the agreed issue must include migration\n  guidance, explicit breaking-change acknowledgement, and the required Core and root meta-package version changes.\n\n## Adding a New Connector Package\n\n**Important:** Do not create a new package unless approved by the core team.\n\nEvery new package starts as `alpha`.\n\n### Alpha package checklist\n\n1. Create directory under `packages/` (e.g., `packages/my-connector/`)\n2. Add the package to `tool.uv.sources` in root `pyproject.toml`\n3. Set the package version to the alpha pattern: `1.0.0a<date>`\n4. Set the package classifier to `Development Status :: 3 - Alpha`\n5. Include samples inside the package (e.g., `packages/my-connector/samples/`)\n6. Do **NOT** add to `[all]` extra in `packages/core/pyproject.toml`\n7. Do **NOT** create lazy loading in core yet\n8. Add the package to `python/PACKAGE_STATUS.md` with lifecycle state `alpha` and meta-package membership `no`,\n   and keep that file updated when packages are added, removed, renamed, promoted, or have their membership\n   changed. If the package exposes individually staged APIs, keep the feature list there current too.\n9. Keep the `Typing :: Typed` classifier and the `py.typed` marker in step. The classifier alone is a\n   promise PEP 561 keeps through the `py.typed` file inside the package directory, and that file is\n   the signal checkers act on: a package that declares `Typing :: Typed` without shipping it is not\n   treated as typed, so its API falls back to whatever a checker does with an untyped import\n   (`Any`, `Unknown`, or a missing-stub diagnostic) instead of the inline annotations. Check both,\n   not one:\n\n   ```bash\n   # every package that claims to be typed must ship the marker\n   cd python/packages\n   for d in */; do\n     d=${d%/}\n     [ -f \"$d/pyproject.toml\" ] || continue\n     if grep -q \"Typing :: Typed\" \"$d/pyproject.toml\" && ! ls \"$d\"/agent_framework*/py.typed >/dev/null 2>&1; then\n       echo \"missing py.typed: $d\"\n     fi\n   done\n   ```\n\n   Note that `py.typed` only makes annotations that are already there visible; it adds none, so a\n   package that has not been type-checked may surface further errors once the marker lands.\n\nRecommended dependency workflow during connector implementation:\n\n1. Add the dependency to the target package:\n   `uv run poe add-dependency-to-project --package core --dependency \"<dependency-spec>\"`\n2. Implement connector code and tests.\n3. Validate dependency bounds for that package/dependency:\n   `uv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"`\n4. If the package has meaningful tests/checks that validate dependency compatibility, you can use the add + validation flow in one command:\n   `uv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"`\n   If compatibility checks are not in place yet, add the dependency first, then implement tests before running bound validation.\n\n### Promotion path\n\nCreate a GitHub issue for every package promotion and get core-team agreement before implementing the promotion.\nThe issue must record:\n\n- the current and target lifecycle stages;\n- whether the package should be included in the root meta-package, with rationale based on the criteria above; and\n- the lazy-loading namespace decision for the transition: `alpha` -> `beta` selects whether and where to expose the\n  package, while `beta` -> `rc` and `rc` -> `released` preserve the existing namespace by default and may change\n  the package's prerelease object imports only by explicit core-team decision and under the namespace compatibility\n  rules above.\n\nRecord an explicit `no` or `none` when the package should remain outside the meta-package or should not have a\nlazy-loading namespace. Do not infer either decision from the target lifecycle stage.\n\nPromotion work is not isolated to the package being promoted. If a promotion changes dependency\nmetadata for downstream packages, also update the dependent packages' own versions so they publish\nnew metadata alongside the promoted dependency bounds.\nApply the internal package dependency update rules from the versioning section below during\npromotions as well as standalone version update work.\n\n#### Alpha -> Beta\n\nMove a package to `beta` when it is stable enough for broader prerelease use.\n\n1. Update the package version to the beta pattern: `1.0.0b<date>`\n2. Update the classifier to `Development Status :: 4 - Beta`\n3. Move samples to the root `samples/` tree and remove package-local samples\n4. Apply the lazy-loading decision recorded in the promotion issue, creating or updating the approved namespace\n   when applicable\n5. Apply the meta-package decision recorded in the promotion issue. The default is to remain excluded; add the\n   package to `[all]` only when inclusion is explicitly approved.\n6. Update the lifecycle state and meta-package membership in `python/PACKAGE_STATUS.md`\n\nAfter `alpha`, there should be no samples left inside a package folder.\n\n#### Beta -> RC\n\nMove a package to `rc` when its API is close to the final released shape.\n\n1. Update the package version to the release-candidate pattern: `1.0.0rc<number>`\n2. Keep the classifier at `Development Status :: 4 - Beta` because PyPI does not have a separate\n   release-candidate classifier\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; the stage\n   transition alone does not add it to `core[all]`\n4. Preserve the existing lazy-loading namespace by default. Changes to the package's prerelease object imports are\n   discouraged and require explicit core-team approval recorded in the promotion issue; apply the namespace\n   compatibility rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `rc` and keep its membership value current\n\n#### RC -> Released\n\nMove a package to `released` when it no longer carries a prerelease qualifier.\n\n1. Update the package version to the stable pattern: `1.0.0`\n2. Update the classifier to `Development Status :: 5 - Production/Stable`\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; release does\n   not imply inclusion in `core[all]`\n4. Preserve the lazy-loading namespace used at RC by default. Any final changes to the package's prerelease object\n   imports require explicit core-team approval recorded in the promotion issue; apply the namespace compatibility\n   rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `released` and keep its membership value current\n7. Update all `README.md` files that install that package with\n   `pip install agent-framework-... --pre` so they use `pip install agent-framework-...` without\n   the `--pre` suffix\n\n## Versioning\n\n### Internal package dependency updates\n\n- If package A depends on package B within this repository, only update package A's dependency\n  declaration when the work on package B actually affects package A.\n- If package A does not need anything from the package B change, leave package A's dependency\n  declaration unchanged.\n- If package A does need something from the package B change, update package A's dependency\n  declaration to the version or versioning scheme that matches what package A now requires.\n- If package B is promoted to a different lifecycle stage, update package A's dependency\n  declaration to the new versioning scheme for package B even when the only change is the stage\n  transition itself.\n- When Core releases, advance each workspace package floor in `agent-framework-core[all]` to that package's\n  co-released version, including unchanged packages at their existing version. Keep an upper bound appropriate\n  for the package's current major version. This release-cohort metadata is independent of whether the package\n  itself needed a version bump.\n- Use this guidance both for ordinary version updates and for package promotion work.\n\n- All non-core packages declare a lower bound on `agent-framework-core`\n- When core version bumps with breaking changes, update the lower bound in all packages\n- Non-core packages version independently; only raise core bound when using new core APIs\n- If promoting a package changes a dependent package's published dependency metadata, bump the\n  dependent package's own version in the correct lifecycle pattern for its current stage\n- Lifecycle version patterns:\n  - `alpha`: `1.0.0a<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `beta`: `1.0.0b<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `rc`: `1.0.0rc<number>` where `<number>` increments only when the package has changes\n  - `released`: `X.Y.Z` using semver per package\n- For alpha/beta date stamps, use the current Pacific date as the cutoff, not UTC and not the user's local\n  timezone. Same-Pacific-day re-cuts use a `.postN` suffix. Honor an explicit user-provided date over this\n  default.\n- Keep the `Development Status` classifier in `pyproject.toml` aligned with the lifecycle stage:\n  - `alpha` -> `Development Status :: 3 - Alpha`\n  - `beta` -> `Development Status :: 4 - Beta`\n  - `rc` -> `Development Status :: 4 - Beta`\n  - `released` -> `Development Status :: 5 - Production/Stable`\n- See the PyPI classifier list for the available classifier values:\n  `https://pypi.org/classifiers/`\n\n## Installation Options\n\n```bash\npip install agent-framework-core          # Core only\npip install agent-framework-core[all]     # Core + curated standard integrations\npip install agent-framework               # Same standard install set as core[all]\npip install agent-framework-foundry       # Specific connector (pulls in core)\n```\n\n## Maintaining Documentation\n\nWhen changing a package, check if its `AGENTS.md` needs updates:\n- Adding/removing/renaming public classes or functions\n- Changing the package's purpose or architecture\n- Modifying import paths or usage patterns\n\nKeep `python/PACKAGE_STATUS.md` updated when:\n- A package is added, removed, renamed, or promoted between lifecycle stages\n- A package is added to or removed from the root meta-package\n- A package starts or stops exposing individually staged experimental or release-candidate APIs\n\nWhen a package adds, removes, or renames environment variables, update the related documentation in the same\nchange:\n- The package's `README.md` for package-level configuration/env var guidance\n- `samples/README.md` if the package is included in `packages/core/pyproject.toml` `[all]` and the env var is\n  part of the consolidated package env-var inventory\n- Any affected sample/package-local `.env.example`, `.env.template`, or sample README files when sample setup\n  changes alongside the package\n","python/.github/skills/python-code-quality/SKILL.md":"---\nname: python-code-quality\ndescription: >\n  Code quality checks, linting, formatting, and type checking commands for the\n  Agent Framework Python codebase. Use this when running checks, fixing lint\n  errors, or troubleshooting CI failures.\n---\n\n# Python Code Quality\n\n## Quick Commands\n\nAll commands run from the `python/` directory:\n\n```bash\n# Syntax formatting + checks (parallel across packages by default)\nuv run poe syntax\nuv run poe syntax -P core\nuv run poe syntax -F    # Format only\nuv run poe syntax -C    # Check only\nuv run poe syntax -S    # Samples only\n\n# Type checking\n#\n# Division of labor (see \"Type checking architecture\" below):\n#   - Pyright (strict) is the source-code type checker.\n#   - Pyright (relaxed `basic`), mypy, pyrefly, ty, zuban all check the TESTS;\n#     pyright/pyrefly/ty also check the SAMPLES (mypy/zuban skip script-style samples).\nuv run poe pyright       # Pyright (strict) over SOURCE, fan-out across packages\nuv run poe pyright -P core\nuv run poe pyright -A\nuv run poe test-typing   # mypy + pyrefly + ty + zuban + pyright over each package's TESTS\nuv run poe test-typing -P core\nuv run poe test-typing -S                       # samples (pyrefly + ty + pyright)\nuv run poe test-typing -P core --checker mypy   # narrow to one checker (repeatable)\nuv run poe test-typing -P core --checker pyright # relaxed pyright over the tests\nuv run poe mypy          # alias: MyPy over the tests only\nuv run poe mypy -P core\nuv run poe typing        # Pyright (source) + the tests checkers\nuv run poe typing -P core\nuv run poe typing -A\n\n# All package-level checks in parallel (syntax + pyright)\nuv run poe check-packages\n\n# Full check (packages + samples + tests + markdown)\nuv run poe check\nuv run poe check -P core\n\n# Samples only\nuv run poe check -S\nuv run poe pyright -S\n\n# Markdown code blocks\nuv run poe markdown-code-lint\n```\n\nPoe and the pytest toolchain stay in the cross-version development\nenvironment. Ruff and the type checkers use pinned\n`tooling/requirements-*.txt` files; prek is selected from the `tool-hooks`\ndependency group only when needed.\n\n## Pre-commit Hooks (prek)\n\nPrek hooks run automatically on commit. They stay lightweight and only check\nchanged files.\n\n```bash\n# Install hooks\nuv run poe prek-install\n\n# Run all hooks manually\nuv run --group tool-hooks prek run -a\n\n# Run on last commit\nuv run --group tool-hooks prek run --last-commit\n```\n\nThey run changed-package syntax formatting/checking, markdown code lint only\nwhen markdown files change, and sample syntax lint/pyright only when files\nunder `samples/` change.\nThey intentionally do not run workspace `pyright` or `mypy` by default.\n\n## Type checking architecture\n\nFollowing the \"too many type checkers\" approach, type checkers are split by target:\n\n| Target | Checker(s) | Mode | Config |\n|--------|-----------|------|--------|\n| Source (`agent_framework*`) | **pyright** | strict | `[tool.pyright]` in `pyproject.toml` |\n| Tests | pyright, mypy, pyrefly, ty, zuban | relaxed/basic | `pyrightconfig.tests.json`, `[tool.mypy]`, `pyrefly.toml`, `ty` rules |\n| Samples | pyright, pyrefly, ty | basic | `pyrightconfig.samples.json`, `pyrefly.samples.toml`, `ty.samples.toml` |\n\n- **Pyright is the only *strict* source-code checker**, and it ALSO runs in a relaxed\n  `basic` profile over the tests and samples (so the surfaces customers copy from are\n  validated by every checker, including pyright). MyPy was removed from source; its\n  `[tool.mypy]` block is now a *relaxed* profile used only for tests/samples.\n- The extra checkers run over tests/samples because those exercise the public API the way\n  users do. The profile is intentionally relaxed (private access allowed, untyped test\n  bodies allowed) so authors aren't forced into ugly over-annotation.\n- **Gating checkers** are `pyright`, `mypy`, `pyrefly`, `ty`, and `zuban` — all five run by\n  default and gate CI. `zuban` is the strictest of the mypy-compatible pair, so the same\n  `[tool.mypy]` config yields more findings; suppress zuban-only friction with shared\n  `# type: ignore[code]`. Suppress relaxed-pyright friction with `# pyright: ignore[rule]`.\n- **Samples** add `pyright` to `pyrefly` + `ty` — mypy/zuban can't resolve script-style\n  sample layouts (numeric-prefixed dirs, duplicate `main.py`), but pyright handles them.\n- `pyrefly.samples.toml` enables fallback lookup for standalone sibling imports.\n  The ty sample profile uses first-party `root = [\".\"]` for PEP 723 sibling helpers,\n  preserving automatic extra-path lookup for the existing samples.\n- The strict source-pyright (`[tool.pyright]`) enforces `reportUnnecessaryTypeIgnoreComment`\n  and excludes tests/samples; the relaxed test/sample pyright configs do not flag unnecessary\n  ignores.\n\n## Ruff Configuration\n\n- Line length: 120\n- Target: Python 3.10+\n- Auto-fix enabled\n- Rules: ASYNC, B, CPY, D, E, ERA, F, FIX, I, INP, ISC, Q, RET, RSE, RUF, SIM, T20, TD, W, T100, S\n- Scripts directory is excluded from checks\n\n## Pyright Configuration\n\n- **Source**: strict mode (`[tool.pyright]`), `reportUnnecessaryTypeIgnoreComment = \"error\"`,\n  excludes tests, samples, .venv, packages/devui/frontend.\n- **Tests**: relaxed `basic` profile (`pyrightconfig.tests.json`) — private import/usage and\n  not-required TypedDict access allowed; runs as the `pyright` checker in `test-typing`.\n- **Samples**: relaxed `basic` profile (`pyrightconfig.samples.json`, with a py310 variant) —\n  runs as the `pyright` checker in `test-typing -S`.\n\n## Parallel Execution\n\nThe task runner (`scripts/task_runner.py`) executes the cross-product of\n(package × task) in parallel using ThreadPoolExecutor. Single items run\nin-process with streaming output.\n\n## CI Workflow\n\nCI splits into 4 parallel jobs:\n1. **Pre-commit hooks** — lightweight hooks (SKIP=poe-check)\n2. **Package checks** — syntax/pyright (source) via check-packages\n3. **Samples & markdown** — `check -S` plus `markdown-code-lint`\n4. **Test Typing** — change-detected mypy/pyrefly/ty over tests (`ci-test-typing`)\n","python/.github/skills/agent-framework-py-release/SKILL.md":"# agent-framework-py-release\n\nPath: `python/.github/skills/agent-framework-py-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/agent-framework-py-release/SKILL.md)","python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md":"# foundry-hosted-agent-validation\n\nPath: `python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md)","python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md":"# foundry-config-setup\n\nPath: `python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md)","dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md":"# regex-tester\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md)","python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md":"# valuation\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md)","python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md":"# risk-scoring\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md)","python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md)","python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md":"# unit-converter\n\nPath: `python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md)","python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md":"# volume-converter\n\nPath: `python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md)","python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md":"# length-converter\n\nPath: `python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md":"# valuation\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md":"# risk-scoring\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md":"# support-style\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md":"# escalation-policy\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md)","python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md":"# support-style\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md)","python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md":"# escalation-policy\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md)",".github/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/.github/copilot-instructions.md)","dotnet/AGENTS.md":"# dotnet - AI Agent Protocol & Instructions\n\nPath: `dotnet/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/AGENTS.md)","python/AGENTS.md":"# python - AI Agent Protocol & Instructions\n\nPath: `python/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/AGENTS.md)","python/packages/tools/README.md":"# tools Documentation\n\nPath: `python/packages/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/tools/README.md)","python/packages/redis/AGENTS.md":"# Redis Skill\n\nPath: `python/packages/redis/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/AGENTS.md)","python/packages/redis/README.md":"# redis Documentation\n\nPath: `python/packages/redis/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/README.md)","python/packages/purview/AGENTS.md":"# Purview Skill\n\nPath: `python/packages/purview/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/AGENTS.md)","python/packages/purview/README.md":"# purview Documentation\n\nPath: `python/packages/purview/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/README.md)","python/packages/orchestrations/README.md":"# orchestrations Documentation\n\nPath: `python/packages/orchestrations/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/orchestrations/README.md)","python/packages/openai/AGENTS.md":"# Openai Skill\n\nPath: `python/packages/openai/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/AGENTS.md)","python/packages/openai/README.md":"# openai Documentation\n\nPath: `python/packages/openai/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/README.md)","python/packages/ollama/AGENTS.md":"# Ollama Skill\n\nPath: `python/packages/ollama/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/AGENTS.md)","python/packages/ollama/README.md":"# ollama Documentation\n\nPath: `python/packages/ollama/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/README.md)","python/packages/monty/AGENTS.md":"# Monty Skill\n\nPath: `python/packages/monty/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/AGENTS.md)","python/packages/monty/README.md":"# monty Documentation\n\nPath: `python/packages/monty/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/README.md)","python/packages/mistral/AGENTS.md":"# Mistral Skill\n\nPath: `python/packages/mistral/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/AGENTS.md)","python/packages/mistral/README.md":"# mistral Documentation\n\nPath: `python/packages/mistral/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/README.md)","python/packages/mem0/AGENTS.md":"# Mem0 Skill\n\nPath: `python/packages/mem0/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/AGENTS.md)","python/packages/mem0/README.md":"# mem0 Documentation\n\nPath: `python/packages/mem0/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/README.md)","python/packages/lab/AGENTS.md":"# Lab Skill\n\nPath: `python/packages/lab/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/AGENTS.md)","python/packages/lab/README.md":"# lab Documentation\n\nPath: `python/packages/lab/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/README.md)","python/packages/hyperlight/README.md":"# hyperlight Documentation\n\nPath: `python/packages/hyperlight/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hyperlight/README.md)","python/packages/hosting-telegram/README.md":"# hosting-telegram Documentation\n\nPath: `python/packages/hosting-telegram/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-telegram/README.md)","python/packages/hosting-responses/README.md":"# hosting-responses Documentation\n\nPath: `python/packages/hosting-responses/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-responses/README.md)","python/packages/hosting-mcp/AGENTS.md":"# Hosting-mcp Skill\n\nPath: `python/packages/hosting-mcp/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/AGENTS.md)","python/packages/hosting-mcp/README.md":"# hosting-mcp Documentation\n\nPath: `python/packages/hosting-mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/README.md)","python/packages/hosting-a2a/AGENTS.md":"# Hosting-a2a Skill\n\nPath: `python/packages/hosting-a2a/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/AGENTS.md)","python/packages/hosting-a2a/README.md":"# hosting-a2a Documentation\n\nPath: `python/packages/hosting-a2a/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/README.md)","python/packages/hosting/README.md":"# hosting Documentation\n\nPath: `python/packages/hosting/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting/README.md)","python/packages/github_copilot/AGENTS.md":"# Github_copilot Skill\n\nPath: `python/packages/github_copilot/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/AGENTS.md)","python/packages/github_copilot/README.md":"# github_copilot Documentation\n\nPath: `python/packages/github_copilot/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/README.md)","python/packages/gemini/AGENTS.md":"# Gemini Skill\n\nPath: `python/packages/gemini/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/AGENTS.md)","python/packages/gemini/README.md":"# gemini Documentation\n\nPath: `python/packages/gemini/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/README.md)","python/packages/foundry_local/AGENTS.md":"# Foundry_local Skill\n\nPath: `python/packages/foundry_local/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/AGENTS.md)","python/packages/foundry_local/README.md":"# foundry_local Documentation\n\nPath: `python/packages/foundry_local/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/README.md)","python/packages/foundry_hosting/README.md":"# foundry_hosting Documentation\n\nPath: `python/packages/foundry_hosting/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_hosting/README.md)","python/packages/foundry/README.md":"# foundry Documentation\n\nPath: `python/packages/foundry/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry/README.md)","python/packages/devui/AGENTS.md":"# Devui Skill\n\nPath: `python/packages/devui/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/AGENTS.md)","python/packages/devui/dev.md":"# Devui Skill\n\nPath: `python/packages/devui/dev.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/dev.md)","python/packages/devui/README.md":"# devui Documentation\n\nPath: `python/packages/devui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/README.md)","python/packages/declarative/AGENTS.md":"# Declarative Skill\n\nPath: `python/packages/declarative/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/AGENTS.md)","python/packages/declarative/README.md":"# declarative Documentation\n\nPath: `python/packages/declarative/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/README.md)","python/packages/core/AGENTS.md":"# Core Skill\n\nPath: `python/packages/core/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/AGENTS.md)","python/packages/core/pyrightconfig.dependency.json":"# Core Skill\n\nPath: `python/packages/core/pyrightconfig.dependency.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/pyrightconfig.dependency.json)","python/packages/core/README.md":"# core Documentation\n\nPath: `python/packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/README.md)","python/packages/copilotstudio/AGENTS.md":"# Copilotstudio Skill\n\nPath: `python/packages/copilotstudio/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/AGENTS.md)","python/packages/copilotstudio/README.md":"# copilotstudio Documentation\n\nPath: `python/packages/copilotstudio/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/README.md)","python/packages/claude/AGENTS.md":"# Claude Skill\n\nPath: `python/packages/claude/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/AGENTS.md)","python/packages/claude/README.md":"# claude Documentation\n\nPath: `python/packages/claude/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/README.md)","python/packages/chatkit/AGENTS.md":"# Chatkit Skill\n\nPath: `python/packages/chatkit/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/AGENTS.md)","python/packages/chatkit/README.md":"# chatkit Documentation\n\nPath: `python/packages/chatkit/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/README.md)","python/packages/bedrock/AGENTS.md":"# Bedrock Skill\n\nPath: `python/packages/bedrock/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/AGENTS.md)","python/packages/bedrock/README.md":"# bedrock Documentation\n\nPath: `python/packages/bedrock/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/README.md)","python/packages/azure-cosmos-memory/AGENTS.md":"# Azure-cosmos-memory Skill\n\nPath: `python/packages/azure-cosmos-memory/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/AGENTS.md)","python/packages/azure-cosmos-memory/README.md":"# azure-cosmos-memory Documentation\n\nPath: `python/packages/azure-cosmos-memory/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/README.md)","python/packages/azure-cosmos/AGENTS.md":"# Azure-cosmos Skill\n\nPath: `python/packages/azure-cosmos/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/AGENTS.md)","python/packages/azure-cosmos/README.md":"# azure-cosmos Documentation\n\nPath: `python/packages/azure-cosmos/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/README.md)","python/packages/azure-contentunderstanding/AGENTS.md":"# Azure-contentunderstanding Skill\n\nPath: `python/packages/azure-contentunderstanding/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/AGENTS.md)","python/packages/azure-contentunderstanding/README.md":"# azure-contentunderstanding Documentation\n\nPath: `python/packages/azure-contentunderstanding/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/README.md)","python/packages/azure-ai-search/AGENTS.md":"# Azure-ai-search Skill\n\nPath: `python/packages/azure-ai-search/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/AGENTS.md)","python/packages/azure-ai-search/README.md":"# azure-ai-search Documentation\n\nPath: `python/packages/azure-ai-search/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/README.md)","python/packages/anthropic/AGENTS.md":"# Anthropic Skill\n\nPath: `python/packages/anthropic/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/AGENTS.md)","python/packages/anthropic/README.md":"# anthropic Documentation\n\nPath: `python/packages/anthropic/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/README.md)","python/packages/ag-ui/AGENTS.md":"# Ag-ui Skill\n\nPath: `python/packages/ag-ui/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/AGENTS.md)","python/packages/ag-ui/README.md":"# ag-ui Documentation\n\nPath: `python/packages/ag-ui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/README.md)","python/packages/a2a/AGENTS.md":"# A2a Skill\n\nPath: `python/packages/a2a/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/AGENTS.md)","python/packages/a2a/README.md":"# a2a Documentation\n\nPath: `python/packages/a2a/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/README.md)","dotnet/samples/02-agents/Agents/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/README.md)","python/packages/lab/gaia/README.md":"# gaia Documentation\n\nPath: `python/packages/lab/gaia/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/gaia/README.md)","python/packages/lab/lightning/README.md":"# lightning Documentation\n\nPath: `python/packages/lab/lightning/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/lightning/README.md)","python/packages/lab/tau2/README.md":"# tau2 Documentation\n\nPath: `python/packages/lab/tau2/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/tau2/README.md)","python/packages/devui/frontend/components.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/components.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/components.json)","python/packages/devui/frontend/package.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package.json)","python/packages/devui/frontend/package-lock.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package-lock.json)","python/packages/devui/frontend/README.md":"# frontend Documentation\n\nPath: `python/packages/devui/frontend/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/README.md)","python/packages/devui/frontend/tsconfig.app.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.app.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.app.json)","python/packages/devui/frontend/tsconfig.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.json)","python/packages/devui/frontend/tsconfig.node.json":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.node.json)","python/packages/core/.vscode/launch.json":"# .vscode Skill\n\nPath: `python/packages/core/.vscode/launch.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/.vscode/launch.json)","python/packages/ag-ui/agent_framework_ag_ui_examples/README.md":"# agent_framework_ag_ui_examples Documentation\n\nPath: `python/packages/ag-ui/agent_framework_ag_ui_examples/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/README.md)","python/packages/ag-ui/getting_started/README.md":"# getting_started Documentation\n\nPath: `python/packages/ag-ui/getting_started/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/getting_started/README.md)","python/samples/02-agents/skills/README.md":"# Skills Skill\n\nPath: `python/samples/02-agents/skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/README.md)","python/samples/02-agents/tools/README.md":"# tools Documentation\n\nPath: `python/samples/02-agents/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/README.md)","dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md)","dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md)","dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md)","dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md)","dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md)","dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md)","dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md)","dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md)","dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md)","dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md)","dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md)","dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md)","dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md":"# A2AAgent_AsFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md)","dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md":"# Subagent: readme\n\nPath: `dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md)","dotnet/src/Shared/Foundry/Agents/README.md":"# Subagent: readme\n\nPath: `dotnet/src/Shared/Foundry/Agents/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/src/Shared/Foundry/Agents/README.md)","python/packages/declarative/tests/workflows/http_request.yaml":"# Workflows Skill\n\nPath: `python/packages/declarative/tests/workflows/http_request.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/tests/workflows/http_request.yaml)","python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json":"# .vscode Skill\n\nPath: `python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json)","python/samples/02-agents/skills/mixed_skills/README.md":"# Mixed_skills Skill\n\nPath: `python/samples/02-agents/skills/mixed_skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/README.md)","python/samples/02-agents/skills/mcp_based_skill/README.md":"# Mcp_based_skill Skill\n\nPath: `python/samples/02-agents/skills/mcp_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mcp_based_skill/README.md)","python/samples/02-agents/skills/file_based_skill/README.md":"# File_based_skill Skill\n\nPath: `python/samples/02-agents/skills/file_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/README.md)","python/samples/02-agents/skills/code_defined_skill/README.md":"# Code_defined_skill Skill\n\nPath: `python/samples/02-agents/skills/code_defined_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/code_defined_skill/README.md)","python/samples/02-agents/skills/class_based_skill/README.md":"# Class_based_skill Skill\n\nPath: `python/samples/02-agents/skills/class_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/class_based_skill/README.md)","python/samples/02-agents/skills/script_approval/README.md":"# Script_approval Skill\n\nPath: `python/samples/02-agents/skills/script_approval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/script_approval/README.md)","python/samples/02-agents/skills/skill_filtering/README.md":"# Skill_filtering Skill\n\nPath: `python/samples/02-agents/skills/skill_filtering/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/README.md)","python/samples/02-agents/skills/skills_auto_approval/README.md":"# Skills_auto_approval Skill\n\nPath: `python/samples/02-agents/skills/skills_auto_approval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skills_auto_approval/README.md)","python/samples/02-agents/tools/local_code_interpreter/README.md":"# local_code_interpreter Documentation\n\nPath: `python/samples/02-agents/tools/local_code_interpreter/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/local_code_interpreter/README.md)","python/samples/02-agents/tools/monty_code_interpreter/README.md":"# monty_code_interpreter Documentation\n\nPath: `python/samples/02-agents/tools/monty_code_interpreter/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/monty_code_interpreter/README.md)","python/samples/03-workflows/declarative/function_tools/README.md":"# function_tools Documentation\n\nPath: `python/samples/03-workflows/declarative/function_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/03-workflows/declarative/function_tools/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md":"# Agent_Step17_OpenAPITools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md":"# Agent_Step13_Plugins Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md":"# Agent_Step09_UsingMcpClientAsTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md)","dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md":"# Agent_Step03_UsingFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md)","dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md":"# Agent_Anthropic_Step03_UsingFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md":"# Hosted-McpTools Documentation\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md)","dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md":"# Hosted-LocalTools Documentation\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md)","dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json":"# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json)","dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json":"# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json)","python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json)","python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml":"# Tools Skill\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml)","python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml":"# Tools Skill\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml)","python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md":"# tools Documentation\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md)","dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md)","dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md)","python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md":"# References Skill\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md)","python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md":"# References Skill\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md)","python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md":"# References Skill\n\nPath: `python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md)","python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md":"# References Skill\n\nPath: `python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md)","dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md)"},"items":[{"name":"AGENTS.md","path":"dotnet/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/AGENTS.md","title":"dotnet - AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# dotnet - AI Agent Protocol & Instructions\n\nPath: `dotnet/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/AGENTS.md)","tokens":300,"sizeBytes":182},{"name":"AGENTS.md","path":"python/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/AGENTS.md","title":"python - AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# python - AI Agent Protocol & Instructions\n\nPath: `python/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/AGENTS.md)","tokens":300,"sizeBytes":182},{"name":"SKILL.md","path":".github/skills/pull-requests/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/.github/skills/pull-requests/SKILL.md","title":"pull-requests","category":"anthropic-skill","format":"markdown","content":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Stable specifications\n\nFor Python function-calling loop changes, read\n[`docs/specs/004-python-function-calling-loop.md`](../../../docs/specs/004-python-function-calling-loop.md)\nand validate the PR against it. Do not edit that specification by default. It\nis a stable cross-package contract, not a per-PR changelog. A specification\nchange is warranted only when the PR intentionally changes normative behavior,\nthe scenario inventory, an acknowledged coverage gap, or the authoritative\nscenario-to-test mapping; keep any such edit to the smallest affected sections.\n\n### Community project listings\n\nWhen either `python/samples/community-projects.md` or\n`dotnet/samples/community-projects.md` changes, load and apply the\n[`community-projects`](../community-projects/SKILL.md) skill before reviewing\nor approving the change. Load it as well when an issue or pull request proposes\nan external project listing, even if neither catalog file has changed yet.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","frontmatter":{"name":"pull-requests","description":"Guidance for creating pull requests and handling PR review comments in the Agent Framework repository. Use this when writing a PR description (filling out the PR template) or when responding to and resolving review comments on an existing PR.\n"},"isInternal":false,"tokens":1542,"sizeBytes":6793},{"name":"SKILL.md","path":"dotnet/.github/skills/build-and-test/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/.github/skills/build-and-test/SKILL.md","title":"build-and-test","category":"anthropic-skill","format":"markdown","content":"---\nname: build-and-test\ndescription: How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.\n---\n\n- Only **UnitTest** projects need to be run locally; IntegrationTests require external dependencies.\n- See `../project-structure/SKILL.md` for project structure details.\n\n## Build, Test, and Lint Commands\n\n```bash\n# From dotnet/ directory\ndotnet restore --tl:off   # Restore dependencies for all projects\ndotnet build --tl:off     # Build all projects\ndotnet test               # Run all tests\ndotnet format             # Auto-fix formatting for all projects\n\n# Build/test/format a specific project (preferred for isolated/internal changes)\ndotnet build src/Microsoft.Agents.AI.<Package> --tl:off\ndotnet test --project tests/Microsoft.Agents.AI.<Package>.UnitTests\ndotnet format src/Microsoft.Agents.AI.<Package>\n\n# Run a single test\n# Replace the filter values with the appropriate assembly, namespace, class, and method names for the test you want to run and use * as a wildcard elsewhere, e.g. \"/*/*/HttpClientTests/GetAsync_ReturnsSuccessStatusCode\"\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for some projects\ndotnet test --filter-query \"/<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>\" --ignore-exit-code 8\n\n# Run unit tests only\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for integration test projects\ndotnet test --filter-query \"/*UnitTests*/*/*/*\" --ignore-exit-code 8\n```\n\nUse `--tl:off` when building to avoid flickering when running commands in the agent.\n\n## Speeding Up Builds and Testing\n\nThe full solution is large. Use these shortcuts:\n\n| Change type | What to do |\n|-------------|------------|\n| Isolated/Internal logic | Build only the affected project and its `*.UnitTests` project. Fix issues, then build the full solution and run all unit tests. |\n| Public API surface | Build the full solution and run all unit tests immediately. |\n\nExample: Building a single code project for all target frameworks\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions\n```\n\nExample: Building a single code project for just .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions -f net10.0\n```\n\nExample: Running tests for a single project using .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0\n```\n\nExample: Running a single test in a specific project using .NET 10.\nProvide the full namespace, class name, and method name for the test you want to run:\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0 --filter-query \"/*/Microsoft.Agents.AI.Abstractions.UnitTests/AgentRunOptionsTests/CloningConstructorCopiesProperties\"\n```\n\n### Multi-target framework tip\n\nMost projects target multiple .NET frameworks. If the affected code does **not** use `#if` directives for framework-specific logic, pass `-f net10.0` to speed up building and testing.\n\n### Package Restore tip\n\n`dotnet build` will try and restore packages for all projects on each build, which can be slow.\nUnless packages have been changed, or it's the first time building the solution, add `--no-restore` to the build command to skip this step and speed up builds.\n\nJust remember to run `dotnet restore` after pulling changes, making changes to project references, or when building for the first time.\n\n### Testing on Linux tip\n\nUnit tests target both .NET Framework as well as .NET Core. When running on Linux, only the .NET Core tests can be run, as .NET Framework is not supported on Linux.\n\nTo run only the .NET Core tests, use the `-f net10.0` option with `dotnet test`.\n\n### Microsoft Testing Platform (MTP)\n\nTests use the [Microsoft Testing Platform](https://learn.microsoft.com/dotnet/core/testing/unit-testing-platform-intro) via xUnit v3. Key differences from the legacy VSTest runner:\n\n- **`dotnet test` requires `--project`** to specify a test project directly (positional arguments are no longer supported).\n- **Test output** uses the MTP format (e.g., `[✓112/x0/↓0]` progress and `Test run summary: Passed!`).\n- **TRX reports** use `--report-xunit-trx` instead of `--logger trx`.\n- **Code coverage** uses `Microsoft.Testing.Extensions.CodeCoverage` with `--coverage --coverage-output-format cobertura`.\n- **Running a test project directly** is supported via `dotnet run --project <test-project>`. This bypasses the `dotnet test` infrastructure and runs the test executable directly with the MTP command line.\n\n- **Running tests across the solution** with a filter may cause some projects to match zero tests, which MTP treats as a failure (exit code 8). Use `--ignore-exit-code 8` to suppress this:\n\n```bash\n# Run all unit tests across the solution, ignoring projects with no matching tests\ndotnet test --solution ./agent-framework-dotnet.slnx --no-build -f net10.0 --ignore-exit-code 8\n```\n\n- **Running tests with `--solution` for a specific TFM** requires all projects in the solution to support that TFM. Not all projects target every framework (e.g., some are `net10.0`-only). Use `./dotnet/eng/scripts/New-FilteredSolution.ps1` to generate a filtered solution:\n\n```powershell\n# Generate a filtered solution for net472 and run tests\n$filtered = ./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net472\ndotnet test --solution $filtered --no-build -f net472 --ignore-exit-code 8\n\n# Exclude samples and keep only unit test projects\n./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net10.0 -ExcludeSamples -TestProjectNameFilter \"*UnitTests*\" -OutputPath dotnet/filtered-unit.slnx\n```\n\n```bash\n# Run tests via dotnet test (uses MTP under the hood)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Run tests with code coverage (Cobertura format)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 --coverage --coverage-output-format cobertura --coverage-settings ./tests/coverage.runsettings\n\n# Run tests directly via dotnet run (MTP native command line)\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Show MTP command line help\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 -- -?\n```\n","frontmatter":{"name":"build-and-test","description":"How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes."},"isInternal":false,"tokens":1559,"sizeBytes":6447},{"name":"SKILL.md","path":"dotnet/.github/skills/project-structure/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/.github/skills/project-structure/SKILL.md","title":"project-structure","category":"anthropic-skill","format":"markdown","content":"---\nname: project-structure\ndescription: Explains the project structure of the agent-framework .NET solution\n---\n\n# Agent Framework .NET Project Structure\n\n```\ndotnet/\n├── src/\n│   ├── Microsoft.Agents.AI/                      # Core AI agent implementations\n│   ├── Microsoft.Agents.AI.Abstractions/         # Core AI agent abstractions\n│   ├── Microsoft.Agents.AI.A2A/                  # Agent-to-Agent (A2A) provider\n│   ├── Microsoft.Agents.AI.OpenAI/               # OpenAI provider\n│   ├── Microsoft.Agents.AI.Foundry/               # Microsoft Foundry Agents (v2) provider\n│   ├── Microsoft.Agents.AI.AzureAI.Persistent/   # Legacy Microsoft Foundry Agents (v1) provider\n│   ├── Microsoft.Agents.AI.Anthropic/            # Anthropic provider\n│   ├── Microsoft.Agents.AI.Workflows/            # Workflow orchestration\n│   └── ...                                       # Other packages\n├── samples/                                      # Sample applications\n└── tests/                                        # Unit and integration tests\n```\n\n## Main Folders\n\n| Folder | Contents |\n|--------|----------|\n| `src/` | Source code projects |\n| `tests/` | Test projects — named `<Source-Code-Project>.UnitTests` or `<Source-Code-Project>.IntegrationTests` |\n| `samples/` | Sample projects |\n| `src/Shared`, `src/LegacySupport` | Shared code files included by multiple source code projects (see README.md files in these folders or their subdirectories for instructions on how to include them in a project) |\n","frontmatter":{"name":"project-structure","description":"Explains the project structure of the agent-framework .NET solution"},"isInternal":false,"tokens":340,"sizeBytes":1598},{"name":"SKILL.md","path":"dotnet/.github/skills/pull-requests/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/.github/skills/pull-requests/SKILL.md","title":"pull-requests","category":"anthropic-skill","format":"markdown","content":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","frontmatter":{"name":"pull-requests","description":"Guidance for creating pull requests and handling PR review comments in the Agent Framework repository. Use this when writing a PR description (filling out the PR template) or when responding to and resolving review comments on an existing PR.\n"},"isInternal":false,"tokens":1345,"sizeBytes":5849},{"name":"SKILL.md","path":"dotnet/.github/skills/verify-dotnet-samples/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/.github/skills/verify-dotnet-samples/SKILL.md","title":"verify-dotnet-samples","category":"anthropic-skill","format":"markdown","content":"---\nname: verify-dotnet-samples\ndescription: How to build, run and verify the .NET sample projects in the Agent Framework repository. Use this when a user wants to verify that the samples still function as expected.\n---\n\n# Verifying .NET Sample Projects\n\n## Sample Pre-requisites\n\nWe should only support verifying samples that:\n1. Use environment variables for configuration.\n2. Have no complex setup requirements, e.g., where multiple applications need to be run together, or where we need to launch a browser, etc.\n\nAlways report to the user which samples were run and which were not, and why.\n\n## Verifying a sample\n\nSamples should be verified to ensure that they actually work as intended and that their output matches what is expected.\nFor each sample that is run, output should be produced that shows the result and explains the reasoning about what output\nwas expected, what was produced, and why it didn't match what the sample was expected to produce.\n\nSteps to verify a sample:\n1. Read the code for the sample\n1. Check what environment variables are required for the sample\n1. Check if each environment variable has been set\n1. If there are any missing, give the user a list of missing environment variables to set and terminate\n1. Summarize what the expected output of the sample should be\n1. Run the sample\n1. Show the user any output from the sample run as it gets produced, so that they can see the run progress\n1. Check the output of the run against expectations\n1. After running all requested samples, produce output for each sample that was verified:\n  1. If expectations were matched, output the following:\n     ```text\n     [Sample Name] Succeeded\n     ```\n  1. If expectations were not matched, output the following:\n     ```text\n     [Sample Name] Failed\n     Actual Output:\n     [What the sample produced]\n     Expected Output:\n     [Explanation of what was expected and why the actual output didn't match expectations]\n     ```\n\n## Environment Variables\n\nMost samples use environment variables to configure settings.\n\n```csharp\nvar endpoint = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_ENDPOINT\") ?? throw new InvalidOperationException(\"AZURE_OPENAI_ENDPOINT is not set.\");\nvar deploymentName = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_DEPLOYMENT_NAME\") ?? \"gpt-4o-mini\";\n```\n\nTo run a sample, the environment variables should be set first.\nBefore running a sample, check whether each environment variable in the sample has a value and\nthen give the user a list of environment variables to set.\n\nYou can provide the user some examples of how to set the variables like this:\n\n```bash\nexport AZURE_OPENAI_ENDPOINT=\"https://my-openai-instance.openai.azure.com/\"\nexport AZURE_OPENAI_DEPLOYMENT_NAME=\"gpt-4o-mini\"\n```\n\nTo check if a variable has a value use e.g.:\n\n```bash\necho $AZURE_OPENAI_ENDPOINT\n```\n\n## How to Run a Sample (General Pattern)\n\n```bash\ncd dotnet/samples/<category>/<sample-dir>\ndotnet run\n```\n\nFor multi-targeted projects (e.g., Durable console apps), specify the framework:\n\n```bash\ndotnet run --framework net10.0\n```\n","frontmatter":{"name":"verify-dotnet-samples","description":"How to build, run and verify the .NET sample projects in the Agent Framework repository. Use this when a user wants to verify that the samples still function as expected."},"isInternal":false,"tokens":678,"sizeBytes":3071},{"name":"SKILL.md","path":"dotnet/.github/skills/verify-samples-tool/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/.github/skills/verify-samples-tool/SKILL.md","title":"verify-samples-tool","category":"anthropic-skill","format":"markdown","content":"﻿---\nname: verify-samples-tool\ndescription: How to use the verify-samples tool to run, verify, and manage sample definitions in the Agent Framework repository. Use this when adding, updating, or running sample verification.\n---\n\n# verify-samples Tool\n\nThe `verify-samples` project (`dotnet/eng/verify-samples/`) is an automated tool that runs sample projects and verifies their output using deterministic checks and AI-powered verification.\n\n## Running verify-samples\n\n**Important:** By default, samples must be pre-built before running verify-samples. Build the solution first, or pass `--build` to build samples during the run:\n\n```bash\ncd dotnet\ndotnet build agent-framework-dotnet.slnx -f net10.0\n```\n\nThen run verify-samples:\n\n```bash\n# Run all samples across all categories\ndotnet run --project eng/verify-samples -- --log results.log --csv results.csv\n\n# Run a specific category\ndotnet run --project eng/verify-samples -- --category 02-agents --log results.log\n\n# Run specific samples by name\ndotnet run --project eng/verify-samples -- Agent_Step02_StructuredOutput Agent_Step09_AsFunctionTool\n\n# Control parallelism (default 8)\ndotnet run --project eng/verify-samples -- --parallel 8 --log results.log\n\n# Build samples during run (skips the need for a prior build step)\n# This may cause build conflicts as multiple samples are built in parallel, so use with caution\ndotnet run --project eng/verify-samples -- --build --log results.log\n\n# Combine options\ndotnet run --project eng/verify-samples -- --category 03-workflows --parallel 4 --log results.log --csv results.csv --md results.md\n```\n\n### Required Environment Variables\n\nThe tool itself needs:\n- `AZURE_OPENAI_ENDPOINT` — for the AI verification agent\n- `AZURE_OPENAI_DEPLOYMENT_NAME` (optional, defaults to `gpt-5-mini`)\n\nIndividual samples require their own env vars (for example, `FOUNDRY_PROJECT_ENDPOINT`). The tool automatically checks and skips samples with missing env vars.\n\n### Output Files\n\n- `--log results.log` — detailed per-sample log with stdout/stderr, AI reasoning, and a summary\n- `--csv results.csv` — tabular summary with Sample, ProjectPath, Status, FailedChecks, and Failures columns\n- `--md results.md` — Markdown summary with results table and collapsible failure details (suitable for GitHub PR comments)\n\n## Sample Categories\n\nDefinitions are in the `dotnet/eng/verify-samples/` directory:\n\n| Category | Config File | Registered Key |\n|----------|-------------|----------------|\n| 01-get-started | `GetStartedSamples.cs` | `01-get-started` |\n| 02-agents | `AgentsSamples.cs` | `02-agents` |\n| 03-workflows | `WorkflowSamples.cs` | `03-workflows` |\n\nCategories are registered in `VerifyOptions.cs` in the `s_sampleSets` dictionary.\n\n## SampleDefinition Properties\n\nEach sample is defined as a `SampleDefinition` in the appropriate config file. Key properties:\n\n```csharp\nnew SampleDefinition\n{\n    // Required: Display name for the sample\n    Name = \"Agent_Step02_StructuredOutput\",\n\n    // Required: Relative path from dotnet/ to the sample project directory\n    ProjectPath = \"samples/02-agents/Agents/Agent_Step02_StructuredOutput\",\n\n    // Environment variables the sample requires (throws if missing)\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n\n    // Environment variables with defaults that would prompt on console if unset\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n\n    // Skip this sample with a reason (for structural issues only)\n    SkipReason = null, // or \"Requires external service X.\"\n\n    // Deterministic checks: substrings that must appear in stdout\n    MustContain = [\"=== Section Header ===\"],\n\n    // Substrings that must NOT appear in stdout\n    MustNotContain = [],\n\n    // If true, only MustContain checks are used (no AI verification)\n    IsDeterministic = false,\n\n    // AI verification: natural-language descriptions of expected output\n    // Each entry describes one aspect to verify independently\n    ExpectedOutputDescription =\n    [\n        \"The output should show structured person information with Name, Age, and Occupation fields.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n\n    // Stdin inputs to feed to the sample (for interactive samples)\n    Inputs = [\"Y\", \"Y\", \"Y\"],\n\n    // Delay between stdin inputs in ms (default 2000, increase for LLM calls between inputs)\n    InputDelayMs = 3000,\n}\n```\n\n## How to Add a New Sample Definition\n\n1. **Check the sample's Program.cs** to understand:\n   - What environment variables it reads (look for `GetEnvironmentVariable`)\n   - Whether it needs stdin input (look for `Console.ReadLine`, `Application.GetInput`)\n   - Whether it has an external loop (look for `EXIT` patterns in YAML workflows)\n   - What output it produces (section headers, markers, expected behavior)\n   - Whether it exits on its own or runs as a server\n\n2. **Choose the right verification strategy:**\n   - **Deterministic** (`IsDeterministic = true`): Use `MustContain` for samples with fixed output strings. No AI verification.\n   - **AI-verified** (default): Use `ExpectedOutputDescription` with semantic descriptions. Write expectations that are flexible enough for non-deterministic LLM output.\n   - **Both**: Use `MustContain` for fixed markers AND `ExpectedOutputDescription` for LLM-generated content.\n\n3. **Set `SkipReason` only for structural issues:**\n   - Web servers that don't exit\n   - Multi-process client/server architectures\n   - Samples requiring external infrastructure (MCP servers you can't reach, Docker, etc.)\n   - Do NOT skip for missing env vars — the tool checks those dynamically.\n\n4. **For interactive samples, provide `Inputs`:**\n   - Samples using `Application.GetInput(args)` need one initial input\n   - Samples with `Console.ReadLine()` approval loops need `\"Y\"` inputs\n   - YAML workflows with `externalLoop` need `\"EXIT\"` as the last input\n   - Set `InputDelayMs` to 3000-8000ms for samples with LLM calls between inputs\n\n5. **Add the definition** to the appropriate config file (e.g., `AgentsSamples.cs`) in the `All` list.\n\n6. **Register new categories** (if needed) in `VerifyOptions.cs` `s_sampleSets` dictionary.\n\n### Writing Good ExpectedOutputDescription\n\n- Write descriptions that are **semantically flexible** — LLM output varies between runs\n- Each array entry should describe **one independent aspect** to verify\n- Always include `\"The output should not contain error messages or stack traces.\"` as the last entry\n- Avoid exact wording expectations — use \"should mention\", \"should contain information about\", \"should show\"\n- Bad: `\"The output should say 'The weather in Amsterdam is cloudy with a high of 15°C'\"`\n- Good: `\"The output should contain weather information about Amsterdam mentioning cloudy weather with a high of 15°C.\"`\n\n### Example: Simple LLM Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_With_AzureOpenAIChatCompletion\",\n    ProjectPath = \"samples/02-agents/AgentProviders/azure/Agent_With_AzureOpenAIChatCompletion\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    ExpectedOutputDescription =\n    [\n        \"The output should contain a joke about a pirate.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n},\n```\n\n### Example: Deterministic Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Visualization\",\n    ProjectPath = \"samples/03-workflows/Visualization\",\n    IsDeterministic = true,\n    MustContain = [\"Generating workflow visualization...\", \"Mermaid string:\", \"DiGraph string:\"],\n    ExpectedOutputDescription = [\"The output should show workflow visualization in Mermaid and DiGraph formats.\"],\n},\n```\n\n### Example: Interactive Sample with Approval Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"FoundryAgent_Hosted_MCP\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/FoundryAgent_Hosted_MCP\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"Y\", \"Y\", \"Y\", \"Y\", \"Y\"],\n    InputDelayMs = 5000,\n    ExpectedOutputDescription = [\"The output should show an agent using the Microsoft Learn MCP tool with approval prompts.\"],\n},\n```\n\n### Example: Declarative Workflow with External Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Declarative_FunctionTools\",\n    ProjectPath = \"samples/03-workflows/Declarative/FunctionTools\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"What are today's specials?\", \"EXIT\"],\n    InputDelayMs = 8000,\n    ExpectedOutputDescription = [\"The output should show a workflow calling function tools to answer a question about restaurant specials.\"],\n},\n```\n\n### Example: Skipped Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_MCP_Server\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/Agent_MCP_Server\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    SkipReason = \"Runs as an MCP stdio server that does not exit on its own.\",\n},\n```\n\n","isInternal":false,"tokens":2116,"sizeBytes":9226},{"name":"conversion-table.md","path":"dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md)","tokens":300,"sizeBytes":361},{"name":"SKILL.md","path":"dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md","title":"unit-converter","category":"anthropic-skill","format":"markdown","content":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md)","tokens":300,"sizeBytes":315},{"name":"unit-conversion-table.md","path":"dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md)","tokens":300,"sizeBytes":363},{"name":"SKILL.md","path":"dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md","title":"unit-converter","category":"anthropic-skill","format":"markdown","content":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md)","tokens":300,"sizeBytes":307},{"name":"conversion-table.md","path":"dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md)","tokens":300,"sizeBytes":367},{"name":"SKILL.md","path":"dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md","title":"unit-converter","category":"anthropic-skill","format":"markdown","content":"# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md)","tokens":300,"sizeBytes":321},{"name":"risk-bands.md","path":"dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md)","tokens":300,"sizeBytes":377},{"name":"SKILL.md","path":"dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md","title":"risk-scoring","category":"anthropic-skill","format":"markdown","content":"# risk-scoring\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md)","tokens":300,"sizeBytes":341},{"name":"valuation-guide.md","path":"dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md)","tokens":300,"sizeBytes":381},{"name":"SKILL.md","path":"dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md","title":"valuation","category":"anthropic-skill","format":"markdown","content":"# valuation\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md)","tokens":300,"sizeBytes":332},{"name":"regex-cheatsheet.md","path":"dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md)","tokens":300,"sizeBytes":349},{"name":"SKILL.md","path":"dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md","title":"regex-tester","category":"anthropic-skill","format":"markdown","content":"# regex-tester\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md)","tokens":300,"sizeBytes":301},{"name":"SKILL.md","path":"dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md","title":"escalation-policy","category":"anthropic-skill","format":"markdown","content":"# escalation-policy\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md)","tokens":300,"sizeBytes":342},{"name":"SKILL.md","path":"dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md","title":"support-style","category":"anthropic-skill","format":"markdown","content":"# support-style\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md)","tokens":300,"sizeBytes":330},{"name":"request.json","path":"dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json)","tokens":300,"sizeBytes":340},{"name":"response.json","path":"dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json)","tokens":300,"sizeBytes":342},{"name":"SKILL.md","path":"python/.github/skills/agent-framework-py-release/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/agent-framework-py-release/SKILL.md","title":"agent-framework-py-release","category":"anthropic-skill","format":"markdown","content":"# agent-framework-py-release\n\nPath: `python/.github/skills/agent-framework-py-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/agent-framework-py-release/SKILL.md)","tokens":300,"sizeBytes":249},{"name":"SKILL.md","path":"python/.github/skills/pull-requests/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/pull-requests/SKILL.md","title":"pull-requests","category":"anthropic-skill","format":"markdown","content":"---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n","frontmatter":{"name":"pull-requests","description":"Guidance for creating pull requests and handling PR review comments in the Agent Framework repository. Use this when writing a PR description (filling out the PR template) or when responding to and resolving review comments on an existing PR.\n"},"isInternal":false,"tokens":1345,"sizeBytes":5849},{"name":"SKILL.md","path":"python/.github/skills/python-code-quality/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/python-code-quality/SKILL.md","title":"python-code-quality","category":"anthropic-skill","format":"markdown","content":"---\nname: python-code-quality\ndescription: >\n  Code quality checks, linting, formatting, and type checking commands for the\n  Agent Framework Python codebase. Use this when running checks, fixing lint\n  errors, or troubleshooting CI failures.\n---\n\n# Python Code Quality\n\n## Quick Commands\n\nAll commands run from the `python/` directory:\n\n```bash\n# Syntax formatting + checks (parallel across packages by default)\nuv run poe syntax\nuv run poe syntax -P core\nuv run poe syntax -F    # Format only\nuv run poe syntax -C    # Check only\nuv run poe syntax -S    # Samples only\n\n# Type checking\n#\n# Division of labor (see \"Type checking architecture\" below):\n#   - Pyright (strict) is the source-code type checker.\n#   - Pyright (relaxed `basic`), mypy, pyrefly, ty, zuban all check the TESTS;\n#     pyright/pyrefly/ty also check the SAMPLES (mypy/zuban skip script-style samples).\nuv run poe pyright       # Pyright (strict) over SOURCE, fan-out across packages\nuv run poe pyright -P core\nuv run poe pyright -A\nuv run poe test-typing   # mypy + pyrefly + ty + zuban + pyright over each package's TESTS\nuv run poe test-typing -P core\nuv run poe test-typing -S                       # samples (pyrefly + ty + pyright)\nuv run poe test-typing -P core --checker mypy   # narrow to one checker (repeatable)\nuv run poe test-typing -P core --checker pyright # relaxed pyright over the tests\nuv run poe mypy          # alias: MyPy over the tests only\nuv run poe mypy -P core\nuv run poe typing        # Pyright (source) + the tests checkers\nuv run poe typing -P core\nuv run poe typing -A\n\n# All package-level checks in parallel (syntax + pyright)\nuv run poe check-packages\n\n# Full check (packages + samples + tests + markdown)\nuv run poe check\nuv run poe check -P core\n\n# Samples only\nuv run poe check -S\nuv run poe pyright -S\n\n# Markdown code blocks\nuv run poe markdown-code-lint\n```\n\nPoe and the pytest toolchain stay in the cross-version development\nenvironment. Ruff and the type checkers use pinned\n`tooling/requirements-*.txt` files; prek is selected from the `tool-hooks`\ndependency group only when needed.\n\n## Pre-commit Hooks (prek)\n\nPrek hooks run automatically on commit. They stay lightweight and only check\nchanged files.\n\n```bash\n# Install hooks\nuv run poe prek-install\n\n# Run all hooks manually\nuv run --group tool-hooks prek run -a\n\n# Run on last commit\nuv run --group tool-hooks prek run --last-commit\n```\n\nThey run changed-package syntax formatting/checking, markdown code lint only\nwhen markdown files change, and sample syntax lint/pyright only when files\nunder `samples/` change.\nThey intentionally do not run workspace `pyright` or `mypy` by default.\n\n## Type checking architecture\n\nFollowing the \"too many type checkers\" approach, type checkers are split by target:\n\n| Target | Checker(s) | Mode | Config |\n|--------|-----------|------|--------|\n| Source (`agent_framework*`) | **pyright** | strict | `[tool.pyright]` in `pyproject.toml` |\n| Tests | pyright, mypy, pyrefly, ty, zuban | relaxed/basic | `pyrightconfig.tests.json`, `[tool.mypy]`, `pyrefly.toml`, `ty` rules |\n| Samples | pyright, pyrefly, ty | basic | `pyrightconfig.samples.json`, `pyrefly.samples.toml`, `ty.samples.toml` |\n\n- **Pyright is the only *strict* source-code checker**, and it ALSO runs in a relaxed\n  `basic` profile over the tests and samples (so the surfaces customers copy from are\n  validated by every checker, including pyright). MyPy was removed from source; its\n  `[tool.mypy]` block is now a *relaxed* profile used only for tests/samples.\n- The extra checkers run over tests/samples because those exercise the public API the way\n  users do. The profile is intentionally relaxed (private access allowed, untyped test\n  bodies allowed) so authors aren't forced into ugly over-annotation.\n- **Gating checkers** are `pyright`, `mypy`, `pyrefly`, `ty`, and `zuban` — all five run by\n  default and gate CI. `zuban` is the strictest of the mypy-compatible pair, so the same\n  `[tool.mypy]` config yields more findings; suppress zuban-only friction with shared\n  `# type: ignore[code]`. Suppress relaxed-pyright friction with `# pyright: ignore[rule]`.\n- **Samples** add `pyright` to `pyrefly` + `ty` — mypy/zuban can't resolve script-style\n  sample layouts (numeric-prefixed dirs, duplicate `main.py`), but pyright handles them.\n- `pyrefly.samples.toml` enables fallback lookup for standalone sibling imports.\n  The ty sample profile uses first-party `root = [\".\"]` for PEP 723 sibling helpers,\n  preserving automatic extra-path lookup for the existing samples.\n- The strict source-pyright (`[tool.pyright]`) enforces `reportUnnecessaryTypeIgnoreComment`\n  and excludes tests/samples; the relaxed test/sample pyright configs do not flag unnecessary\n  ignores.\n\n## Ruff Configuration\n\n- Line length: 120\n- Target: Python 3.10+\n- Auto-fix enabled\n- Rules: ASYNC, B, CPY, D, E, ERA, F, FIX, I, INP, ISC, Q, RET, RSE, RUF, SIM, T20, TD, W, T100, S\n- Scripts directory is excluded from checks\n\n## Pyright Configuration\n\n- **Source**: strict mode (`[tool.pyright]`), `reportUnnecessaryTypeIgnoreComment = \"error\"`,\n  excludes tests, samples, .venv, packages/devui/frontend.\n- **Tests**: relaxed `basic` profile (`pyrightconfig.tests.json`) — private import/usage and\n  not-required TypedDict access allowed; runs as the `pyright` checker in `test-typing`.\n- **Samples**: relaxed `basic` profile (`pyrightconfig.samples.json`, with a py310 variant) —\n  runs as the `pyright` checker in `test-typing -S`.\n\n## Parallel Execution\n\nThe task runner (`scripts/task_runner.py`) executes the cross-product of\n(package × task) in parallel using ThreadPoolExecutor. Single items run\nin-process with streaming output.\n\n## CI Workflow\n\nCI splits into 4 parallel jobs:\n1. **Pre-commit hooks** — lightweight hooks (SKIP=poe-check)\n2. **Package checks** — syntax/pyright (source) via check-packages\n3. **Samples & markdown** — `check -S` plus `markdown-code-lint`\n4. **Test Typing** — change-detected mypy/pyrefly/ty over tests (`ci-test-typing`)\n","frontmatter":{"name":"python-code-quality","description":"Code quality checks, linting, formatting, and type checking commands for the Agent Framework Python codebase. Use this when running checks, fixing lint errors, or troubleshooting CI failures.\n"},"isInternal":false,"tokens":1614,"sizeBytes":6029},{"name":"SKILL.md","path":"python/.github/skills/python-development/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/python-development/SKILL.md","title":"python-development","category":"anthropic-skill","format":"markdown","content":"---\nname: python-development\ndescription: >\n  Coding standards, conventions, and patterns for developing Python code in the\n  Agent Framework repository. Use this when writing or modifying Python source\n  files in the python/ directory.\n---\n\n# Python Development Standards\n\n## File Header\n\nEvery `.py` file must start with:\n\n```python\n# Copyright (c) Microsoft. All rights reserved.\n```\n\n## Type Annotations\n\n- Always specify return types and parameter types\n- Use `Type | None` instead of `Optional[Type]`\n- Use `from __future__ import annotations` to enable postponed evaluation\n- Use suffix `T` for TypeVar names: `ChatResponseT = TypeVar(\"ChatResponseT\", bound=ChatResponse)`\n- Use `Mapping` instead of `MutableMapping` for read-only input parameters\n- Prefer `# type: ignore[...]` over unnecessary casts, or `isinstance` checks, when these are internally called and executed methods\n    But make sure the ignore is specific for both mypy and pyright so that we don't miss other mistakes\n- Internal private helpers may be used across `agent_framework*` modules when intentional; use a targeted\n  `# pyright: ignore[reportPrivateUsage]` instead of making the helper public just to satisfy pyright.\n- Do not add trivial pass-through or one-line helper functions solely to appease typing. Prefer targeted ignores,\n  casts, or clearer annotations over adding runtime overhead without a design benefit.\n\n## Function Parameters\n\n- Positional parameters: up to 3 fully expected parameters\n- Use keyword-only arguments (after `*`) for optional parameters\n- Provide string-based overrides to avoid requiring extra imports:\n\n```python\ndef create_agent(name: str, tool_mode: Literal['auto', 'required', 'none'] | ChatToolMode) -> Agent:\n    if isinstance(tool_mode, str):\n        tool_mode = ChatToolMode(tool_mode)\n```\n\n- Avoid shadowing built-ins (use `next_handler` instead of `next`)\n- Avoid `**kwargs` unless needed for subclass extensibility; prefer named parameters\n\n## Docstrings\n\nUse Google-style docstrings for all public APIs:\n\n```python\ndef equal(arg1: str, arg2: str) -> bool:\n    \"\"\"Compares two strings and returns True if they are the same.\n\n    Args:\n        arg1: The first string to compare.\n        arg2: The second string to compare.\n\n    Returns:\n        True if the strings are the same, False otherwise.\n\n    Raises:\n        ValueError: If one of the strings is empty.\n    \"\"\"\n```\n\n- Always document Agent Framework specific exceptions\n- Explicitly use `Keyword Args` when applicable\n- Only document standard Python exceptions when the condition is non-obvious\n\n## Import Structure\n\n```python\n# Core\nfrom agent_framework import Agent, Message, tool\n\n# Components\nfrom agent_framework.observability import enable_sensitive_telemetry\n\n# Connectors (lazy-loaded)\nfrom agent_framework.openai import OpenAIChatClient\nfrom agent_framework.foundry import FoundryChatClient\n```\n\n## Public API and Exports\n\nIn `__init__.py` files that define package-level public APIs, use direct re-export imports plus an explicit\n`__all__`. Avoid identity aliases like `from ._agents import Agent as Agent`, and avoid\n`from module import *`.\n\nDo not define `__all__` in internal non-`__init__.py` modules. Exception: modules intentionally exposed as a\npublic import surface (for example, `agent_framework.observability`) should define `__all__`.\n\n```python\n__all__ = [\"Agent\", \"Message\", \"ChatResponse\"]\n\nfrom ._agents import Agent\nfrom ._types import Message, ChatResponse\n```\n\nSpecial case: the root `agent_framework/__init__.py` uses lazy runtime exports. For root public API changes:\n- Add the symbol to `_LAZY_MODULE_EXPORTS` and keep `_LAZY_EXPORTS` derived from it.\n- Keep the explicit runtime `__all__` synchronized; it is still required for `from agent_framework import *`.\n- Add the same public symbol to `agent_framework/__init__.pyi` so pyright, mypy, and editors see the typed surface.\n- Put runtime deprecation behavior in the owning module via that module's `__getattr__`; avoid root-level\n  special-case branches for individual deprecated exports.\n- Identity aliases are appropriate in `.pyi` stubs because they mark re-exported names for type checkers; avoid them\n  in runtime `.py` modules unless there is a specific compatibility reason.\n\n## Performance Guidelines\n\n- Cache expensive computations (e.g., JSON schema generation)\n- Prefer `match/case` on `.type` attribute over `isinstance()` in hot paths\n- Avoid redundant serialization — compute once, reuse\n\n## Style\n\n- Line length: 120 characters\n- Format only files you changed, not the entire codebase\n- Prefer attributes over inheritance when parameters are mostly the same\n- Async by default — assume everything is asynchronous\n\n## Naming Conventions for Connectors\n\n- `_prepare_<object>_for_<purpose>` for methods that prepare data for external services\n- `_parse_<object>_from_<source>` for methods that process data from external services\n","frontmatter":{"name":"python-development","description":"Coding standards, conventions, and patterns for developing Python code in the Agent Framework repository. Use this when writing or modifying Python source files in the python/ directory.\n"},"isInternal":false,"tokens":1094,"sizeBytes":4914},{"name":"SKILL.md","path":"python/.github/skills/python-feature-lifecycle/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/python-feature-lifecycle/SKILL.md","title":"python-feature-lifecycle","category":"anthropic-skill","format":"markdown","content":"---\nname: python-feature-lifecycle\ndescription: >\n  Guidance for package and feature lifecycle in the Agent Framework Python\n  codebase, including stage meanings, feature-stage decorators, feature enums,\n  and how to move APIs from one stage to the next.\n---\n\n# Python Feature Lifecycle\n\n## Two lifecycle levels\n\nAgent Framework uses lifecycle at two different levels:\n\n1. **Package lifecycle** — the maturity of the package as a whole\n2. **Feature lifecycle** — the maturity of a specific API or feature inside that package\n\nThese are related, but they are **not the same thing**.\n\n- The **package stage is the default** for everything in the package.\n- **Feature-stage decorators are only for exceptions** when a feature is behind the package's default stage.\n- Do **not** decorate every class or function just because the package is experimental or release candidate.\n\nThis skill describes staged API behavior within a package. For creating or promoting a package, including sample\nplacement, meta-package membership, versioning, and lazy-loading namespace decisions, follow the\n`python-package-management` skill.\n\n### Important default\n\nIf a package is still in **beta / experimental preview**, all public APIs in that package are experimental by default.\n\n- Do **not** add `@experimental(...)` everywhere in that package.\n- The package stage already communicates that default.\n\nOnce a package moves forward, you can keep individual features behind:\n\n- If a package moves to **release candidate**, a feature may remain **experimental**\n- If a package moves to **released / GA**, a feature may remain **experimental** or **release candidate**\n\nThat is the main use case for feature-stage decorators.\n\n## The four stages\n\n### 1. Experimental\n\nUse for features that are still unstable and may change or be removed without notice.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ExperimentalFeature, experimental\n\n\n@experimental(feature_id=ExperimentalFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds an experimental warning block to the docstring\n- Records feature metadata on the decorated object\n- Emits a runtime warning the first time the feature is used (once per feature by default)\n\nEnum setup:\n\n- Add an all-caps member to `ExperimentalFeature`\n- Reuse the same feature ID across all APIs that belong to the same conceptual feature\n\n### 2. Release candidate\n\nUse for features that are nearly stable but may still receive small refinements before GA.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ReleaseCandidateFeature, release_candidate\n\n\n@release_candidate(feature_id=ReleaseCandidateFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds a release-candidate note to the docstring\n- Records feature metadata on the decorated object\n- Does **not** emit the experimental warning\n\nEnum setup:\n\n- Add an all-caps member to `ReleaseCandidateFeature`\n\n### 3. Released\n\nUse for stable GA APIs.\n\nCode pattern:\n\n- **No feature-stage decorator**\n- **No entry** in `ExperimentalFeature`\n- **No entry** in `ReleaseCandidateFeature`\n\nIf a feature is fully released, remove any stage-specific feature annotation.\n\n### 4. Deprecated\n\nUse for APIs that still exist but should not be used for new code.\n\nCode pattern:\n\n```python\nimport sys\n\nif sys.version_info >= (3, 13):\n    from warnings import deprecated  # type: ignore # pragma: no cover\nelse:\n    from typing_extensions import deprecated  # type: ignore # pragma: no cover\n\n\n@deprecated(\"MyOldFeature is deprecated. Use MyNewFeature instead.\")\nclass MyOldFeature:\n    ...\n```\n\nBehavior:\n\n- Uses the repository's version-conditional deprecation import pattern\n- Should describe what to use instead\n\nDeprecated APIs should not also carry feature-stage decorators.\n\n## Expected decorators by stage\n\n| Feature stage | Expected annotation |\n| --- | --- |\n| Experimental | `@experimental(feature_id=ExperimentalFeature.X)` |\n| Release candidate | `@release_candidate(feature_id=ReleaseCandidateFeature.X)` |\n| Released | No feature-stage decorator |\n| Deprecated | `@deprecated(\"...\")` |\n\n## Feature enums\n\nThe feature enums are the inventory of currently staged features:\n\n- `ExperimentalFeature`\n- `ReleaseCandidateFeature`\n\nGuidance:\n\n- Use one enum member per conceptual feature, not per class\n- Ideally, an ADR already defines the overall feature boundary and therefore the feature ID that staged APIs for that feature should reuse\n- Keep feature IDs all caps\n- Reuse the same member across related APIs for the same feature\n- Remove enum members when the feature no longer belongs to that stage\n- Treat these enums as **current-stage inventories**, not as a stable consumer introspection API\n\nMinimal consumer guidance:\n\n- Treat `__feature_stage__` and `__feature_id__` as optional staged metadata, not as stable contracts\n- Use `getattr(obj, \"__feature_stage__\", None)` and `getattr(obj, \"__feature_id__\", None)` rather than direct attribute access\n- Treat missing metadata as \"no explicit feature-stage annotation\"\n- For warning filters while a feature is staged, match the literal feature ID string\n- Do **not** rely on `ExperimentalFeature.X`, `ReleaseCandidateFeature.X`, or the continued presence of `__feature_id__` after a feature moves stages or is released\n\nFor consumers, the enums are also re-exported from `agent_framework`.\n\nFor internal implementation code inside `agent_framework`, continue to import the enums and decorators from `._feature_stage`.\n\n## Package stage vs feature stage\n\nUse the following rules:\n\n### Package is experimental / beta\n\n- All public APIs are experimental by default\n- Do **not** add feature-stage decorators just to restate that\n- Only introduce feature-level annotations later if the package advances first\n\n### Package is release candidate\n\n- All public APIs are RC by default\n- Do **not** decorate everything\n- Add `@experimental(...)` only for features that are intentionally still behind the package\n\n### Package is released / GA\n\n- All public APIs are released by default\n- Add `@experimental(...)` or `@release_candidate(...)` only for features still being held back\n\n## Moving a feature from one stage to the next\n\n### Experimental -> Release candidate\n\n1. Move the feature ID from `ExperimentalFeature` to `ReleaseCandidateFeature`\n2. Replace `@experimental(...)` with `@release_candidate(...)`\n3. Update any tests or docs that mention the old stage\n\n### Experimental -> Released\n\n1. Remove `@experimental(...)`\n2. Remove the feature from `ExperimentalFeature`\n3. Do not add a replacement feature-stage decorator\n\n### Release candidate -> Released\n\n1. Remove `@release_candidate(...)`\n2. Remove the feature from `ReleaseCandidateFeature`\n3. Leave the API undecorated\n\n### Any stage -> Deprecated\n\n1. Remove any feature-stage decorator\n2. Remove the feature from the stage enum\n3. Add `@deprecated(\"...\")`\n4. Update docs/tests to reflect the replacement path\n\n## Promotion guidance\n\nFeatures do **not** have to pass through every stage.\n\n- It is usually a good idea to move features in order when that reflects reality\n- But it is completely acceptable to go **experimental -> released**\n- Do **not** force a feature through release candidate if there is no real RC period\n\nLikewise, when a package advances, do not automatically move every feature with it.\n\n- Promote features based on actual readiness\n- Keep lagging features explicitly marked only when they are behind the package default\n\n## Practical rules of thumb\n\n- **Package default first, feature exceptions second**\n- **Do not decorate everything in preview packages**\n- **Do not double-annotate members of an already-staged class**\n- **Use enums only for currently staged features**\n- **Do not treat stage enums as a compatibility contract**\n- **Treat `__feature_stage__` and `__feature_id__` as optional metadata; use `getattr`**\n- **Remove stage annotations once a feature is released or deprecated**\n","frontmatter":{"name":"python-feature-lifecycle","description":"Guidance for package and feature lifecycle in the Agent Framework Python codebase, including stage meanings, feature-stage decorators, feature enums, and how to move APIs from one stage to the next.\n"},"isInternal":false,"tokens":1657,"sizeBytes":7947},{"name":"SKILL.md","path":"python/.github/skills/python-package-management/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/python-package-management/SKILL.md","title":"python-package-management","category":"anthropic-skill","format":"markdown","content":"---\nname: python-package-management\ndescription: >\n  Guide for managing packages in the Agent Framework Python monorepo, including\n  creating new connector packages, versioning, and the lazy-loading pattern.\n  Use this when adding, modifying, or releasing packages.\n---\n\n# Python Package Management\n\n## Monorepo Structure\n\n```\npython/\n├── pyproject.toml              # Root package (agent-framework)\n├── packages/\n│   ├── core/                   # agent-framework-core (main package)\n│   ├── foundry/                # agent-framework-foundry\n│   ├── lab/                    # Standalone uv project, excluded from the root workspace\n│   ├── anthropic/              # agent-framework-anthropic\n│   └── ...                     # Other connector packages\n```\n\n- `agent-framework-core` contains core abstractions and OpenAI/Azure OpenAI built-in\n- Provider packages extend core with specific integrations\n- Root `agent-framework` depends on `agent-framework-core[all]`. Despite the existing extra name, this is a\n  curated standard install set, not every package at a particular lifecycle stage.\n- Entries in `agent-framework-core[all]` carry lower and upper bounds. Workspace integrations use the version\n  released with the current Core cohort as their lower bound so pip does not backtrack across old cyclic\n  `core[all] -> integration -> core` combinations.\n- `packages/lab` is intentionally excluded from the root uv workspace. It has its own\n  `pyproject.toml`, `uv.lock`, environment, CI matrix, and dependency updates so experimental\n  dependencies cannot constrain released provider packages. Lab resolves released Core and provider\n  distributions rather than local root-workspace packages.\n\n## Dependency Management\n\nUses [uv](https://github.com/astral-sh/uv) for dependency management and\n[poethepoet](https://github.com/nat-n/poethepoet) for task automation.\n\n```bash\n# Full setup (venv + install + prek hooks)\nuv run poe setup\n\n# Install dependencies from lockfile (frozen resolution with prerelease policy)\nuv run poe install\n\n# Create venv with specific Python version\nuv run poe venv --python 3.12\n\n# Intentionally upgrade a specific dependency to reduce lockfile conflicts\nuv lock --upgrade-package <dependency-name> && uv run poe install\n\n# Refresh exact development and on-demand tool pins, lockfiles, and validation\nuv run poe upgrade-dev-dependencies\n\n# Release cuts: refresh uv.lock and probe changed packages at both bound extremes.\n# The release probe has a shared five-minute deadline.\nuv run poe validate-python-release --base-ref upstream/main\n\n# Exhaustive test+typing matrix (slow; use for deliberate dependency-range work or CI)\nuv run poe validate-dependency-bounds-test\n# Defaults to --package \"*\"; scope locally whenever possible.\nuv run poe validate-dependency-bounds-test --package core\n\n# Then expand bounds for one dependency in the target package\nuv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"\n\n# Repo-wide automation can reuse the same task\nuv run poe validate-dependency-bounds-project --mode upper --package \"*\"\n\n# Add a dependency to one project and run both validators for that project/dependency\nuv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"\n\n# Work on the standalone Lab project\ncd packages/lab\nuv sync --all-extras --all-groups\nuv run poe test\n```\n\n### Dependency Bound Notes\n\n- Stable dependencies (`>=1.0`) should typically be bounded as `>=<known-good>,<next-major>`.\n- Prerelease (`dev`/`a`/`b`/`rc`) and `<1.0` dependencies should use hard bounds with an explicit upper cap (avoid open-ended ranges).\n- For `<1.0` dependencies, prefer the broadest validated range the package can really support. That may be a patch line, a minor line, or multiple minor lines when checks/tests show the broader lane is compatible.\n- Prefer supporting multiple majors when practical; if APIs diverge across supported majors, use version-conditional imports/paths.\n- For release-only version, lifecycle, pin, and internal-floor edits, use `validate-python-release`. It refreshes\n  `uv.lock`, finds changed package metadata relative to the selected main ref, and runs the changed packages'\n  published runtime dependencies and non-development extras through lock-independent `lowest-direct` and `highest`\n  import probes on the minimum Python minor supported by each package's internal editable closure. The probes run\n  concurrently under one 300-second deadline; pass `--python` only when an explicit interpreter override is needed.\n- For deliberate external dependency-range changes, use\n  `validate-dependency-bounds-project --mode both` for the target package/dependency to find and validate the actual\n  minimum and maximum constraints. Scope the exhaustive `validate-dependency-bounds-test` matrix to affected\n  packages during local iteration; reserve the workspace-wide form for CI or an intentional full audit. The same\n  project task can drive repo-wide upper-bound automation by using `--package \"*\"` and omitting `--dependency`.\n- Prefer targeted lock updates with `uv lock --upgrade-package <dependency-name>` to reduce `uv.lock` merge conflicts.\n- Use `add-dependency-and-validate-bounds` for package-scoped dependency additions plus bound validation in one command.\n- Keep the test framework and Poe in the root `dev` group across Python\n  versions. Put script-only libraries in `tool-runtime`. Put tools used by\n  only one Python version in a named `tool-*` group or pinned\n  `tooling/requirements-*.txt` file, and add the smallest relevant group or\n  bundle to each command. Keep source/type-check support that is part of a\n  package's import surface in a package dependency group. Put package-specific\n  test fixtures in a `test` group.\n- Use `upgrade-dev-dependencies` for repo-wide development and tool dependency\n  refreshes; it repins exact dependencies across development groups and\n  `tooling/requirements-*.txt`, refreshes `uv.lock`, and reruns `check` and\n  `typing`.\n- Upgrade the root uv version manually as one coordinated change across the\n  `dev` requirement, `[tool.uv].required-version`, setup workflows, and the\n  uv pre-commit revision. Automated dependency updates intentionally ignore\n  the root uv pin.\n- Run Lab dependency and validation commands from `packages/lab`; root workspace tasks deliberately do not\n  discover or update the Lab project.\n\n## Meta-package Membership\n\nPackage lifecycle and membership in the root `agent-framework` meta-package are independent decisions. A package\nstarts outside `agent-framework-core[all]`, and promotion to `beta`, `rc`, or `released` does not add it\nautomatically.\n\nAdding a package to or removing a package from the standard install set requires an agreed GitHub issue and an\nexplicit core-team decision. For additions, consider:\n\n- whether the package is useful across common Agent Framework workloads rather than for one specialized storage\n  backend, hosting adapter, channel, or deployment target;\n- whether its dependency footprint is proportionate and compatible with the meta-package's supported Python and\n  platform matrix, especially for native, heavyweight, or conflict-prone dependencies;\n- whether it belongs in the documented standard getting-started experience; and\n- whether including one package would create an expectation that an open-ended family of alternative backends or\n  adapters must also be included.\n\nDefault to a separate install when the case is unclear. Existing membership is not precedent for every package in\nthe same lifecycle stage or category.\n\nFor removals, the issue must also assess compatibility for existing `pip install agent-framework` and\n`agent-framework-core[all]` users, document any migration or replacement path, determine whether the change is\nbreaking, and identify the required Core and root meta-package version changes. Do not treat removal as ordinary\ndependency cleanup.\n\nTrack the decision in the `Meta package` column of `python/PACKAGE_STATUS.md`. When membership changes, update\n`packages/core/pyproject.toml` `[project.optional-dependencies].all`, the Core and root package versions as required,\nand the status table in the same change.\n\n## Lazy Loading Pattern\n\n### Root core API\n\nThe root `agent_framework` package is a lazy public API surface:\n\n- Runtime exports live in `packages/core/agent_framework/__init__.py`.\n- Typing/editor exports live in `packages/core/agent_framework/__init__.pyi`.\n- Add or move root exports in `_LAZY_MODULE_EXPORTS`, keep the explicit runtime `__all__` in sync, and add the same\n  symbol to the `.pyi` file.\n- Keep deprecation behavior in the owning module (for example, a module-level `__getattr__` that warns and returns\n  the deprecated alias). Do not add one-off deprecated-symbol branches to root `__getattr__`.\n- Validate root API changes with `uv run poe syntax -P core`, `uv run poe pyright -P core`, and import smoke tests\n  for both `from agent_framework import <symbol>` and `from agent_framework import *`.\n\n### Provider namespaces\n\nProvider folders in core use `__getattr__` to lazy load from connector packages:\n\n```python\n# In agent_framework/foundry/__init__.py\n_IMPORTS: dict[str, tuple[str, str]] = {\n    \"FoundryChatClient\": (\"agent_framework_foundry\", \"agent-framework-foundry\"),\n}\n\ndef __getattr__(name: str) -> Any:\n    if name in _IMPORTS:\n        import_path, package_name = _IMPORTS[name]\n        try:\n            return getattr(importlib.import_module(import_path), name)\n        except ModuleNotFoundError as exc:\n            raise ModuleNotFoundError(\n                f\"The package {package_name} is required to use `{name}`. \"\n                f\"Install it with: pip install {package_name}\"\n            ) from exc\n```\n\n### Namespace compatibility\n\nThe core namespace module and the objects it re-exports have different compatibility rules:\n\n- While an owning package is `alpha`, `beta`, or `rc`, imports for objects from that package may be added, removed,\n  or moved between approved lazy-loading namespaces by explicit core-team decision. Those object paths follow the\n  owning package's prerelease lifecycle.\n- Do not remove a core namespace module unless it is empty after the change and is used exclusively by packages\n  that have not reached `released`.\n- If a namespace exposes objects from any released package, keep the namespace. Changing import paths for released\n  objects requires a deprecated forwarding path where feasible; otherwise the agreed issue must include migration\n  guidance, explicit breaking-change acknowledgement, and the required Core and root meta-package version changes.\n\n## Adding a New Connector Package\n\n**Important:** Do not create a new package unless approved by the core team.\n\nEvery new package starts as `alpha`.\n\n### Alpha package checklist\n\n1. Create directory under `packages/` (e.g., `packages/my-connector/`)\n2. Add the package to `tool.uv.sources` in root `pyproject.toml`\n3. Set the package version to the alpha pattern: `1.0.0a<date>`\n4. Set the package classifier to `Development Status :: 3 - Alpha`\n5. Include samples inside the package (e.g., `packages/my-connector/samples/`)\n6. Do **NOT** add to `[all]` extra in `packages/core/pyproject.toml`\n7. Do **NOT** create lazy loading in core yet\n8. Add the package to `python/PACKAGE_STATUS.md` with lifecycle state `alpha` and meta-package membership `no`,\n   and keep that file updated when packages are added, removed, renamed, promoted, or have their membership\n   changed. If the package exposes individually staged APIs, keep the feature list there current too.\n9. Keep the `Typing :: Typed` classifier and the `py.typed` marker in step. The classifier alone is a\n   promise PEP 561 keeps through the `py.typed` file inside the package directory, and that file is\n   the signal checkers act on: a package that declares `Typing :: Typed` without shipping it is not\n   treated as typed, so its API falls back to whatever a checker does with an untyped import\n   (`Any`, `Unknown`, or a missing-stub diagnostic) instead of the inline annotations. Check both,\n   not one:\n\n   ```bash\n   # every package that claims to be typed must ship the marker\n   cd python/packages\n   for d in */; do\n     d=${d%/}\n     [ -f \"$d/pyproject.toml\" ] || continue\n     if grep -q \"Typing :: Typed\" \"$d/pyproject.toml\" && ! ls \"$d\"/agent_framework*/py.typed >/dev/null 2>&1; then\n       echo \"missing py.typed: $d\"\n     fi\n   done\n   ```\n\n   Note that `py.typed` only makes annotations that are already there visible; it adds none, so a\n   package that has not been type-checked may surface further errors once the marker lands.\n\nRecommended dependency workflow during connector implementation:\n\n1. Add the dependency to the target package:\n   `uv run poe add-dependency-to-project --package core --dependency \"<dependency-spec>\"`\n2. Implement connector code and tests.\n3. Validate dependency bounds for that package/dependency:\n   `uv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"`\n4. If the package has meaningful tests/checks that validate dependency compatibility, you can use the add + validation flow in one command:\n   `uv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"`\n   If compatibility checks are not in place yet, add the dependency first, then implement tests before running bound validation.\n\n### Promotion path\n\nCreate a GitHub issue for every package promotion and get core-team agreement before implementing the promotion.\nThe issue must record:\n\n- the current and target lifecycle stages;\n- whether the package should be included in the root meta-package, with rationale based on the criteria above; and\n- the lazy-loading namespace decision for the transition: `alpha` -> `beta` selects whether and where to expose the\n  package, while `beta` -> `rc` and `rc` -> `released` preserve the existing namespace by default and may change\n  the package's prerelease object imports only by explicit core-team decision and under the namespace compatibility\n  rules above.\n\nRecord an explicit `no` or `none` when the package should remain outside the meta-package or should not have a\nlazy-loading namespace. Do not infer either decision from the target lifecycle stage.\n\nPromotion work is not isolated to the package being promoted. If a promotion changes dependency\nmetadata for downstream packages, also update the dependent packages' own versions so they publish\nnew metadata alongside the promoted dependency bounds.\nApply the internal package dependency update rules from the versioning section below during\npromotions as well as standalone version update work.\n\n#### Alpha -> Beta\n\nMove a package to `beta` when it is stable enough for broader prerelease use.\n\n1. Update the package version to the beta pattern: `1.0.0b<date>`\n2. Update the classifier to `Development Status :: 4 - Beta`\n3. Move samples to the root `samples/` tree and remove package-local samples\n4. Apply the lazy-loading decision recorded in the promotion issue, creating or updating the approved namespace\n   when applicable\n5. Apply the meta-package decision recorded in the promotion issue. The default is to remain excluded; add the\n   package to `[all]` only when inclusion is explicitly approved.\n6. Update the lifecycle state and meta-package membership in `python/PACKAGE_STATUS.md`\n\nAfter `alpha`, there should be no samples left inside a package folder.\n\n#### Beta -> RC\n\nMove a package to `rc` when its API is close to the final released shape.\n\n1. Update the package version to the release-candidate pattern: `1.0.0rc<number>`\n2. Keep the classifier at `Development Status :: 4 - Beta` because PyPI does not have a separate\n   release-candidate classifier\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; the stage\n   transition alone does not add it to `core[all]`\n4. Preserve the existing lazy-loading namespace by default. Changes to the package's prerelease object imports are\n   discouraged and require explicit core-team approval recorded in the promotion issue; apply the namespace\n   compatibility rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `rc` and keep its membership value current\n\n#### RC -> Released\n\nMove a package to `released` when it no longer carries a prerelease qualifier.\n\n1. Update the package version to the stable pattern: `1.0.0`\n2. Update the classifier to `Development Status :: 5 - Production/Stable`\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; release does\n   not imply inclusion in `core[all]`\n4. Preserve the lazy-loading namespace used at RC by default. Any final changes to the package's prerelease object\n   imports require explicit core-team approval recorded in the promotion issue; apply the namespace compatibility\n   rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `released` and keep its membership value current\n7. Update all `README.md` files that install that package with\n   `pip install agent-framework-... --pre` so they use `pip install agent-framework-...` without\n   the `--pre` suffix\n\n## Versioning\n\n### Internal package dependency updates\n\n- If package A depends on package B within this repository, only update package A's dependency\n  declaration when the work on package B actually affects package A.\n- If package A does not need anything from the package B change, leave package A's dependency\n  declaration unchanged.\n- If package A does need something from the package B change, update package A's dependency\n  declaration to the version or versioning scheme that matches what package A now requires.\n- If package B is promoted to a different lifecycle stage, update package A's dependency\n  declaration to the new versioning scheme for package B even when the only change is the stage\n  transition itself.\n- When Core releases, advance each workspace package floor in `agent-framework-core[all]` to that package's\n  co-released version, including unchanged packages at their existing version. Keep an upper bound appropriate\n  for the package's current major version. This release-cohort metadata is independent of whether the package\n  itself needed a version bump.\n- Use this guidance both for ordinary version updates and for package promotion work.\n\n- All non-core packages declare a lower bound on `agent-framework-core`\n- When core version bumps with breaking changes, update the lower bound in all packages\n- Non-core packages version independently; only raise core bound when using new core APIs\n- If promoting a package changes a dependent package's published dependency metadata, bump the\n  dependent package's own version in the correct lifecycle pattern for its current stage\n- Lifecycle version patterns:\n  - `alpha`: `1.0.0a<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `beta`: `1.0.0b<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `rc`: `1.0.0rc<number>` where `<number>` increments only when the package has changes\n  - `released`: `X.Y.Z` using semver per package\n- For alpha/beta date stamps, use the current Pacific date as the cutoff, not UTC and not the user's local\n  timezone. Same-Pacific-day re-cuts use a `.postN` suffix. Honor an explicit user-provided date over this\n  default.\n- Keep the `Development Status` classifier in `pyproject.toml` aligned with the lifecycle stage:\n  - `alpha` -> `Development Status :: 3 - Alpha`\n  - `beta` -> `Development Status :: 4 - Beta`\n  - `rc` -> `Development Status :: 4 - Beta`\n  - `released` -> `Development Status :: 5 - Production/Stable`\n- See the PyPI classifier list for the available classifier values:\n  `https://pypi.org/classifiers/`\n\n## Installation Options\n\n```bash\npip install agent-framework-core          # Core only\npip install agent-framework-core[all]     # Core + curated standard integrations\npip install agent-framework               # Same standard install set as core[all]\npip install agent-framework-foundry       # Specific connector (pulls in core)\n```\n\n## Maintaining Documentation\n\nWhen changing a package, check if its `AGENTS.md` needs updates:\n- Adding/removing/renaming public classes or functions\n- Changing the package's purpose or architecture\n- Modifying import paths or usage patterns\n\nKeep `python/PACKAGE_STATUS.md` updated when:\n- A package is added, removed, renamed, or promoted between lifecycle stages\n- A package is added to or removed from the root meta-package\n- A package starts or stops exposing individually staged experimental or release-candidate APIs\n\nWhen a package adds, removes, or renames environment variables, update the related documentation in the same\nchange:\n- The package's `README.md` for package-level configuration/env var guidance\n- `samples/README.md` if the package is included in `packages/core/pyproject.toml` `[all]` and the env var is\n  part of the consolidated package env-var inventory\n- Any affected sample/package-local `.env.example`, `.env.template`, or sample README files when sample setup\n  changes alongside the package\n","frontmatter":{"name":"python-package-management","description":"Guide for managing packages in the Agent Framework Python monorepo, including creating new connector packages, versioning, and the lazy-loading pattern. Use this when adding, modifying, or releasing packages.\n"},"isInternal":false,"tokens":4684,"sizeBytes":21550},{"name":"SKILL.md","path":"python/.github/skills/python-testing/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/python-testing/SKILL.md","title":"python-testing","category":"anthropic-skill","format":"markdown","content":"---\nname: python-testing\ndescription: >\n  Guidelines for writing and running tests in the Agent Framework Python\n  codebase. Use this when creating, modifying, or running tests.\n---\n\n# Python Testing\n\nCI enforces at least 85% line coverage for every package classified Beta or Production/Stable.\nAlpha packages are report-only, and the DevUI and experimental Lab packages are excluded from\naggregate coverage enforcement. Tests should be fast, reliable, and maintainable.\nWhen adding new code, check that the relevant sections of the codebase are covered by tests, and add new tests as needed. When modifying existing code, update or add tests to cover the changes.\nWe run tests in two stages, for a PR each commit is tested with unit tests only (using `-m \"not integration\"`), and the full suite including integration tests is run when merging.\n\nWhen an API is marked as deprecated, migrate ordinary tests to its replacement in the same change. Retain only\nfocused tests that validate the deprecated behavior and warning; integration tests, samples, and unrelated unit\ntests should use the supported API.\n\n## Running Tests\n\n```bash\n# Run tests for all packages in parallel\nuv run poe test\n\n# Run tests for a specific workspace package\nuv run poe test -P core\n\n# Run all selected tests in a single pytest invocation\nuv run poe test -A\n\n# With coverage\nuv run poe test -A -C\nuv run poe test -P core -C\n\n# Run only unit tests (exclude integration tests)\nuv run poe test -A -m \"not integration\"\n\n# Run only integration tests\nuv run poe test -A -m integration\n```\n\nDirect package execution still works when you need it:\n\n```bash\nuv run --directory packages/core poe test\n```\n\n## Test Configuration\n\n- **Async mode**: `asyncio_mode = \"auto\"` is enabled — do NOT use `@pytest.mark.asyncio`, but do mark tests with `async def` and use `await` for async calls\n- **Timeout**: Default 60 seconds per test\n- **Import mode**: `importlib` for cross-package isolation\n- **Parallelization**: Large packages (core, ag-ui, orchestrations, anthropic) use `pytest-xdist` (`-n auto --dist worksteal`) in their `poe test` task. The aggregate `uv run poe test -A` sweep also uses xdist across the selected packages.\n\n## Test Directory Structure\n\nTest directories must NOT contain `__init__.py` files.\n\nNon-core packages must place tests in a uniquely-named subdirectory:\n\n```\npackages/anthropic/\n├── tests/\n│   └── anthropic/       # Unique subdirectory matching package name\n│       ├── conftest.py\n│       └── test_client.py\n```\n\nCore package can use `tests/` directly with topic subdirectories:\n\n```\npackages/core/\n├── tests/\n│   ├── conftest.py\n│   ├── core/\n│   │   └── test_agents.py\n│   └── openai/\n│       └── test_client.py\n```\n\n## Fixture Guidelines\n\n- Use `conftest.py` for shared fixtures within a test directory\n- Before adding new fixtures, check if existing ones can be reused or extended\n- Use descriptive names: `mapper`, `test_request`, `mock_client`\n\n## File Naming\n\n- Files starting with `test_` are test files — do not use this prefix for helpers\n- Prefer extending an existing test file that already covers the same component or behavior; create a new file only for a distinct surface without an appropriate existing file\n- Use `conftest.py` for shared utilities\n\n## Integration Tests\n\nIntegration tests require external services (OpenAI, Azure, etc.) and are controlled by three markers:\n\n1. **`@pytest.mark.flaky`** — marks the test as potentially flaky since it depends on external services\n2. **`@pytest.mark.integration`** — used for test selection, so integration tests can be included/excluded with `-m integration` / `-m \"not integration\"`\n3. **`@skip_if_..._integration_tests_disabled`** decorator — skips the test when the required API keys or service endpoints are missing\n\n### Adding New Integration Tests\n\nAll three markers must be applied to every new integration test:\n\n```python\n@pytest.mark.flaky\n@pytest.mark.integration\n@skip_if_openai_integration_tests_disabled\nasync def test_openai_chat_completion() -> None:\n    ...\n```\n\nFor test files where all tests are integration tests (e.g., Azure Functions, Durable Task), use the module-level `pytestmark` list:\n\n```python\npytestmark = [\n    pytest.mark.flaky,\n    pytest.mark.integration,\n    pytest.mark.sample(\"01_single_agent\"),\n    pytest.mark.usefixtures(\"function_app_for_test\"),\n]\n```\n\n### CI Workflow\n\nThe merge CI workflow (`python-merge-tests.yml`) splits integration tests into parallel jobs by provider with change-based detection:\n\n- **Unit tests** — always run all non-integration tests\n- **OpenAI integration** — runs when `packages/core/agent_framework/openai/` or core infrastructure changes\n- **Azure OpenAI integration** — runs when `packages/core/agent_framework/azure/` or core changes\n- **Misc integration** — Anthropic, Ollama, MCP tests; runs when their packages or core change\n- **Functions integration** — Azure Functions + Durable Task; runs when their packages or core change\n- **Foundry integration** — runs when `packages/foundry/` or core changes\n\nCore infrastructure changes (e.g., `_agents.py`, `_types.py`) trigger all integration test jobs. Scheduled and manual runs always execute all jobs.\n\n### Keeping CI Workflows in Sync\n\nTwo workflow files define the same set of parallel test jobs:\n\n- **`python-merge-tests.yml`** — runs on PRs, merge queue, schedule, and manual dispatch. Uses path-based change detection to skip unaffected integration jobs.\n- **`python-integration-tests.yml`** — called from the manual integration test orchestrator (`integration-tests-manual.yml`). Always runs all jobs (no path filtering).\n\nThese workflows must be kept in sync. When you add, remove, or modify a test job, update **both** files. The job structure, pytest commands, and xdist flags should match between them. The only difference is that `python-merge-tests.yml` has path filters and conditional job execution, while `python-integration-tests.yml` does not.\n\n### Updating the CI When Adding Integration Tests for a New Provider\n\nWhen adding integration tests for a new provider package, you must update **both** `python-merge-tests.yml` and `python-integration-tests.yml`:\n\n1. **Add a path filter** for the new provider in the `paths-filter` job in `python-merge-tests.yml` so the CI knows which file changes should trigger those tests.\n2. **Add the test job to both workflow files** — either add them to the existing `python-tests-misc-integration` job, or create a dedicated job if the provider:\n   - Has a large number of integration tests\n   - Requires special infrastructure setup (emulators, Docker containers, etc.)\n   - Has long-running tests that would slow down the misc job\n\nThe `python-tests-misc-integration` job is intended for small integration test suites that don't need dedicated infrastructure. When a provider's integration tests grow large or gain special requirements, split them out into their own job (like `python-tests-functions` was split out for Azure Functions + Durable Task).\n\n## Best Practices\n\n- Run only related tests, not the entire suite\n- Review existing tests to understand coding style before creating new ones\n- Use print statements for debugging, then remove them when done\n- Resolve all errors and warnings before committing\n","frontmatter":{"name":"python-testing","description":"Guidelines for writing and running tests in the Agent Framework Python codebase. Use this when creating, modifying, or running tests.\n"},"isInternal":false,"tokens":1642,"sizeBytes":7366},{"name":"AGENTS.md","path":"python/packages/a2a/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/AGENTS.md","title":"A2a Skill","category":"anthropic-skill","format":"markdown","content":"# A2a Skill\n\nPath: `python/packages/a2a/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/AGENTS.md)","tokens":300,"sizeBytes":176},{"name":"settings.json","path":"python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json","title":".vscode Skill","category":"anthropic-skill","format":"json","content":"# .vscode Skill\n\nPath: `python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/.vscode/settings.json)","tokens":300,"sizeBytes":270},{"name":"AGENTS.md","path":"python/packages/ag-ui/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/AGENTS.md","title":"Ag-ui Skill","category":"anthropic-skill","format":"markdown","content":"# Ag-ui Skill\n\nPath: `python/packages/ag-ui/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/AGENTS.md)","tokens":300,"sizeBytes":182},{"name":"AGENTS.md","path":"python/packages/anthropic/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/AGENTS.md","title":"Anthropic Skill","category":"anthropic-skill","format":"markdown","content":"# Anthropic Skill\n\nPath: `python/packages/anthropic/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/AGENTS.md)","tokens":300,"sizeBytes":194},{"name":"AGENTS.md","path":"python/packages/azure-ai-search/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/AGENTS.md","title":"Azure-ai-search Skill","category":"anthropic-skill","format":"markdown","content":"# Azure-ai-search Skill\n\nPath: `python/packages/azure-ai-search/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/AGENTS.md)","tokens":300,"sizeBytes":212},{"name":"AGENTS.md","path":"python/packages/azure-contentunderstanding/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/AGENTS.md","title":"Azure-contentunderstanding Skill","category":"anthropic-skill","format":"markdown","content":"# Azure-contentunderstanding Skill\n\nPath: `python/packages/azure-contentunderstanding/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/AGENTS.md)","tokens":300,"sizeBytes":245},{"name":"analyze_audio_result.json","path":"python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_audio_result.json)","tokens":300,"sizeBytes":295},{"name":"analyze_image_result.json","path":"python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_image_result.json)","tokens":300,"sizeBytes":295},{"name":"analyze_invoice_result.json","path":"python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_invoice_result.json)","tokens":300,"sizeBytes":299},{"name":"analyze_pdf_result.json","path":"python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_pdf_result.json)","tokens":300,"sizeBytes":291},{"name":"analyze_video_result.json","path":"python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/tests/cu/fixtures/analyze_video_result.json)","tokens":300,"sizeBytes":295},{"name":"AGENTS.md","path":"python/packages/azure-cosmos-memory/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/AGENTS.md","title":"Azure-cosmos-memory Skill","category":"anthropic-skill","format":"markdown","content":"# Azure-cosmos-memory Skill\n\nPath: `python/packages/azure-cosmos-memory/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/AGENTS.md)","tokens":300,"sizeBytes":224},{"name":"AGENTS.md","path":"python/packages/azure-cosmos/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/AGENTS.md","title":"Azure-cosmos Skill","category":"anthropic-skill","format":"markdown","content":"# Azure-cosmos Skill\n\nPath: `python/packages/azure-cosmos/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/AGENTS.md)","tokens":300,"sizeBytes":203},{"name":"AGENTS.md","path":"python/packages/bedrock/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/AGENTS.md","title":"Bedrock Skill","category":"anthropic-skill","format":"markdown","content":"# Bedrock Skill\n\nPath: `python/packages/bedrock/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/AGENTS.md)","tokens":300,"sizeBytes":188},{"name":"AGENTS.md","path":"python/packages/chatkit/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/AGENTS.md","title":"Chatkit Skill","category":"anthropic-skill","format":"markdown","content":"# Chatkit Skill\n\nPath: `python/packages/chatkit/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/AGENTS.md)","tokens":300,"sizeBytes":188},{"name":"AGENTS.md","path":"python/packages/claude/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/AGENTS.md","title":"Claude Skill","category":"anthropic-skill","format":"markdown","content":"# Claude Skill\n\nPath: `python/packages/claude/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/AGENTS.md)","tokens":300,"sizeBytes":185},{"name":"AGENTS.md","path":"python/packages/copilotstudio/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/AGENTS.md","title":"Copilotstudio Skill","category":"anthropic-skill","format":"markdown","content":"# Copilotstudio Skill\n\nPath: `python/packages/copilotstudio/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/AGENTS.md)","tokens":300,"sizeBytes":206},{"name":"launch.json","path":"python/packages/core/.vscode/launch.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/.vscode/launch.json","title":".vscode Skill","category":"anthropic-skill","format":"json","content":"# .vscode Skill\n\nPath: `python/packages/core/.vscode/launch.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/.vscode/launch.json)","tokens":300,"sizeBytes":202},{"name":"AGENTS.md","path":"python/packages/core/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/AGENTS.md","title":"Core Skill","category":"anthropic-skill","format":"markdown","content":"# Core Skill\n\nPath: `python/packages/core/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/AGENTS.md)","tokens":300,"sizeBytes":179},{"name":"pyrightconfig.dependency.json","path":"python/packages/core/pyrightconfig.dependency.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/pyrightconfig.dependency.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `python/packages/core/pyrightconfig.dependency.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/pyrightconfig.dependency.json)","tokens":300,"sizeBytes":219},{"name":"AGENTS.md","path":"python/packages/declarative/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/AGENTS.md","title":"Declarative Skill","category":"anthropic-skill","format":"markdown","content":"# Declarative Skill\n\nPath: `python/packages/declarative/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/AGENTS.md)","tokens":300,"sizeBytes":200},{"name":"http_request.yaml","path":"python/packages/declarative/tests/workflows/http_request.yaml","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/tests/workflows/http_request.yaml","title":"Workflows Skill","category":"anthropic-skill","format":"yaml","content":"# Workflows Skill\n\nPath: `python/packages/declarative/tests/workflows/http_request.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/tests/workflows/http_request.yaml)","tokens":300,"sizeBytes":246},{"name":"AGENTS.md","path":"python/packages/devui/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/AGENTS.md","title":"Devui Skill","category":"anthropic-skill","format":"markdown","content":"# Devui Skill\n\nPath: `python/packages/devui/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/AGENTS.md)","tokens":300,"sizeBytes":182},{"name":"dev.md","path":"python/packages/devui/dev.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/dev.md","title":"Devui Skill","category":"anthropic-skill","format":"markdown","content":"# Devui Skill\n\nPath: `python/packages/devui/dev.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/dev.md)","tokens":300,"sizeBytes":176},{"name":"components.json","path":"python/packages/devui/frontend/components.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/components.json","title":"Frontend Skill","category":"anthropic-skill","format":"json","content":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/components.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/components.json)","tokens":300,"sizeBytes":215},{"name":"package-lock.json","path":"python/packages/devui/frontend/package-lock.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package-lock.json","title":"Frontend Skill","category":"anthropic-skill","format":"json","content":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/package-lock.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package-lock.json)","tokens":300,"sizeBytes":219},{"name":"package.json","path":"python/packages/devui/frontend/package.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package.json","title":"Frontend Skill","category":"anthropic-skill","format":"json","content":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/package.json)","tokens":300,"sizeBytes":209},{"name":"tsconfig.app.json","path":"python/packages/devui/frontend/tsconfig.app.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.app.json","title":"Frontend Skill","category":"anthropic-skill","format":"json","content":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.app.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.app.json)","tokens":300,"sizeBytes":219},{"name":"tsconfig.json","path":"python/packages/devui/frontend/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.json","title":"Frontend Skill","category":"anthropic-skill","format":"json","content":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.json)","tokens":300,"sizeBytes":211},{"name":"tsconfig.node.json","path":"python/packages/devui/frontend/tsconfig.node.json","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.node.json","title":"Frontend Skill","category":"anthropic-skill","format":"json","content":"# Frontend Skill\n\nPath: `python/packages/devui/frontend/tsconfig.node.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/tsconfig.node.json)","tokens":300,"sizeBytes":221},{"name":"AGENTS.md","path":"python/packages/foundry_local/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/AGENTS.md","title":"Foundry_local Skill","category":"anthropic-skill","format":"markdown","content":"# Foundry_local Skill\n\nPath: `python/packages/foundry_local/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/AGENTS.md)","tokens":300,"sizeBytes":206},{"name":"AGENTS.md","path":"python/packages/gemini/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/AGENTS.md","title":"Gemini Skill","category":"anthropic-skill","format":"markdown","content":"# Gemini Skill\n\nPath: `python/packages/gemini/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/AGENTS.md)","tokens":300,"sizeBytes":185},{"name":"AGENTS.md","path":"python/packages/github_copilot/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/AGENTS.md","title":"Github_copilot Skill","category":"anthropic-skill","format":"markdown","content":"# Github_copilot Skill\n\nPath: `python/packages/github_copilot/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/AGENTS.md)","tokens":300,"sizeBytes":209},{"name":"AGENTS.md","path":"python/packages/hosting-a2a/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/AGENTS.md","title":"Hosting-a2a Skill","category":"anthropic-skill","format":"markdown","content":"# Hosting-a2a Skill\n\nPath: `python/packages/hosting-a2a/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/AGENTS.md)","tokens":300,"sizeBytes":200},{"name":"AGENTS.md","path":"python/packages/hosting-mcp/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/AGENTS.md","title":"Hosting-mcp Skill","category":"anthropic-skill","format":"markdown","content":"# Hosting-mcp Skill\n\nPath: `python/packages/hosting-mcp/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/AGENTS.md)","tokens":300,"sizeBytes":200},{"name":"AGENTS.md","path":"python/packages/lab/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/AGENTS.md","title":"Lab Skill","category":"anthropic-skill","format":"markdown","content":"# Lab Skill\n\nPath: `python/packages/lab/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/AGENTS.md)","tokens":300,"sizeBytes":176},{"name":"AGENTS.md","path":"python/packages/mem0/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/AGENTS.md","title":"Mem0 Skill","category":"anthropic-skill","format":"markdown","content":"# Mem0 Skill\n\nPath: `python/packages/mem0/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/AGENTS.md)","tokens":300,"sizeBytes":179},{"name":"AGENTS.md","path":"python/packages/mistral/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/AGENTS.md","title":"Mistral Skill","category":"anthropic-skill","format":"markdown","content":"# Mistral Skill\n\nPath: `python/packages/mistral/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/AGENTS.md)","tokens":300,"sizeBytes":188},{"name":"AGENTS.md","path":"python/packages/monty/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/AGENTS.md","title":"Monty Skill","category":"anthropic-skill","format":"markdown","content":"# Monty Skill\n\nPath: `python/packages/monty/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/AGENTS.md)","tokens":300,"sizeBytes":182},{"name":"AGENTS.md","path":"python/packages/ollama/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/AGENTS.md","title":"Ollama Skill","category":"anthropic-skill","format":"markdown","content":"# Ollama Skill\n\nPath: `python/packages/ollama/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/AGENTS.md)","tokens":300,"sizeBytes":185},{"name":"AGENTS.md","path":"python/packages/openai/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/AGENTS.md","title":"Openai Skill","category":"anthropic-skill","format":"markdown","content":"# Openai Skill\n\nPath: `python/packages/openai/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/AGENTS.md)","tokens":300,"sizeBytes":185},{"name":"AGENTS.md","path":"python/packages/purview/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/AGENTS.md","title":"Purview Skill","category":"anthropic-skill","format":"markdown","content":"# Purview Skill\n\nPath: `python/packages/purview/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/AGENTS.md)","tokens":300,"sizeBytes":188},{"name":"AGENTS.md","path":"python/packages/redis/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/AGENTS.md","title":"Redis Skill","category":"anthropic-skill","format":"markdown","content":"# Redis Skill\n\nPath: `python/packages/redis/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/AGENTS.md)","tokens":300,"sizeBytes":182},{"name":"risk-bands.md","path":"python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/references/risk-bands.md)","tokens":300,"sizeBytes":319},{"name":"SKILL.md","path":"python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md","title":"risk-scoring","category":"anthropic-skill","format":"markdown","content":"# risk-scoring\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/risk-scoring/SKILL.md)","tokens":300,"sizeBytes":283},{"name":"valuation-guide.md","path":"python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/references/valuation-guide.md)","tokens":300,"sizeBytes":323},{"name":"SKILL.md","path":"python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md","title":"valuation","category":"anthropic-skill","format":"markdown","content":"# valuation\n\nPath: `python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/harness/build_your_own_claw/skills/valuation/SKILL.md)","tokens":300,"sizeBytes":274},{"name":"README.md","path":"python/samples/02-agents/skills/class_based_skill/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/class_based_skill/README.md","title":"Class_based_skill Skill","category":"anthropic-skill","format":"markdown","content":"# Class_based_skill Skill\n\nPath: `python/samples/02-agents/skills/class_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/class_based_skill/README.md)","tokens":300,"sizeBytes":250},{"name":"README.md","path":"python/samples/02-agents/skills/code_defined_skill/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/code_defined_skill/README.md","title":"Code_defined_skill Skill","category":"anthropic-skill","format":"markdown","content":"# Code_defined_skill Skill\n\nPath: `python/samples/02-agents/skills/code_defined_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/code_defined_skill/README.md)","tokens":300,"sizeBytes":253},{"name":"README.md","path":"python/samples/02-agents/skills/file_based_skill/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/README.md","title":"File_based_skill Skill","category":"anthropic-skill","format":"markdown","content":"# File_based_skill Skill\n\nPath: `python/samples/02-agents/skills/file_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/README.md)","tokens":300,"sizeBytes":247},{"name":"CONVERSION_TABLES.md","path":"python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/references/CONVERSION_TABLES.md)","tokens":300,"sizeBytes":329},{"name":"SKILL.md","path":"python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md","title":"unit-converter","category":"anthropic-skill","format":"markdown","content":"# unit-converter\n\nPath: `python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/file_based_skill/skills/unit-converter/SKILL.md)","tokens":300,"sizeBytes":281},{"name":"README.md","path":"python/samples/02-agents/skills/mcp_based_skill/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mcp_based_skill/README.md","title":"Mcp_based_skill Skill","category":"anthropic-skill","format":"markdown","content":"# Mcp_based_skill Skill\n\nPath: `python/samples/02-agents/skills/mcp_based_skill/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mcp_based_skill/README.md)","tokens":300,"sizeBytes":244},{"name":"README.md","path":"python/samples/02-agents/skills/mixed_skills/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/README.md","title":"Mixed_skills Skill","category":"anthropic-skill","format":"markdown","content":"# Mixed_skills Skill\n\nPath: `python/samples/02-agents/skills/mixed_skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/README.md)","tokens":300,"sizeBytes":235},{"name":"CONVERSION_TABLES.md","path":"python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/references/CONVERSION_TABLES.md)","tokens":300,"sizeBytes":321},{"name":"SKILL.md","path":"python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md","title":"unit-converter","category":"anthropic-skill","format":"markdown","content":"# unit-converter\n\nPath: `python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/mixed_skills/skills/unit-converter/SKILL.md)","tokens":300,"sizeBytes":273},{"name":"README.md","path":"python/samples/02-agents/skills/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/README.md","title":"Skills Skill","category":"anthropic-skill","format":"markdown","content":"# Skills Skill\n\nPath: `python/samples/02-agents/skills/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/README.md)","tokens":300,"sizeBytes":203},{"name":"README.md","path":"python/samples/02-agents/skills/script_approval/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/script_approval/README.md","title":"Script_approval Skill","category":"anthropic-skill","format":"markdown","content":"# Script_approval Skill\n\nPath: `python/samples/02-agents/skills/script_approval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/script_approval/README.md)","tokens":300,"sizeBytes":244},{"name":"README.md","path":"python/samples/02-agents/skills/skill_filtering/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/README.md","title":"Skill_filtering Skill","category":"anthropic-skill","format":"markdown","content":"# Skill_filtering Skill\n\nPath: `python/samples/02-agents/skills/skill_filtering/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/README.md)","tokens":300,"sizeBytes":244},{"name":"SKILL.md","path":"python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md","title":"length-converter","category":"anthropic-skill","format":"markdown","content":"# length-converter\n\nPath: `python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/length-converter/SKILL.md)","tokens":300,"sizeBytes":285},{"name":"SKILL.md","path":"python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md","title":"volume-converter","category":"anthropic-skill","format":"markdown","content":"# volume-converter\n\nPath: `python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skill_filtering/skills/volume-converter/SKILL.md)","tokens":300,"sizeBytes":285},{"name":"README.md","path":"python/samples/02-agents/skills/skills_auto_approval/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skills_auto_approval/README.md","title":"Skills_auto_approval Skill","category":"anthropic-skill","format":"markdown","content":"# Skills_auto_approval Skill\n\nPath: `python/samples/02-agents/skills/skills_auto_approval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/skills/skills_auto_approval/README.md)","tokens":300,"sizeBytes":259},{"name":"SKILL.md","path":"python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md","title":"escalation-policy","category":"anthropic-skill","format":"markdown","content":"# escalation-policy\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/escalation-policy/SKILL.md)","tokens":300,"sizeBytes":362},{"name":"SKILL.md","path":"python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md","title":"support-style","category":"anthropic-skill","format":"markdown","content":"# support-style\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/foundry_toolbox_mcp_skills/skills/support-style/SKILL.md)","tokens":300,"sizeBytes":350},{"name":"agent.manifest.yaml","path":"python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"# Tools Skill\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.manifest.yaml)","tokens":300,"sizeBytes":286},{"name":"agent.yaml","path":"python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml","title":"Tools Skill","category":"anthropic-skill","format":"yaml","content":"# Tools Skill\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/agent.yaml)","tokens":300,"sizeBytes":268},{"name":"SKILL.md","path":"python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md","title":"foundry-config-setup","category":"anthropic-skill","format":"markdown","content":"# foundry-config-setup\n\nPath: `python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-config-setup/SKILL.md)","tokens":300,"sizeBytes":267},{"name":"SKILL.md","path":"python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md","title":"foundry-hosted-agent-validation","category":"anthropic-skill","format":"markdown","content":"# foundry-hosted-agent-validation\n\nPath: `python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/scripts/sample_validation/skills/foundry-hosted-agent-validation/SKILL.md)","tokens":300,"sizeBytes":300},{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/.github/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/.github/copilot-instructions.md)","tokens":300,"sizeBytes":198},{"name":"README.md","path":"dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md","title":"A2AAgent_AsFunctionTools Documentation","category":"plugin-manifest","format":"markdown","content":"# A2AAgent_AsFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/A2A/A2AAgent_AsFunctionTools/README.md)","tokens":300,"sizeBytes":273},{"name":"README.md","path":"dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md","title":"Agent_Anthropic_Step03_UsingFunctionTools Documentation","category":"plugin-manifest","format":"markdown","content":"# Agent_Anthropic_Step03_UsingFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/anthropic/Agent_Anthropic_Step03_UsingFunctionTools/README.md)","tokens":300,"sizeBytes":366},{"name":"README.md","path":"dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md","title":"Agent_Step03_UsingFunctionTools Documentation","category":"plugin-manifest","format":"markdown","content":"# Agent_Step03_UsingFunctionTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step03_UsingFunctionTools/README.md)","tokens":300,"sizeBytes":332},{"name":"README.md","path":"dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md","title":"Agent_Step09_UsingMcpClientAsTools Documentation","category":"plugin-manifest","format":"markdown","content":"# Agent_Step09_UsingMcpClientAsTools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step09_UsingMcpClientAsTools/README.md)","tokens":300,"sizeBytes":341},{"name":"README.md","path":"dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md","title":"Agent_Step13_Plugins Documentation","category":"plugin-manifest","format":"markdown","content":"# Agent_Step13_Plugins Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step13_Plugins/README.md)","tokens":300,"sizeBytes":299},{"name":"README.md","path":"dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md","title":"Agent_Step17_OpenAPITools Documentation","category":"plugin-manifest","format":"markdown","content":"# Agent_Step17_OpenAPITools Documentation\n\nPath: `dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentProviders/foundry/Agent_Step17_OpenAPITools/README.md)","tokens":300,"sizeBytes":314},{"name":"README.md","path":"dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md","title":"Hosted-LocalTools Documentation","category":"plugin-manifest","format":"markdown","content":"# Hosted-LocalTools Documentation\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-LocalTools/README.md)","tokens":300,"sizeBytes":306},{"name":"README.md","path":"dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md","title":"Hosted-McpTools Documentation","category":"plugin-manifest","format":"markdown","content":"# Hosted-McpTools Documentation\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-McpTools/README.md)","tokens":300,"sizeBytes":300},{"name":"README.md","path":"python/packages/a2a/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/README.md","title":"a2a Documentation","category":"plugin-manifest","format":"markdown","content":"# a2a Documentation\n\nPath: `python/packages/a2a/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/a2a/README.md)","tokens":300,"sizeBytes":184},{"name":"README.md","path":"python/packages/ag-ui/agent_framework_ag_ui_examples/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/README.md","title":"agent_framework_ag_ui_examples Documentation","category":"plugin-manifest","format":"markdown","content":"# agent_framework_ag_ui_examples Documentation\n\nPath: `python/packages/ag-ui/agent_framework_ag_ui_examples/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/agent_framework_ag_ui_examples/README.md)","tokens":300,"sizeBytes":277},{"name":"README.md","path":"python/packages/ag-ui/getting_started/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/getting_started/README.md","title":"getting_started Documentation","category":"plugin-manifest","format":"markdown","content":"# getting_started Documentation\n\nPath: `python/packages/ag-ui/getting_started/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/getting_started/README.md)","tokens":300,"sizeBytes":232},{"name":"README.md","path":"python/packages/ag-ui/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/README.md","title":"ag-ui Documentation","category":"plugin-manifest","format":"markdown","content":"# ag-ui Documentation\n\nPath: `python/packages/ag-ui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ag-ui/README.md)","tokens":300,"sizeBytes":190},{"name":"README.md","path":"python/packages/anthropic/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/README.md","title":"anthropic Documentation","category":"plugin-manifest","format":"markdown","content":"# anthropic Documentation\n\nPath: `python/packages/anthropic/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/anthropic/README.md)","tokens":300,"sizeBytes":202},{"name":"README.md","path":"python/packages/azure-ai-search/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/README.md","title":"azure-ai-search Documentation","category":"plugin-manifest","format":"markdown","content":"# azure-ai-search Documentation\n\nPath: `python/packages/azure-ai-search/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-ai-search/README.md)","tokens":300,"sizeBytes":220},{"name":"README.md","path":"python/packages/azure-contentunderstanding/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/README.md","title":"azure-contentunderstanding Documentation","category":"plugin-manifest","format":"markdown","content":"# azure-contentunderstanding Documentation\n\nPath: `python/packages/azure-contentunderstanding/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-contentunderstanding/README.md)","tokens":300,"sizeBytes":253},{"name":"README.md","path":"python/packages/azure-cosmos-memory/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/README.md","title":"azure-cosmos-memory Documentation","category":"plugin-manifest","format":"markdown","content":"# azure-cosmos-memory Documentation\n\nPath: `python/packages/azure-cosmos-memory/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos-memory/README.md)","tokens":300,"sizeBytes":232},{"name":"README.md","path":"python/packages/azure-cosmos/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/README.md","title":"azure-cosmos Documentation","category":"plugin-manifest","format":"markdown","content":"# azure-cosmos Documentation\n\nPath: `python/packages/azure-cosmos/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/azure-cosmos/README.md)","tokens":300,"sizeBytes":211},{"name":"README.md","path":"python/packages/bedrock/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/README.md","title":"bedrock Documentation","category":"plugin-manifest","format":"markdown","content":"# bedrock Documentation\n\nPath: `python/packages/bedrock/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/bedrock/README.md)","tokens":300,"sizeBytes":196},{"name":"README.md","path":"python/packages/chatkit/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/README.md","title":"chatkit Documentation","category":"plugin-manifest","format":"markdown","content":"# chatkit Documentation\n\nPath: `python/packages/chatkit/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/chatkit/README.md)","tokens":300,"sizeBytes":196},{"name":"README.md","path":"python/packages/claude/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/README.md","title":"claude Documentation","category":"plugin-manifest","format":"markdown","content":"# claude Documentation\n\nPath: `python/packages/claude/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/claude/README.md)","tokens":300,"sizeBytes":193},{"name":"README.md","path":"python/packages/copilotstudio/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/README.md","title":"copilotstudio Documentation","category":"plugin-manifest","format":"markdown","content":"# copilotstudio Documentation\n\nPath: `python/packages/copilotstudio/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/copilotstudio/README.md)","tokens":300,"sizeBytes":214},{"name":"README.md","path":"python/packages/core/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# core Documentation\n\nPath: `python/packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/core/README.md)","tokens":300,"sizeBytes":187},{"name":"README.md","path":"python/packages/declarative/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/README.md","title":"declarative Documentation","category":"plugin-manifest","format":"markdown","content":"# declarative Documentation\n\nPath: `python/packages/declarative/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/declarative/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"python/packages/devui/frontend/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/README.md","title":"frontend Documentation","category":"plugin-manifest","format":"markdown","content":"# frontend Documentation\n\nPath: `python/packages/devui/frontend/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/frontend/README.md)","tokens":300,"sizeBytes":211},{"name":"README.md","path":"python/packages/devui/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/README.md","title":"devui Documentation","category":"plugin-manifest","format":"markdown","content":"# devui Documentation\n\nPath: `python/packages/devui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/devui/README.md)","tokens":300,"sizeBytes":190},{"name":"README.md","path":"python/packages/foundry_hosting/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_hosting/README.md","title":"foundry_hosting Documentation","category":"plugin-manifest","format":"markdown","content":"# foundry_hosting Documentation\n\nPath: `python/packages/foundry_hosting/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_hosting/README.md)","tokens":300,"sizeBytes":220},{"name":"README.md","path":"python/packages/foundry_local/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/README.md","title":"foundry_local Documentation","category":"plugin-manifest","format":"markdown","content":"# foundry_local Documentation\n\nPath: `python/packages/foundry_local/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry_local/README.md)","tokens":300,"sizeBytes":214},{"name":"README.md","path":"python/packages/foundry/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry/README.md","title":"foundry Documentation","category":"plugin-manifest","format":"markdown","content":"# foundry Documentation\n\nPath: `python/packages/foundry/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/foundry/README.md)","tokens":300,"sizeBytes":196},{"name":"README.md","path":"python/packages/gemini/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/README.md","title":"gemini Documentation","category":"plugin-manifest","format":"markdown","content":"# gemini Documentation\n\nPath: `python/packages/gemini/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/gemini/README.md)","tokens":300,"sizeBytes":193},{"name":"README.md","path":"python/packages/github_copilot/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/README.md","title":"github_copilot Documentation","category":"plugin-manifest","format":"markdown","content":"# github_copilot Documentation\n\nPath: `python/packages/github_copilot/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/github_copilot/README.md)","tokens":300,"sizeBytes":217},{"name":"README.md","path":"python/packages/hosting-a2a/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/README.md","title":"hosting-a2a Documentation","category":"plugin-manifest","format":"markdown","content":"# hosting-a2a Documentation\n\nPath: `python/packages/hosting-a2a/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-a2a/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"python/packages/hosting-mcp/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/README.md","title":"hosting-mcp Documentation","category":"plugin-manifest","format":"markdown","content":"# hosting-mcp Documentation\n\nPath: `python/packages/hosting-mcp/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-mcp/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"python/packages/hosting-responses/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-responses/README.md","title":"hosting-responses Documentation","category":"plugin-manifest","format":"markdown","content":"# hosting-responses Documentation\n\nPath: `python/packages/hosting-responses/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-responses/README.md)","tokens":300,"sizeBytes":226},{"name":"README.md","path":"python/packages/hosting-telegram/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-telegram/README.md","title":"hosting-telegram Documentation","category":"plugin-manifest","format":"markdown","content":"# hosting-telegram Documentation\n\nPath: `python/packages/hosting-telegram/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting-telegram/README.md)","tokens":300,"sizeBytes":223},{"name":"README.md","path":"python/packages/hosting/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting/README.md","title":"hosting Documentation","category":"plugin-manifest","format":"markdown","content":"# hosting Documentation\n\nPath: `python/packages/hosting/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hosting/README.md)","tokens":300,"sizeBytes":196},{"name":"README.md","path":"python/packages/hyperlight/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hyperlight/README.md","title":"hyperlight Documentation","category":"plugin-manifest","format":"markdown","content":"# hyperlight Documentation\n\nPath: `python/packages/hyperlight/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/hyperlight/README.md)","tokens":300,"sizeBytes":205},{"name":"README.md","path":"python/packages/lab/gaia/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/gaia/README.md","title":"gaia Documentation","category":"plugin-manifest","format":"markdown","content":"# gaia Documentation\n\nPath: `python/packages/lab/gaia/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/gaia/README.md)","tokens":300,"sizeBytes":195},{"name":"README.md","path":"python/packages/lab/lightning/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/lightning/README.md","title":"lightning Documentation","category":"plugin-manifest","format":"markdown","content":"# lightning Documentation\n\nPath: `python/packages/lab/lightning/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/lightning/README.md)","tokens":300,"sizeBytes":210},{"name":"README.md","path":"python/packages/lab/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/README.md","title":"lab Documentation","category":"plugin-manifest","format":"markdown","content":"# lab Documentation\n\nPath: `python/packages/lab/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/README.md)","tokens":300,"sizeBytes":184},{"name":"README.md","path":"python/packages/lab/tau2/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/tau2/README.md","title":"tau2 Documentation","category":"plugin-manifest","format":"markdown","content":"# tau2 Documentation\n\nPath: `python/packages/lab/tau2/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/lab/tau2/README.md)","tokens":300,"sizeBytes":195},{"name":"README.md","path":"python/packages/mem0/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/README.md","title":"mem0 Documentation","category":"plugin-manifest","format":"markdown","content":"# mem0 Documentation\n\nPath: `python/packages/mem0/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mem0/README.md)","tokens":300,"sizeBytes":187},{"name":"README.md","path":"python/packages/mistral/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/README.md","title":"mistral Documentation","category":"plugin-manifest","format":"markdown","content":"# mistral Documentation\n\nPath: `python/packages/mistral/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/mistral/README.md)","tokens":300,"sizeBytes":196},{"name":"README.md","path":"python/packages/monty/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/README.md","title":"monty Documentation","category":"plugin-manifest","format":"markdown","content":"# monty Documentation\n\nPath: `python/packages/monty/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/monty/README.md)","tokens":300,"sizeBytes":190},{"name":"README.md","path":"python/packages/ollama/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/README.md","title":"ollama Documentation","category":"plugin-manifest","format":"markdown","content":"# ollama Documentation\n\nPath: `python/packages/ollama/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/ollama/README.md)","tokens":300,"sizeBytes":193},{"name":"README.md","path":"python/packages/openai/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/README.md","title":"openai Documentation","category":"plugin-manifest","format":"markdown","content":"# openai Documentation\n\nPath: `python/packages/openai/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/openai/README.md)","tokens":300,"sizeBytes":193},{"name":"README.md","path":"python/packages/orchestrations/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/orchestrations/README.md","title":"orchestrations Documentation","category":"plugin-manifest","format":"markdown","content":"# orchestrations Documentation\n\nPath: `python/packages/orchestrations/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/orchestrations/README.md)","tokens":300,"sizeBytes":217},{"name":"README.md","path":"python/packages/purview/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/README.md","title":"purview Documentation","category":"plugin-manifest","format":"markdown","content":"# purview Documentation\n\nPath: `python/packages/purview/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/purview/README.md)","tokens":300,"sizeBytes":196},{"name":"README.md","path":"python/packages/redis/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/README.md","title":"redis Documentation","category":"plugin-manifest","format":"markdown","content":"# redis Documentation\n\nPath: `python/packages/redis/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/redis/README.md)","tokens":300,"sizeBytes":190},{"name":"README.md","path":"python/packages/tools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools Documentation\n\nPath: `python/packages/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/packages/tools/README.md)","tokens":300,"sizeBytes":190},{"name":"README.md","path":"python/samples/02-agents/tools/local_code_interpreter/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/local_code_interpreter/README.md","title":"local_code_interpreter Documentation","category":"plugin-manifest","format":"markdown","content":"# local_code_interpreter Documentation\n\nPath: `python/samples/02-agents/tools/local_code_interpreter/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/local_code_interpreter/README.md)","tokens":300,"sizeBytes":271},{"name":"README.md","path":"python/samples/02-agents/tools/monty_code_interpreter/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/monty_code_interpreter/README.md","title":"monty_code_interpreter Documentation","category":"plugin-manifest","format":"markdown","content":"# monty_code_interpreter Documentation\n\nPath: `python/samples/02-agents/tools/monty_code_interpreter/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/monty_code_interpreter/README.md)","tokens":300,"sizeBytes":271},{"name":"README.md","path":"python/samples/02-agents/tools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools Documentation\n\nPath: `python/samples/02-agents/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/02-agents/tools/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"python/samples/03-workflows/declarative/function_tools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/03-workflows/declarative/function_tools/README.md","title":"function_tools Documentation","category":"plugin-manifest","format":"markdown","content":"# function_tools Documentation\n\nPath: `python/samples/03-workflows/declarative/function_tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/03-workflows/declarative/function_tools/README.md)","tokens":300,"sizeBytes":265},{"name":"README.md","path":"python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools Documentation\n\nPath: `python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/samples/04-hosting/foundry-hosted-agents/responses/tools/README.md)","tokens":300,"sizeBytes":274},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step02_StructuredOutput/README.md)","tokens":300,"sizeBytes":267},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step07_AsMcpTool/README.md)","tokens":300,"sizeBytes":253},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step08_UsingImages/README.md)","tokens":300,"sizeBytes":257},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step10_BackgroundResponsesWithToolsAndPersistence/README.md)","tokens":300,"sizeBytes":319},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step11_Middleware/README.md)","tokens":300,"sizeBytes":255},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step14_BackgroundResponses/README.md)","tokens":300,"sizeBytes":273},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step15_DeepResearch/README.md)","tokens":300,"sizeBytes":259},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md)","tokens":300,"sizeBytes":271},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step19_InFunctionLoopCheckpointing/README.md)","tokens":300,"sizeBytes":289},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step20_DynamicFunctionTools/README.md)","tokens":300,"sizeBytes":275},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step22_AgentMode/README.md)","tokens":300,"sizeBytes":253},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/Agent_Step23_TodoList/README.md)","tokens":300,"sizeBytes":251},{"name":"README.md","path":"dotnet/samples/02-agents/Agents/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/02-agents/Agents/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Agents/README.md)","tokens":300,"sizeBytes":207},{"name":"README.md","path":"dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/03-workflows/Agents/GroupChatToolApproval/README.md)","tokens":300,"sizeBytes":257},{"name":"README.md","path":"dotnet/src/Shared/Foundry/Agents/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/src/Shared/Foundry/Agents/README.md","title":"Subagent: readme","category":"subagent-persona","format":"markdown","content":"# Subagent: readme\n\nPath: `dotnet/src/Shared/Foundry/Agents/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/src/Shared/Foundry/Agents/README.md)","tokens":300,"sizeBytes":209}],"systemPromptSnippet":"<yakaai_skills repo=\"microsoft/agent-framework\">\n<!-- File: dotnet/AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# dotnet - AI Agent Protocol & Instructions\n\nPath: `dotnet/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/AGENTS.md)\n\n<!-- File: python/AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# python - AI Agent Protocol & Instructions\n\nPath: `python/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/AGENTS.md)\n\n<!-- File: .github/skills/pull-requests/SKILL.md (Tokens: ~1542 | Category: anthropic-skill) -->\n---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Stable specifications\n\nFor Python function-calling loop changes, read\n[`docs/specs/004-python-function-calling-loop.md`](../../../docs/specs/004-python-function-calling-loop.md)\nand validate the PR against it. Do not edit that specification by default. It\nis a stable cross-package contract, not a per-PR changelog. A specification\nchange is warranted only when the PR intentionally changes normative behavior,\nthe scenario inventory, an acknowledged coverage gap, or the authoritative\nscenario-to-test mapping; keep any such edit to the smallest affected sections.\n\n### Community project listings\n\nWhen either `python/samples/community-projects.md` or\n`dotnet/samples/community-projects.md` changes, load and apply the\n[`community-projects`](../community-projects/SKILL.md) skill before reviewing\nor approving the change. Load it as well when an issue or pull request proposes\nan external project listing, even if neither catalog file has changed yet.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n\n<!-- File: dotnet/.github/skills/build-and-test/SKILL.md (Tokens: ~1559 | Category: anthropic-skill) -->\n---\nname: build-and-test\ndescription: How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.\n---\n\n- Only **UnitTest** projects need to be run locally; IntegrationTests require external dependencies.\n- See `../project-structure/SKILL.md` for project structure details.\n\n## Build, Test, and Lint Commands\n\n```bash\n# From dotnet/ directory\ndotnet restore --tl:off   # Restore dependencies for all projects\ndotnet build --tl:off     # Build all projects\ndotnet test               # Run all tests\ndotnet format             # Auto-fix formatting for all projects\n\n# Build/test/format a specific project (preferred for isolated/internal changes)\ndotnet build src/Microsoft.Agents.AI.<Package> --tl:off\ndotnet test --project tests/Microsoft.Agents.AI.<Package>.UnitTests\ndotnet format src/Microsoft.Agents.AI.<Package>\n\n# Run a single test\n# Replace the filter values with the appropriate assembly, namespace, class, and method names for the test you want to run and use * as a wildcard elsewhere, e.g. \"/*/*/HttpClientTests/GetAsync_ReturnsSuccessStatusCode\"\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for some projects\ndotnet test --filter-query \"/<assemblyFilter>/<namespaceFilter>/<classFilter>/<methodFilter>\" --ignore-exit-code 8\n\n# Run unit tests only\n# Use `--ignore-exit-code 8` to avoid failing the build when no tests are found for integration test projects\ndotnet test --filter-query \"/*UnitTests*/*/*/*\" --ignore-exit-code 8\n```\n\nUse `--tl:off` when building to avoid flickering when running commands in the agent.\n\n## Speeding Up Builds and Testing\n\nThe full solution is large. Use these shortcuts:\n\n| Change type | What to do |\n|-------------|------------|\n| Isolated/Internal logic | Build only the affected project and its `*.UnitTests` project. Fix issues, then build the full solution and run all unit tests. |\n| Public API surface | Build the full solution and run all unit tests immediately. |\n\nExample: Building a single code project for all target frameworks\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions\n```\n\nExample: Building a single code project for just .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet build ./src/Microsoft.Agents.AI.Abstractions -f net10.0\n```\n\nExample: Running tests for a single project using .NET 10.\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0\n```\n\nExample: Running a single test in a specific project using .NET 10.\nProvide the full namespace, class name, and method name for the test you want to run:\n\n```bash\n# From dotnet/ directory\ndotnet test --project ./tests/Microsoft.Agents.AI.Abstractions.UnitTests -f net10.0 --filter-query \"/*/Microsoft.Agents.AI.Abstractions.UnitTests/AgentRunOptionsTests/CloningConstructorCopiesProperties\"\n```\n\n### Multi-target framework tip\n\nMost projects target multiple .NET frameworks. If the affected code does **not** use `#if` directives for framework-specific logic, pass `-f net10.0` to speed up building and testing.\n\n### Package Restore tip\n\n`dotnet build` will try and restore packages for all projects on each build, which can be slow.\nUnless packages have been changed, or it's the first time building the solution, add `--no-restore` to the build command to skip this step and speed up builds.\n\nJust remember to run `dotnet restore` after pulling changes, making changes to project references, or when building for the first time.\n\n### Testing on Linux tip\n\nUnit tests target both .NET Framework as well as .NET Core. When running on Linux, only the .NET Core tests can be run, as .NET Framework is not supported on Linux.\n\nTo run only the .NET Core tests, use the `-f net10.0` option with `dotnet test`.\n\n### Microsoft Testing Platform (MTP)\n\nTests use the [Microsoft Testing Platform](https://learn.microsoft.com/dotnet/core/testing/unit-testing-platform-intro) via xUnit v3. Key differences from the legacy VSTest runner:\n\n- **`dotnet test` requires `--project`** to specify a test project directly (positional arguments are no longer supported).\n- **Test output** uses the MTP format (e.g., `[✓112/x0/↓0]` progress and `Test run summary: Passed!`).\n- **TRX reports** use `--report-xunit-trx` instead of `--logger trx`.\n- **Code coverage** uses `Microsoft.Testing.Extensions.CodeCoverage` with `--coverage --coverage-output-format cobertura`.\n- **Running a test project directly** is supported via `dotnet run --project <test-project>`. This bypasses the `dotnet test` infrastructure and runs the test executable directly with the MTP command line.\n\n- **Running tests across the solution** with a filter may cause some projects to match zero tests, which MTP treats as a failure (exit code 8). Use `--ignore-exit-code 8` to suppress this:\n\n```bash\n# Run all unit tests across the solution, ignoring projects with no matching tests\ndotnet test --solution ./agent-framework-dotnet.slnx --no-build -f net10.0 --ignore-exit-code 8\n```\n\n- **Running tests with `--solution` for a specific TFM** requires all projects in the solution to support that TFM. Not all projects target every framework (e.g., some are `net10.0`-only). Use `./dotnet/eng/scripts/New-FilteredSolution.ps1` to generate a filtered solution:\n\n```powershell\n# Generate a filtered solution for net472 and run tests\n$filtered = ./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net472\ndotnet test --solution $filtered --no-build -f net472 --ignore-exit-code 8\n\n# Exclude samples and keep only unit test projects\n./dotnet/eng/scripts/New-FilteredSolution.ps1 -Solution dotnet/agent-framework-dotnet.slnx -TargetFramework net10.0 -ExcludeSamples -TestProjectNameFilter \"*UnitTests*\" -OutputPath dotnet/filtered-unit.slnx\n```\n\n```bash\n# Run tests via dotnet test (uses MTP under the hood)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Run tests with code coverage (Cobertura format)\ndotnet test --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 --coverage --coverage-output-format cobertura --coverage-settings ./tests/coverage.runsettings\n\n# Run tests directly via dotnet run (MTP native command line)\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0\n\n# Show MTP command line help\ndotnet run --project ./tests/Microsoft.Agents.AI.UnitTests -f net10.0 -- -?\n```\n\n<!-- File: dotnet/.github/skills/project-structure/SKILL.md (Tokens: ~340 | Category: anthropic-skill) -->\n---\nname: project-structure\ndescription: Explains the project structure of the agent-framework .NET solution\n---\n\n# Agent Framework .NET Project Structure\n\n```\ndotnet/\n├── src/\n│   ├── Microsoft.Agents.AI/                      # Core AI agent implementations\n│   ├── Microsoft.Agents.AI.Abstractions/         # Core AI agent abstractions\n│   ├── Microsoft.Agents.AI.A2A/                  # Agent-to-Agent (A2A) provider\n│   ├── Microsoft.Agents.AI.OpenAI/               # OpenAI provider\n│   ├── Microsoft.Agents.AI.Foundry/               # Microsoft Foundry Agents (v2) provider\n│   ├── Microsoft.Agents.AI.AzureAI.Persistent/   # Legacy Microsoft Foundry Agents (v1) provider\n│   ├── Microsoft.Agents.AI.Anthropic/            # Anthropic provider\n│   ├── Microsoft.Agents.AI.Workflows/            # Workflow orchestration\n│   └── ...                                       # Other packages\n├── samples/                                      # Sample applications\n└── tests/                                        # Unit and integration tests\n```\n\n## Main Folders\n\n| Folder | Contents |\n|--------|----------|\n| `src/` | Source code projects |\n| `tests/` | Test projects — named `<Source-Code-Project>.UnitTests` or `<Source-Code-Project>.IntegrationTests` |\n| `samples/` | Sample projects |\n| `src/Shared`, `src/LegacySupport` | Shared code files included by multiple source code projects (see README.md files in these folders or their subdirectories for instructions on how to include them in a project) |\n\n<!-- File: dotnet/.github/skills/pull-requests/SKILL.md (Tokens: ~1345 | Category: anthropic-skill) -->\n---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n\n<!-- File: dotnet/.github/skills/verify-dotnet-samples/SKILL.md (Tokens: ~678 | Category: anthropic-skill) -->\n---\nname: verify-dotnet-samples\ndescription: How to build, run and verify the .NET sample projects in the Agent Framework repository. Use this when a user wants to verify that the samples still function as expected.\n---\n\n# Verifying .NET Sample Projects\n\n## Sample Pre-requisites\n\nWe should only support verifying samples that:\n1. Use environment variables for configuration.\n2. Have no complex setup requirements, e.g., where multiple applications need to be run together, or where we need to launch a browser, etc.\n\nAlways report to the user which samples were run and which were not, and why.\n\n## Verifying a sample\n\nSamples should be verified to ensure that they actually work as intended and that their output matches what is expected.\nFor each sample that is run, output should be produced that shows the result and explains the reasoning about what output\nwas expected, what was produced, and why it didn't match what the sample was expected to produce.\n\nSteps to verify a sample:\n1. Read the code for the sample\n1. Check what environment variables are required for the sample\n1. Check if each environment variable has been set\n1. If there are any missing, give the user a list of missing environment variables to set and terminate\n1. Summarize what the expected output of the sample should be\n1. Run the sample\n1. Show the user any output from the sample run as it gets produced, so that they can see the run progress\n1. Check the output of the run against expectations\n1. After running all requested samples, produce output for each sample that was verified:\n  1. If expectations were matched, output the following:\n     ```text\n     [Sample Name] Succeeded\n     ```\n  1. If expectations were not matched, output the following:\n     ```text\n     [Sample Name] Failed\n     Actual Output:\n     [What the sample produced]\n     Expected Output:\n     [Explanation of what was expected and why the actual output didn't match expectations]\n     ```\n\n## Environment Variables\n\nMost samples use environment variables to configure settings.\n\n```csharp\nvar endpoint = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_ENDPOINT\") ?? throw new InvalidOperationException(\"AZURE_OPENAI_ENDPOINT is not set.\");\nvar deploymentName = Environment.GetEnvironmentVariable(\"AZURE_OPENAI_DEPLOYMENT_NAME\") ?? \"gpt-4o-mini\";\n```\n\nTo run a sample, the environment variables should be set first.\nBefore running a sample, check whether each environment variable in the sample has a value and\nthen give the user a list of environment variables to set.\n\nYou can provide the user some examples of how to set the variables like this:\n\n```bash\nexport AZURE_OPENAI_ENDPOINT=\"https://my-openai-instance.openai.azure.com/\"\nexport AZURE_OPENAI_DEPLOYMENT_NAME=\"gpt-4o-mini\"\n```\n\nTo check if a variable has a value use e.g.:\n\n```bash\necho $AZURE_OPENAI_ENDPOINT\n```\n\n## How to Run a Sample (General Pattern)\n\n```bash\ncd dotnet/samples/<category>/<sample-dir>\ndotnet run\n```\n\nFor multi-targeted projects (e.g., Durable console apps), specify the framework:\n\n```bash\ndotnet run --framework net10.0\n```\n\n<!-- File: dotnet/.github/skills/verify-samples-tool/SKILL.md (Tokens: ~2116 | Category: anthropic-skill) -->\n---\nname: verify-samples-tool\ndescription: How to use the verify-samples tool to run, verify, and manage sample definitions in the Agent Framework repository. Use this when adding, updating, or running sample verification.\n---\n\n# verify-samples Tool\n\nThe `verify-samples` project (`dotnet/eng/verify-samples/`) is an automated tool that runs sample projects and verifies their output using deterministic checks and AI-powered verification.\n\n## Running verify-samples\n\n**Important:** By default, samples must be pre-built before running verify-samples. Build the solution first, or pass `--build` to build samples during the run:\n\n```bash\ncd dotnet\ndotnet build agent-framework-dotnet.slnx -f net10.0\n```\n\nThen run verify-samples:\n\n```bash\n# Run all samples across all categories\ndotnet run --project eng/verify-samples -- --log results.log --csv results.csv\n\n# Run a specific category\ndotnet run --project eng/verify-samples -- --category 02-agents --log results.log\n\n# Run specific samples by name\ndotnet run --project eng/verify-samples -- Agent_Step02_StructuredOutput Agent_Step09_AsFunctionTool\n\n# Control parallelism (default 8)\ndotnet run --project eng/verify-samples -- --parallel 8 --log results.log\n\n# Build samples during run (skips the need for a prior build step)\n# This may cause build conflicts as multiple samples are built in parallel, so use with caution\ndotnet run --project eng/verify-samples -- --build --log results.log\n\n# Combine options\ndotnet run --project eng/verify-samples -- --category 03-workflows --parallel 4 --log results.log --csv results.csv --md results.md\n```\n\n### Required Environment Variables\n\nThe tool itself needs:\n- `AZURE_OPENAI_ENDPOINT` — for the AI verification agent\n- `AZURE_OPENAI_DEPLOYMENT_NAME` (optional, defaults to `gpt-5-mini`)\n\nIndividual samples require their own env vars (for example, `FOUNDRY_PROJECT_ENDPOINT`). The tool automatically checks and skips samples with missing env vars.\n\n### Output Files\n\n- `--log results.log` — detailed per-sample log with stdout/stderr, AI reasoning, and a summary\n- `--csv results.csv` — tabular summary with Sample, ProjectPath, Status, FailedChecks, and Failures columns\n- `--md results.md` — Markdown summary with results table and collapsible failure details (suitable for GitHub PR comments)\n\n## Sample Categories\n\nDefinitions are in the `dotnet/eng/verify-samples/` directory:\n\n| Category | Config File | Registered Key |\n|----------|-------------|----------------|\n| 01-get-started | `GetStartedSamples.cs` | `01-get-started` |\n| 02-agents | `AgentsSamples.cs` | `02-agents` |\n| 03-workflows | `WorkflowSamples.cs` | `03-workflows` |\n\nCategories are registered in `VerifyOptions.cs` in the `s_sampleSets` dictionary.\n\n## SampleDefinition Properties\n\nEach sample is defined as a `SampleDefinition` in the appropriate config file. Key properties:\n\n```csharp\nnew SampleDefinition\n{\n    // Required: Display name for the sample\n    Name = \"Agent_Step02_StructuredOutput\",\n\n    // Required: Relative path from dotnet/ to the sample project directory\n    ProjectPath = \"samples/02-agents/Agents/Agent_Step02_StructuredOutput\",\n\n    // Environment variables the sample requires (throws if missing)\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n\n    // Environment variables with defaults that would prompt on console if unset\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n\n    // Skip this sample with a reason (for structural issues only)\n    SkipReason = null, // or \"Requires external service X.\"\n\n    // Deterministic checks: substrings that must appear in stdout\n    MustContain = [\"=== Section Header ===\"],\n\n    // Substrings that must NOT appear in stdout\n    MustNotContain = [],\n\n    // If true, only MustContain checks are used (no AI verification)\n    IsDeterministic = false,\n\n    // AI verification: natural-language descriptions of expected output\n    // Each entry describes one aspect to verify independently\n    ExpectedOutputDescription =\n    [\n        \"The output should show structured person information with Name, Age, and Occupation fields.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n\n    // Stdin inputs to feed to the sample (for interactive samples)\n    Inputs = [\"Y\", \"Y\", \"Y\"],\n\n    // Delay between stdin inputs in ms (default 2000, increase for LLM calls between inputs)\n    InputDelayMs = 3000,\n}\n```\n\n## How to Add a New Sample Definition\n\n1. **Check the sample's Program.cs** to understand:\n   - What environment variables it reads (look for `GetEnvironmentVariable`)\n   - Whether it needs stdin input (look for `Console.ReadLine`, `Application.GetInput`)\n   - Whether it has an external loop (look for `EXIT` patterns in YAML workflows)\n   - What output it produces (section headers, markers, expected behavior)\n   - Whether it exits on its own or runs as a server\n\n2. **Choose the right verification strategy:**\n   - **Deterministic** (`IsDeterministic = true`): Use `MustContain` for samples with fixed output strings. No AI verification.\n   - **AI-verified** (default): Use `ExpectedOutputDescription` with semantic descriptions. Write expectations that are flexible enough for non-deterministic LLM output.\n   - **Both**: Use `MustContain` for fixed markers AND `ExpectedOutputDescription` for LLM-generated content.\n\n3. **Set `SkipReason` only for structural issues:**\n   - Web servers that don't exit\n   - Multi-process client/server architectures\n   - Samples requiring external infrastructure (MCP servers you can't reach, Docker, etc.)\n   - Do NOT skip for missing env vars — the tool checks those dynamically.\n\n4. **For interactive samples, provide `Inputs`:**\n   - Samples using `Application.GetInput(args)` need one initial input\n   - Samples with `Console.ReadLine()` approval loops need `\"Y\"` inputs\n   - YAML workflows with `externalLoop` need `\"EXIT\"` as the last input\n   - Set `InputDelayMs` to 3000-8000ms for samples with LLM calls between inputs\n\n5. **Add the definition** to the appropriate config file (e.g., `AgentsSamples.cs`) in the `All` list.\n\n6. **Register new categories** (if needed) in `VerifyOptions.cs` `s_sampleSets` dictionary.\n\n### Writing Good ExpectedOutputDescription\n\n- Write descriptions that are **semantically flexible** — LLM output varies between runs\n- Each array entry should describe **one independent aspect** to verify\n- Always include `\"The output should not contain error messages or stack traces.\"` as the last entry\n- Avoid exact wording expectations — use \"should mention\", \"should contain information about\", \"should show\"\n- Bad: `\"The output should say 'The weather in Amsterdam is cloudy with a high of 15°C'\"`\n- Good: `\"The output should contain weather information about Amsterdam mentioning cloudy weather with a high of 15°C.\"`\n\n### Example: Simple LLM Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_With_AzureOpenAIChatCompletion\",\n    ProjectPath = \"samples/02-agents/AgentProviders/azure/Agent_With_AzureOpenAIChatCompletion\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    ExpectedOutputDescription =\n    [\n        \"The output should contain a joke about a pirate.\",\n        \"The output should not contain error messages or stack traces.\",\n    ],\n},\n```\n\n### Example: Deterministic Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Visualization\",\n    ProjectPath = \"samples/03-workflows/Visualization\",\n    IsDeterministic = true,\n    MustContain = [\"Generating workflow visualization...\", \"Mermaid string:\", \"DiGraph string:\"],\n    ExpectedOutputDescription = [\"The output should show workflow visualization in Mermaid and DiGraph formats.\"],\n},\n```\n\n### Example: Interactive Sample with Approval Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"FoundryAgent_Hosted_MCP\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/FoundryAgent_Hosted_MCP\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"Y\", \"Y\", \"Y\", \"Y\", \"Y\"],\n    InputDelayMs = 5000,\n    ExpectedOutputDescription = [\"The output should show an agent using the Microsoft Learn MCP tool with approval prompts.\"],\n},\n```\n\n### Example: Declarative Workflow with External Loop\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Workflow_Declarative_FunctionTools\",\n    ProjectPath = \"samples/03-workflows/Declarative/FunctionTools\",\n    RequiredEnvironmentVariables = [\"FOUNDRY_PROJECT_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"FOUNDRY_MODEL\"],\n    Inputs = [\"What are today's specials?\", \"EXIT\"],\n    InputDelayMs = 8000,\n    ExpectedOutputDescription = [\"The output should show a workflow calling function tools to answer a question about restaurant specials.\"],\n},\n```\n\n### Example: Skipped Sample\n\n```csharp\nnew SampleDefinition\n{\n    Name = \"Agent_MCP_Server\",\n    ProjectPath = \"samples/02-agents/ModelContextProtocol/Agent_MCP_Server\",\n    RequiredEnvironmentVariables = [\"AZURE_OPENAI_ENDPOINT\"],\n    OptionalEnvironmentVariables = [\"AZURE_OPENAI_DEPLOYMENT_NAME\"],\n    SkipReason = \"Runs as an MCP stdio server that does not exit on its own.\",\n},\n```\n\n<!-- File: dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/references/conversion-table.md)\n\n<!-- File: dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step01_FileBasedSkills/skills/unit-converter/SKILL.md)\n\n<!-- File: dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/references/unit-conversion-table.md)\n\n<!-- File: dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step04_MixedSkills/skills/unit-converter/SKILL.md)\n\n<!-- File: dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/references/conversion-table.md)\n\n<!-- File: dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# unit-converter\n\nPath: `dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/AgentSkills/Agent_Step07_SkillsAutoApproval/skills/unit-converter/SKILL.md)\n\n<!-- File: dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/references/risk-bands.md)\n\n<!-- File: dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# risk-scoring\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/risk-scoring/SKILL.md)\n\n<!-- File: dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/references/valuation-guide.md)\n\n<!-- File: dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# valuation\n\nPath: `dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/BuildYourOwnClaw/Claw_Step03_ScalingCapabilities/skills/valuation/SKILL.md)\n\n<!-- File: dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/references/regex-cheatsheet.md)\n\n<!-- File: dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# regex-tester\n\nPath: `dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/02-agents/Harness/Harness_Step04_CodeExecution/skills/regex-tester/SKILL.md)\n\n<!-- File: dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# escalation-policy\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/escalation-policy/SKILL.md)\n\n<!-- File: dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# support-style\n\nPath: `dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/samples/04-hosting/FoundryHostedAgents/responses/Hosted-AgentSkills/skills/support-style/SKILL.md)\n\n<!-- File: dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/request.json)\n\n<!-- File: dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Tools Skill\n\nPath: `dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/ConformanceTraces/ChatCompletions/tools/response.json)\n\n<!-- File: python/.github/skills/agent-framework-py-release/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# agent-framework-py-release\n\nPath: `python/.github/skills/agent-framework-py-release/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/microsoft/agent-framework/HEAD/python/.github/skills/agent-framework-py-release/SKILL.md)\n\n<!-- File: python/.github/skills/pull-requests/SKILL.md (Tokens: ~1345 | Category: anthropic-skill) -->\n---\nname: pull-requests\ndescription: >\n  Guidance for creating pull requests and handling PR review comments in the\n  Agent Framework repository. Use this when writing a PR description (filling out\n  the PR template) or when responding to and resolving review comments on an\n  existing PR.\n---\n\n# Pull Request Workflow\n\nThis skill covers two tasks: (1) writing a high-quality PR description, and\n(2) handling review comments on an existing PR.\n\n## 1. Writing the PR description\n\nAlways follow the repository PR template at\n[`.github/pull_request_template.md`](../../../../.github/pull_request_template.md). Keep its\nexact structure and headings. Fill every section:\n\n### `### Motivation & Context`\nExplain *why* the change is needed: the problem it solves and the scenario it\ncontributes to. Describe the net change relative to `main` — this is implied, so\ndo **not** spell out \"vs main\" explicitly.\n\n### `### Description & Review Guide`\nDescribe the changes, the overall approach, and the design. Answer the three\nprompts:\n- **What are the major changes?**\n- **What is the impact of these changes?**\n- **What do you want reviewers to focus on?** — This item is for **human\n  reviewers only**. Automated/AI reviewers must ignore it and review the entire\n  change rather than narrowing scope to it.\n\n### `### Related Issue`\nLink the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /\n`Closes #123`) so it closes automatically on merge. For a non-trivial change,\nconfirm that a maintainer added the `ready-for-implementation` label or explicitly\nagreed with the direction in an issue comment. A PR with no agreed issue may be\nclosed without detailed review. Before opening, confirm there is no other open PR\nfor the same issue; if there is, explain how this PR differs.\n\nFor a trivial change that does not require an issue, replace the `Fixes #`\nplaceholder with `N/A - trivial change` and briefly explain why the change is an\nobvious correction whose desired result is not reasonably in dispute.\n\nFor repository-maintained scheduled automation, replace the placeholder with\n`N/A - repository automation` and identify the generating workflow.\n\n### `### AI Assistance`\nCheck exactly one option:\n- Select **\"No material AI assistance was used.\"** only when generative AI did\n  not create or substantially transform submitted content.\n- Otherwise select **\"This is an AI-assisted contribution.\"** and briefly\n  identify the assisted areas.\n\nGenerating or substantially editing the PR description with Copilot counts as\nmaterial AI assistance even if the implementation itself was not AI-assisted.\nNever include prompts or sensitive information in the disclosure.\n\n### `### Contribution Checklist`\nCheck every item that applies. Confirm that the PR links to an agreed issue or\ndocuments a trivial-change or repository-automation exception. For the\nbreaking-change item:\n- Leave **\"This is not a breaking change.\"** checked for the common case.\n- If the change **is** breaking, add the `breaking change` label **or** put\n  `[BREAKING]` in the title prefix, before or after a language prefix such as\n  `Python:` or `.NET:` — workflows keep the label and the title prefix in sync\n  automatically (see `.github/workflows/label-title-prefix.yml` and\n  `.github/workflows/label-pr.yml`).\n\n### Do not\n- Do **not** add ad-hoc sections such as \"Validation\" or \"Tests run\"; CI/CD and\n  the checklist already cover validation status.\n- Do **not** remove or reorder the template's headings.\n\n### Creating the PR\nOpen new PRs as **drafts** until they are ready for review. Example:\n\n```bash\ngh pr create --repo microsoft/agent-framework --base main \\\n  --head <your-fork-owner>:<branch> --draft \\\n  --title \"<concise title>\" --body \"<body following the template>\"\n```\n\n## 2. Handling review comments\n\nWhen a PR receives review comments, follow this sequence — **do not start editing\ncode before the user has reviewed the plan**:\n\n1. **Review the comments.** Read every review comment and thread on the PR,\n   including inline code comments and general review summaries.\n2. **Make a plan.** Produce a concrete plan describing how each comment will be\n   addressed (or why it should not be, with reasoning).\n3. **Let the user review the plan.** Present the plan and wait for the user's\n   approval or adjustments before implementing anything.\n4. **Implement.** Make the agreed changes.\n5. **Reply to every comment.** Add a reply to **all** comments explaining how it\n   was addressed, preferably citing the commit containing the change. If the\n   feedback was not addressed, explain why. Leave no comment unanswered.\n6. **Resolve completed threads yourself.** After replying and completing any\n   necessary discussion, resolve the review thread. Do not wait for the reviewer\n   or a maintainer to resolve it. Leave a thread open only while it has an\n   unanswered question or active discussion.\n\n### Useful commands\n\nList review comments and threads:\n\n```bash\n# Inline review comments\ngh api repos/{owner}/{repo}/pulls/{pr}/comments\n\n# Review threads with resolution state (GraphQL)\ngh api graphql -f query='\n  query($owner:String!,$repo:String!,$pr:Int!){\n    repository(owner:$owner,name:$repo){\n      pullRequest(number:$pr){\n        reviewThreads(first:100){\n          nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }\n        }\n      }\n    }\n  }' -F owner={owner} -F repo={repo} -F pr={pr}\n```\n\nReply to an inline review comment:\n\n```bash\ngh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \\\n  -f body=\"Addressed in <commit>: <explanation>\"\n```\n\nResolve a review thread (needs the thread node id from the GraphQL query above):\n\n```bash\ngh api graphql -f query='\n  mutation($threadId:ID!){\n    resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }\n  }' -F threadId={thread_id}\n```\n\n<!-- File: python/.github/skills/python-code-quality/SKILL.md (Tokens: ~1614 | Category: anthropic-skill) -->\n---\nname: python-code-quality\ndescription: >\n  Code quality checks, linting, formatting, and type checking commands for the\n  Agent Framework Python codebase. Use this when running checks, fixing lint\n  errors, or troubleshooting CI failures.\n---\n\n# Python Code Quality\n\n## Quick Commands\n\nAll commands run from the `python/` directory:\n\n```bash\n# Syntax formatting + checks (parallel across packages by default)\nuv run poe syntax\nuv run poe syntax -P core\nuv run poe syntax -F    # Format only\nuv run poe syntax -C    # Check only\nuv run poe syntax -S    # Samples only\n\n# Type checking\n#\n# Division of labor (see \"Type checking architecture\" below):\n#   - Pyright (strict) is the source-code type checker.\n#   - Pyright (relaxed `basic`), mypy, pyrefly, ty, zuban all check the TESTS;\n#     pyright/pyrefly/ty also check the SAMPLES (mypy/zuban skip script-style samples).\nuv run poe pyright       # Pyright (strict) over SOURCE, fan-out across packages\nuv run poe pyright -P core\nuv run poe pyright -A\nuv run poe test-typing   # mypy + pyrefly + ty + zuban + pyright over each package's TESTS\nuv run poe test-typing -P core\nuv run poe test-typing -S                       # samples (pyrefly + ty + pyright)\nuv run poe test-typing -P core --checker mypy   # narrow to one checker (repeatable)\nuv run poe test-typing -P core --checker pyright # relaxed pyright over the tests\nuv run poe mypy          # alias: MyPy over the tests only\nuv run poe mypy -P core\nuv run poe typing        # Pyright (source) + the tests checkers\nuv run poe typing -P core\nuv run poe typing -A\n\n# All package-level checks in parallel (syntax + pyright)\nuv run poe check-packages\n\n# Full check (packages + samples + tests + markdown)\nuv run poe check\nuv run poe check -P core\n\n# Samples only\nuv run poe check -S\nuv run poe pyright -S\n\n# Markdown code blocks\nuv run poe markdown-code-lint\n```\n\nPoe and the pytest toolchain stay in the cross-version development\nenvironment. Ruff and the type checkers use pinned\n`tooling/requirements-*.txt` files; prek is selected from the `tool-hooks`\ndependency group only when needed.\n\n## Pre-commit Hooks (prek)\n\nPrek hooks run automatically on commit. They stay lightweight and only check\nchanged files.\n\n```bash\n# Install hooks\nuv run poe prek-install\n\n# Run all hooks manually\nuv run --group tool-hooks prek run -a\n\n# Run on last commit\nuv run --group tool-hooks prek run --last-commit\n```\n\nThey run changed-package syntax formatting/checking, markdown code lint only\nwhen markdown files change, and sample syntax lint/pyright only when files\nunder `samples/` change.\nThey intentionally do not run workspace `pyright` or `mypy` by default.\n\n## Type checking architecture\n\nFollowing the \"too many type checkers\" approach, type checkers are split by target:\n\n| Target | Checker(s) | Mode | Config |\n|--------|-----------|------|--------|\n| Source (`agent_framework*`) | **pyright** | strict | `[tool.pyright]` in `pyproject.toml` |\n| Tests | pyright, mypy, pyrefly, ty, zuban | relaxed/basic | `pyrightconfig.tests.json`, `[tool.mypy]`, `pyrefly.toml`, `ty` rules |\n| Samples | pyright, pyrefly, ty | basic | `pyrightconfig.samples.json`, `pyrefly.samples.toml`, `ty.samples.toml` |\n\n- **Pyright is the only *strict* source-code checker**, and it ALSO runs in a relaxed\n  `basic` profile over the tests and samples (so the surfaces customers copy from are\n  validated by every checker, including pyright). MyPy was removed from source; its\n  `[tool.mypy]` block is now a *relaxed* profile used only for tests/samples.\n- The extra checkers run over tests/samples because those exercise the public API the way\n  users do. The profile is intentionally relaxed (private access allowed, untyped test\n  bodies allowed) so authors aren't forced into ugly over-annotation.\n- **Gating checkers** are `pyright`, `mypy`, `pyrefly`, `ty`, and `zuban` — all five run by\n  default and gate CI. `zuban` is the strictest of the mypy-compatible pair, so the same\n  `[tool.mypy]` config yields more findings; suppress zuban-only friction with shared\n  `# type: ignore[code]`. Suppress relaxed-pyright friction with `# pyright: ignore[rule]`.\n- **Samples** add `pyright` to `pyrefly` + `ty` — mypy/zuban can't resolve script-style\n  sample layouts (numeric-prefixed dirs, duplicate `main.py`), but pyright handles them.\n- `pyrefly.samples.toml` enables fallback lookup for standalone sibling imports.\n  The ty sample profile uses first-party `root = [\".\"]` for PEP 723 sibling helpers,\n  preserving automatic extra-path lookup for the existing samples.\n- The strict source-pyright (`[tool.pyright]`) enforces `reportUnnecessaryTypeIgnoreComment`\n  and excludes tests/samples; the relaxed test/sample pyright configs do not flag unnecessary\n  ignores.\n\n## Ruff Configuration\n\n- Line length: 120\n- Target: Python 3.10+\n- Auto-fix enabled\n- Rules: ASYNC, B, CPY, D, E, ERA, F, FIX, I, INP, ISC, Q, RET, RSE, RUF, SIM, T20, TD, W, T100, S\n- Scripts directory is excluded from checks\n\n## Pyright Configuration\n\n- **Source**: strict mode (`[tool.pyright]`), `reportUnnecessaryTypeIgnoreComment = \"error\"`,\n  excludes tests, samples, .venv, packages/devui/frontend.\n- **Tests**: relaxed `basic` profile (`pyrightconfig.tests.json`) — private import/usage and\n  not-required TypedDict access allowed; runs as the `pyright` checker in `test-typing`.\n- **Samples**: relaxed `basic` profile (`pyrightconfig.samples.json`, with a py310 variant) —\n  runs as the `pyright` checker in `test-typing -S`.\n\n## Parallel Execution\n\nThe task runner (`scripts/task_runner.py`) executes the cross-product of\n(package × task) in parallel using ThreadPoolExecutor. Single items run\nin-process with streaming output.\n\n## CI Workflow\n\nCI splits into 4 parallel jobs:\n1. **Pre-commit hooks** — lightweight hooks (SKIP=poe-check)\n2. **Package checks** — syntax/pyright (source) via check-packages\n3. **Samples & markdown** — `check -S` plus `markdown-code-lint`\n4. **Test Typing** — change-detected mypy/pyrefly/ty over tests (`ci-test-typing`)\n\n<!-- File: python/.github/skills/python-development/SKILL.md (Tokens: ~1094 | Category: anthropic-skill) -->\n---\nname: python-development\ndescription: >\n  Coding standards, conventions, and patterns for developing Python code in the\n  Agent Framework repository. Use this when writing or modifying Python source\n  files in the python/ directory.\n---\n\n# Python Development Standards\n\n## File Header\n\nEvery `.py` file must start with:\n\n```python\n# Copyright (c) Microsoft. All rights reserved.\n```\n\n## Type Annotations\n\n- Always specify return types and parameter types\n- Use `Type | None` instead of `Optional[Type]`\n- Use `from __future__ import annotations` to enable postponed evaluation\n- Use suffix `T` for TypeVar names: `ChatResponseT = TypeVar(\"ChatResponseT\", bound=ChatResponse)`\n- Use `Mapping` instead of `MutableMapping` for read-only input parameters\n- Prefer `# type: ignore[...]` over unnecessary casts, or `isinstance` checks, when these are internally called and executed methods\n    But make sure the ignore is specific for both mypy and pyright so that we don't miss other mistakes\n- Internal private helpers may be used across `agent_framework*` modules when intentional; use a targeted\n  `# pyright: ignore[reportPrivateUsage]` instead of making the helper public just to satisfy pyright.\n- Do not add trivial pass-through or one-line helper functions solely to appease typing. Prefer targeted ignores,\n  casts, or clearer annotations over adding runtime overhead without a design benefit.\n\n## Function Parameters\n\n- Positional parameters: up to 3 fully expected parameters\n- Use keyword-only arguments (after `*`) for optional parameters\n- Provide string-based overrides to avoid requiring extra imports:\n\n```python\ndef create_agent(name: str, tool_mode: Literal['auto', 'required', 'none'] | ChatToolMode) -> Agent:\n    if isinstance(tool_mode, str):\n        tool_mode = ChatToolMode(tool_mode)\n```\n\n- Avoid shadowing built-ins (use `next_handler` instead of `next`)\n- Avoid `**kwargs` unless needed for subclass extensibility; prefer named parameters\n\n## Docstrings\n\nUse Google-style docstrings for all public APIs:\n\n```python\ndef equal(arg1: str, arg2: str) -> bool:\n    \"\"\"Compares two strings and returns True if they are the same.\n\n    Args:\n        arg1: The first string to compare.\n        arg2: The second string to compare.\n\n    Returns:\n        True if the strings are the same, False otherwise.\n\n    Raises:\n        ValueError: If one of the strings is empty.\n    \"\"\"\n```\n\n- Always document Agent Framework specific exceptions\n- Explicitly use `Keyword Args` when applicable\n- Only document standard Python exceptions when the condition is non-obvious\n\n## Import Structure\n\n```python\n# Core\nfrom agent_framework import Agent, Message, tool\n\n# Components\nfrom agent_framework.observability import enable_sensitive_telemetry\n\n# Connectors (lazy-loaded)\nfrom agent_framework.openai import OpenAIChatClient\nfrom agent_framework.foundry import FoundryChatClient\n```\n\n## Public API and Exports\n\nIn `__init__.py` files that define package-level public APIs, use direct re-export imports plus an explicit\n`__all__`. Avoid identity aliases like `from ._agents import Agent as Agent`, and avoid\n`from module import *`.\n\nDo not define `__all__` in internal non-`__init__.py` modules. Exception: modules intentionally exposed as a\npublic import surface (for example, `agent_framework.observability`) should define `__all__`.\n\n```python\n__all__ = [\"Agent\", \"Message\", \"ChatResponse\"]\n\nfrom ._agents import Agent\nfrom ._types import Message, ChatResponse\n```\n\nSpecial case: the root `agent_framework/__init__.py` uses lazy runtime exports. For root public API changes:\n- Add the symbol to `_LAZY_MODULE_EXPORTS` and keep `_LAZY_EXPORTS` derived from it.\n- Keep the explicit runtime `__all__` synchronized; it is still required for `from agent_framework import *`.\n- Add the same public symbol to `agent_framework/__init__.pyi` so pyright, mypy, and editors see the typed surface.\n- Put runtime deprecation behavior in the owning module via that module's `__getattr__`; avoid root-level\n  special-case branches for individual deprecated exports.\n- Identity aliases are appropriate in `.pyi` stubs because they mark re-exported names for type checkers; avoid them\n  in runtime `.py` modules unless there is a specific compatibility reason.\n\n## Performance Guidelines\n\n- Cache expensive computations (e.g., JSON schema generation)\n- Prefer `match/case` on `.type` attribute over `isinstance()` in hot paths\n- Avoid redundant serialization — compute once, reuse\n\n## Style\n\n- Line length: 120 characters\n- Format only files you changed, not the entire codebase\n- Prefer attributes over inheritance when parameters are mostly the same\n- Async by default — assume everything is asynchronous\n\n## Naming Conventions for Connectors\n\n- `_prepare_<object>_for_<purpose>` for methods that prepare data for external services\n- `_parse_<object>_from_<source>` for methods that process data from external services\n\n<!-- File: python/.github/skills/python-feature-lifecycle/SKILL.md (Tokens: ~1657 | Category: anthropic-skill) -->\n---\nname: python-feature-lifecycle\ndescription: >\n  Guidance for package and feature lifecycle in the Agent Framework Python\n  codebase, including stage meanings, feature-stage decorators, feature enums,\n  and how to move APIs from one stage to the next.\n---\n\n# Python Feature Lifecycle\n\n## Two lifecycle levels\n\nAgent Framework uses lifecycle at two different levels:\n\n1. **Package lifecycle** — the maturity of the package as a whole\n2. **Feature lifecycle** — the maturity of a specific API or feature inside that package\n\nThese are related, but they are **not the same thing**.\n\n- The **package stage is the default** for everything in the package.\n- **Feature-stage decorators are only for exceptions** when a feature is behind the package's default stage.\n- Do **not** decorate every class or function just because the package is experimental or release candidate.\n\nThis skill describes staged API behavior within a package. For creating or promoting a package, including sample\nplacement, meta-package membership, versioning, and lazy-loading namespace decisions, follow the\n`python-package-management` skill.\n\n### Important default\n\nIf a package is still in **beta / experimental preview**, all public APIs in that package are experimental by default.\n\n- Do **not** add `@experimental(...)` everywhere in that package.\n- The package stage already communicates that default.\n\nOnce a package moves forward, you can keep individual features behind:\n\n- If a package moves to **release candidate**, a feature may remain **experimental**\n- If a package moves to **released / GA**, a feature may remain **experimental** or **release candidate**\n\nThat is the main use case for feature-stage decorators.\n\n## The four stages\n\n### 1. Experimental\n\nUse for features that are still unstable and may change or be removed without notice.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ExperimentalFeature, experimental\n\n\n@experimental(feature_id=ExperimentalFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds an experimental warning block to the docstring\n- Records feature metadata on the decorated object\n- Emits a runtime warning the first time the feature is used (once per feature by default)\n\nEnum setup:\n\n- Add an all-caps member to `ExperimentalFeature`\n- Reuse the same feature ID across all APIs that belong to the same conceptual feature\n\n### 2. Release candidate\n\nUse for features that are nearly stable but may still receive small refinements before GA.\n\nFeature-level code pattern:\n\n```python\nfrom ._feature_stage import ReleaseCandidateFeature, release_candidate\n\n\n@release_candidate(feature_id=ReleaseCandidateFeature.MY_FEATURE)\nclass MyFeature:\n    ...\n```\n\nBehavior:\n\n- Adds a release-candidate note to the docstring\n- Records feature metadata on the decorated object\n- Does **not** emit the experimental warning\n\nEnum setup:\n\n- Add an all-caps member to `ReleaseCandidateFeature`\n\n### 3. Released\n\nUse for stable GA APIs.\n\nCode pattern:\n\n- **No feature-stage decorator**\n- **No entry** in `ExperimentalFeature`\n- **No entry** in `ReleaseCandidateFeature`\n\nIf a feature is fully released, remove any stage-specific feature annotation.\n\n### 4. Deprecated\n\nUse for APIs that still exist but should not be used for new code.\n\nCode pattern:\n\n```python\nimport sys\n\nif sys.version_info >= (3, 13):\n    from warnings import deprecated  # type: ignore # pragma: no cover\nelse:\n    from typing_extensions import deprecated  # type: ignore # pragma: no cover\n\n\n@deprecated(\"MyOldFeature is deprecated. Use MyNewFeature instead.\")\nclass MyOldFeature:\n    ...\n```\n\nBehavior:\n\n- Uses the repository's version-conditional deprecation import pattern\n- Should describe what to use instead\n\nDeprecated APIs should not also carry feature-stage decorators.\n\n## Expected decorators by stage\n\n| Feature stage | Expected annotation |\n| --- | --- |\n| Experimental | `@experimental(feature_id=ExperimentalFeature.X)` |\n| Release candidate | `@release_candidate(feature_id=ReleaseCandidateFeature.X)` |\n| Released | No feature-stage decorator |\n| Deprecated | `@deprecated(\"...\")` |\n\n## Feature enums\n\nThe feature enums are the inventory of currently staged features:\n\n- `ExperimentalFeature`\n- `ReleaseCandidateFeature`\n\nGuidance:\n\n- Use one enum member per conceptual feature, not per class\n- Ideally, an ADR already defines the overall feature boundary and therefore the feature ID that staged APIs for that feature should reuse\n- Keep feature IDs all caps\n- Reuse the same member across related APIs for the same feature\n- Remove enum members when the feature no longer belongs to that stage\n- Treat these enums as **current-stage inventories**, not as a stable consumer introspection API\n\nMinimal consumer guidance:\n\n- Treat `__feature_stage__` and `__feature_id__` as optional staged metadata, not as stable contracts\n- Use `getattr(obj, \"__feature_stage__\", None)` and `getattr(obj, \"__feature_id__\", None)` rather than direct attribute access\n- Treat missing metadata as \"no explicit feature-stage annotation\"\n- For warning filters while a feature is staged, match the literal feature ID string\n- Do **not** rely on `ExperimentalFeature.X`, `ReleaseCandidateFeature.X`, or the continued presence of `__feature_id__` after a feature moves stages or is released\n\nFor consumers, the enums are also re-exported from `agent_framework`.\n\nFor internal implementation code inside `agent_framework`, continue to import the enums and decorators from `._feature_stage`.\n\n## Package stage vs feature stage\n\nUse the following rules:\n\n### Package is experimental / beta\n\n- All public APIs are experimental by default\n- Do **not** add feature-stage decorators just to restate that\n- Only introduce feature-level annotations later if the package advances first\n\n### Package is release candidate\n\n- All public APIs are RC by default\n- Do **not** decorate everything\n- Add `@experimental(...)` only for features that are intentionally still behind the package\n\n### Package is released / GA\n\n- All public APIs are released by default\n- Add `@experimental(...)` or `@release_candidate(...)` only for features still being held back\n\n## Moving a feature from one stage to the next\n\n### Experimental -> Release candidate\n\n1. Move the feature ID from `ExperimentalFeature` to `ReleaseCandidateFeature`\n2. Replace `@experimental(...)` with `@release_candidate(...)`\n3. Update any tests or docs that mention the old stage\n\n### Experimental -> Released\n\n1. Remove `@experimental(...)`\n2. Remove the feature from `ExperimentalFeature`\n3. Do not add a replacement feature-stage decorator\n\n### Release candidate -> Released\n\n1. Remove `@release_candidate(...)`\n2. Remove the feature from `ReleaseCandidateFeature`\n3. Leave the API undecorated\n\n### Any stage -> Deprecated\n\n1. Remove any feature-stage decorator\n2. Remove the feature from the stage enum\n3. Add `@deprecated(\"...\")`\n4. Update docs/tests to reflect the replacement path\n\n## Promotion guidance\n\nFeatures do **not** have to pass through every stage.\n\n- It is usually a good idea to move features in order when that reflects reality\n- But it is completely acceptable to go **experimental -> released**\n- Do **not** force a feature through release candidate if there is no real RC period\n\nLikewise, when a package advances, do not automatically move every feature with it.\n\n- Promote features based on actual readiness\n- Keep lagging features explicitly marked only when they are behind the package default\n\n## Practical rules of thumb\n\n- **Package default first, feature exceptions second**\n- **Do not decorate everything in preview packages**\n- **Do not double-annotate members of an already-staged class**\n- **Use enums only for currently staged features**\n- **Do not treat stage enums as a compatibility contract**\n- **Treat `__feature_stage__` and `__feature_id__` as optional metadata; use `getattr`**\n- **Remove stage annotations once a feature is released or deprecated**\n\n<!-- File: python/.github/skills/python-package-management/SKILL.md (Tokens: ~4684 | Category: anthropic-skill) -->\n---\nname: python-package-management\ndescription: >\n  Guide for managing packages in the Agent Framework Python monorepo, including\n  creating new connector packages, versioning, and the lazy-loading pattern.\n  Use this when adding, modifying, or releasing packages.\n---\n\n# Python Package Management\n\n## Monorepo Structure\n\n```\npython/\n├── pyproject.toml              # Root package (agent-framework)\n├── packages/\n│   ├── core/                   # agent-framework-core (main package)\n│   ├── foundry/                # agent-framework-foundry\n│   ├── lab/                    # Standalone uv project, excluded from the root workspace\n│   ├── anthropic/              # agent-framework-anthropic\n│   └── ...                     # Other connector packages\n```\n\n- `agent-framework-core` contains core abstractions and OpenAI/Azure OpenAI built-in\n- Provider packages extend core with specific integrations\n- Root `agent-framework` depends on `agent-framework-core[all]`. Despite the existing extra name, this is a\n  curated standard install set, not every package at a particular lifecycle stage.\n- Entries in `agent-framework-core[all]` carry lower and upper bounds. Workspace integrations use the version\n  released with the current Core cohort as their lower bound so pip does not backtrack across old cyclic\n  `core[all] -> integration -> core` combinations.\n- `packages/lab` is intentionally excluded from the root uv workspace. It has its own\n  `pyproject.toml`, `uv.lock`, environment, CI matrix, and dependency updates so experimental\n  dependencies cannot constrain released provider packages. Lab resolves released Core and provider\n  distributions rather than local root-workspace packages.\n\n## Dependency Management\n\nUses [uv](https://github.com/astral-sh/uv) for dependency management and\n[poethepoet](https://github.com/nat-n/poethepoet) for task automation.\n\n```bash\n# Full setup (venv + install + prek hooks)\nuv run poe setup\n\n# Install dependencies from lockfile (frozen resolution with prerelease policy)\nuv run poe install\n\n# Create venv with specific Python version\nuv run poe venv --python 3.12\n\n# Intentionally upgrade a specific dependency to reduce lockfile conflicts\nuv lock --upgrade-package <dependency-name> && uv run poe install\n\n# Refresh exact development and on-demand tool pins, lockfiles, and validation\nuv run poe upgrade-dev-dependencies\n\n# Release cuts: refresh uv.lock and probe changed packages at both bound extremes.\n# The release probe has a shared five-minute deadline.\nuv run poe validate-python-release --base-ref upstream/main\n\n# Exhaustive test+typing matrix (slow; use for deliberate dependency-range work or CI)\nuv run poe validate-dependency-bounds-test\n# Defaults to --package \"*\"; scope locally whenever possible.\nuv run poe validate-dependency-bounds-test --package core\n\n# Then expand bounds for one dependency in the target package\nuv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"\n\n# Repo-wide automation can reuse the same task\nuv run poe validate-dependency-bounds-project --mode upper --package \"*\"\n\n# Add a dependency to one project and run both validators for that project/dependency\nuv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"\n\n# Work on the standalone Lab project\ncd packages/lab\nuv sync --all-extras --all-groups\nuv run poe test\n```\n\n### Dependency Bound Notes\n\n- Stable dependencies (`>=1.0`) should typically be bounded as `>=<known-good>,<next-major>`.\n- Prerelease (`dev`/`a`/`b`/`rc`) and `<1.0` dependencies should use hard bounds with an explicit upper cap (avoid open-ended ranges).\n- For `<1.0` dependencies, prefer the broadest validated range the package can really support. That may be a patch line, a minor line, or multiple minor lines when checks/tests show the broader lane is compatible.\n- Prefer supporting multiple majors when practical; if APIs diverge across supported majors, use version-conditional imports/paths.\n- For release-only version, lifecycle, pin, and internal-floor edits, use `validate-python-release`. It refreshes\n  `uv.lock`, finds changed package metadata relative to the selected main ref, and runs the changed packages'\n  published runtime dependencies and non-development extras through lock-independent `lowest-direct` and `highest`\n  import probes on the minimum Python minor supported by each package's internal editable closure. The probes run\n  concurrently under one 300-second deadline; pass `--python` only when an explicit interpreter override is needed.\n- For deliberate external dependency-range changes, use\n  `validate-dependency-bounds-project --mode both` for the target package/dependency to find and validate the actual\n  minimum and maximum constraints. Scope the exhaustive `validate-dependency-bounds-test` matrix to affected\n  packages during local iteration; reserve the workspace-wide form for CI or an intentional full audit. The same\n  project task can drive repo-wide upper-bound automation by using `--package \"*\"` and omitting `--dependency`.\n- Prefer targeted lock updates with `uv lock --upgrade-package <dependency-name>` to reduce `uv.lock` merge conflicts.\n- Use `add-dependency-and-validate-bounds` for package-scoped dependency additions plus bound validation in one command.\n- Keep the test framework and Poe in the root `dev` group across Python\n  versions. Put script-only libraries in `tool-runtime`. Put tools used by\n  only one Python version in a named `tool-*` group or pinned\n  `tooling/requirements-*.txt` file, and add the smallest relevant group or\n  bundle to each command. Keep source/type-check support that is part of a\n  package's import surface in a package dependency group. Put package-specific\n  test fixtures in a `test` group.\n- Use `upgrade-dev-dependencies` for repo-wide development and tool dependency\n  refreshes; it repins exact dependencies across development groups and\n  `tooling/requirements-*.txt`, refreshes `uv.lock`, and reruns `check` and\n  `typing`.\n- Upgrade the root uv version manually as one coordinated change across the\n  `dev` requirement, `[tool.uv].required-version`, setup workflows, and the\n  uv pre-commit revision. Automated dependency updates intentionally ignore\n  the root uv pin.\n- Run Lab dependency and validation commands from `packages/lab`; root workspace tasks deliberately do not\n  discover or update the Lab project.\n\n## Meta-package Membership\n\nPackage lifecycle and membership in the root `agent-framework` meta-package are independent decisions. A package\nstarts outside `agent-framework-core[all]`, and promotion to `beta`, `rc`, or `released` does not add it\nautomatically.\n\nAdding a package to or removing a package from the standard install set requires an agreed GitHub issue and an\nexplicit core-team decision. For additions, consider:\n\n- whether the package is useful across common Agent Framework workloads rather than for one specialized storage\n  backend, hosting adapter, channel, or deployment target;\n- whether its dependency footprint is proportionate and compatible with the meta-package's supported Python and\n  platform matrix, especially for native, heavyweight, or conflict-prone dependencies;\n- whether it belongs in the documented standard getting-started experience; and\n- whether including one package would create an expectation that an open-ended family of alternative backends or\n  adapters must also be included.\n\nDefault to a separate install when the case is unclear. Existing membership is not precedent for every package in\nthe same lifecycle stage or category.\n\nFor removals, the issue must also assess compatibility for existing `pip install agent-framework` and\n`agent-framework-core[all]` users, document any migration or replacement path, determine whether the change is\nbreaking, and identify the required Core and root meta-package version changes. Do not treat removal as ordinary\ndependency cleanup.\n\nTrack the decision in the `Meta package` column of `python/PACKAGE_STATUS.md`. When membership changes, update\n`packages/core/pyproject.toml` `[project.optional-dependencies].all`, the Core and root package versions as required,\nand the status table in the same change.\n\n## Lazy Loading Pattern\n\n### Root core API\n\nThe root `agent_framework` package is a lazy public API surface:\n\n- Runtime exports live in `packages/core/agent_framework/__init__.py`.\n- Typing/editor exports live in `packages/core/agent_framework/__init__.pyi`.\n- Add or move root exports in `_LAZY_MODULE_EXPORTS`, keep the explicit runtime `__all__` in sync, and add the same\n  symbol to the `.pyi` file.\n- Keep deprecation behavior in the owning module (for example, a module-level `__getattr__` that warns and returns\n  the deprecated alias). Do not add one-off deprecated-symbol branches to root `__getattr__`.\n- Validate root API changes with `uv run poe syntax -P core`, `uv run poe pyright -P core`, and import smoke tests\n  for both `from agent_framework import <symbol>` and `from agent_framework import *`.\n\n### Provider namespaces\n\nProvider folders in core use `__getattr__` to lazy load from connector packages:\n\n```python\n# In agent_framework/foundry/__init__.py\n_IMPORTS: dict[str, tuple[str, str]] = {\n    \"FoundryChatClient\": (\"agent_framework_foundry\", \"agent-framework-foundry\"),\n}\n\ndef __getattr__(name: str) -> Any:\n    if name in _IMPORTS:\n        import_path, package_name = _IMPORTS[name]\n        try:\n            return getattr(importlib.import_module(import_path), name)\n        except ModuleNotFoundError as exc:\n            raise ModuleNotFoundError(\n                f\"The package {package_name} is required to use `{name}`. \"\n                f\"Install it with: pip install {package_name}\"\n            ) from exc\n```\n\n### Namespace compatibility\n\nThe core namespace module and the objects it re-exports have different compatibility rules:\n\n- While an owning package is `alpha`, `beta`, or `rc`, imports for objects from that package may be added, removed,\n  or moved between approved lazy-loading namespaces by explicit core-team decision. Those object paths follow the\n  owning package's prerelease lifecycle.\n- Do not remove a core namespace module unless it is empty after the change and is used exclusively by packages\n  that have not reached `released`.\n- If a namespace exposes objects from any released package, keep the namespace. Changing import paths for released\n  objects requires a deprecated forwarding path where feasible; otherwise the agreed issue must include migration\n  guidance, explicit breaking-change acknowledgement, and the required Core and root meta-package version changes.\n\n## Adding a New Connector Package\n\n**Important:** Do not create a new package unless approved by the core team.\n\nEvery new package starts as `alpha`.\n\n### Alpha package checklist\n\n1. Create directory under `packages/` (e.g., `packages/my-connector/`)\n2. Add the package to `tool.uv.sources` in root `pyproject.toml`\n3. Set the package version to the alpha pattern: `1.0.0a<date>`\n4. Set the package classifier to `Development Status :: 3 - Alpha`\n5. Include samples inside the package (e.g., `packages/my-connector/samples/`)\n6. Do **NOT** add to `[all]` extra in `packages/core/pyproject.toml`\n7. Do **NOT** create lazy loading in core yet\n8. Add the package to `python/PACKAGE_STATUS.md` with lifecycle state `alpha` and meta-package membership `no`,\n   and keep that file updated when packages are added, removed, renamed, promoted, or have their membership\n   changed. If the package exposes individually staged APIs, keep the feature list there current too.\n9. Keep the `Typing :: Typed` classifier and the `py.typed` marker in step. The classifier alone is a\n   promise PEP 561 keeps through the `py.typed` file inside the package directory, and that file is\n   the signal checkers act on: a package that declares `Typing :: Typed` without shipping it is not\n   treated as typed, so its API falls back to whatever a checker does with an untyped import\n   (`Any`, `Unknown`, or a missing-stub diagnostic) instead of the inline annotations. Check both,\n   not one:\n\n   ```bash\n   # every package that claims to be typed must ship the marker\n   cd python/packages\n   for d in */; do\n     d=${d%/}\n     [ -f \"$d/pyproject.toml\" ] || continue\n     if grep -q \"Typing :: Typed\" \"$d/pyproject.toml\" && ! ls \"$d\"/agent_framework*/py.typed >/dev/null 2>&1; then\n       echo \"missing py.typed: $d\"\n     fi\n   done\n   ```\n\n   Note that `py.typed` only makes annotations that are already there visible; it adds none, so a\n   package that has not been type-checked may surface further errors once the marker lands.\n\nRecommended dependency workflow during connector implementation:\n\n1. Add the dependency to the target package:\n   `uv run poe add-dependency-to-project --package core --dependency \"<dependency-spec>\"`\n2. Implement connector code and tests.\n3. Validate dependency bounds for that package/dependency:\n   `uv run poe validate-dependency-bounds-project --mode both --package core --dependency \"<dependency-name>\"`\n4. If the package has meaningful tests/checks that validate dependency compatibility, you can use the add + validation flow in one command:\n   `uv run poe add-dependency-and-validate-bounds --package core --dependency \"<dependency-spec>\"`\n   If compatibility checks are not in place yet, add the dependency first, then implement tests before running bound validation.\n\n### Promotion path\n\nCreate a GitHub issue for every package promotion and get core-team agreement before implementing the promotion.\nThe issue must record:\n\n- the current and target lifecycle stages;\n- whether the package should be included in the root meta-package, with rationale based on the criteria above; and\n- the lazy-loading namespace decision for the transition: `alpha` -> `beta` selects whether and where to expose the\n  package, while `beta` -> `rc` and `rc` -> `released` preserve the existing namespace by default and may change\n  the package's prerelease object imports only by explicit core-team decision and under the namespace compatibility\n  rules above.\n\nRecord an explicit `no` or `none` when the package should remain outside the meta-package or should not have a\nlazy-loading namespace. Do not infer either decision from the target lifecycle stage.\n\nPromotion work is not isolated to the package being promoted. If a promotion changes dependency\nmetadata for downstream packages, also update the dependent packages' own versions so they publish\nnew metadata alongside the promoted dependency bounds.\nApply the internal package dependency update rules from the versioning section below during\npromotions as well as standalone version update work.\n\n#### Alpha -> Beta\n\nMove a package to `beta` when it is stable enough for broader prerelease use.\n\n1. Update the package version to the beta pattern: `1.0.0b<date>`\n2. Update the classifier to `Development Status :: 4 - Beta`\n3. Move samples to the root `samples/` tree and remove package-local samples\n4. Apply the lazy-loading decision recorded in the promotion issue, creating or updating the approved namespace\n   when applicable\n5. Apply the meta-package decision recorded in the promotion issue. The default is to remain excluded; add the\n   package to `[all]` only when inclusion is explicitly approved.\n6. Update the lifecycle state and meta-package membership in `python/PACKAGE_STATUS.md`\n\nAfter `alpha`, there should be no samples left inside a package folder.\n\n#### Beta -> RC\n\nMove a package to `rc` when its API is close to the final released shape.\n\n1. Update the package version to the release-candidate pattern: `1.0.0rc<number>`\n2. Keep the classifier at `Development Status :: 4 - Beta` because PyPI does not have a separate\n   release-candidate classifier\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; the stage\n   transition alone does not add it to `core[all]`\n4. Preserve the existing lazy-loading namespace by default. Changes to the package's prerelease object imports are\n   discouraged and require explicit core-team approval recorded in the promotion issue; apply the namespace\n   compatibility rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `rc` and keep its membership value current\n\n#### RC -> Released\n\nMove a package to `released` when it no longer carries a prerelease qualifier.\n\n1. Update the package version to the stable pattern: `1.0.0`\n2. Update the classifier to `Development Status :: 5 - Production/Stable`\n3. Apply the meta-package decision recorded in the promotion issue, preserving current membership when unchanged\n   or using the membership-change process above when an addition or removal is explicitly approved; release does\n   not imply inclusion in `core[all]`\n4. Preserve the lazy-loading namespace used at RC by default. Any final changes to the package's prerelease object\n   imports require explicit core-team approval recorded in the promotion issue; apply the namespace compatibility\n   rules above\n5. Keep samples only in the root `samples/` tree\n6. Update `python/PACKAGE_STATUS.md` to show the package as `released` and keep its membership value current\n7. Update all `README.md` files that install that package with\n   `pip install agent-framework-... --pre` so they use `pip install agent-framework-...` without\n   the `--pre` suffix\n\n## Versioning\n\n### Internal package dependency updates\n\n- If package A depends on package B within this repository, only update package A's dependency\n  declaration when the work on package B actually affects package A.\n- If package A does not need anything from the package B change, leave package A's dependency\n  declaration unchanged.\n- If package A does need something from the package B change, update package A's dependency\n  declaration to the version or versioning scheme that matches what package A now requires.\n- If package B is promoted to a different lifecycle stage, update package A's dependency\n  declaration to the new versioning scheme for package B even when the only change is the stage\n  transition itself.\n- When Core releases, advance each workspace package floor in `agent-framework-core[all]` to that package's\n  co-released version, including unchanged packages at their existing version. Keep an upper bound appropriate\n  for the package's current major version. This release-cohort metadata is independent of whether the package\n  itself needed a version bump.\n- Use this guidance both for ordinary version updates and for package promotion work.\n\n- All non-core packages declare a lower bound on `agent-framework-core`\n- When core version bumps with breaking changes, update the lower bound in all packages\n- Non-core packages version independently; only raise core bound when using new core APIs\n- If promoting a package changes a dependent package's published dependency metadata, bump the\n  dependent package's own version in the correct lifecycle pattern for its current stage\n- Lifecycle version patterns:\n  - `alpha`: `1.0.0a<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `beta`: `1.0.0b<date>` where `<date>` is the current Pacific (US west coast) `YYMMDD`\n  - `rc`: `1.0.0rc<number>` where `<number>` increments only when the package has changes\n  - `released`: `X.Y.Z` using semver per package\n- For alpha/beta date stamps, use the current Pacific date as the cutoff, not UTC and not the user's local\n  timezone. Same-Pacific-day re-cuts use a `.postN` suffix. Honor an explicit user-provided date over this\n  default.\n- Keep the `Development Status` classifier in `pyproject.toml` aligned with the lifecycle stage:\n  - `alpha` -> `Development Status :: 3 - Alpha`\n  - `beta` -> `Development Status :: 4 - Beta`\n  - `rc` -> `Development Status :: 4 - Beta`\n  - `released` -> `Development Status :: 5 - Production/Stable`\n- See the PyPI classifier list for the available classifier values:\n  `https://pypi.org/classifiers/`\n\n## Installation Options\n\n```bash\npip install agent-framework-core          # Core only\npip install agent-framework-core[all]     # Core + curated standard integrations\npip install agent-framework               # Same standard install set as core[all]\npip install agent-framework-foundry       # Specific connector (pulls in core)\n```\n\n## Maintaining Documentation\n\nWhen changing a package, check if its `AGENTS.md` needs updates:\n- Adding/removing/renaming public classes or functions\n- Changing the package's purpose or architecture\n- Modifying import paths or usage patterns\n\nKeep `python/PACKAGE_STATUS.md` updated when:\n- A package is added, removed, renamed, or promoted between lifecycle stages\n- A package is added to or removed from the root meta-package\n- A package starts or stops exposing individually staged experimental or release-candidate APIs\n\nWhen a package adds, removes, or renames environment variables, update the related documentation in the same\nchange:\n- The package's `README.md` for package-level configuration/env var guidance\n- `samples/README.md` if the package is included in `packages/core/pyproject.toml` `[all]` and the env var is\n  part of the consolidated package env-var inventory\n- Any affected sample/package-local `.env.example`, `.env.template`, or sample README files when sample setup\n  changes alongside the package\n\n<!-- ... +139 more modular skills available via /api/skills/microsoft/agent-framework?path={path} -->\n</yakaai_skills>"}