[{"data":1,"prerenderedAt":37},["ShallowReactive",2],{"doc:en:settings-board":3},{"title":4,"lede":5,"html":6,"headings":7},"Settings: Kanban","The “Kanban” tab of the settings decides, project by project, what happens to an approved ticket, the tests run before approval, the autopilot, and the agents that take the tickets.","\u003Ch2 id=\"open-the-tab\">Open the tab\u003C\u002Fh2>\n\u003Cp>Open the settings with \u003Ccode class=\"key\">Ctrl+,\u003C\u002Fcode> (\u003Ccode class=\"key\">⌘,\u003C\u002Fcode> on macOS), then choose “Kanban”. From the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fboard\u002F\">Kanban\u003C\u002Fa>, the ⚙ “After approval: …” button in the header opens this tab directly, on the project shown.\u003C\u002Fp>\n\u003Cp>The “Project” bar at the top of the window lists your projects: what you change applies only to the selected one. Only “Pause above quota” is shared by all projects. Your changes stay in a draft until you click “Save”; “Cancel” drops them, and a dot to the right of the tab’s name marks what isn’t saved yet. With no project open, the tab shows “No project open.”.\u003C\u002Fp>\n\u003Ch2 id=\"when-i-approve-a-ticket-in-to-review\">When I approve a ticket in “To review”\u003C\u002Fh2>\n\u003Cp>This first group says what approving a ticket in “To review” does (see \u003Ca href=\"\u002Fen\u002Fdocs\u002Fboard\u002F\">the Kanban\u003C\u002Fa>). The approve button takes the name of the choice, and the Kanban header sums it up, for example “merge squash → main”.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Choice\u003C\u002Fth>\n\u003Cth>What approving does\u003C\u002Fth>\n\u003Cth>Button\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>“Merge into a branch” (default)\u003C\u002Ftd>\n\u003Ctd>Merges the agent’s worktree into the target branch, then frees the agent.\u003C\u002Ftd>\n\u003Ctd>“Approve and merge”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Open a pull request”\u003C\u002Ftd>\n\u003Ctd>Pushes \u003Ccode class=\"key\">ticket\u002F&lt;key&gt;\u003C\u002Fcode> and opens a PR to the target branch for review.\u003C\u002Ftd>\n\u003Ctd>“Approve + PR”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Push the ticket’s branch”\u003C\u002Ftd>\n\u003Ctd>Commits and pushes to \u003Ccode class=\"key\">ticket\u002F&lt;key&gt;\u003C\u002Fcode>, with no merge or PR.\u003C\u002Ftd>\n\u003Ctd>“Approve and push”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Leave as is”\u003C\u002Ftd>\n\u003Ctd>The changes stay uncommitted in the worktree.\u003C\u002Ftd>\n\u003Ctd>“Approve”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>\u003Ccode class=\"key\">ticket\u002F\u003C\u002Fcode> is the project’s “Tickets’ branch prefix”, set in the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-projects\u002F\">“Projects”\u003C\u002Fa> tab (\u003Ccode class=\"key\">ticket\u002F\u003C\u002Fcode> by default); \u003Ccode class=\"key\">&lt;key&gt;\u003C\u002Fcode> is the ticket’s key, for example \u003Ccode class=\"key\">ATL-42\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>With the first three choices, Escouade first commits what the agent left in the worktree, then does the action. The ticket then moves to “Done” and its agent is archived. If the branch brings no change, the ticket is finished with nothing merged or pushed. With “Leave as is”, the ticket also moves to “Done”, but the agent and its worktree stay as they are.\u003C\u002Fp>\n\u003Ch3 id=\"target-branch\">Target branch\u003C\u002Fh3>\n\u003Cp>Shown with “Merge into a branch” and “Open a pull request”. The project’s local branches are offered. It’s the branch tickets are merged into, and also the base of each ticket’s branch and of its PR. By default it’s the branch checked out in the project’s folder when the first ticket starts; Escouade keeps it from then on. If the branch doesn’t exist, approval stops with an error.\u003C\u002Fp>\n\u003Cp>The merge happens in the project’s folder when the target branch is checked out there (it’s refused if tracked files have uncommitted changes), otherwise in a temporary worktree. It’s refused if the target branch is checked out in an agent’s worktree. See \u003Ca href=\"\u002Fen\u002Fdocs\u002Fworktrees\u002F\">worktrees\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"strategy\">Strategy\u003C\u002Fh3>\n\u003Cp>Shown with “Merge into a branch” only. Default: “Squash”.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Strategy\u003C\u002Fth>\n\u003Cth>What happens to the target branch\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>“Merge commit”\u003C\u002Ftd>\n\u003Ctd>A merge commit, with git’s message; the ticket’s commits stay in the history.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Squash”\u003C\u002Ftd>\n\u003Ctd>A single commit, with the generated message (see “Generated commit message” below).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Rebase”\u003C\u002Ftd>\n\u003Ctd>The ticket’s branch is rebased onto the target branch, then the target branch fast-forwards.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>A conflict cancels the merge: see “On conflict” below.\u003C\u002Fp>\n\u003Ch3 id=\"draft-pr\">Draft PR\u003C\u002Fh3>\n\u003Cp>Shown with “Open a pull request” only. Off by default. When on, the PR opens as a draft.\u003C\u002Fp>\n\u003Cp>Escouade pushes the branch, then creates the PR with the GitHub CLI \u003Ccode class=\"key\">gh\u003C\u002Fcode> if it’s installed. Without \u003Ccode class=\"key\">gh\u003C\u002Fcode>, or if \u003Ccode class=\"key\">gh\u003C\u002Fcode> fails, it opens GitHub’s page for finishing the PR in your browser; this setting doesn’t apply then. If the repository isn’t on GitHub, the branch is only pushed.\u003C\u002Fp>\n\u003Ch2 id=\"before-and-after\">Before and after\u003C\u002Fh2>\n\u003Cp>This group sets what happens before the action chosen above, and after it.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Setting\u003C\u002Fth>\n\u003Cth>Effect\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>“Test command”\u003C\u002Ftd>\n\u003Ctd>The command run in the ticket’s worktree, for example \u003Ccode>npm test\u003C\u002Fcode>. It’s stopped after 20 minutes.\u003C\u002Ftd>\n\u003Ctd>Empty\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Re-run the tests first”\u003C\u002Ftd>\n\u003Ctd>Runs the test command before the action. If a test fails, the action is blocked and the ticket goes back to the agent with the end of the test output. The setting is grayed out while the test command is empty.\u003C\u002Ftd>\n\u003Ctd>Off\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Delete the worktree once approved”\u003C\u002Ftd>\n\u003Ctd>Frees disk space: the worktree is deleted after its teardown commands. After a merge, the ticket’s branch goes too; if pushed or proposed as a PR, it stays, as does any branch the ticket took up. No effect with “Leave as is”, where the worktree stays.\u003C\u002Ftd>\n\u003Ctd>On\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Generated commit message”\u003C\u002Ftd>\n\u003Ctd>On, Haiku writes the message in the Conventional Commits form; if its answer isn’t usable, the message is \u003Ccode>feat: &lt;title&gt; [&lt;key&gt;]\u003C\u002Fcode>. Off, the message is \u003Ccode>&lt;key&gt; &lt;title&gt;\u003C\u002Fcode>. An example appears under the setting, with your project’s key.\u003C\u002Ftd>\n\u003Ctd>On\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“On conflict”\u003C\u002Ftd>\n\u003Ctd>What a merge that hits a conflict does. See below.\u003C\u002Ftd>\n\u003Ctd>“Ask me”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>The commit message is used to commit what the agent left in the worktree, and as the squash’s message; a merge commit keeps git’s message. Its language follows “Language of texts written by Claude” (in the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-application\u002F\">“Application”\u003C\u002Fa> tab).\u003C\u002Fp>\n\u003Ch3 id=\"on-conflict\">On conflict\u003C\u002Fh3>\n\u003Cp>A conflict can only happen during a merge. In every case the merge is canceled first.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Choice\u003C\u002Fth>\n\u003Cth>What happens\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>“Ask me” (default)\u003C\u002Ftd>\n\u003Ctd>The ticket is blocked with the list of conflicting files, and its card offers “Let the agent resolve” and “Cancel”.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Let the agent resolve”\u003C\u002Ftd>\n\u003Ctd>Escouade hands over to the agent right away: the target branch is merged into the ticket’s branch (or, with the “Rebase” strategy, the agent is asked to rebase), and the ticket goes back to “In progress” at loop 1.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Cancel”\u003C\u002Ftd>\n\u003Ctd>The ticket is blocked with the list of conflicting files, with no button to resolve.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"autopilot\">Autopilot\u003C\u002Fh2>\n\u003Cp>See \u003Ca href=\"\u002Fen\u002Fdocs\u002Fautopilot\u002F\">the autopilot\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Setting\u003C\u002Fth>\n\u003Cth>Effect\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>“Assign tickets automatically”\u003C\u002Ftd>\n\u003Ctd>A free agent takes the next “To do” ticket. It’s the same switch as “Autopilot” in the Kanban header, which saves there right away. Off, a ticket only starts when you click “Start”.\u003C\u002Ftd>\n\u003Ctd>On\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Pause above quota”\u003C\u002Ftd>\n\u003Ctd>Choose 80%, 90%, 95%, or 100%. No ticket starts while the 5-hour window or the weekly window has reached this threshold. Shared by all projects (“for all projects”).\u003C\u002Ftd>\n\u003Ctd>100%\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>When the pause is in effect, a strip under the Kanban header says why nothing starts and offers “Resume now”, which lifts the pause until the end of the window concerned.\u003C\u002Fp>\n\u003Cp>With several Claude accounts, the pause holds only if every account the project can use is held back, and the same threshold is used to choose the account new agents start on. See \u003Ca href=\"\u002Fen\u002Fdocs\u002Faccounts\u002F\">accounts\u003C\u002Fa> and \u003Ca href=\"\u002Fen\u002Fdocs\u002Fusage\u002F\">quota tracking\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cdiv class=\"callout note\">\u003Cp class=\"callout-title\">Note\u003C\u002Fp>\u003Cp>The setting “Resume a ticket’s agent stopped by the usage limit on another account” isn’t in this tab. It’s in the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-claude-code\u002F\">“Claude Code”\u003C\u002Fa> tab, and only appears with several accounts. It’s off by default.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"agents\">Agents\u003C\u002Fh2>\n\u003Cp>The agents that take this project’s tickets. See \u003Ca href=\"\u002Fen\u002Fdocs\u002Fboard\u002F\">the Kanban\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Setting\u003C\u002Fth>\n\u003Cth>Effect\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>“In parallel”\u003C\u002Ftd>\n\u003Ctd>The number of tickets “In progress” at once: 1, 2, 3, 4, 5, or 6. Beyond that, “To do” tickets wait for a free slot.\u003C\u002Ftd>\n\u003Ctd>2\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Model”\u003C\u002Ftd>\n\u003Ctd>The model of the ticket agents: “Default (…)”, which follows the default model of the “Claude Code” tab, or Fable, Opus, Sonnet, Haiku.\u003C\u002Ftd>\n\u003Ctd>“Default”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Effort”\u003C\u002Ftd>\n\u003Ctd>“Default”, or Low, Medium, High, Very high, Max.\u003C\u002Ftd>\n\u003Ctd>“Default”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>“Mode”\u003C\u002Ftd>\n\u003Ctd>“Default”, or the permission mode: Auto, Ask, Plan, Accept edits, Bypass.\u003C\u002Ftd>\n\u003Ctd>“Default”\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>“Default” means the matching choice in the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-claude-code\u002F\">“Claude Code”\u003C\u002Fa> tab: “Default model”, “Default effort”, and “Default permission mode”. Until you change them, those are Sonnet, Medium, and Auto.\u003C\u002Fp>\n\u003Cp>Permission modes are explained in \u003Ca href=\"\u002Fen\u002Fdocs\u002Fmanaging-agents\u002F\">agents\u003C\u002Fa>. In short:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>“Auto”: a classifier approves safe actions and asks about the rest.\u003C\u002Fli>\n\u003Cli>“Ask”: Claude asks for your approval before each sensitive action.\u003C\u002Fli>\n\u003Cli>“Plan”: Claude analyzes and proposes a plan without changing anything.\u003C\u002Fli>\n\u003Cli>“Accept edits”: file edits are accepted without asking.\u003C\u002Fli>\n\u003Cli>“Bypass”: no permission requests, only for safe environments.\u003C\u002Fli>\n\u003C\u002Ful>\n",[8,12,15,19,22,25,28,31,34],{"id":9,"text":10,"depth":11},"open-the-tab","Open the tab",2,{"id":13,"text":14,"depth":11},"when-i-approve-a-ticket-in-to-review","When I approve a ticket in “To review”",{"id":16,"text":17,"depth":18},"target-branch","Target branch",3,{"id":20,"text":21,"depth":18},"strategy","Strategy",{"id":23,"text":24,"depth":18},"draft-pr","Draft PR",{"id":26,"text":27,"depth":11},"before-and-after","Before and after",{"id":29,"text":30,"depth":18},"on-conflict","On conflict",{"id":32,"text":33,"depth":11},"autopilot","Autopilot",{"id":35,"text":36,"depth":11},"agents","Agents",1791926756605]