A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.
A builder implements changes; a validator with read-only tools checks the work.How it works:
The builder agent has full tool access and implements changes
The validator agent has only read-only tools (Read, Grep, Glob, Bash) — it cannot write or edit code
When the validator flags issues, it creates a fix task for a new builder
The cycle repeats with a hard cap of 3 iterations — after that, escalate to a human
Why read-only matters: if the validator can edit code, it silently “fixes” things instead of surfacing problems. Restricting tools forces it to articulate issues clearly, which produces better fixes.Agent definition for a validator:
A lighter variant: embed validation directly in agent definitions using PostToolUse hooks. Every file the agent writes gets checked automatically.Three tiers:
Micro — PostToolUse hook runs a linter/formatter after every write
Team — Separate read-only validator (the standard pattern above)
Inline hooks catch syntax issues. They don’t replace a read-only validator for semantic correctness — a linter won’t catch a component that exists but is never imported.
Goal-backward plan verification before any code is written. Loops with the planner up to 3 times.
{"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/builder-validator","slug":"/patterns/orchestration-patterns/builder-validator","pageMetadata":{"title":"Builder-Validator Pairs","description":"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.","href":"/patterns/orchestration-patterns/builder-validator"},"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: \"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.\"\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`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A builder implements changes; a validator with `,_jsx(_components.strong,{children:`read-only tools`}),` checks the work.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`How it works:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`The builder agent has full tool access and implements changes`}),`\n`,_jsxs(_components.li,{children:[`The validator agent has only read-only tools (`,_jsx(_components.code,{children:`Read`}),`, `,_jsx(_components.code,{children:`Grep`}),`, `,_jsx(_components.code,{children:`Glob`}),`, `,_jsx(_components.code,{children:`Bash`}),`) — it `,_jsx(_components.strong,{children:`cannot`}),` write or edit code`]}),`\n`,_jsx(_components.li,{children:`When the validator flags issues, it creates a fix task for a new builder`}),`\n`,_jsx(_components.li,{children:`The cycle repeats with a hard cap of 3 iterations — after that, escalate to a human`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Why read-only matters:`}),` if the validator can edit code, it silently “fixes” things instead of surfacing problems. Restricting tools forces it to articulate issues clearly, which produces better fixes.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Agent definition for a validator:`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`yaml`,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:`yaml`,children:_jsxs(_components.code,{language:`yaml`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`---`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`validator`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`description`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Reviews implementation against acceptance criteria. Read-only.`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`model`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`sonnet`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`tools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Read\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Grep\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Glob\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Bash\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#569CD6`},children:`disallowedTools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Write\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Edit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`---`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Best for:`}),` any work where correctness matters more than speed — API changes, security-sensitive code, data migrations.`]}),`\n`,_jsx(Heading,{level:`2`,id:`iteration-loop`,children:`Iteration loop`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,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:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Builder → Validator → (issues?) → Builder (revision) → Validator → ... (max 3)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Scope thresholds per agent:`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tasks per agent`}),_jsx(_components.th,{children:`Status`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`2-3`}),_jsx(_components.td,{children:`Good`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`4`}),_jsx(_components.td,{children:`Warning`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:`5+`}),_jsx(_components.td,{children:`Split required`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`verification-depth`,children:`Verification depth`}),`\n`,_jsx(_components.p,{children:`Don’t stop at “file exists.” Most failures hide between Substantive and Wired — the file exists and looks real, but nothing calls it.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Level`}),_jsx(_components.th,{children:`Question`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Exists`}),_jsx(_components.td,{children:`Is the file at the expected path?`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Substantive`}),_jsx(_components.td,{children:`Real implementation, not a stub?`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Wired`}),_jsx(_components.td,{children:`Imported and called by the system?`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Functional`}),_jsx(_components.td,{children:`Actually works when invoked?`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`self-validating-agents`,children:`Self-Validating Agents`}),`\n`,_jsxs(_components.p,{children:[`A lighter variant: embed validation directly in agent definitions using `,_jsx(_components.a,{href:`https://docs.anthropic.com/en/docs/claude-code/hooks`,children:`PostToolUse hooks`}),`. Every file the agent writes gets checked automatically.`]}),`\n`,_jsx(_components.p,{children:`Three tiers:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Micro`}),` — PostToolUse hook runs a linter/formatter after every write`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Macro`}),` — Stop hook checks required files exist + tests pass before “done”`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Team`}),` — Separate read-only validator (the standard pattern above)`]}),`\n`]}),`\n`,_jsx(Warning,{children:`Inline hooks catch syntax issues. They don’t replace a read-only validator for semantic correctness — a linter won’t catch a component that exists but is never imported.`}),`\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/FlorianBruniaux/claude-code-ultimate-guide/blob/main/examples/agents/plan-challenger.md`,children:`plan-challenger`})}),_jsxs(_components.td,{children:[`Adversarial validator: attacks a plan on 5 dimensions, then `,_jsx(_components.em,{children:`refutes`}),` each challenge before flagging it. Output: blockers, concerns, nitpicks.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.a,{href:`https://github.com/gsd-build/get-shit-done/blob/main/agents/gsd-plan-checker.md`,children:`gsd-plan-checker`})}),_jsx(_components.td,{children:`Goal-backward plan verification before any code is written. Loops with the planner up to 3 times.`})]})]})]})]})}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":"Builder-Validator Pairs","description":"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.","href":"/patterns/orchestration-patterns/builder-validator"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Iteration loop","slug":"iteration-loop","depth":2,"children":[]},{"title":"Verification depth","slug":"verification-depth","depth":2,"children":[]},{"title":"Self-Validating Agents","slug":"self-validating-agents","depth":2,"children":[]},{"title":"Examples in the wild","slug":"examples-in-the-wild","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"proxifyab","siteName":"Agentic Engineering","title":"Builder-Validator Pairs - Agentic Engineering","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-03-25T16:44:46.161Z","originalFileLocation":"patterns/orchestration-patterns/builder-validator.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=\"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.\">\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=\"Builder-Validator Pairs - Agentic Engineering\">\u003cmeta data-mint-head property=\"og:description\" content=\"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.\">\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/builder-validator\">\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=Builder-Validator+Pairs\u0026amp;description=A+builder+implements%3B+a+read-only+validator+checks.+Restricting+tools+forces+issues+to+be+surfaced%2C+not+silently+fixed.\u0026amp;theme=e62f8dbc91a9768edc13aef8\u0026amp;signature=f3b50cfd9ee6b4afa16b0a39636f6bbb895ecc087ae2e15ad6d51b617df9e6d1\">\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=\"Builder-Validator Pairs - Agentic Engineering\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://proxifyab.mintlify.app/_mintlify/api/og/v2?division=Orchestration+Patterns\u0026amp;title=Builder-Validator+Pairs\u0026amp;description=A+builder+implements%3B+a+read-only+validator+checks.+Restricting+tools+forces+issues+to+be+surfaced%2C+not+silently+fixed.\u0026amp;theme=e62f8dbc91a9768edc13aef8\u0026amp;signature=f3b50cfd9ee6b4afa16b0a39636f6bbb895ecc087ae2e15ad6d51b617df9e6d1\">\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/builder-validator\">\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/builder-validator.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/builder-validator#webpage\",\"url\":\"https://agentic.proxify.io/patterns/orchestration-patterns/builder-validator\",\"name\":\"Builder-Validator Pairs\",\"description\":\"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.\",\"dateModified\":\"2026-03-25T16:44:46.161Z\",\"isPartOf\":{\"@id\":\"https://agentic.proxify.io#website\"},\"breadcrumb\":{\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/builder-validator#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/builder-validator#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\":\"Builder-Validator Pairs\",\"item\":\"https://agentic.proxify.io/patterns/orchestration-patterns/builder-validator\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/builder-validator#article\",\"headline\":\"Builder-Validator Pairs\",\"name\":\"Builder-Validator Pairs\",\"description\":\"A builder implements; a read-only validator checks. Restricting tools forces issues to be surfaced, not silently fixed.\",\"url\":\"https://agentic.proxify.io/patterns/orchestration-patterns/builder-validator\",\"mainEntityOfPage\":{\"@id\":\"https://agentic.proxify.io/patterns/orchestration-patterns/builder-validator#webpage\"},\"dateModified\":\"2026-03-25T16:44:46.161Z\",\"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","description":"Sequential stages where each phase's output feeds the next, with context reset between stages.","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","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":"Builder-Validator Pairs - Agentic Engineering","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}