| name | quill-export |
| description | 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. |
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:
python3 ~/.claude/skills/quill-export/scripts/export_meeting.py export 76490ffc-d751-4a2a-9ef5-df4d3ddce442
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:
python3 export_meeting.py export "meeting name" > output.md
python3 export_meeting.py export <id> | pbcopy
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
ContactMeeting table for speaker IDs
- Looks up contact names in
Contact table
- 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_standup
existing_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 10
Export by ID:
python3 export_meeting.py export 76490ffc-d751-4a2a-9ef5-df4d3ddce442 > meeting.md
Export by name search:
python3 export_meeting.py export "AI Discussion" > meeting.md
Integration with other tools:
python3 export_meeting.py export "sync meeting" | pbcopy
python3 export_meeting.py export <id> > ~/Notes/$(date +%Y-%m-%d)-meeting.md
Resources
scripts/export_meeting.py
Python script for extracting meeting data and generating markdown.
Functions:
connect_db() - Connect to Quill database
get_speaker_names(conn, meeting_id) - Map speaker IDs to names
list_recent_meetings(conn, limit) - List meetings
search_meetings(conn, search_term) - Fuzzy search by title
get_meeting(conn, meeting_id) - Fetch meeting data
format_transcript(transcript, speaker_names) - Format with names
format_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.