skills/process-call-transcript/SKILL.md
Process a meeting or call transcript into structured project artifacts — session notes, contact profiles, action items routed to the right destination (markdown / Google Calendar / Google Doc / GitHub issue), and doc updates. Fetches from Jamie (meetjamie.ai) automatically when the user references a recent call they recorded. Use when the user pastes a call transcript, says "process the last Jamie call", "process my call", "extract from meeting", or when a transcript with speaker labels appears in the conversation.
npx skillsauth add razbakov/skills process-call-transcriptInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Transform a raw meeting/call transcript into structured project artifacts: session notes, contact profiles, and action items routed to the destination that fits their type.
When the user shares text that looks like a transcript — speaker names with timestamps, conversation turns — or says "process this call/meeting", "process the last Jamie call", "get the last transcript", or similar.
Skip this step if the user already pasted the transcript into the conversation.
If the user references a call they recorded (Jamie, Otter, Fireflies, Granola, etc.) without pasting anything:
Identify the source. Ask which tool if it's ambiguous. If the user says "Jamie" or "my usual recording tool", assume Jamie (meetjamie.ai).
Find the most recent meeting. Jamie sends a "Summary Ready" email for every processed call. Search Gmail:
gog gmail list "from:jamie newer_than:2d" --max 10 -p
Pick the most recent "Summary Ready" subject. Each email body contains a View Summary https://app.meetjamie.ai/meetings/<id> link — extract the URL.
Open in the authenticated browser. Use mcp__Claude_in_Chrome__tabs_context_mcp to connect to the user's existing Chrome (Jamie requires login), then navigate to the meeting URL. Track every tab you open so you can close it with mcp__Claude_in_Chrome__tabs_close_mcp at the end of the run — including on partial failure. Never leave Jamie tabs behind in the user's browser; only close tabs you opened.
Pull the Summary first (landing tab) — this gives you the auto-generated executive summary and topic buckets. Use get_page_text.
Pull the Transcript. Click the "Transcript" tab. Note: find + computer left_click may target the wrong tab selector — the reliable path is a JS click:
[...document.querySelectorAll('button')].find(b=>b.textContent.trim()==='Transcript').click()
Wait ~800ms, then read document.body.innerText in chunks (substring slices — 2000+ chars at a time) because the transcript is long and the MCP response is truncated. Paginate through 0..end until you have the full text.
Proceed to Step 1 with the fetched transcript.
Same pattern applies to other tools if the user uses them — find the email/API that exposes the transcript URL, open in the authenticated browser, pull the text.
Identify from the raw text:
Read through the entire transcript and categorize everything into:
Based on the call topic, identify which project/org the artifacts belong to. Check the Project Path Registry in the org/project CLAUDE.md. All artifacts go into that project's structure.
Create ops/sessions/YYYY-MM-DD-<topic>.md in the target project:
# Call: [Topic] — [Date]
**Participants:** [Name 1] (role), [Name 2] (role)
**Duration:** [start] - [end]
**Context:** [How they met, why the call happened]
## Key Decisions
- [Decision 1]
## Action Items
- [ ] [Task] — [Owner] — [Deadline if mentioned] — [→ routed to: gcal / gdoc / gh-issue / local]
## Ideas
- [Idea with context]
## Key Facts
- [Fact 1]
## Issues
- [Issue description]
## Notes
[Important context or quotes that don't fit above]
For each new person, create contacts/<firstname-lastname>/contact.md:
---
name: [Full Name]
type: [collaborator/freelancer/partner/lead]
projects: [relevant projects]
location: [if mentioned]
contact: [telegram/email/phone if shared]
status: active
met: [how they connected]
---
## Context
[Role, what they do, relationship to the project]
## Preferences & Boundaries
[Only if explicitly stated: comms channels they use/avoid, group chat preferences, themes/styles they dislike, scheduling constraints]
## Notes from [Date]
[Key points about this person from the call]
Preferences matter — people told you how they want to be worked with. Capture it.
Do NOT dump every action item into a markdown backlog. Classify each one and route it:
| Type of action item | Destination | How |
|---|---|---|
| Reminder at a specific time ("remind me Monday", "next week", date-bound) | Google Calendar event | gog cal create primary --summary "..." --from "YYYY-MM-DDTHH:MM:SS+02:00" --to "..." --description="..." |
| Living checklist ("at event todo", "packing list", "pre-launch checklist" — a list that gets edited repeatedly) | Google Doc | gog docs create "Title" --file <seed.md> then replace the local md with a pointer to the doc URL |
| Agent-dispatchable task (needs research, code, content — someone else should execute it) | GitHub issue on the org's Control Center board | gh issue create --repo <owner>/<project-repo> --title "..." --label "agent:<name>" --body "<S3 body>" then gh project item-add <board-number> --owner <owner> --url <issue-url>. Project board number and per-agent labels live in the org CLAUDE.md. |
| Small atomic todo owned by the user, no specific time | Keep as markdown checkbox in the session notes (or local project backlog) | inline |
| Open question (unresolved, needs more info) | Mark clearly in session notes under "Issues" or "Open Questions" | inline |
Ask once if the category is genuinely ambiguous. Otherwise pick the obvious destination and report what you chose.
Defaults that matter:
agent:* label and an S3 body (Tension / Driver / Requirement / Response options)agent:* label so it routes to an owner, and must be added to the org's project board after creationThe session file usually lives in the org logbook repo (e.g. <owner>/<org-logbook-repo>), but the GitHub issue is created in the project code repo (e.g. <owner>/<project-code-repo>). Relative markdown links like ../../../<org-logbook>/... will not resolve on GitHub — they only work locally.
Rules:
https://github.com/<owner>/<logbook-repo>/blob/<branch>/ops/sessions/YYYY-MM-DD-<topic>.md.gh issue edit <n> --repo <repo> --body "$(cat <<'EOF' ... EOF )" — don't leave broken links.Check if the call introduced information that should update existing project docs:
Make targeted edits — don't rewrite entire docs.
All created artifacts should link to each other:
https://github.com/... URLs (see "Cross-repo linking" under Step 6)Leave a visible marker on the original recording so the user can see at a glance which calls are done. For Jamie: rename the meeting title to [x] <searchable summary>.
[x] prefix is the processed marker (scans like a checked checkbox in the meeting list).+. Example: [x] Egor sync — Mafia Friday invite + DE/RU/ES expansion + Figma testing + process reminder. This is the index the user will scan later — optimise it for ⌘F, not grammar.mcp__Claude_in_Chrome__find for "meeting title editable textbox", then form_input with the new value, then press Tab to blur and trigger save. Verify with document.title — Jamie mirrors the meeting title into the tab title, so a matching tab title confirms the save landed.navigate back to the meeting URL and re-find the title element.Equivalent markers for other tools: append a tag, move to a "processed" folder, or whatever the tool supports. The principle is the same — future-you must be able to tell at a glance which recordings are done.
Open the report with a Topics discussed table of contents — a numbered list of every distinct topic the call touched, in order. This is the user's mental index of the conversation; without it they can't navigate back to anything that didn't become a structured artifact, and a lot of what makes a call valuable lives in the threads that don't. Include tangents, personal asides, philosophy detours, and "by the way" moments — those are often exactly what the user wants to revisit. The default failure mode is reporting only what produced files; resist that. If the call was short and only covered one thing, the ToC still has one entry — write it anyway.
Then list what you created and where each action item went. Example:
Topics discussed:
- Camera buying advice (Sony A7 IV, eBay sourcing, fixed-aperture lenses)
- SDTV admin migration freeze until Apr 20
- WeDance Instagram monetization pivot (€10 paid post or lottery)
- Croatia festival logistics
- Esoteric/spiritual tangent (Tibet, chakras, reincarnation-as-agents)
- Hiring approach for Egor (JP) and Ash (IN)
Artifacts created:
- Session notes →
ops/sessions/...(committed + pushed)- Contact →
contacts/.../contact.md- Reminder "Add Michael to admin group" → Google Calendar Mon 09:00 [link]
- At-event todo → Google Doc [link] (local md is now pointer)
- Strategy issue → razbakov/mystery-games#3 (on Control Center board, labeled
agent:marco)- Open question: Cuba donation channel — flagged in session notes
- Jamie meeting renamed to
[x] <summary>(marked processed)
development
Seed a new or empty Instagram account with a 9-post grid (3×3) so the profile looks established the moment a new visitor lands. Designed for festivals, new businesses, product launches, conferences, communities — any time an empty IG profile would hurt conversion from external traffic (QR scans, flyer drops, cross-promo). Generates assets via /image-from-gemini (per content-publishing rules — never HTML), writes captions with hashtag sets, and outputs a posting order + cadence plan. Trigger generously: phrases like '9 posts for instagram', 'fill my IG', 'starter grid', 'launch grid', 'instagram seed', '9-post grid', 'IG account not to look empty', 'first instagram posts', 'feed bootstrap', '3x3 grid', 'instagram launch content'. Even if the user mentions only one piece (just the images, just the captions, just the order), use this skill — the grid only works as an integrated bundle.
testing
Translate one English blog post into multiple target languages via parallel sub-agents, preserving frontmatter conventions, hero image, and brand voice. Use when the user shares a published English post URL or markdown path and says 'translate it', 'add other languages', 'publish in DE/ES/RU/UK', 'translate to 5 languages', or asks for localized versions of a specific post.
development
Build a complete press kit for an event, product launch, or campaign — in multiple languages — and publish it as a shareable Google Drive folder ready to send to journalists, partners, or a delegate. Produces press releases (typically DE/EN/ES, or configurable), uploads press photos and flyers, creates an Overview document for at-a-glance briefing, and creates a Handover document with pending tasks, contacts, risks, and decisions so press distribution can be delegated. Use when the user says 'I need a press release', 'create a press kit', 'press release in X languages', 'set up a Drive folder for press', 'handover doc for someone else to run press', or has an upcoming announcement that needs to be sent to media. Trigger generously: even partial requests (just a press release, just a flyer folder) typically evolve into the full kit.
development
Track ticket sales for a live event (concert, festival, conference, workshop) with daily snapshots, generate a burndown chart comparing actual sales to ideal-linear targets and tier-cumulative milestones, and report whether the event is on pace. Use when the user asks how sales are going, wants to know if their event will sell out, asks for a daily sales report, wants to set up sales tracking for an upcoming event, or asks about ticket pace / velocity / projection. Trigger generously: phrases like 'how is concert sales going', 'burndown for my event', 'are we going to sell out', 'sales velocity', 'daily ticket chart', 'how many tickets do we need to sell', or any case where the user has a ticketed event with a fixed sales window and wants visibility on pacing.