Automated package monitoring Β· AI-powered changelogs Β· One-click updates
Never miss a package update again. Get Telegram & Matrix notifications with AI-summarized changelogs and inline update buttons.
A cron job watches your system for package updates. When one is found, you receive a rich notification like this:
π Update verfΓΌgbar (14.03.2026 13:02)
βββββββββββββββββββββββββ
π¦ 3 Update(s) gefunden:
β’ openclaw: 2026.3.2 β 2026.3.11
π Neues Plugin-System fΓΌr benutzerdefinierte Erweiterungen
π Verbesserte CLI-Performance bei groΓen Workspaces
π Bugfix fΓΌr Matrix-Nachrichtenformatierung
β’ @anthropic-ai/claude-code: 2.1.74 β 2.1.75
π Verbesserter Context-Handling bei groΓen Dateien
π Neuer --resume-Session-Flag
π Fehlerbehebung: Workspace-Watch bei Symlinks
β’ npm: 11.2.0 β 11.3.0
π Schnellere Installationen durch parallelen Downloads
π Neue `npm query` Selektoren
π Sicherheitsfix fΓΌr Paket-SignaturprΓΌfung
βββββββββββββββββββββββββ
Soll i updaten?
[β
Alle updaten] [β Nein, danke]
[π¦ openclaw] [π¦ claude-code] [π¦ npm]
π The 3 bullet points are AI-generated β real changelog content, summarized by an LLM into concise German points.
|
Telegram + Matrix with deduplication β repeated checks don't spam. Changed packages trigger re-notification automatically. Fetches release notes from GitHub Releases and npm, then summarizes into 3 bullet points via OpenClaw AI. Falls back to raw data if AI is unavailable. Detects newly-installed global npm packages automatically. No manual watchlist maintenance needed. Send to Telegram, Matrix, or both simultaneously. |
Self-repairs on critical version lookup failures. Triggers update runner automatically with a 6-hour cooldown. Single Comprehensive mocked E2E tests covering unit, integration, and 15 edge case scenarios β from corrupted JSON to AI failover. Includes |
flowchart LR
subgraph "β° Every 30 min"
A["π Cron Trigger"] --> B["π‘ sync_watchlist_npm\n(auto-discover packages)"]
end
subgraph "π For each package"
B --> C["π¦ npm_global_current_version\n(cached)"]
C --> D["π npm_latest_version\n(registry lookup)"]
D --> E{"π Update\navailable?"}
end
subgraph "π Changelog Pipeline"
E -->|"β
Yes"| F["π gather_raw_changelog\n(GitHub + npm)"]
F --> G{"π€ AI\nenabled?"}
G -->|"Yes"| H["π§ ai_summarize_changelog\n(3 bullet points)"]
G -->|"No"| I["π build_raw_points\n(raw extraction)"]
H -->|"Fail"| I
H -->|"OK"| J["π Build notification"]
I --> J
end
subgraph "π€ Delivery"
J --> K{"π Dedup\ncheck"}
K -->|"New"| L["π¨ Send via\nTelegram / Matrix"]
K -->|"Same"| M["π Exit silently"]
end
E -->|"β No"| N["βοΈ Next package"]
style A fill:#f9f,stroke:#333
style L fill:#4CAF50,stroke:#333,color:#fff
style M fill:#9E9E9E,stroke:#333,color:#fff
style H fill:#7C4DFF,stroke:#333,color:#fff
| Step | What Happens | Code |
|---|---|---|
| 1 | Cron triggers check-updates-notify.sh |
cron/check-updates-notify.sh |
| 2 | Auto-discover new global npm packages | sync_watchlist_npm() |
| 3 | For each watchlisted package: check current vs. latest version | npm_global_current_version() β npm_latest_version() |
| 4 | If update found: fetch changelogs from GitHub Releases + npm | gather_raw_changelog() |
| 5 | Summarize with AI (or fall back to raw extraction) | ai_summarize_changelog() β build_raw_points() |
| 6 | Build rich notification with inline buttons | format_update_message() + build_buttons_json() |
| 7 | Dedup: skip if same payload was already sent | Compare to STATE_FILE |
| 8 | Send via Telegram / Matrix / both | send_to_all_channels() |
# 1. Clone the repo
git clone https://github.com/servas-ai/openclaw-update-scripts.git
cd openclaw-update-scripts
# 2. Make scripts executable
chmod +x cron/*.sh scripts/*.sh
# 3. Configure your messaging channel
export CHANNEL="telegram"
export CHAT_ID="-1003766760589"
export THREAD_ID="16"
# 4. Dry-run test (prints notification without sending)
DRY_RUN=1 FORCE_NOTIFY=1 bash cron/check-updates-notify.sh
# 5. Run the test suite
bash scripts/e2e-update-check-validation.sh
# Expected: β
ALL TESTS PASSED: 299/299
# 6. Set up cron (check every 30 min)
(crontab -l 2>/dev/null; echo "*/30 * * * * cd $(pwd) && bash cron/check-updates-notify.sh") | crontab -| Type | Source | Auto-Discovery | Example |
|---|---|---|---|
| npm | npm ls -g |
β Automatic | openclaw, @anthropic-ai/claude-code |
| snap | snap refresh --list |
β Manual | chromium, snapd |
| go | Binary version check | β Manual | gt |
{
"npm": ["openclaw", "@anthropic-ai/claude-code", "npm", "vibe-kanban"],
"npm_exclude": ["create-better-openclaw"],
"snap": ["chromium", "snapd"],
"go": ["gt"]
}
npm_excludeβ packages that should never be auto-added to the watchlist, even if installed globally.
| Variable | Default | Description |
|---|---|---|
CHANNEL |
telegram |
telegram, matrix, or both |
CHAT_ID |
-1003766760589 |
Telegram Chat-ID or Matrix Room ID |
THREAD_ID |
16 |
Telegram Forum Thread (0 = disabled) |
DRY_RUN |
0 |
Print to stdout only β no messages sent |
FORCE_NOTIFY |
0 |
Send even if nothing changed (bypass dedup) |
π§ Advanced Variables
| Variable | Default | Description |
|---|---|---|
AI_SUMMARIZE |
auto |
AI changelogs: auto, 1 (always), 0 (never) |
AI_SUMMARIZE_TIMEOUT |
30 |
Max seconds to wait for AI response |
SAFE_TIMEOUT_SEC |
30 |
Timeout per npm view lookup |
AUTO_HEAL_ENABLED |
1 |
Auto-repair on critical failures |
AUTO_HEAL_COOLDOWN_SEC |
21600 |
Min seconds between auto-heals (6h) |
TELEGRAM_NOTIFY |
1 |
Send completion report after updates |
WATCHLIST_FILE |
cron/update-watchlist.json |
Path to watchlist JSON |
OPENCLAW_BIN |
auto-detect | Explicit OpenClaw binary path |
When a package has an update, the system:
- Fetches release notes from GitHub Releases API (last 40 releases, filtered to the upgrade range)
- Adds npm package description and changelog metadata
- Summarizes everything into exactly 3 German bullet points via
openclaw agent --local - Falls back to raw changelog extraction if AI is unavailable or too slow
# Configure any OpenAI-compatible API
openclaw config set models.providers.my-api.baseUrl "https://api.example.com/v1"
openclaw config set models.providers.my-api.apiKey "sk-..."
openclaw config set models.providers.my-api.api "openai-completions"
openclaw config set models.default "my-api/gpt-4o-mini"Set AI_SUMMARIZE=0 β the system will extract raw changelog points from GitHub Releases and npm descriptions instead.
openclaw-update-scripts/
β
βββ lib/
β βββ common.sh # π§ Shared library (730+ lines)
β βββ Version comparison # sort -V based comparison
β βββ Safe execution # timeout + retry + login shell
β βββ npm cache # Global cache, avoids 32+ subshells
β βββ Messaging # Telegram / Matrix via OpenClaw CLI
β βββ Changelog pipeline # GitHub Releases + npm + AI summary
β βββ Package discovery # Auto-detect new global packages
β βββ Watchlist sync # Batched jq write (single call)
β βββ Update runner # Shared update logic for all runners
β
βββ cron/
β βββ check-updates-notify.sh # π Main script: check β notify
β βββ run-all-updates.sh # π¦ Update all (via subagent)
β βββ run-all-updates-direct.sh # π¦ Update all (direct execution)
β βββ run-all-updates-via-subagent.sh # π€ Delegates to AI subagent
β βββ auto-update-all.sh # β‘ Auto-update core packages
β βββ update-watchlist.json # π Package watchlist
β
βββ scripts/
β βββ e2e-update-check-validation.sh # π§ͺ 299 mocked tests (68 suites)
β βββ docker-e2e-test.sh # π³ Docker E2E test (60 assertions)
β βββ run-docker-e2e.sh # π³ Docker test runner
β
βββ SKILL.md # π€ AI-agent skill instructions
βββ INSTALL.md # π Step-by-step setup guide
βββ Dockerfile.e2e # π³ E2E test container
βββ README.md # π This file
# Mocked E2E tests β 299 tests across 68 suites, no network
bash scripts/e2e-update-check-validation.sh
# β
ALL TESTS PASSED: 299/299
# Docker E2E β full environment test
bash scripts/run-docker-e2e.sh
# β
ALL TESTS PASSED: 60/60
# Live dry-run β real network, no messages sent
DRY_RUN=1 FORCE_NOTIFY=1 bash cron/check-updates-notify.sh| Category | Suites | Examples |
|---|---|---|
| Core Functions | 22 | version_gt, json_escape, normalize_version, shorten_line |
| npm Integration | 12 | Version lookup, cache, discovery, exclude, scoped packages |
| Messaging | 8 | send_message, send_message_json, channel routing, buttons |
| Notification Logic | 8 | Dedup, force-notify, format_update_message, build_buttons_json |
| Update Runner | 5 | update_npm_if_needed (success, current, skip, fail), run_with_retry |
| Edge Cases | 13 | Corrupted JSON, malformed npm, AI failover, all-lookups-fail, ... |
When critical version lookups fail (e.g., npm registry unreachable), the system:
- Detects the failure and logs it as
critical_lookup_failure - Generates a unique signature for the issue (deduplicates triggers)
- Cooldown check β won't re-trigger within 6 hours for the same issue
- Launches either the AI subagent runner or direct fallback runner
- Sends a special notification with affected packages and log path
π Auto-Heal aktiv (14.03.2026 13:05)
βββββββββββββββββββββββββ
Kritischer Version-Lookup-Fehler erkannt.
Reparatur-Task wurde automatisch gestartet.
β’ Betroffen: openclaw:latest,npm:current
β’ Status: Auto-Heal gestartet via subagent
β’ Log: /tmp/openclaw-auto-heal.log
This project includes SKILL.md β a machine-readable instruction file for AI agents:
- π Prerequisites checklist with verify commands
- π§ 9-step installation with
β Verifyper step - π 30+ function API reference with signatures
- π Complete data flow explanation
- π Modification guide (add new package manager, channel, etc.)
β οΈ Troubleshooting table for common issues
AI agents (OpenClaw, Codex, Claude, etc.) should read
SKILL.mdfirst for full context.
See INSTALL.md for the complete installation walkthrough:
- β Verification command after each step
- π Prerequisites check/install table
- π 3 model provider options (custom proxy, OpenAI, no AI)
- π€ Custom agent configuration with system prompts
- β° Cron setup + Matrix integration
- π§ Troubleshooting table
MIT β see LICENSE for details.
Built with π¦ by servas-ai
