[{"data":1,"prerenderedAt":1213},["ShallowReactive",2],{"blog-post-hermes-cron-not-working":3,"related-posts-hermes-cron-not-working":1190},{"id":4,"title":5,"author":6,"body":11,"category":1168,"date":1169,"description":1170,"extension":1171,"featured":1172,"hideToc":1172,"image":1173,"imageAlt":1174,"imageHeight":1174,"imageWidth":1174,"itemList":1174,"lang":1174,"meta":1175,"navigation":1176,"noindex":1172,"path":1177,"readingTime":1178,"redirected":1172,"relatedSlugs":1174,"seo":1179,"seoTitle":1180,"stem":1181,"subtitle":1174,"tags":1182,"updatedDate":1169,"__hash__":1189},"blog/blog/hermes-cron-not-working.md","Hermes Cron Job Not Working? Every Cause and the Fix",{"name":7,"role":8,"avatar":9,"bio":10},"Shabnam Katoch","Growth Head","/img/avatars/shabnam-profile.jpeg","Shabnam leads growth at BetterClaw and has spent the past three years building organic distribution for AI-native products. She writes about no-code agent builders, content strategy, and what it actually takes to grow without an ads budget.",{"type":12,"value":13,"toc":1152},"minimark",[14,18,30,33,38,45,48,83,105,214,218,224,231,234,242,245,248,292,299,302,308,323,333,343,347,354,388,399,403,409,412,493,511,518,521,556,560,563,566,588,591,595,601,604,607,613,620,633,636,720,733,737,743,746,749,763,766,790,800,804,807,810,832,844,851,855,858,883,887,890,912,919,925,929,932,957,960,989,996,1000,1044,1048,1054,1057,1065,1069,1085,1094,1114,1130,1139,1148],[15,16,17],"p",{},"Your scheduled task didn't run, ran but sent nothing, or timed out. Here's how to find which one in two minutes, and the exact fix for each.",[19,20,22],"callout",{"type":21},"quick-fix",[15,23,24,25,29],{},"The most common cause is simple: the gateway isn't running. Hermes cron jobs only fire inside the gateway, never in a normal chat. Run ",[26,27,28],"code",{},"hermes cron status"," first. It tells you in one line whether anything is firing your jobs at all.",[15,31,32],{},"Checked against Hermes v0.22.5 on 27 October 2026.",[34,35,37],"h2",{"id":36},"quick-check-find-your-cause-in-two-minutes","Quick check: find your cause in two minutes",[15,39,40],{},[41,42],"img",{"alt":43,"src":44},"Find your Hermes cron cause in two minutes: hermes cron status tells you whether a scheduler is running, hermes cron list shows each job's state and last error","/img/blog/hermes-cron-not-working-quick-check.jpg",[15,46,47],{},"Run these two commands:",[49,50,55],"pre",{"className":51,"code":52,"language":53,"meta":54,"style":54},"language-bash shiki shiki-themes github-light","hermes cron status\nhermes cron list\n","bash","",[26,56,57,73],{"__ignoreMap":54},[58,59,62,66,70],"span",{"class":60,"line":61},"line",1,[58,63,65],{"class":64},"s7eDp","hermes",[58,67,69],{"class":68},"sYBdl"," cron",[58,71,72],{"class":68}," status\n",[58,74,76,78,80],{"class":60,"line":75},2,[58,77,65],{"class":64},[58,79,69],{"class":68},[58,81,82],{"class":68}," list\n",[15,84,85,88,89,92,93,96,97,100,101,104],{},[26,86,87],{},"cron status"," says whether a scheduler is serving your profile. ",[26,90,91],{},"cron list"," shows each job's state (",[26,94,95],{},"[active]",", ",[26,98,99],{},"[paused]"," or ",[26,102,103],{},"[completed]","), its next run, and the last error if it failed.",[106,107,108,124],"table",{},[109,110,111],"thead",{},[112,113,114,118,121],"tr",{},[115,116,117],"th",{},"What you see",[115,119,120],{},"Likely cause",[115,122,123],{},"Fix",[125,126,127,139,156,167,178,192,203],"tbody",{},[112,128,129,133,136],{},[130,131,132],"td",{},"\"No scheduler is serving profile 'default'\"",[130,134,135],{},"The gateway isn't running",[130,137,138],{},"Fix 1",[112,140,141,150,153],{},[130,142,143,144,100,147],{},"The job shows ",[58,145,146],{},"paused",[58,148,149],{},"completed",[130,151,152],{},"Paused, or its repeat count is used up",[130,154,155],{},"Fix 2",[112,157,158,161,164],{},[130,159,160],{},"It fired once, then vanished from the list",[130,162,163],{},"A one-shot schedule",[130,165,166],{},"Fix 3",[112,168,169,172,175],{},[130,170,171],{},"A \"Next run\" time that's hours off",[130,173,174],{},"Time zone",[130,176,177],{},"Fix 4",[112,179,180,183,189],{},[130,181,182],{},"It ran, but nothing arrived",[130,184,185,186],{},"Delivery target, token or ",[58,187,188],{},"SILENT",[130,190,191],{},"Fix 5",[112,193,194,197,200],{},[130,195,196],{},"It ran, but did the wrong thing",[130,198,199],{},"The prompt relies on memory it doesn't have",[130,201,202],{},"Fix 6",[112,204,205,208,211],{},[130,206,207],{},"It stops partway or times out",[130,209,210],{},"The 600-second inactivity limit",[130,212,213],{},"Fix 7",[34,215,217],{"id":216},"fix-1-the-gateway-isnt-running","Fix 1: the gateway isn't running",[15,219,220],{},[41,221],{"alt":222,"src":223},"Cron jobs only fire inside the Hermes gateway — a normal hermes chat never ticks the scheduler","/img/blog/hermes-cron-not-working-gateway.jpg",[15,225,226,227,230],{},"Cron jobs run inside the gateway, and nowhere else. The gateway ticks the scheduler every 60 seconds and runs whatever is due. A normal ",[26,228,229],{},"hermes chat"," never fires jobs.",[15,232,233],{},"On a fresh install with no gateway, this is what we got:",[49,235,240],{"className":236,"code":238,"language":239},[237],"language-text","$ hermes cron status\n✗ No scheduler is serving profile 'default', its cron jobs will NOT fire\n","text",[26,241,238],{"__ignoreMap":54},[15,243,244],{},"Hermes does warn you when you create a job without one, but the warning is easy to miss in the scroll.",[15,246,247],{},"To fix it, start a gateway:",[49,249,251],{"className":51,"code":250,"language":53,"meta":54,"style":54},"hermes gateway run        # foreground, good for testing, Docker and WSL\nhermes gateway install    # install as a background service\nhermes gateway start      # start the installed service\n",[26,252,253,267,279],{"__ignoreMap":54},[58,254,255,257,260,263],{"class":60,"line":61},[58,256,65],{"class":64},[58,258,259],{"class":68}," gateway",[58,261,262],{"class":68}," run",[58,264,266],{"class":265},"sAwPA","        # foreground, good for testing, Docker and WSL\n",[58,268,269,271,273,276],{"class":60,"line":75},[58,270,65],{"class":64},[58,272,259],{"class":68},[58,274,275],{"class":68}," install",[58,277,278],{"class":265},"    # install as a background service\n",[58,280,282,284,286,289],{"class":60,"line":281},3,[58,283,65],{"class":64},[58,285,259],{"class":68},[58,287,288],{"class":68}," start",[58,290,291],{"class":265},"      # start the installed service\n",[15,293,294,295,298],{},"On a Linux server, ",[26,296,297],{},"sudo hermes gateway install --system"," installs a service that starts at boot, so jobs survive a reboot.",[15,300,301],{},"Once we started the gateway, the same command changed to:",[49,303,306],{"className":304,"code":305,"language":239},[237],"✓ Gateway is running, cron jobs will fire automatically\nTicker heartbeat: 55s ago\n",[26,307,305],{"__ignoreMap":54},[15,309,310,311,314,315,318,319,322],{},"One trap: ",[26,312,313],{},"hermes cron tick"," never starts a gateway, and ",[26,316,317],{},"hermes cron run \u003Cjob>"," with no gateway failed for us with ",[26,320,321],{},"GatewayRPCError: request_failed",".",[15,324,325,326,328,329,332],{},"If your jobs show as \"Overdue\" in ",[26,327,91],{},", the scheduler stopped ticking. ",[26,330,331],{},"hermes gateway restart"," fixes that, and each overdue job catches up once.",[15,334,335,336],{},"Tired of keeping a gateway alive just so your jobs run? BetterClaw runs scheduled tasks on its own servers and keeps a history of every run. ",[337,338,342],"a",{"href":339,"rel":340},"https://betterclaw.io",[341],"nofollow","Start your first agent.",[34,344,346],{"id":345},"fix-2-the-job-is-paused-used-up-or-everything-is-paused","Fix 2: the job is paused, used up, or everything is paused",[15,348,349,350,353],{},"Look at the state in ",[26,351,352],{},"hermes cron list",":",[355,356,357,370],"ul",{},[358,359,360,365,366,369],"li",{},[361,362,363],"strong",{},[58,364,146],{},": run ",[26,367,368],{},"hermes cron resume \u003Cjob>",". You can use the job's name instead of its ID.",[358,371,372,376,377,380,381,384,385,322],{},[361,373,374],{},[58,375,149],{},": the repeat count ran out. A job created with ",[26,378,379],{},"--repeat 3"," shows ",[26,382,383],{},"Repeat: 0/3"," and stops after three runs. Reset it with ",[26,386,387],{},"hermes cron edit \u003Cjob> --repeat \u003Cn>",[15,389,390,391,394,395,398],{},"There's also a global switch. ",[26,392,393],{},"hermes pause"," stops every scheduled job at once, and nothing fires until someone runs ",[26,396,397],{},"hermes resume",". If all your jobs stopped on the same day, check that first.",[34,400,402],{"id":401},"fix-3-it-was-a-one-shot-schedule-or-the-schedule-was-wrong","Fix 3: it was a one-shot schedule (or the schedule was wrong)",[15,404,405],{},[41,406],{"alt":407,"src":408},"What each Hermes schedule format really means: 30m is recurring, in 30m is one-shot, every 1d at 09:00 is rejected — know the difference","/img/blog/hermes-cron-not-working-schedule-formats.jpg",[15,410,411],{},"This is where most online guides are now wrong, so we tested every format ourselves.",[106,413,414,427],{},[109,415,416],{},[112,417,418,421,424],{},[115,419,420],{},"You type",[115,422,423],{},"Hermes stores",[115,425,426],{},"Result",[125,428,429,442,455,468,480],{},[112,430,431,436,439],{},[130,432,433],{},[26,434,435],{},"\"30m\"",[130,437,438],{},"every 30m",[130,440,441],{},"Recurring",[112,443,444,449,452],{},[130,445,446],{},[26,447,448],{},"\"in 30m\"",[130,450,451],{},"once in 30m",[130,453,454],{},"One-shot",[112,456,457,462,465],{},[130,458,459],{},[26,460,461],{},"\"every day at 9am\"",[130,463,464],{},"every day at 9am",[130,466,467],{},"Daily",[112,469,470,475,478],{},[130,471,472],{},[26,473,474],{},"\"0 9 * * *\"",[130,476,477],{},"09***",[130,479,467],{},[112,481,482,487,490],{},[130,483,484],{},[26,485,486],{},"\"every 1d at 09:00\"",[130,488,489],{},"rejected: \"Invalid duration\"",[130,491,492],{},"Not created",[15,494,495,496,499,500,96,503,506,507,510],{},"A bare duration like ",[26,497,498],{},"30m"," repeats in current Hermes. For a one-off, add \"in\": ",[26,501,502],{},"in 30m",[26,504,505],{},"in 2h",", or an exact timestamp like ",[26,508,509],{},"2026-11-01T09:00:00",". One-shots fire once and then leave the list, which looks like a broken job if you didn't mean it.",[15,512,513,514,517],{},"Natural phrases like ",[26,515,516],{},"weekdays at 9am"," work for recurring jobs. Mixing styles doesn't, as the last row shows.",[15,519,520],{},"If your create command printed \"Failed to create job\", the job doesn't exist; Hermes 0.22.5 rejects a bad schedule instead of saving it.",[49,522,524],{"className":51,"code":523,"language":53,"meta":54,"style":54},"hermes cron edit \u003Cjob> --schedule \"every day at 9am\"\n",[26,525,526],{"__ignoreMap":54},[58,527,528,530,532,535,539,542,546,549,553],{"class":60,"line":61},[58,529,65],{"class":64},[58,531,69],{"class":68},[58,533,534],{"class":68}," edit",[58,536,538],{"class":537},"sD7c4"," \u003C",[58,540,541],{"class":68},"jo",[58,543,545],{"class":544},"sgsFI","b",[58,547,548],{"class":537},">",[58,550,552],{"class":551},"sYu0t"," --schedule",[58,554,555],{"class":68}," \"every day at 9am\"\n",[34,557,559],{"id":558},"fix-4-the-time-zone-is-wrong","Fix 4: the time zone is wrong",[15,561,562],{},"Jobs use the time zone of the machine running the gateway. A server set to UTC fires a \"9am\" job at 9am UTC, which is the middle of the night in San Francisco.",[15,564,565],{},"Compare the two:",[49,567,569],{"className":51,"code":568,"language":53,"meta":54,"style":54},"date\nhermes cron list    # check the \"Next run\" times\n",[26,570,571,576],{"__ignoreMap":54},[58,572,573],{"class":60,"line":61},[58,574,575],{"class":64},"date\n",[58,577,578,580,582,585],{"class":60,"line":75},[58,579,65],{"class":64},[58,581,69],{"class":68},[58,583,584],{"class":68}," list",[58,586,587],{"class":265},"    # check the \"Next run\" times\n",[15,589,590],{},"If they disagree, change the server's time zone or write the schedule in its time.",[34,592,594],{"id":593},"fix-5-it-ran-but-nothing-was-delivered","Fix 5: it ran, but nothing was delivered",[15,596,597],{},[41,598],{"alt":599,"src":600},"It ran, but nothing arrived: Hermes tracks running and delivering separately — check the delivery target, the token, the bot permissions and SILENT","/img/blog/hermes-cron-not-working-delivery.jpg",[15,602,603],{},"Hermes tracks running a job and delivering it as two separate things. A job can succeed and still send nothing.",[15,605,606],{},"We created a job that delivers to Telegram on a machine with no Telegram token, then ran it. Hermes checked the job before starting the agent, and refused:",[49,608,611],{"className":609,"code":610,"language":239},[237],"Last run: blocked_config: delivery platform 'telegram' has no gateway credentials configured (not connected).\n⚠ The result was not delivered: no delivery target resolved for deliver=telegram.\n",[26,612,610],{"__ignoreMap":54},[15,614,615,616,619],{},"The agent never ran, so nothing was charged. Hermes sends that alert once, not on every tick, and ",[26,617,618],{},"hermes cron doctor"," keeps listing the problem until you fix it.",[15,621,622,623,626,627,629,630,322],{},"One catch: ",[26,624,625],{},"doctor"," only knows about the problem after the job has tried to run. Before the first run, it said \"Cron doctor found no issues\" for the same token-less Telegram job. Use ",[26,628,317],{}," once after creating a job to flush out delivery problems straight away. The full record is saved under ",[26,631,632],{},"~/.hermes/cron/output/\u003Cjob_id>/",[15,634,635],{},"The usual causes:",[355,637,638,671,698,708],{},[358,639,640,643,644,96,647,96,650,96,653,96,656,659,660,663,664,666,667,670],{},[361,641,642],{},"The target is wrong."," Targets are case-sensitive: ",[26,645,646],{},"telegram",[26,648,649],{},"discord",[26,651,652],{},"slack",[26,654,655],{},"email",[26,657,658],{},"local",", or a specific chat like ",[26,661,662],{},"telegram:-1001234567890",". The CLI default is ",[26,665,658],{},", which saves to ",[26,668,669],{},"~/.hermes/cron/output/"," and sends nothing.",[358,672,673,676,677,96,679,681,682,684,685,96,688,100,691,694,695,322],{},[361,674,675],{},"The token is missing."," ",[26,678,646],{},[26,680,649],{}," and ",[26,683,652],{}," need ",[26,686,687],{},"TELEGRAM_BOT_TOKEN",[26,689,690],{},"DISCORD_BOT_TOKEN",[26,692,693],{},"SLACK_BOT_TOKEN"," in ",[26,696,697],{},"~/.hermes/.env",[358,699,700,703,704,707],{},[361,701,702],{},"The bot lacks permission."," A Telegram bot must be an admin in the group. A Slack bot needs the ",[26,705,706],{},"chat:write"," scope.",[358,709,710,715,716,719],{},[361,711,712,713,322],{},"The reply said ",[58,714,188],{}," Any successful run whose reply contains ",[26,717,718],{},"[SILENT]"," is saved but not sent. Failed runs always deliver.",[15,721,722,723,725,726,729,730,322],{},"When delivery itself fails, ",[26,724,352],{}," shows the job as ",[26,727,728],{},"delivery_failed"," with the reason. If your platform mangles the \"Cronjob Response\" header and footer, turn them off with ",[26,731,732],{},"hermes config set cron.wrap_response false",[34,734,736],{"id":735},"fix-6-the-job-forgets-what-it-did-last-time","Fix 6: the job forgets what it did last time",[15,738,739],{},[41,740],{"alt":741,"src":742},"Each Hermes cron run starts with amnesia: no chat history, no memory of the last run — write the prompt for someone who has never seen your project","/img/blog/hermes-cron-not-working-fresh-session.jpg",[15,744,745],{},"Every cron run starts a fresh agent session. It has no chat history and no memory of the last run. A prompt like \"continue the report\" means nothing to it.",[15,747,748],{},"Write the prompt for someone who has never seen your project:",[355,750,751,757],{},[358,752,753,756],{},[361,754,755],{},"Bad",": \"Continue the report.\"",[358,758,759,762],{},[361,760,761],{},"Good",": \"Read ~/reports/sales.csv. Summarise yesterday's orders in three bullets: total, top product, refunds. Plain text, under 80 words.\"",[15,764,765],{},"If the job really needs to know what it said last time, like a news scout that shouldn't repeat stories, turn on continuity. Each run then sees its own previous output:",[49,767,769],{"className":51,"code":768,"language":53,"meta":54,"style":54},"hermes cron edit \u003Cjob> --continuity\n",[26,770,771],{"__ignoreMap":54},[58,772,773,775,777,779,781,783,785,787],{"class":60,"line":61},[58,774,65],{"class":64},[58,776,69],{"class":68},[58,778,534],{"class":68},[58,780,538],{"class":537},[58,782,541],{"class":68},[58,784,545],{"class":544},[58,786,548],{"class":537},[58,788,789],{"class":551}," --continuity\n",[15,791,792,793,796,797,322],{},"You can attach skills with ",[26,794,795],{},"--skill \u003Cname>"," (repeat the flag for several). Skills must be installed on the machine running the gateway; check with ",[26,798,799],{},"hermes skills list",[34,801,803],{"id":802},"fix-7-the-job-hangs-or-times-out","Fix 7: the job hangs or times out",[15,805,806],{},"Cron jobs have an inactivity timeout of 600 seconds. It's not a total time limit: the job can run for hours as long as it keeps calling tools. It only stops after 10 minutes of silence, usually a stuck tool or a hung provider call.",[15,808,809],{},"Change it with an environment variable on the gateway:",[49,811,813],{"className":51,"code":812,"language":53,"meta":54,"style":54},"export HERMES_CRON_TIMEOUT=1800    # 30 minutes; 0 means no limit\n",[26,814,815],{"__ignoreMap":54},[58,816,817,820,823,826,829],{"class":60,"line":61},[58,818,819],{"class":537},"export",[58,821,822],{"class":544}," HERMES_CRON_TIMEOUT",[58,824,825],{"class":537},"=",[58,827,828],{"class":551},"1800",[58,830,831],{"class":265},"    # 30 minutes; 0 means no limit\n",[15,833,834,835,694,838,100,841,322],{},"Scripts attached to a job have their own, separate limit of 3,600 seconds. Change it with ",[26,836,837],{},"cron.script_timeout_seconds",[26,839,840],{},"config.yaml",[26,842,843],{},"HERMES_CRON_SCRIPT_TIMEOUT",[15,845,846,847,850],{},"Move heavy data collection into a script and let the agent handle only the result. For jobs that need no AI at all, ",[26,848,849],{},"--no-agent"," runs the script and sends its output directly.",[34,852,854],{"id":853},"fix-8-skills-or-scripts-not-found","Fix 8: skills or scripts not found",[15,856,857],{},"Three things to check:",[355,859,860,866,877],{},[358,861,862,865],{},[361,863,864],{},"Skills don't sync between machines."," If you created the job on your laptop but the gateway runs on a server, install the skill there too.",[358,867,868,676,874,876],{},[361,869,870,871,322],{},"Scripts belong in ",[26,872,873],{},"~/.hermes/scripts/",[26,875,618],{}," flags a script that's missing or lives outside that folder.",[358,878,879,882],{},[361,880,881],{},"Cron runs without the clarify, messaging and cron-management tools",", so a skill that asks questions or sends its own messages won't work on a schedule.",[34,884,886],{"id":885},"fix-9-two-gateways-or-a-store-it-cant-write","Fix 9: two gateways, or a store it can't write",[15,888,889],{},"Run one gateway per machine. Two gateways fight over the scheduler lock, and jobs get delayed or skipped:",[49,891,893],{"className":51,"code":892,"language":53,"meta":54,"style":54},"ps aux | grep hermes\n",[26,894,895],{"__ignoreMap":54},[58,896,897,900,903,906,909],{"class":60,"line":61},[58,898,899],{"class":64},"ps",[58,901,902],{"class":68}," aux",[58,904,905],{"class":537}," |",[58,907,908],{"class":64}," grep",[58,910,911],{"class":68}," hermes\n",[15,913,914,915,918],{},"Hermes also skips any job it can't record, to avoid double runs later, so an unwritable ",[26,916,917],{},"~/.hermes/cron/"," (disk full, wrong owner) stops everything.",[15,920,921,922,924],{},"When that happens, ",[26,923,28],{}," leads with \"Cron store is NOT writable, scheduled jobs are being skipped\". Clear disk space or fix the folder's owner, and each skipped job fires once on the next tick. No restart needed.",[34,926,928],{"id":927},"which-model-runs-your-cron-job","Which model runs your cron job",[15,930,931],{},"Hermes picks the model at the moment the job fires, in this order:",[933,934,935,946,954],"ol",{},[358,936,937,938,941,942,945],{},"A model pinned to the job (",[26,939,940],{},"hermes cron edit \u003Cjob> --model \u003Cm> --provider \u003Cp>",", or ",[26,943,944],{},"--pin"," to lock in your current model).",[358,947,948,694,951,953],{},[26,949,950],{},"cron.model",[26,952,840],{},", a default for every unpinned job.",[358,955,956],{},"Your main chat model.",[15,958,959],{},"Set a cheap default for the whole fleet without touching your chat model:",[49,961,963],{"className":51,"code":962,"language":53,"meta":54,"style":54},"hermes config set cron.model \u003Cmodel>\n",[26,964,965],{"__ignoreMap":54},[58,966,967,969,972,975,978,980,983,986],{"class":60,"line":61},[58,968,65],{"class":64},[58,970,971],{"class":68}," config",[58,973,974],{"class":68}," set",[58,976,977],{"class":68}," cron.model",[58,979,538],{"class":537},[58,981,982],{"class":68},"mode",[58,984,985],{"class":544},"l",[58,987,988],{"class":537},">\n",[15,990,991,992,995],{},"One catch: a pinned job never uses your fallback providers. If its one provider is down, the run fails. Unpinned jobs walk the fallback chain. Use ",[26,993,994],{},"--unpin"," if you'd rather have the fallback.",[34,997,999],{"id":998},"how-to-stop-it-happening-again","How to stop it happening again",[355,1001,1002,1005,1011,1017,1027,1033],{},[358,1003,1004],{},"Run the gateway as a service, not in a terminal tab.",[358,1006,1007,1008,322],{},"Write every prompt so it works with no memory, or use ",[26,1009,1010],{},"--continuity",[358,1012,1013,1014,1016],{},"Choose the delivery target on purpose; ",[26,1015,658],{}," sends nothing.",[358,1018,1019,1020,681,1023,1026],{},"Stagger jobs (",[26,1021,1022],{},"0 9 * * *",[26,1024,1025],{},"5 9 * * *","), because jobs due at the same tick run one after another.",[358,1028,1029,1030,1032],{},"Run ",[26,1031,618],{}," weekly. It's read-only and exits with an error while anything is wrong, so it works in a monitoring script.",[358,1034,1035,1036,1039,1040,1043],{},"Check ",[26,1037,1038],{},"hermes cron runs"," for history and ",[26,1041,1042],{},"~/.hermes/logs/agent.log"," for scheduler messages.",[34,1045,1047],{"id":1046},"the-takeaway","The takeaway",[15,1049,1050,1051,1053],{},"When a Hermes cron job doesn't run, start with ",[26,1052,28],{},". Nine times out of ten the answer is in its first line: no gateway, or a gateway that stopped ticking.",[15,1055,1056],{},"After that, it's the schedule format, the delivery target, or a prompt that assumes memory it doesn't have.",[15,1058,1059],{},[361,1060,1061,1062],{},"Your agent, on schedule, without the server: BetterClaw gives you 500+ apps and any model with your own key. Basic is $19 a month for one agent, Pro is $49 a month for five, and every plan has a 7-day free trial. ",[337,1063,342],{"href":339,"rel":1064},[341],[34,1066,1068],{"id":1067},"frequently-asked-questions","Frequently Asked Questions",[15,1070,1071,1074,1075,1077,1078,1081,1082,322],{},[361,1072,1073],{},"Why isn't my Hermes cron job running?"," Usually because no gateway is running: cron jobs only fire inside the gateway, never in a normal chat. Run ",[26,1076,28],{},"; if it says no scheduler is serving your profile, start one with ",[26,1079,1080],{},"hermes gateway run"," or install it as a service with ",[26,1083,1084],{},"hermes gateway install",[15,1086,1087,1090,1091,1093],{},[361,1088,1089],{},"Does Hermes cron need the gateway running?"," Yes. The gateway ticks the scheduler every 60 seconds and runs due jobs. ",[26,1092,313],{}," runs one pass but doesn't start a gateway, so agent jobs are skipped without one.",[15,1095,1096,1099,1100,1102,1103,1105,1106,1108,1109,380,1111,1113],{},[361,1097,1098],{},"Why did my Hermes cron job run but send nothing?"," Check the delivery target (the CLI default is ",[26,1101,658],{},", which only saves a file), the bot token in ",[26,1104,697],{},", and the bot's permissions. A reply containing ",[26,1107,718],{}," is also not sent. ",[26,1110,352],{},[26,1112,728],{}," with the reason when sending itself failed.",[15,1115,1116,1119,1120,1123,1124,1127,1128,322],{},[361,1117,1118],{},"How do I change the timeout for a Hermes cron job?"," Set ",[26,1121,1122],{},"HERMES_CRON_TIMEOUT"," (in seconds) for the gateway; the default is 600 seconds of inactivity, and ",[26,1125,1126],{},"0"," means no limit. Attached scripts have a separate 3,600-second limit set by ",[26,1129,837],{},[15,1131,1132,1135,1136,1138],{},[361,1133,1134],{},"Which model does a Hermes cron job use?"," A model pinned to the job first, then ",[26,1137,950],{}," from your config, then your main chat model at the moment the job fires. Pinned jobs don't use fallback providers.",[15,1140,1141,1144,1145,1147],{},[361,1142,1143],{},"Why does my cron job forget what it did last time?"," Each run starts a fresh agent session with no memory of earlier runs. Make the prompt self-contained, or turn on ",[26,1146,1010],{}," so each run sees its own previous output.",[1149,1150,1151],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":54,"searchDepth":75,"depth":75,"links":1153},[1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167],{"id":36,"depth":75,"text":37},{"id":216,"depth":75,"text":217},{"id":345,"depth":75,"text":346},{"id":401,"depth":75,"text":402},{"id":558,"depth":75,"text":559},{"id":593,"depth":75,"text":594},{"id":735,"depth":75,"text":736},{"id":802,"depth":75,"text":803},{"id":853,"depth":75,"text":854},{"id":885,"depth":75,"text":886},{"id":927,"depth":75,"text":928},{"id":998,"depth":75,"text":999},{"id":1046,"depth":75,"text":1047},{"id":1067,"depth":75,"text":1068},"Troubleshooting","2026-10-28","Hermes cron job not running, timing out or delivering nothing? Check the gateway, schedule, delivery target and timeouts. Every cause and the fix.","md",false,"/img/blog/hermes-cron-not-working.jpg",null,{},true,"/blog/hermes-cron-not-working","11 min read",{"title":5,"description":1170},"Hermes Cron Job Not Working? 9 Causes and Fixes (2026)","blog/hermes-cron-not-working",[1183,1184,1185,1186,352,1187,1188],"hermes cron job not working","hermes agent cron not working","hermes cron timeout","hermes cron model","hermes cron edit","hermes gateway cron","bfbnhJYQp7IHT0UKVDv8VUzBg5VJPVmcAVJXaKwOkdU",[1191,1198,1205],{"stem":1192,"title":1193,"description":1194,"date":1169,"image":1195,"category":1196,"redirected":1172,"author":1197,"readingTime":1178},"blog/hermes-soul-md-guide","Hermes SOUL.md: Where It Lives, a Template, and Examples","Where Hermes Agent's SOUL.md lives, how it differs from AGENTS.md, a copy-paste template, examples, and how to share one SOUL.md across profiles.","/img/blog/hermes-soul-md-guide.jpg","Guides",{"name":7,"role":8,"avatar":9,"bio":10},{"stem":1199,"title":1200,"description":1201,"date":1169,"image":1202,"category":1168,"redirected":1172,"author":1203,"readingTime":1204},"blog/hermes-update-failed","Hermes Update Failed or Broke Your Setup? Fix It and Roll Back","Hermes update failed, stuck or broke your config? Back up first, read the update log, migrate config, roll back to a working version. Every fix.","/img/blog/hermes-update-failed.jpg",{"name":7,"role":8,"avatar":9,"bio":10},"10 min read",{"stem":1206,"title":1207,"description":1208,"date":1209,"image":1210,"category":1168,"redirected":1172,"author":1211,"readingTime":1212},"blog/hermes-agent-not-working","Hermes Agent Not Working? Couldn't Start, Backend Exited and Every Other Fix (v0.22.5)","Find your Hermes error in one table: error 400, provider auth failed, backend exited, Docker install, Ollama tools not working. Updated for v0.22.","2026-06-08","/img/blog/hermes-agent-not-working.jpg",{"name":7,"role":8,"avatar":9,"bio":10},"13 min read",1793257085781]