Early Bird Ends Soon Code To Cloud Summit 2026 — May 23, Calgary — Lock in your ticket before prices go up

Build a Chief of Staff Agent with GitHub Copilot: Automate Daily Briefings and Weekly Planning

I built an AI chief of staff that reads my inbox, triages what matters, preps my calendar briefing, and identifies the one thing I should move forward today. Here's the exact system — using GitHub Copilot agent mode, MCP servers, and three files.

Chief of Staff AI agent — GitHub Copilot daily briefing and weekly planning automation
5 min Daily briefing
3 Files to build it
45 min Saved per morning
100% Microsoft stack

Last Tuesday I walked into a 9 AM stakeholder call and already knew the project scope had changed overnight. I knew exactly who added the VP to the email thread at 11:47 PM, what they asked for, and that my client was waiting on a decision I hadn't seen yet. I had a suggested response ready. The whole prep took five minutes — because my chief of staff agent built with GitHub Copilot had already triaged everything while I made coffee.

Three months ago, that same morning would have started with 40 minutes of inbox scrolling, calendar tab-switching, and trying to remember what I promised someone last Thursday. I'd sit down to "plan my day" and emerge an hour later having responded to six emails but planned nothing.

The difference is three files: a custom Copilot agent file, an MCP server connected to Microsoft Graph, and a prompt template refined over 60+ mornings. I'm going to give you all three — plus the weekly review system that caught me spending 40% more time on reactive email than I estimated.

What's Inside

  • Why a chief of staff agent beats generic AI assistants
  • The three-file architecture: .agent.md + .prompt.md + mcp.json
  • The full daily briefing prompt — refined over 60+ iterations
  • Connecting Copilot to Outlook, Calendar, and Teams via MCP
  • Weekly planning prompt for Friday reviews
  • Running it from Copilot CLI for terminal workflows
  • Adapting it for team leads, founders, and fractional CTOs

Why a "Chief of Staff" Agent — Not Just Another AI Assistant

Most people use AI like a search engine: ask a question, get an answer, close the tab. A chief of staff agent is fundamentally different. It has standing context about your role, your priorities, and your communication patterns. It doesn't just answer — it proactively surfaces what you'd otherwise miss.

In the physical world, a chief of staff reads the room before you walk in. They know which emails are political landmines, which meetings actually need you, and which "urgent" requests can wait. That's the behavior we're encoding.

The key insight: GitHub Copilot now supports custom agent files (.agent.md) that define persistent AI personas with specific tools, model preferences, and even handoffs between agents. Combined with MCP (Model Context Protocol) servers that connect to your Outlook, Calendar, and Teams data, you can build an agent that has real-time access to your work life. If you've been following the evolution of Microsoft's agent ecosystem, this is the individual-productivity side of the same architecture.

The Architecture: Three Files, One System

The entire chief of staff agent is built from three files in your workspace. No build step, no deployment, no API keys beyond what MCP handles.

Project Structure your-workspace/ ├── .github/ │ ├── agents/ │ │ └── chief-of-staff.agent.md ← Agent persona + tools │ └── prompts/ │ ├── daily-briefing.prompt.md ← Morning briefing template │ └── weekly-review.prompt.md ← Friday planning template └── .vscode/ └── mcp.json ← MCP server connections

Here's what each file does and the exact contents I use.

File 1: The Agent — chief-of-staff.agent.md

This file defines who the agent is. It lives at .github/agents/chief-of-staff.agent.md and shows up in your Copilot agent picker in VS Code.

Agent Definition .github/agents/chief-of-staff.agent.md
--- description: "Executive chief of staff — inbox triage, calendar prep, priority identification" tools: ["WorkIQ-MailServer/*", "WorkIQ-CalendarServer/*", "WorkIQ-TeamsServer/*", "github/*", "fetch"] --- Act as my chief of staff. You have deep context on my role, my priorities, and the communication patterns in my organization. Your job is to help me spend time on what matters and skip what doesn't. You are direct, skip filler, and surface tensions or risks I should know about. ## My Context - I am a fractional CTO serving multiple clients - My high-priority projects: [list your current projects] - Key stakeholders: [list people whose emails always matter] - I sign off around 6 PM MT and check in at 7:30 AM MT ## Your Behavior - Be brutally concise. No pleasantries, no "hope this helps" - When triaging email, tell me the specific ask — quote the sentence - For calendar items, tell me why the meeting exists, not just its title - Flag tone shifts, new senior people added, and scope changes - Skip newsletters, automated alerts, and CC-only threads unless they affect a project I lead - When you identify my top priority, justify it with specific signals — not generic productivity advice

The tools array in the frontmatter restricts which tools this agent can access. The WorkIQ-MailServer/* wildcard includes all tools from that MCP server — same pattern for Calendar and Teams. The agent gets read access to your M365 data but can't edit files or run terminal commands. It's read-only by design. If a tool listed in the array isn't available at runtime, Copilot simply ignores it.

File 2: The MCP Connection — mcp.json

MCP (Model Context Protocol) is what gives Copilot access to data beyond your codebase. For a chief of staff agent, you need MCP servers that connect to your Outlook, Calendar, and Teams data.

Microsoft recently launched Work IQ MCP (preview) — enterprise-grade MCP servers for Microsoft 365. Work IQ is the intelligence layer behind Microsoft 365 Copilot, and these MCP servers expose that same context to your own agents. The catalog includes Work IQ Mail, Work IQ Calendar, Work IQ Teams, Work IQ SharePoint, Work IQ OneDrive, and more — exactly what a chief of staff agent needs.

Work IQ MCP servers connect over HTTP with OAuth authentication. Here's the configuration for GitHub Copilot CLI and VS Code:

MCP Configuration — Work IQ (Recommended) .vscode/mcp.json
{ "servers": { "WorkIQ-MailServer": { "type": "http", "url": "https://agent365.svc.cloud.microsoft/agents/tenants/${env:AZURE_TENANT_ID}/servers/mcp_MailTools", "oauth": { "clientId": "${env:AZURE_CLIENT_ID}", "callbackPort": 8080 } }, "WorkIQ-CalendarServer": { "type": "http", "url": "https://agent365.svc.cloud.microsoft/agents/tenants/${env:AZURE_TENANT_ID}/servers/mcp_CalendarTools", "oauth": { "clientId": "${env:AZURE_CLIENT_ID}", "callbackPort": 8080 } }, "WorkIQ-TeamsServer": { "type": "http", "url": "https://agent365.svc.cloud.microsoft/agents/tenants/${env:AZURE_TENANT_ID}/servers/mcp_TeamsTools", "oauth": { "clientId": "${env:AZURE_CLIENT_ID}", "callbackPort": 8080 } }, "github": { "url": "https://api.githubcopilot.com/mcp" } } }

A few things to note:

Don't have a Microsoft 365 Copilot license? You can build a lightweight custom MCP server using the MCP TypeScript SDK that wraps Microsoft Graph API calls directly. Register a Microsoft Entra app with read-only scopes (Mail.Read, Calendars.Read, Chat.Read) and you're set. The agent file and prompts work identically — only the mcp.json configuration changes.

If you're already using Microsoft 365 in your organization, your admin can set up the Entra app registration and grant Work IQ permissions in minutes.

Need help connecting your Microsoft 365 environment to AI tools? We help Alberta businesses set up secure integrations that actually work.

Book a Free Strategy Call

File 3: The Daily Briefing Prompt — daily-briefing.prompt.md

This is the heart of the system. It lives at .github/prompts/daily-briefing.prompt.md and you invoke it by typing /daily-briefing in Copilot Chat. I've refined this prompt over 60+ mornings. Every section earns its place.

Prompt Template .github/prompts/daily-briefing.prompt.md
--- description: "5-minute morning briefing — inbox triage, calendar prep, top priority" agent: "chief-of-staff" --- Prepare my morning briefing. I need to read this in 5 minutes and know everything I'd otherwise miss. Be direct, skip filler, surface tensions and risks.

📬 INBOX TRIAGE — since my last sign-off

Review my emails received since yesterday evening. For each item, decide: does this need me, today? **Needs my response today:** For each: sender, subject, the specific ask (quote the exact sentence), your suggested response angle, and any deadline stated or implied. **Decisions awaiting me:** Anything where someone is blocked on my input. Name what they need, what happens if I don't respond, and by when. **FYI but important:** Changes in scope, status, or stakeholder sentiment on projects I own — even if no action is requested. One sentence each. **Threads that escalated overnight:** Conversations where tone shifted, new people were added, or leadership was looped in. Explain what changed and why it matters. Skip: newsletters, calendar invites, automated alerts, marketing, and anything I'm only CC'd on unless it changes a project I lead.

📅 TODAY'S CALENDAR

For each accepted meeting today, in chronological order: - **Meeting name** + time + attendees (flag anyone senior, external, or new to a recurring series) - **Why this meeting exists:** the actual decision or outcome it's meant to produce — not the calendar title - **My role:** driving, contributing, or listening. If unclear from prior threads, say so - **Pre-read:** the 1–2 most relevant recent emails, docs, or chat threads I should review beforehand - **What's changed since last time** (recurring meetings only): new commitments, blockers, or status shifts - **Open questions or risks** I should raise Also flag: - Back-to-back stretches with no prep buffer - Any meeting where I haven't responded to a pre-read or agenda request - Meetings that could be async based on the agenda

🎯 TOP PRIORITY TODAY

Based on deadlines, stakeholder pressure, and what's blocking others: what is the single most important thing I should move forward today? Justify it in 2–3 sentences referencing specific signals from my inbox or calendar — not generic productivity advice. If there's a credible second candidate, name it and explain the tradeoff so I can make the call.

⚡ QUICK WINS

List 2–3 things I can knock out in under 5 minutes each that would unblock someone or close a loop. Include the specific action (reply, approve, forward, etc.) and to whom.

A few design decisions worth explaining:

The Weekly Review Prompt

Fridays get a different prompt. The daily briefing is tactical — what do I need to do today. The weekly review is strategic — am I working on the right things?

Prompt Template .github/prompts/weekly-review.prompt.md
--- description: "Friday weekly review — commitments, drift detection, next week prep" agent: "chief-of-staff" --- It's Friday. Prepare my weekly review. Be honest about what drifted and what I should carry forward.

📊 COMMITMENTS SCORECARD

Review emails and calendar from this week. List every commitment I made (explicit or implied) — things I said I'd do, deadlines I accepted, follow-ups I promised. For each: - What I committed to and to whom - Status: delivered, in progress, or missed - If missed: is anyone waiting? What's the recovery action?

🔍 DRIFT DETECTION

Compare how I actually spent my time this week (based on calendar and sent emails) against what I said my priorities were on Monday. - Where did I spend time that wasn't aligned with stated priorities? - What got crowded out that shouldn't have? - Any patterns: am I consistently over-indexing on reactive work?

📋 NEXT WEEK SETUP

Looking at next week's calendar and open threads: - Top 3 priorities I should commit to on Monday - Meetings I should decline or delegate - Prep work I should do this afternoon to hit Monday running - Anyone I owe a follow-up to before the weekend

Running It: VS Code and Copilot CLI

In VS Code, you select chief-of-staff from the agent picker in Copilot Chat, then type /daily-briefing. The agent connects to your MCP servers, pulls your email and calendar data, and produces the formatted briefing.

You can also run this from GitHub Copilot CLI — the background agent runtime that operates directly in your terminal:

Terminal VS Code Integrated Terminal
# Start Copilot CLI in your VS Code terminal copilot # Then select your chief-of-staff agent from the agents dropdown # and type the slash command: /daily-briefing # Or for the Friday review: /weekly-review

Copilot CLI sessions run in the background on your local machine. You can start a session from the Chat view by selecting Copilot CLI from the Session Target dropdown, or type copilot in any VS Code integrated terminal. Custom agents are selected from the agents dropdown — the same .agent.md files, MCP servers, and slash commands you use in the editor work here too.

Because Copilot CLI sessions persist independently, you can kick off your morning briefing in the terminal and continue working in your editor while it processes. The session supports / slash commands for your prompt files and even /compact to manage long conversations.

Tip: Use worktree isolation mode for Copilot CLI sessions that might produce file output — it creates a separate Git worktree so changes don't affect your working directory until you review them.

Adapting for Your Role

The prompt structure above is tuned for a fractional CTO serving multiple clients. But the same architecture works for any role — you just adjust the "My Context" section in the agent file and the triage criteria in the prompt.

For startup founders

Add investor email detection, board meeting prep, and runway-sensitive priority ranking. Replace "stakeholder pressure" with "burn rate impact" in the priority section.

For engineering managers

Add sprint health checks, PR review queue status (via the GitHub MCP server), and on-call rotation awareness. The /daily-briefing prompt can include a "team blockers" section that pulls from GitHub Issues.

For team leads in Alberta businesses

If you're leading a team at a Calgary startup or an Edmonton scale-up, add client SLA tracking and project budget signals. The beauty of this system is that it adapts to your communication patterns — not a generic template.

What I Learned After 60+ Days of Daily Briefings

I've been running this system daily since February 2026, across four fractional CTO engagements with startups and growing businesses in Alberta. Here's what surprised me:

1. The "escalated threads" section caught things I would have missed. Twice, I walked into meetings prepared for a conversation that had shifted overnight because the agent flagged new stakeholders being added to email threads. In one case, a client's CEO had been looped into a technical decision thread at 11 PM — the kind of signal that changes how you frame an entire conversation. That context would have blindsided me.

2. "Could be async" saves 3–4 hours per week. The agent is ruthless about identifying meetings without clear decision outcomes. I now decline or propose async alternatives for about 30% of recurring meetings — and nobody has pushed back.

3. The weekly drift detection is humbling. Seeing a clear comparison between "what I said I'd focus on" and "what I actually spent time on" forces accountability. Most weeks, reactive email consumes 40% more time than I estimate.

4. Quoting the exact ask from emails eliminates ambiguity. The "quote the sentence" constraint was the single biggest improvement to the prompt. Before that, the agent would paraphrase requests and sometimes miss the actual ask. Grounding in direct quotes fixed that.

5. The system compounds over time. After four weeks, I'd iterated the prompt enough that false positives (emails flagged as important that weren't) dropped to near zero. The agent learned my patterns through the context I encoded — not through training, but through better instructions. That's the advantage of the custom instructions architecture: you refine in plain English.

Building AI productivity systems like this is exactly what we do. Whether you're a founder, CTO, or team lead — we help you implement AI tools that compound, not just demo well.

Book a Free Strategy Call

Security Considerations

A few things to be thoughtful about when building this:

If your organization has compliance requirements around AI processing of email content, check with your IT governance team before connecting MCP to production mailboxes. The centralized governance in Work IQ MCP was designed specifically for this — admins maintain control while developers build.

Frequently Asked Questions

What is a chief of staff agent in GitHub Copilot?

A chief of staff agent is a custom AI persona built using GitHub Copilot's .agent.md files. It acts as your executive assistant — triaging your inbox, preparing daily briefings, and surfacing risks from your calendar and email. It connects to external data sources like Outlook and Calendar via MCP servers.

Can GitHub Copilot read my Outlook email and calendar?

Yes, through MCP (Model Context Protocol) servers. Microsoft's Work IQ MCP servers (preview) provide enterprise-grade access to Outlook Mail, Calendar, Teams, SharePoint, and more. You configure these HTTP-based MCP servers in your .vscode/mcp.json file with OAuth authentication. Once connected, Copilot agent mode can read your email, calendar events, and Teams messages. A Microsoft 365 Copilot license is required.

What is the difference between .agent.md and .prompt.md files?

An .agent.md file defines a persistent AI persona with specific tools, model preferences, and handoff capabilities — like a Chief of Staff agent. A .prompt.md file is a reusable task template invoked as a slash command — like /daily-briefing. You use both together: the agent defines who, the prompt defines what.

Does this work in Copilot CLI?

Yes. GitHub Copilot CLI sessions support custom agents (experimental). Start a session by typing copilot in your VS Code terminal, select the chief-of-staff agent from the agents dropdown, and type /daily-briefing. The same .agent.md files, MCP servers, and .prompt.md templates work in CLI sessions.

Get Started in 15 Minutes

Here's the fastest path to a working chief of staff agent:

  1. Create the three files using the templates above. Customize the "My Context" section in the agent file.
  2. Set up Work IQ MCP — register an enterprise application in Microsoft Entra with the Work IQ Mail and Calendar permissions, add your tenant and client IDs as environment variables. (No M365 Copilot license? Build a custom MCP server with Graph API instead.)
  3. Open VS Code, select the chief-of-staff agent from the picker, and type /daily-briefing.
  4. Iterate on the prompt — after a week, you'll know which sections add value and which need tuning for your workflow.

The prompt I shared above took 60+ iterations to get right. But the first version — even a rough one — already saved me 20 minutes per morning. Start messy, refine weekly.

If you build this and want to share what you've learned, come find us in the Code To Cloud Discord — there's a growing group of people building Copilot agents for productivity, infrastructure automation, and AI adoption.

Know someone drowning in email and back-to-back meetings? Send them this article.

Kevin Evans — Fractional CTO and founder of Code To Cloud

Kevin Evans

Fractional CTO & Founder, Code To Cloud Inc.

Kevin Evans is a fractional CTO and technology advisor based in Calgary, Alberta. He helps startups and growing businesses across Western Canada make smart technology decisions. More about Kevin

Want AI That Actually Fits Your Workflow?

Building a chief of staff agent is just the start. We help Alberta businesses implement AI tools that save real time — not just demo well.

50+ advisory engagements across Alberta & Western Canada

Book a Free Strategy Call