Build an interview coach app with the GitHub Copilot SDK GitHub released the GitHub Copilot SDK, which lets developers embed the runtime behind Copilot CLI into their own applications, and published Interview Coach, a .NET sample that uses the SDK to run a Blazor-based interview coaching app. The sample configures Copilot in CopilotClientMode.Empty and supplies explicit custom tools through MCP servers MarkItDown and InterviewData, with five agents — Receptionist, Behavioral Interviewer, Technical Interviewer, Summarizer, and Triage — handling document reading and interview records. The SDK lets developers reuse existing Copilot access without a separate Azure model deployment. An interview coach has to do more than ask questions. It needs to read a resume, follow up on an incomplete answer, and save enough context to give useful feedback at the end. Some of that work is conversation. Some of it requires calling an application service. The GitHub Copilot SDK https://github.com/github/copilot-sdk lets you use the runtime behind Copilot CLI for that work inside your own application. You provide instructions and callable tools. Copilot handles the model interaction and resulting tool calls, while your application owns the interface and business workflow. For a developer building a personal assistant or an internal workflow, this means reusing an agent runtime with capabilities specific to the application. Existing Copilot access is a practical benefit, too: the sample’s local Copilot configuration doesn’t need a separate Azure model deployment. Interview Coach https://aka.ms/agentframework/interviewcoach demonstrates this in .NET. The candidate sees a Blazor chat interface. Copilot receives interview instructions and tools for handling documents and session records. We’re using Copilot to run part of the app, not to edit its code. What the candidate experiences You provide a resume and job description, answer behavioral and technical questions, and receive feedback on your responses. When you finish, the coach reviews the interview record and produces a summary. For example, imagine you’re applying for a role that involves operating cloud services. An illustrative practice question might be: Tell me about a production outage you helped investigate. How did you narrow down the cause, and how did you know the service had recovered? If your answer focuses only on the fix, the coach could prompt you to explain your own role, the evidence you used, and the result. This is an example of the coaching interaction, not a captured model response. Behind the chat, the specialists divide that work. They reach the document and record services through Model Context Protocol MCP , a protocol for connecting agents to external capabilities. | Agent | Job | MCP tools | |---|---|---| | Receptionist | Collect documents and set up the session | MarkItDown and InterviewData | | Behavioral Interviewer | Ask about experience and give feedback | InterviewData | | Technical Interviewer | Ask role-specific questions and discuss answers | InterviewData | | Summarizer | Review the interview record and produce final feedback | InterviewData | | Triage | Route the initial conversation and handle changes of direction | None | MarkItDown converts documents into text the agents can use. InterviewData exposes operations for creating, retrieving, and updating interview records. Following a resume through the application shows how these pieces work together. Give Copilot interview tools, not a coding environment An interview coach should be able to read a resume and save an interview record. It has no reason to run shell commands or edit the application’s source files. The sample’s client configuration https://github.com/Azure-Samples/interview-coach-agent-framework/blob/main/src/InterviewCoach.Agent/Program.cs starts Copilot in CopilotClientMode.Empty . The agent factory then supplies the instructions and an explicit list of custom tools. This excerpt from CreateCopilotSessionConfig shows that configuration. The full method also sets the model and permission handler: js var copilotTools = ToCopilotTools tools ; return new SessionConfig { AvailableTools = copilotTools .Select tool = $"custom:{tool.Name}" .ToList , SystemMessage = new SystemMessageConfig { Mode = SystemMessageMode.Append, Content = instructions, }, Tools = copilotTools, }; Tools supplies the custom definitions and callable handlers. AvailableTools identifies which tools the agent may use. The custom: prefix selects those supplied tools rather than Copilot CLI’s built-in tools. When a candidate supplies a resume link, the Receptionist can use MarkItDown to convert the document. It then has InterviewData save the relevant context to the session record. That tool writes to Cosmos DB and returns a result the runtime can use in its next response. The agent doesn’t need a database client or built-in filesystem tools to perform these operations. Tool selection controls exposure, but it is not a complete security boundary. The sample’s permission handler approves tool permission requests. A deployed application still needs authorization checks and an appropriate policy for the actions its tools can perform. Connect Copilot to the interview workflow The application uses Microsoft Agent Framework to connect the interview specialists. It represents each one as an AIAgent , which the workflow can invoke and hand control to. The Copilot adapter connects the SDK runtime to that abstraction. The agent factory https://github.com/Azure-Samples/interview-coach-agent-framework/blob/main/src/InterviewCoach.Agent/AgentDelegateFactory.cs creates a Copilot-backed specialist like this: private static AIAgent CreateCopilotRunAgent CopilotClient client, string name, string description, string? model, string instructions, IList