[{"data":1,"prerenderedAt":706},["ShallowReactive",2],{"docs-\u002Fdocs\u002Freference\u002Ftroubleshooting":3},{"id":4,"title":5,"body":6,"description":698,"extension":699,"meta":700,"navigation":701,"path":702,"seo":703,"stem":704,"__hash__":705},"docs\u002Fdocs\u002Freference\u002Ftroubleshooting.md","Troubleshooting",{"type":7,"value":8,"toc":648},"minimark",[9,13,17,22,27,30,33,40,59,65,76,83,89,99,103,133,136,140,147,154,157,167,170,176,182,192,198,213,217,225,229,235,243,249,255,261,264,274,280,287,293,299,313,318,321,355,369,375,402,405,421,424,446,450,456,466,472,475,481,492,496,511,515,519,525,529,539,543,547,566,570,581,585,592,607,614,632,636,644],[10,11,5],"h1",{"id":12},"troubleshooting",[14,15,16],"p",{},"The messages below are the ones people actually run into. Each has what it means and what to do.",[18,19,21],"h2",{"id":20},"dynamic-workflows","Dynamic workflows",[23,24,26],"h3",{"id":25},"i-asked-for-dynamic-workflows-but-no-sub-agents-started","I asked for dynamic workflows but no sub-agents started",[14,28,29],{},"Slo only starts sub-agents when you ask for them explicitly. Use the words \"dynamic workflows\", or \"in parallel\", \"spawn sub-agents\" or \"at the same time\". A request like \"do this properly\" won't do it.",[14,31,32],{},"If you asked and it still didn't happen, check for the next message.",[23,34,36],{"id":35},"pool-sealed-by-abort-no-new-sub-agents-will-be-spawned",[37,38,39],"code",{},"pool sealed by abort; no new sub-agents will be spawned",[14,41,42,43,46,47,50,51,54,55,58],{},"Stopping a task with ",[37,44,45],{},"Ctrl+C"," or ",[37,48,49],{},"\u002Fabort"," also stops the session from starting any more sub-agents, so an abort can't be undone by accident. Start a fresh session with ",[37,52,53],{},"\u002Fnew"," (or restart ",[37,56,57],{},"slo",") and ask again.",[23,60,62],{"id":61},"sub-agent-produced-no-output-for-7200s-treated-as-hung",[37,63,64],{},"sub-agent produced no output for 7200s; treated as hung",[14,66,67,68,71,72,75],{},"A sub-agent went two hours without printing anything, so Slo stopped it. Usually it was waiting on something that never finished, such as a command waiting for input or a server that never started. Check its stderr in ",[37,69,70],{},"slo visualize"," (select it, press ",[37,73,74],{},"d",").",[14,77,78,79,82],{},"If the work really is that slow and silent, raise ",[37,80,81],{},"SLO_SUBAGENT_INACTIVITY_TIMEOUT_SECONDS",".",[23,84,86],{"id":85},"main-agent-stream-produced-no-events-for-ns-treated-as-hung",[37,87,88],{},"main agent stream produced no events for Ns; treated as hung",[14,90,91,92,95,96,82],{},"Same idea, for the main agent or orchestrator. The default is 3 hours. If you've lowered ",[37,93,94],{},"SLO_STREAM_INACTIVITY_TIMEOUT_SECONDS",", put it back to ",[37,97,98],{},"10800",[23,100,102],{"id":101},"a-sub-agent-failed-and-i-dont-know-why","A sub-agent failed and I don't know why",[104,105,106,110,119],"ol",{},[107,108,109],"li",{},"Read the orchestrator's summary. Each failed sub-agent's answer, or the tail of its stderr, is in there.",[107,111,112,113,115,116,118],{},"In ",[37,114,70],{},", select the sub-agent and press ",[37,117,74],{}," for its diagnostics.",[107,120,121,122,125,126,129,130,82],{},"Look in ",[37,123,124],{},"~\u002F.slo\u002Fsessions\u002Fhistory\u002F\u003Corchestrator-session>\u002Fchildren\u002F\u003Csub-agent>\u002F"," at ",[37,127,128],{},"stderr.jsonl"," and ",[37,131,132],{},"status.json",[14,134,135],{},"Or ask Slo to do it: \"Why did the sub-agents in the last workflow fail? Read their stderr and status files.\"",[23,137,139],{"id":138},"a-sub-agent-says-it-has-no-credentials-but-my-api-key-is-set","A sub-agent says it has no credentials, but my API key is set",[14,141,142,143,146],{},"Sub-agents don't inherit API keys or tokens from your environment, for safety. Sign in once with ",[37,144,145],{},"\u002Fauth"," so the credentials are saved, and sub-agents will use those.",[23,148,150,151],{"id":149},"a-background-workflow-shows-as-stalled","A background workflow shows as ",[37,152,153],{},"stalled",[14,155,156],{},"Its orchestrator process died without finishing. Either bring it back:",[158,159,165],"pre",{"className":160,"code":162,"language":163,"meta":164},[161],"language-text","\u002Fworkflows resume \u003Cid>\n","text","",[37,166,162],{"__ignoreMap":164},[14,168,169],{},"or acknowledge it and move on:",[158,171,174],{"className":172,"code":173,"language":163,"meta":164},[161],"\u002Fworkflows dismiss \u003Cid>\n",[37,175,173],{"__ignoreMap":164},[23,177,179],{"id":178},"workflow-cap-reached-2-live-max-2",[37,180,181],{},"workflow cap reached (2 live, max 2)",[14,183,184,185,188,189,82],{},"A session can run two background workflows at once. Wait for one to finish, stop one with ",[37,186,187],{},"\u002Fworkflows abort \u003Cid>",", or raise ",[37,190,191],{},"SLO_MAX_DETACHED_WORKFLOWS",[23,193,195],{"id":194},"no-evidence-backed-correction-for-id",[37,196,197],{},"no evidence-backed correction for \u003Cid>",[14,199,200,201,46,204,207,208,210,211,82],{},"A workflow was stopped with ",[37,202,203],{},"kill",[37,205,206],{},"pkill",", so its records disagree about how it ended. Start a new session with ",[37,209,53],{},". In future, stop workflows with ",[37,212,187],{},[23,214,216],{"id":215},"are-we-done-gets-a-vague-answer","\"Are we done?\" gets a vague answer",[14,218,219,220,82],{},"Ask Slo to check against the source of truth instead of its memory: \"Is task 12.b complete against specifications\u002F12-refunds\u002F? List done, partial and missing items with file paths.\" See ",[221,222,224],"a",{"href":223},"\u002Fdocs\u002Fguides\u002Fsupervise-workflows","Supervise a dynamic workflow",[18,226,228],{"id":227},"models-and-rate-limits","Models and rate limits",[23,230,232],{"id":231},"rate-limited-by-model-retrying-in-ns",[37,233,234],{},"Rate limited by \u003Cmodel>; retrying in Ns",[14,236,237,238,242],{},"The provider asked Slo to slow down. It waits and retries automatically. Nothing to do unless it keeps happening, in which case set up a ",[221,239,241],{"href":240},"\u002Fdocs\u002Ffeatures\u002Fmodels#the-model-pool","model pool"," so the work moves to another model instead of waiting.",[23,244,246],{"id":245},"model-rate-limit-reached-retry-budget-exhausted",[37,247,248],{},"\u003Cmodel> rate limit reached; retry budget exhausted",[14,250,251,252,82],{},"The retries ran out. Wait a minute and ask Slo to continue, or add a second model with ",[37,253,254],{},"SLO_MODEL_POOL",[23,256,258],{"id":257},"all-models-in-pool-are-in-cooldown",[37,259,260],{},"All models in pool are in cooldown",[14,262,263],{},"Every model in your pool hit a limit at once. Wait for the cooldowns, which are 60 seconds for rate limits and 5 minutes for credit problems by default, or add another model to the pool.",[23,265,267,270,271],{"id":266},"model-says-requires-auth",[37,268,269],{},"\u002Fmodel"," says ",[37,272,273],{},"requires \u002Fauth",[14,275,276,277,279],{},"You're not signed in to that model's provider. Run ",[37,278,145],{},", pick the provider, and try again.",[23,281,283,284,286],{"id":282},"i-switched-with-model-and-my-pool-stopped-working","I switched with ",[37,285,269],{}," and my pool stopped working",[14,288,289,290,292],{},"Switching models turns a pooled session into a single-model session. Restart ",[37,291,57],{}," to get the pool back.",[23,294,296,297],{"id":295},"an-openrouter-model-is-missing-from-model","An OpenRouter model is missing from ",[37,298,269],{},[14,300,301,302,305,306,312],{},"Slo only lists models OpenRouter says your key can use, and it doesn't re-check every time you open the picker. Run ",[37,303,304],{},"\u002Fmodel refresh",". If the model is still missing, check on ",[221,307,311],{"href":308,"rel":309},"https:\u002F\u002Fopenrouter.ai",[310],"nofollow","openrouter.ai"," that your key has access to it.",[23,314,316],{"id":315},"model_catalog_cache_load_failed",[37,317,315],{},[14,319,320],{},"Most people never see this. It affects machines that ran an early development build of the OpenRouter support, before v0.21.",[14,322,323,327,328,330,331,46,334,336,337,340,341,340,344,340,347,350,351,354],{},[324,325,326],"strong",{},"What you see."," An older Slo (v0.20 or earlier) prints ",[37,329,315],{}," with a traceback, often from a command that has nothing to do with models, such as ",[37,332,333],{},"slo --version",[37,335,70],{},". The details list missing fields (",[37,338,339],{},"generated_at",", ",[37,342,343],{},"entries",[37,345,346],{},"aliases",[37,348,349],{},"templates",") and say ",[37,352,353],{},"provider_slices"," is not permitted.",[14,356,357,360,361,364,365,368],{},[324,358,359],{},"Why."," That early build wrote the new catalog format into the old file name, ",[37,362,363],{},"model_catalog_cache.json",". Released Slo keeps the new format in its own file, ",[37,366,367],{},"model_catalog_cache.v2.json",", and leaves the old one alone. Older versions still read the old name and reject what they find there. Slo catches the error, so your sessions and history are not affected, but the message comes back on every launch until the file is moved.",[14,370,371,374],{},[324,372,373],{},"What to do."," Stop using the development build, quit every running Slo, then check the old file:",[158,376,380],{"className":377,"code":378,"language":379,"meta":164,"style":164},"language-bash shiki shiki-themes github-dark-high-contrast","grep -l '\"schema_version\": *\"2\"' ~\u002F.slo\u002Fglobal\u002Fmodel_catalog_cache.json\n","bash",[37,381,382],{"__ignoreMap":164},[383,384,387,391,395,399],"span",{"class":385,"line":386},"line",1,[383,388,390],{"class":389},"s_sBn","grep",[383,392,394],{"class":393},"sCcAr"," -l",[383,396,398],{"class":397},"sTRMh"," '\"schema_version\": *\"2\"'",[383,400,401],{"class":397}," ~\u002F.slo\u002Fglobal\u002Fmodel_catalog_cache.json\n",[14,403,404],{},"If that prints the file name, move it aside:",[158,406,408],{"className":377,"code":407,"language":379,"meta":164,"style":164},"mv ~\u002F.slo\u002Fglobal\u002Fmodel_catalog_cache.json ~\u002F.slo\u002Fglobal\u002Fmodel_catalog_cache.json.bak\n",[37,409,410],{"__ignoreMap":164},[383,411,412,415,418],{"class":385,"line":386},[383,413,414],{"class":389},"mv",[383,416,417],{"class":397}," ~\u002F.slo\u002Fglobal\u002Fmodel_catalog_cache.json",[383,419,420],{"class":397}," ~\u002F.slo\u002Fglobal\u002Fmodel_catalog_cache.json.bak\n",[14,422,423],{},"Current Slo doesn't read that file. If the command prints nothing, leave the file alone: it's a valid cache in the old format.",[14,425,426,427,430,431,433,434,437,438,441,442,445],{},"If Slo also warns that your OpenRouter key is in the wrong file, remove it from ",[37,428,429],{},"authentication.json"," and add it again with ",[37,432,145],{},". Slo saves it to ",[37,435,436],{},"authentication.additional-providers.json",". Use your ",[37,439,440],{},"SLO_HOME"," folder in place of ",[37,443,444],{},"~\u002F.slo"," if you've moved it.",[18,447,449],{"id":448},"sessions","Sessions",[23,451,453],{"id":452},"unknown-session-reference",[37,454,455],{},"unknown session reference",[14,457,458,459,462,463,82],{},"No session has that id or name. Session names are only saved when history is on, which it always is in the TUI and only with ",[37,460,461],{},"--enable-history"," for ",[37,464,465],{},"slo run",[23,467,469],{"id":468},"ambiguous-session-reference",[37,470,471],{},"ambiguous session reference",[14,473,474],{},"More than one session matches. Resume with the full session id instead.",[23,476,478],{"id":477},"cannot-start-a-new-session-while-a-prompt-is-in-flight",[37,479,480],{},"cannot start a new session while a prompt is in flight",[14,482,483,129,485,488,489,491],{},[37,484,53],{},[37,486,487],{},"\u002Fcompact"," wait for the current task. Run ",[37,490,49],{}," first, or let it finish.",[23,493,495],{"id":494},"slo-seems-to-have-forgotten-the-start-of-a-long-session","Slo seems to have forgotten the start of a long session",[14,497,498,499,46,502,505,506,510],{},"Long sessions are summarised automatically once they fill about 70% of the model's context. Details from early on can get compressed. Put anything that must survive into ",[37,500,501],{},"SLO.md",[37,503,504],{},"RESEARCH.md"," (see ",[221,507,509],{"href":508},"\u002Fdocs\u002Fguides\u002Fproject-memory","Give Slo a memory","), or start a fresh session for a new topic.",[18,512,514],{"id":513},"sign-in","Sign-in",[23,516,518],{"id":517},"the-browser-sign-in-times-out","The browser sign-in times out",[14,520,521,522,82],{},"The callback listener waits 60 seconds. On a remote machine, use OpenAI's device-code option, or paste the response by hand when Slo offers. To give yourself longer, raise ",[37,523,524],{},"SLO_OAUTH_TIMEOUT_SECONDS",[23,526,528],{"id":527},"i-want-to-sign-out-or-start-over","I want to sign out or start over",[14,530,531,532,534,535,538],{},"Run ",[37,533,145],{}," to switch provider. To clear everything, delete ",[37,536,537],{},"~\u002F.slo\u002Fglobal\u002Fauthentication.json",", and Slo will ask you to sign in again.",[18,540,542],{"id":541},"plugins","Plugins",[23,544,546],{"id":545},"how-do-i-turn-a-plugin-off","How do I turn a plugin off?",[14,548,549,550,553,554,557,558,561,562,565],{},"For one run: ",[37,551,552],{},"SLO_PLUGINS_DISABLED=1 slo",". The value must be exactly ",[37,555,556],{},"1",". For good: ",[37,559,560],{},"slo plugin uninstall \u003Cid>",", or remove the file from the project's ",[37,563,564],{},".slo\u002Fplugins\u002F"," folder.",[23,567,569],{"id":568},"a-project-plugin-isnt-loading","A project plugin isn't loading",[14,571,572,573,576,577,580],{},"Project plugins only load once you trust the project. Run ",[37,574,575],{},"\u002Fplugins trust",", then ",[37,578,579],{},"\u002Fplugins"," to check its status.",[18,582,584],{"id":583},"headless-and-ci","Headless and CI",[23,586,588,589,591],{"id":587},"my-cron-job-cant-find-slo-or-my-settings","My cron job can't find ",[37,590,57],{}," or my settings",[14,593,594,595,597,598,601,602,606],{},"Cron doesn't load your shell profile. Use the full path to ",[37,596,57],{}," (run ",[37,599,600],{},"which slo"," to find it) and set any variables you need in the crontab or a wrapper script. ",[221,603,605],{"href":604},"\u002Fdocs\u002Ffeatures\u002Fschedulers","Schedules"," handle this for you.",[23,608,610,611],{"id":609},"the-exit-code-is-2","The exit code is ",[37,612,613],{},"2",[14,615,616,617,620,621,624,625,628,629,631],{},"The run was aborted: by ",[37,618,619],{},"SIGTERM",", a ",[37,622,623],{},"timeout"," wrapper, ",[37,626,627],{},"\u002Fworkflows abort",", or its parent process dying. ",[37,630,556],{}," means it failed.",[18,633,635],{"id":634},"still-stuck","Still stuck?",[14,637,638,639,82],{},"Ask Slo. It can read its own logs and session files: \"Look at the last session's events and tell me why it stopped.\" If that doesn't help, ",[221,640,643],{"href":641,"rel":642},"https:\u002F\u002Fgitlab.com\u002Fcore-27\u002Fslo\u002F-\u002Fissues",[310],"open an issue on GitLab",[645,646,647],"style",{},"html pre.shiki code .s_sBn, html code.shiki .s_sBn{--shiki-default:#FFB757}html pre.shiki code .sCcAr, html code.shiki .sCcAr{--shiki-default:#91CBFF}html pre.shiki code .sTRMh, html code.shiki .sTRMh{--shiki-default:#ADDCFF}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);}",{"title":164,"searchDepth":649,"depth":649,"links":650},2,[651,665,677,683,687,691,697],{"id":20,"depth":649,"text":21,"children":652},[653,655,656,657,658,659,660,662,663,664],{"id":25,"depth":654,"text":26},3,{"id":35,"depth":654,"text":39},{"id":61,"depth":654,"text":64},{"id":85,"depth":654,"text":88},{"id":101,"depth":654,"text":102},{"id":138,"depth":654,"text":139},{"id":149,"depth":654,"text":661},"A background workflow shows as stalled",{"id":178,"depth":654,"text":181},{"id":194,"depth":654,"text":197},{"id":215,"depth":654,"text":216},{"id":227,"depth":649,"text":228,"children":666},[667,668,669,670,672,674,676],{"id":231,"depth":654,"text":234},{"id":245,"depth":654,"text":248},{"id":257,"depth":654,"text":260},{"id":266,"depth":654,"text":671},"\u002Fmodel says requires \u002Fauth",{"id":282,"depth":654,"text":673},"I switched with \u002Fmodel and my pool stopped working",{"id":295,"depth":654,"text":675},"An OpenRouter model is missing from \u002Fmodel",{"id":315,"depth":654,"text":315},{"id":448,"depth":649,"text":449,"children":678},[679,680,681,682],{"id":452,"depth":654,"text":455},{"id":468,"depth":654,"text":471},{"id":477,"depth":654,"text":480},{"id":494,"depth":654,"text":495},{"id":513,"depth":649,"text":514,"children":684},[685,686],{"id":517,"depth":654,"text":518},{"id":527,"depth":654,"text":528},{"id":541,"depth":649,"text":542,"children":688},[689,690],{"id":545,"depth":654,"text":546},{"id":568,"depth":654,"text":569},{"id":583,"depth":649,"text":584,"children":692},[693,695],{"id":587,"depth":654,"text":694},"My cron job can't find slo or my settings",{"id":609,"depth":654,"text":696},"The exit code is 2",{"id":634,"depth":649,"text":635},"What Slo's error messages mean and what to do about them.","md",{},true,"\u002Fdocs\u002Freference\u002Ftroubleshooting",{"title":5,"description":698},"docs\u002Freference\u002Ftroubleshooting","Z1-wcotpD4Sh4YjYL-MlNBvVIcXj8ZC-nnB5R9lDEMo",1791641282715]