Skip to main content
Cron is de ingebouwde planner van de Gateway. Cron bewaart taken, wekt de agent op het juiste moment en kan uitvoer afleveren bij een chatkanaal, een Webhook of nergens.

Snel aan de slag

1

Een eenmalige herinnering toevoegen

2

Je taken controleren

3

Uitvoeringsgeschiedenis bekijken

Hoe Cron werkt

  • Cron wordt binnen het Gateway-proces uitgevoerd, niet binnen het model. De Gateway moet actief zijn om planningen te activeren.
  • Taakdefinities, runtimestatus en uitvoeringsgeschiedenis blijven bewaard in de gedeelde SQLite-statusdatabase van OpenClaw, zodat planningen bij herstarts niet verloren gaan.
  • Elke Cron-uitvoering maakt een achtergrondtaak-record.
  • Eenmalige taken (--at) worden na succes standaard automatisch verwijderd; geef --keep-after-run door om ze te behouden.
  • Tijdslimiet per uitvoering: --timeout-seconds indien ingesteld. Anders worden geïsoleerde/losgekoppelde agentbeurttaken begrensd door Crons eigen waakhond van 60 minuten, voordat de onderliggende time-out voor de agentbeurt (agents.defaults.timeoutSeconds, standaard 48 uur) ooit van toepassing zou zijn; opdrachttaken hebben standaard een limiet van 10 minuten en scriptpayloads van 5 minuten.
  • Bij het starten van de Gateway worden achterstallige geïsoleerde agentbeurttaken opnieuw gepland in plaats van onmiddellijk opnieuw afgespeeld, zodat het initialisatiewerk voor modellen en tools buiten het venster voor kanaalverbindingen blijft.
  • Als je openclaw agent vanuit systeem-Cron of een andere externe planner aanstuurt, omhul dit dan met een escalatie die het proces geforceerd beëindigt, ook al verwerkt de CLI SIGTERM/SIGINT al. Door de Gateway ondersteunde uitvoeringen vragen de Gateway om geaccepteerde uitvoeringen af te breken; --local-uitvoeringen krijgen hetzelfde afbreeksignaal. Geef voor GNU timeout de voorkeur aan timeout -k 60 600 openclaw agent ... boven alleen timeout 600 ... — de waarde -k is het vangnet als het proces niet tijdig kan worden afgerond. Gebruik voor systemd-eenheden een SIGTERM-stopsignaal met een respijtperiode (TimeoutStopSec) vóór de definitieve beëindiging. Als je een --run-id hergebruikt terwijl de oorspronkelijke Gateway-uitvoering nog actief is, wordt het duplicaat als actief gemeld in plaats van dat een tweede uitvoering wordt gestart.
  • Geïsoleerde uitvoeringen proberen bij voltooiing zo goed mogelijk bijgehouden browsertabbladen/-processen voor hun cron:<jobId>-sessie te sluiten en ruimen alle voor de taak gemaakte gebundelde MCP-runtime-instanties op via hetzelfde gedeelde afbraakpad dat wordt gebruikt voor uitvoeringen in de hoofdsessie en aangepaste sessies. Opruimfouten worden genegeerd, zodat het Cron-resultaat leidend blijft.
  • Geïsoleerde uitvoeringen met de beperkte toestemming voor zelfopruiming van Cron kunnen de plannerstatus lezen, een op zichzelf gefilterde lijst met alleen hun eigen taak en de uitvoeringsgeschiedenis van die taak, en mogen uitsluitend hun eigen taak verwijderen.
  • Geïsoleerde uitvoeringen beschermen tegen verouderde bevestigingsantwoorden: als het eerste resultaat slechts een tussentijdse statusupdate is (on it, pulling everything together en vergelijkbare aanwijzingen) en geen onderliggende subagent nog verantwoordelijk is voor het definitieve antwoord, vraagt OpenClaw één keer opnieuw om het daadwerkelijke resultaat voordat dit wordt afgeleverd.
  • Gestructureerde metadata over geweigerde uitvoering (waaronder node-host-UNAVAILABLE-wrappers waarvan de geneste fout begint met SYSTEM_RUN_DENIED of INVALID_REQUEST) wordt herkend, zodat een geblokkeerde opdracht niet als een geslaagde uitvoering wordt gemeld, terwijl gewone assistentproza niet ten onrechte als een weigering wordt beschouwd.
  • Agentfouten op uitvoeringsniveau tellen als taakfouten, zelfs zonder antwoordpayload, zodat model-/providerfouten de fouttellers verhogen en foutmeldingen activeren in plaats van de taak als geslaagd af te handelen.
  • Wanneer een taak timeoutSeconds bereikt, breekt Cron de uitvoering af en geeft deze een kort opruimvenster. Als de uitvoering niet wordt afgerond, wist door de Gateway beheerde opruiming geforceerd het sessie-eigenaarschap van die uitvoering voordat Cron de time-out registreert, zodat chatwerk in de wachtrij niet vastloopt achter een verouderde verwerkende sessie.
  • Vastlopers tijdens configuratie/opstart krijgen een fasespecifieke time-out (bijvoorbeeld cron: isolated agent setup timed out before runner start of cron: isolated agent run stalled before execution start (last phase: context-engine)). Deze waakhonden dekken ingebedde en door de CLI ondersteunde providers, zelfs voordat hun externe CLI-proces start, en worden onafhankelijk van lange timeoutSeconds-waarden begrensd, zodat fouten bij een koude start, authenticatie of context snel zichtbaar worden.
Reconciliatie van Cron-taken wordt primair door de runtime beheerd en secundair ondersteund door duurzame geschiedenis: een actieve Cron-taak blijft actief zolang de Cron-runtime die taak nog als actief bijhoudt, zelfs als er nog een oude rij voor een onderliggende sessie bestaat. Zodra de runtime niet langer eigenaar is van de taak en een respijtperiode van 5 minuten is verstreken, controleert onderhoud de bewaarde uitvoeringslogboeken en taakstatus voor de overeenkomende cron:<jobId>:<startedAt>-uitvoering. Een eindresultaat daarin voltooit het taakregister; anders kan door de Gateway beheerd onderhoud de taak markeren als lost. Een offline CLI-audit kan herstel uitvoeren op basis van duurzame geschiedenis, maar de eigen lege verzameling actieve taken in het proces bewijst niet dat een door de Gateway beheerde uitvoering verdwenen is.

Planningstypen

Tijdstippen zonder tijdzone worden als UTC behandeld. Voeg --tz America/New_York toe om een --at-datum/tijd zonder offset in die IANA-tijdzone te interpreteren, of om daarin een Cron-expressie te evalueren. Cron-expressies zonder --tz gebruiken de tijdzone van de Gateway-host. --tz is niet geldig met --every of --on-exit. Terugkerende expressies op het hele uur (minuut 0 met een jokerteken in het uurveld) worden automatisch over maximaal 5 minuten gespreid om belastingpieken te verminderen. Gebruik --exact om exacte timing af te dwingen, of --stagger 30s voor een expliciet venster (alleen Cron-planningen).

Migratie van Heartbeat-taken

Oudere Heartbeat-kladgegevens ondersteunden een gestructureerd tasks:-blok. Voer na de upgrade openclaw doctor --fix uit om elk item om te zetten in een gewone, bewerkbare Cron-taak voor de hoofdsessie. Doctor behoudt het interval en het vorige tijdstip van de laatste uitvoering, maakt de taken voordat het blok wordt verwijderd en brengt dezelfde declaratiesleutels bij een nieuwe uitvoering veilig naar dezelfde toestand. Deze gemigreerde taken bevatten openbare systemEvent-payloads, zodat openclaw cron list, get, edit en remove plus de Cron-tool ze net als andere taken beheren. Voor hun uitvoering wordt de beveiligde wekactie voor Heartbeat-taken gebruikt: actieve uren, minimale tussenruimte, overstromingsbeheer en nieuwe pogingen bij drukte blijven van toepassing, terwijl Cron het onafhankelijke ritme van elke taak beheert. Taken die in hetzelfde samenvoegvenster vervallen, kunnen één Heartbeat-beurt delen. Een geplande uitvoering buiten de actieve uren van Heartbeat wordt overgeslagen en opnieuw geprobeerd bij de volgende uitvoering van de taak. Heartbeat-kladgegevens zijn nu uitsluitend tekst voor bewaking. Runtime-Heartbeats ontleden tasks:-tekst niet als planningen; maak nieuw terugkerend werk met Cron.

Streambronnen

Een streamplanning houdt een door een beheerder opgestelde argv-opdracht actief onder de Gateway en activeert de taak op basis van regels uit stdout en stderr. Streamplanningen zijn gebeurtenisgestuurd, nooit tijdsgebonden en vereisen cron.triggers.enabled: true, omdat de langlopende opdracht dezelfde vertrouwensklasse voor onbeheerde uitvoering heeft als triggerscripts. Als je de taak uitschakelt of verwijdert, wordt het proces gestopt; bij het afsluiten van de Gateway wordt gewacht tot de procesboom is afgebroken. Snelle fouten worden opnieuw gestart met Crons ingebouwde foutvertraging. Vijf opeenvolgende uitvoeringen die korter dan 60 seconden duren, laten de taak in een foutstatus achter en gebruiken het normale waarschuwingspad voor fouten; schakel de taak handmatig opnieuw in om de herstartlimiet te wissen.
mode: "line" (de standaardinstelling) accepteert elke regel. mode: "match" accepteert alleen regels die overeenkomen met de gecompileerde match-regex. Een batch wordt gesloten na batchMs stilte (standaard 250 ms, begrensd op 50–5000) of bij maxBatchBytes (standaard 16384, begrensd op 1024–65536). Bij de bytegrens eindigt de batch met [truncated]. De overeenkommodus evalueert altijd volledige regels aan de hand van hun volledige tekst, zelfs voorbij maxBatchBytes (alleen de afgeleverde batch wordt afgekapt); een regel die bij de begrensde limiet voor ruwe invoer wordt afgekapt, is slechts een voorvoegsel en wordt daarom als niet-overeenkomend behandeld, zodat een aan het einde verankerd patroon niet op de afkapping kan worden geactiveerd. De batch wordt toegevoegd aan de tekst van de systeemgebeurtenis of het agentbeurtbericht. Opdrachtpayloads worden voor streamplanningen geweigerd, omdat het broncommando en het payloadcommando anders dubbelzinnig proceseigenaarschap zouden hebben. Per taak worden slechts één payloadactivering en één begrensde wachtende batch bewaard. Regels die binnenkomen terwijl een payload wordt uitgevoerd, of voordat het ingebouwde triggerinterval van 30 seconden is verstreken, worden samengevoegd in die wachtende batch in plaats van een onbegrensde wachtrij op te bouwen. Eén geserialiseerde eigenaar registreert weigeringen door de poort, payloadfouten en verzendingen terwijl de taak niet actief is in streamDroppedBatches; begrensde samenvoegingen verhogen streamCoalescedBatches. Mislukte payloads worden niet opnieuw geprobeerd, omdat ze mogelijk niet idempotent zijn. Een logische bronidentiteit blijft stabiel tijdens herstarts van bewaakte onderliggende processen, maar wordt vervangen wanneer de bron wordt uitgeschakeld, verwijderd of vervangen, zodat batches in de wachtrij van de buiten gebruik gestelde bron niet kunnen worden geactiveerd, zelfs niet na een bewerking van A naar B naar A. Nadat het stoppen is voltooid, hebben late callbacks van een oud onderliggend proces geen effect. V1 bevat geen ingebouwde WebSocket-bron; overbrug er een met een argv-opdracht zoals websocat wss://example.invalid/events. Wanneer een streamtaak ook trigger.script heeft, wordt de poort eenmaal per gesloten batch uitgevoerd. De huidige batch is beschikbaar als de diep bevroren trigger.streamBatch-tekenreeks naast trigger.state. fire: false verwijdert die batch nadat de poortstatus is bewaard. fire: true behoudt de bestaande semantiek van triggerberichten en voegt vervolgens de batch toe aan de resulterende payload. Een streamtaak kan in plaats daarvan een scriptpayload zonder voorwaardepoort gebruiken; dat script ontvangt de batch via dezelfde trigger.streamBatch-waarde. Het combineren van een scriptpayload met een voorwaardepoort wordt geweigerd, omdat beide eigenaar zouden zijn van het bewaarde trigger.state-slot.

Dynamisch ritme (dosering)

Terugkerende taken kunnen pacing.min en/of pacing.max instellen op duurtekenreeksen zoals 15m of 4h; er is ten minste één grens vereist. Gebruik --pacing-min en --pacing-max met cron add|edit (--clear-pacing verwijdert beide grenzen). Tijdens een geïsoleerde uitvoering kan een getemporiseerde taak de tool cron aanroepen met action: "next_check" en in: "30m". Het voorstel is alleen van toepassing op die momenteel uitgevoerde taak en wordt gemeten vanaf de succesvolle voltooiing van de uitvoering. OpenClaw begrenst dit stilzwijgend tot de geconfigureerde limieten. Temporisering zonder voorstel laat het normale schema ongewijzigd. Mislukte uitvoeringen, uitvoeringen met een time-out en overgeslagen uitvoeringen verwerpen het voorstel, zodat bestaand gedrag voor nieuwe pogingen en foutgerelateerde back-off voorrang krijgt. Het handmatig afdwingen van een terugkerende taak valt buiten de normale planning en behoudt het wachtende natuurlijke of getemporiseerde tijdslot. Voor voorwaardelijk geactiveerde taken blijft het ingebouwde minimuminterval een ondergrens, zelfs wanneer een voorstel om een eerdere controle vraagt.

Dag van de maand en dag van de week gebruiken OF-logica

Cron-expressies worden geparseerd door croner. Wanneer zowel het veld voor de dag van de maand als dat voor de dag van de week geen jokerteken bevat, is er volgens croner een overeenkomst wanneer een van beide velden overeenkomt, niet wanneer beide overeenkomen. Dit is standaardgedrag van Vixie cron.
Dit wordt ongeveer 5-6 keer per maand geactiveerd in plaats van 0-1 keer per maand. Gebruik croners dag-van-de-weekmodifier + (0 9 15 * +1) om beide voorwaarden te vereisen, of plan op basis van het ene veld en controleer het andere in de prompt of opdracht van je taak.

Gebeurtenistriggers (conditiebewakers)

Een gebeurtenistrigger voegt een headless conditiescript toe aan een schema van het type every, cron of stream. Tijdschema’s evalueren het wanneer het tijdstip is aangebroken; streamschema’s evalueren het voor elke afgesloten batch. Cron voert de normale payload alleen uit wanneer het script fire: true retourneert:
Het script moet { fire, message?, state? } retourneren. De vorige JSON-status is beschikbaar als de diep bevroren trigger.state; streamgates ontvangen ook de huidige batch als trigger.streamBatch. Retourneer een nieuwe waarde voor state om deze persistent op te slaan. De status is beperkt tot 16 KB. Wanneer een activeringsresultaat message bevat, voegt cron dit vóór de uitvoering toe aan de tekst van de systeemgebeurtenis of het agentbericht. once: true schakelt de taak uit na de eerste succesvol geactiveerde payload. fire: false slaat de evaluatiestatus en tellers persistent op en plant vervolgens opnieuw zonder uitvoeringsgeschiedenis aan te maken. Als de uitvoering van een geactiveerde payload mislukt, wordt de geretourneerde state niet persistent opgeslagen — de volgende evaluatie ziet de vorige status en kan opnieuw worden geactiveerd. Schrijf scripts daarom als alleen-lezencontroles en houd acties in de payload. Triggerschema’s hebben een ingebouwd minimuminterval van 30 seconden. Elke evaluatie heeft een wandklokbudget van 30 seconden en maximaal 5 toolaanroepen. Ontwerp bewakers rond actiegerichte status, niet alleen rond succes: een bewaker die stilvalt wanneer de controle mislukt of een time-out bereikt, lijkt gezond terwijl hij defect is. Vergelijk de waarneming met trigger.state en retourneer een nieuwe status om duplicaten te voorkomen; vertrouw niet op het geheugen van het model of proces. Maak bij activering message zelfstandig begrijpelijk, omdat dit de volledige gebeurteniscontext van de geactiveerde uitvoering wordt.
Als je cron.triggers.enabled inschakelt, mogen zowel scripts voor voorwaardelijke triggers als script-payloads headless worden uitgevoerd met het volledige toolbeleid van de eigenaaragent, inclusief exec. Beschouw dit als uitvoering van code zonder toezicht met de machtigingen van die agent; laat dit uitgeschakeld tenzij elke agent die cron-taken mag maken dienovereenkomstig wordt vertrouwd.
Maak een bewaker vanuit een lokaal scriptbestand (- leest het script uit stdin):

Payloads

Elke taak bevat precies één payloadtype, gekozen via een vlag: Een aanvullend payloadtype, heartbeat, is systeemeigendom: de Gateway convergeert naar één Heartbeat-bewakingstaak per agent waarvoor Heartbeat is ingeschakeld (zie Heartbeat). Deze verschijnt in cron list --all, maar kan niet via de CLI of API worden gemaakt of bewerkt. De Heartbeat-configuratie wordt bij het opstarten, bij het opnieuw laden van de configuratie of door openclaw doctor --fix doorgeschreven naar het persistent opgeslagen bewakingsschema. Wanneer cron is uitgeschakeld, tikt de bewaker niet en wordt er geen alternatieve Heartbeat-timer uitgevoerd.

Opties voor agentbeurten

string
vereist
Prompttekst (vereist voor geïsoleerde taken, taken in de huidige sessie en taken in aangepaste sessies).
string
Modeloverride; moet worden herleid tot een toegestaan model, anders mislukt de uitvoering met een validatiefout.
string
Lijst met fallbackmodellen per taak, bijvoorbeeld --fallbacks openai/gpt-5.6-sol,openrouter/meta-llama/llama-3.3-70b-instruct:free. Geef --fallbacks "" door voor een strikte uitvoering zonder fallbacks.
boolean
Verwijdert bij cron edit de fallbackoverride per taak, zodat de taak de geconfigureerde fallbackprioriteit volgt. Kan niet worden gecombineerd met --fallbacks.
boolean
Verwijdert bij cron edit de modeloverride per taak, zodat de taak de normale prioriteit voor cronmodellen volgt (opgeslagen cron-sessieoverride, anders agent-/standaardmodel). Kan niet worden gecombineerd met --model.
string
Override voor het denkniveau (off|minimal|low|medium|high|xhigh|adaptive|max|ultra). De beschikbare niveaus zijn nog steeds afhankelijk van het geselecteerde model en de agentruntime.
boolean
Verwijdert bij cron edit de denkoverride per taak. Kan niet worden gecombineerd met --thinking.
boolean
Sla het injecteren van bootstrapbestanden voor de werkruimte over.
string
Beperk welke tools de taak kan gebruiken, bijvoorbeeld --tools exec,read.
Nieuwe taken die tools kunnen uitvoeren, slaan altijd een expliciet toolbeleid op. Taken die door een agent worden gemaakt, zijn beperkt tot de tools die beschikbaar zijn voor de aanmakende beurt, en de agent kan de opgeslagen lijst niet uitbreiden. Taken die door een geverifieerde operator zonder --tools worden gemaakt, slaan een onbeperkt *-beleid op; cron edit --clear-tools herstelt dat expliciete onbeperkte beleid. Bestaande taken van vóór de invoering van een expliciet toolbeleid behouden hun huidige gedrag totdat hun toolbeleid expliciet wordt bewerkt of de taak opnieuw wordt gemaakt. --model stelt het primaire model van de taak in; het vervangt geen /model-override van een sessie, zodat geconfigureerde fallbackketens er nog steeds bovenop worden toegepast. Een niet-herleidbaar of niet-toegestaan model laat de uitvoering mislukken met een expliciete validatiefout in plaats van stilzwijgend terug te vallen op de standaardwaarde. Als een taak --model heeft maar geen expliciete of geconfigureerde fallbacklijst, geeft OpenClaw een lege fallbackoverride door in plaats van stilzwijgend het primaire model van de agent toe te voegen als verborgen doel voor een nieuwe poging. Prioriteit voor modelselectie bij geïsoleerde taken, van hoog naar laag:
  1. Payload model per taak (expliciete configuratie; een niet-toegestaan model laat de uitvoering mislukken)
  2. Modeloverride van de Gmail-hook (alleen wanneer de uitvoering afkomstig is van Gmail en die override is toegestaan)
  3. Door de gebruiker geselecteerde, opgeslagen modeloverride voor de cron-sessie
  4. Modelselectie van de agent/standaardselectie
De snelle modus volgt de herleide actieve selectie. Als de configuratie van het geselecteerde model params.fastMode bevat, gebruikt geïsoleerde cron dit standaard; een opgeslagen fastMode-override van de sessie (en vervolgens een fastModeDefault van de agent) heeft in beide richtingen nog steeds voorrang op de modelconfiguratie. De automatische modus gebruikt de params.fastAutoOnSeconds-grenswaarde van het model, met standaard 60 seconden. Als tijdens een uitvoering een actieve overdracht voor een modelwissel plaatsvindt, probeert cron het opnieuw met de gewisselde provider/het gewisselde model en slaat die selectie (en een eventueel nieuw verificatieprofiel) persistent op voor de actieve uitvoering. Nieuwe pogingen zijn begrensd: na de eerste poging plus 2 nieuwe pogingen wegens een wissel breekt cron af in plaats van te blijven herhalen. Voordat een geïsoleerde uitvoering begint, controleert OpenClaw bereikbare lokale eindpunten voor geconfigureerde api: "ollama"- en api: "openai-completions"-providers waarvan baseUrl loopback, privénetwerk of .local is. Deze voorafgaande controle doorloopt de geconfigureerde fallbackketen van de taak en markeert de uitvoering pas als skipped wanneer elke kandidaat onbereikbaar is; --fallbacks "" beperkt deze doorloop strikt tot alleen het primaire model. Een niet-beschikbaar eindpunt registreert de uitvoering als skipped met een duidelijke foutmelding in plaats van een modelaanroep te starten. Het resultaat wordt per eindpunt 5 minuten gecachet (niet per taak of model), zodat veel gelijktijdig geplande taken die dezelfde niet-beschikbare lokale Ollama-/vLLM-/SGLang-/LM Studio-server delen, één probe kosten in plaats van een storm aan verzoeken. Overgeslagen vooraf gecontroleerde uitvoeringen verhogen de back-off voor uitvoeringsfouten niet; stel failureAlert.includeSkipped in om herhaalde waarschuwingen over overslaan in te schakelen.

Opdrachtpayloads

Opdrachtpayloads voeren deterministische scripts uit in de Gateway-planner zonder een door een model ondersteunde beurt te starten. Ze worden uitgevoerd op de Gateway-host, leggen stdout/stderr vast, registreren de uitvoering in de crongeschiedenis en gebruiken dezelfde bezorgmodi announce, webhook en none als taken met agentbeurten.
Opdrachtcron is een Gateway-automatiseringsoppervlak voor operatorbeheerders, geen tools.exec-aanroep van een agent. Voor het maken, bijwerken, verwijderen of handmatig uitvoeren van cron-taken is operator.admin vereist; geplande opdrachtuitvoeringen worden later binnen het Gateway-proces uitgevoerd als die door een beheerder gemaakte automatisering. Het uitvoeringsbeleid voor agents (tools.exec.mode, goedkeuringsprompts, toestaanslijsten voor tools per agent) beheert uitvoeringstools die zichtbaar zijn voor het model, niet de opdrachtpayloads van cron.
--command <shell> slaat argv: ["sh", "-lc", <shell>] op. Gebruik --command-argv '["node","scripts/report.mjs"]' voor exacte argv-uitvoering zonder shellparsing. De optionele --command-env KEY=VALUE (herhaalbaar), --command-input, --timeout-seconds (standaard 10 minuten), --no-output-timeout-seconds en --output-max-bytes beheren de procesomgeving, stdin en uitvoerlimieten. De bezorgde tekst wordt afgeleid van de procesuitvoer: niet-lege stdout heeft voorrang; als stdout leeg is en stderr niet leeg is, wordt stderr bezorgd; als beide aanwezig zijn, verzendt cron een klein stdout:- / stderr:-blok. Afsluitcode 0 registreert de uitvoering als ok; een niet-nulafsluitcode, signaal, time-out of time-out wegens ontbrekende uitvoer registreert error en kan foutwaarschuwingen activeren. Een opdracht die alleen NO_REPLY afdrukt, gebruikt de normale onderdrukking van stille crontokens en plaatst niets terug in de chat.

Scriptpayloads

Scriptpayloads worden headless uitgevoerd in dezelfde code-mode-executor als triggerscripts, zonder een beurt van een conversatieagent te starten. Schakel cron.triggers.enabled in voordat je ze maakt of uitvoert; deze beveiliging voor gevaarlijke automatisering geldt voor zowel triggerscripts als scriptpayloads. Scripttaken ondersteunen alleen de sessiedoelen main en isolated.
Gebruik --script <file|-> om JavaScript uit een bestand of stdin te lezen. De time-out is standaard 300 seconden en is begrensd op 900; het toolbudget is standaard 50 aanroepen en is begrensd op 200. Deze payloadbudgetten staan los van de kleinere evaluatiebudgetten van de triggerbeveiliging. Het script kan een object retourneren met deze optionele velden:
  • notify: Tekst die wordt afgeleverd via de afleveringsmodus announce, webhook of none van de taak. Als dit wordt weggelaten, wordt niets afgeleverd. Voor een main-taak wordt de tekst een systeemgebeurtenis.
  • wake: "now" vraagt om een onmiddellijke Heartbeat nadat notify (of een compacte voltooiingsgebeurtenis) in de wachtrij is geplaatst; "next-heartbeat" plaatst de gebeurtenis in de wachtrij voor de volgende Heartbeat.
  • state: JSON-status, begrensd op 16 KB en alleen opgeslagen na een geslaagde uitvoering. De volgende uitvoering ontvangt een bevroren kopie als trigger.state, overeenkomstig triggerscripts. Omdat die naamruimte één eigenaar van opgeslagen gegevens heeft, kan een scriptpayload niet worden gecombineerd met een voorwaardetrigger voor dezelfde taak.
  • nextCheck: Een duur zoals "15m". Dit is alleen geldig voor taken waarvoor pacing is ingeschakeld en gebruikt dezelfde pacingbegrenzing als voorstellen voor agentbeurten.
Exceptions, time-outs, uitgeputte toolbudgetten, ongeldige resultaten en nextCheck zonder pacing zijn normale cron-uitvoeringsfouten: ze worden opgenomen in de uitvoeringsgeschiedenis, back-off en afhandeling van foutmeldingen, zonder de geretourneerde status op te slaan.

Uitvoeringsstijlen

Taken in de hoofdsessie plaatsen een systeemgebeurtenis in een door cron beheerde uitvoeringslane en activeren optioneel de Heartbeat (--wake now of --wake next-heartbeat). Ze kunnen de laatste afleveringscontext van de doelhoofdsessie gebruiken voor antwoorden, maar voegen routinematige cron-beurten niet toe aan de menselijke chatlane en verlengen de versheid voor dagelijkse/inactiviteitsresets van de doelsessie niet. Geïsoleerde taken voeren een speciale agentbeurt uit met een nieuwe sessie. Aangepaste sessies (session:xxx) behouden context tussen uitvoeringen, waardoor workflows mogelijk zijn zoals dagelijkse stand-ups die voortbouwen op eerdere samenvattingen.Cron-gebeurtenissen voor de hoofdsessie zijn op zichzelf staande herinneringen in de vorm van systeemgebeurtenissen. Ze bevatten niet automatisch de standaard Heartbeat-prompt of het kladveld van de Heartbeat-monitor; vermeld dit expliciet in de tekst van de cron-gebeurtenis als een herinnering die context moet raadplegen.
Een nieuwe transcript-/sessie-id per uitvoering. OpenClaw neemt veilige voorkeuren over (instellingen voor denken/snel/uitgebreid, labels en expliciet door de gebruiker geselecteerde model-/auth-overschrijvingen), maar neemt geen omgevingscontext van een gesprek over uit een oudere cron-rij: kanaal-/groepsroutering, verzend- of wachtrijbeleid, verhoging, oorsprong of ACP-runtimebinding. Gebruik current of session:<id> wanneer een terugkerende taak bewust moet voortbouwen op dezelfde gesprekscontext.
Geïsoleerde cron- en hook-agentbeurten zijn expliciet onbeheerd: er is niemand aanwezig om om verduidelijking of goedkeuring te vragen. Het uiteindelijke antwoord moet het resultaat zijn en geen plan, bevestiging of verzoek om invoer. De agent retourneert HEARTBEAT_OK wanneer niets hoeft te worden gedaan en vermeldt fouten duidelijk; cron beheert het beleid voor nieuwe pogingen en foutmeldingen.Voor vertrouwde geplande taken hebben de eigen instructies van de taak voorrang wanneer ze bewust om een vraag of plan vragen, en de agent mag een taak verwijderen die niet langer nodig is. Externe hook-beurten ontvangen alleen het algemene contract voor onbeheerde uitvoering; over de grens voor externe inhoud heen ontvangen ze die overschrijving of richtlijnen voor zelfverwijdering niet.
Wanneer geïsoleerde cron-uitvoeringen subagents aansturen, krijgt de uiteindelijke uitvoer van de laatste afstammeling bij aflevering de voorkeur boven verouderde tussentijdse tekst van de bovenliggende agent. Als afstammelingen nog actief zijn, onderdrukt OpenClaw die gedeeltelijke update van de bovenliggende agent in plaats van deze aan te kondigen.Voor uitsluitend tekst bevattende Discord-aankondigingsdoelen verzendt OpenClaw de canonieke uiteindelijke assistenttekst één keer, in plaats van zowel gestreamde/tussentijdse tekst als het uiteindelijke antwoord opnieuw af te spelen. Media en gestructureerde Discord-payloads worden nog steeds afzonderlijk afgeleverd, zodat bijlagen en componenten niet verloren gaan.

Aflevering en uitvoer

Gebruik --announce --channel telegram --to "-1001234567890" voor aflevering via een kanaal. Gebruik voor Telegram-forumonderwerpen -1001234567890:topic:123; OpenClaw accepteert ook de door Telegram beheerde verkorte vorm -1001234567890:123. Directe RPC-/configuratieaanroepers kunnen delivery.threadId als tekenreeks of getal doorgeven. Doelen voor Slack/Discord/Mattermost gebruiken expliciete voorvoegsels (channel:<id>, user:<id>). Matrix-ruimte-id’s zijn hoofdlettergevoelig; gebruik de exacte ruimte-id of de vorm room:!room:server van Matrix. Wanneer de aankondigingsaflevering channel: "last" gebruikt of channel weglaat, kan een doel met providervoorvoegsel zoals telegram:123 het kanaal selecteren voordat cron terugvalt op de sessiegeschiedenis of één geconfigureerd kanaal. Alleen voorvoegsels die door de geladen Plugin worden aangeboden, zijn providerselectoren. Als delivery.channel expliciet is, moet het doelvoorvoegsel dezelfde provider noemen; channel: "whatsapp" met to: "telegram:123" wordt geweigerd in plaats van WhatsApp de Telegram-id als telefoonnummer te laten interpreteren. Voorvoegsels voor doeltypen en services (channel:<id>, user:<id>, imessage:<handle>, sms:<number>) blijven kanaalspecifieke doelsyntaxis en zijn geen providerselectoren. Voor geïsoleerde taken wordt chataflevering gedeeld: als er een chatroute beschikbaar is, kan de agent de tool message zelfs met --no-deliver gebruiken. Als de agent naar het geconfigureerde/huidige doel verzendt, slaat OpenClaw de fallbackaankondiging over. Anders bepalen announce, webhook en none alleen wat de runner na de agentbeurt met het uiteindelijke antwoord doet. Wanneer een agent vanuit een actieve chat een geïsoleerde herinnering maakt, slaat OpenClaw het behouden live afleveringsdoel op voor de fallbackroute voor aankondigingen. Interne sessiesleutels kunnen kleine letters bevatten; providerafleveringsdoelen worden niet opnieuw samengesteld uit die sleutels wanneer de huidige chatcontext beschikbaar is. Impliciete aankondigingsaflevering gebruikt geconfigureerde kanaaltoelatingslijsten om verouderde doelen te valideren en opnieuw te routeren. Goedkeuringen uit de DM-koppelingsopslag zijn geen ontvangers voor fallbackautomatisering; stel delivery.to in of configureer de kanaalvermelding allowFrom wanneer een geplande taak proactief naar een DM moet verzenden.

Foutmeldingen

Foutmeldingen volgen een afzonderlijk bestemmingspad:
  • cron.failureDestination stelt een algemene standaard voor foutmeldingen in.
  • job.delivery.failureDestination overschrijft dit per taak.
  • Als geen van beide is ingesteld en de taak al via announce aflevert, vallen foutmeldingen terug op dat primaire aankondigingsdoel.
  • delivery.failureDestination wordt alleen ondersteund voor sessionTarget="isolated"-taken, tenzij de primaire afleveringsmodus webhook is.
  • failureAlert.includeSkipped: true laat een taak of algemeen cron-waarschuwingsbeleid kiezen voor herhaalde waarschuwingen over overgeslagen uitvoeringen. Overgeslagen uitvoeringen houden een afzonderlijke teller voor opeenvolgende overgeslagen uitvoeringen bij, zodat ze geen invloed hebben op de back-off voor uitvoeringsfouten.
  • openclaw cron edit maakt waarschuwingafstemming per taak beschikbaar: --failure-alert/--no-failure-alert, --failure-alert-after <n>, --failure-alert-channel, --failure-alert-to, --failure-alert-cooldown, --failure-alert-include-skipped/--failure-alert-exclude-skipped, --failure-alert-mode en --failure-alert-account-id.

Uitvoertaal

Cron-taken leiden geen antwoordtaal af uit het kanaal, de landinstelling of eerdere berichten. Neem de taalregel op in het geplande bericht of de sjabloon:
Houd voor sjabloonbestanden de taalinstructie in de gerenderde prompt en controleer voordat de taak wordt uitgevoerd of tijdelijke aanduidingen zoals {{language}} zijn ingevuld. Als de uitvoer talen mengt, maak de regel dan expliciet, bijvoorbeeld: “Gebruik Chinees voor beschrijvende tekst en behoud technische termen in het Engels.”

CLI-voorbeelden

Taken beheren

Als je een sessie archiveert (via de Control UI of sessions.patch { archived: true } vanuit een aanroepende operatorbeheerder), worden alle ingeschakelde cron-taken uitgeschakeld die aan die sessie zijn gekoppeld: de geïsoleerde cron:<jobId>-sessie ervan, een session:<key>-doel of een sessionKey-route voor aflevering/activering. Door de sessie te herstellen, worden deze taken niet opnieuw ingeschakeld; gebruik openclaw cron enable <jobId>. Sessies met een ingeschakelde gekoppelde taak tonen een klokbadge in de zijbalk van de Control UI. openclaw cron run <jobId> keert terug nadat de handmatige uitvoering in de wachtrij is geplaatst. Gebruik --wait voor afsluitingshooks, onderhoudsscripts of andere automatisering die moet blokkeren totdat de uitvoering in de wachtrij is voltooid; dit peilt de geretourneerde runId (standaardtime-out 10m, peilinterval 2s) en sluit af met 0 voor status ok, en met een andere waarde dan nul voor error, skipped of een time-out tijdens het wachten. De agenttool cron retourneert compacte taaksamenvattingen (id, name, enabled, nextRunAtMs, scheduleKind, lastRunStatus) vanuit cron(action: "list"); gebruik cron(action: "get", jobId: "...") voor één volledige taakdefinitie. Rechtstreekse Gateway-aanroepers kunnen compact: true doorgeven aan cron.list; als je dit weglaat, blijft de volledige respons met afleveringsvoorbeelden behouden. openclaw cron create is een alias voor openclaw cron add. Nieuwe taken kunnen een positioneel schema gebruiken ("0 9 * * 1", "every 1h", "20m" of een ISO-tijdstempel), gevolgd door een positionele agentprompt. Gebruik --webhook <url> bij cron add|create of cron edit om de voltooide uitvoeringspayload via POST naar een HTTP-eindpunt te sturen; Webhook-aflevering kan niet worden gecombineerd met chat-afleveringsvlaggen (--announce, --channel, --to, --thread-id, --account). Bij cron edit, --clear-channel, --clear-to, --clear-thread-id en --clear-account worden deze routeringsvelden afzonderlijk verwijderd (elk wordt geweigerd naast de bijbehorende instelvlag) — anders dan --no-deliver, dat alleen de terugvalaflevering van de uitvoerder uitschakelt.
Opmerking over modeloverschrijving:
  • openclaw cron add|edit --model ... wijzigt het geselecteerde model van de taak.
  • Als het model is toegestaan, bereikt die exacte provider/dat model de geïsoleerde agentuitvoering.
  • Als het niet is toegestaan of niet kan worden herleid, laat cron de uitvoering mislukken met een expliciete validatiefout.
  • Payloadpatches voor API cron.update kunnen model: null instellen om een opgeslagen modeloverschrijving voor een taak te wissen.
  • openclaw cron edit <job-id> --clear-model wist die overschrijving vanuit de CLI (hetzelfde effect als de patch model: null) en kan niet worden gecombineerd met --model.
  • Geconfigureerde terugvalketens blijven van toepassing omdat cron --model een primaire taakinstelling is en geen overschrijving van sessie-/model.
  • openclaw cron add|edit --fallbacks ... stelt payload fallbacks in en vervangt de geconfigureerde terugvalopties voor die taak; --fallbacks "" schakelt terugval uit en maakt de uitvoering strikt. openclaw cron edit <job-id> --clear-fallbacks wist de overschrijving per taak.
  • Een gewone --model zonder expliciete of geconfigureerde terugvallijst valt niet terug op de primaire agent als stil extra doel voor een nieuwe poging.

Webhooks

Gateway kan HTTP-Webhook-eindpunten beschikbaar stellen voor externe triggers. Schakel dit in de configuratie in:

Authenticatie

Elk verzoek moet het hooktoken via een header bevatten:
  • Authorization: Bearer <token> (aanbevolen)
  • x-openclaw-token: <token>
Tokens in de querystring worden geweigerd.
Plaats een systeemgebeurtenis in de wachtrij voor de hoofdsessie:
string
vereist
Beschrijving van de gebeurtenis.
string
standaard:"now"
now of next-heartbeat.
Voer een geïsoleerde agentbeurt uit:
Velden: message (verplicht), name, agentId, sessionKey (vereist hooks.allowRequestSessionKey=true), idempotencyKey, wakeMode, deliver, channel, to, model, thinking, timeoutSeconds.
Aangepaste hooknamen worden via hooks.mappings in de configuratie herleid. Toewijzingen kunnen willekeurige payloads met sjablonen of codetransformaties omzetten in acties voor wake of agent.
Houd hookeindpunten achter loopback, tailnet of een vertrouwde reverse proxy.
  • Gebruik een speciaal hooktoken; hergebruik geen authenticatietokens van Gateway.
  • Houd hooks.path op een afzonderlijk subpad; / wordt geweigerd.
  • Stel hooks.allowedAgentIds in om te beperken op welke effectieve agent een hook zich kan richten, inclusief de standaardagent wanneer agentId wordt weggelaten.
  • Behoud hooks.allowRequestSessionKey=false, tenzij je door de aanroeper geselecteerde sessies nodig hebt.
  • Als je hooks.allowRequestSessionKey inschakelt, stel dan ook hooks.allowedSessionKeyPrefixes in om toegestane vormen van sessiesleutels te beperken.
  • Hookpayloads worden standaard met veiligheidsgrenzen omgeven.

Gmail PubSub-integratie

Verbind triggers voor het Gmail-postvak met OpenClaw via Google PubSub.
Vereisten: gcloud CLI, gog (gogcli), ingeschakelde OpenClaw-hooks en Tailscale voor het openbare HTTPS-eindpunt.

Installatie via wizard (aanbevolen)

Dit schrijft de configuratie hooks.gmail, schakelt de Gmail-voorinstelling in en gebruikt standaard Tailscale Funnel voor het push-eindpunt (--tailscale funnel|serve|off).
De sessie per bericht van de Gmail-voorinstelling scheidt de gesprekscontext; deze beperkt niet de tools of werkruimte van de doelagent. Zonder een aangepaste toewijzing die agentId instelt, worden Gmail-hooks als de standaardagent uitgevoerd.Routeer voor niet-vertrouwde inboxen de hook naar een speciale leesagent, geef die agent alleen-lezen- of geen toegang tot de werkruimte en weiger schrijftoegang tot het bestandssysteem, shell, browser en andere onnodige tools. Als deze de hoofdagent moet informeren, sta dan alleen de vereiste overdracht tussen agents toe. Zie Promptinjectie, Sandbox en tools voor meerdere agents en tools.agentToAgent.

Gateway automatisch starten

Wanneer hooks.enabled=true en hooks.gmail.account zijn ingesteld, start Gateway gog gmail watch serve tijdens het opstarten en vernieuwt het de bewaking automatisch. Stel OPENCLAW_SKIP_GMAIL_WATCHER=1 in om dit uit te schakelen.

Eenmalige handmatige installatie

1

Selecteer het GCP-project

Selecteer het GCP-project dat eigenaar is van de OAuth-client die door gog wordt gebruikt:
2

Maak het onderwerp en verleen Gmail-pushtoegang

3

Start de bewaking

Gmail-modeloverschrijving

Gebruik voor niet-vertrouwde inboxen het beste beschikbare model van de nieuwste generatie van je provider. De bovenstaande waarde is een voorbeeld; het model moet in je geconfigureerde catalogus en toelatingslijst voorkomen.

Configuratie

webhookToken wordt als Authorization: Bearer <token> verzonden bij cron-Webhook-POST-verzoeken. cron.store is een logische opslagsleutel en migratiepad voor doctor, geen actief JSON-bestand om handmatig te bewerken. Taakgegevens bevinden zich in SQLite; gebruik de CLI of Gateway-API voor wijzigingen. Schakel cron uit: cron.enabled: false of OPENCLAW_SKIP_CRON=1.
Nieuwe poging voor eenmalige taken: tijdelijke fouten (snelheidslimiet, overbelasting, netwerk, time-out, serverfout) gebruiken een ingebouwd schema voor nieuwe pogingen. Permanente fouten schakelen de taak onmiddellijk uit.Nieuwe poging voor terugkerende taken: bij opeenvolgende uitvoeringsfouten wordt volgens een uitgebreid schema langer gewacht (30s, 60s, 5m, 15m, 60m). Na de volgende geslaagde uitvoering wordt de wachttijd opnieuw ingesteld.
cron.sessionRetention (standaard 24h; false schakelt dit uit) ruimt geïsoleerde vermeldingen van uitvoeringssessies op. De uitvoeringsgeschiedenis bewaart per taak de nieuwste 2000 eindstatusrijen; verloren rijen behouden hun opschoonvenster van 24 uur.
Voer na een upgrade openclaw doctor --fix uit om verouderde bestanden ~/.openclaw/cron/jobs.json, jobs-state.json en runs/*.jsonl in SQLite te importeren en ze te hernoemen met het achtervoegsel .migrated. Ongeldige taakrijen worden tijdens runtime overgeslagen en voor latere reparatie of controle naar jobs-quarantine.json gekopieerd.

Problemen oplossen

Opdrachtvolgorde

  • Controleer cron.enabled en de omgevingsvariabele OPENCLAW_SKIP_CRON.
  • Controleer of Gateway continu actief is.
  • Controleer bij cron-schema’s de tijdzone (--tz) ten opzichte van de tijdzone van de host.
  • reason: not-due in de uitvoer betekent dat de handmatige uitvoering met openclaw cron run <jobId> --due is gecontroleerd en dat de taak nog niet aan de beurt was.
  • Afleveringsmodus none betekent dat er geen terugvalverzending door de runner wordt verwacht. De agent kan nog steeds rechtstreeks verzenden met de tool message wanneer er een chatroute beschikbaar is.
  • Een ontbrekend/ongeldig afleveringsdoel (channel/to) betekent dat uitgaande verzending is overgeslagen.
  • Voor Matrix kunnen gekopieerde of verouderde taken met kamer-ID’s in kleine letters voor delivery.to mislukken, omdat Matrix-kamer-ID’s hoofdlettergevoelig zijn. Bewerk de taak met de exacte waarde !room:server of room:!room:server uit Matrix.
  • Authenticatiefouten van het kanaal (unauthorized, Forbidden) betekenen dat aflevering door de inloggegevens is geblokkeerd.
  • Als de geïsoleerde uitvoering alleen het stille token (NO_REPLY / no_reply) retourneert, onderdrukt OpenClaw rechtstreekse uitgaande aflevering en het terugvalpad met een samenvatting in de wachtrij, zodat er niets naar de chat wordt teruggestuurd.
  • Als de agent de gebruiker zelf een bericht moet sturen, controleer dan of de taak een bruikbare route heeft (channel: "last" met een eerdere chat, of een expliciet kanaal/doel).
  • De actualiteit voor dagelijkse en inactiviteitsresets is niet gebaseerd op updatedAt; zie Sessiebeheer.
  • Cron-activeringen, Heartbeat-uitvoeringen, uitvoeringsmeldingen en Gateway-administratie kunnen de sessierij bijwerken voor routering/status, maar verlengen sessionStartedAt of lastInteractionAt niet.
  • Voor verouderde rijen die zijn gemaakt voordat die velden bestonden, kan OpenClaw sessionStartedAt herstellen uit de JSONL-sessieheader van het transcript wanneer het bestand nog beschikbaar is. Verouderde inactieve rijen zonder lastInteractionAt gebruiken die herstelde starttijd als uitgangspunt voor hun inactiviteit.
  • Cron zonder --tz gebruikt de tijdzone van de Gateway-host.
  • at-schema’s zonder tijdzone worden als UTC behandeld.
  • Heartbeat activeHours gebruikt de geconfigureerde tijdzonebepaling.

Gerelateerd