[{"data":1,"prerenderedAt":268},["ShallowReactive",2],{"docs-\u002Fdocs\u002Ffeatures\u002Fconnectors":3},{"id":4,"title":5,"body":6,"description":260,"extension":261,"meta":262,"navigation":263,"path":264,"seo":265,"stem":266,"__hash__":267},"docs\u002Fdocs\u002Ffeatures\u002Fconnectors.md","Connectors",{"type":7,"value":8,"toc":254},"minimark",[9,13,22,27,98,101,105,108,163,170,176,183,187,194,202,217,224,228,241,250],[10,11,5],"h1",{"id":12},"connectors",[14,15,16,17,21],"p",{},"Connectors give Slo tools for the systems your work already lives in. Today that's ",[18,19,20],"strong",{},"Jira and Confluence",". Once connected, you can say \"read PAY-412 and write a spec for it\" and Slo pulls the ticket itself.",[23,24,26],"h2",{"id":25},"what-slo-can-do-with-jira-and-confluence","What Slo can do with Jira and Confluence",[28,29,30,43],"table",{},[31,32,33],"thead",{},[34,35,36,40],"tr",{},[37,38,39],"th",{},"Tool",[37,41,42],{},"What it does",[44,45,46,58,68,78,88],"tbody",{},[34,47,48,55],{},[49,50,51],"td",{},[52,53,54],"code",{},"search_jira_using_jql",[49,56,57],{},"Find issues with a JQL query.",[34,59,60,65],{},[49,61,62],{},[52,63,64],{},"get_jira_issue",[49,66,67],{},"Read one issue: summary, description, type, status, project and parent.",[34,69,70,75],{},[49,71,72],{},[52,73,74],{},"create_jira_issue",[49,76,77],{},"Create an issue or sub-task. Plain-text descriptions are converted for Jira.",[34,79,80,85],{},[49,81,82],{},[52,83,84],{},"search_confluence_using_cql",[49,86,87],{},"Find pages with a CQL query.",[34,89,90,95],{},[49,91,92],{},[52,93,94],{},"get_confluence_page",[49,96,97],{},"Read a page's title, URL and body.",[14,99,100],{},"The tools only appear once credentials are set, so a session without them won't try to reach Atlassian.",[23,102,104],{"id":103},"connect-atlassian","Connect Atlassian",[14,106,107],{},"Create an API token in your Atlassian account settings, then set all three variables:",[109,110,115],"pre",{"className":111,"code":112,"language":113,"meta":114,"style":114},"language-bash shiki shiki-themes github-dark-high-contrast","export SLO_ATLASSIAN_SITE_URL=\"https:\u002F\u002Fyour-team.atlassian.net\"\nexport SLO_ATLASSIAN_EMAIL=\"you@example.com\"\nexport SLO_ATLASSIAN_API_TOKEN=\"your-api-token\"\n","bash","",[52,116,117,137,150],{"__ignoreMap":114},[118,119,122,126,130,133],"span",{"class":120,"line":121},"line",1,[118,123,125],{"class":124},"sWyjQ","export",[118,127,129],{"class":128},"sMAXC"," SLO_ATLASSIAN_SITE_URL",[118,131,132],{"class":124},"=",[118,134,136],{"class":135},"sTRMh","\"https:\u002F\u002Fyour-team.atlassian.net\"\n",[118,138,140,142,145,147],{"class":120,"line":139},2,[118,141,125],{"class":124},[118,143,144],{"class":128}," SLO_ATLASSIAN_EMAIL",[118,146,132],{"class":124},[118,148,149],{"class":135},"\"you@example.com\"\n",[118,151,153,155,158,160],{"class":120,"line":152},3,[118,154,125],{"class":124},[118,156,157],{"class":128}," SLO_ATLASSIAN_API_TOKEN",[118,159,132],{"class":124},[118,161,162],{"class":135},"\"your-api-token\"\n",[14,164,165,166,169],{},"Start ",[52,167,168],{},"slo"," and ask it something that needs Jira:",[171,172,173],"blockquote",{},[14,174,175],{},"\"Find the open bugs in the PAY project assigned to me and summarise them.\"",[14,177,178,179,182],{},"Requests time out after 30 seconds. Change that with ",[52,180,181],{},"SLO_ATLASSIAN_TIMEOUT_SECONDS",".",[23,184,186],{"id":185},"storing-credentials-in-a-file-instead","Storing credentials in a file instead",[14,188,189,190,193],{},"If you'd rather not keep tokens in your shell profile, Slo also reads ",[52,191,192],{},"credentials.json"," from its connectors folder:",[109,195,200],{"className":196,"code":198,"language":199,"meta":114},[197],"language-text","~\u002F.slo\u002Fconnectors\u002Fatlassian\u002Fcredentials.json\n","text",[52,201,198],{"__ignoreMap":114},[14,203,204,205,208,209,212,213,216],{},"The folder follows ",[52,206,207],{},"SLO_HOME",", or set ",[52,210,211],{},"SLO_CONNECTORS_DIR"," to put it somewhere else. Keep the file readable only by you (",[52,214,215],{},"chmod 600",").",[14,218,219,220,223],{},"When both exist, the file wins. On CI, where secrets usually arrive as environment variables, set ",[52,221,222],{},"SLO_CONNECTOR_PREFER_ENV=1"," to flip that order.",[23,225,227],{"id":226},"good-things-to-ask-for","Good things to ask for",[229,230,231,235,238],"ul",{},[232,233,234],"li",{},"\"Read PAY-412 and its sub-tasks, then write a feature specification.\"",[232,236,237],{},"\"Create a sub-task under PAY-412 for each task in the breakdown.\"",[232,239,240],{},"\"Search Confluence for our refund policy and check the spec against it.\"",[14,242,243,244,249],{},"Pair this with the ",[245,246,248],"a",{"href":247},"\u002Fdocs\u002Fworkflows\u002Ffeature-specifications","feature specifications workflow"," and a ticket can go from Jira to a reviewed spec without copy and paste.",[251,252,253],"style",{},"html pre.shiki code .sWyjQ, html code.shiki .sWyjQ{--shiki-default:#FF9492}html pre.shiki code .sMAXC, html code.shiki .sMAXC{--shiki-default:#F0F3F6}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":114,"searchDepth":139,"depth":139,"links":255},[256,257,258,259],{"id":25,"depth":139,"text":26},{"id":103,"depth":139,"text":104},{"id":185,"depth":139,"text":186},{"id":226,"depth":139,"text":227},"Let Slo read and create Jira issues and search Confluence while it works.","md",{},true,"\u002Fdocs\u002Ffeatures\u002Fconnectors",{"title":5,"description":260},"docs\u002Ffeatures\u002Fconnectors","neMZJ8SWmGV5FphVoR1vTiozKOcDKYv1WTs4w4Uf0Lo",1791641282714]