[{"data":1,"prerenderedAt":1803},["ShallowReactive",2],{"navigation":3,"/advanced/cost-and-performance":879,"/advanced/cost-and-performance-surround":1798},[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":210,"body":881,"description":1791,"extension":1792,"links":1793,"meta":1794,"navigation":1795,"path":211,"seo":1796,"stem":212,"__hash__":1797},"docs/06.advanced/5.cost-and-performance.md",{"type":882,"value":883,"toc":1773},"minimark",[884,897,923,928,931,958,962,973,978,986,1007,1018,1024,1031,1045,1049,1056,1122,1128,1142,1146,1151,1155,1165,1192,1278,1348,1368,1383,1387,1405,1409,1420,1424,1427,1451,1456,1460,1470,1473,1534,1537,1551,1571,1586,1590,1593,1597,1629,1633,1724,1728,1769],[885,886,887,888,892,893,896],"p",{},"Orkestia gives you two execution styles that sit on the same engine: ",[889,890,891],"strong",{},"AI reasoning"," (DGI designs and adapts flows on the fly) and ",[889,894,895],{},"deterministic compositions"," (a compiled DAG runs the same way every time). Cost and latency live almost entirely in the choice between them, in how much runner capacity you keep warm, and in how you fan work out asynchronously. This page is the practical playbook: where the money and the milliseconds go, the levers you have, and the tradeoffs each lever carries.",[898,899,900],"note",{},[885,901,902,903,907,908,912,913,916,917,919,920,922],{},"Because Orkestia runs under ",[904,905,906],"a",{"href":47},"Zero Code Custody",", the ",[909,910,911],"em",{},"compute"," cost of your jobs (runner minutes, container time, egress) is billed to you by your own cloud provider — Orkestia never holds it. That makes cost optimization here largely about ",[889,914,915],{},"reducing work and right-sizing your own infrastructure",", not about shaving an Orkestia hosting bill. Orkestia's own footprint is workflow STATE plus ",[904,918,437],{"href":78}," observability data. For how the Orkestia side itself is billed (a prepaid subscription with seats and add-ons, plus execution and request meters above the included volume), see ",[904,921,87],{"href":88},".",[924,925,927],"h2",{"id":926},"the-three-cost-centers","The three cost centers",[885,929,930],{},"Most Orkestia spend traces back to three places. Optimize them in roughly this order — the first usually has the biggest leverage.",[932,933,934,945,951],"card-group",{},[935,936,938],"card",{"icon":61,"title":937},"LLM reasoning",[885,939,940,941,944],{},"Every time DGI reasons over a request — interpreting intent, choosing capabilities, sequencing steps — you pay for model tokens and wall-clock latency. Re-reasoning the ",[909,942,943],{},"same"," flow on every run is the most common avoidable cost.",[935,946,948],{"icon":136,"title":947},"Runner / compute capacity",[885,949,950],{},"Self-hosted runners and execution environments cost money whenever they are warm, whether or not a job is in flight. Idle warm pools trade cost for pickup latency.",[935,952,955],{"icon":953,"title":954},"i-lucide-clock","Step execution + waiting",[885,956,957],{},"Individual workflow steps call provider APIs, wait on long-running cloud operations, and pass data between layers. Slow or redundant steps inflate both latency and the compute time you pay for.",[924,959,961],{"id":960},"lever-1-compile-ai-designed-flows-to-deterministic-compositions","Lever 1 — Compile AI-designed flows to deterministic compositions",[885,963,964,965,968,969,972],{},"This is the highest-leverage move in the platform. DGI is excellent at ",[909,966,967],{},"designing"," a workflow from intent, but you should not pay an LLM to re-derive that design on every execution. The ",[904,970,971],{"href":54},"Virtual Workflow Engine"," exists precisely to capture a design once and turn it into config the deterministic engine can run forever — with no model in the hot path.",[974,975,977],"h3",{"id":976},"how-the-compile-step-removes-llm-cost","How the compile step removes LLM cost",[885,979,980,981,985],{},"When DGI (or any producer — a UI, an API client, an agent) settles on a plan, it expresses it as a ",[982,983,984],"code",{},"VirtualWorkflow",": typed layers of steps with explicit input mappings. The virtual engine then:",[987,988,989,993,1000],"ol",{},[990,991,992],"li",{},"Discovers the live catalog of installed workflow types (no static list — it reads what the installed libraries actually register).",[990,994,995,996,999],{},"Validates structure (acyclic DAG, unique step IDs), references (every ",[982,997,998],{},"{provider}.{service}.{operation}"," exists), and compatibility (every input mapping type-checks).",[990,1001,1002,1003,1006],{},"Compiles to a plain JSON DAG matching the engine's ",[982,1004,1005],{},"DAGWorkflow"," shape.",[885,1008,1009,1010,1013,1014,1017],{},"The real ",[904,1011,1012],{"href":54},"workflow engine"," consumes that JSON exactly as it would any hand-authored DAG. There is ",[889,1015,1016],{},"no runtime marker and no model call"," — at execution time it is pure deterministic orchestration.",[1019,1020],"dag-diagram",{":edges":1021,":nodes":1022,"direction":1023},"[{\"from\":\"intent\",\"to\":\"DGI\",\"label\":\"tokens $$\"},{\"from\":\"DGI\",\"to\":\"VW\"},{\"from\":\"VW\",\"to\":\"JSON\",\"label\":\"compile once\"},{\"from\":\"JSON\",\"to\":\"ENG\",\"label\":\"run N times, $0 LLM\"},{\"from\":\"ENG\",\"to\":\"R1\"},{\"from\":\"ENG\",\"to\":\"R2\"},{\"from\":\"ENG\",\"to\":\"Rn\"}]","[{\"id\":\"intent\",\"label\":\"User intent\",\"kind\":\"start\"},{\"id\":\"DGI\",\"label\":\"DGI reasoning\",\"kind\":\"ai\"},{\"id\":\"VW\",\"label\":\"VirtualWorkflow plan\",\"kind\":\"data\"},{\"id\":\"JSON\",\"label\":\"Validated DAG JSON\",\"kind\":\"data\"},{\"id\":\"ENG\",\"label\":\"Workflow engine\",\"kind\":\"engine\"},{\"id\":\"R1\",\"label\":\"run 1\",\"kind\":\"terminal\"},{\"id\":\"R2\",\"label\":\"run 2\",\"kind\":\"terminal\"},{\"id\":\"Rn\",\"label\":\"run ...\",\"kind\":\"terminal\"}]","LR",[885,1025,1026,1027,1030],{},"The economic shape is simple: ",[889,1028,1029],{},"reasoning cost is amortized across every subsequent run."," A flow designed once and run ten thousand times pays the LLM bill once.",[1032,1033,1034],"tip",{},[885,1035,1036,1037,1040,1041,1044],{},"Compiled output is ",[889,1038,1039],{},"byte-stable"," for the same input plan and the same installed catalog. That means you can diff an LLM-authored plan in review, check it into version control, and treat it as a reproducible artifact — not a fresh generation each time. See ",[904,1042,1043],{"href":129},"Virtual Workflows"," for the authoring loop.",[974,1046,1048],{"id":1047},"when-to-keep-dgi-in-the-loop-anyway","When to keep DGI in the loop anyway",[885,1050,1051,1052,1055],{},"Compilation is the right default for anything repeated, but not everything should be frozen. Keep reasoning live when the ",[909,1053,1054],{},"shape"," of the work genuinely changes per request.",[1057,1058,1059,1075],"table",{},[1060,1061,1062],"thead",{},[1063,1064,1065,1069,1072],"tr",{},[1066,1067,1068],"th",{},"Pattern",[1066,1070,1071],{},"Recommended style",[1066,1073,1074],{},"Why",[1076,1077,1078,1090,1101,1112],"tbody",{},[1063,1079,1080,1084,1087],{},[1081,1082,1083],"td",{},"Repeated, well-understood operation (nightly provision, standard deploy)",[1081,1085,1086],{},"Compiled composition",[1081,1088,1089],{},"Stable shape; pay LLM once",[1063,1091,1092,1095,1098],{},[1081,1093,1094],{},"One-off or exploratory request",[1081,1096,1097],{},"DGI live",[1081,1099,1100],{},"Not worth compiling something you run once",[1063,1102,1103,1106,1109],{},[1081,1104,1105],{},"Flow whose branching depends on unpredictable runtime data",[1081,1107,1108],{},"DGI live, or compiled DAG with conditional steps",[1081,1110,1111],{},"Decide whether the variation is structural or just data",[1063,1113,1114,1117,1119],{},[1081,1115,1116],{},"High-volume, latency-sensitive automation",[1081,1118,1086],{},[1081,1120,1121],{},"Removes model latency from the hot path entirely",[885,1123,1124,1125,922],{},"The deeper treatment of when each style fires — and how they interoperate — is in ",[904,1126,1127],{"href":196},"Hybrid Execution Model",[1129,1130,1131],"warning",{},[885,1132,1133,1134,1137,1138,1141],{},"The virtual engine is ",[889,1135,1136],{},"alpha"," (versioned in the 0.x range) and its catalog is a ",[889,1139,1140],{},"snapshot at compile time",". If the producer process has an older library than the runtime, compilation can succeed while engine dispatch later fails with an \"unknown workflow type\" error. Pin library versions across your authoring and runtime environments, or compile in the same process that dispatches. Treat the JSON wire format as the stable contract, not the Python builder API.",[924,1143,1145],{"id":1144},"lever-2-right-size-runner-warm-pools-and-capacity","Lever 2 — Right-size runner warm pools and capacity",[885,1147,1148,1150],{},[904,1149,694],{"href":73}," (and the broader execution environments they model) are where idle cost accumulates. A runner that is warm but unused costs you provider minutes for zero work; a cold start costs you pickup latency. Tuning the warm pool is the act of choosing where on that curve you want to sit.",[974,1152,1154],{"id":1153},"the-core-tradeoff","The core tradeoff",[1156,1157,1162],"pre",{"className":1158,"code":1160,"language":1161},[1159],"language-text"," cost  ◄────────────────────────────────► latency\n high warm pool          balanced          scale-to-zero\n (instant pickup,        (some warm,        (cheapest,\n  pay for idle)          spill cold)        cold-start delay)\n","text",[982,1163,1160],{"__ignoreMap":1164},"",[885,1166,1167,1168,1171,1172,1175,1176,1179,1180,1183,1184,1187,1188,1191],{},"Orkestia scales runner groups with a ",[889,1169,1170],{},"reconciliation loop"," that continuously converges the pool toward the group's configured ",[982,1173,1174],{},"min","/",[982,1177,1178],{},"max"," — your primary cost dial. GitHub ",[982,1181,1182],{},"workflow_job"," events are a best-effort nudge that triggers an immediate reconcile (",[982,1185,1186],{},"queued"," may scale up, ",[982,1189,1190],{},"completed"," may scale down); because the loop, not the webhook, is authoritative, scaling stays correct and bounded even if an event is missed.",[1156,1193,1197],{"className":1194,"code":1195,"language":1196,"meta":1164,"style":1164},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"scale\": { \"min\": 0, \"max\": 10, \"idle_timeout_s\": 300 }\n}\n","json",[982,1198,1199,1208,1272],{"__ignoreMap":1164},[1200,1201,1204],"span",{"class":1202,"line":1203},"line",1,[1200,1205,1207],{"class":1206},"sMK4o","{\n",[1200,1209,1211,1214,1218,1221,1224,1227,1230,1233,1235,1237,1241,1244,1246,1248,1250,1252,1255,1257,1259,1262,1264,1266,1269],{"class":1202,"line":1210},2,[1200,1212,1213],{"class":1206},"  \"",[1200,1215,1217],{"class":1216},"spNyl","scale",[1200,1219,1220],{"class":1206},"\"",[1200,1222,1223],{"class":1206},":",[1200,1225,1226],{"class":1206}," {",[1200,1228,1229],{"class":1206}," \"",[1200,1231,1174],{"class":1232},"sBMFI",[1200,1234,1220],{"class":1206},[1200,1236,1223],{"class":1206},[1200,1238,1240],{"class":1239},"sbssI"," 0",[1200,1242,1243],{"class":1206},",",[1200,1245,1229],{"class":1206},[1200,1247,1178],{"class":1232},[1200,1249,1220],{"class":1206},[1200,1251,1223],{"class":1206},[1200,1253,1254],{"class":1239}," 10",[1200,1256,1243],{"class":1206},[1200,1258,1229],{"class":1206},[1200,1260,1261],{"class":1232},"idle_timeout_s",[1200,1263,1220],{"class":1206},[1200,1265,1223],{"class":1206},[1200,1267,1268],{"class":1239}," 300",[1200,1270,1271],{"class":1206}," }\n",[1200,1273,1275],{"class":1202,"line":1274},3,[1200,1276,1277],{"class":1206},"}\n",[1057,1279,1280,1293],{},[1060,1281,1282],{},[1063,1283,1284,1287,1290],{},[1066,1285,1286],{},"Setting",[1066,1288,1289],{},"Effect on cost",[1066,1291,1292],{},"Effect on latency",[1076,1294,1295,1309,1323,1336],{},[1063,1296,1297,1303,1306],{},[1081,1298,1299,1302],{},[982,1300,1301],{},"min: 0"," (scale to zero)",[1081,1304,1305],{},"Lowest — no idle runners",[1081,1307,1308],{},"Cold start on first queued job",[1063,1310,1311,1317,1320],{},[1081,1312,1313,1316],{},[982,1314,1315],{},"min: N"," (warm floor)",[1081,1318,1319],{},"Pay for N idle runners always",[1081,1321,1322],{},"First N jobs picked up instantly",[1063,1324,1325,1330,1333],{},[1081,1326,1327,1329],{},[982,1328,1178],{}," (ceiling)",[1081,1331,1332],{},"Hard cap on spend — Orkestia never exceeds it even under queue pressure",[1081,1334,1335],{},"Jobs queue once the cap is hit",[1063,1337,1338,1342,1345],{},[1081,1339,1340],{},[982,1341,1261],{},[1081,1343,1344],{},"Higher = fewer scale cycles, more idle time",[1081,1346,1347],{},"Higher = warmer runners between bursts",[1032,1349,1350],{},[885,1351,1352,1353,1355,1356,1359,1360,1362,1363,1365,1366,922],{},"Set ",[982,1354,1174],{}," to your ",[889,1357,1358],{},"steady-state concurrency floor"," (the number of jobs you almost always have in flight) and let the reconcile loop scale up to ",[982,1361,1178],{}," for bursts. Reserve a non-zero ",[982,1364,1174],{}," only for the groups whose pickup latency users actually feel — batch and nightly groups are usually fine at ",[982,1367,1301],{},[898,1369,1370],{},[885,1371,1372,1373,1376,1377,1379,1380,1382],{},"Bounded scaling is a ",[889,1374,1375],{},"deliberate cost guardrail",", not best-effort: Orkestia will let the queue grow rather than exceed your ",[982,1378,1178],{},". If you would rather burst than wait, raise ",[982,1381,1178],{}," — but that is an explicit decision to spend more. Self-hosted runners also scale in seconds-to-minutes, not milliseconds, so they are not the right tool when you need extreme instantaneous burst.",[974,1384,1386],{"id":1385},"reap-dead-capacity-automatically","Reap dead capacity automatically",[885,1388,1389,1390,1393,1394,1397,1398,1401,1402,922],{},"Idle isn't the only waste — ",[909,1391,1392],{},"orphaned"," capacity is worse, because it costs money and serves nothing. Runner groups run periodic health checks: unhealthy runners are deregistered from GitHub and the compute reaped so dead runners don't sit on the bill or starve the queue. The reconciler also sweeps zombie registrations left behind by a failed teardown. You get this for free, but it's worth watching the ",[889,1395,1396],{},"orphaned-runner rate"," (it should trend to zero) and reacting if it doesn't. See ",[904,1399,1400],{"href":134},"Runner Management"," and ",[904,1403,1404],{"href":201},"drift detection & self-healing",[924,1406,1408],{"id":1407},"lever-3-use-kafka-async-for-throughput-not-just-durability","Lever 3 — Use Kafka async for throughput, not just durability",[885,1410,1411,1412,1415,1416,1419],{},"Long-running steps — cloud provisioning, drains, AWS waiters, anything that blocks on an external system — must not occupy a synchronous request. Orkestia's canonical async path puts these on the Kafka ",[982,1413,1414],{},"workflow.transition"," bus, consumed by the workflow Kafka consumer. This is both a reliability property (work survives pod restarts) and a ",[889,1417,1418],{},"performance"," property: it decouples submission rate from execution rate, so a burst of work fans out across consumers instead of serializing behind a request thread.",[1019,1421],{":edges":1422,":nodes":1423,"direction":1023},"[{\"from\":\"API\",\"to\":\"ENG\"},{\"from\":\"ENG\",\"to\":\"K\",\"label\":\"workflow.transition\"},{\"from\":\"K\",\"to\":\"C1\"},{\"from\":\"K\",\"to\":\"C2\"},{\"from\":\"K\",\"to\":\"C3\"},{\"from\":\"C1\",\"to\":\"work1\"},{\"from\":\"C2\",\"to\":\"work2\"},{\"from\":\"C3\",\"to\":\"work3\"}]","[{\"id\":\"API\",\"label\":\"API / MCP submit\",\"kind\":\"start\"},{\"id\":\"ENG\",\"label\":\"Engine: enqueue transition\",\"kind\":\"engine\"},{\"id\":\"K\",\"label\":\"Kafka\",\"kind\":\"data\"},{\"id\":\"C1\",\"label\":\"consumer\",\"kind\":\"engine\"},{\"id\":\"C2\",\"label\":\"consumer\",\"kind\":\"engine\"},{\"id\":\"C3\",\"label\":\"consumer\",\"kind\":\"engine\"},{\"id\":\"work1\",\"label\":\"step exec\",\"kind\":\"terminal\"},{\"id\":\"work2\",\"label\":\"step exec\",\"kind\":\"terminal\"},{\"id\":\"work3\",\"label\":\"step exec\",\"kind\":\"terminal\"}]",[885,1425,1426],{},"Practical consequences for cost and speed:",[1428,1429,1430,1439,1445],"ul",{},[990,1431,1432,1435,1436,1438],{},[889,1433,1434],{},"Parallelism is the default."," Independent workflow groups execute fully in parallel; only operations on the ",[909,1437,943],{}," serialized entity (e.g. the same runner group, guarded by a PG advisory lock) are ordered. Structure work so unrelated items don't share a lock key.",[990,1440,1441,1444],{},[889,1442,1443],{},"No long-poll waiting threads."," Waiting on a cloud operation happens via transitions, not a held connection, so you don't pay for idle compute holding a socket.",[990,1446,1447,1450],{},[889,1448,1449],{},"Backpressure is visible."," Consumer lag is your throughput signal — if it grows, scale consumers rather than runners.",[898,1452,1453],{},[885,1454,1455],{},"Long-running work always rides the engine's Kafka backend — there is no second queueing system to provision, monitor, or pay for (an early Celery-based path was fully retired). Consumer lag is the one backpressure signal to watch.",[924,1457,1459],{"id":1458},"lever-4-use-lumen-to-find-the-slow-and-expensive-steps","Lever 4 — Use Lumen to find the slow and expensive steps",[885,1461,1462,1463,1465,1466,1469],{},"You can't optimize what you can't see. ",[904,1464,437],{"href":78}," is Orkestia's workflow-native observability layer, and it attributes every signal to structural context — workflow, actor, state, trace, span, project, environment, release. That attribution is exactly what lets you answer \"",[909,1467,1468],{},"which step is costing me","\" instead of guessing.",[885,1471,1472],{},"The signals that matter for cost and performance work:",[1057,1474,1475,1488],{},[1060,1476,1477],{},[1063,1478,1479,1482,1485],{},[1066,1480,1481],{},"Lumen surface",[1066,1483,1484],{},"What it tells you",[1066,1486,1487],{},"Optimization it drives",[1076,1489,1490,1501,1512,1523],{},[1063,1491,1492,1495,1498],{},[1081,1493,1494],{},"Traces & spans",[1081,1496,1497],{},"Per-step duration, slow spans, latency p95/p99",[1081,1499,1500],{},"Find the step to compile, parallelize, or cache",[1063,1502,1503,1506,1509],{},[1081,1504,1505],{},"Metrics",[1081,1507,1508],{},"Aggregate time-series by metric name",[1081,1510,1511],{},"Track cost/latency trends across releases",[1063,1513,1514,1517,1520],{},[1081,1515,1516],{},"Error groups",[1081,1518,1519],{},"Repeated failures grouped by fingerprint",[1081,1521,1522],{},"Kill retry storms that burn compute",[1063,1524,1525,1528,1531],{},[1081,1526,1527],{},"Dashboard",[1081,1529,1530],{},"Project summary, latency and cost signals, top error groups",[1081,1532,1533],{},"First place to look for a regression",[885,1535,1536],{},"A typical optimization loop:",[987,1538,1539,1542,1545,1548],{},[990,1540,1541],{},"Open the Lumen dashboard, sort by latency or error volume.",[990,1543,1544],{},"Drill into the slow trace; identify the dominant span.",[990,1546,1547],{},"Decide the lever — is it an LLM call that should be compiled away, a step that should run in a parallel layer, or a flaky step generating retries?",[990,1549,1550],{},"Apply the change; watch the same span's p95 across the next releases to confirm.",[1032,1552,1553],{},[885,1554,1555,1556,1567,1568,922],{},"Lumen's strength depends on logs arriving ",[889,1557,1558,1559,1562,1563,1566],{},"with ",[982,1560,1561],{},"trace_id"," / ",[982,1564,1565],{},"span_id"," and workflow/actor context attached."," Missing trace IDs collapse the trace UI into coarse pseudo-traces grouped by workflow, which makes per-step attribution much harder. Instrument emitting context early — it's the difference between \"this workflow is slow\" and \"step 3 of 7 is slow.\" See ",[904,1569,1570],{"href":459},"Observability with Lumen",[1129,1572,1573],{},[885,1574,1575,1576,1578,1579,1585],{},"Lumen is ",[889,1577,1136],{},". Its self-serve onboarding and control plane ship today, but standalone packaging is still maturing. The latency/cost signals are real and usable for the optimization loop above; treat any per-step cost number as directional, and use the ",[904,1580,1584],{"href":1581,"rel":1582},"https://reference.orkestia.dev",[1583],"nofollow","external catalog"," for authoritative per-workflow detail.",[974,1587,1589],{"id":1588},"beware-ingest-rules-that-hide-the-signal","Beware ingest rules that hide the signal",[885,1591,1592],{},"Lumen's ingest rules can drop or sample logs to control observability cost. That's a legitimate lever — but over-aggressive sampling can discard the very spans you need to find a slow step, and bad fingerprint rules can mask a retry storm by mis-grouping it. Tune ingest rules with the same care as the workflows they observe.",[924,1594,1596],{"id":1595},"putting-it-together-an-optimization-checklist","Putting it together — an optimization checklist",[932,1598,1599,1605,1616,1623],{},[935,1600,1602],{"icon":566,"title":1601,"to":129},"Compile what repeats",[885,1603,1604],{},"Freeze any stable, repeated DGI-designed flow into a deterministic composition. Amortize the LLM cost to near zero.",[935,1606,1608],{"icon":394,"title":1607,"to":134},"Right-size warm pools",[885,1609,1352,1610,1612,1613,1615],{},[982,1611,1174],{}," to your real concurrency floor, cap ",[982,1614,1178],{}," for cost safety, let the reconcile loop handle bursts.",[935,1617,1620],{"icon":1618,"title":1619,"to":54},"i-lucide-split","Fan out over Kafka",[885,1621,1622],{},"Push long-running work async; parallelize unrelated groups; scale consumers on lag.",[935,1624,1626],{"icon":80,"title":1625,"to":459},"Measure with Lumen",[885,1627,1628],{},"Find the dominant span, confirm every change against p95 over subsequent releases.",[924,1630,1632],{"id":1631},"tradeoffs-at-a-glance","Tradeoffs at a glance",[1057,1634,1635,1648],{},[1060,1636,1637],{},[1063,1638,1639,1642,1645],{},[1066,1640,1641],{},"Lever",[1066,1643,1644],{},"You gain",[1066,1646,1647],{},"You give up",[1076,1649,1650,1661,1674,1688,1702,1713],{},[1063,1651,1652,1655,1658],{},[1081,1653,1654],{},"Compile to composition",[1081,1656,1657],{},"Lower LLM cost, lower latency, reproducibility",[1081,1659,1660],{},"Runtime adaptability; must recompile when the design changes",[1063,1662,1663,1668,1671],{},[1081,1664,1665,1666],{},"Non-zero warm pool ",[982,1667,1174],{},[1081,1669,1670],{},"Instant pickup",[1081,1672,1673],{},"Pay for idle runners",[1063,1675,1676,1682,1685],{},[1081,1677,1678,1679,1681],{},"Aggressive ",[982,1680,1301],{}," / scale-to-zero",[1081,1683,1684],{},"Lowest idle cost",[1081,1686,1687],{},"Cold-start latency on first job",[1063,1689,1690,1696,1699],{},[1081,1691,1692,1693,1695],{},"High ",[982,1694,1178],{}," ceiling",[1081,1697,1698],{},"Burst capacity",[1081,1700,1701],{},"Higher peak spend",[1063,1703,1704,1707,1710],{},[1081,1705,1706],{},"Kafka async fan-out",[1081,1708,1709],{},"Throughput, durability",[1081,1711,1712],{},"More moving parts to monitor (consumer lag)",[1063,1714,1715,1718,1721],{},[1081,1716,1717],{},"Lumen ingest sampling",[1081,1719,1720],{},"Lower observability cost",[1081,1722,1723],{},"Risk of dropping the signal you need",[924,1725,1727],{"id":1726},"related-reading","Related reading",[1428,1729,1730,1735,1740,1752,1759],{},[990,1731,1732,1734],{},[904,1733,1127],{"href":196}," — how AI reasoning and deterministic compositions interoperate",[990,1736,1737,1739],{},[904,1738,200],{"href":201}," — keeping runner capacity correct and reaped",[990,1741,1742,1745,1746,1745,1748,1745,1750],{},[904,1743,1744],{"href":54},"Concepts: Workflows",", ",[904,1747,694],{"href":73},[904,1749,437],{"href":78},[904,1751,851],{"href":59},[990,1753,1754,1401,1757],{},[904,1755,1756],{"href":223},"Operations: Deployment Models",[904,1758,138],{"href":139},[990,1760,1761,1764,1765],{},[904,1762,1763],{"href":165},"Reference: Workflow Types Registry"," and the external ",[904,1766,1768],{"href":1581,"rel":1767},[1583],"Orkestia capability catalog",[1770,1771,1772],"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 .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 .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);}",{"title":1164,"searchDepth":1203,"depth":1210,"links":1774},[1775,1776,1780,1784,1785,1788,1789,1790],{"id":926,"depth":1210,"text":927},{"id":960,"depth":1210,"text":961,"children":1777},[1778,1779],{"id":976,"depth":1274,"text":977},{"id":1047,"depth":1274,"text":1048},{"id":1144,"depth":1210,"text":1145,"children":1781},[1782,1783],{"id":1153,"depth":1274,"text":1154},{"id":1385,"depth":1274,"text":1386},{"id":1407,"depth":1210,"text":1408},{"id":1458,"depth":1210,"text":1459,"children":1786},[1787],{"id":1588,"depth":1274,"text":1589},{"id":1595,"depth":1210,"text":1596},{"id":1631,"depth":1210,"text":1632},{"id":1726,"depth":1210,"text":1727},"How to keep Orkestia workflows fast and cheap by compiling AI-designed flows to deterministic compositions, right-sizing runners, scaling async over Kafka, and using Lumen to find the expensive steps","md",null,{},{"icon":213},{"title":210,"description":1791},"53rlKBD6BbY5Z22pDJyaVzls5S4PUjUkyBdAiMPkpzg",[1799,1801],{"title":205,"path":206,"stem":207,"description":1800,"icon":208,"children":-1},"How Orkestia enforces role-based authority, human-in-the-loop approval gates, and an immutable evidence trail over fleets of autonomous AI agents",{"title":215,"path":216,"stem":217,"description":1802,"icon":220,"children":-1},"Run Orkestia in production — deployment topologies, monitoring and debugging, and the operational practices that keep workflows reliable",1790354045869]