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_DIRLUSTRO_CACHE_DIRLUSTRO_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 tobirdCLI (default: auto-detect fromPATH).tg_notify_path: absolute path totg-notify.sh(default: auto-detect fromPATH).
Source Format
Top-level keys are grouped lists; each source item is a mapping.
web_sources: supportsname,tier,cadence, and eitherrssorurl(or both).x_accounts: supportsname,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_KEYorOPENROUTER_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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lustro-0.2.1.tar.gz | 25.5 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.