[{"data":1,"prerenderedAt":2720},["ShallowReactive",2],{"navigation":3,"/guides/virtual-workflows":879,"/guides/virtual-workflows-surround":2715},[4,22,45,115,156,187,214,235,264,295,318,361,389,418,436,470,491,534,548,571,632,670,693,757,850],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Introduction","/introduction","01.introduction/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"What is Orkestia?","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Core Philosophy","/introduction/core-philosophy","01.introduction/2.core-philosophy","i-lucide-shield-check",{"title":18,"path":19,"stem":20,"icon":21},"Key Benefits","/introduction/key-benefits","01.introduction/3.key-benefits","i-lucide-trophy",{"title":23,"path":24,"stem":25,"children":26,"icon":29},"Getting Started","/getting-started","02.getting-started/1.index",[27,30,35,40],{"title":28,"path":24,"stem":25,"icon":29},"Quick Start","i-lucide-rocket",{"title":31,"path":32,"stem":33,"icon":34},"Architecture Overview","/getting-started/architecture-overview","02.getting-started/2.architecture-overview","i-lucide-layout-dashboard",{"title":36,"path":37,"stem":38,"icon":39},"Concepts at a Glance","/getting-started/concepts","02.getting-started/3.concepts","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Connect an AI Assistant","/getting-started/connect-an-ai-assistant","02.getting-started/4.connect-an-ai-assistant","i-lucide-bot",{"title":46,"path":47,"stem":48,"children":49,"icon":51},"Core Concepts","/concepts","03.concepts/01.index",[50,52,57,62,67,71,76,81,86,91,96,100,105,110],{"title":46,"path":47,"stem":48,"icon":51},"i-lucide-book-open",{"title":53,"path":54,"stem":55,"icon":56},"Workflows","/concepts/workflows","03.concepts/02.workflows","i-lucide-workflow",{"title":58,"path":59,"stem":60,"icon":61},"DGI — Dialog Generative Interface","/concepts/dgi","03.concepts/03.dgi","i-lucide-brain",{"title":63,"path":64,"stem":65,"icon":66},"Staff & AI Workforce Governance","/concepts/staff-governance","03.concepts/04.staff-governance","i-lucide-users-round",{"title":68,"path":69,"stem":70,"icon":44},"Agents — the execution substrate","/concepts/agents-platform","03.concepts/05.agents-platform",{"title":72,"path":73,"stem":74,"icon":75},"Runners & Execution Environments","/concepts/runners","03.concepts/06.runners","i-lucide-server-cog",{"title":77,"path":78,"stem":79,"icon":80},"Lumen Observability","/concepts/lumen","03.concepts/07.lumen","i-lucide-activity",{"title":82,"path":83,"stem":84,"icon":85},"Identity & Multi-Tenancy","/concepts/identity-multi-tenancy","03.concepts/08.identity-multi-tenancy","i-lucide-users",{"title":87,"path":88,"stem":89,"icon":90},"Billing, Pricing & Seats","/concepts/billing-and-seats","03.concepts/09.billing-and-seats","i-lucide-credit-card",{"title":92,"path":93,"stem":94,"icon":95},"App Data","/concepts/appdata","03.concepts/10.appdata","i-lucide-database",{"title":97,"path":98,"stem":99,"icon":61},"Engram","/concepts/engram","03.concepts/11.engram",{"title":101,"path":102,"stem":103,"icon":104},"DevKit","/concepts/devkit","03.concepts/12.devkit","i-lucide-terminal",{"title":106,"path":107,"stem":108,"icon":109},"App Host","/concepts/app-host","03.concepts/13.app-host","i-lucide-globe",{"title":111,"path":112,"stem":113,"icon":114},"Agent Exchange","/concepts/agent-exchange","03.concepts/14.agent-exchange","i-lucide-landmark",{"title":116,"path":117,"stem":118,"children":119,"icon":121},"Guides","/guides","04.guides/1.index",[120,122,127,132,137,142,147,151],{"title":116,"path":117,"stem":118,"icon":121},"i-lucide-compass",{"title":123,"path":124,"stem":125,"icon":126},"Building with DGI","/guides/building-with-dgi","04.guides/2.building-with-dgi","i-lucide-brain-circuit",{"title":128,"path":129,"stem":130,"icon":131},"Creating & Exposing Virtual Workflows","/guides/virtual-workflows","04.guides/4.virtual-workflows","i-lucide-blocks",{"title":133,"path":134,"stem":135,"icon":136},"Runner Management & Provisioning","/guides/runner-management","04.guides/5.runner-management","i-lucide-server",{"title":138,"path":139,"stem":140,"icon":141},"Security & Compliance","/guides/security-and-compliance","04.guides/7.security-and-compliance","i-lucide-shield",{"title":143,"path":144,"stem":145,"icon":146},"Tickets & Software Delivery","/guides/tickets-and-software-delivery","04.guides/8.tickets-and-software-delivery","i-lucide-ticket",{"title":148,"path":149,"stem":150},"Orkestia for AI-driven cloud infrastructure automation","/guides/cloud-automation-alternatives","04.guides/9.cloud-automation-alternatives",{"title":152,"path":153,"stem":154,"icon":155},"Typed decisions with TypeSafe","/guides/typed-decisions-with-typesafe","04.guides/9.typed-decisions-with-typesafe","i-lucide-git-branch",{"title":157,"path":158,"stem":159,"children":160,"icon":162},"Reference","/reference","05.reference/1.index",[161,163,168,173,177,182],{"title":157,"path":158,"stem":159,"icon":162},"i-lucide-library",{"title":164,"path":165,"stem":166,"icon":167},"Workflow Types & Registry","/reference/workflow-types-registry","05.reference/2.workflow-types-registry","i-lucide-list-tree",{"title":169,"path":170,"stem":171,"icon":172},"MCP Integration","/reference/mcp-integration","05.reference/3.mcp-integration","i-lucide-plug-zap",{"title":174,"path":175,"stem":176,"icon":104},"API & Tooling","/reference/api-tooling","05.reference/4.api-tooling",{"title":178,"path":179,"stem":180,"icon":181},"Integrations Catalog","/reference/integrations-catalog","05.reference/6.integrations-catalog","i-lucide-plug",{"title":183,"path":184,"stem":185,"icon":186},"Platform Services","/reference/platform-services","05.reference/7.platform-services","i-lucide-boxes",{"title":188,"path":189,"stem":190,"children":191,"icon":193},"Advanced Topics","/advanced","06.advanced/1.index",[192,194,199,204,209],{"title":188,"path":189,"stem":190,"icon":193},"i-lucide-flask-conical",{"title":195,"path":196,"stem":197,"icon":198},"Hybrid AI + Deterministic Execution","/advanced/hybrid-execution-model","06.advanced/2.hybrid-execution-model","i-lucide-git-merge",{"title":200,"path":201,"stem":202,"icon":203},"Drift Detection & Self-Healing","/advanced/drift-detection-self-healing","06.advanced/3.drift-detection-self-healing","i-lucide-heart-pulse",{"title":205,"path":206,"stem":207,"icon":208},"Governance & Approvals","/advanced/governance-and-approvals","06.advanced/4.governance-and-approvals","i-lucide-scale",{"title":210,"path":211,"stem":212,"icon":213},"Cost & Performance Optimization","/advanced/cost-and-performance","06.advanced/5.cost-and-performance","i-lucide-zap",{"title":215,"path":216,"stem":217,"children":218,"icon":220},"Operations","/operations","07.operations/1.index",[219,221,225,230],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-settings-2",{"title":222,"path":223,"stem":224,"icon":186},"Deployment Models","/operations/deployment-models","07.operations/2.deployment-models",{"title":226,"path":227,"stem":228,"icon":229},"Monitoring & Debugging","/operations/monitoring-and-debugging","07.operations/3.monitoring-and-debugging","i-lucide-bug",{"title":231,"path":232,"stem":233,"icon":234},"Best Practices","/operations/best-practices","07.operations/4.best-practices","i-lucide-check-check",{"title":236,"path":237,"stem":238,"children":239,"icon":241},"AWS Connections","/aws-connections","08.aws-connections/1.index",[240,242,245,250,255,260],{"title":236,"path":237,"stem":238,"icon":241},"i-simple-icons-amazonaws",{"title":23,"path":243,"stem":244,"icon":29},"/aws-connections/getting-started","08.aws-connections/2.getting-started",{"title":246,"path":247,"stem":248,"icon":249},"Setup Methods","/aws-connections/setup-methods","08.aws-connections/3.setup-methods","i-lucide-wrench",{"title":251,"path":252,"stem":253,"icon":254},"Managing Connections","/aws-connections/managing-connections","08.aws-connections/4.managing-connections","i-lucide-settings",{"title":256,"path":257,"stem":258,"icon":259},"Security Best Practices","/aws-connections/security-best-practices","08.aws-connections/5.security-best-practices","i-lucide-lock",{"title":261,"path":262,"stem":263,"icon":229},"Troubleshooting","/aws-connections/troubleshooting","08.aws-connections/6.troubleshooting",{"title":265,"path":266,"stem":267,"children":268,"icon":270},"Cloud Connections","/cloud-connections","09.cloud-connections/1.index",[269,271,276,281,286,291],{"title":265,"path":266,"stem":267,"icon":270},"i-lucide-cable",{"title":272,"path":273,"stem":274,"icon":275},"Google Cloud (GCP)","/cloud-connections/gcp","09.cloud-connections/2.gcp","i-simple-icons-googlecloud",{"title":277,"path":278,"stem":279,"icon":280},"Microsoft Azure","/cloud-connections/azure","09.cloud-connections/3.azure","i-simple-icons-microsoftazure",{"title":282,"path":283,"stem":284,"icon":285},"Magalu Cloud","/cloud-connections/magalu","09.cloud-connections/4.magalu","i-lucide-cloud",{"title":287,"path":288,"stem":289,"icon":290},"Kubernetes","/cloud-connections/kubernetes","09.cloud-connections/5.kubernetes","i-simple-icons-kubernetes",{"title":292,"path":293,"stem":294,"icon":208},"TypeSafe","/cloud-connections/typesafe","09.cloud-connections/6.typesafe",{"title":296,"path":297,"stem":298,"children":299,"icon":136},"DNS Providers","/dns-providers","10.dns-providers/1.index",[300,302,305,308,311,315],{"title":301,"path":297,"stem":298,"icon":136},"DNS Provider Connections",{"title":23,"path":303,"stem":304,"icon":29},"/dns-providers/getting-started","10.dns-providers/2.getting-started",{"title":246,"path":306,"stem":307,"icon":249},"/dns-providers/setup-methods","10.dns-providers/3.setup-methods",{"title":251,"path":309,"stem":310,"icon":254},"/dns-providers/managing-connections","10.dns-providers/4.managing-connections",{"title":312,"path":313,"stem":314,"icon":39},"Zones and Records","/dns-providers/zones-and-records","10.dns-providers/5.zones-and-records",{"title":261,"path":316,"stem":317,"icon":229},"/dns-providers/troubleshooting","10.dns-providers/6.troubleshooting",{"title":319,"path":320,"stem":321,"children":322,"icon":29},"Cloud Deploy","/cloud-deploy","11.cloud-deploy/01.index",[323,324,327,332,336,341,345,349,354,358],{"title":319,"path":320,"stem":321,"icon":29},{"title":23,"path":325,"stem":326,"icon":29},"/cloud-deploy/getting-started","11.cloud-deploy/02.getting-started",{"title":328,"path":329,"stem":330,"icon":331},"Creating a Site","/cloud-deploy/creating-a-site","11.cloud-deploy/03.creating-a-site","i-lucide-plus-circle",{"title":333,"path":334,"stem":335,"icon":34},"Site Overview and Deployments","/cloud-deploy/site-overview","11.cloud-deploy/04.site-overview",{"title":337,"path":338,"stem":339,"icon":340},"Deployment Progress and Success","/cloud-deploy/deployment-progress","11.cloud-deploy/05.deployment-progress","i-lucide-loader",{"title":342,"path":343,"stem":344,"icon":254},"Settings","/cloud-deploy/settings","11.cloud-deploy/06.settings",{"title":346,"path":347,"stem":348,"icon":109},"Custom Domains","/cloud-deploy/custom-domains","11.cloud-deploy/07.custom-domains",{"title":350,"path":351,"stem":352,"icon":353},"Resources, Releases, and Danger Zone","/cloud-deploy/resources-releases","11.cloud-deploy/08.resources-releases","i-lucide-package",{"title":355,"path":356,"stem":357,"icon":141},"Admin Dashboard","/cloud-deploy/admin-dashboard","11.cloud-deploy/09.admin-dashboard",{"title":261,"path":359,"stem":360,"icon":229},"/cloud-deploy/troubleshooting","11.cloud-deploy/10.troubleshooting",{"title":362,"path":363,"stem":364,"children":365,"icon":368},"User Onboarding","/user-onboarding","12.user-onboarding/1.index",[366,369,372,377,382,386],{"title":367,"path":363,"stem":364,"icon":368},"User Creation and Onboarding","i-lucide-user-plus",{"title":23,"path":370,"stem":371,"icon":29},"/user-onboarding/getting-started","12.user-onboarding/2.getting-started",{"title":373,"path":374,"stem":375,"icon":376},"Creating Your Organization","/user-onboarding/onboarding","12.user-onboarding/3.onboarding","i-lucide-building-2",{"title":378,"path":379,"stem":380,"icon":381},"Invitations","/user-onboarding/invitations","12.user-onboarding/4.invitations","i-lucide-mail",{"title":383,"path":384,"stem":385,"icon":254},"Managing Your Account","/user-onboarding/managing-account","12.user-onboarding/5.managing-account",{"title":261,"path":387,"stem":388,"icon":229},"/user-onboarding/troubleshooting","12.user-onboarding/6.troubleshooting",{"title":342,"path":390,"stem":391,"children":392,"icon":394},"/settings","13.settings/1.index",[393,395,400,404,409,413],{"title":342,"path":390,"stem":391,"icon":394},"i-lucide-sliders-horizontal",{"title":396,"path":397,"stem":398,"icon":399},"General Settings","/settings/general","13.settings/2.general","i-lucide-user",{"title":401,"path":402,"stem":403,"icon":85},"Members Settings","/settings/members","13.settings/3.members",{"title":405,"path":406,"stem":407,"icon":408},"Notifications Settings","/settings/notifications","13.settings/4.notifications","i-lucide-bell",{"title":410,"path":411,"stem":412,"icon":141},"Security Settings","/settings/security","13.settings/5.security",{"title":414,"path":415,"stem":416,"icon":417},"Signing Keys","/settings/keys","13.settings/6.keys","i-lucide-key-round",{"title":419,"path":420,"stem":421,"children":422,"icon":29},"App Enablement","/app-enablement","14.app-enablement/1.index",[423,424,428,432],{"title":419,"path":420,"stem":421,"icon":29},{"title":425,"path":426,"stem":427,"icon":417},"Sign in with Orkestia","/app-enablement/sign-in-with-orkestia","14.app-enablement/2.sign-in-with-orkestia",{"title":429,"path":430,"stem":431,"icon":95},"End-user data","/app-enablement/end-user-data","14.app-enablement/3.end-user-data",{"title":433,"path":434,"stem":435,"icon":131},"Compositions — use, invoke, share","/app-enablement/compositions","14.app-enablement/4.compositions",{"title":437,"path":438,"stem":439,"children":440,"icon":80},"Lumen","/lumen","15.lumen/1.index",[441,442,447,452,457,461,465],{"title":437,"path":438,"stem":439,"icon":80},{"title":443,"path":444,"stem":445,"icon":446},"Enable Lumen","/lumen/enable","15.lumen/2.enable","i-lucide-power",{"title":448,"path":449,"stem":450,"icon":451},"Send data","/lumen/send-data","15.lumen/3.send-data","i-lucide-upload",{"title":453,"path":454,"stem":455,"icon":456},"Collector","/lumen/collector","15.lumen/4.collector","i-lucide-container",{"title":458,"path":459,"stem":460,"icon":34},"Use Lumen","/lumen/observe","15.lumen/5.observe",{"title":462,"path":463,"stem":464,"icon":44},"Lumen MCP","/lumen/mcp","15.lumen/6.mcp",{"title":466,"path":467,"stem":468,"icon":469},"Query API","/lumen/query-api","15.lumen/7.query-api","i-lucide-search",{"title":471,"path":472,"stem":473,"children":474,"icon":476},"SDKs","/sdks","16.sdks/1.index",[475,477,482,487],{"title":471,"path":472,"stem":473,"icon":476},"i-lucide-code",{"title":478,"path":479,"stem":480,"icon":481},"Workflows SDK — Node / TypeScript","/sdks/workflows-nodejs","16.sdks/2.workflows-nodejs","i-lucide-file-ts",{"title":483,"path":484,"stem":485,"icon":486},"Workflows SDK — Python","/sdks/workflows-python","16.sdks/3.workflows-python","i-simple-icons-python",{"title":488,"path":489,"stem":490,"icon":417},"Auth SDK — Sign in with Orkestia","/sdks/auth","16.sdks/4.auth",{"title":92,"path":492,"stem":493,"children":494,"icon":95},"/appdata","17.appdata/1.index",[495,496,501,506,510,515,520,525,530],{"title":92,"path":492,"stem":493,"icon":95},{"title":497,"path":498,"stem":499,"icon":500},"Declare structures","/appdata/declare","17.appdata/2.declare","i-lucide-table",{"title":502,"path":503,"stem":504,"icon":505},"Records & Data API","/appdata/data-api","17.appdata/3.data-api","i-lucide-rows-3",{"title":507,"path":508,"stem":509,"icon":376},"Ownership & workspaces","/appdata/ownership","17.appdata/4.ownership",{"title":511,"path":512,"stem":513,"icon":514},"Expose App Data to end-users","/appdata/expose","17.appdata/5.expose","i-lucide-app-window",{"title":516,"path":517,"stem":518,"icon":519},"PostgREST HTTP","/appdata/postgrest","17.appdata/6.postgrest","i-lucide-unplug",{"title":521,"path":522,"stem":523,"icon":524},"Ordered append","/appdata/append","17.appdata/7.append","i-lucide-list-ordered",{"title":526,"path":527,"stem":528,"icon":529},"Databases and instances","/appdata/instances","17.appdata/8.instances","i-lucide-hard-drive",{"title":531,"path":532,"stem":533,"icon":104},"Query console and SQL","/appdata/query","17.appdata/9.query",{"title":97,"path":535,"stem":536,"children":537,"icon":61},"/engram","18.engram/1.index",[538,539,543],{"title":97,"path":535,"stem":536,"icon":61},{"title":540,"path":541,"stem":542,"icon":155},"Write & recall","/engram/write-recall","18.engram/2.write-recall",{"title":544,"path":545,"stem":546,"icon":547},"Field & feed","/engram/agent-memory","18.engram/3.agent-memory","i-lucide-radio",{"title":101,"path":549,"stem":550,"children":551,"icon":104},"/devkit","19.devkit/1.index",[552,553,558,562,567],{"title":101,"path":549,"stem":550,"icon":104},{"title":554,"path":555,"stem":556,"icon":557},"Install DevKit","/devkit/install","19.devkit/2.install","i-lucide-download",{"title":559,"path":560,"stem":561,"icon":519},"Hook redirect","/devkit/hooks","19.devkit/3.hooks",{"title":563,"path":564,"stem":565,"icon":566},"Local coding runner","/devkit/local-runner","19.devkit/4.local-runner","i-lucide-cpu",{"title":568,"path":569,"stem":570,"icon":131},"Compositions from DevKit","/devkit/compositions","19.devkit/5.compositions",{"title":572,"path":573,"stem":574,"children":575,"icon":44},"Staff & Agents","/staff-and-agents","20.staff-and-agents/01.index",[576,577,582,586,590,594,598,602,606,611,615,620,625,629],{"title":572,"path":573,"stem":574,"icon":44},{"title":578,"path":579,"stem":580,"icon":581},"Prerequisites","/staff-and-agents/prerequisites","20.staff-and-agents/02.prerequisites","i-lucide-list-checks",{"title":583,"path":584,"stem":585,"icon":368},"Hire an actor","/staff-and-agents/hire-an-actor","20.staff-and-agents/03.hire-an-actor",{"title":587,"path":588,"stem":589,"icon":34},"Console","/staff-and-agents/console","20.staff-and-agents/04.console",{"title":591,"path":592,"stem":593,"icon":11},"Configs, skills, and MCP","/staff-and-agents/configs-skills-mcp","20.staff-and-agents/05.configs-skills-mcp",{"title":595,"path":596,"stem":597,"icon":136},"Agent runner groups","/staff-and-agents/runner-groups","20.staff-and-agents/06.runner-groups",{"title":599,"path":600,"stem":601,"icon":16},"Governance","/staff-and-agents/governance","20.staff-and-agents/07.governance",{"title":603,"path":604,"stem":605,"icon":417},"Identity and tokens","/staff-and-agents/identity","20.staff-and-agents/08.identity",{"title":607,"path":608,"stem":609,"icon":610},"Memory and cost","/staff-and-agents/memory-and-cost","20.staff-and-agents/09.memory-and-cost","i-lucide-wallet",{"title":612,"path":613,"stem":614,"icon":155},"Coding agents","/staff-and-agents/coding-agents","20.staff-and-agents/10.coding-agents",{"title":616,"path":617,"stem":618,"icon":619},"Wire a repository for coding agents","/staff-and-agents/wire-a-repository","20.staff-and-agents/11.wire-a-repository","i-lucide-link",{"title":621,"path":622,"stem":623,"icon":624},"Run a ticket end to end","/staff-and-agents/run-a-ticket","20.staff-and-agents/12.run-a-ticket","i-lucide-play",{"title":626,"path":627,"stem":628,"icon":66},"Build a product team of actors","/staff-and-agents/build-a-product-team","20.staff-and-agents/13.build-a-product-team",{"title":261,"path":630,"stem":631,"icon":249},"/staff-and-agents/troubleshooting","20.staff-and-agents/14.troubleshooting",{"title":106,"path":633,"stem":634,"children":635,"icon":109},"/app-host","21.app-host/1.index",[636,637,641,644,649,653,658,662,666],{"title":106,"path":633,"stem":634,"icon":109},{"title":638,"path":639,"stem":640,"icon":514},"Your app and site","/app-host/your-app","21.app-host/2.your-app",{"title":92,"path":642,"stem":643,"icon":95},"/app-host/app-data","21.app-host/3.app-data",{"title":645,"path":646,"stem":647,"icon":648},"Website and process","/app-host/hosting","21.app-host/4.hosting","i-lucide-cloud-upload",{"title":650,"path":651,"stem":652,"icon":547},"Buzz","/app-host/buzz","21.app-host/5.buzz",{"title":654,"path":655,"stem":656,"icon":657},"Files","/app-host/files","21.app-host/6.files","i-lucide-folder",{"title":659,"path":660,"stem":661,"icon":109},"Your own domain","/app-host/your-domain","21.app-host/7.your-domain",{"title":663,"path":664,"stem":665,"icon":229},"Troubleshooting App Host","/app-host/troubleshooting","21.app-host/8.troubleshooting",{"title":667,"path":668,"stem":669,"icon":417},"Signing keys","/app-host/signing-keys","21.app-host/9.signing-keys",{"title":111,"path":671,"stem":672,"children":673,"icon":114},"/agent-exchange","22.agent-exchange/01.index",[674,675,678,682,686,690],{"title":111,"path":671,"stem":672,"icon":114},{"title":583,"path":676,"stem":677,"icon":368},"/agent-exchange/hire","22.agent-exchange/02.hire",{"title":679,"path":680,"stem":681,"icon":208},"List an actor","/agent-exchange/list","22.agent-exchange/03.list",{"title":683,"path":684,"stem":685,"icon":104},"Invoke & leases","/agent-exchange/invoke","22.agent-exchange/04.invoke",{"title":687,"path":688,"stem":689,"icon":141},"Settlement & trust","/agent-exchange/settlement","22.agent-exchange/05.settlement",{"title":53,"path":691,"stem":692,"icon":56},"/agent-exchange/workflows","22.agent-exchange/06.workflows",{"title":694,"path":695,"stem":696,"children":697,"icon":75},"Runners","/runners","23.runners/1.index",[698,700,704,709,713,717,721,726,730,734,738,741,745,749,753],{"title":699,"path":695,"stem":696,"icon":75},"Runner groups",{"title":701,"path":702,"stem":703,"icon":275},"Cloud Run","/runners/cloud-run","23.runners/10.cloud-run",{"title":705,"path":706,"stem":707,"icon":708},"DigitalOcean App Job","/runners/do-app-job","23.runners/11.do-app-job","i-simple-icons-digitalocean",{"title":710,"path":711,"stem":712,"icon":708},"DigitalOcean Droplet","/runners/do-droplet","23.runners/12.do-droplet",{"title":714,"path":715,"stem":716,"icon":285},"Magalu Cloud VM","/runners/magalu-vm","23.runners/13.magalu-vm",{"title":101,"path":718,"stem":719,"icon":720},"/runners/devkit","23.runners/14.devkit","i-lucide-laptop",{"title":722,"path":723,"stem":724,"icon":725},"Purposes & integrations","/runners/purposes","23.runners/16.purposes","i-lucide-layers",{"title":727,"path":728,"stem":729,"icon":241},"Fargate","/runners/fargate","23.runners/2.fargate",{"title":731,"path":732,"stem":733,"icon":241},"EC2 Auto Scaling","/runners/ec2-auto-scaling","23.runners/3.ec2-auto-scaling",{"title":735,"path":736,"stem":737,"icon":241},"EC2 VM","/runners/ec2-vm","23.runners/4.ec2-vm",{"title":287,"path":739,"stem":740,"icon":290},"/runners/kubernetes","23.runners/5.kubernetes",{"title":742,"path":743,"stem":744,"icon":280},"Azure Container Apps","/runners/azure-container-apps","23.runners/6.azure-container-apps",{"title":746,"path":747,"stem":748,"icon":280},"Azure VMSS","/runners/azure-vmss","23.runners/7.azure-vmss",{"title":750,"path":751,"stem":752,"icon":280},"Azure VM","/runners/azure-vm","23.runners/8.azure-vm",{"title":754,"path":755,"stem":756,"icon":275},"GCE","/runners/gce","23.runners/9.gce",{"title":758,"path":759,"stem":760,"children":761,"icon":763},"Chat","/chat","24.chat/01.index",[762,764,768,773,777,782,787,791,796,800,805,810,814,819,824,828,832,836,840,845],{"title":758,"path":759,"stem":760,"icon":763},"i-lucide-messages-square",{"title":765,"path":766,"stem":767,"icon":446},"Enable and publish","/chat/enable-and-publish","24.chat/02.enable-and-publish",{"title":769,"path":770,"stem":771,"icon":772},"Theme and customization","/chat/theme-and-customization","24.chat/03.theme-and-customization","i-lucide-palette",{"title":774,"path":775,"stem":776,"icon":85},"Members and moderation","/chat/members-and-moderation","24.chat/04.members-and-moderation",{"title":778,"path":779,"stem":780,"icon":781},"Channels","/chat/channels","24.chat/05.channels","i-lucide-hash",{"title":783,"path":784,"stem":785,"icon":786},"Using the chat","/chat/using-the-chat","24.chat/06.using-the-chat","i-lucide-message-circle",{"title":788,"path":789,"stem":790,"icon":44},"Actors in chat","/chat/actors-in-chat","24.chat/07.actors-in-chat",{"title":792,"path":793,"stem":794,"icon":795},"Internal support actor","/chat/internal-support-actor","24.chat/08.internal-support-actor","i-lucide-life-buoy",{"title":797,"path":798,"stem":799,"icon":104},"API and console","/chat/api-and-console","24.chat/09.api-and-console",{"title":801,"path":802,"stem":803,"icon":804},"Limits","/chat/limits","24.chat/10.limits","i-lucide-triangle-alert",{"title":806,"path":807,"stem":808,"icon":809},"Structured chat with DGI","/chat/structured-chat","24.chat/11.structured-chat","i-lucide-layout-list",{"title":811,"path":812,"stem":813,"icon":109},"Option A: hosted chat with DGI","/chat/option-a-hosted-chat","24.chat/12.option-a-hosted-chat",{"title":815,"path":816,"stem":817,"icon":818},"Option B: embed the chat component","/chat/option-b-embed-component","24.chat/13.option-b-embed-component","i-lucide-component",{"title":820,"path":821,"stem":822,"icon":823},"Option C: custom client (wire contract)","/chat/option-c-custom-client","24.chat/14.option-c-custom-client","i-lucide-braces",{"title":825,"path":826,"stem":827,"icon":394},"Responder configuration reference","/chat/responder-reference","24.chat/15.responder-reference",{"title":829,"path":830,"stem":831,"icon":547},"Cards, live updates and proactive posts","/chat/cards-live-and-proactive","24.chat/16.cards-live-and-proactive",{"title":833,"path":834,"stem":835,"icon":16},"Structured chat security model","/chat/structured-chat-security","24.chat/17.structured-chat-security",{"title":837,"path":838,"stem":839,"icon":181},"Option D: any app or API (dgi.chat)","/chat/option-d-chat-api","24.chat/18.option-d-chat-api",{"title":841,"path":842,"stem":843,"icon":844},"Card catalog","/chat/card-catalog","24.chat/19.card-catalog","i-lucide-layout-grid",{"title":846,"path":847,"stem":848,"icon":849},"Living Surfaces","/chat/living-surfaces","24.chat/20.living-surfaces","i-lucide-sprout",{"title":851,"path":852,"stem":853,"children":854,"icon":61},"DGI","/dgi","25.dgi/1.index",[855,857,862,866,870,874],{"title":856,"path":852,"stem":853,"icon":61},"What is DGI",{"title":858,"path":859,"stem":860,"icon":861},"How DGI works","/dgi/how-it-works","25.dgi/2.how-it-works","i-lucide-cog",{"title":863,"path":864,"stem":865,"icon":844},"Interfaces","/dgi/interfaces","25.dgi/3.interfaces",{"title":867,"path":868,"stem":869,"icon":29},"Quickstart","/dgi/quickstart","25.dgi/4.quickstart",{"title":871,"path":872,"stem":873,"icon":16},"Trust and safety","/dgi/trust-and-safety","25.dgi/5.trust-and-safety",{"title":875,"path":876,"stem":877,"icon":878},"FAQ","/dgi/faq","25.dgi/6.faq","i-lucide-circle-help",{"id":880,"title":128,"body":881,"description":2708,"extension":2709,"links":2710,"meta":2711,"navigation":2712,"path":129,"seo":2713,"stem":130,"__hash__":2714},"docs/04.guides/4.virtual-workflows.md",{"type":882,"value":883,"toc":2696},"minimark",[884,906,929,938,943,954,1009,1016,1040,1047,1051,1054,1587,1590,1636,1660,1664,1671,1743,1746,1835,1845,1849,1860,2178,2185,2189,2208,2255,2259,2268,2275,2371,2378,2587,2600,2605,2623,2626,2634,2638,2664,2668,2692],[885,886,887,888,892,893,897,898,901,902,905],"p",{},"A ",[889,890,891],"strong",{},"virtual workflow"," (a ",[894,895,896],"em",{},"composition",") is your business logic expressed as structure rather than code: you declare ",[894,899,900],{},"which existing workflows run, in what order, with which inputs",", and the platform validates it against the live catalog and compiles it into a regular engine DAG. The result runs, is watched, and is retried exactly like any hand-authored workflow — and, crucially, it is the ",[889,903,904],{},"only"," kind of workflow you can safely expose to your app's end-users.",[885,907,908,909,912,913,916,917,921,922,924,925,928],{},"This guide walks the full lifecycle: ",[889,910,911],{},"compose → validate → compile → version → expose",". To ",[889,914,915],{},"use, invoke, and share"," a composition with an app user, start at ",[918,919,920],"a",{"href":434},"Compositions",". For the conceptual model see ",[918,923,920],{"href":54}," and the ",[918,926,927],{"href":196},"hybrid execution model",".",[930,931,932],"note",{},[885,933,934,935,937],{},"The composition substrate is the same one DGI and visual builders use to author workflow DAGs programmatically — see ",[918,936,123],{"href":124},". Authoring by hand (this guide) and authoring by AI converge on the identical validated representation.",[939,940,942],"h2",{"id":941},"the-mental-model","The mental model",[885,944,945,946,949,950,953],{},"A composition is built from three pieces. Layers run ",[889,947,948],{},"in order","; steps ",[889,951,952],{},"within"," a layer can run together.",[955,956,957,970],"table",{},[958,959,960],"thead",{},[961,962,963,967],"tr",{},[964,965,966],"th",{},"Piece",[964,968,969],{},"Role",[971,972,973,984,999],"tbody",{},[961,974,975,981],{},[976,977,978],"td",{},[889,979,980],{},"Layer",[976,982,983],{},"A stage of the composition. Layers execute sequentially; steps inside one layer are concurrent.",[961,985,986,991],{},[976,987,988],{},[889,989,990],{},"Step",[976,992,993,994,998],{},"One existing workflow type to invoke (e.g. ",[995,996,997],"code",{},"aws.s3.create_bucket","), placed in a layer.",[961,1000,1001,1006],{},[976,1002,1003],{},[889,1004,1005],{},"Input mapping",[976,1007,1008],{},"Where each step argument's value comes from — explicitly, never by implicit scope.",[885,1010,1011,1012,1015],{},"Every step input declares its ",[889,1013,1014],{},"source",". There is no global scope and no runtime string templating — just three sources:",[1017,1018,1019,1027,1034],"card-group",{},[1020,1021,1024],"card",{"icon":1022,"title":1023},"i-lucide-log-in","input",[885,1025,1026],{},"Take the value from the composition's own input payload.",[1020,1028,1031],{"icon":1029,"title":1030},"i-lucide-arrow-right","step",[885,1032,1033],{},"Take the value from a prior step's output field.",[1020,1035,1037],{"icon":259,"title":1036},"static",[885,1038,1039],{},"Use a fixed literal you set at authoring time. The caller can neither see nor change it.",[885,1041,1042,1043,1046],{},"Because every mapping is explicit, the platform can ",[889,1044,1045],{},"type-check the entire composition before it ever runs"," — confirming each referenced workflow type exists and that each mapping resolves to a compatible field, with precise errors (which step, which reason) instead of a runtime surprise.",[939,1048,1050],{"id":1049},"step-1-compose","Step 1 — Compose",[885,1052,1053],{},"Author the composition as layers of steps with input mappings. The wire format is plain JSON — the same structure AI brains, visual builders, and API clients all produce:",[1055,1056,1061],"pre",{"className":1057,"code":1058,"language":1059,"meta":1060,"style":1060},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"onboard_customer_bucket\",\n  \"layers\": [\n    {\n      \"name\": \"create\",\n      \"steps\": [\n        {\n          \"name\": \"s1\",\n          \"workflow_type\": \"aws.s3.create_bucket\",\n          \"input_mapping\": {\n            \"name\": { \"source\": \"input\", \"field_name\": \"bucket_name\" }\n          }\n        }\n      ]\n    },\n    {\n      \"name\": \"tag\",\n      \"steps\": [\n        {\n          \"name\": \"s2\",\n          \"workflow_type\": \"aws.s3.put_bucket_tagging\",\n          \"input_mapping\": {\n            \"bucket\":  { \"source\": \"step\", \"step\": \"s1\", \"field_name\": \"bucket_name\" },\n            \"tagging\": { \"source\": \"static\", \"value\": { \"TagSet\": [{ \"Key\": \"env\", \"Value\": \"demo\" }] } }\n          }\n        }\n      ]\n    }\n  ]\n}\n","json","",[995,1062,1063,1072,1100,1115,1121,1143,1157,1163,1185,1205,1220,1273,1279,1285,1291,1297,1302,1322,1335,1340,1360,1380,1393,1457,1554,1559,1564,1569,1575,1581],{"__ignoreMap":1060},[1064,1065,1068],"span",{"class":1066,"line":1067},"line",1,[1064,1069,1071],{"class":1070},"sMK4o","{\n",[1064,1073,1075,1078,1082,1085,1088,1091,1095,1097],{"class":1066,"line":1074},2,[1064,1076,1077],{"class":1070},"  \"",[1064,1079,1081],{"class":1080},"spNyl","name",[1064,1083,1084],{"class":1070},"\"",[1064,1086,1087],{"class":1070},":",[1064,1089,1090],{"class":1070}," \"",[1064,1092,1094],{"class":1093},"sfazB","onboard_customer_bucket",[1064,1096,1084],{"class":1070},[1064,1098,1099],{"class":1070},",\n",[1064,1101,1103,1105,1108,1110,1112],{"class":1066,"line":1102},3,[1064,1104,1077],{"class":1070},[1064,1106,1107],{"class":1080},"layers",[1064,1109,1084],{"class":1070},[1064,1111,1087],{"class":1070},[1064,1113,1114],{"class":1070}," [\n",[1064,1116,1118],{"class":1066,"line":1117},4,[1064,1119,1120],{"class":1070},"    {\n",[1064,1122,1124,1127,1130,1132,1134,1136,1139,1141],{"class":1066,"line":1123},5,[1064,1125,1126],{"class":1070},"      \"",[1064,1128,1081],{"class":1129},"sBMFI",[1064,1131,1084],{"class":1070},[1064,1133,1087],{"class":1070},[1064,1135,1090],{"class":1070},[1064,1137,1138],{"class":1093},"create",[1064,1140,1084],{"class":1070},[1064,1142,1099],{"class":1070},[1064,1144,1146,1148,1151,1153,1155],{"class":1066,"line":1145},6,[1064,1147,1126],{"class":1070},[1064,1149,1150],{"class":1129},"steps",[1064,1152,1084],{"class":1070},[1064,1154,1087],{"class":1070},[1064,1156,1114],{"class":1070},[1064,1158,1160],{"class":1066,"line":1159},7,[1064,1161,1162],{"class":1070},"        {\n",[1064,1164,1166,1169,1172,1174,1176,1178,1181,1183],{"class":1066,"line":1165},8,[1064,1167,1168],{"class":1070},"          \"",[1064,1170,1081],{"class":1171},"sbssI",[1064,1173,1084],{"class":1070},[1064,1175,1087],{"class":1070},[1064,1177,1090],{"class":1070},[1064,1179,1180],{"class":1093},"s1",[1064,1182,1084],{"class":1070},[1064,1184,1099],{"class":1070},[1064,1186,1188,1190,1193,1195,1197,1199,1201,1203],{"class":1066,"line":1187},9,[1064,1189,1168],{"class":1070},[1064,1191,1192],{"class":1171},"workflow_type",[1064,1194,1084],{"class":1070},[1064,1196,1087],{"class":1070},[1064,1198,1090],{"class":1070},[1064,1200,997],{"class":1093},[1064,1202,1084],{"class":1070},[1064,1204,1099],{"class":1070},[1064,1206,1208,1210,1213,1215,1217],{"class":1066,"line":1207},10,[1064,1209,1168],{"class":1070},[1064,1211,1212],{"class":1171},"input_mapping",[1064,1214,1084],{"class":1070},[1064,1216,1087],{"class":1070},[1064,1218,1219],{"class":1070}," {\n",[1064,1221,1223,1226,1229,1231,1233,1236,1238,1241,1243,1245,1247,1249,1251,1254,1256,1259,1261,1263,1265,1268,1270],{"class":1066,"line":1222},11,[1064,1224,1225],{"class":1070},"            \"",[1064,1227,1081],{"class":1228},"swJcz",[1064,1230,1084],{"class":1070},[1064,1232,1087],{"class":1070},[1064,1234,1235],{"class":1070}," {",[1064,1237,1090],{"class":1070},[1064,1239,1014],{"class":1240},"su27w",[1064,1242,1084],{"class":1070},[1064,1244,1087],{"class":1070},[1064,1246,1090],{"class":1070},[1064,1248,1023],{"class":1093},[1064,1250,1084],{"class":1070},[1064,1252,1253],{"class":1070},",",[1064,1255,1090],{"class":1070},[1064,1257,1258],{"class":1240},"field_name",[1064,1260,1084],{"class":1070},[1064,1262,1087],{"class":1070},[1064,1264,1090],{"class":1070},[1064,1266,1267],{"class":1093},"bucket_name",[1064,1269,1084],{"class":1070},[1064,1271,1272],{"class":1070}," }\n",[1064,1274,1276],{"class":1066,"line":1275},12,[1064,1277,1278],{"class":1070},"          }\n",[1064,1280,1282],{"class":1066,"line":1281},13,[1064,1283,1284],{"class":1070},"        }\n",[1064,1286,1288],{"class":1066,"line":1287},14,[1064,1289,1290],{"class":1070},"      ]\n",[1064,1292,1294],{"class":1066,"line":1293},15,[1064,1295,1296],{"class":1070},"    },\n",[1064,1298,1300],{"class":1066,"line":1299},16,[1064,1301,1120],{"class":1070},[1064,1303,1305,1307,1309,1311,1313,1315,1318,1320],{"class":1066,"line":1304},17,[1064,1306,1126],{"class":1070},[1064,1308,1081],{"class":1129},[1064,1310,1084],{"class":1070},[1064,1312,1087],{"class":1070},[1064,1314,1090],{"class":1070},[1064,1316,1317],{"class":1093},"tag",[1064,1319,1084],{"class":1070},[1064,1321,1099],{"class":1070},[1064,1323,1325,1327,1329,1331,1333],{"class":1066,"line":1324},18,[1064,1326,1126],{"class":1070},[1064,1328,1150],{"class":1129},[1064,1330,1084],{"class":1070},[1064,1332,1087],{"class":1070},[1064,1334,1114],{"class":1070},[1064,1336,1338],{"class":1066,"line":1337},19,[1064,1339,1162],{"class":1070},[1064,1341,1343,1345,1347,1349,1351,1353,1356,1358],{"class":1066,"line":1342},20,[1064,1344,1168],{"class":1070},[1064,1346,1081],{"class":1171},[1064,1348,1084],{"class":1070},[1064,1350,1087],{"class":1070},[1064,1352,1090],{"class":1070},[1064,1354,1355],{"class":1093},"s2",[1064,1357,1084],{"class":1070},[1064,1359,1099],{"class":1070},[1064,1361,1363,1365,1367,1369,1371,1373,1376,1378],{"class":1066,"line":1362},21,[1064,1364,1168],{"class":1070},[1064,1366,1192],{"class":1171},[1064,1368,1084],{"class":1070},[1064,1370,1087],{"class":1070},[1064,1372,1090],{"class":1070},[1064,1374,1375],{"class":1093},"aws.s3.put_bucket_tagging",[1064,1377,1084],{"class":1070},[1064,1379,1099],{"class":1070},[1064,1381,1383,1385,1387,1389,1391],{"class":1066,"line":1382},22,[1064,1384,1168],{"class":1070},[1064,1386,1212],{"class":1171},[1064,1388,1084],{"class":1070},[1064,1390,1087],{"class":1070},[1064,1392,1219],{"class":1070},[1064,1394,1396,1398,1401,1403,1405,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454],{"class":1066,"line":1395},23,[1064,1397,1225],{"class":1070},[1064,1399,1400],{"class":1228},"bucket",[1064,1402,1084],{"class":1070},[1064,1404,1087],{"class":1070},[1064,1406,1407],{"class":1070},"  {",[1064,1409,1090],{"class":1070},[1064,1411,1014],{"class":1240},[1064,1413,1084],{"class":1070},[1064,1415,1087],{"class":1070},[1064,1417,1090],{"class":1070},[1064,1419,1030],{"class":1093},[1064,1421,1084],{"class":1070},[1064,1423,1253],{"class":1070},[1064,1425,1090],{"class":1070},[1064,1427,1030],{"class":1240},[1064,1429,1084],{"class":1070},[1064,1431,1087],{"class":1070},[1064,1433,1090],{"class":1070},[1064,1435,1180],{"class":1093},[1064,1437,1084],{"class":1070},[1064,1439,1253],{"class":1070},[1064,1441,1090],{"class":1070},[1064,1443,1258],{"class":1240},[1064,1445,1084],{"class":1070},[1064,1447,1087],{"class":1070},[1064,1449,1090],{"class":1070},[1064,1451,1267],{"class":1093},[1064,1453,1084],{"class":1070},[1064,1455,1456],{"class":1070}," },\n",[1064,1458,1460,1462,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1492,1494,1496,1498,1500,1504,1506,1508,1511,1513,1517,1519,1521,1523,1526,1528,1530,1532,1535,1537,1539,1541,1544,1546,1549,1552],{"class":1066,"line":1459},24,[1064,1461,1225],{"class":1070},[1064,1463,1464],{"class":1228},"tagging",[1064,1466,1084],{"class":1070},[1064,1468,1087],{"class":1070},[1064,1470,1235],{"class":1070},[1064,1472,1090],{"class":1070},[1064,1474,1014],{"class":1240},[1064,1476,1084],{"class":1070},[1064,1478,1087],{"class":1070},[1064,1480,1090],{"class":1070},[1064,1482,1036],{"class":1093},[1064,1484,1084],{"class":1070},[1064,1486,1253],{"class":1070},[1064,1488,1090],{"class":1070},[1064,1490,1491],{"class":1240},"value",[1064,1493,1084],{"class":1070},[1064,1495,1087],{"class":1070},[1064,1497,1235],{"class":1070},[1064,1499,1090],{"class":1070},[1064,1501,1503],{"class":1502},"s2Zo4","TagSet",[1064,1505,1084],{"class":1070},[1064,1507,1087],{"class":1070},[1064,1509,1510],{"class":1070}," [{",[1064,1512,1090],{"class":1070},[1064,1514,1516],{"class":1515},"sfNiH","Key",[1064,1518,1084],{"class":1070},[1064,1520,1087],{"class":1070},[1064,1522,1090],{"class":1070},[1064,1524,1525],{"class":1093},"env",[1064,1527,1084],{"class":1070},[1064,1529,1253],{"class":1070},[1064,1531,1090],{"class":1070},[1064,1533,1534],{"class":1515},"Value",[1064,1536,1084],{"class":1070},[1064,1538,1087],{"class":1070},[1064,1540,1090],{"class":1070},[1064,1542,1543],{"class":1093},"demo",[1064,1545,1084],{"class":1070},[1064,1547,1548],{"class":1070}," }]",[1064,1550,1551],{"class":1070}," }",[1064,1553,1272],{"class":1070},[1064,1555,1557],{"class":1066,"line":1556},25,[1064,1558,1278],{"class":1070},[1064,1560,1562],{"class":1066,"line":1561},26,[1064,1563,1284],{"class":1070},[1064,1565,1567],{"class":1066,"line":1566},27,[1064,1568,1290],{"class":1070},[1064,1570,1572],{"class":1066,"line":1571},28,[1064,1573,1574],{"class":1070},"    }\n",[1064,1576,1578],{"class":1066,"line":1577},29,[1064,1579,1580],{"class":1070},"  ]\n",[1064,1582,1584],{"class":1066,"line":1583},30,[1064,1585,1586],{"class":1070},"}\n",[885,1588,1589],{},"Three things to notice:",[1591,1592,1593,1610,1624],"ul",{},[1594,1595,1596,1599,1600,1602,1603,1606,1607,1609],"li",{},[995,1597,1598],{},"s2.bucket"," is threaded from ",[995,1601,1180],{},"'s output (",[995,1604,1605],{},"\"source\": \"step\"",") — that data dependency is what places ",[995,1608,1355],{}," in a later layer.",[1594,1611,1612,1614,1615,1618,1619,1623],{},[995,1613,1464],{}," uses ",[995,1616,1617],{},"\"source\": \"static\""," — baked in at authoring time, invisible to whoever invokes the composition. This is exactly how you lock down sensitive parameters later (see ",[918,1620,1622],{"href":1621},"#step-5-expose-to-end-users","Expose",").",[1594,1625,1626,1614,1628,1631,1632,1635],{},[995,1627,1267],{},[995,1629,1630],{},"\"source\": \"input\""," — a ",[894,1633,1634],{},"free"," input the caller supplies at run time.",[1637,1638,1639],"tip",{},[885,1640,1641,1642,1644,1645,1648,1649,1652,1653,1659],{},"Workflow type names like ",[995,1643,1375],{}," follow the ",[995,1646,1647],{},"{provider}.{service}.{operation}"," convention. Browse the full installed catalog in the ",[918,1650,1651],{"href":165},"workflow types registry"," or the external catalog at ",[918,1654,1658],{"href":1655,"rel":1656},"https://reference.orkestia.dev",[1657],"nofollow","reference.orkestia.dev"," — don't guess names; the validator will reject ones that don't exist.",[939,1661,1663],{"id":1662},"step-2-validate","Step 2 — Validate",[885,1665,1666,1667,1670],{},"Authoring runs three validation phases against whatever workflows are ",[889,1668,1669],{},"currently installed"," in the catalog. Each phase short-circuits with a typed, structured error so the precise problem is obvious (and feedable straight back into an AI authoring loop).",[955,1672,1673,1686],{},[958,1674,1675],{},[961,1676,1677,1680,1683],{},[964,1678,1679],{},"Phase",[964,1681,1682],{},"Checks",[964,1684,1685],{},"Example failure",[971,1687,1688,1703,1722],{},[961,1689,1690,1695,1698],{},[976,1691,1692],{},[889,1693,1694],{},"Structure",[976,1696,1697],{},"Layers acyclic, step IDs unique, mappings well-formed",[976,1699,1700,1701],{},"duplicate step id ",[995,1702,1180],{},[961,1704,1705,1710,1716],{},[976,1706,1707],{},[889,1708,1709],{},"References",[976,1711,1712,1713,1715],{},"Every ",[995,1714,1647],{}," actually exists in the catalog",[976,1717,1718,1721],{},[995,1719,1720],{},"aws.s3.put_bucket_taging"," — unknown type",[961,1723,1724,1729,1735],{},[976,1725,1726],{},[889,1727,1728],{},"Compatibility",[976,1730,1712,1731,1734],{},[995,1732,1733],{},"InputMapping"," resolves to a compatible source field/type",[976,1736,1737,1740,1741],{},[995,1738,1739],{},"step.s1.bucket_name"," field not produced by ",[995,1742,1180],{},[885,1744,1745],{},"A reference error looks like this — note it points at the exact step and suggests a fix:",[1055,1747,1749],{"className":1057,"code":1748,"language":1059,"meta":1060,"style":1060},"{\n  \"phase\": \"references\",\n  \"step_id\": \"s2\",\n  \"workflow_type\": \"aws.s3.put_bucket_taging\",\n  \"reason\": \"unknown workflow type; did you mean 'aws.s3.put_bucket_tagging'?\"\n}\n",[995,1750,1751,1755,1775,1794,1812,1831],{"__ignoreMap":1060},[1064,1752,1753],{"class":1066,"line":1067},[1064,1754,1071],{"class":1070},[1064,1756,1757,1759,1762,1764,1766,1768,1771,1773],{"class":1066,"line":1074},[1064,1758,1077],{"class":1070},[1064,1760,1761],{"class":1080},"phase",[1064,1763,1084],{"class":1070},[1064,1765,1087],{"class":1070},[1064,1767,1090],{"class":1070},[1064,1769,1770],{"class":1093},"references",[1064,1772,1084],{"class":1070},[1064,1774,1099],{"class":1070},[1064,1776,1777,1779,1782,1784,1786,1788,1790,1792],{"class":1066,"line":1102},[1064,1778,1077],{"class":1070},[1064,1780,1781],{"class":1080},"step_id",[1064,1783,1084],{"class":1070},[1064,1785,1087],{"class":1070},[1064,1787,1090],{"class":1070},[1064,1789,1355],{"class":1093},[1064,1791,1084],{"class":1070},[1064,1793,1099],{"class":1070},[1064,1795,1796,1798,1800,1802,1804,1806,1808,1810],{"class":1066,"line":1117},[1064,1797,1077],{"class":1070},[1064,1799,1192],{"class":1080},[1064,1801,1084],{"class":1070},[1064,1803,1087],{"class":1070},[1064,1805,1090],{"class":1070},[1064,1807,1720],{"class":1093},[1064,1809,1084],{"class":1070},[1064,1811,1099],{"class":1070},[1064,1813,1814,1816,1819,1821,1823,1825,1828],{"class":1066,"line":1123},[1064,1815,1077],{"class":1070},[1064,1817,1818],{"class":1080},"reason",[1064,1820,1084],{"class":1070},[1064,1822,1087],{"class":1070},[1064,1824,1090],{"class":1070},[1064,1826,1827],{"class":1093},"unknown workflow type; did you mean 'aws.s3.put_bucket_tagging'?",[1064,1829,1830],{"class":1070},"\"\n",[1064,1832,1833],{"class":1066,"line":1145},[1064,1834,1586],{"class":1070},[1836,1837,1838],"warning",{},[885,1839,1840,1841,1844],{},"The catalog is a ",[889,1842,1843],{},"snapshot at compile time",": validation runs against the workflow types installed in the process that compiles. A type added after compile won't be visible to that compile; a type removed after compile will still be in the emitted config and fail at engine dispatch. Pin library versions consistently across authoring and runtime environments. (beta)",[939,1846,1848],{"id":1847},"step-3-compile","Step 3 — Compile",[885,1850,1851,1852,1855,1856,1859],{},"Once validated, the composition compiles to a plain dict matching the engine's ",[995,1853,1854],{},"DAGWorkflow"," shape. The engine doesn't know — and doesn't care — that the config came from a composition; there's no runtime marker. It executes it as a normal DAG run with the ",[889,1857,1858],{},"same history, retries, and concurrency guarantees"," as any other workflow.",[1055,1861,1863],{"className":1057,"code":1862,"language":1059,"meta":1060,"style":1060},"{\n  \"id\": \"onboard_customer_bucket\",\n  \"layers\": [\n    { \"steps\": [ { \"id\": \"s1\", \"workflow\": \"aws.s3.create_bucket\",\n                   \"inputs\": { \"name\": { \"from\": \"input.bucket_name\" } } } ] },\n    { \"steps\": [ { \"id\": \"s2\", \"workflow\": \"aws.s3.put_bucket_tagging\",\n                   \"inputs\": {\n                     \"bucket\":  { \"from\": \"step.s1.bucket_name\" },\n                     \"tagging\": { \"value\": { \"TagSet\": [{ \"Key\": \"env\", \"Value\": \"demo\" }] } }\n                   } } ] }\n  ]\n}\n",[995,1864,1865,1869,1888,1900,1951,2002,2050,2062,2091,2159,2170,2174],{"__ignoreMap":1060},[1064,1866,1867],{"class":1066,"line":1067},[1064,1868,1071],{"class":1070},[1064,1870,1871,1873,1876,1878,1880,1882,1884,1886],{"class":1066,"line":1074},[1064,1872,1077],{"class":1070},[1064,1874,1875],{"class":1080},"id",[1064,1877,1084],{"class":1070},[1064,1879,1087],{"class":1070},[1064,1881,1090],{"class":1070},[1064,1883,1094],{"class":1093},[1064,1885,1084],{"class":1070},[1064,1887,1099],{"class":1070},[1064,1889,1890,1892,1894,1896,1898],{"class":1066,"line":1102},[1064,1891,1077],{"class":1070},[1064,1893,1107],{"class":1080},[1064,1895,1084],{"class":1070},[1064,1897,1087],{"class":1070},[1064,1899,1114],{"class":1070},[1064,1901,1902,1905,1907,1909,1911,1913,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936,1939,1941,1943,1945,1947,1949],{"class":1066,"line":1117},[1064,1903,1904],{"class":1070},"    {",[1064,1906,1090],{"class":1070},[1064,1908,1150],{"class":1129},[1064,1910,1084],{"class":1070},[1064,1912,1087],{"class":1070},[1064,1914,1915],{"class":1070}," [",[1064,1917,1235],{"class":1070},[1064,1919,1090],{"class":1070},[1064,1921,1875],{"class":1171},[1064,1923,1084],{"class":1070},[1064,1925,1087],{"class":1070},[1064,1927,1090],{"class":1070},[1064,1929,1180],{"class":1093},[1064,1931,1084],{"class":1070},[1064,1933,1253],{"class":1070},[1064,1935,1090],{"class":1070},[1064,1937,1938],{"class":1171},"workflow",[1064,1940,1084],{"class":1070},[1064,1942,1087],{"class":1070},[1064,1944,1090],{"class":1070},[1064,1946,997],{"class":1093},[1064,1948,1084],{"class":1070},[1064,1950,1099],{"class":1070},[1064,1952,1953,1956,1959,1961,1963,1965,1967,1969,1971,1973,1975,1977,1980,1982,1984,1986,1989,1991,1993,1995,1997,2000],{"class":1066,"line":1123},[1064,1954,1955],{"class":1070},"                   \"",[1064,1957,1958],{"class":1171},"inputs",[1064,1960,1084],{"class":1070},[1064,1962,1087],{"class":1070},[1064,1964,1235],{"class":1070},[1064,1966,1090],{"class":1070},[1064,1968,1081],{"class":1228},[1064,1970,1084],{"class":1070},[1064,1972,1087],{"class":1070},[1064,1974,1235],{"class":1070},[1064,1976,1090],{"class":1070},[1064,1978,1979],{"class":1240},"from",[1064,1981,1084],{"class":1070},[1064,1983,1087],{"class":1070},[1064,1985,1090],{"class":1070},[1064,1987,1988],{"class":1093},"input.bucket_name",[1064,1990,1084],{"class":1070},[1064,1992,1551],{"class":1070},[1064,1994,1551],{"class":1070},[1064,1996,1551],{"class":1070},[1064,1998,1999],{"class":1070}," ]",[1064,2001,1456],{"class":1070},[1064,2003,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048],{"class":1066,"line":1145},[1064,2005,1904],{"class":1070},[1064,2007,1090],{"class":1070},[1064,2009,1150],{"class":1129},[1064,2011,1084],{"class":1070},[1064,2013,1087],{"class":1070},[1064,2015,1915],{"class":1070},[1064,2017,1235],{"class":1070},[1064,2019,1090],{"class":1070},[1064,2021,1875],{"class":1171},[1064,2023,1084],{"class":1070},[1064,2025,1087],{"class":1070},[1064,2027,1090],{"class":1070},[1064,2029,1355],{"class":1093},[1064,2031,1084],{"class":1070},[1064,2033,1253],{"class":1070},[1064,2035,1090],{"class":1070},[1064,2037,1938],{"class":1171},[1064,2039,1084],{"class":1070},[1064,2041,1087],{"class":1070},[1064,2043,1090],{"class":1070},[1064,2045,1375],{"class":1093},[1064,2047,1084],{"class":1070},[1064,2049,1099],{"class":1070},[1064,2051,2052,2054,2056,2058,2060],{"class":1066,"line":1159},[1064,2053,1955],{"class":1070},[1064,2055,1958],{"class":1171},[1064,2057,1084],{"class":1070},[1064,2059,1087],{"class":1070},[1064,2061,1219],{"class":1070},[1064,2063,2064,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089],{"class":1066,"line":1165},[1064,2065,2066],{"class":1070},"                     \"",[1064,2068,1400],{"class":1228},[1064,2070,1084],{"class":1070},[1064,2072,1087],{"class":1070},[1064,2074,1407],{"class":1070},[1064,2076,1090],{"class":1070},[1064,2078,1979],{"class":1240},[1064,2080,1084],{"class":1070},[1064,2082,1087],{"class":1070},[1064,2084,1090],{"class":1070},[1064,2086,1739],{"class":1093},[1064,2088,1084],{"class":1070},[1064,2090,1456],{"class":1070},[1064,2092,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155,2157],{"class":1066,"line":1187},[1064,2094,2066],{"class":1070},[1064,2096,1464],{"class":1228},[1064,2098,1084],{"class":1070},[1064,2100,1087],{"class":1070},[1064,2102,1235],{"class":1070},[1064,2104,1090],{"class":1070},[1064,2106,1491],{"class":1240},[1064,2108,1084],{"class":1070},[1064,2110,1087],{"class":1070},[1064,2112,1235],{"class":1070},[1064,2114,1090],{"class":1070},[1064,2116,1503],{"class":1502},[1064,2118,1084],{"class":1070},[1064,2120,1087],{"class":1070},[1064,2122,1510],{"class":1070},[1064,2124,1090],{"class":1070},[1064,2126,1516],{"class":1515},[1064,2128,1084],{"class":1070},[1064,2130,1087],{"class":1070},[1064,2132,1090],{"class":1070},[1064,2134,1525],{"class":1093},[1064,2136,1084],{"class":1070},[1064,2138,1253],{"class":1070},[1064,2140,1090],{"class":1070},[1064,2142,1534],{"class":1515},[1064,2144,1084],{"class":1070},[1064,2146,1087],{"class":1070},[1064,2148,1090],{"class":1070},[1064,2150,1543],{"class":1093},[1064,2152,1084],{"class":1070},[1064,2154,1548],{"class":1070},[1064,2156,1551],{"class":1070},[1064,2158,1272],{"class":1070},[1064,2160,2161,2164,2166,2168],{"class":1066,"line":1207},[1064,2162,2163],{"class":1070},"                   }",[1064,2165,1551],{"class":1070},[1064,2167,1999],{"class":1070},[1064,2169,1272],{"class":1070},[1064,2171,2172],{"class":1066,"line":1222},[1064,2173,1580],{"class":1070},[1064,2175,2176],{"class":1066,"line":1275},[1064,2177,1586],{"class":1070},[885,2179,2180,2181,2184],{},"Compilation is ",[889,2182,2183],{},"deterministic",": the same input composition against the same installed catalog produces byte-stable JSON — useful for diffing and for reviewing AI-authored plans before they ship.",[939,2186,2188],{"id":2187},"step-4-version","Step 4 — Version",[885,2190,2191,2192,2195,2196,2199,2200,2203,2204,2207],{},"A composition is referenced by a ",[889,2193,2194],{},"uuid and a version"," (e.g. ",[995,2197,2198],{},"virtual.\u003Cuuid>@1","). Versioning is what makes exposure safe to evolve: an exposed ",[995,2201,2202],{},"@1"," keeps serving your live app while you author and validate ",[995,2205,2206],{},"@2",". Treat each compiled version as immutable — change the logic, cut a new version, re-expose, then retire the old one once traffic has moved.",[1055,2209,2213],{"className":2210,"code":2211,"language":2212,"meta":1060,"style":1060},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// run a specific version explicitly\n{ workflow_type: 'virtual.\u003Cuuid>@1', initial_data: { /* free inputs */ } }\n","ts",[995,2214,2215,2221],{"__ignoreMap":1060},[1064,2216,2217],{"class":1066,"line":1067},[1064,2218,2220],{"class":2219},"sHwdD","// run a specific version explicitly\n",[1064,2222,2223,2226,2229,2231,2234,2236,2239,2241,2244,2246,2248,2251,2253],{"class":1066,"line":1074},[1064,2224,2225],{"class":1070},"{",[1064,2227,2228],{"class":1129}," workflow_type",[1064,2230,1087],{"class":1070},[1064,2232,2233],{"class":1070}," '",[1064,2235,2198],{"class":1093},[1064,2237,2238],{"class":1070},"'",[1064,2240,1253],{"class":1070},[1064,2242,2243],{"class":1129}," initial_data",[1064,2245,1087],{"class":1070},[1064,2247,1235],{"class":1070},[1064,2249,2250],{"class":2219}," /* free inputs */",[1064,2252,1551],{"class":1070},[1064,2254,1272],{"class":1070},[939,2256,2258],{"id":2257},"step-5-expose-to-end-users","Step 5 — Expose to end-users",[885,2260,2261,2262,2264,2265,2267],{},"A composition is just another workflow type — which means it can be exposed to your app's signed-in users through ",[918,2263,419],{"href":420},". This is the ",[889,2266,904],{}," way end-users run anything: an end-user token can never start a raw platform workflow, only a virtual (composed) one you've explicitly exposed.",[885,2269,2270,2271,2274],{},"Exposure is a single workflow call (an agent on the ",[918,2272,2273],{"href":170},"Orkestia MCP"," can run it unattended):",[1055,2276,2278],{"className":2210,"code":2277,"language":2212,"meta":1060,"style":1060},"identity.app.expose-virtual-workflow({\n  identity_app_uuid: \"…\",      // your App Enablement app\n  composition_uuid: \"…\",       // the composition you authored\n  version: 1,                  // the exact version to expose\n})\n",[995,2279,2280,2311,2330,2348,2363],{"__ignoreMap":1060},[1064,2281,2282,2286,2288,2291,2293,2296,2299,2302,2304,2306,2309],{"class":1066,"line":1067},[1064,2283,2285],{"class":2284},"sTEyZ","identity",[1064,2287,928],{"class":1070},[1064,2289,2290],{"class":2284},"app",[1064,2292,928],{"class":1070},[1064,2294,2295],{"class":2284},"expose",[1064,2297,2298],{"class":1070},"-",[1064,2300,2301],{"class":2284},"virtual",[1064,2303,2298],{"class":1070},[1064,2305,1938],{"class":1502},[1064,2307,2308],{"class":2284},"(",[1064,2310,1071],{"class":1070},[1064,2312,2313,2316,2318,2320,2323,2325,2327],{"class":1066,"line":1074},[1064,2314,2315],{"class":1228},"  identity_app_uuid",[1064,2317,1087],{"class":1070},[1064,2319,1090],{"class":1070},[1064,2321,2322],{"class":1093},"…",[1064,2324,1084],{"class":1070},[1064,2326,1253],{"class":1070},[1064,2328,2329],{"class":2219},"      // your App Enablement app\n",[1064,2331,2332,2335,2337,2339,2341,2343,2345],{"class":1066,"line":1102},[1064,2333,2334],{"class":1228},"  composition_uuid",[1064,2336,1087],{"class":1070},[1064,2338,1090],{"class":1070},[1064,2340,2322],{"class":1093},[1064,2342,1084],{"class":1070},[1064,2344,1253],{"class":1070},[1064,2346,2347],{"class":2219},"       // the composition you authored\n",[1064,2349,2350,2353,2355,2358,2360],{"class":1066,"line":1117},[1064,2351,2352],{"class":1228},"  version",[1064,2354,1087],{"class":1070},[1064,2356,2357],{"class":1171}," 1",[1064,2359,1253],{"class":1070},[1064,2361,2362],{"class":2219},"                  // the exact version to expose\n",[1064,2364,2365,2368],{"class":1066,"line":1123},[1064,2366,2367],{"class":1070},"}",[1064,2369,2370],{"class":2284},")\n",[885,2372,2373,2374,2377],{},"Your frontend then invokes it as the user, presenting their session JWT as a Bearer token. Orkestia injects the end-user principal ",[889,2375,2376],{},"server-side and immutably"," — the caller cannot set or override it:",[1055,2379,2381],{"className":2210,"code":2380,"language":2212,"meta":1060,"style":1060},"const res = await fetch('https://workflow-api.orkestia.dev/api/workflows', {\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/json',\n    Authorization: `Bearer ${session.token}`,\n  },\n  body: JSON.stringify({\n    workflow_type: 'virtual.\u003Cuuid>@1',\n    initial_data: { /* free inputs only — e.g. a filter or page size */ },\n  }),\n})\nconst { state_data } = await res.json()   // returns only this user's data\n",[995,2382,2383,2414,2430,2439,2460,2489,2494,2513,2528,2542,2552,2558],{"__ignoreMap":1060},[1064,2384,2385,2388,2391,2394,2398,2401,2403,2405,2408,2410,2412],{"class":1066,"line":1067},[1064,2386,2387],{"class":1080},"const",[1064,2389,2390],{"class":2284}," res ",[1064,2392,2393],{"class":1070},"=",[1064,2395,2397],{"class":2396},"s7zQu"," await",[1064,2399,2400],{"class":1502}," fetch",[1064,2402,2308],{"class":2284},[1064,2404,2238],{"class":1070},[1064,2406,2407],{"class":1093},"https://workflow-api.orkestia.dev/api/workflows",[1064,2409,2238],{"class":1070},[1064,2411,1253],{"class":1070},[1064,2413,1219],{"class":1070},[1064,2415,2416,2419,2421,2423,2426,2428],{"class":1066,"line":1074},[1064,2417,2418],{"class":1228},"  method",[1064,2420,1087],{"class":1070},[1064,2422,2233],{"class":1070},[1064,2424,2425],{"class":1093},"POST",[1064,2427,2238],{"class":1070},[1064,2429,1099],{"class":1070},[1064,2431,2432,2435,2437],{"class":1066,"line":1102},[1064,2433,2434],{"class":1228},"  headers",[1064,2436,1087],{"class":1070},[1064,2438,1219],{"class":1070},[1064,2440,2441,2444,2447,2449,2451,2453,2456,2458],{"class":1066,"line":1117},[1064,2442,2443],{"class":1070},"    '",[1064,2445,2446],{"class":1228},"Content-Type",[1064,2448,2238],{"class":1070},[1064,2450,1087],{"class":1070},[1064,2452,2233],{"class":1070},[1064,2454,2455],{"class":1093},"application/json",[1064,2457,2238],{"class":1070},[1064,2459,1099],{"class":1070},[1064,2461,2462,2465,2467,2470,2473,2476,2479,2481,2484,2487],{"class":1066,"line":1123},[1064,2463,2464],{"class":1228},"    Authorization",[1064,2466,1087],{"class":1070},[1064,2468,2469],{"class":1070}," `",[1064,2471,2472],{"class":1093},"Bearer ",[1064,2474,2475],{"class":1070},"${",[1064,2477,2478],{"class":2284},"session",[1064,2480,928],{"class":1070},[1064,2482,2483],{"class":2284},"token",[1064,2485,2486],{"class":1070},"}`",[1064,2488,1099],{"class":1070},[1064,2490,2491],{"class":1066,"line":1145},[1064,2492,2493],{"class":1070},"  },\n",[1064,2495,2496,2499,2501,2504,2506,2509,2511],{"class":1066,"line":1159},[1064,2497,2498],{"class":1228},"  body",[1064,2500,1087],{"class":1070},[1064,2502,2503],{"class":2284}," JSON",[1064,2505,928],{"class":1070},[1064,2507,2508],{"class":1502},"stringify",[1064,2510,2308],{"class":2284},[1064,2512,1071],{"class":1070},[1064,2514,2515,2518,2520,2522,2524,2526],{"class":1066,"line":1165},[1064,2516,2517],{"class":1228},"    workflow_type",[1064,2519,1087],{"class":1070},[1064,2521,2233],{"class":1070},[1064,2523,2198],{"class":1093},[1064,2525,2238],{"class":1070},[1064,2527,1099],{"class":1070},[1064,2529,2530,2533,2535,2537,2540],{"class":1066,"line":1187},[1064,2531,2532],{"class":1228},"    initial_data",[1064,2534,1087],{"class":1070},[1064,2536,1235],{"class":1070},[1064,2538,2539],{"class":2219}," /* free inputs only — e.g. a filter or page size */",[1064,2541,1456],{"class":1070},[1064,2543,2544,2547,2550],{"class":1066,"line":1207},[1064,2545,2546],{"class":1070},"  }",[1064,2548,2549],{"class":2284},")",[1064,2551,1099],{"class":1070},[1064,2553,2554,2556],{"class":1066,"line":1222},[1064,2555,2367],{"class":1070},[1064,2557,2370],{"class":2284},[1064,2559,2560,2562,2564,2567,2569,2572,2574,2577,2579,2581,2584],{"class":1066,"line":1275},[1064,2561,2387],{"class":1080},[1064,2563,1235],{"class":1070},[1064,2565,2566],{"class":2284}," state_data ",[1064,2568,2367],{"class":1070},[1064,2570,2571],{"class":1070}," =",[1064,2573,2397],{"class":2396},[1064,2575,2576],{"class":2284}," res",[1064,2578,928],{"class":1070},[1064,2580,1059],{"class":1502},[1064,2582,2583],{"class":2284},"()   ",[1064,2585,2586],{"class":2219},"// returns only this user's data\n",[885,2588,2589,2590,2592,2593,2596,2597,2599],{},"The user supplies only the ",[889,2591,1634],{}," inputs you left as ",[995,2594,2595],{},"source=\"input\"",". The sensitive parts — which table, which tenant column, the connection — were fixed as ",[995,2598,1036],{}," mappings when you authored the composition, and the tenant filter is forced from the user's verified identity. The caller can neither see nor widen them.",[2601,2602,2604],"h3",{"id":2603},"eligible-steps","Eligible steps",[1836,2606,2607],{},[885,2608,2609,2615,2616,2619,2620,2622],{},[889,2610,2611,2612,928],{},"Every step in an exposed composition must be ",[995,2613,2614],{},"end_user_eligible"," Not all platform workflows are safe to run under an end-user principal — exposure fails if any step is ineligible. A scoped data step (for example a structured, allow-listed read) is bound so its tenant filter is ",[889,2617,2618],{},"forced"," from the end-user's identity, with no way for the caller to widen it. Check eligibility per workflow in the ",[918,2621,1651],{"href":165},"; the eligibility set is still expanding. (beta)",[885,2624,2625],{},"The end-to-end shape of an Orkestia-backed app:",[1055,2627,2632],{"className":2628,"code":2630,"language":2631},[2629],"language-text","Your frontend ──► Sign in with Orkestia ──► end-user JWT\n     │\n     └──► POST /api/workflows  (virtual.\u003Cuuid>@1, Bearer JWT)\n                     │\n                     └──► Orkestia injects the end-user principal (immutable)\n                                   │\n                                   └──► composition runs, scoped to the user → only their data\n","text",[995,2633,2630],{"__ignoreMap":1060},[939,2635,2637],{"id":2636},"what-you-get","What you get",[1017,2639,2640,2646,2652,2658],{},[1020,2641,2643],{"icon":234,"title":2642},"No code, full engine guarantees",[885,2644,2645],{},"Declare structure, not implementation — and still get the engine's history, retries, and concurrency control.",[1020,2647,2649],{"icon":16,"title":2648},"Typed before it runs",[885,2650,2651],{},"Structure, reference, and compatibility checks catch errors at authoring time, with precise per-step diagnostics.",[1020,2653,2655],{"icon":259,"title":2654},"Safe to expose",[885,2656,2657],{},"Static mappings hide sensitive parameters; the tenant boundary is enforced from an immutable, server-injected identity.",[1020,2659,2661],{"icon":155,"title":2660},"Versioned & deterministic",[885,2662,2663],{},"Pin a version to your live app, author the next in parallel, and diff byte-stable compiled output.",[939,2665,2667],{"id":2666},"next","Next",[1017,2669,2670,2675,2680,2686],{},[1020,2671,2672],{"icon":29,"title":419,"to":420},[885,2673,2674],{},"Wire Sign in with Orkestia and end-user data for your app.",[1020,2676,2677],{"icon":11,"title":123,"to":124},[885,2678,2679],{},"Let an AI brain design the composition for you, then compile it deterministically.",[1020,2681,2683],{"icon":566,"title":2682,"to":196},"Hybrid execution model",[885,2684,2685],{},"How AI design compiles down to efficient deterministic runs.",[1020,2687,2689],{"icon":39,"title":2688,"to":165},"Workflow types registry",[885,2690,2691],{},"The capabilities you can chain — and which are end-user eligible.",[2693,2694,2695],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":1060,"searchDepth":1067,"depth":1074,"links":2697},[2698,2699,2700,2701,2702,2703,2706,2707],{"id":941,"depth":1074,"text":942},{"id":1049,"depth":1074,"text":1050},{"id":1662,"depth":1074,"text":1663},{"id":1847,"depth":1074,"text":1848},{"id":2187,"depth":1074,"text":2188},{"id":2257,"depth":1074,"text":2258,"children":2704},[2705],{"id":2603,"depth":1102,"text":2604},{"id":2636,"depth":1074,"text":2637},{"id":2666,"depth":1074,"text":2667},"Compose existing workflows into a validated, versioned virtual workflow and expose it to your app's end-users through App Enablement","md",null,{},{"icon":131},{"title":128,"description":2708},"cei7p8PeeM3j_Nei7pOHVLLJSruEe6XGGKmFv3sS04c",[2716,2718],{"title":123,"path":124,"stem":125,"description":2717,"icon":126,"children":-1},"Express a goal to DGI, review the workflow plan it assembles, and promote a good plan into a reusable deterministic virtual workflow",{"title":133,"path":134,"stem":135,"description":2719,"icon":136,"children":-1},"Provision, scale, monitor, and decommission self-hosted GitHub Actions runners that live entirely in your own cloud",1790354041707]