Skip to main content

Survey and illuminate the AI/tech landscape.

Project description

lustro

Survey and illuminate the AI/tech landscape.

lustro is a command-line tool that fetches AI/tech news from RSS, web pages, and X accounts, logs new items, and generates monthly thematic digests.

Installation

pip install lustro
uv tool install lustro

Install optional digest dependencies:

pip install "lustro[digest]"
# or
uv tool install "lustro[digest]"

Quickstart

lustro init          # Create config dirs and starter sources
lustro fetch         # Fetch sources, dedupe, append to log
lustro log           # Show recent log lines
lustro status        # Show config paths, state, cache stats
lustro sources       # List all configured sources
lustro check         # Health-check configured sources
lustro breaking      # Check for breaking AI news
lustro discover      # Find new X handles from For You feed
lustro digest        # Generate monthly thematic digest

Commands

Command Description
fetch [--no-archive] Fetch all sources, dedupe against log, append new items. --no-archive skips full-text caching.
check HTTP health-check all configured sources.
log [-n LINES] Tail the news log (default 50 lines).
status Show config paths, state file ages, and article cache stats.
sources [--tier N] List configured sources with type, tier, and cadence. Filter by tier.
breaking [--dry-run] Poll tier-1 sources for breaking news (entity + action keyword match). Sends Telegram alerts with rate limiting (3/day, 60min cooldown).
discover [--count N] Scan X/Twitter For You feed for AI-relevant tweets from untracked accounts. Requires bird CLI.
digest [--month M] [--dry-run] [--themes N] [--model M] Monthly thematic digest via LLM. Clusters articles into themes, synthesizes evidence briefs.
init Create config/cache/data directories and starter sources config.
--version Print version and exit.

Configuration

lustro uses XDG paths by default:

  • config: ~/.config/lustro
  • cache: ~/.cache/lustro
  • data: ~/.local/share/lustro

You can override base directories with:

  • LUSTRO_CONFIG_DIR
  • LUSTRO_CACHE_DIR
  • LUSTRO_DATA_DIR

sources.yaml

lustro init writes ~/.config/lustro/sources.yaml if missing.

Example:

web_sources:
  - name: OpenAI News
    tier: 1
    cadence: daily
    rss: https://openai.com/news/rss.xml
    url: https://openai.com/news/
  - name: Anthropic News
    tier: 2
    cadence: weekly
    rss: https://www.anthropic.com/news/rss.xml
    url: https://www.anthropic.com/news

x_accounts:
  - name: OpenAI on X
    handle: openai
    tier: 2
    cadence: daily

x_discovery:
  enabled: true
  cadence: weekly
  count: 50
  keywords:
    - "\\bAI\\b"
    - "\\bLLM"
    - "\\bGPT"

config.yaml

Create ~/.config/lustro/config.yaml to override defaults:

log_path: ~/.local/share/lustro/news.md
digest_model: google/gemini-3-flash-preview
max_log_lines: 500
digest_output_dir: ~/.local/share/lustro/digests

Supported options:

  • log_path: markdown news log path.
  • digest_model: OpenRouter model ID.
  • max_log_lines: log rotation threshold.
  • digest_output_dir: digest markdown output directory.

Source Format

Top-level keys are grouped lists; each source item is a mapping.

  • web_sources: supports name, tier, cadence, and either rss or url (or both).
  • x_accounts: supports name, handle, tier, cadence.
  • x_discovery: keywords (regex patterns), count, cadence.

tier controls archival behavior during fetch (tier: 1 enables full-text archive attempts) and breaking news monitoring (tier-1 sources only).

X / Twitter Support

X account fetching, checking, and discovery require the bird CLI available on PATH.

If bird is missing, lustro skips X operations gracefully and continues with web/RSS sources.

Breaking News

lustro breaking polls tier-1 RSS/web sources and matches headlines against keyword patterns:

  • Entities: major AI companies, regulators, model names
  • Actions: launch, release, announce, open-source, acquire, ban
  • Negative filter: partnership, hiring, podcast, funding

Alerts are sent via tg-notify.sh (Telegram) with rate limiting (3 alerts/day, 60-minute cooldown). Use --dry-run to preview matches without sending.

Digest Support

Digest generation uses OpenRouter and requires:

  • LUSTRO_API_KEY or OPENROUTER_API_KEY
  • optional deps installed (lustro[digest])

Without these, lustro digest exits with a clear error.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lustro-0.2.0.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lustro-0.2.0-py3-none-any.whl (23.7 kB view details)

Uploaded Python 3

File details

Details for the file lustro-0.2.0.tar.gz.

File metadata

  • Download URL: lustro-0.2.0.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lustro-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b8beb33e3f5e7812d8448fcdf5be84b6ec453875982429c316881b4df9de40af
MD5 b40202906807e95b6116dde959a45f63
BLAKE2b-256 7e91eb721cda4a8841da25bc21410e513e2928ee47e21ac4542908faba3f81ca

See more details on using hashes here.

Provenance

The following attestation bundles were made for lustro-0.2.0.tar.gz:

Publisher: release.yml on terry-li-hm/lustro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lustro-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: lustro-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 23.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lustro-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 641c134ad762f033bbfd98c305023824872ea1de8c88b21ab4957618d8d34ec9
MD5 c0b3bcc4f7c305f64419b6d8c09eaf94
BLAKE2b-256 816868e937e8983cf1d4e217269fdf603c921be201f417f5f254b4f0f70373d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for lustro-0.2.0-py3-none-any.whl:

Publisher: release.yml on terry-li-hm/lustro

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page