{
  "jobs": [
    {
      "id": "4733a436d99a",
      "name": "SRE Network Reconnaissance",
      "prompt": "Du bist der Infra-SRE Agent von Sch\u00f6n Consulting. F\u00fchre den w\u00f6chentlichen Network Reconnaissance Scan durch.\n\n1. Rufe den Scan-Skript auf: python3 /home/debian/.hermes/scripts/network-scan.py\n2. Lies die Ergebnisse aus /home/debian/.hermes/output/network_recon.json\n3. Erstelle einen professionellen SRE Report im CEO-Format f\u00fcr das Team.\n\nFormat:\n## \ud83d\udee1\ufe0f SRE Weekly Network Report \u2014 {date}\n\n### \ud83d\udd0d Summary\n- Total Hosts: X\n- Scan Duration: Xs\n- Segments: Hypervisor, Container, Smart Home\n\n### \ud83d\udccb Alive Hosts by Segment\n[compact table: IP | Ports | Service | Banner]\n\n### \u26a0\ufe0f Security Notes\n- [list any concerns like outdated SSH, open databases, unknown services]\n\n### \ud83c\udd95 New Services/Changes\n- [list notable changes from last week if detectable]\n\nHalte den Report knapp, datenbasiert und handlungsorientiert.",
      "skills": [
        "container-network-recon"
      ],
      "skill": "container-network-recon",
      "model": "custom/llama/model.gguf",
      "provider": "custom",
      "base_url": null,
      "script": "network-scan.py",
      "schedule": {
        "kind": "cron",
        "expr": "0 8 * * 0",
        "display": "0 8 * * 0"
      },
      "schedule_display": "0 8 * * 0",
      "repeat": {
        "times": null,
        "completed": 8
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-04-21T07:27:10.049993+00:00",
      "next_run_at": "2026-06-21T08:00:00+00:00",
      "last_run_at": "2026-06-14T08:30:23.352384+00:00",
      "last_status": "ok",
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "telegram:-5265906503",
      "origin": {
        "platform": "telegram",
        "chat_id": "223926918",
        "chat_name": "D S",
        "thread_id": null
      }
    },
    {
      "id": "f773f8c23230",
      "name": "Rechnungen-Organizer",
      "prompt": "Du bist der E-Mail-Organisator von Sch\u00f6n Consulting. Deine Aufgabe: Rechnungen und Bestellbest\u00e4tigungen intelligent und lernend einsortieren.\n\n## WICHTIG: Verwende IMMER diese genauen Befehle und APIs\n\n### E-Mails abrufen\n```bash\n# Liste letzte 100 E-Mails im JSON-Format ab\nhimalaya envelope list --folder INBOX --page-size 50 --output json 2>/dev/null\n# Falls das nicht funktioniert, nutze:\nhimalaya query search \"from:@*\" --folder INBOX 2>/dev/null\n```\n\n### Ordner verwalten\n```bash\n# Ordner erstellen\nhimalaya folder create \"Rechnungen_2026_05\" 2>/dev/null\nhimalaya folder create \"Rechnungen_2026_05/Bestellungen_2026_05\" 2>/dev/null\n\n# E-Mails verschieben\nhimalaya message move <IMAP-ID> \"Rechnungen_2026_05\" 2>/dev/null\nhimalaya message move <IMAP-ID> \"Rechnungen_2026_05/Bestellungen_2026_05\" 2>/dev/null\n```\n\n## Vorgehensweise\n\n### 1. Lernstand pr\u00fcfen\nLade die Datei `~/.hermes/email-organizer/learning.json` falls vorhanden:\n```bash\ncat ~/.hermes/email-organizer/learning.json 2>/dev/null || echo '{\"corrections\":[],\"patterns\":{}}'\n```\n\n### 2. Neue E-Mails LLM-basiert analysieren\nF\u00fcr jede E-Mail im Posteingang:\n- Analysiere **Absender, Betreff UND Textk\u00f6rper** (nicht nur Keywords!)\n- Entscheide **inhaltlich**:\n  - **Rechnung**: Fakturierte Leistung (Rechnungsnummer, Gesamtbetrag, Steuern, F\u00e4lligkeitsdatum)\n  - **Bestellbest\u00e4tigung**: Bestellbest\u00e4tigung (Bestellnummer, Artikel, aber KEINE Rechnung)\n  - **Nichts davon**: Newsletter, Spam, private Mails \u2192 ignorieren\n\n### 3. Einsortierung\n- **Rechnungen** \u2192 `Rechnungen_jjjj_mm` (z.B. `Rechnungen_2026_05`)\n- **Bestellbest\u00e4tigungen** \u2192 `Rechnungen_jjjj_mm/Bestellungen_jjjj_mm`\n- Erstelle Ordner falls nicht existent (BEVOR du Mails verschiebst!)\n- **Kopiere NICHT, verschiebe mit `message move`**\n\n### 4. Lernen aus manueller Sortierung\n- Wenn der Nutzer in einer vorherigen Nachricht Korrekturen gab (z.B. \"Mail von X geh\u00f6rt nach Y\"), trage sie in `learning.json` ein\n- \u00dcberpr\u00fcfe bestehende Ordner auf Muster (welche Absender gehen wohin?)\n- Speichere erlernte Regeln in `learning.json`\n\n### 5. Report\nKompakte Ausgabe:\n- Gescannte Mails: X\n- Einsortiert: Y Rechnungen, Z Bestellungen\n- Neue Ordner: A\n- Ignoriert: B (Begr\u00fcndung)\n- Lern-Updates: C\n\n## Fehlerbehandlung\n- Falls himalaya nicht antwortet: Berichle den Fehler, versuche es nicht erneut\n- Falls Ordner-Erstellung fehlschl\u00e4gt: Versuche, den Ordner direkt \u00fcber eine IMAP-Verbindung zu erstellen\n- Nie E-Mails l\u00f6schen oder endg\u00fcltig verschieben",
      "skills": [],
      "skill": null,
      "model": "vllm/gpt-oss-120b",
      "provider": "noris",
      "base_url": null,
      "script": null,
      "schedule": {
        "kind": "cron",
        "expr": "0 9 * * *",
        "display": "0 9 * * *"
      },
      "schedule_display": "0 9 * * *",
      "repeat": {
        "times": 500,
        "completed": 56
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-04-26T16:34:56.913960+00:00",
      "next_run_at": "2026-06-20T09:00:00+00:00",
      "last_run_at": "2026-06-19T09:00:41.353048+00:00",
      "last_status": "error",
      "last_error": "RuntimeError: Error code: 403 - {'type': 'model_blocked', 'is_bifrost_error': False, 'status_code': 403, 'error': {'message': \"Model 'gpt-oss-120b' is not allowed for this virtual key\"}, 'extra_fields': {'provider': 'vllm', 'original_model_requested': 'gpt-oss-120b', 'resolved_model_used': 'gpt-oss-120b', 'request_type': 'chat_completion_stream'}}",
      "last_delivery_error": null,
      "deliver": "origin",
      "origin": {
        "platform": "telegram",
        "chat_id": "223926918",
        "chat_name": "D S",
        "thread_id": null
      }
    },
    {
      "id": "722416c6ce96",
      "name": "memory-sync-daily",
      "prompt": "",
      "skills": [],
      "skill": null,
      "model": null,
      "provider": null,
      "base_url": null,
      "script": "memory-sync.sh",
      "no_agent": true,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "0 22 * * *",
        "display": "0 22 * * *"
      },
      "schedule_display": "0 22 * * *",
      "repeat": {
        "times": null,
        "completed": 42
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-05-08T18:04:31.119126+00:00",
      "next_run_at": "2026-06-19T22:00:00+00:00",
      "last_run_at": "2026-06-18T22:00:56.843402+00:00",
      "last_status": "ok",
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "origin",
      "origin": {
        "platform": "telegram",
        "chat_id": "223926918",
        "chat_name": "D S",
        "thread_id": null
      },
      "enabled_toolsets": null,
      "workdir": null
    },
    {
      "id": "3580ba521a73",
      "name": "nutrition-plan-generator",
      "prompt": "\ud83c\udf7d\ufe0f DU BIST NUTRITION-COACH. Generiere jetzt den finalen Essensplan + Einkaufsliste.\n\n**SCHRITT 1:** Lese die Interview-Daten: ~/.hermes/profiles/nutrition-coach/plan_data/current_interview.json\n**SCHRITT 2:** Lese das Wetter f\u00fcr Freystadt (92342) f\u00fcr diese Woche von Open-Meteo API.\n**SCHRITT 3:** Scrape die ausgew\u00e4hlten Rezepte (URLs in JSON) mithilfe von recipe-scrapers.\n\n**SCHRITT 4:** Erstelle 2 Markdown-Dateien:\n- ~/Documents/Essensplanung/KW{XX}-{YYYY}_Plan.md \u2014 T\u00e4gliche \u00dcbersicht Mo\u2013So mit: Abendessen-Rezept, Mittagessen-Hinweis (Reste oder nein), Cleo-Anpassung, Prep-Zeit\n- ~/Documents/Essensplanung/KW{XX}-{YYYY}_Einkaufsliste.md \u2014 Aldi-konform gruppiert, Mengen aggregiert\n\n**HARTE REGELN:**\n- Cleo bekommt NIE Reste zum Abendessen (jeden Tag frisch)\n- Reste NUR f\u00fcr Dominik+Sarah, NUR als Mittagessen unter der Woche\n- Meal-Prep nur Di und Do\n- Einkauf Samstag vormittag bei Aldi\n\nWenn interview_status != \"completed\", poste: \"\u23f3 Chef, das Interview ist noch nicht fertig. Bitte heute Abend abschlie\u00dfen, dann generiere ich morgen den Plan.\"\n\nWenn alles OK: Poste \"\u2705 Plan steht! 2 Dateien erstellt. Viel Spa\u00df beim Einkaufen Samstag!\"",
      "skills": [],
      "skill": null,
      "model": null,
      "provider": null,
      "base_url": null,
      "script": "nutrition-plan-generator-v3.py",
      "no_agent": true,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "0 19 * * 5",
        "display": "0 19 * * 5"
      },
      "schedule_display": "0 19 * * 5",
      "repeat": {
        "times": null,
        "completed": 2
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-06-17T19:42:25.866700+00:00",
      "next_run_at": "2026-06-26T19:00:00+00:00",
      "last_run_at": "2026-06-19T19:00:06.771469+00:00",
      "last_status": "ok",
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "telegram:Schoen Inc",
      "origin": {
        "platform": "telegram",
        "chat_id": "223926918",
        "chat_name": "D S",
        "thread_id": null
      },
      "enabled_toolsets": null,
      "workdir": null
    },
    {
      "id": "36b4f572cfbc",
      "name": "nutrition-interview",
      "prompt": "\ud83c\udfaf DU BIST NUTRITION-COACH (Interview-Modus).\n\n**AUFGABE:** Starte das w\u00f6chentliche Essensplanungs-Interview. Stelle 5\u20137 kurze, pr\u00e4gnante Fragen an die Familie Sch\u00f6n.\n\n**HINTERGRUND WISSEN:**\n- Familie: Dominik (CEO, -15kg Ziel), Sarah (liebt Kohlenhydrate), Cleo (4J, mag Pasta/Gem\u00fcse)\n- Pr\u00e4ferenzen: Asiatisch bevorzugt, Low-Carb f\u00fcr Dominik, Cleo-freundlich\n- Rhythmus: Mo/We/Fr HO (3 Portionen), Di/Do Meal-Prep geeignet, Sa/Sonntag 2 warme Mahlzeiten\n- Aldi-Einkauf Samstag morgens\n\n**FRAGEN-STIL:**\n- Kurze, direkte Fragen (max. 1 Zeile)\n- Keine Aufz\u00e4hlungen, kein Markdown-Wirrwarr\n- Frage NACH EINANDER, nicht alle auf einmal\n- Nutze kurze Antwort-Optionen wo sinnvoll\n\n**WICHTIGE FRAGEN (select & order based on context):**\n1. Wie geht's der Familie diese Woche? Stimmung / Stress / Laune?\n2. Home-Office-Tage? (Dominik / Sarah)\n3. Besondere Termine / Events? (Geburtstage, Besuche, sp\u00e4te Meetings)\n4. K\u00fcchen-Status: Was ist auf Lager? Was muss weg?\n5. Wetterpr\u00e4ferenzen: Lust auf was Warmes trotz Hitze? Oder nur Salat?\n6. Essensw\u00fcnsche / Cravings / Was gibt es auf keinen Fall?\n7. Impact (1-10): Wie wichtig ist dir diese Woche der Plan? Oder \"einfach nur was zum Essen\"?\n\n**SPEZIELL:** Wenn du Hinweise aus dem Chatverlauf findest (z.B. jemand sagte \"Ich habe Appetit auf...\"), nutze das!\n\n**AUSGABE:**\n- Stelle die Fragen so, dass die Familie direkt antworten kann\n- Ende mit: \"Antwortet einfach auf diese Nachricht \u2014 ich sammle alles zusammen und erstelle Freitag den Plan.\"\n\nSpeichere alle Antworten NICHT selbst \u2014 das ist Aufgabe des CEO oder des Plan-Generators am Freitag.",
      "skills": [],
      "skill": null,
      "model": null,
      "provider": null,
      "base_url": null,
      "script": null,
      "no_agent": false,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "0 18 * * 3",
        "display": "0 18 * * 3"
      },
      "schedule_display": "0 18 * * 3",
      "repeat": {
        "times": null,
        "completed": 0
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-06-17T21:10:45.112897+00:00",
      "next_run_at": "2026-06-24T18:00:00+00:00",
      "last_run_at": null,
      "last_status": null,
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "telegram:Schoen Inc",
      "origin": {
        "platform": "telegram",
        "chat_id": "223926918",
        "chat_name": "D S",
        "thread_id": null
      },
      "enabled_toolsets": [
        "web",
        "file"
      ],
      "workdir": null
    },
    {
      "id": "c77127dd9130",
      "name": "chefkoch-real-recipes-refill",
      "prompt": "Check the Chefkoch real recipe database at /home/debian/.hermes/profiles/nutrition-coach/real_recipes.jsonl and ensure the total recipe count reaches the target of 25000 lines. Report current count, delta, and whether the target is met. If below target, trigger the scraper to run and append missing recipes.",
      "skills": [],
      "skill": null,
      "model": "moonshotai/kimi-k2.6",
      "provider": "noris",
      "base_url": null,
      "script": null,
      "no_agent": false,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "0 6 * * *",
        "display": "0 6 * * *"
      },
      "schedule_display": "0 6 * * *",
      "repeat": {
        "times": null,
        "completed": 5
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-06-18T05:23:21.427749+00:00",
      "next_run_at": "2026-06-20T06:00:00+00:00",
      "last_run_at": "2026-06-19T06:12:27.049398+00:00",
      "last_status": "ok",
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "origin",
      "origin": {
        "platform": "telegram",
        "chat_id": "223926918",
        "chat_name": "D S",
        "thread_id": null
      },
      "enabled_toolsets": null,
      "workdir": null
    },
    {
      "id": "a884c342c49e",
      "name": "chefkoch-scraper-watchdog",
      "prompt": "",
      "skills": [],
      "skill": null,
      "model": null,
      "provider": null,
      "base_url": null,
      "script": "start_scraper_v4.sh",
      "no_agent": true,
      "context_from": null,
      "schedule": {
        "kind": "cron",
        "expr": "*/10 * * * *",
        "display": "*/10 * * * *"
      },
      "schedule_display": "*/10 * * * *",
      "repeat": {
        "times": null,
        "completed": 210
      },
      "enabled": true,
      "state": "scheduled",
      "paused_at": null,
      "paused_reason": null,
      "created_at": "2026-06-18T09:27:20.890661+00:00",
      "next_run_at": "2026-06-19T20:30:00+00:00",
      "last_run_at": "2026-06-19T20:20:09.671325+00:00",
      "last_status": "ok",
      "last_error": null,
      "last_delivery_error": null,
      "deliver": "local",
      "origin": {
        "platform": "telegram",
        "chat_id": "223926918",
        "chat_name": "D S",
        "thread_id": null
      },
      "enabled_toolsets": null,
      "workdir": null
    }
  ],
  "updated_at": "2026-06-19T20:20:09.671840+00:00"
}