Skip to main content

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
bird_path: /usr/local/bin/bird
tg_notify_path: /usr/local/bin/tg-notify.sh

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.
  • bird_path: absolute path to bird CLI (default: auto-detect from PATH).
  • tg_notify_path: absolute path to tg-notify.sh (default: auto-detect from PATH).

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

Metadata

Release files for lustro 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lustro 0.2.1
File Size Uploaded Provenance
lustro-0.2.1.tar.gz 25.5 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for lustro 0.2.1
File Interpreter ABI Platform
lustro-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 50.9 kB

Release files / lustro-0.2.1.tar.gz

Download URL lustro-0.2.1.tar.gz
Size 25.5 kB
Tags Source
SHA-256 checksum
How to use checksums
738ba8bcf01cc8bff37237c91b3f8a00fc3134028e396c7c20ebc099708d5915
BLAKE2b-256 checksum
How to use checksums
8e2e0f9ba38bcb4ca9617a1ef7fdfd5d27511a2f2cb6dc56ca9088f0d10e1ef4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 25, 2026.

Transparency log

Release files / lustro-0.2.1-py3-none-any.whl

Download URL lustro-0.2.1-py3-none-any.whl
Size 25.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
76d7f5c16b5c293560f9aa172a62c4895de3b2e5be6af3e598aa96cbf322df4f
BLAKE2b-256 checksum
How to use checksums
0196f8bae6870599d53089ccda5989e04f458f52838c4a0b7570ceec4b561b33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 25, 2026.

Transparency log

Security for lustro 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for lustro-0.2.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page