[{"data":1,"prerenderedAt":1310},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fintegrations\u002Fgithub":90,"docs-surround-\u002Fdocs\u002Fintegrations\u002Fgithub":1305},[4],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Docs","\u002Fdocs","docs",[9,35,56,77],{"title":10,"path":11,"stem":12,"children":13,"page":34},"Get Started","\u002Fdocs\u002Fget-started","docs\u002F1.get-started",[14,18,22,26,30],{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fget-started\u002Fintroduction","docs\u002F1.get-started\u002F1.introduction",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fget-started\u002Fconcepts","docs\u002F1.get-started\u002F2.concepts",{"title":23,"path":24,"stem":25},"Installation","\u002Fdocs\u002Fget-started\u002Finstallation","docs\u002F1.get-started\u002F3.installation",{"title":27,"path":28,"stem":29},"Setup","\u002Fdocs\u002Fget-started\u002Fsetup","docs\u002F1.get-started\u002F4.setup",{"title":31,"path":32,"stem":33},"Maintenance","\u002Fdocs\u002Fget-started\u002Fmaintenance","docs\u002F1.get-started\u002F5.maintenance",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Usage","\u002Fdocs\u002Fusage","docs\u002F2.usage",[40,44,48,52],{"title":41,"path":42,"stem":43},"Projects","\u002Fdocs\u002Fusage\u002Fprojects","docs\u002F2.usage\u002F1.projects",{"title":45,"path":46,"stem":47},"Workflows","\u002Fdocs\u002Fusage\u002Fworkflows","docs\u002F2.usage\u002F2.workflows",{"title":49,"path":50,"stem":51},"Triggers","\u002Fdocs\u002Fusage\u002Ftriggers","docs\u002F2.usage\u002F3.triggers",{"title":53,"path":54,"stem":55},"AI Agent","\u002Fdocs\u002Fusage\u002Fagent","docs\u002F2.usage\u002F4.agent",{"title":57,"path":58,"stem":59,"children":60,"page":34},"Integrations","\u002Fdocs\u002Fintegrations","docs\u002F3.integrations",[61,65,69,73],{"title":62,"path":63,"stem":64},"GitHub","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F3.integrations\u002F1.github",{"title":66,"path":67,"stem":68},"Jira","\u002Fdocs\u002Fintegrations\u002Fjira","docs\u002F3.integrations\u002F2.jira",{"title":70,"path":71,"stem":72},"Plane","\u002Fdocs\u002Fintegrations\u002Fplane","docs\u002F3.integrations\u002F3.plane",{"title":74,"path":75,"stem":76},"Linear","\u002Fdocs\u002Fintegrations\u002Flinear","docs\u002F3.integrations\u002F4.linear",{"title":78,"path":79,"stem":80,"children":81,"page":34},"Resources","\u002Fdocs\u002Fresources","docs\u002F4.resources",[82,86],{"title":83,"path":84,"stem":85},"Beta Testers","\u002Fdocs\u002Fresources\u002Fbeta-testers","docs\u002F4.resources\u002F1.beta-testers",{"title":87,"path":88,"stem":89},"Troubleshooting","\u002Fdocs\u002Fresources\u002Ftroubleshooting","docs\u002F4.resources\u002F2.troubleshooting",{"id":91,"title":62,"body":92,"description":1299,"extension":1300,"meta":1301,"navigation":1302,"path":63,"seo":1303,"stem":64,"__hash__":1304},"docs_en\u002Fdocs\u002F3.integrations\u002F1.github.md",{"type":93,"value":94,"toc":1285},"minimark",[95,99,103,111,114,166,169,173,177,184,191,196,242,245,249,323,334,340,344,350,384,387,391,435,439,447,451,454,519,522,526,533,562,566,569,579,586,594,600,604,607,611,621,633,637,664,833,837,862,954,958,982,1080,1086,1090,1093,1099,1102,1108,1111,1117,1121,1128,1159,1281],[96,97,98],"p",{},"GitHub is the integration every instance has. The GitHub App created during setup signs your team in, lists the repositories that become projects, delivers the events that start workflows, and lets the agent push branches, open pull requests, and answer on issues. This page collects what that covers and how to use it in workflows.",[100,101,27],"h2",{"id":102},"setup",[96,104,105,106,110],{},"The GitHub App is created once, on the setup page of a fresh instance. ",[107,108,27],"a",{"href":109},"\u002Fdocs\u002Fget-started\u002Fsetup#creating-the-github-app"," walks through that flow. Once the app is installed on a repository, that repository is ready. There is nothing to configure per repository, no webhook and no token.",[96,112,113],{},"What the app is allowed to do on the repositories it is installed on:",[115,116,117,130],"table",{},[118,119,120],"thead",{},[121,122,123,127],"tr",{},[124,125,126],"th",{},"Access",[124,128,129],{},"Used for",[131,132,133,142,150,158],"tbody",{},[121,134,135,139],{},[136,137,138],"td",{},"Contents, write",[136,140,141],{},"Checking out the code and pushing branches",[121,143,144,147],{},[136,145,146],{},"Pull requests, write",[136,148,149],{},"Opening pull requests",[121,151,152,155],{},[136,153,154],{},"Issues, write",[136,156,157],{},"Reading issues, posting comments, and setting labels. Comments on pull requests go through the same API.",[121,159,160,163],{},[136,161,162],{},"Metadata, read",[136,164,165],{},"Listing repositories and branches",[96,167,168],{},"It subscribes to three webhook events: pull request, issues, and issue comment. Everything on this page is built from those.",[100,170,172],{"id":171},"capabilities","Capabilities",[174,175,49],"h3",{"id":176},"triggers",[96,178,179,180,183],{},"A GitHub trigger watches the repositories of the selected projects and starts one run for the project whose repository sent the event. The tabs \"Pull request\" and \"Issue\" at the top of the form decide what the trigger is about. Below them, \"Fires when any of these happens\" lists the events and \"But only if\" the conditions. Any ticked event fires the trigger, and one group of conditions has to hold. How the two sections work in general is on ",[107,181,49],{"href":182},"\u002Fdocs\u002Fusage\u002Ftriggers#events-and-conditions",".",[96,185,186],{},[187,188],"img",{"alt":189,"src":190},"The trigger dialog with GitHub selected as source, two projects as chips, the Pull request tab, the events Opened, Ready for review, and New commits pushed ticked, the condition Base branch is main, and an or group with Label is bug","\u002Fassets\u002Fknecht-trigger-github.png",[192,193,195],"h4",{"id":194},"pull-request-events","Pull Request Events",[115,197,198,208],{},[118,199,200],{},[121,201,202,205],{},[124,203,204],{},"Event",[124,206,207],{},"Fires when",[131,209,210,218,226,234],{},[121,211,212,215],{},[136,213,214],{},"Opened",[136,216,217],{},"A pull request is opened or reopened. Ticked by default.",[121,219,220,223],{},[136,221,222],{},"Ready for review",[136,224,225],{},"A draft is marked as ready for review.",[121,227,228,231],{},[136,229,230],{},"New commits pushed",[136,232,233],{},"Commits are pushed to the pull request, force pushes included. Every push starts a run.",[121,235,236,239],{},[136,237,238],{},"Label added",[136,240,241],{},"One of the picked labels is added to the pull request. The labels are picked from the labels of the repository.",[96,243,244],{},"Runs check out the pull request's branch.",[192,246,248],{"id":247},"pull-request-conditions","Pull Request Conditions",[115,250,251,261],{},[118,252,253],{},[121,254,255,258],{},[124,256,257],{},"Field",[124,259,260],{},"Compares against",[131,262,263,279,291,299,307,315],{},[121,264,265,268],{},[136,266,267],{},"Base branch",[136,269,270,271,275,276,183],{},"The branch the pull request targets, for example ",[272,273,274],"code",{},"main"," or ",[272,277,278],{},"releases\u002F*",[121,280,281,284],{},[136,282,283],{},"Head branch",[136,285,286,287,290],{},"The pull request's own branch, for example ",[272,288,289],{},"renovate\u002F*"," for every Renovate branch.",[121,292,293,296],{},[136,294,295],{},"Author",[136,297,298],{},"The login that opened the pull request.",[121,300,301,304],{},[136,302,303],{},"Assignee",[136,305,306],{},"The logins the pull request is assigned to.",[121,308,309,312],{},[136,310,311],{},"Label",[136,313,314],{},"The labels on the pull request.",[121,316,317,320],{},[136,318,319],{},"PR state",[136,321,322],{},"\"Draft\" or \"Ready for review\".",[96,324,325,326,329,330,183],{},"Each condition takes \"is\" or \"is not\". Branches and logins are typed, with the branches and assignees of the repository as suggestions, and take patterns. Bots are written the way GitHub shows them, for example ",[272,327,328],{},"renovate[bot]",". Labels and the PR state are picked from a list. Upper and lower case count, in logins too. The rules are the same for every source, see ",[107,331,333],{"href":332},"\u002Fdocs\u002Fusage\u002Ftriggers#matching","Matching",[335,336,337],"tip",{},[96,338,339],{},"A pull request that is opened as a draft never passes \"PR state is Ready for review\" with the Opened event alone. Tick \"Ready for review\" as well, and the run starts the moment the draft is released.",[192,341,343],{"id":342},"issue-events-and-conditions","Issue Events and Conditions",[96,345,346],{},[187,347],{"alt":348,"src":349},"The trigger dialog on the Issue tab, with the events Opened and Label added with the labels bug and enhancement ticked, and the condition Author is not *bot","\u002Fassets\u002Fknecht-trigger-github-issue.png",[115,351,352,360],{},[118,353,354],{},[121,355,356,358],{},[124,357,204],{},[124,359,207],{},[131,361,362,369,376],{},[121,363,364,366],{},[136,365,214],{},[136,367,368],{},"A new issue is opened, or a closed one is reopened. Ticked by default.",[121,370,371,373],{},[136,372,238],{},[136,374,375],{},"One of the picked labels is added to the issue. The labels are picked from the labels of the repository.",[121,377,378,381],{},[136,379,380],{},"Assigned to",[136,382,383],{},"The issue is assigned to one of the named GitHub logins. The assignees of the repository are suggested, other logins can be typed. The login has to match exactly, upper and lower case included.",[96,385,386],{},"Issues take the conditions \"Author\", \"Assignee\", and \"Label\", with the same rules as on pull requests. Runs check out the project's default branch.",[192,388,390],{"id":389},"inputs","Inputs",[96,392,393,394,397,398,401,402,401,405,401,408,401,411,401,414,417,418,421,422,425,426,275,429,432,433,183],{},"Both kinds fill the same run inputs: ",[272,395,396],{},"identifier"," is the number, plus ",[272,399,400],{},"title",", ",[272,403,404],{},"body",[272,406,407],{},"url",[272,409,410],{},"status",[272,412,413],{},"labels",[272,415,416],{},"assignee",", and ",[272,419,420],{},"author",". ",[272,423,424],{},"event"," is ",[272,427,428],{},"pull_request",[272,430,431],{},"issues",". Pausing, versioning, and the shared behavior of all triggers are on ",[107,434,49],{"href":50},[174,436,438],{"id":437},"sessions-on-issues-and-pull-requests","Sessions on Issues and Pull Requests",[96,440,441,442,446],{},"A run started by an issue or pull request joins the ",[107,443,445],{"href":444},"\u002Fdocs\u002Fget-started\u002Fconcepts#sessions","session"," of that issue or pull request. The session keeps the checkout, the environment, and one agent conversation, so a later trigger or a mention continues where the last run stopped. Closing the issue closes the session, reopening it revives the session. Scheduled and manual runs have no issue behind them and get a session of their own that closes after the run.",[174,448,450],{"id":449},"workflow-steps","Workflow Steps",[96,452,453],{},"Three steps in the Output group of the step library work with GitHub. They run in any workflow, no matter whether a GitHub event, a schedule, or a click started it.",[115,455,456,469],{},[118,457,458],{},[121,459,460,463,466],{},[124,461,462],{},"Step",[124,464,465],{},"Fields",[124,467,468],{},"Outputs",[131,470,471,488,502],{},[121,472,473,476,483],{},[136,474,475],{},"Create branch",[136,477,478,479,482],{},"Branch name, for example ",[272,480,481],{},"knecht\u002F{{ run.id }}",". Branches off the current checkout.",[136,484,485],{},[272,486,487],{},"{{ steps.\u003Cid>.name }}",[121,489,490,493,496],{},[136,491,492],{},"Create commit",[136,494,495],{},"Commit message. Commits everything the run changed under the app's bot account. Nothing to commit is skipped, not an error.",[136,497,498,501],{},[272,499,500],{},"{{ steps.\u003Cid>.sha }}",", empty when nothing changed",[121,503,504,507,510],{},[136,505,506],{},"Pull request",[136,508,509],{},"Title and Description. Pushes the branch and opens a pull request against the project's default branch. Needs a Create branch step earlier in the workflow.",[136,511,512,515,516],{},[272,513,514],{},"{{ steps.\u003Cid>.url }}"," and ",[272,517,518],{},"{{ steps.\u003Cid>.number }}",[96,520,521],{},"Knecht appends a link to the preview environment to every pull request description. A branch without commits is skipped without failing, and the step then produces no outputs. The run page shows an \"Open Pull Request\" button once a pull request exists.",[174,523,525],{"id":524},"the-agent-on-issues-and-pull-requests","The Agent on Issues and Pull Requests",[96,527,528,529,532],{},"When the run's session belongs to an issue or pull request, the ",[107,530,531],{"href":54},"agent"," gets four commands inside the environment. The prompt of an AI step only has to name what to do with them.",[534,535,536,544,550,556],"ul",{},[537,538,539,543],"li",{},[540,541,542],"strong",{},"Read the thread."," Title, state, author, assignees, labels, body, and the last ten comments, so a follow-up sees what was said in the meantime.",[537,545,546,549],{},[540,547,548],{},"Reply."," Posts a comment on the issue or pull request. Knecht appends the preview link and, when one exists, the pull request link.",[537,551,552,555],{},[540,553,554],{},"Set labels."," Adds or removes labels of the repository. Knecht never creates labels, so the ones the agent should use have to exist before the run.",[537,557,558,561],{},[540,559,560],{},"Open a pull request."," Pushes the current branch and opens a pull request against the default branch, without the git steps above. The agent refuses to do this on the default branch itself.",[174,563,565],{"id":564},"mentions","Mentions",[96,567,568],{},"Comment on an issue or pull request of the project's repository:",[570,571,576],"pre",{"className":572,"code":574,"language":575},[573],"language-text","@knecht-works fix the broken footer link\n","text",[272,577,574],{"__ignoreMap":578},"",[96,580,581,582,585],{},"The name of your GitHub App works instead of ",[272,583,584],{},"@knecht-works"," as well. Knecht reacts with an eyes emoji, runs the comment as a follow-up, and posts the answer in the thread.",[96,587,588,589,593],{},"Knecht only answers GitHub accounts that can sign in to your Knecht dashboard: the owner and everyone invited under Settings, Access, see ",[107,590,592],{"href":591},"\u002Fdocs\u002Fget-started\u002Fsetup#inviting-your-team","Inviting Your Team",". Write access to the repository is not enough. Comments from all other accounts and from bots are ignored.",[96,595,596,597,183],{},"The one-time setup, what happens step by step, and what to check when Knecht stays silent is on ",[107,598,565],{"href":599},"\u002Fdocs\u002Fusage\u002Fagent#mentions",[100,601,603],{"id":602},"examples","Examples",[96,605,606],{},"The workflows below can be built in the editor or imported from YAML under Workflows, \"Import\". Triggers are added in the editor after the import.",[174,608,610],{"id":609},"software-factory","Software Factory",[96,612,613,614,275,617,620],{},"Three workflows that hand an issue from one to the next. The triage checks every new issue and sets the label ",[272,615,616],{},"bug",[272,618,619],{},"enhancement",", and that label fires the trigger of the matching workflow. A bug comes back with a pull request, an enhancement with a plan that a mention in the thread turns into a pull request.",[96,622,623,624,627,628,515,630,632],{},"All of it runs in the ",[107,625,445],{"href":626},"#sessions-on-issues-and-pull-requests"," of the issue. The triage boots the site once and every later run finds it running, so only the triage has a boot step. The prompts do not repeat title or body, because the agent reads the issue of its session itself. Both labels have to exist in the repository, ",[272,629,616],{},[272,631,619],{}," are GitHub's defaults.",[192,634,636],{"id":635},"triage","Triage",[115,638,639,652],{},[118,640,641],{},[121,642,643,646,649],{},[124,644,645],{},"Source",[124,647,648],{},"Fires When",[124,650,651],{},"But Only If",[131,653,654],{},[121,655,656,659,661],{},[136,657,658],{},"GitHub, Issue",[136,660,214],{},[136,662,663],{},"No conditions",[665,666,668],"docs-workflow-yaml",{"filename":667},"github-issue-triage.yaml",[570,669,673],{"className":670,"code":671,"language":672,"meta":578,"style":578},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","version: 1\nname: GitHub Issue Triage\ndescription: Check every new issue and label it as bug or enhancement.\nsteps:\n  - type: ddev-start\n    id: boot_project\n    label: Boot the Site\n  - type: ai\n    prompt: 'Read the issue of this session. Try to reproduce it on the preview and\n      in the code. Do not fix anything. Then apply exactly one label: \"bug\" if\n      something is broken, \"enhancement\" if it was never built. If the report\n      lacks the details to decide, apply no label and ask the reporter in the\n      thread.'\n    id: triage\n    label: Triage\n","yaml",[272,674,675,692,704,715,724,738,749,760,772,786,792,798,804,813,823],{"__ignoreMap":578},[676,677,680,684,688],"span",{"class":678,"line":679},"line",1,[676,681,683],{"class":682},"swJcz","version",[676,685,687],{"class":686},"sMK4o",":",[676,689,691],{"class":690},"sbssI"," 1\n",[676,693,695,698,700],{"class":678,"line":694},2,[676,696,697],{"class":682},"name",[676,699,687],{"class":686},[676,701,703],{"class":702},"sfazB"," GitHub Issue Triage\n",[676,705,707,710,712],{"class":678,"line":706},3,[676,708,709],{"class":682},"description",[676,711,687],{"class":686},[676,713,714],{"class":702}," Check every new issue and label it as bug or enhancement.\n",[676,716,718,721],{"class":678,"line":717},4,[676,719,720],{"class":682},"steps",[676,722,723],{"class":686},":\n",[676,725,727,730,733,735],{"class":678,"line":726},5,[676,728,729],{"class":686},"  -",[676,731,732],{"class":682}," type",[676,734,687],{"class":686},[676,736,737],{"class":702}," ddev-start\n",[676,739,741,744,746],{"class":678,"line":740},6,[676,742,743],{"class":682},"    id",[676,745,687],{"class":686},[676,747,748],{"class":702}," boot_project\n",[676,750,752,755,757],{"class":678,"line":751},7,[676,753,754],{"class":682},"    label",[676,756,687],{"class":686},[676,758,759],{"class":702}," Boot the Site\n",[676,761,763,765,767,769],{"class":678,"line":762},8,[676,764,729],{"class":686},[676,766,732],{"class":682},[676,768,687],{"class":686},[676,770,771],{"class":702}," ai\n",[676,773,775,778,780,783],{"class":678,"line":774},9,[676,776,777],{"class":682},"    prompt",[676,779,687],{"class":686},[676,781,782],{"class":686}," '",[676,784,785],{"class":702},"Read the issue of this session. Try to reproduce it on the preview and\n",[676,787,789],{"class":678,"line":788},10,[676,790,791],{"class":702},"      in the code. Do not fix anything. Then apply exactly one label: \"bug\" if\n",[676,793,795],{"class":678,"line":794},11,[676,796,797],{"class":702},"      something is broken, \"enhancement\" if it was never built. If the report\n",[676,799,801],{"class":678,"line":800},12,[676,802,803],{"class":702},"      lacks the details to decide, apply no label and ask the reporter in the\n",[676,805,807,810],{"class":678,"line":806},13,[676,808,809],{"class":702},"      thread.",[676,811,812],{"class":686},"'\n",[676,814,816,818,820],{"class":678,"line":815},14,[676,817,743],{"class":682},[676,819,687],{"class":686},[676,821,822],{"class":702}," triage\n",[676,824,826,828,830],{"class":678,"line":825},15,[676,827,754],{"class":682},[676,829,687],{"class":686},[676,831,832],{"class":702}," Triage\n",[192,834,836],{"id":835},"bug-fix","Bug Fix",[115,838,839,849],{},[118,840,841],{},[121,842,843,845,847],{},[124,844,645],{},[124,846,648],{},[124,848,651],{},[131,850,851],{},[121,852,853,855,860],{},[136,854,658],{},[136,856,857,858],{},"Label added: ",[272,859,616],{},[136,861,663],{},[665,863,865],{"filename":864},"github-bug-fix.yaml",[570,866,868],{"className":670,"code":867,"language":672,"meta":578,"style":578},"version: 1\nname: GitHub Bug Fix\ndescription: Fix an issue labeled as bug and open a pull request.\nsteps:\n  - type: ai\n    prompt: The issue of this session was confirmed as a bug. Fix it on a work\n      branch, verify the fix on the preview, commit, and open a pull request\n      that closes the issue. Answer in the thread with a short summary of the\n      change.\n    id: fix\n    label: Bug Fix\n",[272,869,870,878,887,896,902,912,921,926,931,936,945],{"__ignoreMap":578},[676,871,872,874,876],{"class":678,"line":679},[676,873,683],{"class":682},[676,875,687],{"class":686},[676,877,691],{"class":690},[676,879,880,882,884],{"class":678,"line":694},[676,881,697],{"class":682},[676,883,687],{"class":686},[676,885,886],{"class":702}," GitHub Bug Fix\n",[676,888,889,891,893],{"class":678,"line":706},[676,890,709],{"class":682},[676,892,687],{"class":686},[676,894,895],{"class":702}," Fix an issue labeled as bug and open a pull request.\n",[676,897,898,900],{"class":678,"line":717},[676,899,720],{"class":682},[676,901,723],{"class":686},[676,903,904,906,908,910],{"class":678,"line":726},[676,905,729],{"class":686},[676,907,732],{"class":682},[676,909,687],{"class":686},[676,911,771],{"class":702},[676,913,914,916,918],{"class":678,"line":740},[676,915,777],{"class":682},[676,917,687],{"class":686},[676,919,920],{"class":702}," The issue of this session was confirmed as a bug. Fix it on a work\n",[676,922,923],{"class":678,"line":751},[676,924,925],{"class":702},"      branch, verify the fix on the preview, commit, and open a pull request\n",[676,927,928],{"class":678,"line":762},[676,929,930],{"class":702},"      that closes the issue. Answer in the thread with a short summary of the\n",[676,932,933],{"class":678,"line":774},[676,934,935],{"class":702},"      change.\n",[676,937,938,940,942],{"class":678,"line":788},[676,939,743],{"class":682},[676,941,687],{"class":686},[676,943,944],{"class":702}," fix\n",[676,946,947,949,951],{"class":678,"line":794},[676,948,754],{"class":682},[676,950,687],{"class":686},[676,952,953],{"class":702}," Bug Fix\n",[192,955,957],{"id":956},"add-enhancement","Add Enhancement",[115,959,960,970],{},[118,961,962],{},[121,963,964,966,968],{},[124,965,645],{},[124,967,648],{},[124,969,651],{},[131,971,972],{},[121,973,974,976,980],{},[136,975,658],{},[136,977,857,978],{},[272,979,619],{},[136,981,663],{},[665,983,985],{"filename":984},"github-add-enhancement.yaml",[570,986,988],{"className":670,"code":987,"language":672,"meta":578,"style":578},"version: 1\nname: GitHub Add Enhancement\ndescription: Plan an issue labeled as enhancement and post the plan.\nsteps:\n  - type: ai\n    prompt: \"The issue of this session is an enhancement. Work out how it would be\n      built in this project: the files to touch, the steps in order, and what is\n      open. Do not change any files. Post the plan in the thread, written for\n      the person who opened the issue.\"\n    id: plan\n    label: Plan Enhancement\n",[272,989,990,998,1007,1016,1022,1032,1044,1049,1054,1062,1071],{"__ignoreMap":578},[676,991,992,994,996],{"class":678,"line":679},[676,993,683],{"class":682},[676,995,687],{"class":686},[676,997,691],{"class":690},[676,999,1000,1002,1004],{"class":678,"line":694},[676,1001,697],{"class":682},[676,1003,687],{"class":686},[676,1005,1006],{"class":702}," GitHub Add Enhancement\n",[676,1008,1009,1011,1013],{"class":678,"line":706},[676,1010,709],{"class":682},[676,1012,687],{"class":686},[676,1014,1015],{"class":702}," Plan an issue labeled as enhancement and post the plan.\n",[676,1017,1018,1020],{"class":678,"line":717},[676,1019,720],{"class":682},[676,1021,723],{"class":686},[676,1023,1024,1026,1028,1030],{"class":678,"line":726},[676,1025,729],{"class":686},[676,1027,732],{"class":682},[676,1029,687],{"class":686},[676,1031,771],{"class":702},[676,1033,1034,1036,1038,1041],{"class":678,"line":740},[676,1035,777],{"class":682},[676,1037,687],{"class":686},[676,1039,1040],{"class":686}," \"",[676,1042,1043],{"class":702},"The issue of this session is an enhancement. Work out how it would be\n",[676,1045,1046],{"class":678,"line":751},[676,1047,1048],{"class":702},"      built in this project: the files to touch, the steps in order, and what is\n",[676,1050,1051],{"class":678,"line":762},[676,1052,1053],{"class":702},"      open. Do not change any files. Post the plan in the thread, written for\n",[676,1055,1056,1059],{"class":678,"line":774},[676,1057,1058],{"class":702},"      the person who opened the issue.",[676,1060,1061],{"class":686},"\"\n",[676,1063,1064,1066,1068],{"class":678,"line":788},[676,1065,743],{"class":682},[676,1067,687],{"class":686},[676,1069,1070],{"class":702}," plan\n",[676,1072,1073,1075,1077],{"class":678,"line":794},[676,1074,754],{"class":682},[676,1076,687],{"class":686},[676,1078,1079],{"class":702}," Plan Enhancement\n",[1081,1082,1083],"note",{},[96,1084,1085],{},"A label that a person adds to an issue the triage never saw starts these workflows without a booted site. Add a boot step to them if that happens in your team.",[192,1087,1089],{"id":1088},"result","Result",[96,1091,1092],{},"Someone reports that the site has no dark mode. A minute later the triage has labeled the issue as an enhancement.",[96,1094,1095],{},[187,1096],{"alt":1097,"src":1098},"A new issue on GitHub that Knecht labeled as enhancement a minute after it was opened","\u002Fassets\u002Fissue-creation-with-label.png",[96,1100,1101],{},"The label starts \"GitHub Add Enhancement\", and the plan lands in the thread, with the preview link Knecht appends.",[96,1103,1104],{},[187,1105],{"alt":1106,"src":1107},"Knecht confirmed the issue as a feature request, added the enhancement label, and posted a plan with a preview link","\u002Fassets\u002Fissue-follow-up.png",[96,1109,1110],{},"A team member agrees and mentions Knecht. It continues in the same session and answers with the pull request.",[96,1112,1113],{},[187,1114],{"alt":1115,"src":1116},"The reporter asked Knecht to implement the plan and open a pull request, and Knecht answered with the pull request link and a summary","\u002Fassets\u002Fissue-enhancement-finished.png",[174,1118,1120],{"id":1119},"pull-request-review","Pull Request Review",[96,1122,1123,1124,1127],{},"Knecht tests every pull request on the running site. The run checks out the pull request's branch and the agent posts its findings as a comment. New commits fire the trigger again in the same session, so the second review knows the first. Do not exclude authors with ",[272,1125,1126],{},"*[bot]"," if Knecht's own pull requests should be reviewed: they are opened under the app's bot account.",[115,1129,1130,1140],{},[118,1131,1132],{},[121,1133,1134,1136,1138],{},[124,1135,645],{},[124,1137,648],{},[124,1139,651],{},[131,1141,1142],{},[121,1143,1144,1147,1150],{},[136,1145,1146],{},"GitHub, Pull request",[136,1148,1149],{},"Opened, Ready for review, New commits pushed",[136,1151,1152,1153,1155,1156],{},"Base branch is ",[272,1154,274],{}," and PR state is Ready for review and Author is not ",[272,1157,1158],{},"renovate[bot], dependabot[bot]",[665,1160,1162],{"filename":1161},"github-review-pr.yaml",[570,1163,1165],{"className":670,"code":1164,"language":672,"meta":578,"style":578},"version: 1\nname: GitHub Pull Request Review\ndescription: Test each pull request on the preview and comment the findings.\nsteps:\n  - type: ddev-start\n    id: boot_project\n    label: Boot the Site\n  - type: ai\n    prompt: \"Review the pull request of this session. Read the diff against {{\n      project.defaultBranch }}, then check the change on the preview. Post one\n      comment: what the change does, what you tested, and anything that looks\n      wrong. Do not change any files.\"\n    id: review\n    label: Review Pull Request\n",[272,1166,1167,1175,1184,1193,1199,1209,1217,1225,1235,1246,1251,1256,1263,1272],{"__ignoreMap":578},[676,1168,1169,1171,1173],{"class":678,"line":679},[676,1170,683],{"class":682},[676,1172,687],{"class":686},[676,1174,691],{"class":690},[676,1176,1177,1179,1181],{"class":678,"line":694},[676,1178,697],{"class":682},[676,1180,687],{"class":686},[676,1182,1183],{"class":702}," GitHub Pull Request Review\n",[676,1185,1186,1188,1190],{"class":678,"line":706},[676,1187,709],{"class":682},[676,1189,687],{"class":686},[676,1191,1192],{"class":702}," Test each pull request on the preview and comment the findings.\n",[676,1194,1195,1197],{"class":678,"line":717},[676,1196,720],{"class":682},[676,1198,723],{"class":686},[676,1200,1201,1203,1205,1207],{"class":678,"line":726},[676,1202,729],{"class":686},[676,1204,732],{"class":682},[676,1206,687],{"class":686},[676,1208,737],{"class":702},[676,1210,1211,1213,1215],{"class":678,"line":740},[676,1212,743],{"class":682},[676,1214,687],{"class":686},[676,1216,748],{"class":702},[676,1218,1219,1221,1223],{"class":678,"line":751},[676,1220,754],{"class":682},[676,1222,687],{"class":686},[676,1224,759],{"class":702},[676,1226,1227,1229,1231,1233],{"class":678,"line":762},[676,1228,729],{"class":686},[676,1230,732],{"class":682},[676,1232,687],{"class":686},[676,1234,771],{"class":702},[676,1236,1237,1239,1241,1243],{"class":678,"line":774},[676,1238,777],{"class":682},[676,1240,687],{"class":686},[676,1242,1040],{"class":686},[676,1244,1245],{"class":702},"Review the pull request of this session. Read the diff against {{\n",[676,1247,1248],{"class":678,"line":788},[676,1249,1250],{"class":702},"      project.defaultBranch }}, then check the change on the preview. Post one\n",[676,1252,1253],{"class":678,"line":794},[676,1254,1255],{"class":702},"      comment: what the change does, what you tested, and anything that looks\n",[676,1257,1258,1261],{"class":678,"line":800},[676,1259,1260],{"class":702},"      wrong. Do not change any files.",[676,1262,1061],{"class":686},[676,1264,1265,1267,1269],{"class":678,"line":806},[676,1266,743],{"class":682},[676,1268,687],{"class":686},[676,1270,1271],{"class":702}," review\n",[676,1273,1274,1276,1278],{"class":678,"line":815},[676,1275,754],{"class":682},[676,1277,687],{"class":686},[676,1279,1280],{"class":702}," Review Pull Request\n",[1282,1283,1284],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":578,"searchDepth":694,"depth":694,"links":1286},[1287,1288,1295],{"id":102,"depth":694,"text":27},{"id":171,"depth":694,"text":172,"children":1289},[1290,1291,1292,1293,1294],{"id":176,"depth":706,"text":49},{"id":437,"depth":706,"text":438},{"id":449,"depth":706,"text":450},{"id":524,"depth":706,"text":525},{"id":564,"depth":706,"text":565},{"id":602,"depth":694,"text":603,"children":1296},[1297,1298],{"id":609,"depth":706,"text":610},{"id":1119,"depth":706,"text":1120},"Everything you need to know about the GitHub integration. What it can do and how to set it up.","md",{},true,{"title":62,"description":1299},"xD5cboPBXv3NtEpWzkQ6XSQ8iCY4my_5GVCGXaW6gZg",[1306,1308],{"title":53,"path":54,"stem":55,"description":1307,"children":-1},"How the agent works inside your project and how to steer it.",{"title":66,"path":67,"stem":68,"description":1309,"children":-1},"Everything you need to know about the Jira integration. What it can do and how to set it up.",1790265015810]