From GTM Engine
Fetch recent call recordings from your configured call recording provider, import transcripts, and save them as structured markdown files.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gtm-engine:sync-callsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Fetch recent call recordings from your configured call recording provider, import transcripts, and save them as structured markdown files.
Fetch recent call recordings from your configured call recording provider, import transcripts, and save them as structured markdown files.
/sync-calls — Fetch new calls since last sync/sync-calls --all — Show all recent calls (ignore last-sync marker)/sync-calls --id {recording_id} — Import a specific recording by IDconfig/config.yaml with integrations.call_recording.provider set (e.g., fathom, fireflies, otter, grain).env file with the API key (env var name from config.integrations.call_recording.api_key_env)| Provider | API Base | Auth Header |
|---|---|---|
fathom | https://api.fathom.ai/external/v1 | X-Api-Key |
fireflies | https://api.fireflies.ai/graphql | Authorization: Bearer |
otter | Manual import (no API) | — |
grain | Manual import (no API) | — |
For providers without an API (otter, grain, etc.), the skill prompts the user to paste or drop a transcript file instead.
Read in parallel:
config/config.yaml -> integrations.call_recording sectionmemory/call_sync.md (if exists) -> last sync timestamp and last imported recording IDExtract:
provider — which call recording tool (fathom, fireflies, otter, grain)api_key_env — name of the env var holding the API keyapi_base — API base URL (use default for known providers)If call_recording.provider is not set or call_recording.enabled is false, tell the user: "No call recording provider configured. Run /setup to set one up, or add transcripts manually to my-context/call-transcripts/."
If provider is fathom:
curl -s -H "X-Api-Key: $API_KEY" \
"https://api.fathom.ai/external/v1/meetings"
If provider is fireflies:
curl -s -X POST "https://api.fireflies.ai/graphql" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "{ transcripts { id title date duration organizer_email participants sentences { speaker_name text } } }"}'
If provider is otter, grain, or unknown:
Say: "Your provider ({provider}) doesn't have API sync. You can import transcripts manually:"
Parse the response. Filter to only show calls created AFTER the last sync timestamp (from memory/call_sync.md). If --all flag, skip the filter and show all.
If --id flag, skip listing and go directly to Step 4 for that recording.
Show the user a numbered list of new calls:
## New Calls Since Last Sync
| # | Date | Title / Participants | Recording ID |
|---|------|---------------------|--------------|
| 1 | 2025-03-10 | Acme Corp - Discovery | 12345678 |
| 2 | 2025-03-11 | Beta Inc - Follow-up | 12345679 |
Ask: "Which calls should I import? (all / numbers / skip)"
For each selected call:
Fathom:
curl -s -H "X-Api-Key: $API_KEY" \
"https://api.fathom.ai/external/v1/recordings/{recording_id}/summary"
Fireflies:
Summary is included in the transcript response (use the summary field from the GraphQL query).
Fathom:
curl -s -H "X-Api-Key: $API_KEY" \
"https://api.fathom.ai/external/v1/recordings/{recording_id}/transcript"
Fireflies: Transcript sentences are included in the initial GraphQL response.
Route the file based on call type:
my-context/call-transcripts/config.ritual.cohort.enabled, route to a cohort/ folder or skipUse this naming convention: {company}_{date}_{topic}.md
Example: acme_corp_mar10_discovery.md
Before writing, show:
If rename -> let user specify new filename.
Format the transcript file as:
# {Call Title}
**Date:** {date}
**Participants:** {list from API}
**Source:** {provider name}
## Summary
{Provider-generated summary}
## Key Points
{Extract key points from summary if available}
## Transcript
{Full transcript with speaker labels}
After all imports complete, update memory/call_sync.md:
# Call Sync State
- **Provider:** {provider}
- **Last synced:** {current ISO timestamp}
- **Last imported call date:** {date of most recent imported call}
- **Last imported recording_id:** {id}
## Import History
| Date | Recording ID | File | Company |
|------|-------------|------|---------|
| {date} | {id} | {filepath} | {company} |
Append new imports to the history table (don't overwrite previous entries).
After import, ask:
/analyse-call--allShow all calls from the API response, not just those after last sync. Useful for re-importing or finding older calls.
--id {recording_id}Skip the listing step. Directly fetch summary + transcript for the given recording ID. Still confirm filename before saving.
.env and referenced by the env var name in configmemory/call_sync.md doesn't exist, treat all calls as new (first run)npx claudepluginhub himanshusaleria/gtm-engine --plugin gtm-engineFetches call recordings, transcripts, and summaries from Fathom AI. Use when users ask about meetings, call history, or want to search past conversations.
Migrates meeting data to Fireflies.ai from platforms like Otter.ai, Rev, or custom recording systems. Covers batch upload, adapter patterns, and post-migration validation.
Searches and retrieves meeting transcripts from Fireflies.ai and Google Drive with full text, speaker labels, timestamps, summaries, keywords, and action items. Triggers on transcript search, meeting history, call recordings, or Fireflies queries.