Run parallel work in waves — each wave’s concrete outputs become the contracts for the next.
The pattern for parallel work that must integrate cleanly. Run work in waves — each wave’s concrete outputs become the contracts for the next wave’s agents.How it works:
Wave 1 (sequential): Build the foundation — database schema, API contracts, shared types
Extract concrete artifacts from Wave 1 output (the actual interface, not assumptions about it)
Wave 2+ (parallel): Spawn agents that receive the upstream contracts injected into their prompts, plus their own file ownership boundaries
Each agent also gets downstream obligations — “your component must export these props”
Example prompt for a Wave 2 agent:
You own src/features/billing/.Upstream contract (from Wave 1):- DB schema: see migrations/004_billing.sql- API types: see src/types/billing.tsDownstream obligation:- Export BillingDashboard from src/features/billing/index.ts matching the props in src/types/billing.tsDo not edit files outside your directory.
Why this beats naive fan-out: Parallel agents that each assume the interface will look a certain way produce code that individually passes tests but fails integration. Contract injection eliminates assumption drift — agents build against verified artifacts, not guesses.Best for: multi-component features, full-stack implementations, any work where parallel agents must produce code that connects at boundaries.
Vertical slices parallelize; horizontal layers serialize. “Plan 01: User feature end-to-end” can run in parallel with “Plan 02: Product feature end-to-end.” But “Plan 01: All models → Plan 02: All APIs” forces sequential execution because Plan 02 depends entirely on Plan 01. Slice by feature, not by layer.
Interface-first ordering within each wave: Wave 1 defines contracts — schema, API types, shared interfaces. Extract the actual artifacts and inject them into Wave 2+ prompts. Each later-wave agent receives:
Upstream contracts — concrete file paths to read
File ownership — which directory it owns, nothing outside
Downstream obligations — what it must export for the next wave
Coordinator builds a task graph from parallel researcher outputs, respecting architectural dependencies. Wave 1 contracts feed Wave 2 assignments.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Agentic Engineering","colors":{"primary":"#5258FB","light":"#999AFD","dark":"#5258FB"},"logo":{"light":"https://mintcdn.com/proxifyab/N6NscdVBMIpMsn4J/logo/logo-proxify-dark.svg?fit=max\u0026auto=format\u0026n=N6NscdVBMIpMsn4J\u0026q=85\u0026s=fc616d0a8dfa55d2130f6385bc70aa24","dark":"https://mintcdn.com/proxifyab/N6NscdVBMIpMsn4J/logo/logo-proxify-white.svg?fit=max\u0026auto=format\u0026n=N6NscdVBMIpMsn4J\u0026q=85\u0026s=1111bafa0302bc95c661a72b7cde45b8"},"favicon":"https://mintcdn.com/proxifyab/vL0ghOSxfgtLnIhV/favicon.ico?fit=max\u0026auto=format\u0026n=vL0ghOSxfgtLnIhV\u0026q=85\u0026s=a679f9da38192c5224c2230f4073a1bc","styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"proxifyab","hasAudioNarration":false,"actualSubdomain":"proxifyab","customDomains":["agentic.proxify.io"],"gitSource":{"type":"github","owner":"proxify-dev","repo":"agentic-playbook","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6acc82cec9710b317916c0cb","collectionId":"2f6585ff-3bf8-4284-8d19-1f770e252b96","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6acc82cec9710b317916c0cb"},"entitlements":{},"buildId":"6acc82cec9710b317916c0cb","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"Playbook","count":19},{"language":"default","tag":"Quickstart","count":16},{"language":"default","tag":"Multi-Agent","count":9},{"language":"default","tag":"Explore","count":7},{"language":"default","tag":"Community Resources","count":7},{"language":"default","tag":"Mindset","count":6},{"language":"default","tag":"Orchestration Patterns","count":6},{"language":"default","tag":"Setup","count":6},{"language":"default","tag":"Daily Workflow","count":5},{"language":"default","tag":"Operations","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"table td img{display:inline!important;vertical-align:middle!important;margin:0!important}"}],"page":{"pagePath":"patterns/orchestration-patterns/contract-chains","slug":"/patterns/orchestration-patterns/contract-chains","pageMetadata":{"title":"Contract Chains / Wave Execution","description":"Run parallel work in waves — each wave's concrete outputs become the contracts for the next.","href":"/patterns/orchestration-patterns/contract-chains"},"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: \"Run parallel work in waves — each wave’s concrete outputs become the contracts for the next.\"\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`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The pattern for parallel work that `,_jsx(_components.strong,{children:`must integrate cleanly`}),`. Run work in waves — each wave’s concrete outputs become the contracts for the next wave’s agents.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`How it works:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Wave 1`}),` (sequential): Build the foundation — database schema, API contracts, shared types`]}),`\n`,_jsx(_components.li,{children:`Extract concrete artifacts from Wave 1 output (the actual interface, not assumptions about it)`}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Wave 2+`}),` (parallel): Spawn agents that receive the upstream contracts injected into their prompts, plus their own file ownership boundaries`]}),`\n`,_jsx(_components.li,{children:`Each agent also gets downstream obligations — “your component must export these props”`}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example prompt for a Wave 2 agent:`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`11`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`You own src/features/billing/.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Upstream contract (from Wave 1):`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- DB schema: see migrations/004_billing.sql`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- API types: see src/types/billing.ts`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Downstream obligation:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`- Export BillingDashboard from src/features/billing/index.ts matching the props in src/types/billing.ts`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Do not edit files outside your directory.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why this beats naive fan-out:`}),` Parallel agents that each `,_jsx(_components.em,{children:`assume`}),` the interface will look a certain way produce code that individually passes tests but fails integration. Contract injection eliminates assumption drift — agents build against verified artifacts, not guesses.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Best for:`}),` multi-component features, full-stack implementations, any work where parallel agents must produce code that connects at boundaries.`]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.strong,{children:`Vertical slices parallelize; horizontal layers serialize.`}),` “Plan 01: User feature end-to-end” can run in parallel with “Plan 02: Product feature end-to-end.” But “Plan 01: All models → Plan 02: All APIs” forces sequential execution because Plan 02 depends entirely on Plan 01. Slice by feature, not by layer.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Interface-first ordering within each wave:`}),` Wave 1 defines contracts — schema, API types, shared interfaces. Extract the `,_jsx(_components.em,{children:`actual`}),` artifacts and inject them into Wave 2+ prompts. Each later-wave agent receives:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Upstream contracts`}),` — concrete file paths to read`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`File ownership`}),` — which directory it owns, nothing outside`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Downstream obligations`}),` — what it must export for the next wave`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`examples-in-the-wild`,children:`Examples in the wild`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Example`}),_jsx(_components.th,{children:`What it shows`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`https://github.com/gsd-build/get-shit-done/blob/main/get-shit-done/workflows/execute-phase.md`,children:`gsd:execute-phase`})}),_jsxs(_components.td,{children:[`Plans grouped by `,_jsx(_components.code,{children:`depends_on`}),` into waves, parallel within each wave. File locking for concurrent `,_jsx(_components.code,{children:`STATE.md`}),` writes, `,_jsx(_components.code,{children:`--no-verify`}),` commit coordination.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`https://github.com/FlorianBruniaux/claude-code-ultimate-guide/blob/main/examples/agents/planning-coordinator.md`,children:`planning-coordinator`})}),_jsx(_components.td,{children:`Coordinator builds a task graph from parallel researcher outputs, respecting architectural dependencies. Wave 1 contracts feed Wave 2 assignments.`})]})]})]})]})}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":"Contract Chains / Wave Execution","description":"Run parallel work in waves — each wave's concrete outputs become the contracts for the next.","href":"/patterns/orchestration-patterns/contract-chains"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Examples in the wild","slug":"examples-in-the-wild","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"proxifyab","siteName":"Agentic Engineering","title":"Contract Chains / Wave Execution - Agentic Engineering","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-03-25T16:44:46.166Z","originalFileLocation":"patterns/orchestration-patterns/contract-chains.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=\"system\"}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=\"Run parallel work in waves — each wave\u0026#x27;s concrete outputs become the contracts for the next.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Agentic Engineering\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/proxifyab/xIsBfzUL32rx9pjG/_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/proxifyab/xIsBfzUL32rx9pjG/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/proxifyab/xIsBfzUL32rx9pjG/_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/proxifyab/xIsBfzUL32rx9pjG/_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/proxifyab/xIsBfzUL32rx9pjG/_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/proxifyab/xIsBfzUL32rx9pjG/_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/proxifyab/xIsBfzUL32rx9pjG/_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/proxifyab/xIsBfzUL32rx9pjG/_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/proxifyab/xIsBfzUL32rx9pjG/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Contract Chains / Wave Execution - Agentic Engineering\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run parallel work in waves — each wave\u0026#x27;s concrete outputs become the contracts for the next.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Agentic Engineering\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://proxifyab.mintlify.app/_mintlify/api/og/v2?division=Orchestration+Patterns\u0026amp;title=Contract+Chains+%2F+Wave+Execution\u0026amp;description=Run+parallel+work+in+waves+%E2%80%94+each+wave%27s+concrete+outputs+become+the+contracts+for+the+next.\u0026amp;theme=e62f8dbc91a9768edc13aef8\u0026amp;signature=2ea7a9c2571855030afe079f91c4d60fe2b4e560b01213a44b5ea3e9d8dd2136\">\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=\"Contract Chains / Wave Execution - Agentic Engineering\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run parallel work in waves — each wave\u0026#x27;s concrete outputs become the contracts for the next.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://proxifyab.mintlify.app/_mintlify/api/og/v2?division=Orchestration+Patterns\u0026amp;title=Contract+Chains+%2F+Wave+Execution\u0026amp;description=Run+parallel+work+in+waves+%E2%80%94+each+wave%27s+concrete+outputs+become+the+contracts+for+the+next.\u0026amp;theme=e62f8dbc91a9768edc13aef8\u0026amp;signature=2ea7a9c2571855030afe079f91c4d60fe2b4e560b01213a44b5ea3e9d8dd2136\">\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/proxifyab/xIsBfzUL32rx9pjG/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Agentic Engineering\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5258FB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/patterns/orchestration-patterns/contract-chains.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://agentic.proxify.io/#organization\",\"name\":\"Agentic Engineering\",\"url\":\"https://agentic.proxify.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/proxifyab/N6NscdVBMIpMsn4J/logo/logo-proxify-dark.svg?fit=max\u0026auto=format\u0026n=N6NscdVBMIpMsn4J\u0026q=85\u0026s=fc616d0a8dfa55d2130f6385bc70aa24\"}},{\"@type\":\"WebSite\",\"@id\":\"https://agentic.proxify.io#website\",\"name\":\"Agentic Engineering\",\"url\":\"https://agentic.proxify.io\",\"publisher\":{\"@id\":\"https://agentic.proxify.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains#webpage\",\"url\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains\",\"name\":\"Contract Chains / Wave Execution\",\"description\":\"Run parallel work in waves — each wave's concrete outputs become the contracts for the next.\",\"dateModified\":\"2026-03-25T16:44:46.166Z\",\"isPartOf\":{\"@id\":\"https://agentic.proxify.io#website\"},\"breadcrumb\":{\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Multi-Agent\",\"item\":\"https://agentic.proxify.io/patterns/invocation-quality\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Orchestration Patterns\",\"item\":\"https://agentic.proxify.io/patterns/orchestration-patterns\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Contract Chains / Wave Execution\",\"item\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains#article\",\"headline\":\"Contract Chains / Wave Execution\",\"name\":\"Contract Chains / Wave Execution\",\"description\":\"Run parallel work in waves — each wave's concrete outputs become the contracts for the next.\",\"url\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains\",\"mainEntityOfPage\":{\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/contract-chains#webpage\"},\"dateModified\":\"2026-03-25T16:44:46.166Z\",\"publisher\":{\"@id\":\"https://agentic.proxify.io/#organization\"},\"isPartOf\":{\"@id\":\"https://agentic.proxify.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Agentic Engineering\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Agentic Engineering","nav":{"global":null,"tabs":[{"tab":"Quickstart","pages":[{"title":"Quickstart","href":""}]},{"tab":"Playbook","groups":[{"group":"Daily Workflow","pages":[{"title":"Workflow Patterns","href":"/patterns/workflow-patterns"},{"title":"Context Management","href":"/patterns/context-management"},{"title":"Session Management","href":"/patterns/session-management"},{"title":"Parallel Execution","href":"/patterns/parallel-execution"},{"title":"Prompting Craft","href":"/patterns/prompting-craft"}]},{"group":"Autonomous Work","pages":[{"title":"Autonomous Task Patterns","href":"/patterns/autonomous-tasks"},{"title":"The Self-Improving Loop","href":"/patterns/self-improving-loop"}]},{"group":"Multi-Agent","pages":[{"title":"Invocation Quality","href":"/patterns/invocation-quality"},{"title":"Subagent Patterns","href":"/patterns/subagent-patterns"},{"group":"Orchestration Patterns","pages":[{"title":"Orchestration Patterns","href":"/patterns/orchestration-patterns"},{"title":"Fan-Out / Fan-In","href":"/patterns/orchestration-patterns/fan-out-fan-in"},{"title":"Pipeline Chains","href":"/patterns/orchestration-patterns/pipeline-chains"},{"title":"Builder-Validator Pairs","href":"/patterns/orchestration-patterns/builder-validator"},{"title":"Supervisor / Team Lead","description":"The main session coordinates exclusively while teammates implement.","href":"/patterns/orchestration-patterns/supervisor"},{"title":"Contract Chains / Wave Execution","href":"/patterns/orchestration-patterns/contract-chains"}]},{"title":"Agent Teams","description":"When and how to use Agent Teams — the decision framework, delegate mode, and practical advice.","href":"/patterns/agent-teams"}]},{"group":"Operations","pages":[{"title":"Permutation Frameworks","href":"/patterns/permutation-frameworks"},{"title":"Permission Modes","href":"/patterns/permission-modes"},{"title":"Cost \u0026 Model Routing","href":"/patterns/cost-and-model-routing"}]}]},{"tab":"Dojo","pages":[{"title":"Dojo","href":"/dojo"}]},{"tab":"Explore","pages":[{"title":"Explore","href":"/explore"}]}]},"title":"Contract Chains / Wave Execution - Agentic Engineering","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}