Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.
A concurrency limit caps how many flows in a run execute at the same time. Set it to protect an environment that slows down or fails under load. See Prepare environments for QA Wolf for sizing guidance.
Environment — in Settings > Environments, open an environment and set Run concurrency. Leave it empty for no limit. Every run in the environment uses this limit unless its trigger sets one.
Trigger — in the trigger editor, set Concurrency limit. Leave it empty to use the environment’s limit. Through the API, this is the runConcurrencyLimit field.
A trigger’s limit replaces the environment’s limit rather than capping below it, so a trigger can raise the limit as well as lower it.
An expression lets a run slow down when flows start failing, and speed back up when they pass. QA Wolf evaluates it again each time it starts more flows, using the run’s results so far.
attemptFailureRate — the share of completed attempts in the run that failed, from 0 to 1.
firstAttemptsFailureRate — the share of completed first attempts that failed.
secondAttemptsFailureRate — the share of completed second attempts that failed.
thirdAttemptsFailureRate — the share of completed third attempts that failed.
secondAttemptsStarted — whether any flow has started a second attempt.
thirdAttemptsStarted — whether any flow has started a third attempt.
failedAttemptsCount — the number of failed attempts in the run.
passedAttemptsCount — the number of passed attempts in the run.
A failure rate counts only attempts that passed or failed. It is 0 until at least one attempt completes. In arithmetic, true counts as 1 and false as 0.
Expressions accept only numbers, the variables above and these operators. QA Wolf rejects anything else when you save, including strings, Math.min and other functions.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"QA Wolf Docs","colors":{"primary":"#3b3cef","light":"#08edcb","dark":"#3b3cef"},"logo":{"light":"https://mintcdn.com/qawolf/8HFRRs7AoYV9S40R/logo/light.svg?fit=max\u0026auto=format\u0026n=8HFRRs7AoYV9S40R\u0026q=85\u0026s=b9d699b988c7eab072287836c4d9e0d2","dark":"https://mintcdn.com/qawolf/8HFRRs7AoYV9S40R/logo/dark.svg?fit=max\u0026auto=format\u0026n=8HFRRs7AoYV9S40R\u0026q=85\u0026s=cd2ad525ee7dd964ff4836f7df8d2b54","href":"https://www.qawolf.com"},"favicon":{"light":"https://mintcdn.com/qawolf/R2NspCz4NaCGUkW7/favicon.png?fit=max\u0026auto=format\u0026n=R2NspCz4NaCGUkW7\u0026q=85\u0026s=d25b1eaf526daf1590d54c42755028a3","dark":"https://mintcdn.com/qawolf/R2NspCz4NaCGUkW7/favicon.png?fit=max\u0026auto=format\u0026n=R2NspCz4NaCGUkW7\u0026q=85\u0026s=d25b1eaf526daf1590d54c42755028a3"},"appearance":{"default":"dark"},"background":{"decoration":"gradient","color":{"dark":"#0b0b2f"}},"navbar":{"links":[{"href":"mailto:hello@qawolf.com","label":"Support"},{"href":"https://app.qawolf.com/sign-in","label":"Sign in"}],"primary":{"type":"button","label":"Try for free","href":"https://qawolf.com"}},"footer":{"socials":{"x":"https://twitter.com/qawolfhq","github":"https://github.com/qawolf/qawolf","linkedin":"https://www.linkedin.com/company/qa-wolf"}},"seo":{"metatags":{"canonical":"https://docs.qawolf.com"}},"icons":{"library":"lucide"},"integrations":{"posthog":{"apiKey":"phc_qEW3U4XMuhdJa6Rf2QZvbyKcixM5mYyq5BYNopuSxBFw","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qawolf","hasAudioNarration":false,"actualSubdomain":"qawolf","customDomains":["docs.qawolf.com"],"gitSource":{"type":"github","owner":"qawolf","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aebaee9e9c041fcb71b9be7","collectionId":"22b4f47f-9b38-4f65-8205-ce605776b627","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aebaee9e9c041fcb71b9be7"},"feedback":{"thumbs":true,"edits":false,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aebaee9e9c041fcb71b9be7","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"References","count":42},{"language":"default","tag":"Solutions","count":37},{"language":"default","tag":"Integrations","count":32},{"language":"default","tag":"Features","count":13},{"language":"default","tag":"CI/CD","count":10},{"language":"default","tag":"@qawolf/flows","count":10},{"language":"default","tag":"Legacy triggers","count":9},{"language":"default","tag":"Audio","count":7},{"language":"default","tag":"Deployment testing","count":7},{"language":"default","tag":"Run Orchestration","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"hello@qawolf.com"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"concurrency-limits","slug":"/concurrency-limits","pageMetadata":{"title":"Concurrency limits","description":"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.","keywords":"concurrency, concurrency limit, run concurrency, dynamic concurrency, concurrency expression, throttle, parallelism, runConcurrencyLimit","href":"/concurrency-limits"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A concurrency limit caps how many flows in a run execute at the same time. Set it to protect an environment that slows down or fails under load. See `,_jsx(_components.a,{href:`/prepare-environments-for-qa-wolf`,children:`Prepare environments for QA Wolf`}),` for sizing guidance.`]}),`\n`,_jsx(Heading,{level:`2`,id:`where-to-set-a-limit`,children:`Where to set a limit`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Environment`}),` — in `,_jsx(_components.strong,{children:`Settings > Environments`}),`, open an environment and set `,_jsx(_components.strong,{children:`Run concurrency`}),`. Leave it empty for no limit. Every run in the environment uses this limit unless its trigger sets one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Trigger`}),` — in the trigger editor, set `,_jsx(_components.strong,{children:`Concurrency limit`}),`. Leave it empty to use the environment’s limit. Through the API, this is the `,_jsx(_components.a,{href:`/triggers/reference`,children:_jsx(_components.code,{children:`runConcurrencyLimit`})}),` field.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`A trigger’s limit replaces the environment’s limit rather than capping below it, so a trigger can raise the limit as well as lower it.`}),`\n`,_jsx(Heading,{level:`2`,id:`value-formats`,children:`Value formats`}),`\n`,_jsx(_components.p,{children:`A limit takes one of three forms:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A whole number`}),` — from 1 to 1000, such as `,_jsx(_components.code,{children:`40`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No limit`}),` — an empty field, or `,_jsx(_components.code,{children:`unlimited`}),` through the API. QA Wolf still caps a run at 1000 flows at once.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`An expression`}),` — a formula QA Wolf evaluates while the run executes, such as `,_jsx(_components.code,{children:`firstAttemptsFailureRate > 0.1 ? 5 : 20`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`expressions`,children:`Expressions`}),`\n`,_jsx(_components.p,{children:`An expression lets a run slow down when flows start failing, and speed back up when they pass. QA Wolf evaluates it again each time it starts more flows, using the run’s results so far.`}),`\n`,_jsx(Heading,{level:`3`,id:`variables`,children:`Variables`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`attemptFailureRate`})}),` — the share of completed attempts in the run that failed, from 0 to 1.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`firstAttemptsFailureRate`})}),` — the share of completed first attempts that failed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`secondAttemptsFailureRate`})}),` — the share of completed second attempts that failed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`thirdAttemptsFailureRate`})}),` — the share of completed third attempts that failed.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`secondAttemptsStarted`})}),` — whether any flow has started a second attempt.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`thirdAttemptsStarted`})}),` — whether any flow has started a third attempt.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`failedAttemptsCount`})}),` — the number of failed attempts in the run.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`passedAttemptsCount`})}),` — the number of passed attempts in the run.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`A failure rate counts only attempts that passed or failed. It is 0 until at least one attempt completes. In arithmetic, `,_jsx(_components.code,{children:`true`}),` counts as 1 and `,_jsx(_components.code,{children:`false`}),` as 0.`]}),`\n`,_jsx(Heading,{level:`3`,id:`operators-and-functions`,children:`Operators and functions`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Arithmetic`}),` — `,_jsx(_components.code,{children:`+`}),`, `,_jsx(_components.code,{children:`-`}),`, `,_jsx(_components.code,{children:`*`}),`, `,_jsx(_components.code,{children:`/`}),`, `,_jsx(_components.code,{children:`%`}),`, `,_jsx(_components.code,{children:`**`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Comparison`}),` — `,_jsx(_components.code,{children:`\u003c`}),`, `,_jsx(_components.code,{children:`\u003c=`}),`, `,_jsx(_components.code,{children:`>`}),`, `,_jsx(_components.code,{children:`>=`}),`, `,_jsx(_components.code,{children:`==`}),`, `,_jsx(_components.code,{children:`!=`}),`, `,_jsx(_components.code,{children:`===`}),`, `,_jsx(_components.code,{children:`!==`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Logic`}),` — `,_jsx(_components.code,{children:`\u0026\u0026`}),`, `,_jsx(_components.code,{children:`||`}),`, `,_jsx(_components.code,{children:`!`}),`, `,_jsx(_components.code,{children:`??`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Conditional`}),` — `,_jsx(_components.code,{children:`condition ? whenTrue : whenFalse`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Functions`}),` — `,_jsx(_components.code,{children:`min(...)`}),` and `,_jsx(_components.code,{children:`max(...)`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Expressions accept only numbers, the variables above and these operators. QA Wolf rejects anything else when you save, including strings, `,_jsx(_components.code,{children:`Math.min`}),` and other functions.`]}),`\n`,_jsx(Heading,{level:`3`,id:`examples`,children:`Examples`}),`\n`,_jsx(_components.p,{children:`Drop to 5 flows at once when more than 10% of first attempts fail:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`firstAttemptsFailureRate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.1`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Step down in two stages as the overall failure rate rises:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`attemptFailureRate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.75`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` attemptFailureRate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Start at 50, drop to 20 once any flow starts a second attempt, and drop to 10 once any flow starts a third:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`thirdAttemptsStarted`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 10`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` secondAttemptsStarted`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` :`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 50`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Start at 20 and lose one slot per failed attempt, never going below 5:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`max`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`20`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` failedAttemptsCount`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Wrap an expression that can shrink in `,_jsx(_components.code,{children:`max(1, ...)`}),` so the run always keeps at least one flow running.`]})}),`\n`,_jsx(_components.p,{children:`If you need a variable that is not listed here, contact your Customer Success Manager.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Concurrency limits","description":"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.","keywords":"concurrency, concurrency limit, run concurrency, dynamic concurrency, concurrency expression, throttle, parallelism, runConcurrencyLimit","href":"/concurrency-limits"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Where to set a limit","slug":"where-to-set-a-limit","depth":2,"children":[]},{"title":"Value formats","slug":"value-formats","depth":2,"children":[]},{"title":"Expressions","slug":"expressions","depth":2,"children":[{"title":"Variables","slug":"variables","depth":3,"children":[]},{"title":"Operators and functions","slug":"operators-and-functions","depth":3,"children":[]},{"title":"Examples","slug":"examples","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/qawolf/31405aa6fa182398/qawolf-attribution-handler.js","/_mintlify/custom/qawolf/ded78afb53673389/qawolf-signup-handler.js","/_mintlify/custom/qawolf/e00fee94bfdab7ef/posthog_utils.js"],"subdomain":"qawolf","siteName":"QA Wolf Docs","title":"Concurrency limits - QA Wolf Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-16T15:26:52.354Z","gitLastModified":"2026-10-16T15:26:40.000Z","originalFileLocation":"concurrency-limits.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.\">\u003cmeta data-mint-head name=\"application-name\" content=\"QA Wolf Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Concurrency limits - QA Wolf Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"QA Wolf Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.qawolf.com/concurrency-limits\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qawolf.mintlify.app/_mintlify/api/og/v2?division=Run+Orchestration\u0026amp;title=Concurrency+limits\u0026amp;description=Cap+how+many+flows+in+a+run+execute+at+once%2C+with+a+fixed+number+or+an+expression+that+reacts+to+failures.\u0026amp;theme=319affbc930523d4b89abf45\u0026amp;signature=5f566ad802f16d04322b627e063370cd32349f16ca6ae46932d6e5c2f3e69afd\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Concurrency limits - QA Wolf Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qawolf.mintlify.app/_mintlify/api/og/v2?division=Run+Orchestration\u0026amp;title=Concurrency+limits\u0026amp;description=Cap+how+many+flows+in+a+run+execute+at+once%2C+with+a+fixed+number+or+an+expression+that+reacts+to+failures.\u0026amp;theme=319affbc930523d4b89abf45\u0026amp;signature=5f566ad802f16d04322b627e063370cd32349f16ca6ae46932d6e5c2f3e69afd\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/qawolf/YyZP4y1fCTI_w0fv/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"QA Wolf Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3b3cef\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.qawolf.com/concurrency-limits\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/concurrency-limits.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.qawolf.com/#organization\",\"name\":\"QA Wolf Docs\",\"url\":\"https://docs.qawolf.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qawolf/8HFRRs7AoYV9S40R/logo/light.svg?fit=max\u0026auto=format\u0026n=8HFRRs7AoYV9S40R\u0026q=85\u0026s=b9d699b988c7eab072287836c4d9e0d2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.qawolf.com#website\",\"name\":\"QA Wolf Docs\",\"url\":\"https://docs.qawolf.com\",\"publisher\":{\"@id\":\"https://docs.qawolf.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.qawolf.com/concurrency-limits#webpage\",\"url\":\"https://docs.qawolf.com/concurrency-limits\",\"name\":\"Concurrency limits\",\"description\":\"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.\",\"dateModified\":\"2026-10-16T15:26:40.000Z\",\"isPartOf\":{\"@id\":\"https://docs.qawolf.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.qawolf.com/concurrency-limits#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.qawolf.com/concurrency-limits#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Run Orchestration\",\"item\":\"https://docs.qawolf.com/triggers/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Concurrency limits\",\"item\":\"https://docs.qawolf.com/concurrency-limits\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.qawolf.com/concurrency-limits#article\",\"headline\":\"Concurrency limits\",\"name\":\"Concurrency limits\",\"description\":\"Cap how many flows in a run execute at once, with a fixed number or an expression that reacts to failures.\",\"url\":\"https://docs.qawolf.com/concurrency-limits\",\"mainEntityOfPage\":{\"@id\":\"https://docs.qawolf.com/concurrency-limits#webpage\"},\"dateModified\":\"2026-10-16T15:26:40.000Z\",\"publisher\":{\"@id\":\"https://docs.qawolf.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.qawolf.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"QA Wolf Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"QA Wolf Docs","nav":{"global":null,"tabs":[{"tab":"Start","pages":[{"title":"Start","href":""}]},{"tab":"Features","groups":[{"group":"Agentic QA","pages":[{"title":"Coverage Mapping","href":"/product-mapping"},{"title":"Test Automation","href":"/test-automation"},{"title":"Custom skills","sidebarTitle":"Custom skills","href":"/custom-skills"},{"title":"Clone your workspace with Git","sidebarTitle":"Git access","href":"/clone-with-git"},{"title":"QA Wolf MCP","href":"/qawolf-mcp"},{"title":"Connect your tools with MCP","sidebarTitle":"Connect your tools","href":"/mcp-connections"}]},{"group":"Run Orchestration","pages":[{"title":"Triggers","sidebarTitle":"Triggers","href":"/triggers/overview"},{"title":"Smart Smoke Suites","href":"/smart-smoke-suites"},{"title":"Run Rules","description":"Order and co-schedule the flows in a run with a rules.yaml file in your flows repository.","href":"/Run-Rules"},{"title":"Concurrency limits","href":"/concurrency-limits"},{"title":"Tags","description":"Group flows under a name so a trigger can run them together and a Run Rule can order or co-schedule them.","href":"/tags"},{"title":"Run events webhooks","sidebarTitle":"Run events webhooks","href":"/run-events-webhooks"}]},{"group":"Authentication","pages":[{"title":"Configure Single Sign-On (SSO)","sidebarTitle":"SSO","href":"/sso"}]}]},{"tab":"Solutions","pages":[{"title":"Solutions","href":"/solutions"}]},{"tab":"References","pages":[{"title":"References","href":"/anatomy-of-a-flow"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"Full Service","pages":[{"title":"Full Service","href":"/onboarding-to-full-service"}]}]},"basePath":"","title":"Concurrency limits - QA Wolf Docs","buildId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","deploymentId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","dynamics":[],"chunks":[]}