Agent Skill
2/7/2026

foundry-hosted-agents-create

Create and initialize new Foundry Hosted Agent projects. Use when users ask to create, scaffold, initialize, start, or set up a new hosted agent. Triggers include azd ai agent init, agent.yaml, new agent project, create hosted agent, azd init. USE FOR: create hosted agent, azd init, azd ai agent init, scaffold agent project, new agent, initialize agent, set up hosted agent, agent.yaml setup. DO NOT USE FOR: deploying agents (use foundry-hosted-agents-deploy), testing agents (use foundry-hosted-agents-test), fixing errors (use foundry-hosted-agents-troubleshoot), beginner tutorials (use foundry-hosted-agents-quickstart). INVOKES: aitk-list_foundry_models to check existing infrastructure, fetch_webpage for GitHub samples. FOR SINGLE OPERATIONS: run azd commands directly if user knows exact syntax.

E
eamonoreilly
0GitHub Stars
1Views
npx skills add eamonoreilly/foundryhostedagentskill

SKILL.md

Namefoundry-hosted-agents-create
DescriptionCreate and initialize new Foundry Hosted Agent projects. Use when users ask to create, scaffold, initialize, start, or set up a new hosted agent. Triggers include azd ai agent init, agent.yaml, new agent project, create hosted agent, azd init. USE FOR: create hosted agent, azd init, azd ai agent init, scaffold agent project, new agent, initialize agent, set up hosted agent, agent.yaml setup. DO NOT USE FOR: deploying agents (use foundry-hosted-agents-deploy), testing agents (use foundry-hosted-agents-test), fixing errors (use foundry-hosted-agents-troubleshoot), beginner tutorials (use foundry-hosted-agents-quickstart). INVOKES: aitk-list_foundry_models to check existing infrastructure, fetch_webpage for GitHub samples. FOR SINGLE OPERATIONS: run azd commands directly if user knows exact syntax.

name: foundry-hosted-agents-create description: "Create and initialize new Foundry Hosted Agent projects. Use when users ask to create, scaffold, initialize, start, or set up a new hosted agent. Triggers include azd ai agent init, agent.yaml, new agent project, create hosted agent, azd init. USE FOR: create hosted agent, azd init, azd ai agent init, scaffold agent project, new agent, initialize agent, set up hosted agent, agent.yaml setup. DO NOT USE FOR: deploying agents (use foundry-hosted-agents-deploy), testing agents (use foundry-hosted-agents-test), fixing errors (use foundry-hosted-agents-troubleshoot), beginner tutorials (use foundry-hosted-agents-quickstart). INVOKES: aitk-list_foundry_models to check existing infrastructure, fetch_webpage for GitHub samples. FOR SINGLE OPERATIONS: run azd commands directly if user knows exact syntax."

Create Foundry Hosted Agents

Use this skill when users want to create a new hosted agent project from scratch.

For testing agents, see the foundry-hosted-agents-test skill. For deploying agents, see the foundry-hosted-agents-deploy skill. For troubleshooting, see the foundry-hosted-agents-troubleshoot skill.


WHEN USER ASKS TO CREATE A NEW HOSTED AGENT:

Step 1: Check for Existing Infrastructure

Call aitk-list_foundry_models tool to check for existing Foundry projects.

Step 2: Ask User Which Approach They Prefer

If existing project is found, present both options:

"I found an existing Foundry project:

  • Project: <project-name>
  • Endpoint: <endpoint>
  • Models: <list of deployed models>

Would you like to:

  1. Use this existing project - Deploy to existing infrastructure (faster, uses az cognitiveservices agent)
  2. Create new infrastructure - Set up a brand new Foundry project (uses azd ai agent)

Which would you prefer?"

If no existing project is found:

"No existing Foundry project was found. I'll help you create new infrastructure using azd ai agent."

Step 3: Follow the Appropriate Path

User ChoiceTemplateDeploy With
Use existing projectMinimal templateaz cognitiveservices agent
Create new infrastructureFull azd templateazd ai agent

Path A: New Infrastructure (azd ai agent)

CRITICAL: Always Use GitHub Samples

NEVER manually create agent.yaml, main.py, Dockerfile, or requirements.txt files. The azd ai agent init command expects a specific format that is difficult to replicate manually.

ALWAYS use one of these approaches:

Option 1: Use a GitHub Sample Directly (Recommended)

azd ai agent init -m https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/agent-with-local-tools/agent.yaml

Option 2: Fetch Sample as Reference Before Customizing

If the user needs a custom agent, first fetch a sample to use as a reference:

# Use fetch_webpage tool to get the sample files:
# - https://raw.githubusercontent.com/microsoft-foundry/foundry-samples/main/samples/python/hosted-agents/agent-framework/agent-with-local-tools/agent.yaml
# - https://raw.githubusercontent.com/microsoft-foundry/foundry-samples/main/samples/python/hosted-agents/agent-framework/agent-with-local-tools/main.py
# - https://raw.githubusercontent.com/microsoft-foundry/foundry-samples/main/samples/python/hosted-agents/agent-framework/agent-with-local-tools/requirements.txt
# - https://raw.githubusercontent.com/microsoft-foundry/foundry-samples/main/samples/python/hosted-agents/agent-framework/agent-with-local-tools/Dockerfile

Then create custom files based on the fetched reference, ensuring the format matches exactly.

Recommended Workflow for New Infrastructure

# Step 1: Initialize project with starter template
azd init -t https://github.com/Azure-Samples/azd-ai-starter-basic

# Step 2: Add agent sample (choose one)
azd ai agent init -m https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/agent-with-local-tools/agent.yaml

# Step 3: Provision infrastructure FIRST
azd provision

# Step 4: Set up local .env for testing
cat .azure/<env-name>/.env | grep AZURE_AI_PROJECT_ENDPOINT
# Create .env in project root with PROJECT_ENDPOINT=<value>

# Step 5: Test locally (see foundry-hosted-agents-test skill)

# Step 6: Deploy (see foundry-hosted-agents-deploy skill)

Available Agent Samples

SampleURLDescription
Local Tools.../agent-with-local-tools/agent.yamlPython functions as tools
Foundry Tools.../agent-with-foundry-tools/agent.yamlWeb search, file search, code interpreter
Hello World.../agent-hello-world/agent.yamlMinimal starting point

Base URL: https://github.com/microsoft-foundry/foundry-samples/blob/main/samples/python/hosted-agents/agent-framework/


Path B: Existing Infrastructure (Minimal Template)

When using existing Foundry infrastructure, create only these files:

Minimal Project Structure

my-agent/
├── main.py
├── requirements.txt
├── Dockerfile
├── .dockerignore
├── .env                          # DO NOT commit
└── .gitignore

WHEN USER ASKS ABOUT PROJECT STRUCTURE:

Full azd Template Structure

my-project/
├── azure.yaml                    # Service definitions (updated by azd ai agent init)
├── infra/                        # Bicep infrastructure (from starter template)
│   ├── main.bicep
│   ├── main.parameters.json
│   └── core/
├── src/
│   └── <agent-name>/             # Agent code (MUST be in src/ subdirectory)
│       ├── agent.yaml            # Agent manifest
│       ├── main.py               # Entry point
│       ├── Dockerfile
│       ├── requirements.txt
│       └── .dockerignore
├── .azure/
│   └── <env-name>/
│       └── .env                  # Provisioned values (AZURE_AI_PROJECT_ENDPOINT, etc.)
├── .env                          # Local dev values (PROJECT_ENDPOINT, MODEL_DEPLOYMENT_NAME)
└── .gitignore

WHEN USER ASKS ABOUT CORE FILES:

Environment Variable Names (azd vs code)

azd Environment VariableCode Environment VariableNotes
AZURE_AI_PROJECT_ENDPOINTPROJECT_ENDPOINTagent.yaml maps between them
Model set via {{placeholder}}MODEL_DEPLOYMENT_NAMEResolved during azd ai agent init

CRITICAL: In agent.yaml, use ${AZURE_AI_PROJECT_ENDPOINT} (azd variable), which maps to PROJECT_ENDPOINT (code variable).

agent.yaml

kind: hosted
name: my-agent
description: >
  Description of what your agent does.

metadata:
  authors:
    - Your Name
  tags:
    - Azure AI AgentServer
    - Microsoft Agent Framework

protocols:
  - protocol: responses
    version: ""

environment_variables:
  - name: PROJECT_ENDPOINT
    value: ${AZURE_AI_PROJECT_ENDPOINT}    # Maps azd var → code var
  - name: MODEL_DEPLOYMENT_NAME
    value: "{{chat}}"                       # Placeholder resolved by azd ai agent init

resources:
  - kind: model
    id: gpt-4.1
    name: chat

main.py

import asyncio
import os
from dotenv import load_dotenv
from agent_framework.azure import AzureAIAgentClient
from azure.ai.agentserver.agentframework import from_agent_framework
from azure.identity.aio import DefaultAzureCredential

load_dotenv()
PROJECT_ENDPOINT = os.getenv("PROJECT_ENDPOINT")
MODEL_DEPLOYMENT_NAME = os.getenv("MODEL_DEPLOYMENT_NAME", "gpt-4.1")

async def main():
    async with (
        DefaultAzureCredential() as credential,
        AzureAIAgentClient(
            project_endpoint=PROJECT_ENDPOINT,
            model_deployment_name=MODEL_DEPLOYMENT_NAME,
            credential=credential,
        ) as client,
    ):
        agent = client.create_agent(
            name="MyAgent",
            instructions="You are a helpful assistant.",
            tools=[],
        )
        print("Agent running on http://localhost:8088")
        server = from_agent_framework(agent, credential)
        await server.run_async()

if __name__ == "__main__":
    asyncio.run(main())

Dockerfile

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8088
CMD ["python", "main.py"]

requirements.txt

python-dotenv
azure-identity
azure-ai-agentserver-agentframework

.dockerignore

.venv/
venv/
.env
__pycache__/
*.py[cod]
.vscode/
.git/
*.md
.DS_Store
.pytest_cache/

.env (local development)

PROJECT_ENDPOINT=https://<account>.services.ai.azure.com/api/projects/<project>
MODEL_DEPLOYMENT_NAME=gpt-4.1

WHEN USER ASKS TO ADD TOOLS TO AN AGENT:

from typing import Annotated

def get_weather(city: Annotated[str, "The city name"]) -> str:
    """Get current weather for a city."""
    return f"Weather in {city}: 72°F, sunny"

agent = client.create_agent(
    name="WeatherAgent",
    instructions="You help users check weather.",
    tools=[get_weather],
)

WHEN USER ASKS TO CONVERT EXISTING PROJECT TO AZD:

Step 1: Get infrastructure template

mkdir -p /tmp/azd-temp && cd /tmp/azd-temp
azd init -t https://github.com/Azure-Samples/azd-ai-starter-basic -e temp
cp -r infra azure.yaml /path/to/your/project/

Step 2: Restructure for azd

Agent files MUST be in src/<agent-name>/:

cd /path/to/your/project
mkdir -p src/my-agent
mv main.py Dockerfile requirements.txt .dockerignore src/my-agent/

Step 3: Create agent.yaml

See agent.yaml template above. Use full format with ${AZURE_AI_PROJECT_ENDPOINT}.

Step 4: Configure for existing resources (optional)

azd env new my-env
azd env set AZURE_LOCATION <location>
azd env set AZURE_RESOURCE_GROUP <rg>
azd env set AZURE_AI_ACCOUNT_NAME <account>
azd env set AZURE_AI_PROJECT_NAME <project>
azd env set ENABLE_HOSTED_AGENTS true

Step 5: Initialize and deploy

azd ai agent init -m ./src/my-agent/agent.yaml
azd provision  # or skip if using existing resources
azd deploy my-agent

NEXT STEPS

After creating your agent project:

  1. Test locally first - Run python main.py and test with curl http://localhost:8088/responses
  2. Then deploy - Use azd deploy <agent-name> once local tests pass
  3. Test deployed agent - Use the SDK approach (not curl) for remote testing

See foundry-hosted-agents-test skill for detailed testing guidance.


Resources

Skills Info
Original Name:foundry-hosted-agents-createAuthor:eamonoreilly