원클릭으로
process-meetings
Process synced Granola meetings to update person pages, extract tasks, and organize meeting notes
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Process synced Granola meetings to update person pages, extract tasks, and organize meeting notes
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | process-meetings |
| description | Process synced Granola meetings to update person pages, extract tasks, and organize meeting notes |
| model_hint | balanced |
| context | fork |
| hooks | {"PostToolUse":[{"matcher":"Write","type":"command","command":"node .claude/hooks/post-meeting-person-update.cjs"}],"Stop":[{"type":"command","command":"node .claude/hooks/meeting-summary-generator.cjs"}]} |
Note for automatic mode users: If your
meeting_processing.modeisautomatic(the default for new installs), meeting notes are written directly to your vault every 30 minutes — you don't need to run this command. CheckSystem/user-profile.yamlto see your mode.This command is for manual mode users, or to add AI analysis to basic notes created without an LLM key.
Process meetings that have been synced from Granola by the background automation. Updates person pages, extracts tasks, and organizes meeting notes.
This skill supports background execution. When invoked:
Meetings are synced automatically every 30 minutes by a background process. This command reads those synced files and:
No terminal commands are shown - the heavy lifting happens in the background.
today: Only process today's meetings"search term": Find meetings by title/attendee--people-only: Only update person/company pages (skip tasks)--no-todos: Create notes but don't extract tasks--setup: Install/check background automationMobile recordings sync automatically as long as Granola is installed and the user is signed in to the desktop app. No separate authentication step needed.
First, check if background sync is set up:
# Check for state file (indicates sync has run)
ls .scripts/meeting-intel/processed-meetings.json
If state file exists: Background sync is working. Continue to Step 2.
If state file doesn't exist:
"Background meeting sync isn't set up yet. This runs automatically every 30 minutes so
/process-meetingsdoesn't need terminal commands.To set up (one-time, takes 30 seconds):
cd .scripts/meeting-intel && ./install-automation.shOr run
/process-meetings --setupand I'll do it for you.Requirements:
- Granola app installed (granola.ai)
- An LLM API key in
.env(GEMINI_API_KEY, ANTHROPIC_API_KEY, or OPENAI_API_KEY)"
If user runs --setup:
cd .scripts/meeting-intel && ./install-automation.sh
Read the processed meetings state:
const state = JSON.parse(fs.readFileSync('.scripts/meeting-intel/processed-meetings.json'));
List meeting files in 00-Inbox/Meetings/:
find 00-Inbox/Meetings -name "*.md" -mtime -7 | head -50
For each meeting file:
granola_id, participants, company, dateReport findings:
"Found X synced meetings from the last 7 days. Y need person page updates, Z have unextracted tasks."
For each participant in synced meetings:
Load user profile for email domain:
Read System/user-profile.yaml → get email_domain
Classify as Internal/External:
Check if person page exists:
05-Areas/People/Internal/{Name}.md05-Areas/People/External/{Name}.mdIf page doesn't exist, create it:
# {Name}
## Overview
| Field | Value |
|-------|-------|
| **Company** | {company from meeting} |
| **Email** | {if available} |
| **First Met** | {meeting date} |
## Recent Interactions
- [{Meeting Title}](00-Inbox/Meetings/{date}/{slug}.md) — {date}
## Notes
*Auto-created from meeting on {date}*
If page exists, add meeting to Recent Interactions:
For each unique external company domain:
Check if company page exists: 05-Areas/Companies/{Company}.md
If doesn't exist, create it:
# {Company Name}
## Overview
| Field | Value |
|-------|-------|
| **Website** | {domain} |
| **Stage** | Unknown |
| **First Contact** | {date} |
## Key Contacts
- [[05-Areas/People/External/{Person}|{Person}]]
## Meeting History
- [{Meeting Title}](00-Inbox/Meetings/{date}/{slug}.md) — {date}
## Notes
*Auto-created from meeting on {date}*
If exists, update:
Check if semantic search is available by looking for qmd in PATH.
If available, enhance meeting processing with meaning-based intelligence:
Detect implicit commitments: For each meeting's discussion notes, search semantically:
qmd query "we should circle back on..." --limit 3
qmd query "let me think about..." --limit 3
Catch soft commitments that regex action-item extraction misses.
Link meetings to projects: For the meeting topic, search:
qmd query "meeting topic/title" --limit 3
against 04-Projects/ to auto-link the meeting to relevant projects that keyword matching would miss.
Enrich person context: For each new person encountered, search:
qmd query "person name + company" --limit 3
Find if they've been mentioned in other meetings/notes, even if they weren't a direct participant.
Integration:
For each meeting with unextracted tasks:
Find action items in the "## Action Items > ### For Me" section
For each unchecked item (- [ ]):
^task-YYYYMMDD-XXX)Create task using Work MCP:
create_task(
title: "Task description",
priority: "P2", // default, P1 if "urgent" mentioned
pillar: "{from meeting}",
people: ["{participants}"],
source: "meeting:{meeting-path}"
)
Mark as extracted by adding comment to meeting note:
<!-- tasks-extracted: 2026-02-03T10:30:00Z -->
## Meeting Processing Complete ✅
**Synced meetings found:** X (last 7 days)
**Background sync status:** Running (last sync: 10 min ago)
### Updates Made
**Person pages:**
- Created: 3 new (Alice Chen, Bob Smith, Carol Wang)
- Updated: 5 existing
**Company pages:**
- Created: 1 new (Acme Corp)
- Updated: 2 existing
**Tasks extracted:** 7 items added to 03-Tasks/Tasks.md
### Recent Meetings
| Date | Meeting | Company | Participants |
|------|---------|---------|--------------|
| Feb 3 | Product Review | Acme | Alice, Bob |
| Feb 2 | Strategy Call | BigCo | Carol |
---
*Background sync runs every 30 min. Check status: `.scripts/meeting-intel/install-automation.sh --status`*
If no meetings found:
"No meetings synced in the last 7 days. Make sure:
- Granola is running during your meetings
- Background sync is set up (run
/process-meetings --setup)- Check logs:
.scripts/logs/meeting-intel.stdout.log"
If background sync isn't running:
"Background sync appears to be stopped. To restart:
cd .scripts/meeting-intel && ./install-automation.sh ```"
/process-meetings
"Found 8 synced meetings. Updating 12 person pages, extracting 5 tasks..."
/process-meetings today
"Found 2 meetings from today. Processing..."
/process-meetings --setup
"Installing background automation..." [runs install script]
/process-meetings --people-only
"Updating person and company pages only (skipping task extraction)..."
Update System/usage_log.md to mark meeting processing as used.
Analytics (Silent):
Call track_event with event_name meetings_processed and properties:
meetings_count: number of meetings processedpeople_created: number of new person pages createdtodos_extracted: number of tasks extractedThis only fires if the user has opted into analytics. No action needed if it returns "analytics_disabled".
Process synced Granola meetings to update person pages, extract tasks, and organize meeting notes
Capture solved problems as categorized documentation with YAML frontmatter for fast lookup
Personal career coach with 4 modes: weekly reports, monthly reflections, self-reviews, promotion assessments
Generate a DexDiff methodology document from your vault customisations: package how you use Dex so others can replicate it
Rigorous whole-system checkup — verifies every Dex feature honestly (working / off / broken / couldn't-check), self-heals what is provably safe, and guides the user only where Dex cannot fix itself. Replaces /health-check.
Interactive post-onboarding tour with adaptive pathways based on available data