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_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
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: 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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8beb33e3f5e7812d8448fcdf5be84b6ec453875982429c316881b4df9de40af
|
|
| MD5 |
b40202906807e95b6116dde959a45f63
|
|
| BLAKE2b-256 |
7e91eb721cda4a8841da25bc21410e513e2928ee47e21ac4542908faba3f81ca
|
Provenance
The following attestation bundles were made for lustro-0.2.0.tar.gz:
Publisher:
release.yml on terry-li-hm/lustro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lustro-0.2.0.tar.gz -
Subject digest:
b8beb33e3f5e7812d8448fcdf5be84b6ec453875982429c316881b4df9de40af - Sigstore transparency entry: 990232671
- Sigstore integration time:
-
Permalink:
terry-li-hm/lustro@0d2712fdc50ac8dd8c5e8628ff60e7df7da18ea8 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/terry-li-hm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0d2712fdc50ac8dd8c5e8628ff60e7df7da18ea8 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
641c134ad762f033bbfd98c305023824872ea1de8c88b21ab4957618d8d34ec9
|
|
| MD5 |
c0b3bcc4f7c305f64419b6d8c09eaf94
|
|
| BLAKE2b-256 |
816868e937e8983cf1d4e217269fdf603c921be201f417f5f254b4f0f70373d3
|
Provenance
The following attestation bundles were made for lustro-0.2.0-py3-none-any.whl:
Publisher:
release.yml on terry-li-hm/lustro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
lustro-0.2.0-py3-none-any.whl -
Subject digest:
641c134ad762f033bbfd98c305023824872ea1de8c88b21ab4957618d8d34ec9 - Sigstore transparency entry: 990232674
- Sigstore integration time:
-
Permalink:
terry-li-hm/lustro@0d2712fdc50ac8dd8c5e8628ff60e7df7da18ea8 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/terry-li-hm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0d2712fdc50ac8dd8c5e8628ff60e7df7da18ea8 -
Trigger Event:
push
-
Statement type: