The Problem

I leave meetings not knowing how I did. Not whether the meeting was productive — that part is obvious. Whether I communicated well. Did I explain the technical decision clearly enough for the PM to follow? Did I hedge when I should have committed to a position? Did I spend three minutes circling a point I could have made in thirty seconds?

You do not get this feedback naturally. Nobody pulls you aside after a standup to say “you used the word ‘basically’ eleven times and your VP had no idea what you meant by ‘decouple the ingestion layer.‘” The feedback that does come is vague: “that went well” or “I think people were confused.” Not useful.

I wanted feedback that was specific, evidence-based, and harsh. Not encouraging, not balanced. The kind of critique that makes you wince because it quotes your own words back at you and explains exactly why they failed.

The Idea

I use Granola to record and transcribe my meetings. Granola has an MCP server, which means Claude Code can pull my meeting notes and transcripts directly. The idea was to build a Claude Code skill that fetches a meeting from Granola, reads through what I actually said, and evaluates my communication across a set of defined dimensions.

The key design decision was evaluating every meeting from two perspectives simultaneously: a confused non-technical stakeholder and a ruthless domain expert. These are the two ways you can fail in a mixed meeting. You can lose the business people by drowning them in jargon. Or you can lose the engineers by hand-waving through technical details you do not actually understand. Most meetings have both audiences, so both lenses apply every time, at full intensity.

The Dimensions

I ended up with twelve dimensions across three categories. Each one has a “brutal question” that anchors the evaluation.

Communication Craft — how you say it, regardless of audience:

  • Word Choice — “Did you use the right word, or the easy word?”
  • Conviction — “Did you sound like someone who knows, or someone who hopes they’re right?”
  • Narrative — “If someone tuned in mid-sentence, could they tell where you were going?”
  • Conciseness — “How many of your words could be deleted without losing meaning?”

Layperson Lens — could a non-technical stakeholder follow this:

  • Jargon Accessibility — “Would your VP of Sales know what you just said?”
  • Analogy Quality — “Did your analogy make them smarter, or just make them nod?”
  • So-What Clarity — “If they forgot everything else, would they still know what matters and why?”
  • Actionability — “Did you end with a clear ask, or just… stop talking?”

Expert Lens — would a domain expert respect this:

  • Technical Accuracy — “Would an expert in the room wince at anything you said?”
  • Depth vs. Hand-Waving — “If someone asked ‘why?’ one more time, would you have an answer?”
  • Rigor of Reasoning — “Could someone poke a hole in your argument in under 10 seconds?”
  • Nuance & Edge-Case Awareness — “Did you show you know where this breaks, or did you pretend it doesn’t?”

Each dimension gets a red, yellow, or green score. Not a 1-5 scale. Red means you failed. Yellow means you got by but a stronger communicator would have done it better. Green means you nailed it. The instruction to the evaluator is to default to yellow and pick the harsher color when in doubt. Green has to be earned.

How It Works

The whole thing is a single markdown file at ~/.claude/skills/meeting-feedback/SKILL.md. No code, no dependencies.

When I run /meeting-feedback, Claude fetches my most recent meeting from Granola via MCP. I can also pass a search term like /meeting-feedback sprint review to target a specific meeting. It pulls both the transcript and the summary, infers the meeting type and my role, and evaluates all twelve dimensions against what I actually said.

The output is a scorecard:

Meeting: Sprint Review
Type: demo
Your Role: presenting
Topic Familiarity: home turf

── Communication Craft ──────────────────────
Expressiveness — Word Choice:    🟡  "Relied on 'basically' as a crutch four times."
                                           📎 "So basically what we did is basically..."
Expressiveness — Conviction:     🔴  "Hedged twice when challenged on timeline."
                                           📎 "I think maybe we could probably..."

Every score comes with a one-liner critique and a direct quote from the transcript as evidence. No vague feedback. Your own words, thrown back at you.

After the scorecard, Claude asks if I want to drill into any dimension. I can ask why something was scored red, get advice on how to fix it, or have it re-read a specific section of the transcript. It stays in harsh critic mode throughout. No softening, no “but you did great overall.”

Each scorecard gets saved to feedback-history/ with YAML frontmatter tracking the date, meeting type, and score counts. Over time this builds a log I can review for patterns. Am I getting fewer reds on Jargon Accessibility? Is my Conviction score consistently yellow? The trend matters more than any single evaluation.

Takeaway

Communication skill is invisible to the person communicating. You cannot evaluate your own clarity in the moment because you already understand what you mean. You need an external perspective that reads your words with fresh eyes and tells you where they failed. Building that perspective into a tool you run after every meeting turns communication from a vague soft skill into something you can measure, track, and deliberately improve.