aniketpanjwani/local_media_tools/aniketpanjwani-newsletter-events-write
Claude Code and agent skill by aniketpanjwani/local_media_tools
- community
Checking that the SKILL.md file is still in the repository.
Generate markdown newsletters from stored events. Use when the user wants to create, write, or generate a newsletter from scraped events.
Install
npx vskill@latest install aniketpanjwani/local_media_tools/aniketpanjwani-newsletter-events-writeSKILL.md
<essential_principles>
How This Skill Works
This skill generates markdown newsletters from events stored in SQLite. The workflow splits responsibility:
- CLI tool handles fragile data operations (paths, types, queries)
- Claude handles creative generation (interpreting preferences, formatting)
Key Concept: Natural Language Formatting
Users describe how they want newsletters formatted in plain English. You interpret these instructions directly - no templates or structured syntax needed.
Example preference from config:
Data Source
Events are stored in SQLite at ~/.config/local-media-tools/data/events.db. Config is at ~/.config/local-media-tools/sources.yaml.
Output
Generated markdown saved to ./newsletter_YYYY-MM-DD.md in the current working directory. </essential_principles>
<critical>
Use CLI for Data Loading - Never Inline Python
NEVER write inline Python to load events or config. Use the CLI tool:
The CLI tool handles:
- Correct database path resolution
- Proper date type conversions
- Loading formatting preferences from config
- Returning structured JSON
Do NOT:
- Write inline Python to query the database
- Hardcode paths to config or database
- Import schema modules directly
</critical>
<workflow>
Step 0: Get Plugin Directory
Save the output path as PLUGIN_DIR.
Step 1: Load Data with CLI
Run the CLI to get events and formatting preferences:
Or for a specific date range:
Output: JSON containing:
newsletter_name- Newsletter titleregion- Geographic regionformatting_preferences- User's natural language formatting instructionsdate_range- Start and end datesevent_count- Number of eventsevents- Array of event objects
If no events found, the CLI returns an error with suggestions.
Step 2: Generate Newsletter (Your Creative Task)
Using the JSON output from Step 1, generate markdown that follows the formatting_preferences.
Your task: Interpret the natural language preferences and apply them creatively:
- Read the
formatting_preferencesfield - Adapt raw event descriptions to match user's desired style
- Apply emoji rules, formatting patterns, organization
- Generate readable, well-structured markdown
Available Fields Reference
Each event in the events array has:
| Field | Description | Example | |
|---|---|---|---|
title | Event name | "Jazz Night" | |
venue | Venue name | "The Blue Note" | |
venue_city | Venue city | "Kingston" | |
date | ISO date | "2025-01-20" | |
day_of_week | Full day name | "Saturday" | |
formatted_date | Human-readable date | "January 20" | |
time | Start time | "8:00 PM" or null | |
description | Event description | "Live jazz trio..." | |
category | Event category | "music", "art", "food_drink" | |
price | Price or null | "$15" | |
is_free | Boolean | true/false | |
ticket_url | Link to buy tickets | URL or null | |
event_url | Link to event page | URL or null | |
source_url | Where event was found | URL or null |
Formatting Guidelines
- Read preferences carefully - follow user instructions exactly
- Handle nulls gracefully - skip fields that are null/missing
- Sort appropriately - events come pre-sorted by date then time
- Be creative - adapt descriptions to match user's style
Step 3: Save Output
Write the generated markdown to the current working directory:
Use today's date for the filename.
Step 4: Display Preview
Show the first ~50 lines of generated markdown so user can review.
Report:
- Output file path
- Number of events included
- Date range covered
</workflow>
<error_handling>
No Events Found
The CLI will return:
Report this to the user with the suggestion.
No Formatting Preferences
If formatting_preferences is null or empty, use sensible defaults:
Database Not Found
The CLI will return:
</error_handling>
<success_criteria> Newsletter generation is complete when:
- [ ] CLI tool used to load events (not inline Python)
- [ ] Formatting preferences interpreted correctly
- [ ] Markdown generated following user's preferences
- [ ] Output saved to
./newsletter_YYYY-MM-DD.md - [ ] Preview displayed to user
</success_criteria>
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/newsletter-events-write/SKILL.md
Popularity
- Repository stars
- 39
- Repository forks
- 13
- 7-day trend score
- 18
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 24 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/aniketpanjwani/local_media_tools/aniketpanjwani-newsletter-events-write)