{"skill":{"slug":"meeting-autopilot","displayName":"meeting-autopilot","summary":"Turn meeting transcripts into operational outputs — action items, decisions, follow-up email drafts, and ticket drafts. Not a summarizer. An operator. Accept...","description":"---\nname: meeting-autopilot\ndescription: >\n  Turn meeting transcripts into operational outputs — action items, decisions,\n  follow-up email drafts, and ticket drafts. Not a summarizer. An operator.\n  Accepts VTT, SRT, or plain text. Multi-pass LLM extraction.\nversion: 0.1.1\nauthor: Anvil AI\ntags: [meetings, productivity, action-items, email-drafts, transcripts, operations, discord, discord-v2]\n---\n\n# ✈️ Meeting Autopilot\n\nTurn meeting transcripts into structured operational outputs — NOT just summaries.\n\n## Activation\n\nThis skill activates when the user mentions:\n- \"meeting transcript\", \"meeting notes\", \"meeting autopilot\"\n- \"action items from meeting\", \"meeting follow-up\"\n- \"process this transcript\", \"analyze this meeting\"\n- \"extract decisions from meeting\", \"meeting email draft\"\n- Uploading or pasting a VTT, SRT, or text transcript\n\n## Permissions\n\n```yaml\npermissions:\n  exec: true          # Run extraction scripts\n  read: true          # Read transcript files\n  write: true         # Save history and reports\n  network: true       # LLM API calls (Anthropic or OpenAI)\n```\n\n## Requirements\n\n- **bash**, **jq**, **python3**, **curl** (typically pre-installed)\n- **ANTHROPIC_API_KEY** or **OPENAI_API_KEY** environment variable\n\n## Agent Workflow\n\n### Step 1: Get the Transcript\n\nAsk the user for their meeting transcript. Accept any of:\n- A **file path** to a VTT, SRT, or TXT file\n- **Pasted text** directly in the conversation\n- A **file upload**\n\nThe skill auto-detects the format (VTT, SRT, or plain text).\n\n**Important:** This skill does NOT do audio transcription. If the user has an audio/video file, suggest they use:\n- Zoom/Google Meet/Teams built-in transcription\n- Otter.ai or Fireflies.ai for recording + transcription\n- `whisper.cpp` for local transcription\n\n### Step 2: Get Optional Context\n\nAsk for (but don't require):\n- **Meeting title** — helps with email subject lines and report headers\n- If not provided, the skill derives it from the filename or uses \"Meeting [date]\"\n\n### Step 3: Run the Autopilot\n\nSave the transcript to a temporary file if pasted, then run:\n\n```bash\nbash \"$SKILL_DIR/scripts/meeting-autopilot.sh\" <transcript_file> --title \"Meeting Title\"\n```\n\nOr from stdin:\n```bash\necho \"$TRANSCRIPT\" | bash \"$SKILL_DIR/scripts/meeting-autopilot.sh\" - --title \"Meeting Title\"\n```\n\nThe script handles all three passes automatically:\n1. **Parse** — normalize the transcript format\n2. **Extract** — pull out decisions, action items, questions via LLM\n3. **Generate** — create email drafts, ticket drafts, beautiful report\n\n### Step 4: Present the Report\n\nThe script outputs a complete Markdown report to stdout. Present it directly — the formatting is designed to look great in Slack, email, or any Markdown renderer.\n\nThe report includes:\n- 📊 Overview table (counts by category)\n- ✅ Decisions with rationale\n- 📋 Action items table (owner, deadline, status)\n- ❓ Open questions\n- 🅿️ Parking lot items\n- 📧 Follow-up email draft(s) — ready to send\n- 🎫 Ticket/issue drafts — ready to file\n\n### Discord v2 Delivery Mode (OpenClaw v2026.2.14+)\n\nWhen the conversation is happening in a Discord channel:\n\n- Send a compact first summary (decision count, action-item count, top owners), then ask if the user wants full report sections.\n- Keep the first response under ~1200 characters and avoid long tables in the first message.\n- If Discord components are available, include quick actions:\n  - `Show Action Items`\n  - `Show Follow-Up Email Draft`\n  - `Show Ticket Drafts`\n- If components are not available, provide the same follow-ups as a numbered list.\n- Prefer short follow-up chunks (<=15 lines per message) for long reports.\n\n### Step 5: Offer Next Steps\n\nAfter presenting the report, offer:\n1. \"Want me to refine any of the email drafts?\"\n2. \"Should I adjust any action item assignments?\"\n3. \"Want to save this report to a file?\"\n4. \"I can also process another meeting — transcripts from different meetings build up a tracking history.\"\n\n### Error Handling\n\n| Situation | Behavior |\n|-----------|----------|\n| No API key set | Print branded error with setup instructions |\n| Transcript too short (<20 chars) | Suggest pasting more content or checking file path |\n| Empty LLM response | Report API issue, suggest checking key/network |\n| No items extracted | Report \"meeting may not have had actionable content\" — still show key points if any |\n| Unsupported file format | Suggest --format txt to force plain text parsing |\n\n### Notes for the Agent\n\n- **The report is the star.** Present it in full. Don't summarize the summary.\n- **Follow-up emails are the WOW moment.** Highlight them — they're ready to copy and send.\n- **Be proactive:** After the report, suggest specific improvements based on what was found.\n- **Cross-meeting tracking:** Items are automatically saved to `~/.meeting-autopilot/history/`. Mention this — it's a preview of the v1.1 feature that tracks commitments across meetings.\n- If the transcript has no speaker labels, mention that adding \"Speaker: text\" format improves attribution accuracy.\n\n## References\n\n- `scripts/meeting-autopilot.sh` — Main orchestrator (the only entry point you need)\n- `scripts/parse-transcript.sh` — Transcript parser (VTT/SRT/TXT → JSONL)\n- `scripts/extract-items.sh` — LLM extraction + classification\n- `scripts/generate-outputs.sh` — Operational output generation + report formatting\n","tags":{"latest":"0.1.2"},"stats":{"comments":0,"downloads":1165,"installsAllTime":6,"installsCurrent":6,"stars":0,"versions":2},"createdAt":1771471522333,"updatedAt":1778491578254},"latestVersion":{"version":"0.1.2","createdAt":1771717242504,"changelog":"Rebrand to Anvil AI. Remove CacheForge marketing copy. Normalize install commands.","license":null},"metadata":null,"owner":{"handle":"tkuehnl","userId":"s1796xcga59f855vmh35x909yh84742a","displayName":"Todd Kuehnl","image":"https://avatars.githubusercontent.com/u/25701510?v=4"},"moderation":null}