Agent Skills: summarize-meeting Skill

|

UncategorizedID: semicolon-devteam/semo/summarize-meeting

Install this agent skill to your local

pnpm dlx add-skill https://github.com/semicolon-devteam/semo/tree/HEAD/semo-system/semo-skills/summarize-meeting

Skill Files

Browse the full folder contents for summarize-meeting.

Download Skill

Loading file tree…

semo-system/semo-skills/summarize-meeting/SKILL.md

Skill Metadata

Name
summarize-meeting
Description
|

시스템 메시지: 이 Skill이 호출되면 [SEMO] Skill: summarize-meeting 호출 - {회의명} 시스템 메시지를 첫 줄에 출력하세요.

summarize-meeting Skill

회의 녹취록 → Supabase discussions 테이블 (회의록/의사결정 로그) 자동 생성

🔴 데이터 소스 변경 (v2.0.0)

| 버전 | 데이터 소스 | 방식 | |------|------------|------| | v1.x | GitHub Discussions | GraphQL API | | v2.0 | Supabase | discussions 테이블 INSERT |


Purpose

회의 녹취록 텍스트를 분석하여 구조화된 회의록과 의사결정 로그를 Supabase discussions 테이블에 저장합니다.

🔴 NON-NEGOTIABLE RULES

출력 위치

| 유형 | discussions.category | 설명 | |------|----------------------|------| | 회의록 | meeting-minutes | 회의 전체 내용 정리 | | 의사결정 로그 | decision-log | 결정사항 별도 문서화 |

로컬 파일 생성 금지 - 반드시 Supabase discussions 테이블에 저장

필수 생성물 (Dual Output)

모든 회의에 대해 반드시 회의록과 의사결정 로그를 모두 생성해야 합니다.

| 생성물 | 필수 여부 | 설명 | |--------|----------|------| | 회의록 | 필수 | 회의 전체 내용 정리 | | 의사결정 로그 | 필수 | 결정사항 별도 문서화 (결정이 없어도 "결정사항 없음" 명시) |

Execution Flow

1. 녹취록 파일 읽기 또는 텍스트 입력 받기
   ↓
2. 회의 내용 분석
   - 참석자 식별
   - 안건별 논의 내용 정리
   - 의사결정 사항 추출
   - Action Items 추출
   ↓
3. Supabase discussions 테이블에 INSERT
   - category: 'meeting-minutes' → 회의록
   - category: 'decision-log' → 주요 의사결정
   ↓
4. Slack 알림 전송 (#개발사업팀)

Supabase 저장

회의록 저장

-- 회의록 생성
INSERT INTO discussions (office_id, category, title, body, created_by)
VALUES (
  '{office_uuid}',
  'meeting-minutes',
  '[{날짜}] 정기 회고 & 회의',
  E'# 정기 회의록\n\n> **일시**: {날짜} {시간}\n> **참석자**: {참석자}\n\n---\n\n## 📋 안건\n\n### 1. {안건1}\n\n**논의 내용**:\n- ...\n\n---\n\n## ✅ Action Items\n\n| 담당자 | 할 일 | 기한 |\n|--------|-------|------|\n| @담당자 | 할 일 | 기한 |',
  '{creator_uuid}'
)
RETURNING id, title;
// Supabase 클라이언트
const { data: meetingMinutes, error } = await supabase
  .from('discussions')
  .insert({
    office_id: officeId,
    category: 'meeting-minutes',
    title: `[${date}] 정기 회고 & 회의`,
    body: meetingBody,
    created_by: creatorId
  })
  .select()
  .single();

의사결정 로그 저장

-- 의사결정 로그 생성
INSERT INTO discussions (office_id, category, title, body, created_by)
VALUES (
  '{office_uuid}',
  'decision-log',
  '[{날짜}] {의사결정 제목}',
  E'# {의사결정 제목}\n\n> **결정일**: {날짜}\n> **결정자**: {참여자}\n\n---\n\n## 📋 배경\n\n{배경}\n\n## 🎯 결정 사항\n\n{결정 내용}',
  '{creator_uuid}'
)
RETURNING id, title;
// Supabase 클라이언트
const { data: decisionLog, error } = await supabase
  .from('discussions')
  .insert({
    office_id: officeId,
    category: 'decision-log',
    title: `[${date}] ${decisionTitle}`,
    body: decisionBody,
    created_by: creatorId
  })
  .select()
  .single();

템플릿

회의록 템플릿

# {회의명} 회의록

> **일시**: {날짜} {시간}
> **참석자**: {참석자 목록}
> **장소/방식**: {장소 또는 온라인}

---

## 📋 안건

### 1. {안건1 제목}

**논의 내용**:
- {논의 사항 1}
- {논의 사항 2}

**결론**: {결론 또는 다음 단계}

---

## ✅ Action Items

| 담당자 | 할 일 | 기한 |
|--------|-------|------|
| @{담당자1} | {할 일 내용} | {기한} |

---

## 🔗 관련 의사결정

- {의사결정 제목}

의사결정 로그 템플릿

# {의사결정 제목}

> **결정일**: {날짜}
> **결정자**: {결정 참여자}

---

## 📋 배경

{의사결정이 필요했던 배경 설명}

## 🎯 결정 사항

{최종 결정 내용}

## 📊 검토된 대안

| 대안 | 장점 | 단점 | 선택 |
|------|------|------|------|
| {대안1} | {장점} | {단점} | ❌ |
| {대안2} | {장점} | {단점} | ✅ |

Slack 알림

대상 채널

| 채널 | 용도 | |------|------| | #개발사업팀 | 회의록/의사결정 알림 |

알림 형식

📝 회의록 생성 완료

**회의**: {회의명}
**일시**: {날짜}

**생성된 문서**:
- 회의록: #{meeting_id}
- 의사결정: #{decision_id} (있는 경우)

**Action Items**: {N}개

Output

[SEMO] Skill: summarize-meeting 완료

✅ 회의록 생성 완료

**회의**: {회의명}
**Supabase discussions**:
- 회의록: #{meeting_id} (category: meeting-minutes)
- 의사결정: #{decision_id} (category: decision-log)

**Slack 알림**: #개발사업팀 전송 완료

GitHub Discussion Fallback

Supabase 연결이 불가능한 경우 GitHub Discussion으로 폴백:

# Fallback: GitHub Discussion API
gh api graphql -f query='
mutation($repoId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
  createDiscussion(input: {
    repositoryId: $repoId
    categoryId: $categoryId
    title: $title
    body: $body
  }) {
    discussion {
      number
      url
    }
  }
}' \
  -f repoId="R_kgDOOdzh9w" \
  -f categoryId="DIC_kwDOOdzh984Cw9Lp" \
  -f title="[회의록] {날짜} - {회의명}" \
  -f body="$MEETING_BODY"

References

Related

  • notify-slack - Slack 알림 전송
  • create-meeting-minutes - 정기 회의록 생성
  • create-decision-log - 의사결정 로그 생성