This directory contains various scripts for automating tasks related to content aggregation, generation, and publishing for the elizaOS knowledge system.
scripts/
├── sync-source.sh # Manual sync for individual data sources
├── etl/ # Data processing pipeline scripts
│ ├── aggregate-sources.py # Aggregates content from diverse sources
│ ├── extract-facts.py # Extracts key facts using LLM
│ ├── extract-entities.py # Extracts entities (tokens, projects, users)
│ ├── enrich-facts-media.py # Enriches facts with media/poster URLs
│ ├── generate-council-context.py # Generates strategic council briefings
│ ├── generate-monthly-retro.py # Monthly retrospective episodes
│ ├── generate-quarterly-summary.py # Quarterly/annual summaries
│ ├── generate-rss.py # Generates RSS feeds
│ ├── helpers.py # Unified help-reports ETL (extract, analyze, backfill)
│ └── backfill/ # Backfill scripts for historical data
│ ├── backfill-facts.sh
│ └── backfill-council.sh
├── integrations/
│ ├── discord/ # Discord integration scripts
│ │ ├── webhook.py # Facts briefing to Discord
│ │ ├── bot.py # Council briefing bot
│ │ └── summarize-episodes.py # Episode summaries for Discord
│ └── hackmd/ # HackMD integration scripts
│ ├── create.py # Creates/manages HackMD notes
│ └── update.py # Updates HackMD with LLM content
├── posters/ # Visual content generation
│ ├── illustrate.py # Main poster/illustration generator
│ ├── create-entity-icons.py # Generate icons for entities
│ ├── validate-illustrations.py # Validate generated illustrations
│ └── character-reference.py # Character reference sheet generation
├── prompts/ # LLM prompt templates
│ ├── config/ # Strategic configuration
│ │ └── north-star.txt # Mission and strategic context
│ ├── extraction/ # Data extraction prompts
│ │ └── facts.txt # Fact extraction prompt
│ └── hackmd/ # HackMD content prompts
│ ├── comms/ # Communication prompts
│ ├── dev/ # Developer update prompts
│ └── strategy/ # Strategic analysis prompts
└── archive/ # Deprecated scripts (kept for reference)
Purpose: Aggregates content from diverse data sources into a unified daily JSON file.
Details:
This Python script is the primary engine for collecting daily context. It navigates predefined paths within the workspace (e.g., ai-news/ subfolders for elizaos, discord, and dev content, github/summaries/ for activity summaries, and github/stats/ for statistics).
Usage:
python scripts/etl/aggregate-sources.py [YYYY-MM-DD]- If
[YYYY-MM-DD]is provided, it generates the context for that specific date. - If no date is provided, it defaults to the current date.
Output: the-council/aggregated/YYYY-MM-DD.json
Purpose: Generates a categorized intelligence briefing by extracting key facts and insights from aggregated data.
Details:
Takes the comprehensive JSON output from aggregate-sources.py and uses a specialized LLM prompt (scripts/prompts/extraction/facts.txt) to perform deep analysis. Outputs structured JSON organized by thematic categories.
Usage:
python scripts/etl/extract-facts.py -i the-council/aggregated/YYYY-MM-DD.json -o the-council/facts/YYYY-MM-DD.json -md hackmd/facts/YYYY-MM-DD.mdOutput: JSON facts file and optional Markdown version
Purpose: Generates strategic "council briefing" summaries from daily aggregated data.
Details:
Uses the North Star prompt (scripts/prompts/config/north-star.txt) combined with monthly goals to produce strategic briefings for leadership review.
Usage:
python scripts/etl/generate-council-context.py <input_file> <output_file>Environment Variables:
OPENROUTER_API_KEY: Required for LLM API access
Purpose: Generates monthly retrospective council episodes analyzing the previous month's activity.
Details: Aggregates a month's facts, briefings, and GitHub activity to produce "State of ElizaOS" episodes with strategic analysis and council dialogue.
Usage:
python scripts/etl/generate-monthly-retro.py -y 2025 -m 11Output: the-council/retros/YYYY-MM.json and the-council/episodes/episode-retro-YYYY-MM.json
Purpose: Generates quarterly or annual summaries from monthly retrospectives.
Usage:
# Quarterly summary
python scripts/etl/generate-quarterly-summary.py -y 2025 -q 4
# Annual summary
python scripts/etl/generate-quarterly-summary.py -y 2025Output: the-council/summaries/YYYY-QN.json or the-council/summaries/YYYY-annual.json
Purpose: Generates RSS feeds from facts and council briefings.
Usage:
python scripts/etl/generate-rss.pyOutput: rss/feed.xml (facts) and rss/council.xml (briefings)
Purpose: Backfills missing facts data for a date range.
Usage:
# Default range
./scripts/etl/backfill/backfill-facts.sh 2026-01-09 2026-01-12
# Force overwrite existing files
FORCE=1 ./scripts/etl/backfill/backfill-facts.sh 2026-01-09 2026-01-12Environment Variables:
OPENROUTER_API_KEY: RequiredFORCE=1: Optional, overwrite existing files
Purpose: Backfills missing council briefings for a date range.
Usage:
./scripts/etl/backfill/backfill-council.sh 2026-01-09 2026-01-12
# Force overwrite
FORCE=1 ./scripts/etl/backfill/backfill-council.sh 2026-01-09 2026-01-12Purpose: Unified ETL pipeline for help-reports feature with three subcommands: extract, analyze, backfill.
Commands:
Extracts help interactions from Discord JSON files with weighted scoring.
Weighting System:
- Channel weights: Public channels (discussion, coders) = 1.0, semi-private (partners) = 0.7, private (core-devs) = 0.5
- Temporal weights: Activity after North Star transition (Dec 2025) weighted higher
- Helpee modifiers: Individual assistance weighted higher than generic group help
Usage:
# Extract for specific month
python scripts/etl/helpers.py extract -y 2025 -m 12
# Extract for previous month (default)
python scripts/etl/helpers.py extract
# Dry run
python scripts/etl/helpers.py extract --dry-run -y 2025 -m 12Output: media/data/helpers/YYYY-MM-interactions.json
Generates comprehensive monthly reports with profiles, network analysis, and multi-perspective LLM analysis.
Details: Analyzes extracted help interactions to produce:
- Individual contributor profiles with impact scores
- Network visualization data (nodes, edges, centrality measures)
- Multi-perspective analysis from council members (aimarc, aishaw, spartan, peepo)
- Consensus ranking with recognition recommendations
Usage:
# Generate for specific month
python scripts/etl/helpers.py analyze -y 2025 -m 12
# Generate for previous month (default)
python scripts/etl/helpers.py analyze
# Skip LLM analysis (faster, for testing)
python scripts/etl/helpers.py analyze --skip-llm -y 2025 -m 12Output:
the-council/help-reports/YYYY-MM-report.json- Main report with contributor profiles and LLM analysismedia/data/helpers/YYYY-MM-network.json- Network visualization datahackmd/helpers/YYYY-MM.md- Markdown report
Environment Variables:
OPENROUTER_API_KEY: Required for LLM council perspectives
Prompt Template:
- LLM analysis prompt:
scripts/prompts/extraction/help-analysis.txt
Backfills help reports for all historical months with Discord data.
Details: Detects all months with Discord JSON data and processes them by running the extraction and analysis pipeline sequentially. Useful for initial data population or regenerating historical analyses.
Usage:
# Backfill all available months
python scripts/etl/helpers.py backfill
# Backfill specific date range
python scripts/etl/helpers.py backfill --start 2025-01 --end 2025-12
# Force reprocess already-processed months
python scripts/etl/helpers.py backfill --force
# Limit number of months
python scripts/etl/helpers.py backfill --limit 3Environment Variables:
OPENROUTER_API_KEY: Required for LLM analysis step
Purpose: Enriches facts or source JSON files with media URLs from posters and upstream sources.
Usage:
# Enrich facts with poster URLs
python scripts/etl/enrich-facts-media.py -f the-council/facts/YYYY-MM-DD.json -m media/YYYY-MM-DD/manifest.json
# Enrich source files
python scripts/etl/enrich-facts-media.py --source -f ai-news/elizaos/json/YYYY-MM-DD.json -m media/daily/YYYY-MM-DD/manifest.jsonPurpose: Manually sync individual data sources without running the full workflow.
Usage:
./scripts/sync-source.sh daily-silk # Sync daily-silk only
./scripts/sync-source.sh ai-news # Sync ai-news only
./scripts/sync-source.sh github # Sync github only
./scripts/sync-source.sh docs # Sync docs only
./scripts/sync-source.sh all # Sync all sourcesPurpose: Converts JSON facts data into rich Discord embeds with smart content processing.
Key Features:
- Smart budget allocation across sections
- LLM summarization for long content
- Rich Discord formatting with themed embeds
- Poster image integration
Usage:
python scripts/integrations/discord/webhook.py the-council/facts/YYYY-MM-DD.json -d -c CHANNEL_ID -sEnvironment Variables:
DISCORD_BOT_TOKEN: Required for Discord postingOPENROUTER_API_KEY: Required for LLM summarization (-sflag)
Purpose: Enhanced Discord bot for posting council briefings with AI-generated dialogue.
Purpose: Generates Discord-optimized summaries of council episodes.
Purpose: Manages HackMD notes - creates notes for prompts and handles directory mappings.
Usage:
python scripts/integrations/hackmd/create.py [-b BOOK_PERMALINK] [-i LOCAL_DIR_PATH]Purpose: Generates daily content for HackMD notes using LLM or syncs from local files.
Usage:
python scripts/integrations/hackmd/update.py [-d YYYY-MM-DD] [-j] [-v]Environment Variables:
OPENROUTER_API_KEY: Required for LLM API callsHMD_API_ACCESS_TOKEN: Required for HackMD API
Purpose: Main illustration generator using LLM-powered scene descriptions and image generation.
Features:
- Generates illustrations from facts data
- Multiple style presets (editorial, cinematic_anime, tarot, etc.)
- Character-aware with reference sheets
- Icon sheet generation
Usage:
# Single illustration
python scripts/posters/illustrate.py -f the-council/facts/YYYY-MM-DD.json
# Batch mode with icons
python scripts/posters/illustrate.py --batch -f the-council/facts/YYYY-MM-DD.json --with-iconsEnvironment Variables:
OPENROUTER_API_KEY: Required for LLM and image generation
Purpose: Generates icons for entities (tokens, projects, users) extracted from facts.
Usage:
python scripts/posters/create-entity-icons.py -i -t project # Interactive mode
python scripts/posters/create-entity-icons.py --batch project --limit 4Purpose: Validates generated illustrations and provides feedback.
Usage:
python scripts/posters/validate-illustrations.py media/daily/YYYY-MM-DD/The prompts directory houses all LLM prompt templates:
-
config/: Strategic configuration filesnorth-star.txt: Mission, core principles, and strategic context
-
extraction/: Data extraction promptsfacts.txt: Fact extraction and categorization prompt
-
hackmd/: Content generation prompts for HackMD notescomms/: Communication prompts (Discord announcements, tweets, newsletters)dev/: Developer-focused prompts (updates, issue triage)strategy/: Strategic analysis prompts (intel, team development)
Contains deprecated scripts kept for reference. These are no longer part of the active pipeline.
| Variable | Required By | Purpose |
|---|---|---|
OPENROUTER_API_KEY |
Most ETL scripts | LLM API access |
DISCORD_BOT_TOKEN |
Discord integrations | Discord bot authentication |
HMD_API_ACCESS_TOKEN |
HackMD integrations | HackMD API access |
- Python 3.x
requestslibrarydiscord.pylibrary (for Discord integrations)pillowlibrary (for image processing in posters)