[{"data":1,"prerenderedAt":182},["ShallowReactive",2],{"\u002Fdocs\u002Fintegrations\u002Fjira":3},{"id":4,"title":5,"body":6,"description":174,"extension":175,"meta":176,"navigation":177,"path":178,"seo":179,"stem":180,"__hash__":181},"docs\u002Fdocs\u002Fintegrations\u002Fjira.md","Jira",{"type":7,"value":8,"toc":166},"minimark",[9,19,24,49,53,56,87,94,98,101,153,156,160],[10,11,12,13,18],"p",{},"Just like Linear, CAF Orchestrator watches for status changes on Jira tickets via\nwebhook. This page adds Jira-specific setup on top of the basics covered in\n",[14,15,17],"a",{"href":16},"\u002Fdocs\u002Fcaf-orchestrator","CAF Orchestrator",".",[20,21,23],"h2",{"id":22},"_1-create-an-api-token","1. Create an API token",[10,25,26,27,31,32,36,37,40,41,44,45,48],{},"In Jira, go to ",[28,29,30],"strong",{},"Account Settings → Security → API tokens"," and create a new token.\nAdd it to the Orchestrator's ",[33,34,35],"code",{},".env"," as ",[33,38,39],{},"JIRA_API_TOKEN",", along with ",[33,42,43],{},"JIRA_EMAIL"," and\n",[33,46,47],{},"JIRA_BASE_URL"," for the account used.",[20,50,52],{"id":51},"_2-register-a-webhook","2. Register a webhook",[10,54,55],{},"Jira webhooks are configured at the project or instance level, depending on your\nJira plan:",[57,58,59,73],"ul",{},[60,61,62,65,66,69,70],"li",{},[28,63,64],{},"Jira Cloud",": use the Automation feature (",[28,67,68],{},"Project settings → Automation","),\ncreate a rule with an \"Issue transitioned\" trigger that sends a web request to\n",[33,71,72],{},"https:\u002F\u002F\u003Cyour-vps-host>\u002Fwebhooks\u002Fjira",[60,74,75,78,79,82,83,86],{},[28,76,77],{},"Jira Data Center\u002FServer",": register it under ",[28,80,81],{},"System → WebHooks"," with the\n",[33,84,85],{},"Issue: updated"," event",[10,88,89,90,93],{},"Include a header with the same secret as the Orchestrator's ",[33,91,92],{},"WEBHOOK_SECRET"," so the\npayload can be verified.",[20,95,97],{"id":96},"_3-agree-on-a-status-mapping","3. Agree on a status mapping",[10,99,100],{},"Same as Linear, the Orchestrator triggers phases based on ticket status:",[102,103,104,117],"table",{},[105,106,107],"thead",{},[108,109,110,114],"tr",{},[111,112,113],"th",{},"Jira status",[111,115,116],{},"Phase triggered",[118,119,120,129,137,145],"tbody",{},[108,121,122,126],{},[123,124,125],"td",{},"Ready for Plan",[123,127,128],{},"Plan",[108,130,131,134],{},[123,132,133],{},"Ready for Implement",[123,135,136],{},"Implement",[108,138,139,142],{},[123,140,141],{},"Ready for Verify",[123,143,144],{},"Verify",[108,146,147,150],{},[123,148,149],{},"In Review",[123,151,152],{},"Waiting for human review (no automatic trigger)",[10,154,155],{},"Adjust the status names to match your Jira workflow — this is a convention, not a\nvalue hardcoded into the Orchestrator.",[20,157,159],{"id":158},"what-happens-once-the-webhook-is-received","What happens once the webhook is received",[10,161,162,163,165],{},"The flow is identical to Linear: the payload gets verified, a job is queued in\nBullMQ, then a headless Claude Code agent for that phase runs. See\n",[14,164,17],{"href":16}," for the full details.",{"title":167,"searchDepth":168,"depth":168,"links":169},"",2,[170,171,172,173],{"id":22,"depth":168,"text":23},{"id":51,"depth":168,"text":52},{"id":96,"depth":168,"text":97},{"id":158,"depth":168,"text":159},"Connect CAF Orchestrator to Jira so your pipeline triggers automatically from ticket status.","md",{},true,"\u002Fdocs\u002Fintegrations\u002Fjira",{"title":5,"description":174},"docs\u002Fintegrations\u002Fjira","-XhOaAKxWzZeyjPzwliJXeL_5alHccCbJOzvHtH7WEs",1787621083899]