
Hermes Wag Summarizer
- 9 installs
- 182 repo stars
- Updated June 9, 2026
- julianromli/ai-skills
Summarize long documents and code with AI-powered extraction.
About
Uses LLM techniques to identify and extract key information. Reduces large documents to actionable summaries.
- LLM-powered extraction
- Document summarization
Hermes Wag Summarizer by the numbers
- 9 all-time installs (skills.sh)
- +1 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #12,074 of 16,556 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/julianromli/ai-skills --skill hermes-wag-summarizerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 9 |
|---|---|
| repo stars | ★ 182 |
| Last updated | June 9, 2026 |
| Repository | julianromli/ai-skills ↗ |
What it does
Summarize long documents and code with AI-powered extraction.
Files
Hermes WAG Summarizer
Skill ini menyediakan solusi lengkap dan plug & play untuk membuat cronjob yang secara otomatis merangkum percakapan grup WhatsApp.
Tujuan Skill
- Memberikan cara paling sederhana untuk user Hermes baru agar bisa langsung punya fitur summary grup WhatsApp.
- Menjadi single source of truth untuk semua hal terkait WhatsApp Group Summarizer.
- Mendukung multiple grup dengan konfigurasi terpisah.
- Default delivery ke grup WhatsApp yang sama.
Fitur Utama
- Setup summary grup dalam hitungan menit
- Support multiple grup WhatsApp
- Prompt yang sudah dioptimalkan untuk WhatsApp
- Struktur output yang konsisten dan enak dibaca
- Auto
[SILENT]ketika tidak ada aktivitas - Panduan troubleshooting lengkap
Cara Menggunakan (Plug & Play)
1. Install Skill
hermes skills install hermes-wag-summarizer2. Buat Wrapper untuk Grup Baru
Gunakan script helper untuk membuat wrapper script baru:
python3 ~/.hermes/skills/hermes-wag-summarizer/scripts/create-group-wrapper.py \
--chat-id "120363402262217562@g.us" \
--group-name "VibeDev ID" \
--hours 12Script ini akan otomatis membuat:
- Wrapper script di
~/.hermes/scripts/ - Entry di tabel konfigurasi
3. Buat Cronjob
hermes cron create \
--name "VibeDev ID Summary" \
--script "~/.hermes/scripts/vibedev-id-summary.py" \
--schedule "0 5,17 * * *" \
--deliver "whatsapp:120363402262217562@g.us"4. (Opsional) Custom Prompt
Jika ingin mengubah gaya ringkasan, edit file prompt:
~/.hermes/skills/hermes-wag-summarizer/prompts/default-summary-prompt.txtLalu arahkan cronjob ke prompt tersebut.
Struktur Output yang Direkomendasikan
*Ringkasan VibeDev ID (12 jam terakhir)*
*Topik yang Dibahas:*
• ...
*Highlight Penting:*
• ...
*Pertanyaan yang Masih Terbuka:*
• ...
*Link / Resource:*
• ...
Konfigurasi Default
| Pengaturan | Nilai Default | Keterangan |
|---|---|---|
| Window | 12 jam | Bisa diubah per grup |
| Delivery | Ke grup yang sama | Kecuali explicit minta ke tempat lain |
| Format | Markdown WhatsApp | *teks* untuk bold |
| Empty Window | [SILENT] | Tidak spam grup |
| Schedule | 0 5,17 * * * | 05:00 & 17:00 UTC |
File yang Disertakan
scripts/whatsapp-group-summary.py— Parser utamascripts/create-group-wrapper.py— Helper membuat wrapper baruprompts/default-summary-prompt.txt— Prompt default yang sudah dioptimalkanexamples/— Contoh konfigurasi cronjob
Catatan Penting
- Skill ini hanya untuk summary. Untuk moderation atau analytics, gunakan skill terpisah.
- Pastikan WhatsApp Bridge sudah berjalan dan
messages.jsonlaktif. - Untuk troubleshooting bridge yang "deaf", gunakan skill
whatsapp-bridge-watchdog.
Maintenance
Setelah menambah atau mengubah grup, update bagian Live Inventory di skill ini agar tetap menjadi single source of truth.
{
"name": "VibeDev ID 12-jam summary",
"script": "~/.hermes/scripts/vibedev-id-summary.py",
"schedule": "0 5,17 * * *",
"deliver": "whatsapp:120363402262217562@g.us",
"prompt": "Use default prompt from hermes-wag-summarizer/templates/default-summary-prompt.txt",
"note": "This is an example configuration. Adjust chat ID, schedule, and group name as needed."
}#!/usr/bin/env python3
"""
Helper script to create a new WhatsApp group summary wrapper.
Usage:
python create-group-wrapper.py \\
--chat-id "120363402262217562@g.us" \\
--group-name "VibeDev ID" \\
--hours 12
"""
import argparse
import os
from pathlib import Path
TEMPLATE = '''#!/usr/bin/env python3
"""
Auto-generated wrapper for {group_name} WhatsApp Group Summary.
"""
import subprocess
import sys
TARGET_CHAT = "{chat_id}"
HOURS_BACK = {hours_back}
result = subprocess.run(
[sys.executable, "whatsapp-group-summary.py", TARGET_CHAT, str(HOURS_BACK)],
capture_output=True,
text=True,
)
if result.stdout:
print(result.stdout, end="")
if result.stderr:
print(result.stderr, end="", file=sys.stderr)
sys.exit(result.returncode)
'''
def main():
parser = argparse.ArgumentParser(description="Create WhatsApp group summary wrapper")
parser.add_argument("--chat-id", required=True, help="WhatsApp group chat ID (e.g. 12036...@g.us)")
parser.add_argument("--group-name", required=True, help="Group name (used for filename)")
parser.add_argument("--hours", type=int, default=12, help="Hours back to summarize (default: 12)")
args = parser.parse_args()
safe_name = args.group_name.lower().replace(" ", "-").replace("_", "-")
filename = f"{safe_name}-summary.py"
output_path = Path.home() / ".hermes" / "scripts" / filename
content = TEMPLATE.format(
group_name=args.group_name,
chat_id=args.chat_id,
hours_back=args.hours
)
output_path.write_text(content)
os.chmod(output_path, 0o755)
print(f"✅ Wrapper created: {output_path}")
print(f" Chat ID : {args.chat_id}")
print(f" Hours : {args.hours}")
print()
print("Next step: create cronjob with:")
print(f'hermes cron create --name "{args.group_name} Summary" --script "{output_path}" --schedule "0 5,17 * * *" --deliver "whatsapp:{args.chat_id}"')
if __name__ == "__main__":
main()
#!/usr/bin/env python3
"""
WhatsApp Group Summary Parser
Reads ~/.hermes/whatsapp/messages.jsonl and filters messages for a target group
within the last N hours.
Usage: python whatsapp-group-summary.py <chat_id> [<hours_back>]
"""
import json
import os
import sys
from datetime import datetime, timezone
from pathlib import Path
def sanitize_text(text: str) -> str:
"""Remove invisible Unicode characters that can trigger cron prompt-injection scanner."""
if not isinstance(text, str):
return text
invisible_chars = {
'\u200b', '\u200c', '\u200d', '\u2060', '\ufeff',
'\u202a', '\u202b', '\u202c', '\u202d', '\u202e'
}
for char in invisible_chars:
text = text.replace(char, '')
return text
def get_messages_file():
"""Find the messages.jsonl file."""
home = Path.home()
base = home / ".hermes" / "whatsapp" / "messages.jsonl"
if base.exists():
return base
backup = home / ".hermes" / "whatsapp" / "messages.jsonl.1"
if backup.exists():
return backup
return base
def main():
if len(sys.argv) < 2:
print("Usage: whatsapp-group-summary.py <chat_id> [hours_back]", file=sys.stderr)
sys.exit(1)
target_chat = sys.argv[1].strip()
hours_back = int(sys.argv[2]) if len(sys.argv) > 2 else 12
messages_file = get_messages_file()
if not messages_file.exists():
print(json.dumps({
"error": "messages.jsonl not found",
"checked_path": str(messages_file),
"message_count": 0,
"messages": [],
}))
sys.exit(0)
now_ts = datetime.now(timezone.utc).timestamp()
cutoff_ts = now_ts - (hours_back * 3600)
messages = []
total_lines = 0
matched_lines = 0
try:
with open(messages_file, "r", encoding="utf-8", errors="replace") as f:
for line in f:
line = line.strip()
if not line:
continue
total_lines += 1
try:
obj = json.loads(line)
except json.JSONDecodeError:
continue
if obj.get("chatId") != target_chat:
continue
timestamp = obj.get("timestamp", 0)
if timestamp < cutoff_ts:
continue
matched_lines += 1
messages.append({
"senderName": sanitize_text(obj.get("senderName", "Unknown")),
"senderId": obj.get("senderId", ""),
"body": sanitize_text(obj.get("body", "")),
"timestamp": timestamp,
"hasMedia": obj.get("hasMedia", False),
"mediaType": obj.get("mediaType", ""),
})
result = {
"target_chat": target_chat,
"hours_back": hours_back,
"now_utc": datetime.now(timezone.utc).isoformat(),
"cutoff_utc": datetime.fromtimestamp(cutoff_ts, tz=timezone.utc).isoformat(),
"total_lines_scanned": total_lines,
"matched_messages": matched_lines,
"message_count": len(messages),
"messages": messages,
}
print(json.dumps(result, ensure_ascii=False, indent=2))
except Exception as e:
print(json.dumps({
"error": str(e),
"message_count": 0,
"messages": [],
}), file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
Kamu adalah anggota aktif di grup WhatsApp. Tugasmu adalah membuat ringkasan percakapan 12 jam terakhir agar anggota yang ketinggalan bisa cepat paham apa yang terjadi.
Berikut data pesan dari grup dalam 12 jam terakhir:
{messages}
Buat ringkasan dengan ketentuan berikut:
**Gaya Penulisan:**
- Gunakan bahasa yang natural dan enak dibaca (seperti sedang cerita ke teman)
- Pakai *teks* (satu bintang) untuk penekanan, jangan pakai **teks**
- Maksimal 15-20 baris
- Fokus pada hal yang benar-benar penting dan berguna
**Struktur Ringkasan:**
*Ringkasan [NAMA GRUP] (12 jam terakhir)*
*Topik yang Dibahas:*
• (3-5 topik utama, tulis singkat dan jelas)
*Highlight Penting:*
• (poin-poin menarik, keputusan, atau informasi penting)
*Pertanyaan yang Masih Terbuka:*
• (jika ada)
*Link / Resource:*
• (jika ada)
Jika tidak ada aktivitas sama sekali dalam 12 jam terakhir, balas hanya dengan: [SILENT]