discord-chat-summary
Summarize Discord chat messages across servers. Use when user asks for chat summary, digest, highlights, recap, or overview of Discord conversations.
When & Why to Use This Skill
The Discord Chat Summary skill empowers Claude to analyze and condense vast amounts of Discord message data into concise, structured digests. By processing synced message files, it identifies key discussion points, active contributors, and pending questions across various servers and channels, helping users overcome information overload and stay informed without manual scrolling.
Use Cases
- Daily Catch-up: Generate a structured morning recap of all activity across multiple professional or community Discord servers to prioritize tasks.
- Project Monitoring: Extract specific technical decisions, project updates, and milestones discussed in development channels over a custom timeframe.
- Community Management: Identify trending topics, sentiment shifts, and frequently asked unanswered questions to improve community engagement and support.
- Information Retrieval: Quickly locate and summarize specific discussions from high-volume servers after being offline, filtered by date or specific channel context.
| name | discord-chat-summary |
|---|---|
| description | "Summarize Discord chat messages across servers. Use when user asks for chat summary, digest, highlights, recap, or overview of Discord conversations." |
Discord Chat Summary
Generate summaries of synced Discord chat messages. Claude reads the message files directly and produces a concise summary of key discussions, topics, and activity.
Persona Context
REQUIRED: Before executing this skill, load your configured persona:
python ${CLAUDE_PLUGIN_ROOT}/../community-agent/tools/persona_status.py --prompt
This outputs your persona definition. Apply it when generating summaries:
- Voice: Present findings in the persona's voice ("I noticed...", "I recommend...")
- Style: Use the persona's preferred formatting (bullet points vs prose)
- Framing: Frame insights and recommendations as the persona would
- Tone: Match the persona's warmth/formality in the summary introduction
When to Use
- User asks for a summary of Discord chats
- User wants a digest or recap of Discord conversations
- User asks "what's been happening" in Discord
- User wants highlights from Discord channels
- User asks for an overview of Discord activity
- User wants to catch up on Discord messages
Smart Defaults (Reduce Questions)
When user is vague, apply these defaults instead of asking:
| User Says | Default Action |
|---|---|
| "summarize Discord" | Summarize ALL synced data, last 7 days |
| "what's happening" | Same as above |
| "summarize [server name]" | All channels in that server, last 7 days |
| No time specified | Default to last 7 days |
When NO data exists:
- Don't just say "no data found"
- Run
/discord-quickstartflow instead - Offer to sync recommended servers, then summarize
Only ask for clarification when:
- Multiple interpretations are equally valid
- User explicitly asks "which servers do I have?"
How to Execute
Step 0: Handle Empty State
First check if any data exists:
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_status.py --json
If sync.has_data is false:
- DON'T just say "no data, run sync first"
- Instead, run the
/discord-quickstartflow to help them sync - Then proceed to summarize
Step 1: Get the Manifest
Get the manifest to understand what data is available:
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_manifest.py
This shows all synced servers, channels, message counts, and last sync times.
CRITICAL PATH RESOLUTION: All data paths shown in the manifest are relative to the current working directory (cwd) where Claude is running - NOT relative to this skill file or the plugin directory.
Step 2: Display Data Coverage (REQUIRED)
Before generating any summary, ALWAYS show the date coverage to the user.
Extract and display this information from the manifest:
Data Coverage:
- Server: [ServerName] - [first_message] to [last_message] ([days_covered] days)
- #channel1: [message_count] messages
- #channel2: [message_count] messages
Get this from manifest fields:
servers[].date_range.first_message- oldest message dateservers[].date_range.last_message- newest message dateservers[].date_range.days_covered- total days of dataservers[].channels[].message_count- messages per channel
This step is NOT optional. Users must see what date range they're getting before the summary.
Step 3: Determine Scope
Ask user or infer from their request which scope to summarize:
| Scope | Description |
|---|---|
| All servers | Summarize across all synced servers |
| Specific server | Summarize all channels in one server |
| Specific channel | Summarize a single channel |
Step 4: Read Messages
Read the relevant messages.md files based on scope:
For all servers:
Read each: ./data/{server-dir}/{channel}/messages.md
For specific server (e.g., "Midjourney"):
Read: ./data/662267976984297473-midjourney/*/messages.md
For specific channel:
Read: ./data/{server-dir}/{channel-name}/messages.md
Step 5: Apply Time Filtering
If user specifies a time range, filter messages by date headers in the markdown.
IMPORTANT: When filtering, tell the user what filter you applied:
| User Request | Filter Logic |
|---|---|
| "last 7 days" | Only include messages under ## YYYY-MM-DD headers from the past 7 days |
| "this week" | Messages from current week (Monday-Sunday) |
| "since Jan 1" | Messages from ## 2026-01-01 onwards |
| "yesterday" | Messages from yesterday's date only |
Date headers in messages.md look like: ## 2026-01-03
Example filter output: "Filtering to last 7 days (Jan 3-10, 2026)"
Step 6: Generate Summary (REQUIRED FORMAT)
All summaries MUST include a date range header. Never produce a summary without showing the period covered.
Required Summary Format:
## [Server Name] Summary
**Period:** [start_date] to [end_date] ([N] days)
**Messages:** [count] | **Channels:** [count] | **Active Users:** [count]
---
### Key Topics
| Date | Topic | Channel |
|------|-------|---------|
| Jan 9 | [Topic description] | #channel |
| Jan 8 | [Topic description] | #channel |
### Notable Discussions
- **[Topic]** (Jan 9, #channel): [Brief description of the discussion]
- **[Topic]** (Jan 8, #channel): [Brief description]
### Active Participants
@user1 (45 msgs), @user2 (32 msgs), @user3 (28 msgs)
### Unanswered Questions
- "[Question text]?" (@user, Jan 8, #channel)
Key requirements:
- Period/date range MUST be in the header
- Topics should include the date they were discussed
- Include channel context for multi-channel summaries
Example Usage
User: "Summarize the Discord chats from last week"
Claude:
- Runs
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_manifest.pyto list available servers - Reads all
messages.mdfiles from paths in manifest - Filters to only include
## 2025-12-27through## 2026-01-03 - Generates summary
User: "What's been happening in the Midjourney server?"
Claude:
- Runs
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_manifest.py - Finds Midjourney server directory from manifest
- Reads all channel messages.md files in that server
- Generates server-wide summary
User: "Give me a quick digest of #general"
Claude:
- Runs
python ${CLAUDE_PLUGIN_ROOT}/tools/discord_manifest.pyto find #general channel path - Reads that specific
messages.md - Generates channel-focused summary
Message Format Reference
Messages in messages.md are structured as:
## 2026-01-03
### 4:12 AM - @username (user_id)
Message content here
### 4:30 AM - @another_user (user_id)
↳ replying to @username:
Reply content
Reactions: heart 2 | rocket 1
Prerequisites
- Messages must be synced first using the
discord-syncskill - At least one server/channel should have data in
./data/directory (relative to cwd)
Limitations
- Only summarizes locally synced messages (not live Discord data)
- Cannot summarize messages not yet pulled via
discord-sync - Large message volumes may require focusing on specific channels or date ranges
Next Steps
- Use
discord-syncto pull fresh messages before summarizing - Use
discord-readto view full message details after identifying interesting discussions