Skip to content
newsletter-events-write logo

Get plugin directory first

newsletter-events-write

Generate markdown newsletters from stored events. Use when the user wants to create, write, or generate a newsletter from scraped events.

SKILL.md

Full skill instructions

<essential_principles>

How This Skill Works

This skill generates markdown newsletters from events stored in SQLite. The workflow splits responsibility:

  1. CLI tool handles fragile data operations (paths, types, queries)
  2. 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:

formatting_preferences: |
  Organize by date with each day as a section header.
  Use emojis: 🎵 music, 🎨 art, 🍴 food.
  Format: **Title** @ Venue | Time | Price

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:

# Get plugin directory first
PLUGIN_DIR=$(cat ~/​.claude/​plugins/​installed_plugins.json | jq -r '.plugins["newsletter-events@local-media-tools"][0].installPath')

# Load events and preferences (default: next 7 days)
cd "$PLUGIN_DIR" && uv run python scripts/​cli_newsletter.py load --days 7

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
cat ~/​.claude/​plugins/​installed_plugins.json | jq -r '.plugins["newsletter-events@local-media-tools"][0].installPath'

Save the output path as PLUGIN_DIR.

Step 1: Load Data with CLI

Run the CLI to get events and formatting preferences:

cd "$PLUGIN_DIR" && uv run python scripts/​cli_newsletter.py load --days 7

Or for a specific date range:

cd "$PLUGIN_DIR" && uv run python scripts/​cli_newsletter.py load --from 2025-01-01 --to 2025-01-14

Output: JSON containing:

  • newsletter_name - Newsletter title
  • region - Geographic region
  • formatting_preferences - User's natural language formatting instructions
  • date_range - Start and end dates
  • event_count - Number of events
  • events - 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_preferences field
  • 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:

FieldDescriptionExample
titleEvent name"Jazz Night"
venueVenue name"The Blue Note"
venue_cityVenue city"Kingston"
dateISO date"2025-01-20"
day_of_weekFull day name"Saturday"
formatted_dateHuman-readable date"January 20"
timeStart time"8:00 PM" or null
descriptionEvent description"Live jazz trio..."
categoryEvent category"music", "art", "food_drink"
pricePrice or null"$15"
is_freeBooleantrue/​false
ticket_urlLink to buy ticketsURL or null
event_urlLink to event pageURL or null
source_urlWhere event was foundURL or null

Formatting Guidelines

  1. Read preferences carefully - follow user instructions exactly
  2. Handle nulls gracefully - skip fields that are null/​missing
  3. Sort appropriately - events come pre-sorted by date then time
  4. Be creative - adapt descriptions to match user's style

Step 3: Save Output

Write the generated markdown to the current working directory:

./​newsletter_YYYY-MM-DD.md

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:

{
  "error": "no_events",
  "message": "No events found from 2025-01-01 to 2025-01-07",
  "suggestion": "Run /​newsletter-events:research to scrape new events, or try a wider date range with --days 14"
}

Report this to the user with the suggestion.

No Formatting Preferences

If formatting_preferences is null or empty, use sensible defaults:

Organize events chronologically by date.
Use section headers for each day (e.g., "## Saturday, January 20").
Include event title, venue, time, and price.
Keep formatting simple and readable.

Database Not Found

The CLI will return:

{
  "error": "database_not_found",
  "message": "Database not found at ~/​.config/​local-media-tools/​data/​events.db",
  "suggestion": "Run /​newsletter-events:research to scrape events first"
}

</​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>

More skills from majiayu000

xiaohongshu logo
majiayu000/claude-arsenal

xiaohongshu

xiaohongshu

286 148
View
agent-task-conductor logo
majiayu000/claude-skill-registry

agent-task-conductor

Conduct multi-agent task orchestration and workflow coordination.

663 1
View
conductor-setup logo
majiayu000/claude-skill-registry

conductor-setup

Initialize project with Conductor artifacts (product definition,

663 1
View
animation-designer logo
majiayu000/claude-skill-registry

animation-designer

Expert in web animations, transitions, and motion design using Framer Motion and CSS

663 1
View
diagramming logo
majiayu000/claude-skill-registry

diagramming

Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...

663 1
View
h3-pg logo
majiayu000/claude-skill-registry-data

h3-pg

PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.

23 1
View
conductor-development logo
majiayu000/claude-skill-registry

conductor-development

Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...

663 1
View
conductor-status logo
majiayu000/claude-skill-registry

conductor-status

Display project status, active tracks, and next actions

663 1
View
dockerization logo
majiayu000/claude-skill-registry

dockerization

Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.

663 1
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View