Skip to content

Latest commit

ย 

History

History
216 lines (181 loc) ยท 9.36 KB

File metadata and controls

216 lines (181 loc) ยท 9.36 KB

ghostmeet โ€” AI Meeting Delegate

1. ๋ชฉํ‘œ

๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™”์ƒํšŒ์˜(Zoom, Google Meet, Teams ๋“ฑ)์— ์ฐธ์„ ์ค‘์ผ ๋•Œ, Chrome Extension์ด ํšŒ์˜ ์˜ค๋””์˜ค๋ฅผ ์บก์ฒ˜ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์ „์‚ฌ + AI ์š”์•ฝ + ๋Œ€๋ฆฌ ์‘๋‹ต์„ ์ œ๊ณตํ•˜๋Š” ์…€ํ”„ํ˜ธ์ŠคํŒ… ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ.

ํ•ต์‹ฌ ๊ฐ€์น˜

  • ์„ค์น˜ 1๊ฐœ โ€” Chrome Extension
  • ์™ธ๋ถ€ SaaS ์˜์กด 0 โ€” Recall.ai ๋“ฑ ํ•„์š” ์—†์Œ
  • ํ”Œ๋žซํผ ๋ฌด๊ด€ โ€” Zoom, Meet, Teams, ๋ธŒ๋ผ์šฐ์ €๋ฉด ๋‹ค ๋จ
  • API ํ‚ค ์ตœ์†Œํ™” โ€” Anthropic 1๊ฐœ (STT๋Š” ๋กœ์ปฌ Whisper)

ํ•œ ์ค„ ์„ค๋ช…

"Any meeting, any platform. Just open your browser."


2. ๊ธฐ๋Šฅ ๋ชจ๋“œ

Ghost Mode (MVP, v0.1)

  • ์œ ์ €๊ฐ€ ์ง์ ‘ ํšŒ์˜ ์ฐธ์„ (ํ‰์†Œ์ฒ˜๋Ÿผ)
  • Extension์ด ํƒญ ์˜ค๋””์˜ค ์บก์ฒ˜
  • ์‹ค์‹œ๊ฐ„ ์ „์‚ฌ (๋กœ์ปฌ Whisper)
  • ํšŒ์˜ ์ค‘ ์‹ค์‹œ๊ฐ„ ์ž๋ง‰ ํ‘œ์‹œ (Extension popup ๋˜๋Š” side panel)
  • ํšŒ์˜ ์ข…๋ฃŒ ์‹œ ์š”์•ฝ + ์•ก์…˜ ์•„์ดํ…œ ์ƒ์„ฑ (Claude API)
  • ์œ ์ €๊ฐ€ "๋Œ€์‹  ๋งํ•˜๊ธฐ" ์—†์Œ โ€” ๋“ฃ๊ธฐ + ์š”์•ฝ๋งŒ

Agent Mode (v0.2, ์ดํ›„)

  • Ghost Mode ๊ธฐ๋Šฅ ์ „๋ถ€ ํฌํ•จ
  • AI๊ฐ€ ์‘๋‹ต ํ…์ŠคํŠธ ์ƒ์„ฑ โ†’ TTS โ†’ ๊ฐ€์ƒ ์˜ค๋””์˜ค ์žฅ์น˜๋กœ ํšŒ์˜์— ์ฃผ์ž…
  • ์‚ฌ์ „ ๋ธŒ๋ฆฌํ•‘ (์ฃผ์ œ, ์ž๋ฃŒ, ๋‚ด ์ž…์žฅ) ๊ธฐ๋ฐ˜ ๋งฅ๋ฝ ํƒ‘์žฌ
  • ๋ฐœ์–ธ ๊ฐ€๋“œ๋ ˆ์ผ ("๊ฒฐ์ •์€ ๋ณด๋ฅ˜", "ํ™•์ธ ํ›„ ๋‹ต๋ณ€" ๋“ฑ ์ •์ฑ…)
  • OS ์˜ค๋””์˜ค ๋ผ์šฐํŒ… ํ•„์š” (BlackHole ๋“ฑ)

3. ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         Chrome Extension            โ”‚
โ”‚                                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ tabCaptureโ”‚   โ”‚  Side Panel /  โ”‚  โ”‚
โ”‚  โ”‚ Audio API โ”‚   โ”‚  Popup UI     โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ฒโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚        โ”‚ audio chunks     โ”‚ transcriptโ”‚
โ”‚        โ–ผ                  โ”‚          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”‚
โ”‚  โ”‚   WebSocket Client      โ”‚        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
             โ”‚ ws://localhost:8877
             โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         Local Backend (Python)      โ”‚
โ”‚                                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ WebSocket โ”‚   โ”‚  Web Dashboard โ”‚  โ”‚
โ”‚  โ”‚ Server    โ”‚   โ”‚  (FastAPI)     โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚        โ”‚ audio                       โ”‚
โ”‚        โ–ผ                             โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                        โ”‚
โ”‚  โ”‚ Whisper   โ”‚  (๋กœ์ปฌ STT)           โ”‚
โ”‚  โ”‚ (local)   โ”‚                       โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜                        โ”‚
โ”‚        โ”‚ text                         โ”‚
โ”‚        โ–ผ                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚ Transcriptโ”‚โ”€โ”€โ–ถโ”‚  Claude API    โ”‚   โ”‚
โ”‚  โ”‚ Buffer    โ”‚   โ”‚  (์š”์•ฝ/์‘๋‹ต)    โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚
โ”‚  โ”‚  Meeting Context Store       โ”‚    โ”‚
โ”‚  โ”‚  (์‚ฌ์ „ ๋ธŒ๋ฆฌํ•‘, ์œ ์ € ํ”„๋กœํ•„)     โ”‚    โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๋ฐ์ดํ„ฐ ํ๋ฆ„ (Ghost Mode)

1. ์œ ์ €๊ฐ€ Zoom ์›น์—์„œ ํšŒ์˜ ์ฐธ์„
2. Extension ํ™œ์„ฑํ™” โ†’ chrome.tabCapture.capture()๋กœ ํƒญ ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ ํš๋“
3. Web Audio API๋กœ PCM ์ฒญํฌ ์ถ”์ถœ (16kHz, mono)
4. WebSocket์œผ๋กœ ๋กœ์ปฌ ๋ฐฑ์—”๋“œ์— ์ŠคํŠธ๋ฆฌ๋ฐ ์ „์†ก
5. ๋ฐฑ์—”๋“œ: faster-whisper๋กœ ์‹ค์‹œ๊ฐ„ STT
6. ์ „์‚ฌ ํ…์ŠคํŠธ โ†’ Extension์— ์‹ค์‹œ๊ฐ„ ํ‘ธ์‹œ (์ž๋ง‰)
7. ํšŒ์˜ ์ข…๋ฃŒ (์œ ์ €๊ฐ€ "์š”์•ฝ" ํด๋ฆญ)
8. ์ „์ฒด ์ „์‚ฌ โ†’ Claude API โ†’ ์š”์•ฝ + ์•ก์…˜ ์•„์ดํ…œ
9. ๊ฒฐ๊ณผ๋ฅผ Extension popup + ์›น ๋Œ€์‹œ๋ณด๋“œ์— ํ‘œ์‹œ

4. ๊ธฐ์ˆ  ์Šคํƒ

๋ ˆ์ด์–ด ๊ธฐ์ˆ  ์ด์œ 
Chrome Extension Manifest V3, TypeScript tabCapture API, Side Panel API
์˜ค๋””์˜ค ์บก์ฒ˜ chrome.tabCapture + Web Audio API ๋ธŒ๋ผ์šฐ์ € ๋„ค์ดํ‹ฐ๋ธŒ, ์•ˆ์ •์ 
์˜ค๋””์˜ค ์ „์†ก WebSocket (binary frames) ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์— ์ ํ•ฉ
๋ฐฑ์—”๋“œ Python 3.12 + FastAPI Whisper/AI ์ƒํƒœ๊ณ„ ์ตœ์ 
STT faster-whisper (๋กœ์ปฌ) ์™ธ๋ถ€ API ๋ถˆํ•„์š”, CTranslate2 ๊ธฐ๋ฐ˜ ๋น ๋ฆ„
LLM Anthropic Claude API ์š”์•ฝ/์‘๋‹ต ํ’ˆ์งˆ
ํ”„๋ก ํŠธ (๋Œ€์‹œ๋ณด๋“œ) FastAPI + Jinja2 + htmx ์‹ฌํ”Œ, ๋ณ„๋„ ๋นŒ๋“œ ๋ถˆํ•„์š”
ํŒจํ‚ค์ง• pip install + Chrome Extension zip ์„ค์น˜ ๊ฐ„ํŽธ

5. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

ghostmeet/
โ”œโ”€โ”€ extension/                # Chrome Extension
โ”‚   โ”œโ”€โ”€ manifest.json         # Manifest V3
โ”‚   โ”œโ”€โ”€ background.js         # Service Worker (tabCapture ๊ด€๋ฆฌ)
โ”‚   โ”œโ”€โ”€ content.js            # ๋ฏธํŒ… ํƒญ ๊ฐ์ง€
โ”‚   โ”œโ”€โ”€ sidepanel.html        # ์‹ค์‹œ๊ฐ„ ์ž๋ง‰ + ์š”์•ฝ UI
โ”‚   โ”œโ”€โ”€ sidepanel.js          # WebSocket ํด๋ผ์ด์–ธํŠธ
โ”‚   โ”œโ”€โ”€ popup.html            # ๊ฐ„๋‹จ ์„ค์ •/์ƒํƒœ
โ”‚   โ”œโ”€โ”€ popup.js
โ”‚   โ””โ”€โ”€ icons/
โ”‚       โ”œโ”€โ”€ icon16.png
โ”‚       โ”œโ”€โ”€ icon48.png
โ”‚       โ””โ”€โ”€ icon128.png
โ”‚
โ”œโ”€โ”€ backend/                  # Python ๋กœ์ปฌ ์„œ๋ฒ„
โ”‚   โ”œโ”€โ”€ __main__.py           # entrypoint (python -m backend)
โ”‚   โ”œโ”€โ”€ app.py                # FastAPI (WebSocket + REST + ๋Œ€์‹œ๋ณด๋“œ)
โ”‚   โ”œโ”€โ”€ transcriber.py        # faster-whisper ๋ž˜ํผ
โ”‚   โ”œโ”€โ”€ agent.py              # Claude API (์š”์•ฝ/์‘๋‹ต ์ƒ์„ฑ)
โ”‚   โ”œโ”€โ”€ meeting.py            # ํšŒ์˜ ์„ธ์…˜ ๊ด€๋ฆฌ (์ „์‚ฌ ๋ฒ„ํผ, ์ƒํƒœ)
โ”‚   โ”œโ”€โ”€ config.py             # .env ๋กœ๋”ฉ
โ”‚   โ”œโ”€โ”€ templates/
โ”‚   โ”‚   โ”œโ”€โ”€ index.html        # ๋Œ€์‹œ๋ณด๋“œ ๋ฉ”์ธ
โ”‚   โ”‚   โ””โ”€โ”€ meeting.html      # ํšŒ์˜๋ณ„ ์ƒ์„ธ
โ”‚   โ””โ”€โ”€ static/
โ”‚       โ””โ”€โ”€ style.css
โ”‚
โ”œโ”€โ”€ requirements.txt          # Python ์˜์กด์„ฑ
โ”œโ”€โ”€ .env.example
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ LICENSE
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ requirements.md           # ์ด ๋ฌธ์„œ

6. ์™„๋ฃŒ ๊ธฐ์ค€ (DoD)

MVP (Ghost Mode, v0.1)

  • Chrome Extension ์„ค์น˜ โ†’ Zoom/Meet ํƒญ ๊ฐ์ง€
  • tabCapture๋กœ ์˜ค๋””์˜ค ์บก์ฒ˜ ์‹œ์ž‘/์ค‘์ง€
  • WebSocket์œผ๋กœ ๋กœ์ปฌ ๋ฐฑ์—”๋“œ์— ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆฌ๋ฐ
  • faster-whisper๋กœ ์‹ค์‹œ๊ฐ„ ์ „์‚ฌ
  • Extension side panel์— ์‹ค์‹œ๊ฐ„ ์ž๋ง‰ ํ‘œ์‹œ
  • "์š”์•ฝ" ๋ฒ„ํŠผ โ†’ Claude API โ†’ ์š”์•ฝ + ์•ก์…˜ ์•„์ดํ…œ
  • ์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๊ณผ๊ฑฐ ํšŒ์˜ ๋ชฉ๋ก + ์š”์•ฝ ์กฐํšŒ
  • README + ์„ค์น˜ ๊ฐ€์ด๋“œ
  • ๋ฐ๋ชจ ์˜์ƒ (Zoom ํšŒ์˜์—์„œ ์‹ค์‹œ๊ฐ„ ์ž๋ง‰ โ†’ ์š”์•ฝ)

๊ธฐ์ˆ  ๊ฒ€์ฆ (Day 1 ์šฐ์„ )

  • chrome.tabCapture.capture()๋กœ ํƒญ ์˜ค๋””์˜ค ์บก์ฒ˜ PoC
  • ์บก์ฒ˜๋œ ์˜ค๋””์˜ค โ†’ WebSocket โ†’ faster-whisper ์ „์‚ฌ PoC

7. ๊ธˆ์ง€ ์กฐ๊ฑด

  • ์™ธ๋ถ€ SaaS ์˜์กด ๊ธˆ์ง€ (Recall.ai, Deepgram ๋“ฑ)
  • API ํ‚ค ํ•˜๋“œ์ฝ”๋”ฉ ๊ธˆ์ง€
  • ํšŒ์˜ ์˜ค๋””์˜ค/์ „์‚ฌ ๋ฐ์ดํ„ฐ ์™ธ๋ถ€ ์ „์†ก ๊ธˆ์ง€ (๋กœ์ปฌ์—๋งŒ ์ €์žฅ)
  • ์œ ์ € ๋™์˜ ์—†์ด ๋…น์Œ ์‹œ์ž‘ ๊ธˆ์ง€ (๋ช…์‹œ์  "Start" ๋ฒ„ํŠผ)

8. 7์ผ ๋กœ๋“œ๋งต

Day ๋ชฉํ‘œ ์‚ฐ์ถœ๋ฌผ
1 ๊ธฐ์ˆ  ๊ฒ€์ฆ โ€” tabCapture PoC + Whisper PoC ์˜ค๋””์˜ค์บก์ฒ˜โ†’์ „์‚ฌ ํŒŒ์ดํ”„๋ผ์ธ ๋™์ž‘ ํ™•์ธ
2 Extension ๋ผˆ๋Œ€ โ€” manifest, background, WebSocket Extension ๋กœ๋“œ + ์˜ค๋””์˜ค ์ „์†ก
3 ๋ฐฑ์—”๋“œ ๋ผˆ๋Œ€ โ€” FastAPI + Whisper ์—ฐ๋™ ์‹ค์‹œ๊ฐ„ ์ „์‚ฌ API ๋™์ž‘
4 ์‹ค์‹œ๊ฐ„ ์ž๋ง‰ โ€” Extensionโ†”๋ฐฑ์—”๋“œ ์–‘๋ฐฉํ–ฅ Side panel์— ์ž๋ง‰ ํ‘œ์‹œ
5 AI ์š”์•ฝ โ€” Claude API ์—ฐ๋™ ์š”์•ฝ + ์•ก์…˜ ์•„์ดํ…œ ์ƒ์„ฑ
6 ๋Œ€์‹œ๋ณด๋“œ + ํด๋ฆฌ์‹œ ์›น UI + ์—๋Ÿฌ ์ฒ˜๋ฆฌ + ์„ค์ •
7 README + ๋ฐ๋ชจ ์˜์ƒ ๋ฐฐํฌ ๊ฐ€๋Šฅ ์ƒํƒœ

9. ๋ฆฌ์Šคํฌ

๋ฆฌ์Šคํฌ ์˜ํ–ฅ ๋Œ€์‘
tabCapture๊ฐ€ Zoom ์›น์—์„œ ์•ˆ ๋  ์ˆ˜ ์žˆ์Œ ์น˜๋ช…์  Day 1์— PoC๋กœ ๊ฒ€์ฆ. ์•ˆ ๋˜๋ฉด desktopCapture ๋Œ€์•ˆ
Whisper ๋กœ์ปฌ ์‹คํ–‰ ์†๋„ (Mac Mini M2) ์ค‘๊ฐ„ faster-whisper + tiny/base ๋ชจ๋ธ๋กœ ์‹œ์ž‘
Chrome Extension ์Šคํ† ์–ด ์‹ฌ์‚ฌ ์ง€์—ฐ ๋‚ฎ์Œ MVP๋Š” ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์‚ฌ์ด๋“œ๋กœ๋”ฉ
์˜ค๋””์˜ค ํฌ๋งท ํ˜ธํ™˜์„ฑ ์ค‘๊ฐ„ 48kHzโ†’16kHz ๋ฆฌ์ƒ˜ํ”Œ๋ง ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ

10. ๊ฒฝ์Ÿ ์ฐจ๋ณ„ํ™”

๊ธฐ์กด ๋„๊ตฌ ๋ฐฉ์‹ ghostmeet ์ฐจ์ด์ 
Otter.ai / Fireflies SaaS, ๋ด‡์ด ํšŒ์˜ ์ž…์žฅ ๋กœ์ปฌ, ๋ด‡ ์—†์Œ, ํ”„๋ผ์ด๋ฒ„์‹œ
Recall.ai API, ๋น„์ฆˆ๋‹ˆ์Šค ์ „์šฉ ์˜คํ”ˆ์†Œ์Šค, ๋ˆ„๊ตฌ๋‚˜
zoom-sidekick Recall.ai ์˜์กด ์™ธ๋ถ€ ์˜์กด 0
meetingbot AWS ์ธํ”„๋ผ ํ•„์š” pip install + Extension

ghostmeet = "์„ค์น˜ 2๋ถ„, ์™ธ๋ถ€ ์˜์กด 0, ๋‚ด ๋ฐ์ดํ„ฐ๋Š” ๋‚ด ์ปดํ“จํ„ฐ์—"