An Agent Framework agent that uses a local shell tool and a code interpreter tool for working with files, and hosted using the Responses protocol.
The agent uses FoundryChatClient from the Agent Framework to create a Responses client from the project endpoint and model deployment. The agent supports both streaming (SSE events) and non-streaming (JSON) response modes.
See main.py for the full implementation.
The agent is hosted using the Agent Framework with the ResponsesHostServer, which provisions a REST API endpoint compatible with the OpenAI Responses protocol.
This agent uses four tools:
- Get Current Working Directory Tool (
get_cwd) – Returns the current working directory of the agent host process. - List Files Tool (
list_files) – Lists the files in a specified directory. - Read File Tool (
read_file) – Reads the contents of a specified file. - Code Interpreter Tool (
code_interpreter) – Allows the agent to execute Python code in a safe.
In this sample, the filesystem tools are function tools defined in Python using the
@tooldecorator from the Agent Framework. The code interpreter tool is a managed tool provided by Foundry Toolbox. Learn more about foundry toolbox integration with hosted agents with this sample.
Follow the instructions in the Running the Agent Host Locally section of the README in the parent directory to run the agent host.
An extra environment variable TOOLBOX_NAME must be set to the name of the Foundry Toolbox that the agent should load at runtime. This allows the agent host to dynamically retrieve the correct toolbox from Foundry when it starts. Run the following:
export TOOLBOX_NAME="<your-toolbox-name>"Or in PowerShell:
$env:TOOLBOX_NAME="<your-toolbox-name>"Depending on how you run the agent host, you can invoke the agent using
curl(Invoke-WebRequestin PowerShell) orazd. Please refer to the parent README for more details. Use this README for sample queries you can send to the agent.
Send a POST request to the server with a JSON body containing an "input" field to interact with the agent. For example:
curl -X POST http://localhost:8088/responses -H "Content-Type: application/json" -d '{"input": "Find the quarterly report under `{cwd}/resources` and tell me the difference of revenue between q1 2026 and q1 2025?"}'When ruuning locally, it runs within the project directory, which contains the entire sample, so the
{cwd}/resourcespath in the query above will allow the agent to locate theresourcesfolder included with this sample and read thecontoso_q1_2026_report.txtfile from that folder.
The server will respond with a JSON object containing the response text and a response ID. You can use this response ID to continue the conversation in subsequent requests.
To host the agent on Foundry, follow the instructions in the Deploying the Agent to Foundry section of the README in the parent directory.
Deploying the agent won't automatically upload the files included with this sample to Foundry. To make these files available to the agent at runtime, you must upload them to a hosted agent session. Files are tied to a specific hosted agent session, so each time you start a new session you will need to upload the files again if the agent needs access to them during that session.
After you deploy the agent to Foundry, you have two ways to interact with the agent:
- Using
azd ai agent invoke. - Through the Foundry portal.
After successfully deploying the agent to Foundry, run the following command:
You must remain in the directory where your
azdproject is initialized so that the CLI can locate the deployed agent configuration.
azd ai agent invoke "Hi!"The command will invoke the agent and the server will create a new session if one does not already exist for this interaction, returning the agent's response from the hosted agent session. Run the following if you want to force a new session:
azd ai agent invoke --new-session "Hi!"Run the following command to upload a file to the hosted agent session:
azd ai agent files upload -f <path-to-contoso_q1_2026_report.txt>The above command will automatically detect the last active session and upload the file to that session without requiring you to explicitly provide a session ID. It is also possible to specify a particular session ID to upload the file to a specific hosted agent session by using the
--session-idflag. Runazd ai agent files upload -hto see the full list of options and flags available for theuploadcommand.
Once the file is uploaded to the hosted agent session, the agent will be able to access it during that session and use it to respond to queries that reference the uploaded file.
Invoke the agent again with a query that references the uploaded file to see how it can now use the file in its responses. For example:
azd ai agent invoke "Find the quarterly report under the home directory and tell me the difference of revenue between q1 2026 and q1 2025?"Similar to using the azd CLI, you must invoke the agent first to create a session:
Once the session is created, you can grab the session ID and use azd ai agent files upload --session-id <session-id> to upload files to that specific hosted agent session.
Or you can upload files directly through the Foundry portal by navigating to Files tab in the agent playground:


