# Stakeholder Intelligence Brief

> Prepare a two-minute stakeholder briefing from recent email and Teams history. Reviews the last 90 days of communications with a specific person and produces a structured snapshot of commitments made, open/unresolved items, and observable communication patterns — based only on visible signals, no inferred intent. Use when user asks: "prep me for my meeting with [person]", "brief me on [person]", "stakeholder context for [person]", "what's my history with [person]", "relationship history with [person]", "get me up to speed on [person] before our meeting", "what have I committed to [person]", "what's open with [person]", "stakeholder briefing", "two-minute brief on [person]". Do NOT use for: scheduling meetings (use schedule-meeting), preparing for a specific meeting's agenda from a transcript (use meeting-intel), or drafting messages to the person (use stakeholder-comms).

- Skill: `chris-mcnulty/stakeholder-intelligence-brief` (Agent Skill)
- Install (CLI): `npx skillmds@latest add chris-mcnulty/stakeholder-intelligence-brief`
- Raw SKILL.md: https://api.skillmd.com/api/skills/chris-mcnulty/stakeholder-intelligence-brief/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: chris-mcnulty (https://skillmd.com/u/chris-mcnulty)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/chris-mcnulty/stakeholder-intelligence-brief

---


# Stakeholder Intelligence Brief

Produce a concise, evidence-based briefing on a single stakeholder using only
the user's own email and Teams history from the last 90 days.

## Workflow

### 1. Resolve the person
- If no name was provided, ask once: "Who would you like the briefing on?"
- Resolve the name via `SearchPeople` / `GetUserDetails`.
- If multiple plausible matches exist (common name, multiple directory hits),
  list the top candidates with job title and email and ask the user to pick.
  Do not guess.

### 2. Gather communications (in parallel)
Run these lookups concurrently — they are independent:

- `SearchM365(sources=["email"], from_user="<resolved email>", after="<today - 90d>")`
- `SearchM365(sources=["email"], query="to:<resolved email>", after="<today - 90d>")` — for messages the user sent to them
- `ListChatMessages(person="<resolved name or email>", since="<today - 90d>", top=50)`
- Optionally `SearchM365(sources=["teams"], from_user="<resolved email>", after="<today - 90d>")` for channel mentions

Paginate with `next_link` if the user has dense history with this person.

### 3. Extract signals
From the retrieved messages, identify:

- **Commitments made**: things the user said they would do ("I'll send…",
  "I'll get back to you on…", "we'll have that by…"). Cite the message
  and date.
- **Open asks / unresolved threads**: questions or asks from the stakeholder
  that have no visible reply, or threads where the user said "I'll follow
  up" without a later resolution.
- **Incomplete follow-ups**: items where the user promised a deliverable
  whose due date has passed with no closing message.

### 4. Observe communication patterns
Report only what is directly visible:

- **Frequency**: rough cadence over the 90-day window (e.g., "weekly", "burst
  in March then silent")
- **Response gaps**: longest stretch without exchange, and any messages from
  the stakeholder still unanswered
- **Urgency / escalation language**: presence (not interpretation) of phrases
  like "urgent", "ASAP", "escalating", "please advise". Quote them; do not
  infer mood.

Do NOT speculate about intent, sentiment, or relationship health beyond the
observable signals.

### 5. Handle thin data
If fewer than ~5 messages exist across the 90-day window, say so explicitly
and summarize only what is present. Do not pad the briefing.

### 6. Produce the briefing
Output as plain markdown (inline, not a file) with these sections:

- **Relationship Snapshot** — 1-2 sentences: role, how they relate to the
  user, rough cadence.
- **Commitments Made** — bulleted list with date and message link `[msg_N]`.
- **Open or Unresolved Items** — bulleted list with date and link.
- **Communication Pattern Signals** — frequency, gaps, escalation language
  (if present).

Use bracketed aliases (`[msg_3]`, `[chat_7]`) so each citation is clickable.

## When NOT to Use

- Drafting a message to the person → use `stakeholder-comms`
- Preparing a specific meeting from a transcript → use `meeting-intel`
- Scheduling or rescheduling time with the person → use `schedule-meeting`
- Performance evaluation of the person → refuse (org policy)

## Guardrails

- Ground every claim in a retrieved message; never fabricate commitments,
  dates, or quotes.
- Quote escalation language verbatim; do not characterize tone.
- If the user is the stakeholder's manager or vice versa, still report only
  observable signals — no performance judgments.
- Output is inline markdown unless the user explicitly asks for a file.
