[{"data":1,"prerenderedAt":1523},["ShallowReactive",2],{"docs-navigation":3,"docs-\u002Fdocs\u002Fintegrations\u002Fplane":90,"docs-surround-\u002Fdocs\u002Fintegrations\u002Fplane":1518},[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":70,"body":92,"description":1513,"extension":1514,"meta":1515,"navigation":873,"path":71,"seo":1516,"stem":72,"__hash__":1517},"docs_en\u002Fdocs\u002F3.integrations\u002F3.plane.md",{"type":93,"value":94,"toc":1492},"minimark",[95,99,103,106,310,314,317,328,334,339,404,408,411,425,435,439,502,507,511,559,563,571,575,582,586,593,623,629,633,636,646,652,655,661,665,668,672,683,690,702,706,732,908,912,941,1053,1057,1083,1194,1197,1202,1206,1209,1236,1355,1359,1362,1385,1488],[96,97,98],"p",{},"The Plane integration connects a Plane workspace to your instance, on Plane Cloud or self-hosted. Work items start workflows, the agent reads and answers on them, moves them between states, and Knecht reports the finished pull request back on the work item.",[100,101,27],"h2",{"id":102},"setup",[96,104,105],{},"You need a Plane workspace and an account Knecht acts as. A dedicated account named \"Knecht\" is worth the extra seat: comments show up under its name, \"assign it to Knecht\" becomes a normal assignment in Plane, and the account's project memberships limit what Knecht can see. Creating the webhook in step three needs workspace admin rights, once.",[107,108,110,115,123,130,133,137,140,178,181,187,191,194,197,232,238,241,244,248,251,255,258],"steps",{"level":109},"3",[111,112,114],"h3",{"id":113},"create-a-personal-access-token","Create a Personal Access Token",[96,116,117,118,122],{},"Sign in to Plane as the account Knecht should use and open the profile settings. Under Developer, \"Personal Access Tokens\", click \"Add access token\". Give it a title such as \"Knecht\", leave \"Never expires\" on or set an expiration date, and click \"Generate token\". Copy the token, it starts with ",[119,120,121],"code",{},"plane_api_"," and is shown only once.",[96,124,125],{},[126,127],"img",{"alt":128,"src":129},"The Create token dialog in the Plane profile settings, with the title Knecht and Never expires switched on","\u002Fassets\u002Fplane-access-token.png",[96,131,132],{},"A token with an expiration date stops working on that day. Create a new one and use \"Reconnect\" in Knecht before it runs out.",[111,134,136],{"id":135},"connect-the-account","Connect the Account",[96,138,139],{},"In your instance, open Settings, Integrations. The Plane panel has three fields:",[141,142,143,159,172],"ul",{},[144,145,146,150,151,154,155,158],"li",{},[147,148,149],"strong",{},"Plane URL."," ",[119,152,153],{},"https:\u002F\u002Fapp.plane.so"," for Plane Cloud, or the address of your own Plane. It has to start with ",[119,156,157],{},"https:\u002F\u002F",".",[144,160,161,164,165,168,169,158],{},[147,162,163],{},"Workspace slug."," The first path segment of your Plane URL. For ",[119,166,167],{},"https:\u002F\u002Fapp.plane.so\u002Facme\u002Fprojects"," it is ",[119,170,171],{},"acme",[144,173,174,177],{},[147,175,176],{},"API key."," The token from step one.",[96,179,180],{},"\"Connect\" checks the credentials against Plane before anything is stored and shows \"Connected as\" with the account's name on success. The token is stored encrypted and not shown again. \"Reconnect\" replaces the token later, \"Disconnect\" removes the connection.",[96,182,183],{},[126,184],{"alt":185,"src":186},"The Plane panel under Settings, Integrations, connected to an account, with the Plane URL, workspace slug, and API key fields, and the webhook URL and secret below","\u002Fassets\u002Fknecht-integration-settings-plane.png",[111,188,190],{"id":189},"create-the-webhook-in-plane","Create the Webhook in Plane",[96,192,193],{},"Plane does not call Knecht until you tell it to. After connecting, the panel shows \"Create the webhook in Plane and paste its secret below\" with the webhook URL and a copy button. \"Set up in Plane\" opens the webhook page of your workspace. By hand it is Workspace settings, then \"Webhooks\" under Developers.",[96,195,196],{},"Fill in the form:",[141,198,199,205,214,220,226],{},[144,200,201,204],{},[147,202,203],{},"Webhook title."," Anything, for example \"Knecht\".",[144,206,207,210,211,158],{},[147,208,209],{},"Payload URL."," The webhook URL from the panel, it ends in ",[119,212,213],{},"\u002Fapi\u002Fplane\u002Fwebhook",[144,215,216,219],{},[147,217,218],{},"V1 scopes."," Leave everything unticked, they are deprecated.",[144,221,222,225],{},[147,223,224],{},"V2 scopes."," Tick \"Work items\" and \"Work item comments\". Everything else stays empty.",[144,227,228,231],{},[147,229,230],{},"Work item v2 filters."," Leave it empty. Knecht drops events of projects that are not linked.",[96,233,234],{},[126,235],{"alt":236,"src":237},"The Create webhook form in the Plane workspace settings, with the Knecht payload URL and the V2 scopes Work items and Work item comments ticked","\u002Fassets\u002Fplane-webhook-events.png",[96,239,240],{},"Knecht uses the work item events created, updated, archived, and deleted, and the comment event created. Updated and deleted comments arrive as well and are ignored.",[96,242,243],{},"\"Create\" saves the webhook, and Plane generates a secret key for it. Copy the secret key, paste it into the Secret field of the Plane panel in Knecht, and click \"Save\". The pencil next to the secret replaces it later, for example after regenerating the key in Plane. The status line switches to \"Waiting for Plane\".",[111,245,247],{"id":246},"link-a-project-to-its-plane-project","Link a Project to Its Plane Project",[96,249,250],{},"Open the settings of a project in Knecht. The Plane panel has one field, \"Plane project\", listing the projects the account is a member of. Pick the one whose work items belong to this repository. One Plane project links to one repository and the other way round. Only linked projects can have Plane triggers.",[111,252,254],{"id":253},"check-that-events-arrive","Check That Events Arrive",[96,256,257],{},"Edit any work item in the linked Plane project. The status line in the Plane panel under Settings, Integrations switches to \"Receiving events\" with the last event and work item key. If it does not:",[259,260,261,274],"table",{},[262,263,264],"thead",{},[265,266,267,271],"tr",{},[268,269,270],"th",{},"Status line says",[268,272,273],{},"What to do",[275,276,277,286,294,302],"tbody",{},[265,278,279,283],{},[280,281,282],"td",{},"Wrong secret",[280,284,285],{},"Replace the secret in the panel with the secret key of the webhook.",[265,287,288,291],{},[280,289,290],{},"Without a body",[280,292,293],{},"Create the webhook again, Plane sent an empty delivery.",[265,295,296,299],{},[280,297,298],{},"No project is linked",[280,300,301],{},"Link the Plane project in the project settings, see step four. Events Knecht does not use show up here as well.",[265,303,304,307],{},[280,305,306],{},"Still \"Waiting for Plane\"",[280,308,309],{},"Check that the webhook URL is reachable from the internet and that the scopes are ticked.",[100,311,313],{"id":312},"capabilities","Capabilities",[111,315,49],{"id":316},"triggers",[96,318,319,320,324,325,158],{},"A Plane trigger watches the Plane projects that are linked to the selected projects. When a work item fires it, one run starts in the project that work item's Plane project is linked to. The project field only lists projects that are linked. In the form, \"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 ",[321,322,49],"a",{"href":323},"\u002Fdocs\u002Fusage\u002Ftriggers#events-and-conditions",". What all issue trackers share, such as issues that are created with the label already set, is on ",[321,326,49],{"href":327},"\u002Fdocs\u002Fusage\u002Ftriggers#issue-trackers",[96,329,330],{},[126,331],{"alt":332,"src":333},"The trigger dialog with Plane selected as source, one linked project, the event Assigned to Knecht ticked, and the conditions Label is Bug and Priority is urgent","\u002Fassets\u002Fknecht-trigger-plane.png",[335,336,338],"h4",{"id":337},"events","Events",[259,340,341,354],{},[262,342,343],{},[265,344,345,348,351],{},[268,346,347],{},"Event",[268,349,350],{},"Fires when",[268,352,353],{},"Notes",[275,355,356,366,382,393],{},[265,357,358,361,364],{},[280,359,360],{},"Created",[280,362,363],{},"A new work item appears in the project.",[280,365],{},[265,367,368,371,374],{},[280,369,370],{},"Assigned to Knecht",[280,372,373],{},"The work item is assigned to the account behind the connection.",[280,375,376,377,381],{},"Ticked by default. Makes \"give it to Knecht\" a normal assignment in Plane. Knecht ",[321,378,380],{"href":379},"#knecht-holds-the-work-item","joining the assignees"," itself does not fire.",[265,383,384,387,390],{},[280,385,386],{},"Label added",[280,388,389],{},"One of the picked labels is added to a work item.",[280,391,392],{},"The labels are picked from the labels of the Plane project.",[265,394,395,398,401],{},[280,396,397],{},"State reached",[280,399,400],{},"A work item moves into one of the picked states or state groups.",[280,402,403],{},"The default is \"Any Completed\". A work item created in a state does not fire.",[335,405,407],{"id":406},"state-reached","State Reached",[96,409,410],{},"The state list has two groups.",[141,412,413,419],{},[144,414,415,418],{},[147,416,417],{},"Group."," \"Any Backlog\", \"Any Unstarted\", \"Any Started\", \"Any Completed\", and \"Any Cancelled\" stand for Plane's five state groups, whatever the states of a project are called.",[144,420,421,424],{},[147,422,423],{},"Exact state."," The states of the selected projects.",[96,426,427,429,430,434],{},[321,428,49],{"href":327}," explains when a group and when an exact state fires, ",[321,431,433],{"href":432},"\u002Fdocs\u002Fusage\u002Ftriggers#matching","Matching"," what happens with several projects. If the form warns about a missing state, pick a group, a state all projects share, or create a second trigger.",[335,436,438],{"id":437},"conditions","Conditions",[259,440,441,451],{},[262,442,443],{},[265,444,445,448],{},[268,446,447],{},"Field",[268,449,450],{},"Compares against",[275,452,453,461,469,477],{},[265,454,455,458],{},[280,456,457],{},"State",[280,459,460],{},"The state the work item is in, as a group such as \"Any Started\" or an exact state.",[265,462,463,466],{},[280,464,465],{},"Assignee",[280,467,468],{},"\"Knecht\", the account behind the connection.",[265,470,471,474],{},[280,472,473],{},"Label",[280,475,476],{},"The labels on the work item, read from the Plane project.",[265,478,479,482],{},[280,480,481],{},"Priority",[280,483,484,485,488,489,488,492,488,495,498,499,158],{},"The priority of the work item: ",[119,486,487],{},"urgent",", ",[119,490,491],{},"high",[119,493,494],{},"medium",[119,496,497],{},"low",", or ",[119,500,501],{},"none",[96,503,504,505,158],{},"Each condition takes \"is\" or \"is not\". Every value is picked from a list and compared exactly, upper and lower case included. The rules are the same for every source, see ",[321,506,433],{"href":432},[335,508,510],{"id":509},"inputs","Inputs",[96,512,513,514,517,518,488,521,524,525,528,529,532,533,536,537,540,541,544,545,548,549,552,553,556,557,158],{},"The work item fills the run inputs: ",[119,515,516],{},"identifier"," is the key such as ",[119,519,520],{},"WEB-42",[119,522,523],{},"title"," the name, ",[119,526,527],{},"body"," the description converted to Markdown, ",[119,530,531],{},"url"," the work item link, ",[119,534,535],{},"status"," the state name, ",[119,538,539],{},"labels"," the labels, ",[119,542,543],{},"assignee"," and ",[119,546,547],{},"author"," the names of the assignees and the creator. ",[119,550,551],{},"event"," is ",[119,554,555],{},"issue",". Pausing, versioning, and shared behavior are on ",[321,558,49],{"href":50},[111,560,562],{"id":561},"sessions-on-work-items","Sessions on Work Items",[96,564,565,566,570],{},"A run started by a work item joins the ",[321,567,569],{"href":568},"\u002Fdocs\u002Fget-started\u002Fconcepts#sessions","session"," of that work item, like a run on a GitHub issue. The session keeps the checkout, the environment, and the agent conversation, so a second trigger on the same work item or a mention continues the work. The session closes when the work item reaches a state in the Completed or Cancelled group, is archived, or is deleted, its environment stops once no run needs it any more, and it opens again when the work item is moved back.",[111,572,574],{"id":573},"knecht-holds-the-work-item","Knecht Holds the Work Item",[96,576,577,578,581],{},"Knecht joins the assignees of a work item while it works on it, as on every issue tracker, see ",[321,579,49],{"href":580},"\u002Fdocs\u002Fusage\u002Ftriggers#knecht-holds-the-issue",". A work item takes several assignees, so the people already on it stay on it, and when Knecht leaves, they keep the work item. If Knecht was the only assignee, the work item goes to the person whose change started the run, else to the creator, else it is left unassigned.",[111,583,585],{"id":584},"the-agent-on-work-items","The Agent on Work Items",[96,587,588,589,592],{},"When the run's session belongs to a work item, the ",[321,590,591],{"href":54},"agent"," gets four commands inside the environment. The prompt of an AI step only has to name what to do with them.",[141,594,595,601,611,617],{},[144,596,597,600],{},[147,598,599],{},"Read the work item."," State, creator, assignees, labels, the description, and the last ten comments, live from Plane.",[144,602,603,606,607,610],{},[147,604,605],{},"Reply."," Posts a comment on the work item. The agent writes Markdown, Knecht converts it to Plane's format and appends the preview link and, when one exists, the pull request link. An ",[119,608,609],{},"@Name"," of a project member becomes a real mention that notifies that person.",[144,612,613,616],{},[147,614,615],{},"Set labels."," Adds or removes labels of the Plane project. Knecht never creates labels. If a name does not exist, the agent gets the list of existing labels instead.",[144,618,619,622],{},[147,620,621],{},"Move the work item."," Sets the state by name, for example \"In Review\". Plane has no transition rules, so every state of the project is reachable.",[96,624,625,626,158],{},"Opening a pull request works through the git steps or the agent's own command, see ",[321,627,62],{"href":628},"\u002Fdocs\u002Fintegrations\u002Fgithub#workflow-steps",[111,630,632],{"id":631},"mentions","Mentions",[96,634,635],{},"Write a comment on a work item of a linked Plane project, mention the Knecht account the way you mention a colleague, and add the instruction:",[637,638,643],"pre",{"className":639,"code":641,"language":642},[640],"language-text","@Knecht fix the broken footer link\n","text",[119,644,641],{"__ignoreMap":645},"",[96,647,648,651],{},[119,649,650],{},"@knecht"," typed as plain text works as well. Knecht runs the comment as a follow-up and posts the answer as a comment.",[96,653,654],{},"Whoever can comment on the work item can mention Knecht, the Plane workspace is the gate.",[96,656,657,658,158],{},"The one-time setup, what happens step by step, and what to check when Knecht stays silent is on ",[321,659,632],{"href":660},"\u002Fdocs\u002Fusage\u002Fagent#mentions",[100,662,664],{"id":663},"examples","Examples",[96,666,667],{},"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. All of them assume the project is linked to its Plane project.",[111,669,671],{"id":670},"software-factory","Software Factory",[96,673,674,675,678,679,682],{},"Three workflows that hand a work item from one to the next. The triage checks every new work item, sets the label ",[119,676,677],{},"Bug"," or ",[119,680,681],{},"Enhancement",", and moves it to \"Todo\". That move fires the trigger of the workflow whose label condition matches. A bug comes back with a pull request and a work item in review, an enhancement with a plan that a mention in the comments turns into a pull request.",[96,684,685,686,689],{},"All of it runs in the ",[321,687,569],{"href":688},"#sessions-on-work-items"," of the work item. 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 name or description, because the agent reads the work item of its session itself.",[691,692,693],"note",{},[96,694,695,696,698,699,701],{},"Plane creates the label ",[119,697,677],{}," with every project, add ",[119,700,681],{}," under the project settings, \"Labels\", first. Knecht only applies labels that exist, and a trigger only offers labels that exist. The state \"In Review\" is not a default either: add it under \"States\" in the Started group, a state in the Completed group would close the session.",[335,703,705],{"id":704},"triage","Triage",[259,707,708,721],{},[262,709,710],{},[265,711,712,715,718],{},[268,713,714],{},"Source",[268,716,717],{},"Fires When",[268,719,720],{},"But Only If",[275,722,723],{},[265,724,725,727,729],{},[280,726,70],{},[280,728,360],{},[280,730,731],{},"No conditions",[733,734,736],"docs-workflow-yaml",{"filename":735},"plane-work-item-triage.yaml",[637,737,741],{"className":738,"code":739,"language":740,"meta":645,"style":645},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","version: 1\nname: Plane Work Item Triage\ndescription: Check every new work item and label it as bug or enhancement.\nsteps:\n  - type: ddev-start\n    id: boot_project\n  - type: ai\n    prompt: >-\n      Read the work item of this session. Try to reproduce it in 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 and then move it\n      to \"Todo\".\n\n      If the work item lacks the details to decide, apply no label and ask the\n      creator in a comment for clarification.\n    id: triage\n    label: Triage\n","yaml",[119,742,743,760,772,783,791,805,816,828,844,850,856,862,868,875,881,887,897],{"__ignoreMap":645},[744,745,748,752,756],"span",{"class":746,"line":747},"line",1,[744,749,751],{"class":750},"swJcz","version",[744,753,755],{"class":754},"sMK4o",":",[744,757,759],{"class":758},"sbssI"," 1\n",[744,761,763,766,768],{"class":746,"line":762},2,[744,764,765],{"class":750},"name",[744,767,755],{"class":754},[744,769,771],{"class":770},"sfazB"," Plane Work Item Triage\n",[744,773,775,778,780],{"class":746,"line":774},3,[744,776,777],{"class":750},"description",[744,779,755],{"class":754},[744,781,782],{"class":770}," Check every new work item and label it as bug or enhancement.\n",[744,784,786,788],{"class":746,"line":785},4,[744,787,107],{"class":750},[744,789,790],{"class":754},":\n",[744,792,794,797,800,802],{"class":746,"line":793},5,[744,795,796],{"class":754},"  -",[744,798,799],{"class":750}," type",[744,801,755],{"class":754},[744,803,804],{"class":770}," ddev-start\n",[744,806,808,811,813],{"class":746,"line":807},6,[744,809,810],{"class":750},"    id",[744,812,755],{"class":754},[744,814,815],{"class":770}," boot_project\n",[744,817,819,821,823,825],{"class":746,"line":818},7,[744,820,796],{"class":754},[744,822,799],{"class":750},[744,824,755],{"class":754},[744,826,827],{"class":770}," ai\n",[744,829,831,834,836,840],{"class":746,"line":830},8,[744,832,833],{"class":750},"    prompt",[744,835,755],{"class":754},[744,837,839],{"class":838},"s7zQu"," >",[744,841,843],{"class":842},"spNyl","-\n",[744,845,847],{"class":746,"line":846},9,[744,848,849],{"class":770},"      Read the work item of this session. Try to reproduce it in the preview and\n",[744,851,853],{"class":746,"line":852},10,[744,854,855],{"class":770},"      in the code. Do not fix anything. Then apply exactly one label: \"Bug\" if\n",[744,857,859],{"class":746,"line":858},11,[744,860,861],{"class":770},"      something is broken, \"Enhancement\" if it was never built and then move it\n",[744,863,865],{"class":746,"line":864},12,[744,866,867],{"class":770},"      to \"Todo\".\n",[744,869,871],{"class":746,"line":870},13,[744,872,874],{"emptyLinePlaceholder":873},true,"\n",[744,876,878],{"class":746,"line":877},14,[744,879,880],{"class":770},"      If the work item lacks the details to decide, apply no label and ask the\n",[744,882,884],{"class":746,"line":883},15,[744,885,886],{"class":770},"      creator in a comment for clarification.\n",[744,888,890,892,894],{"class":746,"line":889},16,[744,891,810],{"class":750},[744,893,755],{"class":754},[744,895,896],{"class":770}," triage\n",[744,898,900,903,905],{"class":746,"line":899},17,[744,901,902],{"class":750},"    label",[744,904,755],{"class":754},[744,906,907],{"class":770}," Triage\n",[335,909,911],{"id":910},"bug-fix","Bug Fix",[259,913,914,924],{},[262,915,916],{},[265,917,918,920,922],{},[268,919,714],{},[268,921,717],{},[268,923,720],{},[275,925,926],{},[265,927,928,930,936],{},[280,929,70],{},[280,931,932,933],{},"State reached: ",[119,934,935],{},"Todo",[280,937,938,939],{},"Label is ",[119,940,677],{},[733,942,944],{"filename":943},"plane-bug-fix.yaml",[637,945,947],{"className":738,"code":946,"language":740,"meta":645,"style":645},"version: 1\nname: Plane Bug Fix\ndescription: Fix a work item labeled as bug and open a pull request.\nsteps:\n  - type: ai\n    prompt: >-\n      The work item of this session was confirmed as a bug. When you are\n      beginning your work move the work item to \"In Progress\". Then fix it on a\n      work branch, verify the fix on the preview, commit in logical batches, and\n      open a pull request.\n\n      Comment a short summary of the change on the work item and move it to \"In\n      Review\".\n    id: bug_fix\n    label: Bug Fix\n",[119,948,949,957,966,975,981,991,1001,1006,1011,1016,1021,1025,1030,1035,1044],{"__ignoreMap":645},[744,950,951,953,955],{"class":746,"line":747},[744,952,751],{"class":750},[744,954,755],{"class":754},[744,956,759],{"class":758},[744,958,959,961,963],{"class":746,"line":762},[744,960,765],{"class":750},[744,962,755],{"class":754},[744,964,965],{"class":770}," Plane Bug Fix\n",[744,967,968,970,972],{"class":746,"line":774},[744,969,777],{"class":750},[744,971,755],{"class":754},[744,973,974],{"class":770}," Fix a work item labeled as bug and open a pull request.\n",[744,976,977,979],{"class":746,"line":785},[744,978,107],{"class":750},[744,980,790],{"class":754},[744,982,983,985,987,989],{"class":746,"line":793},[744,984,796],{"class":754},[744,986,799],{"class":750},[744,988,755],{"class":754},[744,990,827],{"class":770},[744,992,993,995,997,999],{"class":746,"line":807},[744,994,833],{"class":750},[744,996,755],{"class":754},[744,998,839],{"class":838},[744,1000,843],{"class":842},[744,1002,1003],{"class":746,"line":818},[744,1004,1005],{"class":770},"      The work item of this session was confirmed as a bug. When you are\n",[744,1007,1008],{"class":746,"line":830},[744,1009,1010],{"class":770},"      beginning your work move the work item to \"In Progress\". Then fix it on a\n",[744,1012,1013],{"class":746,"line":846},[744,1014,1015],{"class":770},"      work branch, verify the fix on the preview, commit in logical batches, and\n",[744,1017,1018],{"class":746,"line":852},[744,1019,1020],{"class":770},"      open a pull request.\n",[744,1022,1023],{"class":746,"line":858},[744,1024,874],{"emptyLinePlaceholder":873},[744,1026,1027],{"class":746,"line":864},[744,1028,1029],{"class":770},"      Comment a short summary of the change on the work item and move it to \"In\n",[744,1031,1032],{"class":746,"line":870},[744,1033,1034],{"class":770},"      Review\".\n",[744,1036,1037,1039,1041],{"class":746,"line":877},[744,1038,810],{"class":750},[744,1040,755],{"class":754},[744,1042,1043],{"class":770}," bug_fix\n",[744,1045,1046,1048,1050],{"class":746,"line":883},[744,1047,902],{"class":750},[744,1049,755],{"class":754},[744,1051,1052],{"class":770}," Bug Fix\n",[335,1054,1056],{"id":1055},"add-enhancement","Add Enhancement",[259,1058,1059,1069],{},[262,1060,1061],{},[265,1062,1063,1065,1067],{},[268,1064,714],{},[268,1066,717],{},[268,1068,720],{},[275,1070,1071],{},[265,1072,1073,1075,1079],{},[280,1074,70],{},[280,1076,932,1077],{},[119,1078,935],{},[280,1080,938,1081],{},[119,1082,681],{},[733,1084,1086],{"filename":1085},"plane-add-enhancement.yaml",[637,1087,1089],{"className":738,"code":1088,"language":740,"meta":645,"style":645},"version: 1\nname: Plane Add Enhancement\ndescription: Plan a work item labeled as enhancement and post the plan.\nsteps:\n  - type: ai\n    prompt: >-\n      The work item of this session is an enhancement.\n\n      Work out how it would be built in this project: the files to touch, the\n      steps in order, and what is open.\n\n      Do not change any files or the state. Just post the plan as a comment,\n      written for the person who created the work item.\n    id: plan_enhancement\n    label: Plan Enhancement\n",[119,1090,1091,1099,1108,1117,1123,1133,1143,1148,1152,1157,1162,1166,1171,1176,1185],{"__ignoreMap":645},[744,1092,1093,1095,1097],{"class":746,"line":747},[744,1094,751],{"class":750},[744,1096,755],{"class":754},[744,1098,759],{"class":758},[744,1100,1101,1103,1105],{"class":746,"line":762},[744,1102,765],{"class":750},[744,1104,755],{"class":754},[744,1106,1107],{"class":770}," Plane Add Enhancement\n",[744,1109,1110,1112,1114],{"class":746,"line":774},[744,1111,777],{"class":750},[744,1113,755],{"class":754},[744,1115,1116],{"class":770}," Plan a work item labeled as enhancement and post the plan.\n",[744,1118,1119,1121],{"class":746,"line":785},[744,1120,107],{"class":750},[744,1122,790],{"class":754},[744,1124,1125,1127,1129,1131],{"class":746,"line":793},[744,1126,796],{"class":754},[744,1128,799],{"class":750},[744,1130,755],{"class":754},[744,1132,827],{"class":770},[744,1134,1135,1137,1139,1141],{"class":746,"line":807},[744,1136,833],{"class":750},[744,1138,755],{"class":754},[744,1140,839],{"class":838},[744,1142,843],{"class":842},[744,1144,1145],{"class":746,"line":818},[744,1146,1147],{"class":770},"      The work item of this session is an enhancement.\n",[744,1149,1150],{"class":746,"line":830},[744,1151,874],{"emptyLinePlaceholder":873},[744,1153,1154],{"class":746,"line":846},[744,1155,1156],{"class":770},"      Work out how it would be built in this project: the files to touch, the\n",[744,1158,1159],{"class":746,"line":852},[744,1160,1161],{"class":770},"      steps in order, and what is open.\n",[744,1163,1164],{"class":746,"line":858},[744,1165,874],{"emptyLinePlaceholder":873},[744,1167,1168],{"class":746,"line":864},[744,1169,1170],{"class":770},"      Do not change any files or the state. Just post the plan as a comment,\n",[744,1172,1173],{"class":746,"line":870},[744,1174,1175],{"class":770},"      written for the person who created the work item.\n",[744,1177,1178,1180,1182],{"class":746,"line":877},[744,1179,810],{"class":750},[744,1181,755],{"class":754},[744,1183,1184],{"class":770}," plan_enhancement\n",[744,1186,1187,1189,1191],{"class":746,"line":883},[744,1188,902],{"class":750},[744,1190,755],{"class":754},[744,1192,1193],{"class":770}," Plan Enhancement\n",[96,1195,1196],{},"When the team agrees with the plan, a comment that mentions the Knecht account, such as \"implement it and open a PR\", is enough. Knecht continues in the same session and answers with the pull request.",[691,1198,1199],{},[96,1200,1201],{},"A work item that a person labels and moves to \"Todo\" without the triage having seen it starts these workflows without a booted site. Add a boot step to them if that happens in your team.",[111,1203,1205],{"id":1204},"urgent-bugs-to-knecht","Urgent Bugs to Knecht",[96,1207,1208],{},"No triage: the team assigns a work item to the Knecht account like to any colleague, and Knecht implements it. The conditions keep it to urgent bugs, everything else assigned to Knecht stays untouched. This workflow stands on its own, so it boots the site itself.",[259,1210,1211,1221],{},[262,1212,1213],{},[265,1214,1215,1217,1219],{},[268,1216,714],{},[268,1218,717],{},[268,1220,720],{},[275,1222,1223],{},[265,1224,1225,1227,1229],{},[280,1226,70],{},[280,1228,370],{},[280,1230,938,1231,1233,1234],{},[119,1232,677],{}," and Priority is ",[119,1235,487],{},[733,1237,1239],{"filename":1238},"plane-assigned-work-item.yaml",[637,1240,1242],{"className":738,"code":1241,"language":740,"meta":645,"style":645},"version: 1\nname: Plane Assigned Work Item\ndescription: Implement a work item that was assigned to Knecht.\nsteps:\n  - type: ddev-start\n    id: boot_project\n    label: Boot the Site\n  - type: ai\n    prompt: The work item of this session was assigned to you. Read it with its\n      comments, implement it on a work branch, verify it on the preview, commit,\n      and open a pull request. Comment a short summary on the work item and move\n      it to \"In Review\".\n    id: implement\n    label: Implement\n",[119,1243,1244,1252,1261,1270,1276,1286,1294,1303,1313,1322,1327,1332,1337,1346],{"__ignoreMap":645},[744,1245,1246,1248,1250],{"class":746,"line":747},[744,1247,751],{"class":750},[744,1249,755],{"class":754},[744,1251,759],{"class":758},[744,1253,1254,1256,1258],{"class":746,"line":762},[744,1255,765],{"class":750},[744,1257,755],{"class":754},[744,1259,1260],{"class":770}," Plane Assigned Work Item\n",[744,1262,1263,1265,1267],{"class":746,"line":774},[744,1264,777],{"class":750},[744,1266,755],{"class":754},[744,1268,1269],{"class":770}," Implement a work item that was assigned to Knecht.\n",[744,1271,1272,1274],{"class":746,"line":785},[744,1273,107],{"class":750},[744,1275,790],{"class":754},[744,1277,1278,1280,1282,1284],{"class":746,"line":793},[744,1279,796],{"class":754},[744,1281,799],{"class":750},[744,1283,755],{"class":754},[744,1285,804],{"class":770},[744,1287,1288,1290,1292],{"class":746,"line":807},[744,1289,810],{"class":750},[744,1291,755],{"class":754},[744,1293,815],{"class":770},[744,1295,1296,1298,1300],{"class":746,"line":818},[744,1297,902],{"class":750},[744,1299,755],{"class":754},[744,1301,1302],{"class":770}," Boot the Site\n",[744,1304,1305,1307,1309,1311],{"class":746,"line":830},[744,1306,796],{"class":754},[744,1308,799],{"class":750},[744,1310,755],{"class":754},[744,1312,827],{"class":770},[744,1314,1315,1317,1319],{"class":746,"line":846},[744,1316,833],{"class":750},[744,1318,755],{"class":754},[744,1320,1321],{"class":770}," The work item of this session was assigned to you. Read it with its\n",[744,1323,1324],{"class":746,"line":852},[744,1325,1326],{"class":770},"      comments, implement it on a work branch, verify it on the preview, commit,\n",[744,1328,1329],{"class":746,"line":858},[744,1330,1331],{"class":770},"      and open a pull request. Comment a short summary on the work item and move\n",[744,1333,1334],{"class":746,"line":864},[744,1335,1336],{"class":770},"      it to \"In Review\".\n",[744,1338,1339,1341,1343],{"class":746,"line":870},[744,1340,810],{"class":750},[744,1342,755],{"class":754},[744,1344,1345],{"class":770}," implement\n",[744,1347,1348,1350,1352],{"class":746,"line":877},[744,1349,902],{"class":750},[744,1351,755],{"class":754},[744,1353,1354],{"class":770}," Implement\n",[111,1356,1358],{"id":1357},"estimate-work-items","Estimate Work Items",[96,1360,1361],{},"A work item that is moved to \"In Planning\" gets an estimate and lands in \"Todo\". The agent reads the work item, looks up the code it touches, and comments how big the work is and why. An estimate needs the code, not the running site, so there is no boot step. Pick the exact state of your project in the trigger, the names here are examples.",[259,1363,1364,1374],{},[262,1365,1366],{},[265,1367,1368,1370,1372],{},[268,1369,714],{},[268,1371,717],{},[268,1373,720],{},[275,1375,1376],{},[265,1377,1378,1380,1383],{},[280,1379,70],{},[280,1381,1382],{},"State reached: In Planning",[280,1384,731],{},[733,1386,1388],{"filename":1387},"plane-estimate-work-item.yaml",[637,1389,1391],{"className":738,"code":1390,"language":740,"meta":645,"style":645},"version: 1\nname: Plane Estimate Work Item\ndescription: Estimate a work item in planning and move it to Todo.\nsteps:\n  - type: ai\n    prompt: 'Estimate the work item of this session. Find the code it touches and\n      judge the effort. Do not change any files. Comment the estimate on the\n      work item: a size (S, M, L, or XL), the hours you expect, what drives the\n      effort, and what is unclear. Then move the work item to \"Todo\". If it is\n      too vague to estimate, comment your questions and leave it where it is.'\n    id: estimate\n    label: Estimate\n",[119,1392,1393,1401,1410,1419,1425,1435,1447,1452,1457,1462,1470,1479],{"__ignoreMap":645},[744,1394,1395,1397,1399],{"class":746,"line":747},[744,1396,751],{"class":750},[744,1398,755],{"class":754},[744,1400,759],{"class":758},[744,1402,1403,1405,1407],{"class":746,"line":762},[744,1404,765],{"class":750},[744,1406,755],{"class":754},[744,1408,1409],{"class":770}," Plane Estimate Work Item\n",[744,1411,1412,1414,1416],{"class":746,"line":774},[744,1413,777],{"class":750},[744,1415,755],{"class":754},[744,1417,1418],{"class":770}," Estimate a work item in planning and move it to Todo.\n",[744,1420,1421,1423],{"class":746,"line":785},[744,1422,107],{"class":750},[744,1424,790],{"class":754},[744,1426,1427,1429,1431,1433],{"class":746,"line":793},[744,1428,796],{"class":754},[744,1430,799],{"class":750},[744,1432,755],{"class":754},[744,1434,827],{"class":770},[744,1436,1437,1439,1441,1444],{"class":746,"line":807},[744,1438,833],{"class":750},[744,1440,755],{"class":754},[744,1442,1443],{"class":754}," '",[744,1445,1446],{"class":770},"Estimate the work item of this session. Find the code it touches and\n",[744,1448,1449],{"class":746,"line":818},[744,1450,1451],{"class":770},"      judge the effort. Do not change any files. Comment the estimate on the\n",[744,1453,1454],{"class":746,"line":830},[744,1455,1456],{"class":770},"      work item: a size (S, M, L, or XL), the hours you expect, what drives the\n",[744,1458,1459],{"class":746,"line":846},[744,1460,1461],{"class":770},"      effort, and what is unclear. Then move the work item to \"Todo\". If it is\n",[744,1463,1464,1467],{"class":746,"line":852},[744,1465,1466],{"class":770},"      too vague to estimate, comment your questions and leave it where it is.",[744,1468,1469],{"class":754},"'\n",[744,1471,1472,1474,1476],{"class":746,"line":858},[744,1473,810],{"class":750},[744,1475,755],{"class":754},[744,1477,1478],{"class":770}," estimate\n",[744,1480,1481,1483,1485],{"class":746,"line":864},[744,1482,902],{"class":750},[744,1484,755],{"class":754},[744,1486,1487],{"class":770}," Estimate\n",[1489,1490,1491],"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 pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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":645,"searchDepth":762,"depth":762,"links":1493},[1494,1501,1508],{"id":102,"depth":762,"text":27,"children":1495},[1496,1497,1498,1499,1500],{"id":113,"depth":774,"text":114},{"id":135,"depth":774,"text":136},{"id":189,"depth":774,"text":190},{"id":246,"depth":774,"text":247},{"id":253,"depth":774,"text":254},{"id":312,"depth":762,"text":313,"children":1502},[1503,1504,1505,1506,1507],{"id":316,"depth":774,"text":49},{"id":561,"depth":774,"text":562},{"id":573,"depth":774,"text":574},{"id":584,"depth":774,"text":585},{"id":631,"depth":774,"text":632},{"id":663,"depth":762,"text":664,"children":1509},[1510,1511,1512],{"id":670,"depth":774,"text":671},{"id":1204,"depth":774,"text":1205},{"id":1357,"depth":774,"text":1358},"Everything you need to know about the Plane integration. What it can do and how to set it up.","md",{},{"title":70,"description":1513},"j_loFqE91WhYb6EPNqn55Vbez4Jye8xXIad8-FkVL98",[1519,1521],{"title":66,"path":67,"stem":68,"description":1520,"children":-1},"Everything you need to know about the Jira integration. What it can do and how to set it up.",{"title":74,"path":75,"stem":76,"description":1522,"children":-1},"Everything you need to know about the Linear integration. What it can do and how to set it up.",1790265016518]