Define, check, create, version, and execute private AI work IR with TemplateSpec.
A private template is reusable AI work IR that you create and maintain. Its source definition is a TemplateSpec JSON file, and each change becomes a new immutable version.Use a private template when an official template does not match your input fields, workflow steps, dependencies, model requirements, or outputs.
Describe the intended outcome in business terms, including what one workbook row represents, required inputs, workflow steps, visible intermediate results, final outputs, and failure behavior. Review that TemplatePlan before generating TemplateSpec.
describe the outcome → review the TemplatePlan → generate TemplateSpec→ check locally → confirm creation → create an immutable version
The command syntax is loomloom template-spec docs [topic] --lang en|zh-CN. In addition to the main spec, authoring, and examples entries, focused topics cover metadata, inputs, steps, bindings, and execution units. Omit the topic to print the index; use all to print every bundled topic. English is the default language. The installed modular Agent Skill contains the current conversational authoring protocol, while the conversation topic remains available as a compatibility entry.Validate the definition locally before creating anything remotely:
loomloom template-spec check ./template.spec.json
Creation changes remote state. Review the template name, purpose, and local check result, then explicitly confirm before creating it.
New templates, new versions, and new publication flows must not use bindMode=expanded. The authoring gate rejects it with TS-TOPOLOGY-001.
Put independently processed dynamic items on separate workbook rows.
For a fixed number of parallel branches, declare multiple steps.
Connect fixed steps with dependsOn and upstreamBindings.
Do not add invented parallel or branch properties.
Historical versions that already contain expanded remain readable, precheckable, and executable for compatibility. This does not make expanded valid for new authoring or for switching another historical version into the published position.
An input_asset_id references material inside one workflow input. It is not the input_file_id used to supply JSONL rows. Preserve each returned ID exactly and never guess a hidden step ID.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"CogFoundry Docs","colors":{"primary":"#111111"},"logo":{"light":"https://mintcdn.com/cogfoundry-8a54217b/LHTJQzou6DrszVLD/assets/logo-mark-on-light.svg?fit=max\u0026auto=format\u0026n=LHTJQzou6DrszVLD\u0026q=85\u0026s=f1c465afd64386705c8970aa5276a3fd","dark":"https://mintcdn.com/cogfoundry-8a54217b/LHTJQzou6DrszVLD/assets/logo-mark-on-dark.svg?fit=max\u0026auto=format\u0026n=LHTJQzou6DrszVLD\u0026q=85\u0026s=0faa17caa4ef842fc317a73828b00ee7","href":"https://cogfoundry.ai/"},"favicon":{"light":"https://mintcdn.com/cogfoundry-8a54217b/LHTJQzou6DrszVLD/assets/logo-mark-on-light.svg?fit=max\u0026auto=format\u0026n=LHTJQzou6DrszVLD\u0026q=85\u0026s=f1c465afd64386705c8970aa5276a3fd","dark":"https://mintcdn.com/cogfoundry-8a54217b/LHTJQzou6DrszVLD/assets/logo-mark-on-dark.svg?fit=max\u0026auto=format\u0026n=LHTJQzou6DrszVLD\u0026q=85\u0026s=0faa17caa4ef842fc317a73828b00ee7"},"appearance":{"default":"light","strict":true},"navbar":{"primary":{"type":"button","label":"CogFoundry","href":"https://console.cogfoundry.ai/"}},"footer":{"socials":{"github":"https://github.com/cogfoundry-labs"},"links":[{"header":"Source","items":[{"label":"loomloom","href":"https://github.com/cogfoundry-labs/loomloom"},{"label":"Documentation","href":"https://github.com/cogfoundry-labs/cogfoundry-docs"}]}]},"fonts":{"family":"Inter"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cogfoundry-8a54217b","hasAudioNarration":false,"actualSubdomain":"cogfoundry-8a54217b","customDomains":["docs.cogfoundry.ai"],"gitSource":{"type":"github","owner":"cogfoundry-labs","repo":"cogfoundry-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"c86648b7-a765-4818-ad74-d0d6b542eef8","liveDeploymentHistoryId":"6a7f5eea528b90f3bd4ad479","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a7f5eea528b90f3bd4ad479"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a7f5eea528b90f3bd4ad479:success","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Developer Reference","count":77},{"language":"default","tag":"loomloom API endpoints","count":53},{"language":"default","tag":"Documentation","count":26},{"language":"default","tag":"loomloom CLI","count":20},{"language":"default","tag":"User Templates","count":11},{"language":"default","tag":"Official Templates","count":9},{"language":"default","tag":"Operate loomloom","count":7},{"language":"default","tag":"Market Listings","count":6},{"language":"default","tag":"Market Runs","count":6},{"language":"default","tag":"Overview","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","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":"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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--cogfoundry-border:#e5e5e5;--cogfoundry-sidebar:#ffffff;--cogfoundry-text:#111111;--cogfoundry-muted:#525252;--cogfoundry-accent:#09e4a7}#navbar{border-bottom:1px solid var(--cogfoundry-border)}#navbar nav a[href=\"https://console.cogfoundry.ai/\"]{color:var(--cogfoundry-text)!important;background:var(--cogfoundry-accent)!important;border-radius:10px}#navbar nav a[href=\"https://console.cogfoundry.ai/\"] span,#navbar nav a[href=\"https://console.cogfoundry.ai/\"] svg{color:var(--cogfoundry-text)!important}#navbar nav a[href=\"https://console.cogfoundry.ai/\"]>span:first-child{background:var(--cogfoundry-accent)!important}#assistant-entry,#assistant-entry-mobile{display:none!important}nav-logo img{width:30px;height:30px;object-fit:contain}nav-tabs{gap:24px}nav-tabs-item{color:var(--cogfoundry-muted);font-weight:500}nav-tabs-item[data-active]{color:var(--cogfoundry-text);font-weight:600}#sidebar{background:var(--cogfoundry-sidebar);border-right:1px solid var(--cogfoundry-border)}#sidebar-content li[data-active]{font-weight:600}#content{max-width:880px}#page-title{letter-spacing:-.03em}mdx-content p{line-height:1.75}callout,card,code-block{border-radius:12px}"}],"page":{"pagePath":"documentation/loomloom/private-templates","slug":"/documentation/loomloom/private-templates","pageMetadata":{"title":"Create reusable AI work IR","description":"Define, check, create, version, and execute private AI work IR with TemplateSpec.","icon":"blocks","href":"/documentation/loomloom/private-templates"},"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: \"Define, check, create, version, and execute private AI work IR with TemplateSpec.\"\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={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`A private template is reusable AI work IR that you create and maintain. Its source definition is a TemplateSpec JSON file, and each change becomes a new immutable version.`}),`\n`,_jsx(_components.p,{children:`Use a private template when an official template does not match your input fields, workflow steps, dependencies, model requirements, or outputs.`}),`\n`,_jsx(Heading,{level:`2`,id:`plan-before-compiling`,children:`Plan before compiling`}),`\n`,_jsx(_components.p,{children:`Describe the intended outcome in business terms, including what one workbook row represents, required inputs, workflow steps, visible intermediate results, final outputs, and failure behavior. Review that TemplatePlan before generating TemplateSpec.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`describe the outcome → review the TemplatePlan → generate TemplateSpec`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`→ check locally → confirm creation → create an immutable version`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`author-safely`,children:`Author safely`}),`\n`,_jsx(_components.p,{children:`Start with the documentation bundled with your installed CLI:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` docs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` spec`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --lang`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` en`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` docs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` authoring`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --lang`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` en`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` docs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` examples`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --lang`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` en`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` docs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` spec`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --lang`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` zh-CN`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` models`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`text-generate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`image-generate`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`|`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`video-generate`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The command syntax is `,_jsx(_components.code,{children:`loomloom template-spec docs [topic] --lang en|zh-CN`}),`. In addition to the main `,_jsx(_components.code,{children:`spec`}),`, `,_jsx(_components.code,{children:`authoring`}),`, and `,_jsx(_components.code,{children:`examples`}),` entries, focused topics cover metadata, inputs, steps, bindings, and execution units. Omit the topic to print the index; use `,_jsx(_components.code,{children:`all`}),` to print every bundled topic. English is the default language. The installed modular Agent Skill contains the current conversational authoring protocol, while the `,_jsx(_components.code,{children:`conversation`}),` topic remains available as a compatibility entry.`]}),`\n`,_jsx(_components.p,{children:`Validate the definition locally before creating anything remotely:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` check`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./template.spec.json`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Creation changes remote state. Review the template name, purpose, and local check result, then explicitly confirm before creating it.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./template.spec.json`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --version-note`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"initial version\"`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`When the workflow changes, append a version instead of changing historical versions in place:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create-version`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`template-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./template.spec.json`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`topology-rule-for-new-authoring`,children:`Topology rule for new authoring`}),`\n`,_jsxs(_components.p,{children:[`New templates, new versions, and new publication flows must not use `,_jsx(_components.code,{children:`bindMode=expanded`}),`. The authoring gate rejects it with `,_jsx(_components.code,{children:`TS-TOPOLOGY-001`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Put independently processed dynamic items on separate workbook rows.`}),`\n`,_jsx(_components.li,{children:`For a fixed number of parallel branches, declare multiple steps.`}),`\n`,_jsxs(_components.li,{children:[`Connect fixed steps with `,_jsx(_components.code,{children:`dependsOn`}),` and `,_jsx(_components.code,{children:`upstreamBindings`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Do not add invented `,_jsx(_components.code,{children:`parallel`}),` or `,_jsx(_components.code,{children:`branch`}),` properties.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Historical versions that already contain `,_jsx(_components.code,{children:`expanded`}),` remain readable, precheckable, and executable for compatibility. This does not make `,_jsx(_components.code,{children:`expanded`}),` valid for new authoring or for switching another historical version into the published position.`]}),`\n`,_jsx(Heading,{level:`2`,id:`run-a-fixed-version-from-a-workbook`,children:`Run a fixed version from a workbook`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` download-workbook`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`template-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`version-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --output-file`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./input.xlsx`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` validate-workbook`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`template-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`version-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./input.xlsx`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` precheck-workbook`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`template-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`version-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./input.xlsx`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Review the estimate and explicitly confirm before continuing.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` submit-workbook`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`template-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`version-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./input.xlsx`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --client-request-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`stable-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`TemplateSpec JSON is the source of truth; a downloaded workbook is derived from one template version. Download a new workbook after changing versions.`}),`\n`,_jsx(Heading,{level:`2`,id:`programmatic-row-input`,children:`Programmatic row input`}),`\n`,_jsx(_components.p,{children:`For an explicit JSONL integration, upload row data separately, precheck the fixed version, and run only after confirmation:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`shellscript`,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:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` orchestration-input`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` upload`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ./rows.jsonl`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` precheck`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`template-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --version-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`version-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --input-file-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`input-file-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`loomloom`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` template-spec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` run`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`template-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --version-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`version-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --input-file-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`input-file-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --client-request-id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`stable-i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`d`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`An `,_jsx(_components.code,{children:`input_asset_id`}),` references material inside one workflow input. It is not the `,_jsx(_components.code,{children:`input_file_id`}),` used to supply JSONL rows. Preserve each returned ID exactly and never guess a hidden step ID.`]})})]})}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":"Create reusable AI work IR","description":"Define, check, create, version, and execute private AI work IR with TemplateSpec.","icon":"blocks","href":"/documentation/loomloom/private-templates"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Plan before compiling","slug":"plan-before-compiling","depth":2,"children":[]},{"title":"Author safely","slug":"author-safely","depth":2,"children":[]},{"title":"Topology rule for new authoring","slug":"topology-rule-for-new-authoring","depth":2,"children":[]},{"title":"Run a fixed version from a workbook","slug":"run-a-fixed-version-from-a-workbook","depth":2,"children":[]},{"title":"Programmatic row input","slug":"programmatic-row-input","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cogfoundry-8a54217b","siteName":"CogFoundry Docs","title":"Create reusable AI work IR - CogFoundry Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-11T10:13:09.417Z","originalFileLocation":"documentation/loomloom/private-templates.md"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";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=\"light\"}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=\"Define, check, create, version, and execute private AI work IR with TemplateSpec.\">\u003cmeta data-mint-head name=\"application-name\" content=\"CogFoundry 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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create reusable AI work IR - CogFoundry Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Define, check, create, version, and execute private AI work IR with TemplateSpec.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"CogFoundry Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cogfoundry-8a54217b.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Create+reusable+AI+work+IR\u0026amp;description=Define%2C+check%2C+create%2C+version%2C+and+execute+private+AI+work+IR+with+TemplateSpec.\u0026amp;theme=568bd395c831c0c6a9a3aae3\u0026amp;signature=5b41b71b0ca4c58a16be828507d5c9c613adff28e129b637e768c7eb38783fdb\">\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=\"Create reusable AI work IR - CogFoundry Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Define, check, create, version, and execute private AI work IR with TemplateSpec.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cogfoundry-8a54217b.mintlify.app/_mintlify/api/og/v2?division=Guides\u0026amp;title=Create+reusable+AI+work+IR\u0026amp;description=Define%2C+check%2C+create%2C+version%2C+and+execute+private+AI+work+IR+with+TemplateSpec.\u0026amp;theme=568bd395c831c0c6a9a3aae3\u0026amp;signature=5b41b71b0ca4c58a16be828507d5c9c613adff28e129b637e768c7eb38783fdb\">\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/cogfoundry-8a54217b/v0GZYcFPw_5KgrE4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"CogFoundry Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#111111\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/documentation/loomloom/private-templates.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cogfoundry.ai/#organization\",\"name\":\"CogFoundry Docs\",\"url\":\"https://docs.cogfoundry.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cogfoundry-8a54217b/LHTJQzou6DrszVLD/assets/logo-mark-on-light.svg?fit=max\u0026auto=format\u0026n=LHTJQzou6DrszVLD\u0026q=85\u0026s=f1c465afd64386705c8970aa5276a3fd\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cogfoundry.ai#website\",\"name\":\"CogFoundry Docs\",\"url\":\"https://docs.cogfoundry.ai\",\"publisher\":{\"@id\":\"https://docs.cogfoundry.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates#webpage\",\"url\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates\",\"name\":\"Create reusable AI work IR\",\"description\":\"Define, check, create, version, and execute private AI work IR with TemplateSpec.\",\"dateModified\":\"2026-08-11T10:13:09.417Z\",\"isPartOf\":{\"@id\":\"https://docs.cogfoundry.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Guides\",\"item\":\"https://docs.cogfoundry.ai/documentation/loomloom/workflows\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create reusable AI work IR\",\"item\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates#article\",\"headline\":\"Create reusable AI work IR\",\"name\":\"Create reusable AI work IR\",\"description\":\"Define, check, create, version, and execute private AI work IR with TemplateSpec.\",\"url\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cogfoundry.ai/documentation/loomloom/private-templates#webpage\"},\"dateModified\":\"2026-08-11T10:13:09.417Z\",\"publisher\":{\"@id\":\"https://docs.cogfoundry.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cogfoundry.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"CogFoundry Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"CogFoundry Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","groups":[{"group":"Overview","pages":[{"title":"Quickstart","icon":"rocket","href":"/documentation/overview/quickstart"},{"title":"What is CogFoundry","icon":"factory","href":"/documentation/overview/what-is-cogfoundry"},{"title":"Core Concepts","icon":"boxes","href":"/documentation/overview/core-concepts"},{"title":"Product Map","icon":"map","href":"/documentation/overview/product-map"},{"title":"FAQ","icon":"book-open","href":"/documentation/overview/faq"}]},{"group":"loomloom","pages":[{"title":"loomloom overview","icon":"workflow","href":"/documentation/loomloom/overview"},{"title":"AI work as software","icon":"binary","href":"/documentation/loomloom/why-ai-loops"}]},{"group":"Quick start","pages":[{"title":"Install loomloom","icon":"download","href":"/documentation/loomloom/installation"},{"title":"Configure credentials","icon":"key-round","href":"/documentation/loomloom/configure-credentials"},{"title":"Quick Start","icon":"rocket","href":"/documentation/loomloom/quick-start"}]},{"group":"Guides","pages":[{"title":"loomloom workflows","description":"Follow the supported end-to-end paths for official templates, reusable AI work IR, and SkillBots.","icon":"route","href":"/documentation/loomloom/workflows"},{"title":"Create reusable AI work IR","icon":"blocks","href":"/documentation/loomloom/private-templates"},{"title":"Build and use SkillBots","description":"Package private AI work IR as a deployable SkillBot, or discover and run one through the Market.","icon":"store","href":"/documentation/loomloom/skillbots-and-market"}]},{"group":"Operate loomloom","pages":[{"title":"Supported agents","icon":"bot","href":"/documentation/loomloom/supported-agents"},{"title":"Supported Models","icon":"blocks","href":"/documentation/loomloom/supported-models"},{"title":"Templates","icon":"panels-top-left","href":"/documentation/loomloom/templates"},{"title":"Official templates","icon":"badge-check","href":"/documentation/loomloom/official-templates"},{"title":"Excel workbook workflows","icon":"sheet","href":"/documentation/loomloom/excel-workbook-workflows"},{"title":"Run and monitor workflows","icon":"activity","href":"/documentation/loomloom/run-and-monitor-workflows"},{"title":"Artifacts and results","icon":"package-open","href":"/documentation/loomloom/artifacts-and-results"}]},{"group":"Reference and support","pages":[{"title":"Command reference","icon":"terminal","href":"/documentation/loomloom/command-reference"},{"title":"Security notes","icon":"shield-check","href":"/documentation/loomloom/security-notes"},{"title":"Troubleshooting","icon":"wrench","href":"/documentation/loomloom/troubleshooting"},{"title":"Uninstall","icon":"trash-2","href":"/documentation/loomloom/uninstall"}]},{"group":"Privacy","pages":[{"title":"Data Collection","icon":"shield-check","href":"/documentation/privacy/data-collection"},{"title":"Provider Logging","icon":"logs","href":"/documentation/privacy/provider-logging"}]}]},{"tab":"Developer Reference","icon":"code","pages":[{"title":"Developer Reference","href":"/developer-reference/loomloom-cli/overview"}]}]},"basePath":"","title":"Create reusable AI work IR - CogFoundry Docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}