foundation-stakeholder-update — Claude Code skill: meeting outcomes
Turns meeting outcomes into an async update for people who missed the room, with the CTA up front and jargon translated for the audience.
npx skills add product-on-purpose/pm-skills --skill foundation-stakeholder-update -a claude-codeWhat foundation-stakeholder-update does
The skill takes a meeting recap or raw notes and produces an update for readers. Primary audience is non-attendees; secondary is attendees who want something to forward or catch up on. It differs from foundation-meeting-recap: the recap says what happened, this one translates outcomes into what-it-means language for a specific role.
Nine steps run the flow: load the recap, scan the same directory for earlier updates on the same project/topics, show an inference summary with the guessed channel and CTA, pick 3-5 outcomes that matter to the audience, surface the CTA, and flag jargon and acronyms with plainer alternatives. Then it builds the channel variant: slack, teams, email, notion or exec-memo. With no channel given, it infers one from the audience: engineering and design go to slack, leadership to email, mixed to notion.
The --go flag skips the inference summary and renders straight away. Technical-to-business translations land in a log for you to verify, so read them — the skill proposes wording rather than settling it. Output filenames follow YYYY-MM-DD_HH-MMtimezone_title_stakeholder-update-{channel}-{audience}.md.
What it helps with
- get meeting outcomes to teams that were not in the room
- send one decision through several channels without rewriting it by hand
- put the ask up front so readers do not miss it
- turn engineering jargon into wording leadership can act on
- tie a new update back to earlier ones on the same topic
Example prompts for the agent
- Write a stakeholder update from the meeting recap, channel slack, audience engineering
- Draft a leadership update from these meeting notes, CTA is approve the budget
- Turn the meeting outcomes into an exec-memo, infer the channel, --go
How to install foundation-stakeholder-update
1Skills CLI (Vercel)
npx skills add product-on-purpose/pm-skills --skill foundation-stakeholder-update -a claude-code2Manually: put the files in place
~/.claude/skills/foundation-stakeholder-update/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/foundation-stakeholder-update/
1Skills CLI (Vercel)
npx skills add product-on-purpose/pm-skills --skill foundation-stakeholder-update -a codex2Manually: put the files in place
.agents/skills/foundation-stakeholder-update/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add product-on-purpose/pm-skills --skill foundation-stakeholder-update -a cursor2Manually: put the files in place
.cursor/skills/foundation-stakeholder-update/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install product-on-purpose/pm-skills foundation-stakeholder-update2Manually: put the files in place
.github/skills/foundation-stakeholder-update/SKILL.md1Skills CLI (Vercel)
npx skills add product-on-purpose/pm-skills --skill foundation-stakeholder-update -a gemini-cli2Platform CLI
gemini skills install https://github.com/product-on-purpose/pm-skills --path skills/foundation-stakeholder-updateManually: put the files in place
.devin/skills/foundation-stakeholder-update/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add product-on-purpose/pm-skills --skill foundation-stakeholder-update -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about foundation-stakeholder-update
How do I install foundation-stakeholder-update in Claude?
Run npx skills add product-on-purpose/pm-skills --skill foundation-stakeholder-update -a claude-code. The skill lands at ~/.claude/skills/foundation-stakeholder-update/SKILL.md.
What does foundation-stakeholder-update do?
It builds an async update from meeting outcomes: picks the results that matter, leads with the CTA, and tailors the text to a channel and audience.
How is it different from foundation-meeting-recap?
The recap summarizes what happened for people who were there. This skill translates outcomes into what-it-means language for readers who were not.
Source text
SKILL.md · Apache-2.0
---
name: foundation-stakeholder-update
description: Produces async communication to stakeholders, primarily non-attendees and secondarily some attendees who want a reference. Translates meeting outcomes into what-it-means language for readers, with channel variants (slack, teams, email, notion, exec-memo) and audience variants (engineering, design, leadership, customer-facing, mixed). Surfaces a primary CTA up front, flags technical-to-business translations for user verification, and detects thread continuation from prior updates.
license: Apache-2.0
metadata:
classification: foundation
version: "1.1.0"
updated: 2026-07-05
category: meeting
frameworks: [meeting-skills-family]
author: product-on-purpose
---
<!-- PM-Skills | https://github.com/product-on-purpose/pm-skills | Apache 2.0 -->
# Stakeholder Update
A stakeholder update is async communication to readers who need to know the outcomes of a meeting. Primary audience is non-attendees; secondary audience is some attendees who want a reference version (came in late, stepped out, need something to forward).
Distinct from `foundation-meeting-recap` in audience, format, and purpose: the recap is a summary of what happened for people who were in the room; the stakeholder-update is a translation of outcomes into what-it-means for readers (tailored to their role, with technical-to-business translation where the audience warrants it).
Distinct from `/discover-stakeholder-summary`: that skill is about understanding stakeholders (input to the user's work). This skill is about communicating to stakeholders (output from the user's work).
This skill belongs to the Meeting Skills Family. It conforms to the [Meeting Skills Family Contract](../../docs/reference/skill-families/meeting-skills-contract.md).
## When to Use
- After a meeting with outcomes affecting teams who were not in the room
- When a decision or commitment needs to propagate to downstream teams async
- When a recap exists and needs to be translated into audience-specific language
- When the user needs something from readers (specific CTA) and cannot afford for it to be buried
## When NOT to Use
- Summarizing what happened for attendees. Use `foundation-meeting-recap`.
- Broadcasting status with no specific audience tailoring. A plain Slack message is sufficient; the skill adds value when translation or CTA framing matters.
- Communicating research findings to stakeholders. Use `/discover-interview-synthesis` plus targeted comms.
- The source is not one meeting's outcomes but a broader artifact (a spec, discovery synthesis, research report, GTM plan, or experiment results) that needs to fan out to several audience-tailored briefings from one canonical master. Use `foundation-stakeholder-briefings`.
## Zero-friction execution
Per the family contract, this skill never blocks on interrogation. Default flow:
1. Load related recap (preferred) or raw meeting notes
2. Detect thread continuation by scanning same directory for prior stakeholder-updates on the same `project`/`topics`
3. Infer channel (if not specified) from audience variant: engineering / design → slack; leadership → email; mixed → notion
4. Present a brief inference summary (detected channel, audience, CTA, thread continuation if any, translation candidates)
5. Accept `go` or corrections
6. Produce the channel-tailored update
If invoked with `--go`, skip the inference summary. The entire output is shareable content (per family contract. no separate summary block needed).
## Instructions
When asked to create a stakeholder update, follow these steps:
1. **Load related recap**
Parse frontmatter to extract meeting context, decisions, actions, outcomes. If no recap provided, accept raw meeting notes with a lower input-quality flag.
2. **Detect thread continuation**
Scan same directory for prior `stakeholder-update` artifacts with matching `project` / `topics`. If found, reference the prior update in the frontmatter `thread_continuation_of` field.
3. **Present go-mode inference summary**
Show inferred channel (if not specified), detected audience, proposed CTA, thread continuation status, translation candidates (flagged jargon or acronyms that may not land).
4. **Distill key outcomes**
From the recap or notes, select 3-5 outcomes that matter to the target audience. Do not include everything from the recap. filter by audience relevance.
5. **Frame the CTA**
If action is needed: lead with it, not bury it
If FYI-only: state explicitly in the TL;DR
6. **Translate technical-to-business**
Flag jargon and acronyms unlikely to land with the audience. Provide plainer alternatives. Keep a translations-applied log for user verification in the output's Generation context.
7. **Build the channel-tailored variant**
- **Slack / Teams**: headline (one action-oriented line, optionally one emoji), TL;DR 3 bullets, context sentence, "what this means for [audience]", CTA (bold with marker if action needed; italic "FYI-only" if not), thread-continuation link, more-links footer
- **Email**: subject line (topic + outcome), greeting ("Hi [audience]"), opening sentence (headline + why they are receiving this), TL;DR, context 2-3 sentences, what was decided / advanced, what this means for your team, what I need from you (with by-when), thread reference, sign-off
- **Notion**: rich H1/H2/H3 structure, longer context block, collapsible sections for detail, table for decisions and actions
- **Exec-memo**: TL;DR first (3-4 lines), supporting detail in 3 sections max, asks section upfront, formal tone, no emoji
8. **Render TEMPLATE.md with the selected variant as primary**
Other variants may be included as collapsible alternates for user flexibility. Remove all guidance blockquotes from the final artifact.
9. **Validate**
- `channel` is in enum
- `audience_variant` is in enum
- `primary_cta` is non-empty (use "FYI-only" if no action needed)
- `related_recap` is a valid filename reference or flagged as raw-notes input
## Quality Checklist
- [ ] Channel variant matches the specified or inferred channel
- [ ] Audience variant's "what this means for you" is specifically tailored (not generic)
- [ ] CTA is surfaced up front, not buried
- [ ] Technical-to-business translations are logged in Generation context for user verification (INTERNAL. outside shareable boundary)
- [ ] Thread continuation referenced if prior updates exist on the same topic
- [ ] `## Shareable update` section present with channel-tailored body (v1.1.0. replaces "entire output is shareable" from v1.0.0)
- [ ] Explicit boundary marker between Shareable update and internal sections (translations, sources)
- [ ] Sources and References section lists the source recap and any prior updates in thread (INTERNAL)
- [ ] Filename uses v1.1.0 variant pattern: `YYYY-MM-DD_HH-MMtimezone_title_stakeholder-update-{channel}-{audience}.md`
## See also
- [Meeting Skills Family Contract](../../docs/reference/skill-families/meeting-skills-contract.md)
- [`foundation-meeting-recap`](../foundation-meeting-recap/SKILL.md). upstream: primary input source
- [`/discover-stakeholder-summary`](../discover-stakeholder-summary/SKILL.md). distinct purpose (understanding stakeholders, not communicating to them)
© product-on-purpose · Apache-2.0 · product-on-purpose/pm-skills