| name | meeting-notes |
| description | Use when turning raw meeting notes, a transcript, or an ASR/recording dump into a structured record — separating discussion / decisions / action items, extracting owned action items with verbatim grounding, mapping related docs and tickets, and recommending a next step per action item. Triggers include 회의록 정리, 회의 정리해줘, 이 회의록에서 액션아이템 뽑아줘, 미팅 노트 정리, 회의 녹취록 정리, transcript to action items, meeting notes to action items, summarize this meeting, standup/retro/decision meeting notes. |
Meeting-Notes — Raw Meeting to Structured Record Pipeline
A synthesis pipeline that turns a raw meeting transcript (ASR dump, notes, recording) into ONE structured markdown report: a type-aware summary that separates discussion / decisions / action items, action items extracted under a validity gate and grounded in verbatim quotes, related artifacts discovered live and mapped to specific items, and a per-action next-step recommendation. It PROPOSES; it never executes an action item.
Foundational Principle
A meeting record is a record of what was DECIDED and what will be DONE — not a transcript of what was said. Every stage separates 논의 (discussion — context that was exchanged) / 결정 (decision — what the conversation settled) / 액션아이템 (action item — a concrete task derived from a decision). When the transcript does not support a claim, the record says so with an explicit marker ([미배정], [기한 미정], confidence: low) rather than inventing it.
Violating the letter of the anti-fabrication rules is violating the spirit. A fabricated owner, an ungrounded action item, or a hedged commitment promoted to firm is a pipeline FAILURE, not a helpful extra — see Inline Gates.
Pipeline Overview
The pipeline runs in seven sequential stages:
detect type
→ summarize (type-routed) (READ references/type-schemas.md at this stage)
→ extract action items (2-gate + owner/due recovery — READ references/extract-actionitems.md)
→ validate (3 layers) (grounding / completeness / abstention — inline gate, detail in the same reference)
→ discover + map (live artifacts mapped to specific items — READ references/gather-crosslink.md)
→ recommend next step (per action item, from the LIVE available-skills list)
→ render (write ONE markdown file to $OMT_DIR/meeting-notes/{slug}.md)
Each stage is described below. The 3-layer validation (Stage 4) is a hard inline gate — a trust boundary against hallucination that is never simplified away. See Inline Gates.
Single-meeting scope: one meeting per run. Cross-meeting action-item merge/dedup is out of scope (an unsolved problem — do not attempt owner+task similarity merging across meetings).
Tool-agnostic principle (stated once): the judgment body names abstract source TYPES (collaboration-docs, PM, messenger) and abstract write-steps only. Concrete MCP/tool identifiers (mcp__notion__…, mcp__linear__…, mcp__slack__…) are never named in this skill — each abstract type is bound to whatever MCP is wired at runtime (Stage 5), and the report file is written at Stage 7.
Stage 1: Detect Meeting Type
Detect the meeting type from content, keyed to the meeting's native output (the deliverable this meeting exists to produce). The six types and what each yields:
| Type | Native output | Keep | Discard by default |
|---|
| 스탠드업 (standup) | status + blockers | blockers, today's commitments | status narration, chatter |
| 의사결정·기획 (decision / planning) | the confirmed decision | decision + rationale + rejected alternatives | the debate transcript |
| 회고 (retrospective) | 1–3 owned action items | action items | the feedback grid (after synthesis) |
| 1:1 | (rarely shared) | private follow-ups | shareability itself |
| 브레인스토밍 (brainstorming) | the full idea inventory | every idea | filtering (convergence is separate) |
| 인터뷰·리서치 (interview / research) | verbatim quotes | source quotes, observations | paraphrased summary |
Detection is by native output, not keyword. Ask: what single deliverable is this meeting producing? Route the summary schema accordingly (Stage 2).
Confidence gate: when the content is mixed or the native output is ambiguous (e.g. a planning meeting that drifts into brainstorming), do NOT silently pick. Ask the user ONE confirmation question naming the two most likely types, then proceed with the confirmed type. A clear single type needs no confirmation.
Fits none of the six? A meeting whose native output matches none of the six (e.g. an all-hands announcement, a kickoff) routes to the general fallback schema (references/type-schemas.md §3.7) with a general type slug — this is not the ambiguous-between-two case, so no confirmation is needed.
Stage 2: Summarize (Type-Routed)
Read references/type-schemas.md now (using the Read tool with path references/type-schemas.md). It contains the common report skeleton (dual layout: topic chapters + flat lists), the per-type schema overrides for the core three (decision/planning with DACI, retro, standup), the brainstorming reversal (Gate 2 OFF), and the general fallback schema. Follow it in full.
Apply the routed schema to produce the summary sections. Enforce the 3-way split: 논의 / 결정 / 액션아이템 never conflate. A decision-meeting summary preserves rejected/deferred alternatives with their reasons (the most-often-dropped, most-valuable field). A brainstorming summary preserves every idea and clusters them — it does NOT force action items.
Stage 3: Extract Action Items
Read references/extract-actionitems.md now (using the Read tool with path references/extract-actionitems.md). It contains the 2-gate extraction procedure (Gate 1 recall signals → Gate 2 validity filter), the context-near-utterance owner/due recovery rule, and the 3-layer validation detail used by Stage 4. Follow it in full.
Extraction runs Gate 1 (catch every commitment signal — recall first) then Gate 2 (keep only real action items — the 3-part test, verb-form filter, independent-completion, uptake/agreement gate, hedge filter). Recover a missing owner or due date ONLY from adjacent turns and diarized speaker labels (context-near-utterance) — never from an external system.
Stage 4: Validate (3 Layers) — Trust Boundary
The three validation layers are a hard gate. They are detailed in references/extract-actionitems.md (already loaded in Stage 3) and enforced here and in Inline Gates:
- Grounding — every action item cites a verbatim transcript quote (
근거: "..."). An item that cannot cite one is DROPPED, not emitted.
- Completeness — the three fields (owner / task / due) are present or explicitly marked
[미배정] / [기한 미정]. No blank field is left silent, and no field is fabricated.
- Abstention — a hedged, implicit, or unclear-owner item is marked
confidence: low and routed to human review, not promoted to a firm action item.
This layer is never skipped and never softened. It is the difference between a record and a hallucination.
Stage 5: Discover + Map
Read references/gather-crosslink.md now (using the Read tool with path references/gather-crosslink.md). It contains the gather bound, the gather-then-judge ordering, source-unreachable graceful-skip, the forbidden curation anti-patterns, and the ## 관련 자료 reference format. Follow it in full.
Two adaptations for the meeting domain (stated in that file): the search seed is the meeting's decisions, action items, and topics (not a single issue's requirement); the link target is each individual action item / decision (each mapped artifact attaches to a specific item, not to one issue).
Discovery is bounded and curated. Zero related artifacts is a valid outcome. An unwired source is skipped with a one-line note. Never emit a numeric relevance-score table or ranking.
Stage 6: Recommend Next Step
For each extracted action item, recommend how to make progress on it, drawn from the live available-skills list in this session — the skills and agents actually offered to you right now, not a hardcoded catalog.
- Scan the live list, match the action item to a skill/agent by its stated trigger, and emit a prose bullet: a one-line plan + a literal
Skill(skill: "...") (or agent) hint + a one-line rationale for the match.
- No fit? Say so honestly: label the item a manual / external action (e.g. "manual: read the vendor doc", "external: waiting on another team"). Never invent a skill name to fill the slot.
- Decision follow-ups are optional: a decision may get a light record/notify follow-up bullet, but a decision is never force-fit with an execution tool. If nothing natural fits a decision, leave it with no recommendation.
This mirrors the live-list, no-hardcoded-catalog idiom used by goal and deep-interview Phase 5.
Stage 7: Render
Assemble the summary (Stage 2), validated action items (Stages 3–4), the mapping (Stage 5), and the recommendations (Stage 6) into ONE markdown report, and write it to a file.
Path: $OMT_DIR/meeting-notes/{date}-{type}-{topic}.md
- slug =
{date}-{type}-{topic} in kebab-case. date = YYYYMMDD; type = the detected type in a short English slug (decision, retro, standup, brainstorming, interview, 1on1, or general for a meeting that took the §3.7 general fallback); topic = a 2–4 word kebab summary of the subject (e.g. 20260708-decision-payment-installment).
- Collision: if the target path already exists, append
-2 (-3, …) to the slug.
- Missing meeting metadata: parse date/topic from the transcript; if absent, do NOT fabricate. Mark the report body
[날짜 미상] / [미상]. For the slug's date specifically, ask the user ONCE for the meeting date; if they cannot supply it, use nodate in the slug and [날짜 미상] in the body. Likewise, if no subject can be derived, use notopic in the slug and [미상] in the body — never fabricate a topic to fill the slug.
The report body is Korean-first (the team's working language); this skill's own instructions stay English. Output markdown only — no HTML render.
Proposal-only: the report ends here. Creating issues, pushing to a docs tool, or notifying anyone is a separate, user-approved step this skill never performs.
Inline Gates
These gates apply before Stage 7 renders. Failing any gate blocks the render of the offending item — fix or drop it, then continue.
Anti-Fabrication Gate (the trust boundary)
The 3-layer validation (Stage 4) exists because a capable agent, told to "summarize this meeting and extract action items", will over-reach to be helpful: it fills owners it doesn't know, promotes tentative talk to firm tasks, and presents outside research as meeting facts. Each of those is a fabrication.
Owner and due recovery is bounded to the transcript. Recover a missing owner/due from adjacent turns + diarized speaker labels ONLY. If the transcript does not name who owns an item, it is [미배정] — full stop.
Rationalization table — every excuse below means "mark the honest marker, do not fabricate":
| Rationalization | Reality |
|---|
| "The transcript doesn't say who, but the Linear ticket for this is assigned to X, so the owner is X" | The mapping stage (Stage 5) finds related artifacts; it does NOT assign owners. Owner identity comes from the transcript only. Unknown → [미배정]. |
| "The diarization label is generic ('Developer'), but I can guess the real name from Slack" | A generic speaker label is the owner as-recorded. Do not resolve it to a real identity via external correlation. Keep the label or mark [미배정]; note the ambiguity. |
| "This commitment is hedged ('아마 …해야 할 것 같아요'), but it's clearly the intent, so I'll list it as a firm action" | Hedged = not yet committed. Mark confidence: low → human review. Promoting it is the exact failure this gate blocks. |
| "I found the answer to the meeting's open question in an external doc — I'll present it as a resolved decision" | The record captures what THIS meeting decided. An external finding may appear in ## 관련 자료 as a mapped artifact, never as a decision the meeting did not make. |
| "No verbatim quote fits this item, but it's obviously implied" | No verbatim quote → drop the item. "Obviously implied" is the hallucination boundary. |
| "A due date wasn't stated, but 'internal' urgency suggests end of week" | Unstated due → [기한 미정]. Inferred urgency is not a due date. |
Red Flags — STOP, you are fabricating
- You are writing an owner name that never appears in the transcript.
- You are resolving a generic speaker label ("Developer") to a real person via Linear/Slack/calendar.
- You are listing a hedged or tentative commitment as a firm action item without
confidence: low.
- An action item has no
근거: "..." verbatim quote.
- The mapping stage's external findings are appearing as decisions or action items the meeting did not produce.
All of these mean: mark the honest marker ([미배정] / [기한 미정] / confidence: low) or drop the item. The transcript is the sole source of what the meeting decided and who owns what.
Type-Fit Gate
- A brainstorming transcript with Gate 2 forced ON (idea inventory squeezed into action items) is a FAILURE — brainstorming keeps every idea and forces no action items.
- A decision meeting rendered without its rejected/deferred alternatives is a FAILURE — that field is the most valuable and the most often dropped.
Reference Files
references/type-schemas.md: the six meeting types and native-output detection, the common report skeleton (dual layout), the per-type schema overrides for the core three (decision/planning DACI, retro, standup), the brainstorming Gate-2-OFF reversal, the interview/1:1 notes, and the general fallback schema. Read at Stage 2.
references/extract-actionitems.md: the 2-gate extraction procedure (Gate 1 recall signals, Gate 2 validity filter), the context-near-utterance owner/due recovery rule, the action-item render contract, and the 3-layer validation detail. Read at Stage 3 and enforced at Stage 4.
references/gather-crosslink.md: the gather bound (per-source cap, recency window, logs strict bound), gather-then-judge ordering, source-unreachable graceful-skip, curation rules with forbidden anti-patterns (no relevance-score table / numeric ranking / typed dependency graph), and the ## 관련 자료 reference format with per-entry justification — adapted for the meeting domain (seed = decisions/actions/topics; target = each action item/decision). Read at Stage 5.