Ihr Agent meldete Erfolg.
Erzeugt hat er nichts.

Geplante Agenten scheitern leise. Ein Lauf, der nie startete, eine Schleife, die einen Tool-Fehler verschluckt und mit 0 endet, ein Modellaufruf, der nie zurückkommt. SteadyCron prüft das Ergebnis statt des Exit-Codes — und meldet sich, wenn kein echtes Resultat mehr eintrifft.

Keine Karte. Ein Agenten-Monitor gratis — mit allen Regeln.

So sah der Lauf aus

02:00  geplanter Lauf gestartet
02:04  Prozess beendet mit 0
02:04  ✓ als erfolgreich markiert

# out/digest.md → 0 Bytes
# verbrauchte Tokens: 84.300
# jemand alarmiert? nein

Das hätten Sie wissen müssen

02:00  /start          Lauf begann
02:04  Report: items=0
02:04  Regel: empty_result → Fehler

→ #ops-slack  nightly-digest fehlgeschlagen
  letzter guter Lauf: gestern 02:03

Bei einem unbeaufsichtigten Agenten sieht Stille wie Erfolg aus

Agent-Frameworks sind darauf gebaut, weiterzumachen. Ein Tool-Aufruf scheitert, das Modell entschuldigt sich und macht weiter, die Schleife endet sauber — ohne dass etwas geschrieben wurde. Der Prozess endet mit 0, weil er endete, nicht weil Arbeit geschah.

Unbeaufsichtigt zu laufen war der ganze Zweck, also liest niemand die Ausgabe. Der Scheduler meldet keinen toten Zeitplan, der Anbieter kein erschöpftes Budget, und der Agent nicht seinen eigenen leeren Lauf.

Der entscheidende Unterschied

Ein Agent, der Entwarnung meldet und null Durchsatz hat, ist nicht gesund — er ist symptomfrei.
Der Fehlermodus, für den diese Seite existiert
  • Exit-Code 0 ohne Artefakt — der häufigste Agenten-Fehler, und der, den jeder Uptime-Check bestätigt.
  • Der Lauf startete gar nicht: ein deaktivierter Workflow, eine schlafende Maschine, ein verworfenes Zeitplan-Event.
  • Ein Modellaufruf ohne Timeout blockiert den Lauf für Stunden, und die nächsten Läufe stauen sich dahinter.
  • Rate Limits, ein erschöpftes Budget oder ein rotierter API-Key beenden den heutigen Lauf früh — und den morgigen auch.
  • Eine abgekündigte Modell-ID oder ein geändertes Antwortformat bricht das Parsing im Zeitplan des Anbieters, nicht in Ihrem.

Erkannt über eine Zeitplan-Erwartung, nicht über einen Stacktrace

Tracing-Werkzeuge zeichnen auf, was ein Lauf getan hat. Keines kann einen Lauf aufzeichnen, der nie stattfand — es gibt keinen Trace. Dafür braucht es etwas, das von außen und nach der Uhr zusieht.

nightly-digest NIE GELAUFEN

Der Lauf fand nie statt

GitHub Actions deaktivierte den Workflow nach 60 Tagen ohne Repo-Aktivität. Drei Tage lang fiel es niemandem auf, denn ein Lauf, der nicht startet, erzeugt kein Log, keinen Fehler und keinen Trace.

erwartet um 02:00 täglich
letzter Erfolg vor 3 Tagen
überfällig seit 72 h

Nur eine externe Zeitplan-Erwartung erkennt eine Abwesenheit. Das ist der Fehler, den Ihr Observability-Stack strukturell nicht sehen kann.

ticket-triage LEER

Er lief — und erzeugte nichts

Das Such-Tool scheiterte, das Modell entschuldigte sich, die Schleife endete. Vier Minuten Tokens verbraucht, null Zeilen geschrieben — gemeldet als Erfolg, weil der Prozess ohne Exception endete.

abgeschlossen 02:04
Dauer 3 m 51 s
Zeilen geschrieben 0

Ihr Lauf meldet die Zahl; die Empty-Result-Regel macht aus einer Null einen Fehler samt Alarm. Sie müssen die Prüfung nicht selbst einbauen.

embedding-refresh HÄNGT

Er hing an einem Modellaufruf

Viele SDKs kommen ohne Request-Timeout. Eine blockierte Verbindung und der Lauf endet nie. Der /start-Ping kam an, /success nie.

/start empfangen 09:00:12
max. Dauer 30 Min
/success empfangen nie

Die Hänger-Erkennung macht aus einem blockierten Aufruf einen Alarm zu einer Frist, die Sie setzen — statt eines Laufs, der still nie endet.

Fünf Zeilen, wo auch immer Ihr Agent läuft

Pingen Sie beim Start, und pingen Sie Erfolg erst, nachdem Sie geprüft haben, dass die Ausgabe existiert. Diese zweite Hälfte ist der ganze Trick — sie macht aus einem leeren Lauf einen Alarm.

# Anthropic runs the schedule — but a routine that gets skipped, or
# finishes with nothing, tells nobody. Connect SteadyCron's MCP server
# and the agent reports its own runs with a tool call.

MCP server:  https://api.steadycron.com/mcp
Auth:        Bearer <your SteadyCron API key>

# Then, in the routine's prompt:

Call report_run_start with jobKey "nightly-digest" before you begin.
This is required — report_run is refused if no run is open.

Do the work. Write the result to out/digest.md.

When you are done, count what you actually produced and call report_run
with that count. If you produced nothing, report 0 — do not omit the
field, and do not round up.

    report_run { jobKey: "nightly-digest", itemsProduced: 42,
                 model: "claude-opus-5", tokensIn: 18400, tokensOut: 2100 }

# SteadyCron turns a 0 into a failed run and an alert. No curl to get
# wrong, and a tool call is far harder for the model to skip than a
# sentence in the prompt.

Grundlagen zu Pings, Kulanzzeit und Hänger-Erkennung in Heartbeat-Monitoring. Die ausführliche Anleitung je Plattform gibt es bislang nur auf Englisch.

Eine enge Frage, zuverlässig beantwortet

SteadyCron ist kein LLM-Tracing-Werkzeug und gibt sich nicht als eines aus. Es beobachtet den Lauf, nicht die Argumentation.

Was es tut

  • Alarmiert, wenn ein geplanter Lauf nie stattfand — der eine Fehler, den ein Trace nicht festhalten kann.
  • Alarmiert, wenn ein Lauf endet, ohne etwas erzeugt zu haben. Wir prüfen die Zahl, die Ihr Lauf meldet — Sie müssen das nicht selbst implementieren.
  • Alarmiert, wenn ein Lauf mehr kostet als Ihre Obergrenze — pro Lauf oder über den Monat.
  • Alarmiert, wenn Schritte oder Tool-Aufrufe auf eine Schleife hindeuten.
  • Alarmiert, wenn ein Lauf startet und nie endet, gegen eine von Ihnen gesetzte Maximaldauer.
  • Verfolgt die Kosten je Agent, mit Monatssumme pro Monitor.
  • Formt das Rauschen — Kulanzzeiten, Schwellen für Folgefehler, Ruhezeiten, Auto-Resolve.

Was es nicht tut

  • Span-Traces jedes Modellaufrufs und jeder Tool-Nutzung.
  • Prompt-Verwaltung, Datensätze oder LLM-as-Judge-Bewertung.
  • Antwortqualität bewerten oder Halluzinationen erkennen.
  • Erklären, warum das Modell eine bestimmte Entscheidung traf.

Dafür nehmen Sie ein Tracing-Werkzeug — Langfuse, LangSmith und Verwandte machen das gut. Legen Sie die Trace-URL in die Ping-Nutzlast, dann verlinkt Ihr Alarm direkt auf den Lauf. SteadyCron beantwortet die Fragen, die jene nicht können: lief er, endete er, kam etwas heraus — und was hat er gekostet?

Agentenläufe sind die sensibelsten Logs, die Sie haben

Ein Backup-Skript loggt „fertig“. Ein Agentenlauf trägt Prompts, abgerufene Dokumente, Tool-Argumente und alle Kundendaten, die durch das Kontextfenster gingen — und Sie schicken gerade eine Zusammenfassung davon an einen Monitoring-Anbieter.

SteadyCron läuft auf Hetzner-Servern in Deutschland, betrieben von einer deutschen Rechtsperson, unter einem Self-Service-AVV, den Sie ohne Vertriebsgespräch lesen und unterschreiben können. Und Sie entscheiden, was in den Ping kommt: hängen Sie eine Zeilenzahl an, nicht die Zeilen.

  • Hetzner, Deutschland
  • Deutsche Rechtsperson
  • Self-Service-AVV
  • Öffentliche Subprozessor-Liste
EU-Hosting und Datenresidenz

Richten Sie einen Monitor auf den heutigen Lauf

Heartbeat-Monitor anlegen, den Zeitplan setzen, den Ihr Agent halten soll, und den Ping ergänzen. Kommt das Ergebnis morgen nicht, wissen Sie es, bevor jemand fragt.

  • Kostenlos, keine Karte
  • 1 Agenten-Monitor gratis
  • EU-gehostet
  • Bezahlt ab 10 €/Monat