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

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.1.tar.gz (25.5 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.1-py3-none-any.whl (25.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lustro-0.2.1.tar.gz
  • Upload date:
  • Size: 25.5 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.1.tar.gz
Algorithm Hash digest
SHA256 738ba8bcf01cc8bff37237c91b3f8a00fc3134028e396c7c20ebc099708d5915
MD5 9f8436eb4aa43c7ba2cabe46b14465ce
BLAKE2b-256 8e2e0f9ba38bcb4ca9617a1ef7fdfd5d27511a2f2cb6dc56ca9088f0d10e1ef4

See more details on using hashes here.

Provenance

The following attestation bundles were made for lustro-0.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: lustro-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 25.4 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 76d7f5c16b5c293560f9aa172a62c4895de3b2e5be6af3e598aa96cbf322df4f
MD5 ff7470e7785b85b872874ea891291389
BLAKE2b-256 0196f8bae6870599d53089ccda5989e04f458f52838c4a0b7570ceec4b561b33

See more details on using hashes here.

Provenance

The following attestation bundles were made for lustro-0.2.1-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