{"_id":"openclaw-scheduler","_rev":"32-e0e8a72893d2078615388f19d8cfd004","name":"openclaw-scheduler","dist-tags":{"latest":"0.6.5"},"versions":{"0.2.0":{"name":"openclaw-scheduler","version":"0.2.0","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.0","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"188aac933b6cb7c672f42eee589e436b58402bd7","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.0.tgz","fileCount":70,"integrity":"sha512-+XJykAA5vqrn56/6uREq/YoZYF+nayh8M/XYTqB2GgOQFp9y8VZ0g/l4bj5J2YLCCICJo7NNNoF+d/PUErG0XQ==","signatures":[{"sig":"MEUCIC9fpAFy873mb4tbnwYptqsHlkYBOkP3/Fw0fo38jMTvAiEA8JYPifmY/1zSxE06nXXBtwOZGcr+1aznt+PoxVn5xFQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":918540},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"b03e73300691f50c601af12855afd929624e2185","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"amittell","email":"mittell@me.com"},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.11.1","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"25.8.2","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.0_1775057795662_0.5119862313656958","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"openclaw-scheduler","version":"0.2.1","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.1","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"b32d5b02a6334b4a1d60fc26cdd3539a452b29ab","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.1.tgz","fileCount":70,"integrity":"sha512-ixT4VXwsQA3iGKf3fMiJOxLiagEuzg38aAn842y705RWtwQmxwFmQGfkYD+HE3xC9j+RcMe2NZsClo80dcG65g==","signatures":[{"sig":"MEYCIQDEs1dkejWbE/O36eNbKZXOpLES441f+35HpTdXGN8e+gIhAO6fgolar2ys2WVLnAx7qBN+eCy0Kg9ldqpMBkawe4Bw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":922903},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"58f2cf1cbf9f2606ddd65e62f98fc68cc62b61c0","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"amittell","email":"mittell@me.com"},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.11.1","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"25.8.2","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.1_1775081586198_0.699572030106183","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"openclaw-scheduler","version":"0.2.2","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.2","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"720ecd2256d22b50e3f75c11c7fc4027e738947e","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.2.tgz","fileCount":71,"integrity":"sha512-ylM61EXKGvbdGjsSyAM9R8Bgy+hi8SLxxqbN93sltJTJXEvBVdtbLveLutcjX4CcR2bLkHBY/FBIeL68tGp6lw==","signatures":[{"sig":"MEYCIQC50cPjnWH7etNNwc99V8TxXweUAroYBk2Rn6b+b3ZK+QIhAN4W+D79QnUyKaJbh4bul9XC0AvEGl5ZA15/JvMe3UKh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":945656},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"fcd323c2371b394e8ad5fea2bf73bcc4ed41134c","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.11.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.14.1","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.2_1776289412946_0.6005104839223996","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"openclaw-scheduler","version":"0.2.3","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.3","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"391773e06e03e557b32989ef7c36823bfaea1a5e","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.3.tgz","fileCount":71,"integrity":"sha512-MwE1bjeCYDiOfLOMQkv5x/w7yr6ICQIfD9r4CpCVjliz+7wrzjC649LXpfWuUUWf94ssVfrvDIGh3iR3Ilcq7A==","signatures":[{"sig":"MEQCIHIIaVORdW3fXAgPITCpAxbzEooXb5d1LUg2cGS1STp7AiBDauOkk4kiCJAnmLvZ2H8cedwOzuABPfXEIHUZ3aiLGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":948286},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"b06b1776de59dc9be9e3ec75232d87f0c9ac60b0","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.11.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.14.1","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.3_1776397939982_0.831649776631028","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"openclaw-scheduler","version":"0.2.4","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.4","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"574b315660c0d1c4ab46229efcf70f725b964c16","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.4.tgz","fileCount":72,"integrity":"sha512-llz1Ffd49iaIXvu8IlmIRAKj34ACGoSOCNxEH2x9eQoWrXqL9RO9bVx5kPVmsNGpQe/voHMC4CbCsgJM+9YUpg==","signatures":[{"sig":"MEYCIQDmRGco/mMgK9FnhYOkIXOxkzGnvzeCjr5cUscDjorIaAIhAJbpkUmGIXuNvl3jevqEmfz1HnVjByZ1JqbAIsBgS7YF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":953041},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"ce66f7445e5e3011934d0462f5a1084efd8be94c","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.11.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.14.1","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.4_1776543859426_0.9118350704731857","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"openclaw-scheduler","version":"0.2.5","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.5","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"a2b1f3c0f64f3c6fc086f7c18c34e4ffc4975d86","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.5.tgz","fileCount":74,"integrity":"sha512-LQUeSJc+CjugsIpFN1e3wuPoFdtFUbnysC2oo0tdcr/nTIkrS9y3Mz+Wu+JWiOCq5vzGArUz2fz/TtDfQLKFEA==","signatures":[{"sig":"MEQCID7i1wYGzZPTKRmWVOJaSGibXZnYhSwT7PiYrPbGq79WAiB42AlRveSd2Gq/h7JsHr7NlWl+GrGDkYuABRKgB91wLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1038750},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"68d20c2d321427fd42b83e9bf3c5a783e55b8958","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.11.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.14.1","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.5_1777323305823_0.7991142470568111","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"openclaw-scheduler","version":"0.2.6","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.6","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"e70a04ac09aa42a7ea63f066caeba9826594e41f","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.6.tgz","fileCount":74,"integrity":"sha512-h9mpnXVgds4Jt0iZI64bxfeBeGdhzPkl2YBeFtNBiXA54X7aMC3KVySl7Ig9v0hVqLaV1P1HcgZNS/O3M7NAMA==","signatures":[{"sig":"MEYCIQCC+nMOBP/7vWHYbd4J9Wy0fVS/oEamYbvDSyEh1rkVsgIhAKrGA7P3OSwIIqZ6f+kvpJDntuQLYhLR0SQeXskWFacY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1066266},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"7aff0c5930bba3e62de8eaa5dea89451167c7383","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.6_1780516439217_0.34459838329707715","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"openclaw-scheduler","version":"0.2.7","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.7","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"2406bc915f366e3ffb7a97882cb0a11596ac7240","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.7.tgz","fileCount":75,"integrity":"sha512-ATOverEDYhlUsw1XEdfbIURux9I1IL6ejZLlOVhfET5v0cTwHl0StHW1YOwpNF0Ajf3C6iuas548qozmcLvMtg==","signatures":[{"sig":"MEUCIQDMvFQfKtawapLlx3pSRXfPcC3C4LibVb1Llf+rGazi+QIgXbhOtDRjuiMVTImtXk+3MbOBHdUdYA42lUmjSrLxXUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1069822},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"c2914b463e3c3b39eacf1c01000a249c9b862cb8","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.7_1780786470037_0.6783745306588225","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"openclaw-scheduler","version":"0.2.8","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.8","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"bdd07478f49507f3f827fa75363b381b1b5e3121","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.8.tgz","fileCount":75,"integrity":"sha512-Bq9W1sPvh05JW/EPBqLMRVrCJl7Sil1FE2nHJk0JZniV0j58vPb4xxg2Qd2swUKpTIMqCQx98d/wJWdWhdv9AA==","signatures":[{"sig":"MEUCIHoEnVJU1LYSo7STlC9rZYbJiifH2fNYYmJuFGwPFm+wAiEAuMxQ00NLREXMTyEUUKhlcofLgCOXR1Sq7d6WR3IiYHw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1070135},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"32d219b95cbaba4225d02c37befb3edf3a11adc8","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.8_1780787275423_0.268365325032091","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"openclaw-scheduler","version":"0.2.9","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.9","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"bc1a79b00ad83b657aff355f7b0bc2015478e1fd","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.9.tgz","fileCount":76,"integrity":"sha512-49Dzx+3ZAZo+IzF5lh12klWY+zxxygIb3m5TCAEzwoDE0tjfH4HmlyW8o5MZQ/7XT5WgQ5jlpZbZyqpLfhAwqw==","signatures":[{"sig":"MEQCIF0Hq2USGXcHgnxENp/5kst7WUk01FbPlK0V3C4f7ZEqAiBAdYv6SajhiD5SCf6Ndpq1vI1X+DbVtK6m6LYUhRn5XA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1071335},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"6c7cde019cb01ed090356402650e32ab2de87b57","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^11.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.9_1780787726223_0.27235173584414274","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"openclaw-scheduler","version":"0.2.10","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.10","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"97013ac8235d77eddd523b3e0843b3701fbf990f","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.10.tgz","fileCount":76,"integrity":"sha512-Pl2UhCoi/ZuTUIDXEreomcd/4egkOQED9lItJh4E7rJAu0ZZ47zX1mdJnjdx2KcWWbBSL00Ufwdd1BBxMfJdkA==","signatures":[{"sig":"MEUCIQD57Vnh7G0B8E2BIv8Kk3EcgdfMcDLZP06WWXzgKoZ9fgIgNPFvELFnnrz3USvyW3lfs7u7l8CkmDWURCE0FsPeUuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1093155},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"e66f95360d8eb33196135ff8faf76da4681ea0f6","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.10_1780957387432_0.7316111856809149","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"openclaw-scheduler","version":"0.2.11","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.11","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"5535c55b5f5979e927e5053a8fb14c18311e35a5","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.11.tgz","fileCount":76,"integrity":"sha512-PmAudM75St+AdNoIBUSxCXSjv3qKsIMelGii9IF3aC0fz1HdA8RZp/xaGVWguHNmT42ei8OF9Gkz1hk8nBaFhA==","signatures":[{"sig":"MEQCIGKqxRmI9j22SzP+B4ReaIvd4bcAL3OWL7+ZI8JDvroBAiA/iH8keEISY29A3fAeFpqQWGBP2k+BLm8gZXLYDv7q6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1094492},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"27c03d1feb46d9c9030f667fb90b19f54cd40103","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.11_1782271681616_0.8908863860025746","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"openclaw-scheduler","version":"0.2.12","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.12","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"d6430bcffc8fa59bc4048779df836f0c07723a1d","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.12.tgz","fileCount":76,"integrity":"sha512-3XaotHP2rSPhQfrjOueD/4zd6aKkclH7SdPECPLNpEpn/sobjvXx0aaB7+rMRArA9Klhdc+n+ftYe2MFr1DsaQ==","signatures":[{"sig":"MEUCIHfCttf0U/tNYdQ797SSKTdxPlBzH6k7rpSserMxAtGMAiEAzzmK3scVT9R/8lzpvrxjRJhIpo6uJVBtB6UapoKiOEs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1095777},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"108114ed94883a457c5241f2020b242389fe8f2e","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.12_1782275259572_0.6162160692841843","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"openclaw-scheduler","version":"0.2.13","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.13","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"af7f5062295fc8f04549e96251586e6cdc558c59","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.13.tgz","fileCount":76,"integrity":"sha512-sA1QekXZ1FAWfLg++RIXsaGvtlq2Si6DGRd6HVuZKvF3LJLSkGSVTC/6B8U+WT9fyfT/y/9znAj1fa9Y8n3Tqw==","signatures":[{"sig":"MEUCIBUx1GJdVDC/RMal9se2J7v6gswZSgKbKrPGPonD+p0RAiEA58q+rzfk4kiPSel75E30Rwzk9olaNxAa/F/Y6TWddqk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1096739},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"36442e571efa08858538460e591557fb92c34e80","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.16.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.13_1782315919285_0.22594760332005515","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"openclaw-scheduler","version":"0.2.14","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.14","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"8f3ad59eaf149eadbad9724b4022ccbb0f5ed408","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.14.tgz","fileCount":78,"integrity":"sha512-3ZGa0S4qM0eBSalGS7pNLRQ9n9ZKZ3QzrMyVAl5AcqY3kr3C+C/LbYmzmufb0PP5TLszm+ZC+L/IjVPuyw5L1A==","signatures":[{"sig":"MEUCIDNQaX0dHi3AyemKwLunU+hD/clSBXXyt8fp9YOKUF5kAiEA4ZYq0XXrcgQ3SLVEsNA0jpyzNdHlvhVIzk32eLZi5U0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1104244},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"e12acef1f99e28454a1722c3188d2df84a331f15","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.17.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.14_1782683318614_0.31454908577618657","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"openclaw-scheduler","version":"0.2.15","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.15","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"f1a722b0397670ed7b7b9206de3f563d7857c5df","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.15.tgz","fileCount":78,"integrity":"sha512-L3ISNZ89Smvem2KFf+KRJswV+wNfrdclSVB8kUdaQG+dUkRzgDzf0+EOobFKVtzzo+uuZQecu9J8+5K396GG6Q==","signatures":[{"sig":"MEQCIEbyyEmrtv9TzCAaQAInM00i9zIftTiKaDtxTPSn2eB5AiAyUVJSIr8F6qfQYhkGgPPO9AjVwQzvZKiMyZfd9pIQbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1104427},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"5711d3d424673b4fe095f5dadfa6c0364cfb9a74","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.13.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.17.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.15_1782698758122_0.7499462457834558","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"openclaw-scheduler","version":"0.2.16","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.16","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"6dc033cca1996b316e1342ac451104bc51c7e71d","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.16.tgz","fileCount":78,"integrity":"sha512-0XPfUbLaxfG+05losxHpZcfpe99LMxKJuxuYlTn26vp5f3LmE98hq5U6KPepYXpK3Fy35g7fmYN/UnMaLa0dcQ==","signatures":[{"sig":"MEQCIANreV8HK8DCq60M4dRPO+m054iFZtoBMN66hjcbLv06AiBvLClrcyJDMKLlx9CgW3UiGR0gaR09E/cdQfUxBOi4zQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1142725},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"25ecdb59c511e9e9dc627af25b4dff8425c9b829","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.18.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.16_1783126342425_0.29144373244827304","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"openclaw-scheduler","version":"0.2.17","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.2.17","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"c5a300a1aaf6873a1926177035cffe75e0fa70c0","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.2.17.tgz","fileCount":78,"integrity":"sha512-y/MSGLH+yAwGFodeBJoLLqpLtmCQC5fQMjB5rLRH962qc4xai6EpR318MeDh5UbtAnQEpDvRV9XkEIlmaci40w==","signatures":[{"sig":"MEUCIQDIiKXYYt87mO0SEcVeRSfp7jLrb/nrr5kXtAlDWb+LKgIgL3kd2Lvf1IM3ADa6B2z+fglMSJTcOESiguHjorGwQp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.2.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1147170},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"f609cb2419529fe02a5fc88b4c494446b0bf3357","scripts":{"lint":"eslint . --max-warnings=0","test":"SCHEDULER_DB=:memory: node test.js","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","typecheck":"tsc --project tsconfig.json","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"SQLite-backed job scheduler and workflow engine for OpenClaw agents","directories":{},"_nodeVersion":"24.18.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.2.17_1783224164979_0.9025900311484423","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"openclaw-scheduler","version":"0.3.0","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.3.0","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"70856e266e304d71e0724fd1dcfe6e5f745867c7","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.3.0.tgz","fileCount":86,"integrity":"sha512-X3N97f/N/Otjad9YnnyxLK7hP0qXgkVPeoNW1DdrMaQ0125V0Bg7fyRymZvz48hTcxT51UwUGOzpn7bLeK9jgQ==","signatures":[{"sig":"MEYCIQDJac/2bRT9PEbJfPWvomGnh2HDKAGGmCELyshxQ9YTNAIhAPbnpgSuk/WkqWKdpY75Em4ZcJD8x4abgGNkJ8xV1RvW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1396371},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"9b0735b9dfcd716abfda88651a0a76331b5d76bb","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","prepublishOnly":"npm run verify:local"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.18.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.10.0"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.1.0","globals":"^17.4.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.3.0_1783747805670_0.8540589112976074","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"openclaw-scheduler","version":"0.4.0","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.4.0","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"fc4751edb99b6367172ba15fbbbc2073c0289720","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.4.0.tgz","fileCount":115,"integrity":"sha512-jo5WdxdE+jyxZPEE0ZYfVq9sB63z7QRYw45ZDR/+STHO5myhVBVePkHE+nDRCyZAuIVX/ILCpCDTYUbKyXGN6w==","signatures":[{"sig":"MEUCIQCbivJzLdwJmT3dDoX9HGi9h27bf7RKt557RpXtuv/fbgIgPwUUnUItseHyVmbz0UPrUxIgFC2SS8zeZRtePZn3gNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2704063},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"c60092a65ba9e30125a2c1517e4571877f76db45","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.18.0","dependencies":{"croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.4.0_1783925408883_0.376572157961075","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"openclaw-scheduler","version":"0.4.1","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.4.1","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"5a67209ce976f550d429975cc7d660f341b0ca87","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.4.1.tgz","fileCount":123,"integrity":"sha512-RK9LflhBV2lavrOsKqmpkPCcBOxf99Lfd6EvEb37+0HDaV7R8TfZPbMwfsEbiqe23+C/zBZvphhmh0vVmBH51A==","signatures":[{"sig":"MEUCIQDAZrM5YSI3aI/r5GuWpeQVZWGsnoqd8I1xKSywIwDj1wIgOzjmF/sHeVHLm5x9Hham4s44vBEmMmIEqQlyrjLgERc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2803809},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"d2557236ebbbd886b2b574877b0c41ba49a848b2","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.18.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.4.1_1784398940369_0.824460507399605","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"openclaw-scheduler","version":"0.4.2","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.4.2","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"75180ca14ffc5d1c4469d44523cdb5627aecb67e","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.4.2.tgz","fileCount":124,"integrity":"sha512-JRAnKwyB4yH4Vwz6La4UBFUgv+scVfRheNXnXK1BlcnZ3eWIfvIcVdl02nOyoPMf3QXKYDEBabcLVmXS65d58w==","signatures":[{"sig":"MEYCIQD+7JmoC1J2e1seFtaWK7I4E2Nna/eaSpLz2ymGodBvvQIhAK6ojgdCG9M3Qf3ee0unbrWQLMVURWWRarf2QH9o3170","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2812541},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"1908e55f06f6260e2a4833a611157fc26fc7a488","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.18.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.4.2_1784401066412_0.03245231524824188","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"openclaw-scheduler","version":"0.4.3","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.4.3","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"6f9bc70b96086a22f5917f12eca286728fcdb7df","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.4.3.tgz","fileCount":124,"integrity":"sha512-H97hK736AfToaT8hYSE/2TNhABf8mFOGnslSygJfdKE9/iuBDAVYlhsdu6K8mTw3xiUcYXmNKK9VIHg8TRNcfA==","signatures":[{"sig":"MEYCIQDWuRQwdU9NAOosPOuAeEKspyN6HFp2BqBtl6DV+1/f2AIhAK/GikhCgxdSZvRaRs5Wf9CmmufVbSyMDL5NOwbXP6ck","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2812862},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"48eb4d40346f0b9ba0ae42aa821bc0eb68dccbc3","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.18.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.4.3_1784401654429_0.615919827343749","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"openclaw-scheduler","version":"0.5.0","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.5.0","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"110975ce2867beb39470c73b8fe9ca7522400530","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.5.0.tgz","fileCount":137,"integrity":"sha512-suBBKUqLUs2opPQA1RxeZS92swH6dpzGwPUAk8kJKL6gg6enIbAil2cRgQJlfCzf4d3JsCds7zCFCGlwREGZNA==","signatures":[{"sig":"MEYCIQCRdeYwO0o2UQ2eglWtxUdo932cyD1CcjsfqXtgW9bPYgIhAJLC5lmlmKYtFdY3gTtg+5x+cI+alkWegupMrbeVeJtc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3252701},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"30493b3da26848fbbddf824a73f76b39b3e16b52","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.16.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.18.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.5.0_1784462767687_0.6354586334535968","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"openclaw-scheduler","version":"0.5.1","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.5.1","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"70c7505e2d80044c83058104a60468ccc6451d34","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.5.1.tgz","fileCount":139,"integrity":"sha512-l/9H5ZJ23oIqtafrtdwpTW7gB8LxJmKBwZHzeulGnuDR1k5kDbgadXeHFqyfkc7YR1jXcCRIhk1fgkf0nviKnA==","signatures":[{"sig":"MEUCIFsVVCOcFzDijwc0L7oPDWU/Ia6zylHKjhZiaZZjTgTbAiEAgy/cfIdycGMT+YX2db/UwkleQYZn5WpAo9uEWsYQv3E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3284086},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"88707179ee48535b1ebfc6409d965c34cf9649e5","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.17.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.19.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.5.1_1786801380072_0.3234100956903456","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"openclaw-scheduler","version":"0.5.2","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.5.2","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"cfb959c608d29d21b863716b0e0d37c810595139","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.5.2.tgz","fileCount":144,"integrity":"sha512-x5NX9hRTU7hRTukWSTzcnhhDcZS2AHDAhjnbn8qjKriPrqvkDXDVyK9fE4rl7Kp61LcOrsL+mfJHmCSHmScL+w==","signatures":[{"sig":"MEUCIQDc3n+ZVOI/MMrZ8k8BgMwMvghJ/B+uUfuIWHEqjJd4LwIgJBLoyY4FGjTc0L0+31LrppCb+vqQYBQyYAbWmyq3wjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3332916},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"e095d897424ac83ee4534ea298b98e2cf7c3d29f","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.17.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.19.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.5.2_1787162160586_0.8346009966854948","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"openclaw-scheduler","version":"0.6.0","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.6.0","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"10709a1835561e3c29c2302c934902a8ebedf709","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.6.0.tgz","fileCount":155,"integrity":"sha512-1FY/VIwNdHSHWg0MGaJzSXr24AsTIE/J2gsJg/JQLkm+K3yHORLrQg5UKD6mfjw7XhF8HJlsiok+r7yIGkR95Q==","signatures":[{"sig":"MEUCIGbk1iCcXjCxKy4CEfQolYJZSKBB8LCTw0GA6tmuA6CWAiEAorhTzCCRPOuzfKmN0wkke8/v66oYHbFNRNfs9mDiCpQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEs1HjqDs9jWiKHUKWY/gr2zNLYwonxn3C+KrRaKu4lTAiAeb9fY9Zzg/JWrObxpRWVovn1ki0gp8Ds+cv4U3e4VPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3439104},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"aabd5503a9a9d6007e775e31b10064f80369f387","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.19.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.20.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.6.0_1788724692286_0.9724880382055878","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"openclaw-scheduler","version":"0.6.1","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.6.1","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"fca0b3bf46cac1d581596fb7be82f140f31ba753","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.6.1.tgz","fileCount":165,"integrity":"sha512-cFE2oh6BVJLKlAS8Tkk0tvEUrqxGekisTrLe+GmDSfjUSZ8w5sUfYweV4YaUd2SmpsGgLJ9vmvYFR5A3WE6XBA==","signatures":[{"sig":"MEUCIQDQkv4Z/inGIEAB0Qabp4egJctWR6H4nLY1VF+UQeR5nAIgN/2MBzV1A69/H22kgwurcCQcdBwSYbBsbuxCWDphMP4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCiC97mxXd0Fih8mcjPVEW69A/5YhkyMyqa+PMNNQw6YQIgX/sQA3vv+JoCMYyfydvbL/ipRuOVgPIkUbnyWBzspsY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3603507},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"2d554e52e3a66f13b173f85d86f2986d8fc7a5ed","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.19.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.20.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","undici":"^7.29.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.6.1_1788906824143_0.20224533395912014","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"openclaw-scheduler","version":"0.6.2","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.6.2","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"3765cca4c2fff68d1d94e805305a08b97f996290","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.6.2.tgz","fileCount":165,"integrity":"sha512-huZFOPEYkpBqwWXP1UQXZh2Bw1ANXl2m735l0ZFuyQh4ifLmEzxNiUPjF9MlGVnVaQ8jINLLBXs9yUfa9Ivgpw==","signatures":[{"sig":"MEQCICIDaC131YAixd3WiazierxwjCGRZ5BdLnd5yD+fylh6AiArFcVgDo1qxHdQ1jzZKpq84yc0skz8jDBFSTLo9J8kcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCn2qJaXv0pHCLxXMy8+8wRfd4iI7WIf6205oaXiwFGYgIgHx26nmdlyU9aU0cctzTJuyQFabpvDYjInnNvW/rhvys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3610643},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"7d510ee2e007dcdc4b874557102279363d5af634","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.19.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.20.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","undici":"^7.29.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.6.2_1789965998334_0.39534717836591793","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"openclaw-scheduler","version":"0.6.3","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.6.3","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"b783d8f9898f65ce12331e1cf8d104ddd11d1281","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.6.3.tgz","fileCount":168,"integrity":"sha512-Jjb5D+vAo9rjZQDK/AmzMh+v1kJsy9pha5+2fX10cy9azTY+SyQIcVrsc+nJo4pHwtmadj/hSs0v8uuaQ6A42A==","signatures":[{"sig":"MEUCICTu//Aku39IcO6inu0D97N/KpIUalG5Q/mU5eXXpijsAiEAwnV4DSNXCefwJCjCmTnaUonjWNp4ij0Y0eQjsFOsnTY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDiNKWjYpIHIwBLLEgliP1QQ+dpu8DKOl0jnK+Ye+PtOgIhAJ3Pt34qRV4tkwDVHkxxzCkVuyQBbxtRAa1w62VSAolX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.6.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3670069},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"4bdf5e504ab6d4c4c1b66cd7b03ae3463ad5bb15","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.19.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.20.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","undici":"^7.29.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.6.3_1790208268265_0.607345313970501","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"openclaw-scheduler","version":"0.6.4","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"author":{"name":"Alex Mittell"},"license":"MIT","_id":"openclaw-scheduler@0.6.4","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"homepage":"https://github.com/amittell/openclaw-scheduler#readme","bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"dist":{"shasum":"8dff45291c1349810d093cd2fc850d7acc3f0380","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.6.4.tgz","fileCount":169,"integrity":"sha512-RG1sJjMP39IcbA07NoYP5uwAfMsMCNqaHuGNxSU6g1iIL15RMnWJ93RjCTlS/xiAy0dWjjt2mh6uD2y+juAlew==","signatures":[{"sig":"MEUCIGjKRf21dAjsZwJe7+51n9DUuVqc6939Hobe0ERTBQrzAiEA1J0IUMe/34Ivxkd8TpcR1MTj71jFBeNAKpvyv74/F7Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDPTQOJEscu8v/y/vzvCivoPPSRUF/qnY36K/qX1nKy1wIgTmx6oTXpCx4TiNZLURYelVdtVUfYLfIYqX6LEmgVkAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3786410},"main":"./index.js","type":"module","types":"./index.d.ts","engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"e816529b0a562d70e7050277ade442548865288c","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.19.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"_nodeVersion":"24.21.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","undici":"^7.29.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-scheduler_0.6.4_1790546725435_0.29970908826581244","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"_id":"openclaw-scheduler@0.6.5","bin":{"openclaw-scheduler":"bin/openclaw-scheduler.js","openclaw-inbox-consumer":"scripts/inbox-consumer.mjs"},"bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"dist":{"shasum":"00475aeedca33b9453683f05563a60083f680cb0","tarball":"https://registry.npmjs.org/openclaw-scheduler/-/openclaw-scheduler-0.6.5.tgz","fileCount":171,"integrity":"sha512-6jiqKYUSveK6LHZNHWyrUrCJDIdwXJZGsCICNBeXZ8iPkWIm/vnfEmRNpIHx8NHxUtK7PzGS0zJDSQwsd6W/rA==","signatures":[{"sig":"MEYCIQCtyP3nGYyOM76//Wv/fr1JIaRcVZ+lmkUu2zbC18a5eQIhANW30eMhakFagnYM4cMmz78Z7oiGKtcpgbOm2RsDgewI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCW0+9fnUebqWVMx5rFT98ZkhtYeAzVZFFgLoEBPL5WkwIhAOqQ/S8cR2KVRyw5glTAIbgvGXyJqr4WwlTNiFp7Ao75"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/openclaw-scheduler@0.6.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3825692},"main":"./index.js","name":"openclaw-scheduler","type":"module","types":"./index.d.ts","author":{"name":"Alex Mittell"},"engines":{"node":"22.x || 24.x || 25.x || 26.x"},"exports":{".":{"types":"./index.d.ts","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"0938378af39d67fdc8b671a2ac9ce24452fd2899","license":"MIT","scripts":{"lint":"eslint . --max-warnings=0","test":"node scripts/test-all.mjs","start":"node dispatcher.js","migrate":"node migrate.js","coverage":"SCHEDULER_DB=:memory: node scripts/coverage.mjs","test:docs":"node scripts/validate-doc-examples.mjs","typecheck":"tsc --project tsconfig.json","test:legacy":"SCHEDULER_DB=:memory: node test.js","test:focused":"node scripts/test-all.mjs --focused-only --skip-docs --skip-agentcli","verify:local":"node scripts/verify-local.mjs","verify:smoke":"node scripts/verify-local.mjs --smoke","test:agentcli":"node scripts/test-all.mjs --agentcli-only","prepublishOnly":"npm run verify:local","verify:package":"node scripts/verify-package.mjs","verify:agentcli-published":"node scripts/verify-published-agentcli.mjs"},"version":"0.6.5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"1ec1f62f-92dc-4d04-bb31-c7ab37e7f429"}},"homepage":"https://github.com/amittell/openclaw-scheduler#readme","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"overrides":{"flatted":"^3.4.2","brace-expansion":"^5.0.5"},"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"_npmVersion":"11.19.0","description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","directories":{},"maintainers":[{"name":"amittell","email":"mittell@me.com"}],"_nodeVersion":"24.21.0","dependencies":{"re2js":"2.8.6","croner":"^10.0.1","undici":"^7.29.1","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","eslint":"^10.7.0","globals":"^17.7.0","@eslint/js":"^10.0.1","typescript":"^7.0.2"},"optionalDependencies":{"@amittell/agentcli":"^0.5.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openclaw-scheduler_0.6.5_1790648970642_0.7014828499087995"}}},"time":{"created":"2026-04-01T15:36:35.511Z","modified":"2026-09-29T02:29:31.058Z","0.2.0":"2026-04-01T15:36:35.868Z","0.2.1":"2026-04-01T22:13:06.358Z","0.2.2":"2026-04-15T21:43:33.102Z","0.2.3":"2026-04-17T03:52:20.131Z","0.2.4":"2026-04-18T20:24:19.606Z","0.2.5":"2026-04-27T20:55:06.020Z","0.2.6":"2026-06-03T19:53:59.405Z","0.2.7":"2026-06-06T22:54:30.238Z","0.2.8":"2026-06-06T23:07:55.645Z","0.2.9":"2026-06-06T23:15:26.376Z","0.2.10":"2026-06-08T22:23:07.621Z","0.2.11":"2026-06-24T03:28:01.793Z","0.2.12":"2026-06-24T04:27:39.810Z","0.2.13":"2026-06-24T15:45:19.427Z","0.2.14":"2026-06-28T21:48:38.807Z","0.2.15":"2026-06-29T02:05:58.283Z","0.2.16":"2026-07-04T00:52:22.587Z","0.2.17":"2026-07-05T04:02:45.153Z","0.3.0":"2026-07-11T05:30:05.825Z","0.4.0":"2026-07-13T06:50:09.089Z","0.4.1":"2026-07-18T18:22:20.592Z","0.4.2":"2026-07-18T18:57:46.602Z","0.4.3":"2026-07-18T19:07:34.618Z","0.5.0":"2026-07-19T12:06:07.878Z","0.5.1":"2026-08-15T13:43:00.245Z","0.5.2":"2026-08-19T17:56:00.816Z","0.6.0":"2026-09-06T19:58:12.397Z","0.6.1":"2026-09-08T22:33:44.292Z","0.6.2":"2026-09-21T04:46:38.503Z","0.6.3":"2026-09-24T00:04:28.400Z","0.6.4":"2026-09-27T22:05:25.530Z","0.6.5":"2026-09-29T02:29:30.770Z"},"bugs":{"url":"https://github.com/amittell/openclaw-scheduler/issues"},"author":{"name":"Alex Mittell"},"license":"MIT","homepage":"https://github.com/amittell/openclaw-scheduler#readme","keywords":["openclaw","scheduler","cron","workflow","sqlite","agent","automation","continuity","governance","sidecar"],"repository":{"url":"git+https://github.com/amittell/openclaw-scheduler.git","type":"git"},"description":"Durable continuity and governed-workflow sidecar for OpenClaw agents and shell jobs","maintainers":[{"name":"amittell","email":"mittell@me.com"}],"readme":"# OpenClaw Scheduler\n\n[![CI](https://github.com/amittell/openclaw-scheduler/actions/workflows/ci.yml/badge.svg)](https://github.com/amittell/openclaw-scheduler/actions/workflows/ci.yml)\n[![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)\n[![Node](https://img.shields.io/badge/node-22%20%7C%2024%20%7C%2025%20%7C%2026-green)](https://nodejs.org)\n\nA durable continuity and governed-workflow sidecar for [OpenClaw](https://openclaw.ai) agents and shell workflows. Current OpenClaw already provides [SQLite cron state, command jobs, retries, and run history](https://docs.openclaw.ai/cli/cron), plus [background tasks](https://docs.openclaw.ai/automation/tasks), [Task Flow](https://docs.openclaw.ai/automation/taskflow), and [Lobster approval checkpoints](https://docs.openclaw.ai/tools/lobster). Use this scheduler when shell jobs must survive Gateway downtime, the scheduler needs a separate failure domain, workflows need direct conditional job graphs, or `@amittell/agentcli` needs its durable runtime target.\n\nThis is an independent community project and is not affiliated with the OpenClaw project.\n\nIt can coexist with native OpenClaw cron. Do not run the same job in both systems.\n\n**Release repo:** `github.com/amittell/openclaw-scheduler`\n**Development mirror:** `writhub.io/alexm/openclaw-scheduler`\n**Default location:** `~/.openclaw/scheduler/`\n**Service:** `ai.openclaw.scheduler` (macOS launchd: LaunchAgent or LaunchDaemon)\n**Runtime:** Node.js 22, 24, 25, or 26 (ESM), SQLite via `better-sqlite3`, cron parsing via `croner`\n**Schema:** version 28\n**Tests:** run with `npm test` (legacy suite, isolated focused tests, docs, and agentcli integration when a checkout is present; hosted CI requires a pinned public checkout)\n**Platform:** macOS · Linux · Windows (WSL2)\n\nIn practice, this gives you:\n- shell jobs that still work when the Gateway is unhealthy\n- a scheduler failure domain separate from the Gateway\n- AI jobs that stay isolated from your personal chats\n- conditional chains, fenced cancellation, atomic approvals, and transactional external delivery\n\n---\n\n## Table of Contents\n\n1. [Why This Exists](#why-this-exists)\n2. [Concrete Use Cases](#concrete-use-cases)\n3. [When To Use It](#when-to-use-it)\n4. [Choosing a Runtime](#choosing-a-runtime)\n5. [Quick Start](#quick-start)\n6. [Five-Minute Setup](#five-minute-setup)\n7. [Starter Recipes](#starter-recipes)\n8. [Common Migrations](#common-migrations)\n9. [Platform Support](#platform-support)\n10. [Architecture](#architecture)\n11. [How Jobs Execute](#how-jobs-execute)\n12. [Delivery Modes](#delivery-modes)\n13. [Delivery Aliases](#delivery-aliases)\n14. [Shell Jobs](#shell-jobs)\n15. [HITL Approval Gates](#hitl-approval-gates)\n16. [Idempotency](#idempotency)\n17. [Context Retrieval](#context-retrieval)\n18. [Task Tracker](#task-tracker)\n19. [Resource Pools](#resource-pools)\n20. [Workflow Chains](#workflow-chains)\n21. [Retry Logic](#retry-logic)\n22. [Chain Safety](#chain-safety)\n23. [Inter-Agent Messaging](#inter-agent-messaging)\n24. [Backup & Recovery](#backup--recovery)\n25. [Agent Registry](#agent-registry)\n26. [Database Schema](#database-schema)\n27. [CLI Reference](#cli-reference)\n28. [Configuration](#configuration)\n29. [Service Management](#service-management)\n30. [Error Handling & Backoff](#error-handling--backoff)\n31. [Migration & History](#migration--history)\n32. [Upgrading](#upgrading)\n33. [Removing the Scheduler](#removing-the-scheduler)\n34. [Best Practices](#best-practices)\n35. [File Reference](#file-reference)\n36. [Testing](#testing)\n37. [Sub-agent Dispatch](#sub-agent-dispatch)\n38. [Working with agentcli](#working-with-agentcli)\n39. [Trust Architecture](#trust-architecture)\n40. [Troubleshooting](#troubleshooting)\n41. [Companion Scripts](#companion-scripts)\n\n---\n\n## Why This Exists\n\nOpenClaw's built-in cron and Task Flow are the right default for many automations. This project addresses a narrower operator need: continuity outside the Gateway process and one local runtime for conditional shell and agent graphs.\n\nThe pain usually looks like this:\n\n- A shell script is operationally important, but it should keep running even if the gateway is unhealthy.\n- One step should trigger another, but only on success, only on failure, or only if the output contains a specific signal.\n- A risky action needs a human in the loop instead of firing immediately.\n- An agent needs to hand work to another agent or process, and you want that handoff tracked and auditable.\n\n`openclaw-scheduler` exists to solve those problems without replacing the native runtime for ordinary cron work. It provides jobs, runs, chains, shell execution, approvals, a delivery outbox, and message routing backed by a separate SQLite database.\n\n## Concrete Use Cases\n\nThese are the kinds of workflows this scheduler is meant for:\n\n- `metrics capture -> analysis -> approval -> report publish`\n  You want each step tracked, retried if needed, and gated before the final action.\n- `shell ingest fails -> agent diagnoses failure -> operator approves remediation`\n  The ingest should still run without the gateway, but the failure follow-up can use an agent.\n- `workspace audit -> diagnosis -> memory compression`\n  The audit is a shell step, the diagnosis is an agent step, and the remediation should only run if the diagnosis actually recommends it.\n- `bot health check -> alert -> repair action`\n  A shell check runs on schedule, an agent summarizes the issue, and a repair step waits for approval.\n\nThe differentiator is not just \"better cron\". It is mixed shell + agent workflows with durable state and control over what happens after success, failure, timeout, or explicit signals in output.\n\n## When To Use It\n\nUse it when you want:\n\n- shell jobs that do not depend on OpenClaw gateway availability\n- an independently operated scheduler and database\n- parent/child workflow chains\n- approval gates before risky steps\n- auditable inter-agent or agent-to-shell handoffs\n\nDo not use it merely to obtain run history, command jobs, or basic retries. Native OpenClaw provides those capabilities. If all you need is one scheduled command or agent turn, this is probably more system than you need.\n\n## Choosing a Runtime\n\n> If you have never used OpenClaw's built-in cron, skip migration and go directly to [Five-Minute Setup](#five-minute-setup).\n\n| Requirement | Recommended owner |\n|-------------|-------------------|\n| One command or agent turn on a schedule | Native OpenClaw cron |\n| Native restart-safe flow or resumable approval checkpoint | OpenClaw Task Flow or Lobster |\n| Shell execution while the Gateway is unavailable | OpenClaw Scheduler |\n| Direct parent/child triggers on result or output content | OpenClaw Scheduler |\n| Declarative governed runbook manifest | `@amittell/agentcli` targeting OpenClaw Scheduler |\n\n---\n\n## Version 0.5.0 Runtime Safety\n\n- A singleton dispatcher lease and fencing token prevent a second dispatcher from taking ownership of live work.\n- Active runs carry dispatcher ownership. Only the owning fence can commit the terminal transition or trigger downstream work.\n- Cancellation is a durable request. Shell jobs terminate their tracked process group; agent jobs record and send the Gateway cancellation request. Check `runs get` or `status` for authoritative state.\n- Expired dispatch claims return to the pending queue only when no active run owns them.\n- Run completion, job state, and child dispatch creation commit atomically.\n- External delivery uses a transactional outbox that is separate from agent prompt messages. Completion ownership is scoped by run, multipart deliveries have independently retryable per-part checkpoints, and completion debt closes only after every part is actually delivered. Attachments retain size and SHA-256 metadata.\n- Approval decisions use atomic versioned transitions and cannot dispatch disabled, rejected, expired, or cancelled work.\n- Governance declarations are enforced at execution time. Unsupported sandbox, path, network, credential, trust, proof, or cost requirements fail closed.\n- Database schema and consolidation failures stop startup. `openclaw-scheduler doctor --json` reports schema, lease, queue, outbox, approval, and cancellation diagnostics.\n- AgentCLI handoff v4 binds the complete canonical execution artifact to every\n  dispatch, approval, run, provider session, credential presentation, runtime\n  event, and signed evidence record. Versions 1 through 3 remain supported.\n\nThese controls do not make arbitrary side effects idempotent. Destructive commands must still detect prior completion and be safe to retry.\n\n---\n\n## Quick Start\n\n**New to the scheduler?** Start with [QUICK-START.md](QUICK-START.md) -- a focused guide covering installation, converting existing OpenClaw crons, and building your first workflow chain.\n\nFor the full reference, use the npm-first path below and then jump straight to [Five-Minute Setup](#five-minute-setup).\n\n### Option A: npm-first (publish/install flow)\n\n```bash\nmkdir -p ~/.openclaw/scheduler\nnpm install --ignore-scripts=false --prefix ~/.openclaw/scheduler openclaw-scheduler@latest\nnpm exec --prefix ~/.openclaw/scheduler openclaw-scheduler -- setup\n```\n\nThis installs the package without cloning the repo. The launcher command maps to:\n- `openclaw-scheduler setup` → `setup.mjs`\n- `openclaw-scheduler start` → `dispatcher.js`\n- `openclaw-scheduler webhook-check` → `scripts/telegram-webhook-check.mjs`\n- `openclaw-scheduler <anything-else>` → `cli.js`\n\nThe explicit `--ignore-scripts=false` is required because `better-sqlite3`\nbuilds or installs its trusted native binding during the npm lifecycle. If a\nprior install used `ignore-scripts=true`, rerun the install command above or\nrun `npm rebuild --ignore-scripts=false better-sqlite3` before starting.\n\nFor npm installs, scheduler state defaults to `~/.openclaw/scheduler/` rather than `node_modules/openclaw-scheduler/`, so upgrades do not trample the database path.\n\nIf your Node runtime changes later, rebuild the native SQLite binding before restarting the scheduler:\n\n```bash\ncd ~/.openclaw/scheduler\nnpm rebuild better-sqlite3 --ignore-scripts=false\n```\n\nThis is commonly needed after a Homebrew Node upgrade on macOS or any major Node ABI change.\n\n### macOS shell setup for ad hoc commands\n\nIf you use `zsh` on macOS, put your minimal Homebrew PATH bootstrap in `~/.zshenv`, not only in `~/.zprofile` or `~/.zshrc`.\n\nWhy:\n- `launchd` services do not depend on your interactive shell startup files\n- ad hoc commands like `ssh host 'node cli.js status'` run a non-interactive shell\n- non-interactive `zsh` reads `~/.zshenv`, but does not read `~/.zprofile`\n\nRecommended `~/.zshenv`:\n\n```zsh\n# ~/.zshenv — sourced by all zsh instances, including non-interactive SSH commands\nif [ -x /opt/homebrew/bin/brew ]; then\n  eval \"$(/opt/homebrew/bin/brew shellenv)\"\nfi\n\nexport PATH=\"$HOME/.local/bin:$HOME/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin\"\n```\n\nIf you load OpenClaw completions in `~/.zshrc`, initialize completions first so `compdef` is available:\n\n```zsh\nautoload -Uz compinit\ncompinit\n\nif [ -f \"$HOME/.openclaw/completions/openclaw.zsh\" ]; then\n  source \"$HOME/.openclaw/completions/openclaw.zsh\"\nfi\n```\n\nAvoid pinning a versioned Node path like `/opt/homebrew/opt/node@22/bin` in shell startup files. Prefer the stable Homebrew symlink `/opt/homebrew/bin/node`, which survives normal `brew upgrade node`.\n\n### Option B: source clone (dev/contributor flow)\n\n```bash\ngit clone https://github.com/amittell/openclaw-scheduler ~/.openclaw/scheduler\ncd ~/.openclaw/scheduler\nnpm install\nnpm test                             # should end with: 0 failed\nnpm run lint                         # static checks\nnpm run typecheck                    # exported API declarations\nnpm run coverage                     # coverage summary + lcov report\nnpm run verify:local                 # full local maintainer gate\nnpm run verify:smoke                 # lightweight smoke gate used by GitHub Actions\n```\n\nGitHub Actions runs `npm run verify:smoke` on Linux and macOS across the supported Node.js lines. That gate includes lint, type checking, every repository test, documentation validation, and a package dry run. `npm run verify:local` adds coverage and is enforced again by `prepublishOnly`. Focused test files run sequentially with isolated databases. A dedicated required job separately checks the exact public handoff-v3 producer and the previous handoff-v2 producer.\n\n### Option C: local npm pack (simulate the published package from source)\n\nUse this when you want to test the exact package layout end users get from npm without publishing to npmjs.org yet.\n\n```bash\ngit clone https://github.com/amittell/openclaw-scheduler /tmp/openclaw-scheduler\ncd /tmp/openclaw-scheduler\nnpm ci\nnpm run verify:local\nnpm pack\n\nmkdir -p ~/.openclaw/packages/openclaw-scheduler\nnpm install --ignore-scripts=false --prefix ~/.openclaw/packages/openclaw-scheduler --omit=dev --no-package-lock ./openclaw-scheduler-*.tgz\n```\n\nPoint your service at `~/.openclaw/packages/openclaw-scheduler/node_modules/openclaw-scheduler/dispatcher.js`, and keep mutable state in `~/.openclaw/scheduler` via `SCHEDULER_HOME` and `SCHEDULER_DB`.\n\nThe package also exports a small safe programmatic API surface for tooling:\n\n```js\nimport { db, jobs, runs, shellResults } from 'openclaw-scheduler';\n```\n\nThen run the interactive setup wizard:\n\n```bash\nnpm exec openclaw-scheduler -- setup\n# or: node setup.mjs\n```\n\nThe wizard will:\n- Run DB migrations\n- Append scheduler queue/inbox-consumer entries to your agent's `MEMORY.md` and `workspace-index.md`\n- Create **Inbox Consumer** + **Stuck Run Detector** scheduler jobs\n- Configure dispatcher auto-start service:\n  - macOS: LaunchAgent (personal auto-login Mac) or LaunchDaemon (headless/pre-login startup)\n  - Linux/WSL2: systemd user service (or PM2 fallback)\n\nAfter setup:\n\n```bash\nnpm exec openclaw-scheduler -- status # verify scheduler is running\nnode scripts/stuck-run-detector.mjs   # should print: No stale runs older than 15 minute(s).\ntail -5 /tmp/openclaw-scheduler.log   # live logs\n```\n\nDispatcher setup is covered in:\n- [INSTALL.md](INSTALL.md) (macOS launchd: LaunchAgent or LaunchDaemon)\n- [INSTALL-LINUX.md](INSTALL-LINUX.md) (Linux/WSL2 systemd + PM2 fallback)\n- [INSTALL-WINDOWS.md](INSTALL-WINDOWS.md) (WSL2 setup path)\nFor additional hosts, see [INSTALL-ADDITIONAL-HOST.md](INSTALL-ADDITIONAL-HOST.md).\n\n---\n\n## Five-Minute Setup\n\nThis is the shortest path from \"I installed it\" to \"I have a real job running.\"\n\n### 1. Install and initialize\n\n```bash\nmkdir -p ~/.openclaw/scheduler\nnpm install --ignore-scripts=false --prefix ~/.openclaw/scheduler openclaw-scheduler@latest\nalias ocs='npm exec --prefix ~/.openclaw/scheduler openclaw-scheduler --'\nocs setup\nocs status\n```\n\nWhat this does:\n- installs the package into `~/.openclaw/scheduler`\n- creates or migrates `scheduler.db`\n- installs the scheduler service using the launchd mode you choose (`agent` or `daemon`)\n- creates the built-in helper jobs like `Inbox Consumer` and `Stuck Run Detector`\n\nIf you plan to use the scheduler often, add the `ocs` alias to your shell profile.\n\n### 2. Add your first real job\n\nThis example runs a simple shell health check every 15 minutes.\n\n```bash\nocs jobs add '{\n  \"name\": \"Disk Space Check\",\n  \"schedule_cron\": \"*/15 * * * *\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"df -h /\",\n  \"delivery_mode\": \"none\",\n  \"run_timeout_ms\": 120000,\n  \"origin\": \"system\"\n}'\n```\n\nWhat it means in plain English:\n- `schedule_cron`: run every 15 minutes\n- `session_target: \"shell\"`: run a shell command directly, no AI needed\n- `payload_message`: the command to run\n- `delivery_mode: \"none\"`: do not send the output anywhere automatically\n- `origin: \"system\"`: this job was created by the system, not from a user chat\n\n### 3. Run it now and inspect the result\n\n```bash\nocs jobs list\n# copy the job ID for \"Disk Space Check\"\n\nocs jobs run <job-id>\nocs runs list <job-id> 5\n```\n\nIf you want the full run record:\n\n```bash\nocs runs get <run-id>\n```\n\nAt that point you have a working scheduler install, a real job, and visible run history. Everything after this is layering on more power: AI jobs, delivery, retries, workflow chains, and approvals.\n\n---\n\n## Starter Recipes\n\nThese are copy-paste examples for the most common first workflows.\n\n### 1. Shell health check with failure alerts\n\nUse this when you want a script to run reliably even if the OpenClaw gateway is down.\n\n```bash\nocs jobs add '{\n  \"name\": \"API Health Check\",\n  \"schedule_cron\": \"*/15 * * * *\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"curl -fsS http://127.0.0.1:8080/health || exit 1\",\n  \"delivery_mode\": \"announce\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 120000,\n  \"origin\": \"system\"\n}'\n```\n\nWhy this is useful:\n- it runs even if the gateway is unhealthy\n- it only announces on failure\n- every run is stored in history\n\n### 2. Daily AI summary\n\nUse this when you want a scheduled agent report instead of a shell script.\n\n```bash\nocs jobs add '{\n  \"name\": \"Daily Ops Summary\",\n  \"schedule_cron\": \"0 9 * * *\",\n  \"schedule_tz\": \"America/New_York\",\n  \"session_target\": \"isolated\",\n  \"payload_message\": \"Summarize the last 24 hours of important errors, deploys, and follow-ups in 5 bullet points.\",\n  \"delivery_mode\": \"announce-always\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 300000,\n  \"origin\": \"system\"\n}'\n```\n\nWhy this is useful:\n- the agent runs in its own isolated session\n- delivery is retried durably and exhausted failures remain visible to operators\n- the run history stays separate from your personal chat threads\n\n### 3. Approval-gated follow-up step\n\nUse this when a risky step should wait for a human before it runs.\n\n```bash\nocs jobs add '{\n  \"name\": \"Delete Old Backups\",\n  \"parent_id\": \"<parent-job-id>\",\n  \"trigger_on\": \"success\",\n  \"approval_required\": 1,\n  \"approval_timeout_s\": 3600,\n  \"approval_auto\": \"reject\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"find /backups -type f -mtime +14 -delete\",\n  \"delivery_mode\": \"announce-always\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 120000\n}'\n```\n\nWhy this is useful:\n- the parent job can run automatically\n- the risky cleanup step pauses until someone approves it\n- the scheduler records who approved or rejected it\n\nApprove or reject later with:\n\n```bash\nocs approvals list --json\nocs approvals approve <approval-id> --reason \"Change window open\"\nocs approvals reject <approval-id> --reason \"Not today\"\n```\n\n---\n\n## Common Migrations\n\nIf you already have cron jobs, OpenClaw cron entries, or shell scripts, this is the simplest way to think about the conversion.\n\n### 1. OpenClaw built-in cron -> inspect, import, test, then disable duplicates\n\nThe default importer reads the supported OpenClaw CLI rather than an internal storage file. It calls `openclaw cron list --json` and `openclaw cron get <id> --json`:\n\n```bash\nopenclaw-scheduler migrate --dry-run --json > migration-report.json\nopenclaw-scheduler migrate --json\nopenclaw-scheduler jobs list --json\n```\n\nThe dry run never opens, creates, or migrates the target scheduler database.\nExisting-ID duplicate checks therefore occur during the real import.\n\nCron expressions and one-shot timestamps are preserved exactly. Intervals that five-field cron cannot represent exactly are rejected unless the operator explicitly passes `--allow-inexact-every`. A pre-SQLite export is opt-in:\n\n```bash\nopenclaw-scheduler migrate --legacy-json ~/.openclaw/cron/jobs.json --dry-run --json\n```\n\nAfter representative imported jobs complete successfully, disable only the corresponding native jobs:\n\n```bash\nopenclaw cron edit <job-id> --disable\n```\n\nRollback by stopping the scheduler, disabling its imported copies, and re-enabling the native jobs. Retain the scheduler database until rollback verification is complete.\n\n### 2. Plain shell cron line -> `session_target: \"shell\"`\n\nIf you have a normal cron line like:\n\n```cron\n*/5 * * * * /usr/local/bin/check-api.sh\n```\n\nConvert it to:\n\n```bash\nocs jobs add '{\n  \"name\": \"API Check\",\n  \"schedule_cron\": \"*/5 * * * *\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"/usr/local/bin/check-api.sh\",\n  \"delivery_mode\": \"announce\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 120000,\n  \"origin\": \"system\"\n}'\n```\n\nChoose `shell` when the task is deterministic and you do not need AI reasoning.\n\n### 3. AI-ish cron job -> `session_target: \"isolated\"`\n\nIf the old job was really “run a prompt every morning”, use an isolated agent job instead of a shell script:\n\n```bash\nocs jobs add '{\n  \"name\": \"Daily Status Summary\",\n  \"schedule_cron\": \"0 8 * * *\",\n  \"schedule_tz\": \"America/New_York\",\n  \"session_target\": \"isolated\",\n  \"payload_message\": \"Summarize the most important errors, deploys, and follow-ups from the last 24 hours in 5 bullet points.\",\n  \"delivery_mode\": \"announce-always\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 300000,\n  \"origin\": \"system\"\n}'\n```\n\nChoose `isolated` when the job needs reasoning, writing, summarization, or tools.\n\n### 4. Two cron jobs with manual ordering -> parent/child chain\n\nIf your current workflow is:\n- run a backup\n- wait\n- run verification\n\nModel that as a chain instead of two unrelated cron entries:\n\n```bash\nocs jobs add '{\n  \"name\": \"Nightly Backup\",\n  \"schedule_cron\": \"0 2 * * *\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"/usr/local/bin/nightly-backup.sh\",\n  \"delivery_mode\": \"announce\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 600000,\n  \"origin\": \"system\"\n}'\n```\n\nThen create the follow-up:\n\n```bash\nocs jobs add '{\n  \"name\": \"Verify Nightly Backup\",\n  \"parent_id\": \"<backup-job-id>\",\n  \"trigger_on\": \"success\",\n  \"trigger_delay_s\": 60,\n  \"session_target\": \"shell\",\n  \"payload_message\": \"/usr/local/bin/verify-backup.sh\",\n  \"delivery_mode\": \"announce\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 120000\n}'\n```\n\nThis is one of the biggest upgrades over plain cron: the second step now runs because the first step succeeded, not because the clock happened to reach another minute.\n\n### 5. Risky follow-up -> add `approval_required`\n\nIf the current process is “job runs, then a human decides whether to continue,” model that decision directly:\n\n```bash\nocs jobs add '{\n  \"name\": \"Delete Temp Files\",\n  \"parent_id\": \"<analysis-job-id>\",\n  \"trigger_on\": \"success\",\n  \"approval_required\": 1,\n  \"approval_timeout_s\": 3600,\n  \"approval_auto\": \"reject\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"find /tmp/myapp -type f -mtime +7 -delete\",\n  \"delivery_mode\": \"announce-always\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 120000\n}'\n```\n\nThat keeps the job automated, but only up to the point where human judgment is actually needed.\n\n### Rule of thumb\n\nWhen converting existing work:\n- start with `shell` unless you clearly need AI reasoning\n- add delivery only if someone really needs to see the output\n- use chains when one step depends on another\n- use approvals when the next step would be annoying, expensive, or risky if it ran by mistake\n\n---\n\n## Platform Support\n\n| Platform | Service Manager | Shell Jobs | Status |\n|----------|----------------|------------|--------|\n| macOS | launchd (`agent` or `daemon`) | `/bin/zsh` | Tested |\n| Linux | systemd user service or PM2 fallback | `/bin/bash` | Supported |\n| Windows (WSL2) | systemd user service or PM2 fallback inside WSL2 | `/bin/bash` | Supported |\n| Windows (native or WSL1) | Not applicable | Not applicable | Not supported; use WSL2 |\n\n- **macOS:** Full guide in [INSTALL.md](INSTALL.md)\n- **Linux:** Full guide in [INSTALL-LINUX.md](INSTALL-LINUX.md)\n- **Windows:** Install WSL2, then follow [INSTALL-LINUX.md](INSTALL-LINUX.md). See [INSTALL-WINDOWS.md](INSTALL-WINDOWS.md) for WSL2 setup.\n\nOverride the shell for shell jobs with the `SCHEDULER_SHELL=/path/to/shell` environment variable.\n\n---\n\n## Architecture\n\nThe scheduler sits alongside the OpenClaw gateway as an independent process.\nIsolated targets use stable per-job sessions that remain separate from the\nuser's main conversation. Main targets use the existing main session, and shell\ntargets do not create an agent session.\n\n```\n┌─────────────────────────────────────────────┐\n│  Host Machine (e.g., scheduler-host.local)  │\n│                                              │\n│  OpenClaw Gateway (:18789)                   │\n│    ├─ Telegram / Discord / etc.              │\n│    ├─ Chat completions endpoint (/v1/...)    │\n│    ├─ Tool execution (exec, browser, k8s...) │\n│    └─ Memory search                          │\n│                                              │\n│  Scheduler (launchd service)                 │\n│    ├─ SQLite DB (scheduler.db)               │\n│    ├─ Job dispatch via chat completions      │\n│    ├─ Workflow chain engine                  │\n│    ├─ Retry logic                            │\n│    ├─ Shell job execution                    │\n│    ├─ HITL approval gates                    │\n│    ├─ Idempotency ledger                     │\n│    ├─ Inter-agent message queue              │\n│    ├─ Task tracker                           │\n│    └─ MinIO backup                           │\n└─────────────────────────────────────────────┘\n```\n\n### Tick Loop\n\n```\n┌──────────────────────────────────────────────────────────────┐\n│                   Dispatcher Loop (10s tick)                  │\n│                                                              │\n│  1. Gateway health check                                     │\n│  2. Find due jobs → dispatch                                 │\n│  3. Check running runs (stale/timeout detection)             │\n│  4. HITL approval gate check                                 │\n│  5. Message delivery + spawn handling                        │\n│  6. Task tracker dead-man's-switch                           │\n│  7. Expire old messages                                      │\n│  8. Prune old runs + WAL checkpoint (hourly)                 │\n│  9. Backup to MinIO (every 5 min)                            │\n└──────────────────────────────────────────────────────────────┘\n         │                              │\n         ▼                              ▼\n  ┌───────────────────┐        ┌──────────────────────┐\n  │     SQLite DB      │        │   OpenClaw Gateway    │\n  │                    │        │                       │\n  │  • jobs            │        │  • /v1/chat/completions│\n  │  • runs            │        │  • /tools/invoke      │\n  │  • messages        │        │  • /health            │\n  │  • agents          │        │  • system event CLI   │\n  │  • approvals       │        └──────────────────────┘\n  │  • task_tracker    │\n  │  • idempotency_ledger│\n  │  • delivery_aliases│\n  │  • schema_migrations│\n  └───────────────────┘\n```\n\n### Session Types\n\n| Session | Created By | Lifetime | Used For |\n|---------|-----------|----------|----------|\n| User DM | Telegram message | Persistent per-peer | Your conversations |\n| Group chat | Group message | Persistent per-group | Team discussions |\n| Isolated job | Dispatcher via API | Persistent per job, reused across runs | Cron jobs, chain steps |\n| Main session | Dispatcher API, or `openclaw system event` for fire-and-forget | Existing main session | Jobs needing main context |\n| Shell | Dispatcher (direct) | Per-job (no session) | Cron scripts, backups, maintenance |\n| Sub-agent | `sessions_spawn` | Task-scoped | Delegated work |\n\nIsolated scheduler jobs cannot see user-chat history, but later runs of the same\njob reuse its warm per-job session and may retain that job's earlier context.\nMain-session jobs intentionally use the existing main conversation.\n\n---\n\n## How Jobs Execute\n\n### Isolated Jobs (default)\n\n```\nScheduler tick (every 10s)\n  │\n  ├─ getDueJobs() → \"Hourly Workspace Backup is due\"\n  ├─ hasRunningRun()? → skip if overlap_policy='skip'\n  ├─ createRun() → status='running'\n  ├─ setAgentStatus('main', 'busy')\n  │\n  ├─ POST /v1/chat/completions\n  │   session: agent:<agent_id>:scheduler:<job_id>  (stable per job, isolated from main)\n  │   model: openclaw:main\n  │   message: [job prompt + any pending inbox messages]\n  │\n  │   ← \"Committed 3 files, pushed to origin\"\n  │\n  ├─ finishRun('ok', summary)\n  ├─ setAgentStatus('main', 'idle')\n  ├─ Deliver to Telegram? → delivery_mode + channel + target\n  ├─ Queue result message for traceability\n  ├─ Advance next_run_at to next cron fire\n  └─ Trigger child jobs if any (workflow chain)\n```\n\n### Main Session Jobs\n\nFor jobs that need the main session context (rare), use\n`payload_kind: \"systemEvent\"`. Default, `execute`, or `plan` execution waits\nfor the agent response and captures it for normal completion handling:\n\n```\nDispatcher → POST /v1/chat/completions → wait for main-session response\n```\n\nSet `execution_intent: \"fire-and-forget\"` only when the scheduler should inject\nthe event and return immediately without capturing the eventual response:\n\n```\nDispatcher → exec: openclaw system event --text \"...\" --mode now\n```\n\nHandoff v4 main-session jobs use only the synchronous path because it carries\nthe artifact, runtime-instance, and fresh capability-nonce binding through the\nGateway request. The `openclaw system event` transport cannot carry that\nbinding, so v4 fire-and-forget jobs fail validation. Earlier handoff versions\nkeep the existing fire-and-forget behavior.\n\n### Shell Jobs\n\n```\nShell Job (session_target='shell')\n  │\n  ├─ getDueJobs() → \"Hourly Backup is due\"\n  ├─ createRun() → status='running'\n  ├─ run \"<payload_message>\" via shell (platform default or SCHEDULER_SHELL)\n  │   (no gateway required)\n  │   ← exit 0: \"Backup complete, 3 files\"\n  │\n  ├─ finishRun(exit===0 ? 'ok' : 'error')\n  ├─ announce: post output if exit ≠ 0\n  ├─ announce-always: post output regardless\n  └─ Trigger child jobs if any\n```\n\n### Prompt Building\n\nEach isolated job prompt includes:\n1. Header: `[scheduler:<job_id> <job_name>]`\n2. Pending inbox messages for the agent (up to 5)\n3. Context from prior runs (if `context_retrieval` is set)\n4. The job's `payload_message`\n\n---\n\n## Delivery Modes\n\nThe scheduler delivers job output through the OpenClaw gateway's messaging\nsystem. All channels supported by the gateway work with the scheduler:\n**Telegram**, **Discord**, **WhatsApp**, **Signal**, **iMessage**, and **Slack**.\nSet `delivery_channel` to the channel name and `delivery_to` to the\nchannel-specific target (chat ID, channel ID, phone number, handle, etc.).\n\n| Mode | When output is delivered |\n|------|-------------------------|\n| `none` | Never (background jobs) |\n| `announce` | Agent jobs: delivers when run status is not `ok`. Shell jobs: non-zero exit only. Silently skipped for `main` session jobs (use `announce-always` instead) |\n| `announce-always` | Always delivers output (LLM or shell), including `main` session jobs |\n\n> **Note:** non-exempt jobs using `announce` or `announce-always` are rejected at validation time when `delivery_to` is absent. Runtime delivery is written to a transactional outbox, separate from agent prompt messages. Outbox claims expire and recover safely. Multipart output is stored as independently retryable rows with deterministic `:part:i/N` idempotency keys. Durable enqueue is not a delivery receipt; run-scoped completion debt closes only after every part is delivered. Attachment rows retain size and SHA-256 metadata.\n>\n> Examples in this document use Telegram for delivery_channel since it is the\n> most common configuration. Replace with your channel of choice.\n\n---\n\n## Delivery Aliases\n\nDelivery aliases let you define named delivery targets (e.g., `@my_team`) instead of hard-coding channel/target pairs in every job.\n\n```bash\n# Create a named alias\nopenclaw-scheduler alias add my_team telegram -100200000000\n\n# Use @alias in job (resolves at dispatch time)\nopenclaw-scheduler jobs add '{\n  \"name\": \"Alert\",\n  \"delivery_mode\": \"announce\",\n  \"delivery_to\": \"@my_team\",\n  ...\n}'\n\n# List aliases\nopenclaw-scheduler alias list\n\n# Remove an alias\nopenclaw-scheduler alias remove my_team\n```\n\nAliases are resolved at dispatch time. If an alias is deleted, jobs fall back to suppressed delivery.\n\n---\n\n## Shell Jobs\n\nShell jobs run a command directly on the host — no gateway or LLM required. Ideal for backups, scripts, maintenance tasks, and anything that doesn't need AI.\n\n```bash\nopenclaw-scheduler jobs add '{\n  \"name\": \"Hourly Backup\",\n  \"schedule_cron\": \"0 * * * *\",\n  \"schedule_tz\": \"America/New_York\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"/path/to/backup.sh\",\n  \"delivery_mode\": \"announce\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 600000,\n  \"origin\": \"system\"\n}'\n```\n\n**Key properties:**\n- **No gateway dependency** — runs even when gateway is down\n- `payload_message` is the command to execute (shell string passed to the configured shell)\n- Output captured up to 1MB, with preview/offload budgets to keep large output out of the main run row\n- Shell runs persist structured failure context on `runs`: `shell_exit_code`, `shell_signal`, `shell_timed_out`, `shell_stdout`, `shell_stderr`, plus optional `shell_stdout_path` / `shell_stderr_path` when large output is offloaded\n- Failure-triggered agent children receive shell context with separate exit code, stdout, and stderr blocks\n- `run_timeout_ms` controls max execution time (required, no default)\n- Workflow chains work the same way — shell jobs can trigger children on success/failure\n- Shell jobs now honor `max_retries` before failure children fire, the same as isolated agent jobs\n- `openclaw-scheduler runs output <run-id> stdout|stderr` retrieves stored or offloaded shell output on demand\n\n**With environment variables:**\n```bash\nopenclaw-scheduler jobs add '{\n  \"name\": \"DB Dump\",\n  \"schedule_cron\": \"0 3 * * *\",\n  \"session_target\": \"shell\",\n  \"payload_message\": \"PGPASSWORD=secret pg_dump mydb > /backups/mydb.sql && echo OK\",\n  \"delivery_mode\": \"announce-always\",\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 600000,\n  \"origin\": \"system\"\n}'\n```\n\n---\n\n## HITL Approval Gates\n\nJobs with `approval_required: 1` pause every dispatch before execution. The gate\napplies uniformly to root, manual, scheduled, one-shot, retry, and\nchain-triggered work. Every gated attempt is represented by a durable dispatch\nrow and an `awaiting_approval` run.\n\n```bash\n# Scheduled root job that requires a scoped operator approval\nopenclaw-scheduler jobs add '{\n  \"name\": \"Deploy to Prod\",\n  \"schedule_cron\": \"0 10 * * 1-5\",\n  \"approval_required\": 1,\n  \"approval_risk_level\": \"high\",\n  \"approval_approver_scope\": \"user:alex\",\n  \"approval_timeout_s\": 3600,\n  \"approval_auto\": \"reject\",\n  \"session_target\": \"shell\",\n  \"payload_kind\": \"shellCommand\",\n  \"payload_message\": \"Deploy the application to production\",\n  \"delivery_mode\": \"none\",\n  \"origin\": \"system\",\n  \"run_timeout_ms\": 300000\n}'\n```\n\nWhen triggered, the job creator receives the pending approval identifier, risk,\nscope, and CLI commands.\n\n```bash\nopenclaw-scheduler approvals list --json\nopenclaw-scheduler approvals approve APPROVAL_ID --reason \"Change window open\"\nopenclaw-scheduler approvals reject APPROVAL_ID --reason \"Postponing until the next change window\"\n```\n\n**Key notes:**\n- `approval_risk_level` is optional and accepts `low`, `medium`, or `high`.\n- `approval_approver_scope` accepts an unprefixed exact identity or\n  `exact:`, `user:`, `uid:`, or `principal:` matching for the local OS account.\n  Domain scopes are not supported.\n- AgentCLI handoff v4 exposes approval-scope enforcement as one coarse capability\n  while its manifests may contain domain scopes. The scheduler therefore\n  advertises `approval_scope_enforcement: false` so scoped agentcli manifests\n  fail capability negotiation instead of being partially enforced. Direct\n  scheduler jobs may still use the supported local scopes above.\n- The scheduler derives the approver from the invoking operating-system user\n  and UID. CLI flags and environment variables cannot select another identity.\n- Prefer `approvals approve/reject APPROVAL_ID`; `jobs approve/reject JOB_ID`\n  remains a legacy convenience for that job's current pending approval and\n  cannot override approver identity.\n- Use `approvals list --json` to copy the complete approval UUID before making\n  a decision.\n- `approval_auto: \"approve\"` is invalid with an approver scope. Scoped timeout\n  resolution fails closed.\n- The approval snapshots risk, scope, and a canonical SHA-256 binding of the\n  execution contract. Changing, disabling, or deleting the job cancels the\n  pending approval instead of applying it to different work.\n- `approval_timeout_s` controls the auto-resolution deadline and\n  `approval_auto` selects `\"approve\"` or `\"reject\"` for unscoped jobs.\n\n### Declared output formats\n\nSet `output_format` to `json`, `ndjson`, or `text` when downstream work requires\na validated result shape. Successful JSON output must parse as one JSON value;\neach nonblank NDJSON line must parse independently; text is stored on the\nnormalized text path. The scheduler persists validity, byte count, SHA-256\ndigest, and either the parsed value or an artifact reference on the run.\nMalformed JSON or NDJSON remains a successful execution with\n`structured_output_valid: 0`, a `structured_output_warning`, and a null parsed\nvalue; success children may still run because transport success is distinct\nfrom output-shape validation.\n\n### Post-success verification\n\nAny synchronous job can declare a separate local shell verification command\nthat runs after its primary execution and structured-output parsing, but before\nterminal evidence, delivery, and child dispatch:\n\n```json\n{\n  \"verify_shell\": \"test -f /srv/app/healthy\",\n  \"verify_timeout_s\": 30,\n  \"verify_on_failure\": \"error\"\n}\n```\n\n`verify_on_failure` accepts `error` or `warn`. An error policy converts a failed\nverification to a terminal error and blocks success children; a warning policy\npreserves primary success and records the warning. Verification stores only\nstatus, timing, exit metadata, byte counts, and SHA-256 digests, never raw\nverification output. Fire-and-forget jobs cannot declare verification.\n\n---\n\n## Idempotency\n\nControl what happens when the dispatcher crashes mid-run. Despite the legacy\nfield name `delivery_guarantee`, this setting governs execution replay, not\nexternal message-delivery confirmation.\n\n```bash\n# Enable at-least-once: crashed runs replay on next startup\nopenclaw-scheduler jobs update <id> '{\"delivery_guarantee\":\"at-least-once\"}'\n\n# Default (at-most-once): no replay\nopenclaw-scheduler jobs update <id> '{\"delivery_guarantee\":\"at-most-once\"}'\n```\n\n**How it works:**\n- **`at-most-once`** (default): if dispatcher crashes mid-run, run is marked `crashed` and the schedule advances normally. The run is not replayed.\n- **`at-least-once`**: on startup, any `running` run from a crashed dispatcher is replayed with a new run. `replay_of` field tracks the original run ID for lineage.\n\n**Idempotent agents** can return `IDEMPOTENT_SKIP` in their response to acknowledge they've already processed this execution (detected via the idempotency ledger).\n\nThe ledger also prevents double-dispatch in concurrent tick scenarios — each run acquires a lock before dispatch.\n\n---\n\n## Context Retrieval\n\nInject prior run summaries into a job's prompt so the agent has awareness of recent outcomes.\n\n```bash\n# Inject last 3 run summaries into job prompt\nopenclaw-scheduler jobs update <id> '{\"context_retrieval\":\"recent\",\"context_retrieval_limit\":3}'\n\n# Hybrid: recent runs + TF-IDF search for semantically relevant summaries\nopenclaw-scheduler jobs update <id> '{\"context_retrieval\":\"hybrid\",\"context_retrieval_limit\":5}'\n```\n\n**Modes:**\n| Mode | Description |\n|------|-------------|\n| `none` | No context injected (default) |\n| `recent` | Last N run summaries, newest first |\n| `hybrid` | Recent runs + TF-IDF similarity search against all prior summaries |\n\nUseful for health check jobs that should know about yesterday's failures, or audit jobs that build incrementally on prior work.\n\n---\n\n## Task Tracker\n\nThe task tracker provides a dead-man's-switch for coordinating multi-agent sub-agent teams. Create a tracker, assign expected agents, and receive a summary when all agents complete (or time out).\n\n```bash\n# Create a task group to monitor N sub-agents\nopenclaw-scheduler tasks create '{\n  \"name\": \"v2-release-team\",\n  \"expected_agents\": [\"schema-agent\",\"frontend-agent\",\"docs-agent\"],\n  \"timeout_s\": 1800,\n  \"delivery_channel\": \"telegram\",\n  \"delivery_to\": \"YOUR_CHAT_ID\"\n}'\n\n# Monitor\nopenclaw-scheduler tasks list\nopenclaw-scheduler tasks status <tracker-id>\n```\n\nEach agent in the team must send heartbeat updates. If an agent goes silent past its timeout, it's declared dead. When all agents complete or time out, a summary is delivered to the configured channel.\n\n---\n\n## Resource Pools\n\nPrevent concurrent execution across different jobs that share a resource.\n\n```bash\n# Two jobs that must not run concurrently\nopenclaw-scheduler jobs add '{\"name\":\"DB Migration\",\"resource_pool\":\"database\",...}'\nopenclaw-scheduler jobs add '{\"name\":\"DB Backup\",\"resource_pool\":\"database\",...}'\n```\n\nIf one job in a pool is currently running, all other pool members skip their tick (same behavior as `overlap_policy: 'skip'`, but cross-job rather than per-job). Pool membership is set via the `resource_pool` string field.\n\n---\n\n## Workflow Chains\n\nJobs can be linked into parent → child chains. When a parent completes, its children fire automatically.\n\n### Pattern 1: Chained Jobs\n\n```bash\n# Parent: runs on cron\nopenclaw-scheduler jobs add '{\n  \"name\": \"Build App\",\n  \"schedule_cron\": \"0 10 * * *\",\n  \"payload_message\": \"Build the application\",\n  \"run_timeout_ms\": 300000,\n  \"origin\": \"system\"\n}'\n# → id: \"abc123...\"\n\n# Child: fires when parent succeeds\nopenclaw-scheduler jobs add '{\n  \"name\": \"Deploy App\",\n  \"payload_message\": \"Deploy to production\",\n  \"parent_id\": \"abc123...\",\n  \"trigger_on\": \"success\",\n  \"run_timeout_ms\": 300000\n}'\n\n# Child: fires when parent fails\nopenclaw-scheduler jobs add '{\n  \"name\": \"Build Alert\",\n  \"payload_message\": \"Build failed -- check logs\",\n  \"parent_id\": \"abc123...\",\n  \"trigger_on\": \"failure\",\n  \"delivery_mode\": \"announce\",\n  \"delivery_to\": \"YOUR_CHAT_ID\",\n  \"run_timeout_ms\": 300000\n}'\n```\n\n**Trigger types:**\n- `success` — parent run status = `ok`\n- `failure` — parent run status = `error` or `timeout`\n- `complete` — any completion (success, failure, or timeout)\n- Child jobs are chain-triggered only. Use `trigger_delay_s` to delay a child run; one-shot `schedule_kind: \"at\"` is for root jobs only.\n\n### Pattern 2: Output-Based Trigger Conditions\n\n```bash\n# Only fire child if parent output contains \"ALERT\"\nopenclaw-scheduler jobs add '{\n  \"name\": \"Alert Handler\",\n  \"parent_id\": \"<monitor-job-id>\",\n  \"trigger_on\": \"success\",\n  \"trigger_condition\": \"contains:ALERT\",\n  \"payload_message\": \"Handle the alert\",\n  \"run_timeout_ms\": 300000\n}'\n\n# Regex condition\nopenclaw-scheduler jobs add '{\n  \"name\": \"Critical Error Handler\",\n  \"parent_id\": \"<monitor-job-id>\",\n  \"trigger_on\": \"success\",\n  \"trigger_condition\": \"regex:ERROR.*critical\",\n  \"payload_message\": \"Handle critical error\",\n  \"run_timeout_ms\": 300000\n}'\n```\n\n`regex:` conditions use RE2 syntax and linear-time matching. Backreferences,\nlookahead, and lookbehind are rejected. The full condition is limited to 1,024\ncharacters, and regex evaluation fails closed when the parent output exceeds\n65,536 UTF-8 bytes. Use `contains:` when a literal substring is sufficient.\n\n### Pattern 3: Multi-Agent Workflows\n\nChain jobs targeting different agents:\n\n```\nBuild (agent: main, cron: 10am)\n  └─ Deploy (agent: ops, trigger: success)\n      └─ Health Check (agent: main, trigger: success, delay: 60s)\n```\n\n```bash\nopenclaw-scheduler jobs add '{\n  \"name\": \"Deploy\",\n  \"payload_message\": \"deploy\",\n  \"agent_id\": \"ops\",\n  \"parent_id\": \"<build-id>\",\n  \"trigger_on\": \"success\",\n  \"run_timeout_ms\": 300000\n}'\n```\n\n### Pattern 4: Delayed Triggers\n\n```bash\nopenclaw-scheduler jobs add '{\n  \"name\": \"Post-Deploy Check\",\n  \"payload_message\": \"Verify services healthy\",\n  \"parent_id\": \"<deploy-id>\",\n  \"trigger_on\": \"success\",\n  \"trigger_delay_s\": 60,\n  \"run_timeout_ms\": 300000\n}'\n```\n\n### Pattern 5: Runtime Spawning\n\nA running agent can create new jobs on the fly by sending a `spawn` message:\n\n```json\n{\n  \"from_agent\": \"main\",\n  \"to_agent\": \"scheduler\",\n  \"kind\": \"spawn\",\n  \"body\": \"{\\\"name\\\":\\\"Dynamic Task\\\",\\\"payload_message\\\":\\\"analyze results\\\",\\\"delete_after_run\\\":true,\\\"run_now\\\":true}\"\n}\n```\n\n### Visualizing Chains\n\n```bash\nopenclaw-scheduler jobs tree\n\n# Output (all root jobs and their chains):\n# Build App\n#   └─ Deploy App [→success] (agent:ops)\n#   └─ Build Alert [→failure]\n#   └─ Health Check [→complete +60s]\n```\n\n---\n\n## Retry Logic\n\nJobs can auto-retry before declaring failure and triggering failure children.\n\n```bash\nopenclaw-scheduler jobs add '{\n  \"name\": \"Flaky Deploy\",\n  \"schedule_cron\": \"0 10 * * *\",\n  \"payload_message\": \"deploy to prod\",\n  \"max_retries\": 3,\n  \"run_timeout_ms\": 300000,\n  \"origin\": \"system\"\n}'\n```\n\n**How it works:**\n\n1. Job fails → check `max_retries`\n2. Retries remaining → schedule retry with exponential backoff (30s, 60s, 120s, ...)\n3. Retry run tracks lineage: `retry_of` → failed run ID, `retry_count` incremented\n4. All retries exhausted → trigger failure children + apply error backoff\n5. Any retry succeeds → trigger success children, reset `consecutive_errors`\n\n**Key:** failure children don't fire until all retries are exhausted. This prevents false alerts on transient failures.\n\nThis retry ladder now applies uniformly to shell jobs, isolated agent jobs, and main-session jobs that surface dispatch failures.\n\n| Field | Default | Description |\n|-------|---------|-------------|\n| `max_retries` | 0 | Max retry attempts (0 = no retry) |\n| `runs.retry_of` | null | ID of the failed run being retried |\n| `runs.retry_count` | 0 | Which attempt this is (0 = first try) |\n\n---\n\n## Chain Safety\n\n### Max Chain Depth\n\n`MAX_CHAIN_DEPTH = 10` — enforced on:\n- `createJob` — can't add a child deeper than 10 levels\n- `updateJob` — can't move a job to create a chain deeper than 10\n- `triggerChildren` — runtime safeguard stops dispatch at depth 10\n\n### Cycle Detection\n\n`detectCycle()` walks up the parent chain on both create and update. Catches:\n- Self-referential: A → A\n- Deep cycles: A → B → C → A\n- Throws with descriptive error message\n\n### Chain Cancellation\n\n```bash\nopenclaw-scheduler jobs cancel <job-id>\n# Requests cancellation for active runs on this job and its descendants\n```\n\nCancellation is fenced against dispatcher ownership. Pending work is cancelled atomically. A running shell job receives process-group termination and cannot finalize or trigger children after cancellation wins. Agent work records and sends a Gateway cancellation request. Finished runs are unchanged. Poll `runs get`, `runs running`, or `status`; chat notifications are asynchronous and can be stale.\n\n---\n\n## Inter-Agent Messaging\n\nAgents exchange messages through the scheduler's queue.\n\n### Features\n- **Priority:** 0 (normal), 1 (high), 2 (urgent) — inbox sorted by priority then time\n- **Threading:** `reply_to` links messages into conversations\n- **Read receipts:** pending → delivered → read (with timestamps)\n- **Broadcast:** `to_agent = 'broadcast'` reaches all agents\n- **TTL/Expiry:** `expires_at` auto-expires unread messages\n- **Metadata:** JSON blob for structured data\n- **Kinds:** `text`, `task`, `result`, `status`, `system`, `spawn`, `decision`, `constraint`, `fact`, `preference`\n- **Owner field:** `owner` tracks message originator for audit\n- **Job linking:** messages can reference `job_id` and `run_id`\n\n### Delivery\n\nMessages are delivered inline with job prompts. When the dispatcher builds a prompt, it includes up to 5 pending messages for the target agent, marked as `delivered`.\n\n### Usage\n\n```bash\n# Send a message\nopenclaw-scheduler msg send <from-agent> <to-agent> \"message body\"\n\n# Read inbox\nopenclaw-scheduler msg inbox <agent-id>\n\n# Mark all read\nopenclaw-scheduler msg readall <agent-id>\n```\n\n### Signal Queue Consumer Example\n\nUse this when you want scripts to enqueue only actionable signals, then a single consumer job pushes those signals to Telegram.\n\n```bash\n# 1) Enqueue a signal\nopenclaw-scheduler msg send monitor-agent main \"Found 3 critical errors in prod logs\"\n\n# 2) Run the inbox consumer daemon (event-driven, watches SQLite WAL)\n#    Delivers within ~250ms of a message landing in the DB.\n#    No polling cron needed — the daemon watches for WAL changes.\nnode scripts/inbox-consumer.mjs --watch --to YOUR_CHAT_ID --channel telegram\n\n# Or as a one-shot drain (useful for testing):\nnode scripts/inbox-consumer.mjs --to YOUR_CHAT_ID --channel telegram\n```\n\n---\n\n## Backup & Recovery\n\nMinIO backups are disabled by default. Set `SCHEDULER_BACKUP=1` to enable. Requires `mc` (MinIO client) installed and configured with a `backupstore` alias.\n\nThe scheduler can back up its SQLite database to MinIO automatically.\n\n```bash\n# Manual snapshot\nnode backup.js snapshot\n\n# Manual rollup (hourly aggregate)\nnode backup.js rollup\n\n# Check backup status\nnode backup.js status\n\n# Restore from snapshot\nnode backup.js restore\n\n# Prune old backups\nnode backup.js prune\n```\n\n**Configuration via environment:**\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `SCHEDULER_BACKUP_MC_ALIAS` | `backupstore` | MinIO client alias |\n| `SCHEDULER_BACKUP_BUCKET` | `scheduler-backups` | MinIO bucket name |\n| `SCHEDULER_BACKUP_PREFIX` | `scheduler` | Path prefix within bucket |\n\nRequires `mc` (MinIO client) in PATH and a configured `backupstore` alias.\n\n**Built-in (when running as a background service):**\n- Snapshot every 5 minutes (`SCHEDULER_BACKUP_MS`)\n- Rollup on the first tick of each hour\n\n---\n\n## Agent Registry\n\n| Operation | Function | Description |\n|-----------|----------|-------------|\n| Register | `upsertAgent(id, opts)` | Create or update |\n| Get | `getAgent(id)` | Fetch by ID |\n| List | `listAgents()` | All agents |\n| Set status | `setAgentStatus(id, status, sessionKey)` | idle/busy/offline |\n| Touch | `touchAgent(id)` | Update last_seen_at |\n\nThe dispatcher automatically manages agent status during dispatch (idle → busy → idle).\n\n```bash\nopenclaw-scheduler agents list\nopenclaw-scheduler agents get <id>\nopenclaw-scheduler agents register <id> [name]\n```\n\n---\n\n## Database Schema\n\n**Schema version:** 28 | **Mode:** WAL | **Foreign keys:** ON\n\n### Tables\n\n| Table | Description |\n|-------|-------------|\n| `jobs` | Job definitions (schedule, payload, chain config, delivery) |\n| `runs` | Execution history (status, timing, summaries, retry lineage) |\n| `messages` | Inter-agent prompt queue (`pending`, `prompt_claimed`, delivered/read terminal states) |\n| `agents` | Agent registry (status, capabilities, last seen) |\n| `approvals` | Atomic, versioned HITL decisions and dispatch state |\n| `task_tracker` | Multi-agent task group definitions |\n| `task_tracker_agents` | Per-agent status within a task group |\n| `idempotency_ledger` | Dispatch deduplication and at-least-once tracking |\n| `delivery_aliases` | Named delivery targets (channel + target pairs) |\n| `job_dispatch_queue` | Leased durable dispatch claims and replay state |\n| `dispatcher_leases` | Singleton dispatcher ownership and fencing tokens |\n| `delivery_outbox` | Transactional external delivery queue with multipart group/part coordinates |\n| `delivery_attachments` | Durable attachment content/path and integrity metadata |\n| `completion_debts` | Run-scoped completion delivery ownership and recovery state |\n| `evidence_records` | Immutable, content-addressed SHA-256 evidence, one row per run |\n| `message_receipts` | Delivery receipt tracking for messages |\n| `team_tasks` | Team-scoped task definitions and status |\n| `team_mailbox_events` | Projected events from team mailbox activity |\n| `schema_migrations` | Baseline schema version log |\n\n### Jobs (key columns)\n\n```\nid, name, enabled, schedule_kind, schedule_cron, schedule_at, schedule_tz,\nsession_target, agent_id, payload_kind, payload_message,\npayload_model, payload_model_fallback, payload_thinking, execution_intent, execution_read_only,\noverlap_policy, run_timeout_ms, max_queued_dispatches, max_pending_approvals,\nmax_trigger_fanout, output_store_limit_bytes, output_excerpt_limit_bytes,\noutput_summary_limit_bytes, output_offload_threshold_bytes,\nmax_retries, delivery_mode, delivery_channel,\ndelivery_to, delivery_guarantee, delete_after_run, ttl_hours,\nparent_id, trigger_on, trigger_delay_s, trigger_condition,\nresource_pool, auth_profile, auth_profile_fallback,\norigin, source_channel, source_target, source_message_id, source_thread_id,\napproval_required, approval_timeout_s, approval_auto,\napproval_risk_level, approval_approver_scope, output_format,\nverify_shell, verify_timeout_s, verify_on_failure,\ncontext_retrieval, context_retrieval_limit,\npreferred_session_key, job_type, watchdog_target_label,\nwatchdog_check_cmd, watchdog_timeout_min, watchdog_alert_channel,\nwatchdog_alert_target, watchdog_self_destruct, watchdog_started_at,\nnext_run_at, last_run_at, last_status, consecutive_errors,\ncreated_at, updated_at\n```\n\n### Runs (key columns)\n\n```\nid, job_id, status, started_at, finished_at, duration_ms,\nlast_heartbeat, session_key, session_id, summary,\nerror_message, shell_exit_code, shell_signal, shell_timed_out,\nshell_stdout, shell_stderr, shell_stdout_path, shell_stderr_path,\nshell_stdout_bytes, shell_stderr_bytes, dispatched_at, run_timeout_ms,\ntriggered_by_run, retry_of, retry_count, replay_of,\ndelegation_validation, output_format, structured_output, structured_output_valid,\nstructured_output_warning, structured_output_bytes, structured_output_sha256,\nstructured_output_path, verification_result, approval_used\n```\n\n**Run statuses:** `pending`, `running`, `ok`, `error`, `timeout`, `skipped`, `cancelled`, `crashed`, `recovery_blocked`, `awaiting_approval`, `approved`\n\n### Messages (key columns)\n\n```\nid, from_agent, to_agent, reply_to, kind, subject, body,\nmetadata, priority, channel, owner, status, delivered_at,\nread_at, expires_at, created_at, job_id, run_id\n```\n\n### Agents (10 columns)\n\n```\nid, name, status, last_seen_at, session_key, capabilities,\ndelivery_channel, delivery_to, brand_name, created_at\n```\n\n---\n\n## CLI Reference\n\n```bash\n# ── Jobs ──────────────────────────────────────────\nopenclaw-scheduler jobs list                     # List all (supports --type <type>)\nopenclaw-scheduler jobs list --include-handoff-artifacts --json # Validate and hydrate persisted v4 artifacts\nopenclaw-scheduler jobs get <id>                 # Full details as JSON\nopenclaw-scheduler jobs add --file job.json      # Inline JSON and --stdin are also supported\nopenclaw-scheduler jobs update <id> --stdin      # Partial update from standard input\nopenclaw-scheduler jobs validate --file job.json # Validate without DB initialization\nopenclaw-scheduler jobs enable <id>\nopenclaw-scheduler jobs disable <id>              # NOTE: one-shot at-jobs with delete_after_run: true are auto-pruned after 24h (ordinary disabled cron jobs are kept indefinitely)\nopenclaw-scheduler jobs delete <id>              # Cascades to runs\nopenclaw-scheduler jobs tree                     # Visual chain hierarchy\nopenclaw-scheduler jobs cancel <id>              # Cancel running chain\n\n# ── Runs ──────────────────────────────────────────\nopenclaw-scheduler runs list <job-id> [limit]    # Run history\nopenclaw-scheduler runs get <run-id>             # Full run details\nopenclaw-scheduler runs output <run-id> stdout   # Stored/offloaded stdout or stderr\nopenclaw-scheduler runs evidence <run-id>        # Verify and return immutable execution evidence\nopenclaw-scheduler runs running                  # Active runs\nopenclaw-scheduler runs stale [threshold-s]      # Stale runs (default 90s)\n\n# ── Messages ──────────────────────────────────────\nopenclaw-scheduler msg send <from> <to> <body>\nopenclaw-scheduler msg inbox <agent-id> [limit]\nopenclaw-scheduler msg outbox <agent-id> [limit]\nopenclaw-scheduler msg thread <message-id>\nopenclaw-scheduler msg ack <message-id> [actor] [note]\nopenclaw-scheduler msg receipts <message-id> [limit]\nopenclaw-scheduler msg team-inbox <team-id> [limit] [member-id] [task-id]\nopenclaw-scheduler msg read <message-id>\nopenclaw-scheduler msg readall <agent-id>\nopenclaw-scheduler msg unread <agent-id>\n\n# ── Agents ────────────────────────────────────────\nopenclaw-scheduler agents list\nopenclaw-scheduler agents get <id>\nopenclaw-scheduler agents register <id> [name]\n\n# ── Approvals ─────────────────────────────────────\nopenclaw-scheduler approvals list --json                 # Full pending approval IDs\nopenclaw-scheduler approvals approve <id> [--reason ...] # Approve by approval ID\nopenclaw-scheduler approvals reject <id> [--reason ...]  # Reject by approval ID\nopenclaw-scheduler jobs approve <job-id>                  # Legacy current-gate lookup\nopenclaw-scheduler jobs reject <job-id> [reason]          # Legacy current-gate lookup\n\n# ── Task Tracker ──────────────────────────────────\nopenclaw-scheduler tasks create '<json>'        # Create task group\nopenclaw-scheduler tasks list                   # Active task groups\nopenclaw-scheduler tasks status <id>            # Detailed status\nopenclaw-scheduler tasks history [limit]        # Recently completed groups\nopenclaw-scheduler tasks heartbeat <id> <label> running|completed|failed [msg]\nopenclaw-scheduler tasks register-session <id> <label> <session-key>  # Enable auto-heartbeat\n\n# ── Queue ─────────────────────────────────────────\nopenclaw-scheduler queue list [agent] [limit]    # Pending + delivered messages\nopenclaw-scheduler queue clear [agent]           # Mark all messages read\nopenclaw-scheduler queue prune                   # Prune old messages\n\n# ── Team Adapter ─────────────────────────────────\nopenclaw-scheduler team map [limit]                          # Project team messages into events\nopenclaw-scheduler team tasks <team-id> [limit]              # List team tasks\nopenclaw-scheduler team events <team-id> [limit] [task-id]   # List team events\nopenclaw-scheduler team gate <team-id> <task-id> <members-json> [timeout-s]\nopenclaw-scheduler team check-gates [limit]                  # Evaluate task gates\nopenclaw-scheduler team ack <message-id> [actor] [note]      # Team-aware ACK\n\n# ── Idempotency ──────────────────────────────────\nopenclaw-scheduler idem status <job-id>          # Recent idempotency keys\nopenclaw-scheduler idem check <key>              # Check if key is claimed\nopenclaw-scheduler idem release <key>            # Manually release a key\nopenclaw-scheduler idem prune                    # Force prune expired entries\n\n# ── Delivery Aliases ──────────────────────────────\nopenclaw-scheduler alias list                 # List all aliases\nopenclaw-scheduler alias add <name> <channel> <target> [description]\nopenclaw-scheduler alias remove <name>\n\n# ── Runtime Diagnostics ──────────────────────────\nopenclaw-scheduler status --json              # Live DB, lease, queue, outbox, approval state\nopenclaw-scheduler doctor --json              # Fail-closed schema and operational checks\n\n# ── Schema Introspection ─────────────────────────\nopenclaw-scheduler schema jobs              # JSON schema for job fields (types, defaults, enums)\nopenclaw-scheduler schema runs              # Run statuses and key fields\nopenclaw-scheduler schema messages          # Message kinds and statuses\nopenclaw-scheduler schema approvals         # Approval statuses\nopenclaw-scheduler schema dispatches        # Dispatch kinds and statuses\nopenclaw-scheduler schema all               # Everything\n\n# ── Status ────────────────────────────────────────\nopenclaw-scheduler status\nopenclaw-scheduler version                       # Print version (also: --version)\n```\n\nAll CLI commands support `--json` for machine-readable output (useful for piping into `jq` or agent toolchains).\n\n---\n\n## Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `OPENCLAW_GATEWAY_URL` | `http://127.0.0.1:18789` | Gateway endpoint |\n| `OPENCLAW_GATEWAY_TOKEN` | *(required)* | Gateway auth token |\n| `OPENCLAW_GATEWAY_TOKEN_PATH` | `~/.openclaw/credentials/.gateway-token` | Path to a gateway token file under `~/.openclaw/credentials`, `/run/secrets`, or `/var/run/secrets` (used when `OPENCLAW_GATEWAY_TOKEN` is not set) |\n| `SCHEDULER_HOME` | `~/.openclaw/scheduler` | Base dir for scheduler data when installed from npm or when the package dir is not a writable source checkout |\n| `SCHEDULER_DB` | auto (existing `~/.openclaw/scheduler/scheduler.db` first; otherwise `./scheduler.db` in a writable source checkout; otherwise scheduler home) | SQLite database path |\n| `SCHEDULER_BACKUP_STAGING_DIR` | `~/.openclaw/scheduler/.backup-staging` | Temp folder used by `backup.js` snapshot/restore |\n| `SCHEDULER_TICK_MS` | `10000` | Tick interval in ms, from `1000` through `3600000` |\n| `SCHEDULER_STALE_THRESHOLD_S` | `90` | Stale run threshold in seconds, from `10` through `604800` |\n| `SCHEDULER_HEARTBEAT_CHECK_MS` | `30000` | Health check interval in ms, from `5000` through `3600000` |\n| `SCHEDULER_MESSAGE_DELIVERY_MS` | `15000` | Message and spawn interval in ms, from `5000` through `3600000` |\n| `SCHEDULER_DELIVERY_BATCH_SIZE` | `10` | Delivery batch size, from `1` through `1000` |\n| `SCHEDULER_PRUNE_MS` | `3600000` | Prune interval in ms, from `60000` through `604800000` |\n| `SCHEDULER_BACKUP_MS` | `300000` | MinIO backup interval in ms, from `60000` through `604800000` |\n| `SCHEDULER_LEASE_TTL_MS` | `30000` | Dispatcher lease TTL in ms, from `15000` through `3600000` |\n| `SCHEDULER_MAX_CONCURRENCY` | `4` | Worker concurrency, from `1` through `64` |\n| `SCHEDULER_MAX_PENDING_WORK` | `1000` | Pending-work bound, from concurrency through `10000` |\n| `SCHEDULER_BACKUP` | *(unset)* | `1` or `true` enables MinIO backups; `0` or `false` disables them |\n| `SCHEDULER_BACKUP_MC_ALIAS` | `backupstore` | MinIO alias used by `mc` for backup snapshots |\n| `SCHEDULER_BACKUP_BUCKET` | `scheduler-backups` | MinIO bucket for snapshots |\n| `SCHEDULER_BACKUP_PREFIX` | `scheduler` | Object prefix inside bucket |\n| `SCHEDULER_ARTIFACTS_DIR` | `~/.openclaw/scheduler/artifacts` | Directory for offloaded shell stdout/stderr files |\n| `SCHEDULER_DEBUG` | *(unset)* | `1` or `true` enables debug logging; `0` or `false` disables it |\n| `SCHEDULER_ALERT_TARGET` | *(unset; alerts disabled)* | Explicit numeric Telegram operator chat ID for repeated isolated-job failures. Surrounding whitespace is trimmed; zero, usernames, prefixes, embedded whitespace and unsafe integers are rejected. No default recipient or fallback route is used. Alerts are attempted only after successful completion bookkeeping commits. |\n| `SCHEDULER_SHELL` | `/bin/zsh` (macOS), `/bin/bash` (Linux/WSL2) | Shell used for shell jobs |\n| `SCHEDULER_PROVIDER_PATH` | *(unset)* | Directory of provider plugin `*.js` files loaded at startup. High trust boundary -- only point at operator-controlled code. See [gateway contract](docs/gateway-contract.md#local-provider-plugins) |\n| `DISPATCH_CONFIG_DIR` | `~/.openclaw/dispatch` | Override dispatch config directory for `config.json` |\n| `DISPATCH_STATE_DIR` | `~/.openclaw/scheduler/dispatch` | Allowed state root for the dispatch labels ledger |\n| `DISPATCH_LABELS_PATH` | `<DISPATCH_STATE_DIR>/labels.json` | Override the labels ledger path. Relative paths resolve beneath the state root; absolute paths must remain beneath it after traversal normalization, and existing parents must remain beneath it after symbolic-link resolution |\n| `DISPATCH_INDEX_PATH` | *(auto)* | Override path to dispatch/index.mjs (used by watcher) |\n| `DISPATCH_HOST` | `hostname()` | Host identifier sent with dispatch hook events |\n| `DISPATCH_WEBHOOK_URL` | *(unset)* | Webhook URL for dispatch lifecycle events (hooks.mjs) |\n| `LOKI_PUSH_URL` | *(unset)* | Loki push endpoint for dispatch event logging (hooks.mjs) |\n| `TELEGRAM_BOT_TOKEN` | *(unset)* | Bot token for webhook health check utility |\n| `TELEGRAM_WEBHOOK_URL` | *(unset)* | Expected webhook URL for Telegram webhook check |\n| `INBOX_AGENT` | `main` | Target agent for inbox-consumer.mjs |\n| `INBOX_DELIVERY_CHANNEL` | *(unset)* | Delivery channel for inbox-consumer.mjs forwarding |\n| `INBOX_DELIVERY_TO` | *(unset)* | Delivery target for inbox-consumer.mjs forwarding |\n| `INBOX_LIMIT` | `10` | Batch size for inbox-consumer.mjs |\n\n---\n\nProvider-backed identity / authorization / proof behavior, including\nprovider-resolved `authorization_ref` and its fail-closed error semantics, is documented in the\n[gateway contract](docs/gateway-contract.md#dispatch-time-authorization-evaluation).\n\n---\n\n## Service Management\n\n> **Platform note:** The commands below are for macOS (launchd). For Linux, see [INSTALL-LINUX.md](INSTALL-LINUX.md). For Windows, see [INSTALL-WINDOWS.md](INSTALL-WINDOWS.md).\n\nChoose the launchd mode that matches your host:\n- **LaunchAgent**: best for a personal Mac that auto-logs in and should run the scheduler in your user session\n- **LaunchDaemon**: best for a headless Mac or for starting the sch","readmeFilename":"README.md"}