This skill should be used when running /sync-gong, processing Gong call transcripts, extracting projects and tasks from advisor calls, or when the daily-gong-sync agent is operating. Loads automatically during any Gong-related operation.
Governs how to process advisor call transcripts into structured Supabase data.
Chrome role: Pull raw transcript text from Gong only. No writes. Claude role: All analysis, scoring, dedup, and Supabase writes via REST API.
https://us-63171.app.gong.io/homesync_state.last_gong_sync)get_page_texthttps://us-63171.app.gong.io/conversationsdocument.getElementById('react-select-2-input').focus()
sync_state.last_gong_sync to todayget_page_textChrome returns raw transcript text + metadata only. All analysis and writes happen in Claude.
Naming: CLIENTYYMMDD.txt
YYMMDD → 20YY-MM-DDgong_call_id = filename without extension (e.g., bakker260303)curl -s "{supabase_url}/rest/v1/aliases?select=*" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}"
curl -s "{supabase_url}/rest/v1/clients?select=id,name" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}"
Apply alias corrections to every client name, advisor name, and project name encountered.
unmatched_client; do not write; skip callunmatched_client; do not write; skip callRun all 7 sections for every call. Do not skip or abbreviate.
For each distinct project: name (client's language), status (NEW / ongoing), short description (NEW only), who mentioned it.
Strong signals (create/match): explicit "project" label, named initiative, campaign name, proper noun + action noun. Not a project: one-time tasks, recurring processes, past events.
| Transcript signal | due_date |
|---|---|
| "ASAP" / "right away" / "this week" | call_date + 1 business day |
| "next session" / "next week" / "next call" | call_date + 7 days |
| "end of month" | last day of call's month |
| "next month" | last day of following month |
| "by [weekday]" | next occurrence of that weekday after call date |
| "by [specific date]" | parse exact date |
| No time signal | null — renders as red "NO DATE" badge on dashboard |
High-confidence task patterns:
Do not create tasks for: completed past actions ("we sent that last week"), hypotheticals ("we could potentially..."), client commitments that are not advisor actions.
Score each with: score (float), rationale (transcript-grounded), deduction_triggers (what cost points).
Overall MOI = average of 8 scores, rounded to 1 decimal.
Deduction triggers (apply −0.2 to −0.6 per instance):
Excellence signals (apply +0.2 to +0.6 per instance):
2–3 sentences: call strengths and top improvement opportunities. Factual, no editorializing. Written from the perspective of briefing a team lead who wasn't on the call.
Choose from: Inspirational, Disciplined, Accountable, Transparent, Aligned, Results-Oriented. Evidence-based only — cite the transcript moment that demonstrates each value.
# Fetch all existing projects for this client
curl -s "{supabase_url}/rest/v1/projects?client_id=eq.{slug}&select=id,name,status" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}"
For each extracted project name:
ambiguous_project; still process tasks but add flag note; do not merge# Fetch all existing tasks for this project
curl -s "{supabase_url}/rest/v1/tasks?project_id=eq.{pid}&select=id,title,completed&order=created_at.desc" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}"
For each extracted task:
due_date only if new date is earlierProjects from transcript with <60% match to existing (new).
{
"project": {
"id": "[new uuid]",
"client_id": "[slug]",
"name": "[project name from transcript]",
"status": "active",
"adv": "[O/F/M based on advisor role]",
"sort_order": 0
},
"tasks": [
{
"id": "[new uuid]",
"project_id": "[project uuid above]",
"title": "[task title]",
"due_date": "YYYY-MM-DD or null",
"completed": false,
"adv": "[O/F/M]",
"sort_order": 0,
"gong_call_id": "[call id]",
"gong_recording_link": "[URL or null]"
}
]
}
Tasks from transcript where project matched ≥85%.
{
"project_id": "[existing project uuid]",
"project_name": "[matched project name]",
"match_confidence": 0.92,
"tasks": [
{
"id": "[new uuid]",
"project_id": "[existing project uuid]",
"title": "[task title]",
"due_date": "YYYY-MM-DD or null",
"completed": false,
"adv": "[O/F/M]",
"sort_order": 0,
"gong_call_id": "[call id]",
"gong_recording_link": "[URL or null]"
}
]
}
Sentiment derived from moi_score: ≥4.0=positive, 3.0–3.9=neutral, 2.0–2.9=cautious, <2.0=negative.
{
"client_id": "[client-slug]",
"advisor_id": "[uuid from setup.json advisors[]]",
"role": "operations",
"call_date": "YYYY-MM-DD",
"gong_call_id": "[call id or filename stem]",
"summary": "[2-4 sentence strategic summary]",
"key_topics": ["project name 1", "project name 2"],
"sentiment": "positive",
"gong_recording_link": "[URL or null]",
"moi_score": 4.2,
"call_summary_detail": {
"moi_scorecard": [
{
"category": "Strategic Value Delivered",
"score": 4.5,
"rationale": "[transcript-grounded evidence]",
"deduction_triggers": "[what cost points]"
},
{
"category": "Clarity & Communication",
"score": 4.2,
"rationale": "...",
"deduction_triggers": "..."
},
{
"category": "Client Engagement & Buy-In",
"score": 4.0,
"rationale": "...",
"deduction_triggers": "..."
},
{
"category": "Follow-Up Readiness",
"score": 4.3,
"rationale": "...",
"deduction_triggers": "..."
},
{
"category": "Depth vs. Breadth",
"score": 4.1,
"rationale": "...",
"deduction_triggers": "..."
},
{
"category": "Meaning",
"score": 4.0,
"rationale": "...",
"deduction_triggers": "..."
},
{
"category": "Outcome",
"score": 4.2,
"rationale": "...",
"deduction_triggers": "..."
},
{
"category": "Impact",
"score": 4.0,
"rationale": "...",
"deduction_triggers": "..."
}
],
"reflection_questions": [
{
"question": "What was the single most important moment in this call, and why?",
"answer": "[specific transcript evidence]"
},
{
"question": "Where did this advisor create the most value — and where did they leave value on the table?",
"answer": "[specific transcript evidence]"
},
{
"question": "If you could replay one minute of this call differently, what would it be and why?",
"answer": "[specific transcript evidence]"
}
],
"strategic_summary": "[2-3 sentences: strengths + improvement opportunities]",
"core_values": ["Disciplined", "Accountable", "Transparent"]
}
}
Standard headers (all curl calls):
-H "apikey: {supabase_service_key}"
-H "Authorization: Bearer {supabase_service_key}"
-H "Content-Type: application/json"
Insert new projects (Output 1):
curl -s -X POST "{supabase_url}/rest/v1/projects" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}" \
-H "Content-Type: application/json" \
-H "Prefer: resolution=merge-duplicates" \
-d '{...project row...}'
Insert new tasks (Output 1 + Output 2, after dedup check):
curl -s -X POST "{supabase_url}/rest/v1/tasks" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}" \
-H "Content-Type: application/json" \
-H "Prefer: resolution=merge-duplicates" \
-d '{...task row...}'
PATCH existing task due_date (dedup: earlier date found):
curl -s -X PATCH "{supabase_url}/rest/v1/tasks?id=eq.{task_id}" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}" \
-H "Content-Type: application/json" \
-d '{"due_date": "YYYY-MM-DD"}'
Upsert MOI call summary (Output 3, on conflict: gong_call_id → replace):
curl -s -X POST "{supabase_url}/rest/v1/advisor_call_summaries" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}" \
-H "Content-Type: application/json" \
-H "Prefer: resolution=merge-duplicates" \
-d '{...call summary row...}'
Recompute next_due_date for each affected project:
# Get earliest pending task with a due date
curl -s "{supabase_url}/rest/v1/tasks?project_id=eq.{pid}&completed=eq.false&due_date=not.is.null&order=due_date.asc&limit=1&select=due_date" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}"
# PATCH project
curl -s -X PATCH "{supabase_url}/rest/v1/projects?id=eq.{pid}" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}" \
-H "Content-Type: application/json" \
-d '{"next_due_date": "[date]"}'
curl -s -X PATCH "{supabase_url}/rest/v1/sync_state?id=eq.singleton" \
-H "apikey: {KEY}" -H "Authorization: Bearer {KEY}" \
-H "Content-Type: application/json" \
-d '{"last_gong_sync":"[ISO datetime]","gong_sync_in_progress":false,"gong_sync_error":null}'
If flagged items exist: read current flagged_items array, append new entries, PATCH back.
references/extraction-rules.md — additional project/task extraction heuristicsreferences/ambiguity-handling.md — uncertain client/project match handlingreferences/document-linking.md — finding and linking Drive documents mentioned in calls