| name | meeting-summary |
| version | 1.0.0 |
| description | Generate a branded HTML meeting summary from CallingClaw meeting data.
Includes: meeting topic, summary, review items table (screenshot + action),
action items, transcript, and known issues. Uses CallingClaw light theme
(Space Grotesk, Inter, accent #dc4a3a).
Use when: meeting ends, user asks for summary, /meeting-summary command.
|
| allowed-tools | ["Bash","Read","Write","Grep","Glob"] |
Meeting Summary Skill
Generate a polished HTML meeting summary after a CallingClaw meeting.
When to Use
- After a meeting ends (manually or via
/meeting-summary)
- When user asks: "generate summary", "meeting report", "what did we discuss"
Data Sources
Collect data from these sources (all are best-effort — skip if unavailable):
1. Transcript
curl -s "http://localhost:4000/api/meeting/transcript?count=200"
Returns { entries: [{ role, text, ts }], total }. Filter out:
[Screen] entries (screen descriptions, keep separately for context)
- Duplicate/repeated entries
- Hallucinated text (nonsensical English from Chinese speech)
2. Backend Logs — Voice Transcript
Search the most recent backend log file for [Voice] AI: and [Voice] User: entries.
These contain the actual voice transcript with better quality than the API.
3. Meeting Screenshots (Frames)
ls ~/.callingclaw/shared/meetings/{MEETING_ID}/frames/
Files are {timestamp_ms}.jpg. Pick 5-8 representative frames evenly distributed
across the meeting duration. Serve via: /api/meeting/frame/{meetingId}/{filename}
4. Meeting Status
curl -s "http://localhost:4000/api/status"
Get meeting ID, topic, participants from the current or last session.
5. Session Manager
curl -s "http://localhost:4000/api/shared/manifest"
Find the meeting session by ID for topic, start/end time, prep brief.
Output Format
Generate an HTML file at:
callingclaw-backend/public/meeting-summary-{YYYYMMDD}.html
Accessible at: http://localhost:4000/meeting-summary-{YYYYMMDD}.html
HTML Template Structure
Use CallingClaw landing page design tokens (light theme):
:root {
--bg: #ffffff;
--bg-subtle: #faf9f9;
--text: #1f2937;
--text2: #6b7280;
--text3: #9ca3af;
--accent: #dc4a3a;
--accent-light: #fef2f1;
--success: #4aa682;
--success-light: #e6f4ee;
--warning: #f59e0b;
--warning-light: #fef3c7;
--border: #e5e7eb;
--border-light: #f3f4f6;
--font-display: "Space Grotesk", system-ui, sans-serif;
--font-body: "Inter", system-ui, sans-serif;
--font-mono: "JetBrains Mono", monospace;
}
Required Sections (in order):
1. Header
- CallingClaw logo (inline SVG C shape)
- Meeting title (from topic or AI-generated)
- Meta: date, duration, participants, version badge
2. Meeting Summary
- Summary card with: goal, key decisions, unresolved items
- Keep concise — 3-5 bullet points max
3. Review Items (MOST IMPORTANT)
Table format — left: screenshot, right: discussion + action
<table class="review-table">
<thead><tr><th>Screenshot</th><th>Discussion & Action</th></tr></thead>
<tbody>
<tr>
<td class="frame-cell">
<img src="/api/meeting/frame/{meetingId}/{filename}" alt="...">
</td>
<td class="content-cell">
<span class="time-badge">{HH:MM}</span>
<h4>{Topic discussed}</h4>
<p>{What was discussed and why}</p>
<p><span class="priority p1|p2|p3">P1|P2|P3</span> {Action direction}</p>
</td>
</tr>
</tbody>
</table>
Select 4-6 key moments from the meeting. For each:
- Pick the most relevant screenshot frame (closest timestamp)
- Summarize what was discussed at that moment
- State the action direction / decision made
- Assign priority (P1 = critical, P2 = important, P3 = nice-to-have)
4. Action Items
Table with columns: Priority, Task, Owner
5. Key Transcript
Filtered conversation — only meaningful exchanges, no filler ("嗯"), no hallucinations.
Show role (AI/User), text, timestamp.
6. Known Issues (if any)
Issues discovered during the meeting. Each with title + description.
7. Footer
"Generated by CallingClaw v{version}" + Meeting ID + date
Priority Badges
<span class="priority p1">P1</span>
<span class="priority p2">P2</span>
<span class="priority p3">P3</span>
Frame API
Screenshots served via: GET /api/meeting/frame/{meetingId}/{filename}
Returns JPEG with Cache-Control: public, max-age=86400.
Example Reference
See: callingclaw-backend/public/meeting-summary-20260326.html
This is the canonical reference for styling and layout.
After Generation
- Open in browser:
open "http://localhost:4000/meeting-summary-{date}.html"
- Tell user the URL
- Ask if they want to export as PDF or share