A fully‑asynchronous Python 3.11 application that watches AI‑related websites, blogs and documentation pages, detects content changes with Firecrawl Change‑Tracking, lets an OpenAI Agent decide whether the diff is news‑worthy, and then sends concise Telegram notifications.
| Component | Tech | Purpose |
|---|---|---|
| Crawling / Diff | Firecrawl /scrape & /crawl |
Retrieves markdown + git‑style diff for each source URL |
| Relevance filter | OpenAI Agents SDK | Evaluates each diff, returns {relevant: bool, summary: str} |
| Notification | python‑telegram‑bot v21 | Sends Rich‑formatted messages (title, summary, diff snippet, link) |
| Logging | logging + RichHandler |
Colorful console logs & optional Telegram log forwarder |
| Scheduler | GitHub Actions cron | Runs every 10 minutes by default (.github/workflows/change-tracker.yml) |
git clone https://github.com/yourname/ai_lab_tracker.git
cd ai_lab_trackerpython3.11 -m venv .venv
source .venv/bin/activatepip install --upgrade pip
pip install -e .FIRECRAWL_API_KEY = fc‑********************************
OPENAI_API_KEY = sk‑********************************
TELEGRAM_BOT_TOKEN= ********************************
TELEGRAM_CHAT_IDS = -*********** # comma‑separated for multiple chats
# Optional
LOG_LEVEL = DEBUG # DEBUG / INFO / WARNING / …
TELEGRAM_SEND_LOGS= true # forward logs to Telegrampython -m ai_lab_tracker.cliThe tracker will:
- Load YAML source files from
sources/. - Fetch/crawl pages via Firecrawl.
- Pass every non‑identical diff to the OpenAI Agent.
- Send Telegram messages for relevant updates.
Use the built‑in dummy notifier to generate fake diffs and exercise the full path:
# Dry‑run (no Telegram message)
python -m ai_lab_tracker.dummy_notify --force relevant
# Send a real Telegram test message
python -m ai_lab_tracker.dummy_notify --send --force relevant--force relevant|irrelevant monkey‑patches the agent so you can verify that:
- relevant → notification is sent
- irrelevant → nothing is sent
| Env Var | Default | Description |
|---|---|---|
FIRECRAWL_API_KEY |
– | Required Firecrawl key |
OPENAI_API_KEY |
– | Required OpenAI key |
OPENAI_MODEL |
gpt-4.1 |
Model passed to agent factory |
FIRECRAWL_RATE_LIMIT_PER_MINUTE |
5 |
Local sliding‑window limit |
TELEGRAM_BOT_TOKEN |
– | Bot to send messages |
TELEGRAM_CHAT_IDS |
– | Comma‑separated chat IDs |
TELEGRAM_SEND_LOGS |
false |
Forward logs to Telegram |
LOG_LEVEL |
INFO |
Root log level (DEBUG recommended locally) |
Sources are plain YAML files under sources/. Add/disable by editing or adding new files:
name: Awesome AI Blog
url: https://awesome.ai/blog
mode: GitDiff
cadence: "*/30 * * * *" # every 30 min
labels: [awesome, blog]
enabled: trueGitHub workflow .github/workflows/change-tracker.yml installs the package and runs the tracker on cron: '*/10 * * * *'. Store your secrets in repo settings → Secrets → Actions:
FIRECRAWL_API_KEY
OPENAI_API_KEY
TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_IDS
- Rich console output via
RichHandler(colors, timestamps). - Set
LOG_LEVEL=DEBUGfor verbose output. - If
TELEGRAM_SEND_LOGS=true, logs < INFO are sent to your chat usingTelegramLogHandler.
Pull requests welcome! Please follow PEP 8, include type hints, and keep logging consistent with the Rich Styling Guide.
MIT License. See LICENSE file for details.
Built with Firecrawl‑py, openai‑agents‑python, python‑telegram‑bot, and Rich.