Extract meeting recordings and transcripts from the Quill macOS app database. Outputs formatted markdown with speaker identification, transcripts, and metadata. Use when working with Quill meeting data.
Resources
3Install
npx skillscat add emdashcodes/claude-code-plugins/quill-export Install via the SkillsCat registry.
Quill Meeting Export
Overview
Extract meeting data from Quill (macOS meeting recording app) and generate formatted markdown output with speaker-identified transcripts, meeting metadata, and Quill's AI-generated notes.
This skill provides:
- Database extraction from Quill's SQLite database
- Speaker name mapping from contact records
- Transcript formatting with speaker identification
- Markdown generation with YAML frontmatter
- Meeting search by ID or fuzzy name matching
When to Use This Skill
Activate when working with Quill meeting data:
- Extracting meeting transcripts
- Converting Quill recordings to markdown
- Searching for meetings by name
- Getting meeting metadata and participants
Workflow
Step 1: List Available Meetings
Show recent meetings from Quill:
python3 ~/.claude/skills/quill-export/scripts/export_meeting.py list [limit]Output (to stderr):
- Meeting ID (UUID)
- Title
- Date and time
- Duration
- Meeting type
Step 2: Export Meeting
Export meeting by ID or search term:
# By exact ID
python3 ~/.claude/skills/quill-export/scripts/export_meeting.py export 76490ffc-d751-4a2a-9ef5-df4d3ddce442
# By fuzzy search term
python3 ~/.claude/skills/quill-export/scripts/export_meeting.py export "orchestrator"Output (to stdout):
- Complete markdown document
- YAML frontmatter with metadata
- Transcript with real speaker names (if tagged in Quill)
- Original Quill-generated notes
- Audio file links
Fuzzy Search Behavior:
- Case-insensitive partial matching
- If single match: Exports automatically
- If multiple matches: Lists options (stderr) and exits
- If no matches: Error message and exit
Step 3: Use the Markdown Output
The markdown is printed to stdout, allowing flexible usage:
# Save to file
python3 export_meeting.py export "meeting name" > output.md
# Pipe to other tools
python3 export_meeting.py export <id> | pbcopy
# Capture in a variable (from another script/tool)
markdown=$(python3 export_meeting.py export <id>)Database Schema
The script queries Quill's SQLite database at ~/Library/Application Support/Quill/quill.db.
See references/quill-schema.md for complete schema documentation including:
- Meeting table structure
- Transcript JSON format
- ContactMeeting speaker mapping
- Meeting type classifications
Speaker Name Mapping
The script automatically maps anonymous speaker IDs to real names:
How it works:
- Queries
ContactMeetingtable for speaker IDs - Looks up contact names in
Contacttable - Replaces speaker IDs (e.g.,
SPK-abc123) with real names in transcript
When names are available:
**James LePage:** Hello, how are you?
**Ember:** I'm doing well, thanks!When names are not available:
**SPK-mvjxhzyf43:** Hello, how are you?
**SPK-h6xiau6chjv:** I'm doing well, thanks!Meeting Type Classification
Meetings are categorized as work or personal based on type:
Work types:
1on1,internal_product,internal_sync,internal_standupexisting_vendor:customer,other
Personal types:
personal,self_note,medical:patient
Category appears in YAML frontmatter type field.
Markdown Output Format
---
meeting_id: {UUID}
type: work|personal
date: YYYY-MM-DD
start_time: HH:MM
duration: X minutes
participants: ["Name 1", "Name 2"]
tags: ["meeting", "type", ...]
---
# {Meeting Title}
## Summary
_AI summary will be generated here_
## Key Discussion Points
_Key points will be extracted here_
## Action Items
_Action items will be extracted here_
## Related
_Links to related tasks and projects_
## Original Quill Notes
{Quill's AI-generated meeting notes}
## Transcript
**Speaker:** Transcript text...
## Audio
[Recording](file:///path/to/audio.m4a)Audio File Handling
Audio files remain in Quill's directory:
- Location:
~/Library/Application Support/Quill/meetings/ - Linked using
file://absolute URLs - Only the combined audio file is linked (
*-combined.m4a)
Error Handling
Meeting not found:
- Prints error to stderr
- Exit code 1
Multiple search matches:
- Lists all matching meetings to stderr
- Prompts user to be more specific
- Exit code 1
Database errors:
- Connection failures reported to stderr
- Exit code 1
Usage Examples
List recent meetings:
python3 export_meeting.py list 10Export by ID:
python3 export_meeting.py export 76490ffc-d751-4a2a-9ef5-df4d3ddce442 > meeting.mdExport by name search:
python3 export_meeting.py export "AI Discussion" > meeting.mdIntegration with other tools:
# Copy to clipboard
python3 export_meeting.py export "sync meeting" | pbcopy
# Save with custom filename
python3 export_meeting.py export <id> > ~/Notes/$(date +%Y-%m-%d)-meeting.mdResources
scripts/export_meeting.py
Python script for extracting meeting data and generating markdown.
Functions:
connect_db()- Connect to Quill databaseget_speaker_names(conn, meeting_id)- Map speaker IDs to nameslist_recent_meetings(conn, limit)- List meetingssearch_meetings(conn, search_term)- Fuzzy search by titleget_meeting(conn, meeting_id)- Fetch meeting dataformat_transcript(transcript, speaker_names)- Format with namesformat_meeting_markdown(meeting)- Generate markdown output
references/quill-schema.md
Complete Quill database schema documentation.
assets/meeting-template.md
Template showing markdown structure and formatting.