Skip to content

feat(agents): add meeting analyst agent for transcript analysis using work-iq#502

Open
agreaves-ms wants to merge 1 commit intomainfrom
feat/work-iq-transcript-prd-builder
Open

feat(agents): add meeting analyst agent for transcript analysis using work-iq#502
agreaves-ms wants to merge 1 commit intomainfrom
feat/work-iq-transcript-prd-builder

Conversation

@agreaves-ms
Copy link
Contributor

@agreaves-ms agreaves-ms commented Feb 12, 2026

feat(agents): add meeting analyst agent for transcript analysis

Description

#501

Added a new experimental meeting analyst agent that retrieves meeting transcripts from Microsoft 365 via work-iq-mcp, extracts product requirements and decisions, and produces structured handoff documents for the PRD builder agent. Registered the agent in the custom agents catalog and configured the workiq MCP server.

  • feat(agents): added meeting-analyst.agent.md with a four-phase workflow (Discover, Extract, Synthesize, Handoff) for analyzing meeting transcripts and extracting product requirements, decisions, action items, and open questions
    • Defined session state tracking and resume capability via JSON state files in .copilot-tracking/prd-sessions/
    • Included query budget management (approximately 30 queries per session with user warnings at thresholds)
    • Documented error handling for common work-iq-mcp failure modes
    • Specified structured handoff format for downstream PRD builder consumption
  • docs(agents): registered meeting-analyst in the custom agents catalog with description, workflow summary, and critical usage notes
  • config(mcp): added workiq MCP server entry to .vscode/mcp.json using npx -y @microsoft/workiq mcp

Warning

This PR includes experimental GHCP artifacts that may have breaking changes.

  • .github/agents/meeting-analyst.agent.md

GHCP Artifact Maturity

File Type Maturity Notes
.github/agents/meeting-analyst.agent.md Agent ⚠️ experimental Pre-release only

GHCP Maturity Acknowledgment

  • I acknowledge this PR includes non-stable GHCP artifacts
  • Non-stable artifacts are intentional for this change

Related Issue(s)

Type of Change

Select all that apply:

Code & Documentation:

  • Bug fix (non-breaking change fixing an issue)
  • New feature (non-breaking change adding functionality)
  • Breaking change (fix or feature causing existing functionality to change)
  • Documentation update

Infrastructure & Configuration:

  • GitHub Actions workflow
  • Linting configuration (markdown, PowerShell, etc.)
  • Security configuration
  • DevContainer configuration
  • Dependency update

AI Artifacts:

  • Reviewed contribution with prompt-builder agent and addressed all feedback
  • Copilot instructions (.github/instructions/*.instructions.md)
  • Copilot prompt (.github/prompts/*.prompt.md)
  • Copilot agent (.github/agents/*.agent.md)
  • Copilot skill (.github/skills/*/SKILL.md)

Note for AI Artifact Contributors:

  • Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review .github/agents/ before creating new ones.
  • Skills: Must include both bash and PowerShell scripts. See Skills.
  • Model Versions: Only contributions targeting the latest Anthropic and OpenAI models will be accepted. Older model versions (e.g., GPT-3.5, Claude 3) will be rejected.
  • See Agents Not Accepted and Model Version Requirements.

Other:

  • Script/automation (.ps1, .sh, .py)
  • Other (please describe):

Sample Prompts (for AI Artifact Contributions)

User Request:

meeting-analyst selected

I want to extract product requirements from the customer portal redesign meetings over the past two weeks. Key participants were Alice Chen and Bob Martinez.

Execution Flow:

  1. Agent calls mcp_workiq_accept_eula with https://github.com/microsoft/work-iq-mcp.
  2. Agent asks clarifying questions about topic, date range, and participants (if not provided).
  3. Discover: Queries mcp_workiq_ask_work_iq to find matching meetings. Presents a numbered list of discovered meetings with name, date, and participants. Waits for user confirmation.
  4. Extract: For each confirmed meeting, queries transcripts (one to two queries per meeting) focusing on requirements, decisions, action items, and pain points. Tracks query budget and warns at 20 and 25.
  5. Synthesize: Organizes extracted content into structured categories with requirement IDs (TR-001, TR-002, ...). Flags contradictions and asks user to resolve ambiguities.
  6. Handoff: Creates the transcript analysis markdown file and state JSON. Presents summary and guides user to start a prd-builder session.

Output Artifacts:

  • .copilot-tracking/prd-sessions/customer-portal-redesign-transcript-analysis.md
  • .copilot-tracking/prd-sessions/customer-portal-redesign-transcript.state.json
---
title: "Transcript Analysis: Customer Portal Redesign"
description: "Meeting transcript analysis handoff for PRD creation"
source-agent: meeting-analyst
target-agent: prd-builder
---

## Product/Initiative
Customer Portal Redesign - modernize the self-service portal...

## Problem Statement

### Current Situation
Summary of the current state identified from discussions.

### Key Challenges
Specific problems and pain points raised in meetings.

## Requirements Extracted
| Req ID | Requirement          | Source Meeting          | Date       | Speaker     |
| ------ | -------------------- | ---------------------- | ---------- | ----------- |
| TR-001 | Single sign-on login | Portal Review - Week 1 | 2026-02-03 | Alice Chen  |
| TR-002 | Dashboard widgets    | Portal Review - Week 2 | 2026-02-10 | Bob Martinez |

Success Indicators:

  • The agent announces each phase transition (Discover, Extract, Synthesize, Handoff) during the conversation.
  • A numbered meeting list is presented for confirmation before extraction begins.
  • The query budget count is visible and stays within the approximately 30 query limit.
  • The transcript analysis file contains populated tables for requirements, decisions, action items, and open questions with source meeting attribution.
  • The state JSON file reflects the completed phase and final query count.
  • The agent provides a handoff summary with counts (e.g., "Found 8 requirements, 3 decisions, 5 action items, 2 open questions") and directs the user to prd-builder.

For detailed contribution requirements, see:

Testing

Checklist

Required Checks

  • Documentation is updated (if applicable)
  • Files follow existing naming conventions
  • Changes are backwards compatible (if applicable)
  • Tests added for new functionality (if applicable)

AI Artifact Contributions

  • Used /prompt-analyze to review contribution
  • Addressed all feedback from prompt-builder review
  • Verified contribution follows common standards and type-specific requirements

Required Automated Checks

The following validation commands must pass before merging:

  • Markdown linting: npm run lint:md
  • Spell checking: npm run spell-check
  • Frontmatter validation: npm run lint:frontmatter
  • Link validation: npm run lint:md-links
  • PowerShell analysis: npm run lint:ps

Security Considerations

  • This PR does not contain any sensitive or NDA information
  • Any new dependencies have been reviewed for security issues
  • Security-related scripts follow the principle of least privilege

Additional Notes

The meeting-analyst agent is marked as experimental (maturity: experimental in frontmatter). It requires the work-iq-mcp EULA acceptance before querying and has a query budget of approximately 30 per session. The agent hands off to the prd-builder agent for PRD creation or update.

🔍 - Generated by Copilot

- implement workflow for extracting product requirements from meeting transcripts
- define handoff structure for PRD creation
- document usage and error handling for the new agent

🔍 - Generated by Copilot
@agreaves-ms agreaves-ms requested a review from a team as a code owner February 12, 2026 21:31
Copilot AI review requested due to automatic review settings February 12, 2026 21:31
@github-actions
Copy link

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@codecov-commenter
Copy link

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.40%. Comparing base (8031557) to head (f235ce1).

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #502      +/-   ##
==========================================
- Coverage   83.43%   83.40%   -0.03%     
==========================================
  Files          20       20              
  Lines        3507     3507              
==========================================
- Hits         2926     2925       -1     
- Misses        581      582       +1     
Flag Coverage Δ
pester 83.40% <ø> (-0.03%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 1 file with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new experimental meeting-analyst custom agent to analyze Microsoft 365 meeting transcripts via work-iq MCP tooling and generate structured handoff artifacts for prd-builder.

Changes:

  • Added a new .github/agents/meeting-analyst.agent.md agent with a 4-phase workflow (Discover, Extract, Synthesize, Handoff) and session-state guidance.
  • Registered meeting-analyst in the custom agents catalog documentation.
  • Added a workiq MCP server entry in .vscode/mcp.json to enable the required MCP tools.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
.vscode/mcp.json Adds workiq MCP server configuration to support transcript retrieval.
.github/agents/meeting-analyst.agent.md New agent definition and workflow for transcript analysis + PRD handoff.
.github/CUSTOM-AGENTS.md Documents and registers the new agent in the agent catalog.

"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"workiq": {
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new workiq MCP server entry is missing a type field. In this repo’s MCP config templates, servers launched via command/args must specify "type": "stdio" (e.g., docs/getting-started/mcp-configuration.md), otherwise VS Code may treat the server config as invalid and fail to start it.

Suggested change
"workiq": {
"workiq": {
"type": "stdio",

Copilot uses AI. Check for mistakes.
send: false
---

# Meeting Analyst Instructions
Copy link

Copilot AI Feb 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The top-level heading uses # Meeting Analyst Instructions, but other agent files consistently use the agent name as the H1 (for example, # Prompt Builder, # Memory Agent, # GitHub Backlog Manager). Consider renaming the H1 to just Meeting Analyst for consistency and easier scanning in rendered views.

Suggested change
# Meeting Analyst Instructions
# Meeting Analyst

Copilot uses AI. Check for mistakes.
Copy link
Member

@WilliamBerryiii WilliamBerryiii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving as experimental - but I do think that we should ultimately move this to a Copilot Studio prompt/instruction set .. since ideally this kinda stuff should be processed as soon as a meeting recording and transcript are available.


Each session allows approximately 30 queries before throttling. Conserve queries by batching related questions, asking targeted questions rather than broad requests, and tracking the running count. Warn the user when the count reaches 20 and again at 25.

When the budget is exhausted, stop making queries. Present the user with a summary of what has been collected so far and what remains unprocessed. Offer to synthesize available findings or to continue in a new session.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this include things like timecode markers for tracking progress through the meeting and how far processing has gotten?


### Effective Query Patterns

Focused queries yield better results than open-ended ones:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably too hard to figure out ... but is there some amount of anlyzing who the stakeholders are so that potentially authoritative statements from non-core stakeholders can be filtered or couched in terms of who said them?


Update the state file after each phase transition and at natural breakpoints during extraction.

### Session Continuity
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again is there timecode element here?

Copy link
Contributor

@katriendg katriendg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Super nice work. I do believe this is the first agent and MCP addition that impacts our security posture for the solution, and we should take a moment to reflect if we are taking the required warnings and RAI notes.

This new agent is very useful to non-technical users, the more reason for ensuring we have some warnings or at least documented potential risks, especially with accidentally committing content to git repos.

  1. the agent should understand its sensitivity
  2. enhance the threat-model doc
  3. document warnings

I've added a few comments around these hopefully they are easy to add for you.

## Core Mission

Meeting discussions contain valuable product requirements, decisions, and action items that often remain unstructured. The workflow guides users from meeting discovery through transcript analysis, organizing findings into a structured handoff that the *prd-builder* agent consumes directly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I love this addition and looking forward to trying this out, it's going to add a valuable toolchain simplification from manually copying stuff or getting copilot to download transcripts for us.

My main note however is we should make sure to add a few notices around data sensitivity and RAI. I have a few suggestions across, so sharing a few.

Suggested change
## Data Sensitivity
Meeting transcripts frequently contain sensitive material that participants may not intend for broad distribution. The agent follows these data handling requirements:
* Display a data sensitivity notice at the start of every session (see below).
* Never include raw transcript excerpts containing names, email addresses, or customer-identifying details in analysis files. Summarize and anonymize.
* Strip verbatim customer quotes unless the user explicitly confirms inclusion.
* Remind the user to delete `.copilot-tracking/prd-sessions/` files after the PRD handoff is complete.
* Do not reference analysis file paths in commit messages, PR descriptions, or any content that enters version control.
### Session Start Notice
Display this notice verbatim at the beginning of every session, before any queries:
> **Data Sensitivity Notice**: This workflow retrieves meeting transcripts from your Microsoft 365 account. Transcripts may contain customer confidential information, PII, or proprietary data. Analysis files are saved to `.copilot-tracking/` (gitignored) but exist unencrypted on disk. Verify that your usage complies with your organization's data handling policies. Delete analysis files after completing the PRD handoff.
### Data Retention
Analysis files and state files in `.copilot-tracking/prd-sessions/` are working artifacts, not permanent records. After the PRD handoff completes successfully, remind the user to delete them. If the user confirms, delete the files.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is great, I'll incorprate it


## Handoff Format

The transcript analysis file follows this structure:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add either frontmatter (if relevant) or a note data-classification: confidential so these files get tagged accordingly?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can't add non-compliant frontmatter to any of the Copilot prompt files since Copilot CLI crashes out on it...

## Process Overview

The transcript analysis workflow progresses through these stages:

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Think about adding this?

Pre-flight data classification prompt — Add a step in Phase 1 (Discover) where the agent asks the user to confirm the data classification level of the meetings they intend to analyze (e.g., Public, Internal, Confidential, Highly Confidential) and refuses to proceed for Highly Confidential without explicit acknowledgment.

"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"workiq": {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on this addition, could we add a RAI data privacy note about transcripts.
In this document: docs/security/threat-model.md

Here is a suggestion by copilot, which seems relevant:

#### RAI-3a: Privacy - M365 Transcript Data Materialization

| Field             | Value                                                                                                     |
|-------------------|-----------------------------------------------------------------------------------------------------------|
| **Category**      | Privacy & Security (Microsoft RAI Standard)                                                               |
| **Asset**         | Meeting transcripts, customer confidential data, PII                                                      |
| **Threat**        | The meeting-analyst agent retrieves M365 transcripts containing sensitive data and writes them to local files in `.copilot-tracking/`. Data may be exposed through accidental commits (`git add -f`), gitignore misconfiguration, shared Codespaces, CI/CD logs, or unencrypted disk access. |
| **Likelihood**    | Medium (users may not recognize transcript sensitivity; gitignore is the only barrier)                    |
| **Impact**        | High (customer confidential data, PII, trade secrets)                                                     |
| **Mitigations**   | Gitignore for `.copilot-tracking/`, agent-level data sensitivity notice, anonymization guidance in agent instructions, post-session cleanup reminders, documentation in threat model and agent catalog |
| **Residual Risk** | Medium (gitignore is not a security control; user awareness is behavioral)                                |
| **Status**        | Partially Mitigated with Documentation                                                                    |

**Workflow:** Discover → Extract → Synthesize → Handoff

**Critical:** Experimental. Requires `mcp_workiq_accept_eula` call before querying. Uses `mcp_workiq_ask_work_iq` for Microsoft 365 meeting data. Query budget of approximately 30 per session. Hands off to **prd-builder** for PRD creation.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a warning note about PII and confidential data, files written to disk but gitnored, user is responsible for deleting the files, files are not encrypted (if the customer followed our guidance, they may not have done the .gitnore!). If not, then we are guarding ourselves based on documentation.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a good idea


Present discovered meetings for user confirmation before extracting transcripts. Respect the query budget: display the running count when it reaches notable thresholds and collaborate with the user on prioritization if the budget is tight.

Format file references as markdown links using workspace-relative paths. When referencing the analysis file, link to it directly so the user can open it from the conversation.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In future we could evaluate adding a skill that has to be called by the agent to delete the potentially confidential files on disk (and add a requires dependency from the agent to the skill within our collection setup).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're getting a hooks: frontmatter primitive in custom agents very soon for GHCP, cleanup would go there when we get it. I'll make an issue to add this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants