[{"data":1,"prerenderedAt":623},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fauthentication":3},{"id":4,"title":5,"body":6,"description":615,"extension":616,"meta":617,"navigation":618,"path":619,"seo":620,"stem":621,"__hash__":622},"docs\u002Fdocs\u002Fauthentication\u002Findex.md","Authentication",{"type":7,"value":8,"toc":598},"minimark",[9,13,22,27,82,86,97,100,103,106,111,123,127,140,163,166,168,171,174,177,185,188,197,201,217,219,222,225,231,233,237,240,250,264,267,436,451,453,457,460,501,504,544,554,556,560,563,585,594],[10,11,5],"h1",{"id":12},"authentication",[14,15,16,17,21],"p",{},"Slo supports three model providers: OpenAI, Anthropic, and Kimi For Coding. You connect a provider the first time you launch Slo, or at any time by typing ",[18,19,20],"code",{},"\u002Fauth"," inside the TUI.",[23,24,26],"h2",{"id":25},"supported-providers","Supported providers",[28,29,30,46],"table",{},[31,32,33],"thead",{},[34,35,36,40,43],"tr",{},[37,38,39],"th",{},"Provider",[37,41,42],{},"Auth methods",[37,44,45],{},"Default model",[47,48,49,61,71],"tbody",{},[34,50,51,55,58],{},[52,53,54],"td",{},"OpenAI (recommended)",[52,56,57],{},"OAuth (browser) or API key",[52,59,60],{},"gpt-5.4",[34,62,63,66,68],{},[52,64,65],{},"Anthropic",[52,67,57],{},[52,69,70],{},"Claude models",[34,72,73,76,79],{},[52,74,75],{},"Kimi For Coding",[52,77,78],{},"API key only",[52,80,81],{},"—",[23,83,85],{"id":84},"first-launch","First launch",[14,87,88,89,92,93,96],{},"Run ",[18,90,91],{},"slo"," or ",[18,94,95],{},"slo \u002Fpath\u002Fto\u002Fproject",". On first launch, Slo automatically shows an authentication modal where you pick your provider and enter your credentials. You will not need to run a separate command.",[98,99],"hr",{},[23,101,54],{"id":102},"openai-recommended",[14,104,105],{},"OpenAI is the recommended provider. It supports two authentication methods.",[107,108,110],"h3",{"id":109},"oauth-browser-based","OAuth (browser-based)",[14,112,113,114,118,119,122],{},"Choose ",[115,116,117],"strong",{},"OAuth"," when prompted. Slo opens your browser and starts a local callback server at ",[18,120,121],{},"localhost:1455\u002Fauth\u002Fcallback",". After you approve access in the browser, the token is written to your credentials file automatically.",[107,124,126],{"id":125},"api-key","API key",[14,128,113,129,131,132,139],{},[115,130,126],{}," when prompted, then paste your key from ",[133,134,138],"a",{"href":135,"rel":136},"https:\u002F\u002Fplatform.openai.com",[137],"nofollow","platform.openai.com",".",[141,142,143,150,157,160],"ol",{},[144,145,146,147],"li",{},"Go to ",[133,148,138],{"href":135,"rel":149},[137],[144,151,152,153,156],{},"Navigate to ",[115,154,155],{},"API keys"," under your account",[144,158,159],{},"Create a new secret key",[144,161,162],{},"Paste it into the Slo authentication modal",[14,164,165],{},"Usage is billed at standard OpenAI API rates.",[98,167],{},[23,169,65],{"id":170},"anthropic",[14,172,173],{},"Anthropic supports the same two authentication methods as OpenAI.",[107,175,110],{"id":176},"oauth-browser-based-1",[14,178,113,179,118,181,184],{},[115,180,117],{},[18,182,183],{},"localhost:53692\u002Fcallback",". After you approve access, credentials are stored automatically.",[107,186,126],{"id":187},"api-key-1",[14,189,113,190,131,192,139],{},[115,191,126],{},[133,193,196],{"href":194,"rel":195},"https:\u002F\u002Fconsole.anthropic.com",[137],"console.anthropic.com",[107,198,200],{"id":199},"subscription-warning","Subscription warning",[202,203,204,214],"blockquote",{},[14,205,206,209,210,213],{},[115,207,208],{},"Claude.ai Pro and Team subscriptions do not work with Slo."," Slo requires the ",[115,211,212],{},"Anthropic API"," with usage-based billing enabled.",[14,215,216],{},"If your Anthropic account has API credits, that works. A plain Claude.ai subscription without API access will not.",[98,218],{},[23,220,75],{"id":221},"kimi-for-coding",[14,223,224],{},"Kimi For Coding uses API key authentication only — there is no OAuth option.",[14,226,227,228,139],{},"When prompted, enter your Kimi API key. Slo connects to ",[18,229,230],{},"https:\u002F\u002Fapi.kimi.com\u002Fcoding\u002Fv1",[98,232],{},[23,234,236],{"id":235},"where-credentials-are-stored","Where credentials are stored",[14,238,239],{},"Slo stores credentials at:",[241,242,247],"pre",{"className":243,"code":245,"language":246},[244],"language-text","~\u002F.slo\u002Fglobal\u002Fauthentication.json\n","text",[18,248,245],{"__ignoreMap":249},"",[14,251,252,253,256,257,260,261,139],{},"The file is created with permissions ",[18,254,255],{},"0o600"," (owner read\u002Fwrite only). The parent directory ",[18,258,259],{},"~\u002F.slo\u002F"," is created with permissions ",[18,262,263],{},"0o700",[14,265,266],{},"The file uses this structure:",[241,268,272],{"className":269,"code":270,"language":271,"meta":249,"style":249},"language-json shiki shiki-themes github-dark-high-contrast","{\n  \"schema_version\": 1,\n  \"providers\": {\n    \"openai\": {\n      \"provider\": \"openai\",\n      \"auth_type\": \"oauth\",\n      \"access_token\": \"...\",\n      \"refresh_token\": \"...\",\n      \"expires_at\": \"2026-06-30T05:26:15Z\",\n      \"subject\": \"...\",\n      \"scope\": \"openid profile email offline_access\",\n      \"created_at\": \"2026-06-25T05:26:15Z\"\n    }\n  }\n}\n","json",[18,273,274,283,300,309,317,331,344,357,369,382,394,407,418,424,430],{"__ignoreMap":249},[275,276,279],"span",{"class":277,"line":278},"line",1,[275,280,282],{"class":281},"sMAXC","{\n",[275,284,286,290,293,297],{"class":277,"line":285},2,[275,287,289],{"class":288},"sKpQp","  \"schema_version\"",[275,291,292],{"class":281},": ",[275,294,296],{"class":295},"sCcAr","1",[275,298,299],{"class":281},",\n",[275,301,303,306],{"class":277,"line":302},3,[275,304,305],{"class":288},"  \"providers\"",[275,307,308],{"class":281},": {\n",[275,310,312,315],{"class":277,"line":311},4,[275,313,314],{"class":288},"    \"openai\"",[275,316,308],{"class":281},[275,318,320,323,325,329],{"class":277,"line":319},5,[275,321,322],{"class":288},"      \"provider\"",[275,324,292],{"class":281},[275,326,328],{"class":327},"sTRMh","\"openai\"",[275,330,299],{"class":281},[275,332,334,337,339,342],{"class":277,"line":333},6,[275,335,336],{"class":288},"      \"auth_type\"",[275,338,292],{"class":281},[275,340,341],{"class":327},"\"oauth\"",[275,343,299],{"class":281},[275,345,347,350,352,355],{"class":277,"line":346},7,[275,348,349],{"class":288},"      \"access_token\"",[275,351,292],{"class":281},[275,353,354],{"class":327},"\"...\"",[275,356,299],{"class":281},[275,358,360,363,365,367],{"class":277,"line":359},8,[275,361,362],{"class":288},"      \"refresh_token\"",[275,364,292],{"class":281},[275,366,354],{"class":327},[275,368,299],{"class":281},[275,370,372,375,377,380],{"class":277,"line":371},9,[275,373,374],{"class":288},"      \"expires_at\"",[275,376,292],{"class":281},[275,378,379],{"class":327},"\"2026-06-30T05:26:15Z\"",[275,381,299],{"class":281},[275,383,385,388,390,392],{"class":277,"line":384},10,[275,386,387],{"class":288},"      \"subject\"",[275,389,292],{"class":281},[275,391,354],{"class":327},[275,393,299],{"class":281},[275,395,397,400,402,405],{"class":277,"line":396},11,[275,398,399],{"class":288},"      \"scope\"",[275,401,292],{"class":281},[275,403,404],{"class":327},"\"openid profile email offline_access\"",[275,406,299],{"class":281},[275,408,410,413,415],{"class":277,"line":409},12,[275,411,412],{"class":288},"      \"created_at\"",[275,414,292],{"class":281},[275,416,417],{"class":327},"\"2026-06-25T05:26:15Z\"\n",[275,419,421],{"class":277,"line":420},13,[275,422,423],{"class":281},"    }\n",[275,425,427],{"class":277,"line":426},14,[275,428,429],{"class":281},"  }\n",[275,431,433],{"class":277,"line":432},15,[275,434,435],{"class":281},"}\n",[14,437,438,439,442,443,446,447,450],{},"For API key authentication, ",[18,440,441],{},"auth_type"," is ",[18,444,445],{},"\"api_key\""," and the token fields are replaced by an ",[18,448,449],{},"api_key"," field.",[98,452],{},[23,454,456],{"id":455},"environment-variable-overrides","Environment variable overrides",[14,458,459],{},"You can supply credentials via environment variables instead of the credentials file. Slo checks these before reading the file:",[28,461,462,471],{},[31,463,464],{},[34,465,466,469],{},[37,467,468],{},"Variable",[37,470,39],{},[47,472,473,483,492],{},[34,474,475,480],{},[52,476,477],{},[18,478,479],{},"SLO_OPENAI_API_KEY",[52,481,482],{},"OpenAI",[34,484,485,490],{},[52,486,487],{},[18,488,489],{},"SLO_ANTHROPIC_API_KEY",[52,491,65],{},[34,493,494,499],{},[52,495,496],{},[18,497,498],{},"SLO_KIMI_FOR_CODING_API_KEY",[52,500,75],{},[14,502,503],{},"Two additional variables control where Slo looks for the credentials file:",[28,505,506,515],{},[31,507,508],{},[34,509,510,512],{},[37,511,468],{},[37,513,514],{},"Effect",[47,516,517,527],{},[34,518,519,524],{},[52,520,521],{},[18,522,523],{},"SLO_AUTH_FILE",[52,525,526],{},"Full path to the credentials file (overrides the default location)",[34,528,529,534],{},[52,530,531],{},[18,532,533],{},"SLO_HOME",[52,535,536,537,540,541],{},"Base directory (default: ",[18,538,539],{},"~\u002F.slo","). Changes the default credentials path to ",[18,542,543],{},"$SLO_HOME\u002Fglobal\u002Fauthentication.json",[14,545,546,549,550,553],{},[115,547,548],{},"Anthropic legacy fallback:"," If no Anthropic credentials are found in the Slo file or environment, Slo also checks ",[18,551,552],{},"~\u002F.claude\u002F.credentials.json"," (written by the Claude desktop app).",[98,555],{},[23,557,559],{"id":558},"re-authenticating","Re-authenticating",[14,561,562],{},"To switch providers or refresh credentials:",[564,565,566,575],"ul",{},[144,567,568,571,572,574],{},[115,569,570],{},"From within Slo:"," type ",[18,573,20],{}," at any time. The authentication modal opens and you can choose a new provider or re-enter credentials.",[144,576,577,580,581,584],{},[115,578,579],{},"Manually:"," delete ",[18,582,583],{},"~\u002F.slo\u002Fglobal\u002Fauthentication.json",". Slo will prompt you to authenticate on the next launch.",[14,586,587,588,591,592,139],{},"There is no ",[18,589,590],{},"slo auth"," CLI command — re-authentication is handled entirely inside the TUI via ",[18,593,20],{},[595,596,597],"style",{},"html pre.shiki code .sMAXC, html code.shiki .sMAXC{--shiki-default:#F0F3F6}html pre.shiki code .sKpQp, html code.shiki .sKpQp{--shiki-default:#72F088}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":249,"searchDepth":285,"depth":285,"links":599},[600,601,602,606,611,612,613,614],{"id":25,"depth":285,"text":26},{"id":84,"depth":285,"text":85},{"id":102,"depth":285,"text":54,"children":603},[604,605],{"id":109,"depth":302,"text":110},{"id":125,"depth":302,"text":126},{"id":170,"depth":285,"text":65,"children":607},[608,609,610],{"id":176,"depth":302,"text":110},{"id":187,"depth":302,"text":126},{"id":199,"depth":302,"text":200},{"id":221,"depth":285,"text":75},{"id":235,"depth":285,"text":236},{"id":455,"depth":285,"text":456},{"id":558,"depth":285,"text":559},"How to connect Slo to OpenAI, Anthropic, or Kimi For Coding.","md",{},true,"\u002Fdocs\u002Fauthentication",{"title":5,"description":615},"docs\u002Fauthentication\u002Findex","eGAJCyQmPMTBRtmBZnJG76bPMJsrrCYYy9J78fHILEc",1782392848391]