feat(openclaw): modularize scripts, implement crons-as-code and EaC governance

This commit is contained in:
Moritz Graf
2026-10-16 21:25:33 +02:00
parent f4d8210cc4
commit ed3529a9d7
16 changed files with 1924 additions and 1 deletions
+154
View File
@@ -0,0 +1,154 @@
# Declarative Crons-as-Code for OpenClaw (Haumdaucher)
# Reconciled idempotently via k8s/openclaw/scripts/sync_crons.py
version: 1
jobs:
# 1. Maintenance & State Truncation
- name: "tracking-session-sliding-window"
declarationKey: "tracking-session-sliding-window"
description: "Lightweight sliding-window truncation (max 8 events) for mila_tracker and nutrition_tracker"
schedule:
kind: "every"
every: "15m"
session: "isolated"
delivery: "none"
command: "python3 /home/node/.openclaw/scripts/compact_tracking_sessions.py"
- name: "nightly-session-compaction"
declarationKey: "nightly-session-compaction"
description: "Nightly multi-agent session compaction and SQLite WAL checkpointing"
schedule:
kind: "cron"
expr: "45 4 * * *"
tz: "Europe/Berlin"
session: "isolated"
delivery: "none"
command: "python3 /home/node/.openclaw/scripts/compact_sessions.py"
# 2. Family Dashboards & Web Analytics
- name: "dashboards-periodic-publish"
declarationKey: "dashboards-periodic-publish"
description: "Periodically regenerates and uploads Mila & Moritz family HTML dashboards to S3"
schedule:
kind: "every"
every: "10m"
session: "isolated"
delivery: "none"
command: "sh -lc 'export PATH=/home/node/.openclaw/bin:$PATH; cd /home/node/mop-skills/mop-skills/skills/datastore && uv run scripts/update_website.py --data-dir /home/node/.openclaw/wiki/main/data && uv run scripts/update_moritz_website.py --data-dir /home/node/.openclaw/wiki/main/data'"
# 3. Nightly Garmin Connect Mirror
- name: "garmin-nightly-mirror"
declarationKey: "garmin-nightly-mirror"
description: "Nächtlicher deterministischer Spiegel der Garmin Connect Daten (Aktivitäten, Daily Summary, Schlaf) in Git JSONL"
schedule:
kind: "cron"
expr: "30 3 * * *"
tz: "Europe/Berlin"
agent: "fitness"
model: "openrouter/deepseek/deepseek-v4.1-flash"
session: "isolated"
channel: "telegram"
to: "-1004326921510"
threadId: "20"
announce: true
message: |
Führe den nächtlichen Garmin Connect Sync durch.
Vorgehen:
1. Führe den Garmin-Sync-Befehl aus:
uv run /home/node/mop-skills/mop-skills/skills/datastore/scripts/garmin_sync.py --days 2 --data-dir /home/node/.openclaw/wiki/main/data
2. Aktualisiere die gerenderten Markdown-Ansichten:
PYTHONPATH=/home/node/mop-skills/mop-skills/skills/datastore/scripts uv run /home/node/mop-skills/mop-skills/skills/datastore/scripts/render_views.py --data-dir /home/node/.openclaw/wiki/main/data --wiki-dir /home/node/.openclaw/wiki/main
3. Aktualisiere das persönliche Health & Nutrition Dashboard (moritz.html):
uv run /home/node/mop-skills/mop-skills/skills/datastore/scripts/update_moritz_website.py --data-dir /home/node/.openclaw/wiki/main/data
4. Git Commit & Push im Knowledge Wiki:
cd /home/node/.openclaw/wiki/main && git add data/garmin/ entities/nutrition-log/ public/ && git diff --staged --quiet || (git commit -m "chore(garmin): automated nightly mirror [skip ci]" && git push origin main)
5. Finale Antwort:
- Bei Erfolg: Gib exakt 'NO_REPLY' aus (intentional silence, kein Telegram-Spam in der Nacht).
- Nur bei Authentifizierungsfehlern: Informiere kurz via Telegram (Thema #Sport), dass ein Garmin-Re-Auth nötig ist, oder starte den Re-Auth-Flow.
# 4. Weekly Autonomous System & Error Audit
- name: "itguy-weekly-health-audit"
declarationKey: "itguy-weekly-health-audit"
description: "Wöchentlicher Self-Audit der OpenClaw-Logs, Tool-Failures und Session-Transkripte mit Git-Commit-Korrelation"
schedule:
kind: "cron"
expr: "0 3 * * 0"
tz: "Europe/Berlin"
agent: "itguy"
model: "openrouter/deepseek/deepseek-v4.1-flash"
session: "isolated"
channel: "telegram"
to: "-1004326921510"
threadId: "119"
announce: true
message: |
Führe den wöchentlichen OpenClaw System- und Log-Audit durch.
Vorgehen:
1. Führe den Audit-Befehl aus:
uv run /home/node/mop-skills/mop-skills/skills/openclaw-audit/scripts/audit_openclaw.py --since 7d --write-report --add-task --git-push
2. Analysiere die Ausgabe und korreliere eventuelle Fehler-Cluster mit den jüngsten Commits in infrapuzzle, mop-skills und knowledge-wiki.
3. Finale Antwort:
- Wenn NEUE Probleme gefunden oder Tasks in tasks/antigravity.md eingetragen wurden: Fasse die Ergebnisse kurz, präzise und lösungsorientiert zusammen (betroffene Tools, vermutete Ursache, Link zur Task-Queue) und gib diese Zusammenfassung als finale Antwort aus.
- Wenn das System gesund ist und KEINE neuen Tasks erzeugt wurden: Gib als finale Antwort exakt 'NO_REPLY' aus (intentional silence, kein Telegram-Spam).
# 5. Weekly AI Roundup (Recherche)
- name: "weekly-ai-roundup"
declarationKey: "weekly-ai-roundup:recherche"
description: "Wöchentlicher AI-Roundup und Tech-Scanning für Topic #Research"
schedule:
kind: "cron"
expr: "30 6 * * 5"
tz: "Europe/Berlin"
agent: "recherche"
model: "openrouter/deepseek/deepseek-v4.1-flash"
session: "isolated"
channel: "telegram"
to: "-1004326921510"
threadId: "117"
announce: true
message: |
🗓️ WÖCHENTLICHER AI-ROUNDUP (Freitag). Führe den in sources.md im Workspace definierten Ablauf aus und poste das Ergebnis als EINE kompakte Telegram-Nachricht in diesen Topic (#Research).
1) Hacker News: Algolia API – https://hn.algolia.com/api/v1/search_by_date?tags=story&numericFilters=points>150,created_at_i>{Unix-Timestamp von vor 7 Tagen}&hitsPerPage=100 → daraus die KI-relevanten Top-Stories nach Punkten ziehen.
2) Frontier-Labs prüfen: OpenAI, Anthropic, Google DeepMind, Meta AI, Mistral, xAI.
3) China-Labs prüfen: GLM/Z.ai, Qwen, DeepSeek, Moonshot/Kimi, MiniMax.
4) Tracker: Artificial Analysis Releases, Hugging Face Trending, OpenRouter Rankings, LMArena.
5) Newsletter/Blogs: The Batch, Import AI, Interconnects, Ahead of AI, Simon Willison, TLDR AI.
6) GitHub: Trending (weekly) + neue Releases der Kern-Orgs (openai, anthropics, google-deepmind, QwenLM, deepseek-ai, zai-org, meta-llama, mistralai).
7) YouTube nur als Hype-Indikator (Titel/Snippets), KEINE Transkripte.
Ausgabe (Deutsch, Markdown, KEINE Tabellen):
- Top-3-Highlights der Woche (je 1 Satz + Link)
- Danach Bullets je Kategorie: ① Frontier-Modelle · ② China-Modelle · ③ Tools/Infra/Procedures · ④ Trends (HN/GitHub/YouTube), je Eintrag genau 1 Quell-Link
- Scope 60/40 (Modelle/Tools). Wenn eine Kategorie nichts Neues hat: kurz 'nichts Neues'.
- Am Ende NUR falls nötig eine Zeile: welche Quelle in sources.md ergänzt/entfernt werden sollte.
Nutze web_search/web_fetch. Effort: medium.
# 6. Weekly Bridge Tracker (Holzgartensteg)
- name: "Recherche: Holzgartensteg (wöchentlich)"
declarationKey: "recherche:holzgartensteg"
description: "Wöchentlicher Status-Check zum Holzgartensteg Regensburg via ALLRIS & Web"
schedule:
kind: "cron"
expr: "0 16 * * 5"
tz: "Europe/Berlin"
agent: "main"
session: "isolated"
channel: "telegram"
to: "306373425"
announce: true
message: |
Wöchentlicher Recherche-Task (Holzgartensteg, Stadt Regensburg).
AUFGABE: Prüfe, ob es NEUIGKEITEN zum geplanten Holzgartensteg (geplante Fuß-/Radbrücke zwischen Grieser Spitz und Maria-Beer-Platz / Weichs) gibt — seit dem letzten Check bzw. den letzten ~7 Tagen.
QUELLEN:
1) ALLRIS via Skill 'regensburg-stadtrat': Script /home/node/mop-skills/mop-skills/skills/regensburg-stadtrat/scripts/regensburg_ris.py — Befehle: search "Holzgartensteg" --limit 30 ; calendar --days 30 ; vorlage <ID> ; session <ID>. Achte auf NEUE Vorlagen, Beschlüsse, Anfragen und Sitzungstermine (Ausschuss für Stadtplanung, Verkehr und Wohnungsfragen / Stadtrat).
2) Lokale Medien via web_search: regensburg-digital.de, idowa.de, mittelbayerische.de, tvaktuell.com, regensburger-nachrichten.de.
FOKUS: neue Vorlagen/Beschlüsse, Ausschuss-/Stadtrattermine, Mittel/Budget, Planungsstand (Variante, Kosten, Termin), politische Positionen.
BEKANNTER STAND (nicht wiederholen, nur Abweichungen melden): 2020 aus Investitionsprogramm gestrichen ('beerdigt'); Comeback ab 2025 (Grüne/Verbände); Kommunalwahl 2026 mehrere Parteien dafür; Haushalt 2026: ~100.000 EUR Planungsmittel im Investitionsprogramm, Stadtrat-Beschluss 26.02.2026, Genehmigung Regierung der Oberpfalz 06.03.2026; Koalitionsvereinbarung 2026 mit Wiederaufnahme der Planungen.
AUSGABE: Kurz auf Deutsch an Moritz. Falls echte Neuigkeiten: 3-6 Bullets mit Quelle+Link. Falls NICHTS Neues: eine kurze Zeile, z.B. 'Holzgartensteg: keine neuen Entwicklungen diese Woche.' Kein Hintergrund-Recycling.