Daily digest of 3-7 genuinely surprising items from newsletters and Telegram channels. Scores content for epistemic friction, not just relevance. Appends to daily note. Use when the user says "/wow-digest", "run the wow digest", "what's surprising today", "morning reading", or "digest my newsletters".
npx skills add https://github.com/glebis/claude-skills --skill wow-digest
Pull last 24h of newsletters (email) and Telegram channel posts, filter noise,
score survivors for genuine surprise against the user's focus and recent research,
and append 3-7 WOW items to today's daily note.
scripts/ingest.py to pull and normalize candidates from all sourcesscripts/enrich.py to fetch full content for link-only newsletters (LinkedIn, beehiiv, Substack)scripts/salience_filter.py to drop obvious noise (marketing, payments, greetings)scripts/wow_score.py on filtered candidates to score and select WOW items## Reading.wow-eval/candidates/YYYYMMDD.jsonl for replayscripts/feedback.py to collect human verdictspython3 scripts/ingest.py --days 1 --output /tmp/wow-candidates.jsonl
python3 scripts/enrich.py --input /tmp/wow-candidates.jsonl --output /tmp/wow-enriched.jsonl
python3 scripts/salience_filter.py --input /tmp/wow-enriched.jsonl --output /tmp/wow-filtered.jsonl
python3 scripts/wow_score.py --input /tmp/wow-filtered.jsonl --output /tmp/wow-selected.json
# Then the skill appends to daily note and archives emails
When the user says /wow-digest --dry-run or "preview the digest", run the full pipeline but:
This lets the user preview what would be appended without side effects.
The scoring prompt uses three context signals from the vault (~/Brains/brain/):
{focus} — From My Focus.md, sections ## Current, ## Base, ## Primary (stops at ## Nice to have). This tells the scorer what the user cares about right now.{research} — From ai-research/*.md files (last 30 days), parsed from filenames (YYYYMMDD-topic.md) and research_topic: frontmatter. Shows what the user has already investigated.{recent_topics} — From Daily/YYYYMMDD.md headings (last 7 days), excluding ## do and ## log. Shows recent daily note themes.If these files don't exist, scoring still works but with degraded personalization.
Ingestion deduplicates against the last 7 days of .wow-eval/candidates/*.jsonl using SHA-256 hashes of title|source_name (case-insensitive). Same article shared to multiple channels or re-sent in a newsletter won't appear twice. Pass --no-dedup to ingest.py to skip.
Edit config/sources.yaml to add/remove email patterns or Telegram channels.
Edit config/wow_prompt.txt to tune the scoring prompt.
After scoring, append to today's daily note (Daily/YYYYMMDD.md) ABOVE the - - - separator, below any existing content:
## Reading
- **[Title]** (Source) — hook explaining WHY it's surprising
- **[Title]** (Source) — hook
...
_WOW digest · N candidates → M selected · YYYY-MM-DD_
CRITICAL: Always run date +"%Y%m%d" to get today's date. Never assume.
If ## Reading already exists in the daily note, append items to it rather than creating a duplicate section.
After appending to daily note, archive processed newsletter emails:
message_id values from email candidatesgws gmail users messages batchModify \
--params '{"userId":"me"}' \
--json '{"ids":["ID1","ID2",...],"removeLabelIds":["INBOX"]}'
During eval phase, do NOT auto-archive. Instead:
scripts/feedback.pyCRITICAL: The user CANNOT judge WOW from titles alone. Always show the snippet content.
If the snippet is empty or too short, fetch the full email body via GWS before presenting.
To check if eval mode is active:
.wow-eval/feedback.jsonl has fewer than 50 entries → eval modeAnalyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Automate Brevo (Sendinblue) tasks via Rube MCP (Composio): manage email campaigns, create/edit templates, track senders, and monitor campaign performance. Always search tools first for current schemas.
Automate Klaviyo tasks via Rube MCP (Composio): manage email/SMS campaigns, inspect campaign messages, track tags, and monitor send jobs. Always search tools first for current schemas.
Research a prospect then draft personalized outreach. Uses web research by default, supercharged with enrichment and CRM. Trigger with "draft outreach to [person/company]", "write cold email to [prospect]", "reach out to [name]".
You are an expert in email marketing and automation. Your goal is to create email sequences that nurture relationships, drive action, and move people toward conversion.
Email has the highest ROI of any marketing channel. $36 for every $1 spent. Yet most startups treat it as an afterthought - bulk blasts, no personalization, landing in spam folders.
Write personalized trade show booth invitation emails, pre-show outreach sequences, and exhibition meeting requests. Use this skill when the user needs to invite prospects, customers, partners, or VIPs to visit their booth at a trade show or exhibition, write pre-show emails, create multi-touch invitation sequences, draft meeting requests for an upcoming event, or write any outreach related to an exhibition or expo they're attending. Triggers on requests like 'write an email inviting people to our booth', 'I need a pre-show outreach sequence for MEDICA', 'draft an invitation for our CES booth', 'help me get meetings before the trade show', 'booth traffic email', 'pre-show marketing email', 'trade show outreach template', 'exhibition invitation letter', or casual phrasing like 'we're exhibiting next month, need to get people to come by'. If the user mentions an upcoming show and wants to write emails to drive booth traffic or schedule meetings, this is the right skill.
Email has the highest ROI of any marketing channel. $36 for every $1 spent. Yet most startups treat it as an afterthought - bulk blasts, no personalization, landing in spam folders. This skill covers transactional email that works, marketing automation that converts, deliverability that reaches inboxes, and the infrastructure decisions that scale. Use when: keywords, file_patterns, code_patterns.
Take glebis/wow-digest from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.