[{"data":1,"prerenderedAt":3548},["ShallowReactive",2],{"navigation":3,"/appdata/end-user-agents":1197,"/appdata/end-user-agents-surround":3543},[4,45,67,118,136,209,230],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Use it","/use","00.use/1.index",[9,11,16,21,26,30,35,40],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-list-checks",{"title":12,"path":13,"stem":14,"icon":15},"Run a workflow from an assistant","/use/run-from-an-assistant","00.use/2.run-from-an-assistant","i-lucide-bot",{"title":17,"path":18,"stem":19,"icon":20},"Connect a cloud and use it","/use/connect-a-cloud","00.use/3.connect-a-cloud","i-lucide-cloud",{"title":22,"path":23,"stem":24,"icon":25},"Put Orkestia in your app","/use/in-your-app","00.use/4.in-your-app","i-lucide-key-round",{"title":27,"path":28,"stem":29,"icon":15},"Stand up an actor","/use/stand-up-an-actor","00.use/5.stand-up-an-actor",{"title":31,"path":32,"stem":33,"icon":34},"Operate a run","/use/operate-a-run","00.use/6.operate-a-run","i-lucide-activity",{"title":36,"path":37,"stem":38,"icon":39},"Work from the desktop app","/use/work-from-the-desktop-app","00.use/7.work-from-the-desktop-app","i-lucide-app-window",{"title":41,"path":42,"stem":43,"icon":44},"Let an agent use your browser","/use/let-an-agent-use-your-browser","00.use/8.let-an-agent-use-your-browser","i-lucide-globe",{"title":46,"path":47,"stem":48,"children":49,"icon":52},"Getting Started","/getting-started","02.getting-started/1.index",[50,53,58,63],{"title":51,"path":47,"stem":48,"icon":52},"Quick Start","i-lucide-rocket",{"title":54,"path":55,"stem":56,"icon":57},"Architecture Overview","/getting-started/architecture-overview","02.getting-started/2.architecture-overview","i-lucide-layout-dashboard",{"title":59,"path":60,"stem":61,"icon":62},"Concepts at a Glance","/getting-started/concepts","02.getting-started/3.concepts","i-lucide-list",{"title":64,"path":65,"stem":66,"icon":15},"Connect an AI Assistant","/getting-started/connect-an-ai-assistant","02.getting-started/4.connect-an-ai-assistant",{"title":68,"path":69,"stem":70,"children":71,"icon":73},"Guides","/guides","04.guides/1.index",[72,74,79,84,89,94,99,104,109,113],{"title":68,"path":69,"stem":70,"icon":73},"i-lucide-compass",{"title":75,"path":76,"stem":77,"icon":78},"Receive webhooks with a re-query","/guides/webhooks-with-requery","04.guides/10.webhooks-with-requery","i-lucide-webhook",{"title":80,"path":81,"stem":82,"icon":83},"Keep scheduled compositions cheap","/guides/composition-runtime-cost","04.guides/11.composition-runtime-cost","i-lucide-gauge",{"title":85,"path":86,"stem":87,"icon":88},"Building with DGI","/guides/building-with-dgi","04.guides/2.building-with-dgi","i-lucide-brain-circuit",{"title":90,"path":91,"stem":92,"icon":93},"Creating & Exposing Virtual Workflows","/guides/virtual-workflows","04.guides/4.virtual-workflows","i-lucide-blocks",{"title":95,"path":96,"stem":97,"icon":98},"Runner Management & Provisioning","/guides/runner-management","04.guides/5.runner-management","i-lucide-server",{"title":100,"path":101,"stem":102,"icon":103},"Security & Compliance","/guides/security-and-compliance","04.guides/7.security-and-compliance","i-lucide-shield",{"title":105,"path":106,"stem":107,"icon":108},"Tickets & Software Delivery","/guides/tickets-and-software-delivery","04.guides/8.tickets-and-software-delivery","i-lucide-ticket",{"title":110,"path":111,"stem":112},"Orkestia for AI-driven cloud infrastructure automation","/guides/cloud-automation-alternatives","04.guides/9.cloud-automation-alternatives",{"title":114,"path":115,"stem":116,"icon":117},"Typed decisions with TypeSafe","/guides/typed-decisions-with-typesafe","04.guides/9.typed-decisions-with-typesafe","i-lucide-git-branch",{"title":119,"path":120,"stem":121,"children":122,"icon":125},"Introduction","/introduction","01.introduction/1.index",[123,126,131],{"title":124,"path":120,"stem":121,"icon":125},"What is Orkestia?","i-lucide-sparkles",{"title":127,"path":128,"stem":129,"icon":130},"Core Philosophy","/introduction/core-philosophy","01.introduction/2.core-philosophy","i-lucide-shield-check",{"title":132,"path":133,"stem":134,"icon":135},"Key Benefits","/introduction/key-benefits","01.introduction/3.key-benefits","i-lucide-trophy",{"title":137,"path":138,"stem":139,"children":140,"icon":142},"Core Concepts","/concepts","03.concepts/01.index",[141,143,148,153,158,163,167,172,176,181,186,191,195,200,204],{"title":137,"path":138,"stem":139,"icon":142},"i-lucide-book-open",{"title":144,"path":145,"stem":146,"icon":147},"Workflows","/concepts/workflows","03.concepts/02.workflows","i-lucide-workflow",{"title":149,"path":150,"stem":151,"icon":152},"DGI — Dialog Generative Interface","/concepts/dgi","03.concepts/03.dgi","i-lucide-brain",{"title":154,"path":155,"stem":156,"icon":157},"How DGI works","/concepts/dgi-how-it-works","03.concepts/03.dgi-how-it-works","i-lucide-cpu",{"title":159,"path":160,"stem":161,"icon":162},"Staff & AI Workforce Governance","/concepts/staff-governance","03.concepts/04.staff-governance","i-lucide-users-round",{"title":164,"path":165,"stem":166,"icon":15},"Agents — the execution substrate","/concepts/agents-platform","03.concepts/05.agents-platform",{"title":168,"path":169,"stem":170,"icon":171},"Runners & Execution Environments","/concepts/runners","03.concepts/06.runners","i-lucide-server-cog",{"title":173,"path":174,"stem":175,"icon":34},"Lumen Observability","/concepts/lumen","03.concepts/07.lumen",{"title":177,"path":178,"stem":179,"icon":180},"Identity & Multi-Tenancy","/concepts/identity-multi-tenancy","03.concepts/08.identity-multi-tenancy","i-lucide-users",{"title":182,"path":183,"stem":184,"icon":185},"Billing, Pricing & Seats","/concepts/billing-and-seats","03.concepts/09.billing-and-seats","i-lucide-credit-card",{"title":187,"path":188,"stem":189,"icon":190},"App Data","/concepts/appdata","03.concepts/10.appdata","i-lucide-database",{"title":192,"path":193,"stem":194,"icon":152},"Engram","/concepts/engram","03.concepts/11.engram",{"title":196,"path":197,"stem":198,"icon":199},"DevKit","/concepts/devkit","03.concepts/12.devkit","i-lucide-terminal",{"title":201,"path":202,"stem":203,"icon":44},"App Host","/concepts/app-host","03.concepts/13.app-host",{"title":205,"path":206,"stem":207,"icon":208},"Agent Exchange","/concepts/agent-exchange","03.concepts/14.agent-exchange","i-lucide-landmark",{"title":210,"path":211,"stem":212,"children":213,"icon":215},"Reference","/reference","05.reference/1.index",[214,216,221,225],{"title":210,"path":211,"stem":212,"icon":215},"i-lucide-library",{"title":217,"path":218,"stem":219,"icon":220},"MCP Integration","/reference/mcp-integration","05.reference/3.mcp-integration","i-lucide-plug-zap",{"title":222,"path":223,"stem":224,"icon":199},"API & Tooling","/reference/api-tooling","05.reference/4.api-tooling",{"title":226,"path":227,"stem":228,"icon":229},"Platform Services","/reference/platform-services","05.reference/7.platform-services","i-lucide-boxes",{"title":231,"path":232,"icon":215,"children":233},"Product pages","/product-pages",[234,261,282,311,346,369,412,439,472,495,565,590,636,650,672,742,785,808,820,910,938,986,1013,1049,1135,1153,1165,1184,1191],{"title":235,"path":236,"stem":237,"children":238,"icon":240},"Advanced Topics","/advanced","06.advanced/1.index",[239,241,246,251,256],{"title":235,"path":236,"stem":237,"icon":240},"i-lucide-flask-conical",{"title":242,"path":243,"stem":244,"icon":245},"Hybrid AI + Deterministic Execution","/advanced/hybrid-execution-model","06.advanced/2.hybrid-execution-model","i-lucide-git-merge",{"title":247,"path":248,"stem":249,"icon":250},"Drift Detection & Self-Healing","/advanced/drift-detection-self-healing","06.advanced/3.drift-detection-self-healing","i-lucide-heart-pulse",{"title":252,"path":253,"stem":254,"icon":255},"Governance & Approvals","/advanced/governance-and-approvals","06.advanced/4.governance-and-approvals","i-lucide-scale",{"title":257,"path":258,"stem":259,"icon":260},"Cost & Performance Optimization","/advanced/cost-and-performance","06.advanced/5.cost-and-performance","i-lucide-zap",{"title":262,"path":263,"stem":264,"children":265,"icon":267},"Operations","/operations","07.operations/1.index",[266,268,272,277],{"title":262,"path":263,"stem":264,"icon":267},"i-lucide-settings-2",{"title":269,"path":270,"stem":271,"icon":229},"Deployment Models","/operations/deployment-models","07.operations/2.deployment-models",{"title":273,"path":274,"stem":275,"icon":276},"Monitoring & Debugging","/operations/monitoring-and-debugging","07.operations/3.monitoring-and-debugging","i-lucide-bug",{"title":278,"path":279,"stem":280,"icon":281},"Best Practices","/operations/best-practices","07.operations/4.best-practices","i-lucide-check-check",{"title":283,"path":284,"stem":285,"children":286,"icon":288},"AWS Connections","/aws-connections","08.aws-connections/1.index",[287,289,292,297,302,307],{"title":283,"path":284,"stem":285,"icon":288},"i-simple-icons-amazonaws",{"title":46,"path":290,"stem":291,"icon":52},"/aws-connections/getting-started","08.aws-connections/2.getting-started",{"title":293,"path":294,"stem":295,"icon":296},"Setup Methods","/aws-connections/setup-methods","08.aws-connections/3.setup-methods","i-lucide-wrench",{"title":298,"path":299,"stem":300,"icon":301},"Managing Connections","/aws-connections/managing-connections","08.aws-connections/4.managing-connections","i-lucide-settings",{"title":303,"path":304,"stem":305,"icon":306},"Security Best Practices","/aws-connections/security-best-practices","08.aws-connections/5.security-best-practices","i-lucide-lock",{"title":308,"path":309,"stem":310,"icon":276},"Troubleshooting","/aws-connections/troubleshooting","08.aws-connections/6.troubleshooting",{"title":312,"path":313,"stem":314,"children":315,"icon":317},"Cloud Connections","/cloud-connections","09.cloud-connections/1.index",[316,318,323,328,332,337,341],{"title":312,"path":313,"stem":314,"icon":317},"i-lucide-cable",{"title":319,"path":320,"stem":321,"icon":322},"Google Cloud (GCP)","/cloud-connections/gcp","09.cloud-connections/2.gcp","i-simple-icons-googlecloud",{"title":324,"path":325,"stem":326,"icon":327},"Microsoft Azure","/cloud-connections/azure","09.cloud-connections/3.azure","i-simple-icons-microsoftazure",{"title":329,"path":330,"stem":331,"icon":20},"Magalu Cloud","/cloud-connections/magalu","09.cloud-connections/4.magalu",{"title":333,"path":334,"stem":335,"icon":336},"Kubernetes","/cloud-connections/kubernetes","09.cloud-connections/5.kubernetes","i-simple-icons-kubernetes",{"title":338,"path":339,"stem":340,"icon":255},"TypeSafe","/cloud-connections/typesafe","09.cloud-connections/6.typesafe",{"title":342,"path":343,"stem":344,"icon":345},"Email mailboxes","/cloud-connections/email","09.cloud-connections/7.email","i-lucide-mail",{"title":347,"path":348,"stem":349,"children":350,"icon":98},"DNS Providers","/dns-providers","10.dns-providers/1.index",[351,353,356,359,362,366],{"title":352,"path":348,"stem":349,"icon":98},"DNS Provider Connections",{"title":46,"path":354,"stem":355,"icon":52},"/dns-providers/getting-started","10.dns-providers/2.getting-started",{"title":293,"path":357,"stem":358,"icon":296},"/dns-providers/setup-methods","10.dns-providers/3.setup-methods",{"title":298,"path":360,"stem":361,"icon":301},"/dns-providers/managing-connections","10.dns-providers/4.managing-connections",{"title":363,"path":364,"stem":365,"icon":62},"Zones and Records","/dns-providers/zones-and-records","10.dns-providers/5.zones-and-records",{"title":308,"path":367,"stem":368,"icon":276},"/dns-providers/troubleshooting","10.dns-providers/6.troubleshooting",{"title":370,"path":371,"stem":372,"children":373,"icon":52},"Cloud Deploy","/cloud-deploy","11.cloud-deploy/01.index",[374,375,378,383,387,392,396,400,405,409],{"title":370,"path":371,"stem":372,"icon":52},{"title":46,"path":376,"stem":377,"icon":52},"/cloud-deploy/getting-started","11.cloud-deploy/02.getting-started",{"title":379,"path":380,"stem":381,"icon":382},"Creating a Site","/cloud-deploy/creating-a-site","11.cloud-deploy/03.creating-a-site","i-lucide-plus-circle",{"title":384,"path":385,"stem":386,"icon":57},"Site Overview and Deployments","/cloud-deploy/site-overview","11.cloud-deploy/04.site-overview",{"title":388,"path":389,"stem":390,"icon":391},"Deployment Progress and Success","/cloud-deploy/deployment-progress","11.cloud-deploy/05.deployment-progress","i-lucide-loader",{"title":393,"path":394,"stem":395,"icon":301},"Settings","/cloud-deploy/settings","11.cloud-deploy/06.settings",{"title":397,"path":398,"stem":399,"icon":44},"Custom Domains","/cloud-deploy/custom-domains","11.cloud-deploy/07.custom-domains",{"title":401,"path":402,"stem":403,"icon":404},"Resources, Releases, and Danger Zone","/cloud-deploy/resources-releases","11.cloud-deploy/08.resources-releases","i-lucide-package",{"title":406,"path":407,"stem":408,"icon":103},"Admin Dashboard","/cloud-deploy/admin-dashboard","11.cloud-deploy/09.admin-dashboard",{"title":308,"path":410,"stem":411,"icon":276},"/cloud-deploy/troubleshooting","11.cloud-deploy/10.troubleshooting",{"title":413,"path":414,"stem":415,"children":416,"icon":419},"User Onboarding","/user-onboarding","12.user-onboarding/1.index",[417,420,423,428,432,436],{"title":418,"path":414,"stem":415,"icon":419},"User Creation and Onboarding","i-lucide-user-plus",{"title":46,"path":421,"stem":422,"icon":52},"/user-onboarding/getting-started","12.user-onboarding/2.getting-started",{"title":424,"path":425,"stem":426,"icon":427},"Creating Your Organization","/user-onboarding/onboarding","12.user-onboarding/3.onboarding","i-lucide-building-2",{"title":429,"path":430,"stem":431,"icon":345},"Invitations","/user-onboarding/invitations","12.user-onboarding/4.invitations",{"title":433,"path":434,"stem":435,"icon":301},"Managing Your Account","/user-onboarding/managing-account","12.user-onboarding/5.managing-account",{"title":308,"path":437,"stem":438,"icon":276},"/user-onboarding/troubleshooting","12.user-onboarding/6.troubleshooting",{"title":393,"path":440,"stem":441,"children":442,"icon":444},"/settings","13.settings/1.index",[443,445,450,454,459,463,467],{"title":393,"path":440,"stem":441,"icon":444},"i-lucide-sliders-horizontal",{"title":446,"path":447,"stem":448,"icon":449},"General Settings","/settings/general","13.settings/2.general","i-lucide-user",{"title":451,"path":452,"stem":453,"icon":180},"Members Settings","/settings/members","13.settings/3.members",{"title":455,"path":456,"stem":457,"icon":458},"Notifications Settings","/settings/notifications","13.settings/4.notifications","i-lucide-bell",{"title":460,"path":461,"stem":462,"icon":103},"Security Settings","/settings/security","13.settings/5.security",{"title":464,"path":465,"stem":466,"icon":25},"Signing Keys","/settings/keys","13.settings/6.keys",{"title":468,"path":469,"stem":470,"icon":471},"API Tokens","/settings/api-tokens","13.settings/7.api-tokens","i-lucide-key",{"title":473,"path":474,"stem":475,"children":476,"icon":52},"App Enablement","/app-enablement","14.app-enablement/1.index",[477,478,482,486,490],{"title":473,"path":474,"stem":475,"icon":52},{"title":479,"path":480,"stem":481,"icon":25},"Sign in with Orkestia","/app-enablement/sign-in-with-orkestia","14.app-enablement/2.sign-in-with-orkestia",{"title":483,"path":484,"stem":485,"icon":190},"End-user data","/app-enablement/end-user-data","14.app-enablement/3.end-user-data",{"title":487,"path":488,"stem":489,"icon":93},"Compositions — use, invoke, share","/app-enablement/compositions","14.app-enablement/4.compositions",{"title":491,"path":492,"stem":493,"icon":494},"Scoped SQL on your own database","/app-enablement/scoped-sql","14.app-enablement/5.scoped-sql","i-lucide-database-zap",{"title":496,"path":497,"stem":498,"children":499,"icon":34},"Lumen","/lumen","15.lumen/1.index",[500,501,506,510,515,519,523,527,532,537,542,546,550,555,560],{"title":496,"path":497,"stem":498,"icon":34},{"title":502,"path":503,"stem":504,"icon":505},"Explore and correlate","/lumen/explore-and-correlate","15.lumen/10.explore-and-correlate","i-lucide-link-2",{"title":507,"path":508,"stem":509,"icon":125},"AI analytics in the Cockpit app","/lumen/ai-analytics-in-cockpit","15.lumen/11.ai-analytics-in-cockpit",{"title":511,"path":512,"stem":513,"icon":514},"Pulse in the Cockpit app","/lumen/pulse-in-cockpit","15.lumen/12.pulse-in-cockpit","i-lucide-bar-chart-3",{"title":516,"path":517,"stem":518,"icon":444},"Rules in the Cockpit app","/lumen/rules-in-cockpit","15.lumen/13.rules-in-cockpit",{"title":520,"path":521,"stem":522,"icon":185},"Plans, usage and API keys in the Cockpit app","/lumen/plans-usage-and-keys","15.lumen/14.plans-usage-and-keys",{"title":524,"path":525,"stem":526,"icon":267},"Settings and bulk actions","/lumen/settings-and-bulk-actions","15.lumen/15.settings-and-bulk-actions",{"title":528,"path":529,"stem":530,"icon":531},"Enable Lumen","/lumen/enable","15.lumen/2.enable","i-lucide-power",{"title":533,"path":534,"stem":535,"icon":536},"Send data","/lumen/send-data","15.lumen/3.send-data","i-lucide-upload",{"title":538,"path":539,"stem":540,"icon":541},"Collector","/lumen/collector","15.lumen/4.collector","i-lucide-container",{"title":543,"path":544,"stem":545,"icon":57},"Use Lumen","/lumen/observe","15.lumen/5.observe",{"title":547,"path":548,"stem":549,"icon":15},"Lumen MCP","/lumen/mcp","15.lumen/6.mcp",{"title":551,"path":552,"stem":553,"icon":554},"Query API","/lumen/query-api","15.lumen/7.query-api","i-lucide-search",{"title":556,"path":557,"stem":558,"icon":559},"Lumen in the Cockpit app","/lumen/cockpit-mode","15.lumen/8.cockpit-mode","i-lucide-monitor-smartphone",{"title":561,"path":562,"stem":563,"icon":564},"Dashboards in the Cockpit app","/lumen/dashboards-in-cockpit","15.lumen/9.dashboards-in-cockpit","i-lucide-layout-grid",{"title":566,"path":567,"stem":568,"children":569,"icon":571},"SDKs","/sdks","16.sdks/1.index",[570,572,577,582,586],{"title":566,"path":567,"stem":568,"icon":571},"i-lucide-code",{"title":573,"path":574,"stem":575,"icon":576},"Workflows SDK — Node / TypeScript","/sdks/workflows-nodejs","16.sdks/2.workflows-nodejs","i-lucide-file-ts",{"title":578,"path":579,"stem":580,"icon":581},"Workflows SDK — Python","/sdks/workflows-python","16.sdks/3.workflows-python","i-simple-icons-python",{"title":583,"path":584,"stem":585,"icon":25},"Auth SDK — Sign in with Orkestia","/sdks/auth","16.sdks/4.auth",{"title":587,"path":588,"stem":589,"icon":514},"Pulse SDK — product analytics for your app","/sdks/lumen-pulse","16.sdks/5.lumen-pulse",{"title":187,"path":591,"stem":592,"children":593,"icon":190},"/appdata","17.appdata/1.index",[594,595,599,604,609,613,617,622,627,632],{"title":187,"path":591,"stem":592,"icon":190},{"title":596,"path":597,"stem":598,"icon":15},"Agents over App Data","/appdata/end-user-agents","17.appdata/10.end-user-agents",{"title":600,"path":601,"stem":602,"icon":603},"Declare structures","/appdata/declare","17.appdata/2.declare","i-lucide-table",{"title":605,"path":606,"stem":607,"icon":608},"Records & Data API","/appdata/data-api","17.appdata/3.data-api","i-lucide-rows-3",{"title":610,"path":611,"stem":612,"icon":427},"Ownership & workspaces","/appdata/ownership","17.appdata/4.ownership",{"title":614,"path":615,"stem":616,"icon":39},"Expose App Data to end-users","/appdata/expose","17.appdata/5.expose",{"title":618,"path":619,"stem":620,"icon":621},"PostgREST HTTP","/appdata/postgrest","17.appdata/6.postgrest","i-lucide-unplug",{"title":623,"path":624,"stem":625,"icon":626},"Ordered append","/appdata/append","17.appdata/7.append","i-lucide-list-ordered",{"title":628,"path":629,"stem":630,"icon":631},"Databases and instances","/appdata/instances","17.appdata/8.instances","i-lucide-hard-drive",{"title":633,"path":634,"stem":635,"icon":199},"Query console and SQL","/appdata/query","17.appdata/9.query",{"title":192,"path":637,"stem":638,"children":639,"icon":152},"/engram","18.engram/1.index",[640,641,645],{"title":192,"path":637,"stem":638,"icon":152},{"title":642,"path":643,"stem":644,"icon":117},"Write & recall","/engram/write-recall","18.engram/2.write-recall",{"title":646,"path":647,"stem":648,"icon":649},"Field & feed","/engram/agent-memory","18.engram/3.agent-memory","i-lucide-radio",{"title":196,"path":651,"stem":652,"children":653,"icon":199},"/devkit","19.devkit/1.index",[654,655,660,664,668],{"title":196,"path":651,"stem":652,"icon":199},{"title":656,"path":657,"stem":658,"icon":659},"Install DevKit","/devkit/install","19.devkit/2.install","i-lucide-download",{"title":661,"path":662,"stem":663,"icon":621},"Hook redirect","/devkit/hooks","19.devkit/3.hooks",{"title":665,"path":666,"stem":667,"icon":157},"Local coding runner","/devkit/local-runner","19.devkit/4.local-runner",{"title":669,"path":670,"stem":671,"icon":93},"Compositions from DevKit","/devkit/compositions","19.devkit/5.compositions",{"title":673,"path":674,"stem":675,"children":676,"icon":15},"Staff & Agents","/staff-and-agents","20.staff-and-agents/01.index",[677,678,682,686,690,694,698,702,706,711,715,720,725,729,732,737],{"title":673,"path":674,"stem":675,"icon":15},{"title":679,"path":680,"stem":681,"icon":10},"Prerequisites","/staff-and-agents/prerequisites","20.staff-and-agents/02.prerequisites",{"title":683,"path":684,"stem":685,"icon":419},"Hire an actor","/staff-and-agents/hire-an-actor","20.staff-and-agents/03.hire-an-actor",{"title":687,"path":688,"stem":689,"icon":57},"Console","/staff-and-agents/console","20.staff-and-agents/04.console",{"title":691,"path":692,"stem":693,"icon":125},"Configs, skills, and MCP","/staff-and-agents/configs-skills-mcp","20.staff-and-agents/05.configs-skills-mcp",{"title":695,"path":696,"stem":697,"icon":98},"Agent runner groups","/staff-and-agents/runner-groups","20.staff-and-agents/06.runner-groups",{"title":699,"path":700,"stem":701,"icon":130},"Governance","/staff-and-agents/governance","20.staff-and-agents/07.governance",{"title":703,"path":704,"stem":705,"icon":25},"Identity and tokens","/staff-and-agents/identity","20.staff-and-agents/08.identity",{"title":707,"path":708,"stem":709,"icon":710},"Memory and cost","/staff-and-agents/memory-and-cost","20.staff-and-agents/09.memory-and-cost","i-lucide-wallet",{"title":712,"path":713,"stem":714,"icon":117},"Coding agents","/staff-and-agents/coding-agents","20.staff-and-agents/10.coding-agents",{"title":716,"path":717,"stem":718,"icon":719},"Wire a repository for coding agents","/staff-and-agents/wire-a-repository","20.staff-and-agents/11.wire-a-repository","i-lucide-link",{"title":721,"path":722,"stem":723,"icon":724},"Run a ticket end to end","/staff-and-agents/run-a-ticket","20.staff-and-agents/12.run-a-ticket","i-lucide-play",{"title":726,"path":727,"stem":728,"icon":162},"Build a product team of actors","/staff-and-agents/build-a-product-team","20.staff-and-agents/13.build-a-product-team",{"title":308,"path":730,"stem":731,"icon":296},"/staff-and-agents/troubleshooting","20.staff-and-agents/14.troubleshooting",{"title":733,"path":734,"stem":735,"icon":736},"Media actors","/staff-and-agents/media-actors","20.staff-and-agents/15.media-actors","i-lucide-clapperboard",{"title":738,"path":739,"stem":740,"icon":741},"Agents that serve people","/staff-and-agents/agents-that-serve-people","20.staff-and-agents/16.agents-that-serve-people","i-lucide-hand-helping",{"title":201,"path":743,"stem":744,"children":745,"icon":44},"/app-host","21.app-host/1.index",[746,747,752,756,759,764,768,773,777,781],{"title":201,"path":743,"stem":744,"icon":44},{"title":748,"path":749,"stem":750,"icon":751},"Static egress IP","/app-host/static-egress-ip","21.app-host/10.static-egress-ip","i-lucide-network",{"title":753,"path":754,"stem":755,"icon":39},"Your app and site","/app-host/your-app","21.app-host/2.your-app",{"title":187,"path":757,"stem":758,"icon":190},"/app-host/app-data","21.app-host/3.app-data",{"title":760,"path":761,"stem":762,"icon":763},"Website and process","/app-host/hosting","21.app-host/4.hosting","i-lucide-cloud-upload",{"title":765,"path":766,"stem":767,"icon":649},"Buzz","/app-host/buzz","21.app-host/5.buzz",{"title":769,"path":770,"stem":771,"icon":772},"Files","/app-host/files","21.app-host/6.files","i-lucide-folder",{"title":774,"path":775,"stem":776,"icon":44},"Your own domain","/app-host/your-domain","21.app-host/7.your-domain",{"title":778,"path":779,"stem":780,"icon":276},"Troubleshooting App Host","/app-host/troubleshooting","21.app-host/8.troubleshooting",{"title":782,"path":783,"stem":784,"icon":25},"Signing keys","/app-host/signing-keys","21.app-host/9.signing-keys",{"title":205,"path":786,"stem":787,"children":788,"icon":208},"/agent-exchange","22.agent-exchange/01.index",[789,790,793,797,801,805],{"title":205,"path":786,"stem":787,"icon":208},{"title":683,"path":791,"stem":792,"icon":419},"/agent-exchange/hire","22.agent-exchange/02.hire",{"title":794,"path":795,"stem":796,"icon":255},"List an actor","/agent-exchange/list","22.agent-exchange/03.list",{"title":798,"path":799,"stem":800,"icon":199},"Invoke & leases","/agent-exchange/invoke","22.agent-exchange/04.invoke",{"title":802,"path":803,"stem":804,"icon":103},"Settlement & trust","/agent-exchange/settlement","22.agent-exchange/05.settlement",{"title":144,"path":806,"stem":807,"icon":147},"/agent-exchange/workflows","22.agent-exchange/06.workflows",{"title":809,"path":810,"stem":811,"children":812,"icon":171},"Runners","/runners","23.runners/1.index",[813,815],{"title":814,"path":810,"stem":811,"icon":171},"Runner groups",{"title":816,"path":817,"stem":818,"icon":819},"Purposes & integrations","/runners/purposes","23.runners/16.purposes","i-lucide-layers",{"title":821,"path":822,"stem":823,"children":824,"icon":826},"Chat","/chat","24.chat/01.index",[825,827,831,836,840,845,850,854,859,863,868,873,877,882,887,891,895,900,905],{"title":821,"path":822,"stem":823,"icon":826},"i-lucide-messages-square",{"title":828,"path":829,"stem":830,"icon":531},"Enable and publish","/chat/enable-and-publish","24.chat/02.enable-and-publish",{"title":832,"path":833,"stem":834,"icon":835},"Theme and customization","/chat/theme-and-customization","24.chat/03.theme-and-customization","i-lucide-palette",{"title":837,"path":838,"stem":839,"icon":180},"Members and moderation","/chat/members-and-moderation","24.chat/04.members-and-moderation",{"title":841,"path":842,"stem":843,"icon":844},"Channels","/chat/channels","24.chat/05.channels","i-lucide-hash",{"title":846,"path":847,"stem":848,"icon":849},"Using the chat","/chat/using-the-chat","24.chat/06.using-the-chat","i-lucide-message-circle",{"title":851,"path":852,"stem":853,"icon":15},"Actors in chat","/chat/actors-in-chat","24.chat/07.actors-in-chat",{"title":855,"path":856,"stem":857,"icon":858},"Internal support actor","/chat/internal-support-actor","24.chat/08.internal-support-actor","i-lucide-life-buoy",{"title":860,"path":861,"stem":862,"icon":199},"API and console","/chat/api-and-console","24.chat/09.api-and-console",{"title":864,"path":865,"stem":866,"icon":867},"Limits","/chat/limits","24.chat/10.limits","i-lucide-triangle-alert",{"title":869,"path":870,"stem":871,"icon":872},"Structured chat with DGI","/chat/structured-chat","24.chat/11.structured-chat","i-lucide-layout-list",{"title":874,"path":875,"stem":876,"icon":44},"Option A: hosted chat with DGI","/chat/option-a-hosted-chat","24.chat/12.option-a-hosted-chat",{"title":878,"path":879,"stem":880,"icon":881},"Option B: embed the chat component","/chat/option-b-embed-component","24.chat/13.option-b-embed-component","i-lucide-component",{"title":883,"path":884,"stem":885,"icon":886},"Option C: custom client (wire contract)","/chat/option-c-custom-client","24.chat/14.option-c-custom-client","i-lucide-braces",{"title":888,"path":889,"stem":890,"icon":649},"Cards, live updates and proactive posts","/chat/cards-live-and-proactive","24.chat/16.cards-live-and-proactive",{"title":892,"path":893,"stem":894,"icon":130},"Structured chat security model","/chat/structured-chat-security","24.chat/17.structured-chat-security",{"title":896,"path":897,"stem":898,"icon":899},"Option D: any app or API (dgi.chat)","/chat/option-d-chat-api","24.chat/18.option-d-chat-api","i-lucide-plug",{"title":901,"path":902,"stem":903,"icon":904},"Living Surfaces","/chat/living-surfaces","24.chat/20.living-surfaces","i-lucide-sprout",{"title":906,"path":907,"stem":908,"icon":909},"Connect your WhatsApp number","/chat/whatsapp","24.chat/21.whatsapp","i-lucide-phone",{"title":911,"path":912,"stem":913,"children":914,"icon":152},"DGI","/dgi","25.dgi/1.index",[915,917,921,925,929,933],{"title":916,"path":912,"stem":913,"icon":152},"What is DGI",{"title":154,"path":918,"stem":919,"icon":920},"/dgi/how-it-works","25.dgi/2.how-it-works","i-lucide-cog",{"title":922,"path":923,"stem":924,"icon":564},"Interfaces","/dgi/interfaces","25.dgi/3.interfaces",{"title":926,"path":927,"stem":928,"icon":52},"Quickstart","/dgi/quickstart","25.dgi/4.quickstart",{"title":930,"path":931,"stem":932,"icon":130},"Trust and safety","/dgi/trust-and-safety","25.dgi/5.trust-and-safety",{"title":934,"path":935,"stem":936,"icon":937},"FAQ","/dgi/faq","25.dgi/6.faq","i-lucide-circle-help",{"title":939,"path":940,"stem":941,"children":942,"icon":736},"Media","/media","26.media/01.index",[943,944,948,953,957,962,967,971,975,979,982],{"title":939,"path":940,"stem":941,"icon":736},{"title":945,"path":946,"stem":947,"icon":899},"Set up the studio","/media/set-up","26.media/02.set-up",{"title":949,"path":950,"stem":951,"icon":952},"Files, covers and looks","/media/files-covers-and-looks","26.media/03.files-covers-and-looks","i-lucide-images",{"title":841,"path":954,"stem":955,"icon":956},"/media/channels","26.media/04.channels","i-lucide-tv",{"title":958,"path":959,"stem":960,"icon":961},"Posts and review","/media/posts-and-review","26.media/05.posts-and-review","i-lucide-send",{"title":963,"path":964,"stem":965,"icon":966},"Video templates","/media/video-templates","26.media/06.video-templates","i-lucide-film",{"title":968,"path":969,"stem":970,"icon":736},"Render videos","/media/render-videos","26.media/07.render-videos",{"title":972,"path":973,"stem":974,"icon":571},"Templates as code","/media/templates-as-code","26.media/08.templates-as-code",{"title":976,"path":977,"stem":978,"icon":15},"Agents and media","/media/agents-and-media","26.media/09.agents-and-media",{"title":210,"path":980,"stem":981,"icon":142},"/media/reference","26.media/10.reference",{"title":983,"path":984,"stem":985,"icon":858},"Limits and troubleshooting","/media/limits-and-troubleshooting","26.media/11.limits-and-troubleshooting",{"title":987,"path":988,"stem":989,"children":990,"icon":992},"Vault","/vault","27.vault/01.index",[991,993,997,1001,1005,1010],{"title":987,"path":988,"stem":989,"icon":992},"i-lucide-vault",{"title":994,"path":995,"stem":996,"icon":25},"Secrets","/vault/secrets","27.vault/02.secrets",{"title":998,"path":999,"stem":1000,"icon":130},"Access policies","/vault/access-policies","27.vault/03.access-policies",{"title":1002,"path":1003,"stem":1004,"icon":961},"API access","/vault/api-access","27.vault/04.api-access",{"title":1006,"path":1007,"stem":1008,"icon":1009},"Audit log and keys","/vault/audit-and-keys","27.vault/05.audit-and-keys","i-lucide-scroll-text",{"title":210,"path":1011,"stem":1012,"icon":142},"/vault/reference","27.vault/06.reference",{"title":1014,"path":1015,"stem":1016,"children":1017,"icon":39},"Build apps","/build-apps","28.build-apps/01.index",[1018,1019,1023,1028,1032,1036,1040,1045],{"title":1014,"path":1015,"stem":1016,"icon":39},{"title":1020,"path":1021,"stem":1022,"icon":147},"Backend","/build-apps/backend","28.build-apps/02.backend",{"title":1024,"path":1025,"stem":1026,"icon":1027},"Modules and feature flags","/build-apps/modules-and-feature-flags","28.build-apps/03.modules-and-feature-flags","i-lucide-toggle-right",{"title":1029,"path":1030,"stem":1031,"icon":117},"Environments","/build-apps/environments","28.build-apps/04.environments",{"title":1033,"path":1034,"stem":1035,"icon":83},"Pricing and limits","/build-apps/pricing-and-limits","28.build-apps/05.pricing-and-limits",{"title":1037,"path":1038,"stem":1039,"icon":162},"Workspaces","/build-apps/workspaces","28.build-apps/06.workspaces",{"title":1041,"path":1042,"stem":1043,"icon":1044},"End-user authoring","/build-apps/end-user-authoring","28.build-apps/07.end-user-authoring","i-lucide-pencil-ruler",{"title":1046,"path":1047,"stem":1048,"icon":34},"Operate","/build-apps/operate","28.build-apps/08.operate",{"title":1050,"path":1051,"stem":1052,"children":1053,"icon":39},"Cockpit app","/cockpit","28.cockpit/1.index",[1054,1055,1060,1064,1068,1072,1076,1080,1084,1088,1092,1096,1100,1105,1110,1114,1118,1122,1127,1132],{"title":1050,"path":1051,"stem":1052,"icon":39},{"title":1056,"path":1057,"stem":1058,"icon":1059},"Overview, Decisions and Activity","/cockpit/overview-decisions-activity","28.cockpit/10.overview-decisions-activity","i-lucide-inbox",{"title":1061,"path":1062,"stem":1063,"icon":108},"Tickets","/cockpit/tickets","28.cockpit/11.tickets",{"title":1065,"path":1066,"stem":1067,"icon":147},"Workflows builder","/cockpit/workflows-builder","28.cockpit/12.workflows-builder",{"title":1069,"path":1070,"stem":1071,"icon":15},"Agents and Coding","/cockpit/agents-and-coding","28.cockpit/13.agents-and-coding",{"title":1073,"path":1074,"stem":1075,"icon":39},"Runners and Connections","/cockpit/apps-runners-connections","28.cockpit/14.apps-runners-connections",{"title":1077,"path":1078,"stem":1079,"icon":427},"Organization — people, access and cost","/cockpit/organization-people-access-cost","28.cockpit/15.organization-people-access-cost",{"title":1081,"path":1082,"stem":1083,"icon":899},"AI tools and MCP","/cockpit/ai-tools-and-mcp","28.cockpit/16.ai-tools-and-mcp",{"title":1085,"path":1086,"stem":1087,"icon":826},"App chats and shared chats","/cockpit/app-chats","28.cockpit/17.app-chats",{"title":1089,"path":1090,"stem":1091,"icon":564},"Apps mode","/cockpit/apps-mode","28.cockpit/18.apps-mode",{"title":1093,"path":1094,"stem":1095,"icon":83},"App infrastructure","/cockpit/app-infrastructure","28.cockpit/19.app-infrastructure",{"title":1097,"path":1098,"stem":1099,"icon":659},"Install and sign in","/cockpit/install-and-sign-in","28.cockpit/2.install-and-sign-in",{"title":1101,"path":1102,"stem":1103,"icon":1104},"App files, settings and flags","/cockpit/app-files-settings-flags","28.cockpit/20.app-files-settings-flags","i-lucide-folder-cog",{"title":1106,"path":1107,"stem":1108,"icon":1109},"Cards in the chat","/cockpit/chat-cards","28.cockpit/21.chat-cards","i-lucide-layout-panel-left",{"title":1111,"path":1112,"stem":1113,"icon":229},"App modules","/cockpit/app-modules","28.cockpit/22.app-modules",{"title":1115,"path":1116,"stem":1117,"icon":117},"App environments","/cockpit/app-environments","28.cockpit/23.app-environments",{"title":1119,"path":1120,"stem":1121,"icon":125},"First run and onboarding","/cockpit/first-run-onboarding","28.cockpit/3.first-run-onboarding",{"title":1123,"path":1124,"stem":1125,"icon":1126},"Navigation and shortcuts","/cockpit/navigation-and-shortcuts","28.cockpit/4.navigation-and-shortcuts","i-lucide-keyboard",{"title":1128,"path":1129,"stem":1130,"icon":1131},"About, settings and updates","/cockpit/about-settings-and-updates","28.cockpit/5.about-settings-and-updates","i-lucide-info",{"title":308,"path":1133,"stem":1134,"icon":858},"/cockpit/troubleshooting","28.cockpit/6.troubleshooting",{"title":1136,"path":1137,"stem":1138,"children":1139,"icon":1141},"CRM","/crm","29.crm/01.index",[1140,1142,1146,1150],{"title":1136,"path":1137,"stem":1138,"icon":1141},"i-lucide-contact",{"title":1143,"path":1144,"stem":1145,"icon":180},"Contacts and leads","/crm/contacts-and-leads","29.crm/02.contacts-and-leads",{"title":1147,"path":1148,"stem":1149,"icon":130},"Privacy and erasure","/crm/privacy-and-erasure","29.crm/03.privacy-and-erasure",{"title":210,"path":1151,"stem":1152,"icon":142},"/crm/reference","29.crm/04.reference",{"title":1154,"path":1155,"stem":1156,"children":1157,"icon":631},"Storage","/storage","29.storage/1.index",[1158,1160],{"title":1159,"path":1155,"stem":1156,"icon":631},"Orkestia storage",{"title":1161,"path":1162,"stem":1163,"icon":1164},"Where to use it","/storage/where-to-use","29.storage/2.where-to-use","i-lucide-map",{"title":1166,"path":1167,"stem":1168,"children":1169,"icon":44},"Browser","/browser","30.browser/01.index",[1170,1172,1176,1180],{"title":1171,"path":1167,"stem":1168,"icon":44},"Orkestia Browser",{"title":1173,"path":1174,"stem":1175,"icon":899},"Connect your Chrome","/browser/connect","30.browser/02.connect",{"title":1177,"path":1178,"stem":1179,"icon":130},"Sessions and approvals","/browser/sessions-and-approvals","30.browser/03.sessions-and-approvals",{"title":1181,"path":1182,"stem":1183,"icon":296},"Agent tools","/browser/agent-tools","30.browser/04.agent-tools",{"title":1185,"path":1186,"stem":1187,"children":1188,"icon":541},"Registry","/registry","31.registry/1.index",[1189],{"title":1190,"path":1186,"stem":1187,"icon":541},"Orkestia Registry",{"title":1192,"path":1193,"stem":1194,"children":1195,"icon":404},"Packages and Git","/packages-and-git","32.packages-and-git/1.index",[1196],{"title":1192,"path":1193,"stem":1194,"icon":404},{"id":1198,"title":596,"body":1199,"description":3536,"extension":3537,"links":3538,"meta":3539,"navigation":3540,"path":597,"seo":3541,"stem":598,"__hash__":3542},"docs/17.appdata/10.end-user-agents.md",{"type":1200,"value":1201,"toc":3522},"minimark",[1202,1210,1221,1226,1234,1350,1357,1361,1376,1425,1444,1450,1454,1464,1546,1579,1583,1593,1741,1815,1875,1879,1891,1898,1902,1908,2115,2167,2171,2174,2180,2477,2484,2490,2915,2935,2939,2946,2984,2987,2990,3189,3264,3268,3425,3429,3490,3494,3518],[1203,1204,1205,1206,1209],"p",{},"You can give the people who use your app a chat agent that creates, reads, updates and deletes their App Data from a conversation. The agent is ",[1207,1208,911],"a",{"href":912},", started as the person who is talking. It can only do what that person could do, and it never touches the tables you set aside.",[1203,1211,1212,1213,1216,1217,1220],{},"This page shows how to set that up and how each control fits. It assumes you already ",[1207,1214,1215],{"href":601},"declare"," your tables and ",[1207,1218,1219],{"href":615},"expose"," compositions to end users.",[1222,1223,1225],"h2",{"id":1224},"what-decides-what-the-agent-can-do","What decides what the agent can do",[1203,1227,1228,1229,1233],{},"An agent picks its table from the conversation, so it cannot be pinned the way a composition is. Several independent controls apply instead, and ",[1230,1231,1232],"strong",{},"every one of them must allow an operation"," for it to run:",[1235,1236,1237,1253],"table",{},[1238,1239,1240],"thead",{},[1241,1242,1243,1247,1250],"tr",{},[1244,1245,1246],"th",{},"Control",[1244,1248,1249],{},"Set by",[1244,1251,1252],{},"Answers",[1254,1255,1256,1271,1285,1299,1312,1326,1337],"tbody",{},[1241,1257,1258,1262,1268],{},[1259,1260,1261],"td",{},"Exposure",[1259,1263,1264],{},[1265,1266,1267],"code",{},"identity.app.expose-virtual-workflow",[1259,1269,1270],{},"Can this user start the agent at all?",[1241,1272,1273,1276,1282],{},[1259,1274,1275],{},"Ownership",[1259,1277,1278,1279],{},"the table's ",[1265,1280,1281],{},"ownership.kind",[1259,1283,1284],{},"Which rows: the user's own, the whole app's, or the active workspace's?",[1241,1286,1287,1290,1296],{},[1259,1288,1289],{},"Role",[1259,1291,1292,1293],{},"workspace capabilities ",[1265,1294,1295],{},"{namespace}:{verb}",[1259,1297,1298],{},"May this user's role use this module, and with which verb?",[1241,1300,1301,1304,1309],{},[1259,1302,1303],{},"Module flag",[1259,1305,1306],{},[1265,1307,1308],{},"policy.feature-flag.apply",[1259,1310,1311],{},"Is this module on for this app?",[1241,1313,1314,1317,1323],{},[1259,1315,1316],{},"Write policy",[1259,1318,1319,1320],{},"the table's declared ",[1265,1321,1322],{},"access_mode",[1259,1324,1325],{},"May end users create, update or delete here at all?",[1241,1327,1328,1331,1334],{},[1259,1329,1330],{},"Data scope",[1259,1332,1333],{},"the agent's profile",[1259,1335,1336],{},"Which databases and tables may this agent use?",[1241,1338,1339,1342,1347],{},[1259,1340,1341],{},"Reserved tables",[1259,1343,1278,1344],{},[1265,1345,1346],{},"end_user_scope",[1259,1348,1349],{},"Is this table off-limits to every agent?",[1203,1351,1352,1353,1356],{},"The agent can never do more than the user could do directly. The data scope and reserved tables only ever ",[1230,1354,1355],{},"remove"," access; they never grant it.",[1222,1358,1360],{"id":1359},"step-0-check-your-existing-exposures","Step 0: check your existing exposures",[1203,1362,1363,1364,1367,1368,1371,1372,1375],{},"An exposed composition whose ",[1265,1365,1366],{},"database_slug",", ",[1265,1369,1370],{},"table_slug"," or ",[1265,1373,1374],{},"operations"," come from the caller lets any user reach any table, whether or not they go through the agent. New exposures like that are refused. Check for older ones:",[1377,1378,1383],"pre",{"className":1379,"code":1380,"language":1381,"meta":1382,"style":1382},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// identity.app.exposure-audit  (omit identity_app_uuid to check every app)\n{ \"identity_app_uuid\": \"\u003Cyour app>\" }\n","json","",[1265,1384,1385,1394],{"__ignoreMap":1382},[1386,1387,1390],"span",{"class":1388,"line":1389},"line",1,[1386,1391,1393],{"class":1392},"sHwdD","// identity.app.exposure-audit  (omit identity_app_uuid to check every app)\n",[1386,1395,1397,1401,1404,1408,1411,1414,1416,1420,1422],{"class":1388,"line":1396},2,[1386,1398,1400],{"class":1399},"sMK4o","{",[1386,1402,1403],{"class":1399}," \"",[1386,1405,1407],{"class":1406},"spNyl","identity_app_uuid",[1386,1409,1410],{"class":1399},"\"",[1386,1412,1413],{"class":1399},":",[1386,1415,1403],{"class":1399},[1386,1417,1419],{"class":1418},"sfazB","\u003Cyour app>",[1386,1421,1410],{"class":1399},[1386,1423,1424],{"class":1399}," }\n",[1203,1426,1427,1428,1431,1432,1435,1436,1439,1440,1443],{},"Each finding names the composition and the free input (",[1265,1429,1430],{},"unscoped_inputs: [\"operations\"]",", for example). Remove it with ",[1265,1433,1434],{},"identity.app.unexpose-virtual-workflow",", or replace it with one composition per table whose selectors are ",[1265,1437,1438],{},"static",". The goal is ",[1265,1441,1442],{},"finding_count: 0",".",[1445,1446,1447],"note",{},[1203,1448,1449],{},"The protections below cover the agent's path. A composition that still takes a free table selector is a second door to the same tables, so close it first.",[1222,1451,1453],{"id":1452},"step-1-reserve-the-tables-the-agent-must-never-touch","Step 1: reserve the tables the agent must never touch",[1203,1455,1456,1457,1460,1461,1413],{},"Some tables are plumbing: a chat relay, an outbox, idempotency keys, identity bindings. Mark them ",[1230,1458,1459],{},"reserved"," in their ",[1265,1462,1463],{},"ownership.metadata",[1377,1465,1469],{"className":1466,"code":1467,"language":1468,"meta":1382,"style":1382},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","      - slug: conversation_messages\n        ownership:\n          kind: owner\n          metadata:\n            end_user_scope: { version: 1, reserved: true }\n","yaml",[1265,1470,1471,1485,1493,1504,1512],{"__ignoreMap":1382},[1386,1472,1473,1476,1480,1482],{"class":1388,"line":1389},[1386,1474,1475],{"class":1399},"      -",[1386,1477,1479],{"class":1478},"swJcz"," slug",[1386,1481,1413],{"class":1399},[1386,1483,1484],{"class":1418}," conversation_messages\n",[1386,1486,1487,1490],{"class":1388,"line":1396},[1386,1488,1489],{"class":1478},"        ownership",[1386,1491,1492],{"class":1399},":\n",[1386,1494,1496,1499,1501],{"class":1388,"line":1495},3,[1386,1497,1498],{"class":1478},"          kind",[1386,1500,1413],{"class":1399},[1386,1502,1503],{"class":1418}," owner\n",[1386,1505,1507,1510],{"class":1388,"line":1506},4,[1386,1508,1509],{"class":1478},"          metadata",[1386,1511,1492],{"class":1399},[1386,1513,1515,1518,1520,1523,1526,1528,1532,1535,1538,1540,1544],{"class":1388,"line":1514},5,[1386,1516,1517],{"class":1478},"            end_user_scope",[1386,1519,1413],{"class":1399},[1386,1521,1522],{"class":1399}," {",[1386,1524,1525],{"class":1478}," version",[1386,1527,1413],{"class":1399},[1386,1529,1531],{"class":1530},"sbssI"," 1",[1386,1533,1534],{"class":1399},",",[1386,1536,1537],{"class":1478}," reserved",[1386,1539,1413],{"class":1399},[1386,1541,1543],{"class":1542},"sfNiH"," true",[1386,1545,1424],{"class":1399},[1547,1548,1549,1553,1556,1562],"ul",{},[1550,1551,1552],"li",{},"No agent reaches a reserved table through a wildcard. An agent that declares no scope gets \"every table except the reserved ones\".",[1550,1554,1555],{},"An agent reaches a reserved table only if its profile names that exact database and table.",[1550,1557,1558,1559,1561],{},"Your own compositions that name the table (",[1265,1560,1370],{}," static) keep working. Reserving a table does not break your app's own features that use it.",[1550,1563,1564,1567,1568,1367,1571,1574,1575,1578],{},[1265,1565,1566],{},"structure.apply"," validates the declaration. Valid on ",[1265,1569,1570],{},"owner",[1265,1572,1573],{},"app"," and ",[1265,1576,1577],{},"organization"," tables.",[1222,1580,1582],{"id":1581},"step-2-decide-who-may-write-your-app-wide-tables","Step 2: decide who may write your app-wide tables",[1203,1584,1585,1586,1588,1589,1592],{},"An ",[1265,1587,1573],{}," table is shared by every user of the app: a catalog, a list of companies, a set of seasons. By default any user can add rows to it and edit the rows they added. To change that, put the table in ",[1230,1590,1591],{},"declared mode"," and give each write verb a rule:",[1377,1594,1596],{"className":1466,"code":1595,"language":1468,"meta":1382,"style":1382},"      - slug: companies\n        ownership:\n          kind: app\n          metadata:\n            access_mode: { version: 1, declared: true }\n        access_policies:\n          - { operation: create, kind: app_admin_only }\n          - { operation: update, kind: app_admin_only }\n          - { operation: delete, kind: deny }\n",[1265,1597,1598,1609,1615,1624,1630,1656,1664,1692,1716],{"__ignoreMap":1382},[1386,1599,1600,1602,1604,1606],{"class":1388,"line":1389},[1386,1601,1475],{"class":1399},[1386,1603,1479],{"class":1478},[1386,1605,1413],{"class":1399},[1386,1607,1608],{"class":1418}," companies\n",[1386,1610,1611,1613],{"class":1388,"line":1396},[1386,1612,1489],{"class":1478},[1386,1614,1492],{"class":1399},[1386,1616,1617,1619,1621],{"class":1388,"line":1495},[1386,1618,1498],{"class":1478},[1386,1620,1413],{"class":1399},[1386,1622,1623],{"class":1418}," app\n",[1386,1625,1626,1628],{"class":1388,"line":1506},[1386,1627,1509],{"class":1478},[1386,1629,1492],{"class":1399},[1386,1631,1632,1635,1637,1639,1641,1643,1645,1647,1650,1652,1654],{"class":1388,"line":1514},[1386,1633,1634],{"class":1478},"            access_mode",[1386,1636,1413],{"class":1399},[1386,1638,1522],{"class":1399},[1386,1640,1525],{"class":1478},[1386,1642,1413],{"class":1399},[1386,1644,1531],{"class":1530},[1386,1646,1534],{"class":1399},[1386,1648,1649],{"class":1478}," declared",[1386,1651,1413],{"class":1399},[1386,1653,1543],{"class":1542},[1386,1655,1424],{"class":1399},[1386,1657,1659,1662],{"class":1388,"line":1658},6,[1386,1660,1661],{"class":1478},"        access_policies",[1386,1663,1492],{"class":1399},[1386,1665,1667,1670,1672,1675,1677,1680,1682,1685,1687,1690],{"class":1388,"line":1666},7,[1386,1668,1669],{"class":1399},"          -",[1386,1671,1522],{"class":1399},[1386,1673,1674],{"class":1478}," operation",[1386,1676,1413],{"class":1399},[1386,1678,1679],{"class":1418}," create",[1386,1681,1534],{"class":1399},[1386,1683,1684],{"class":1478}," kind",[1386,1686,1413],{"class":1399},[1386,1688,1689],{"class":1418}," app_admin_only",[1386,1691,1424],{"class":1399},[1386,1693,1695,1697,1699,1701,1703,1706,1708,1710,1712,1714],{"class":1388,"line":1694},8,[1386,1696,1669],{"class":1399},[1386,1698,1522],{"class":1399},[1386,1700,1674],{"class":1478},[1386,1702,1413],{"class":1399},[1386,1704,1705],{"class":1418}," update",[1386,1707,1534],{"class":1399},[1386,1709,1684],{"class":1478},[1386,1711,1413],{"class":1399},[1386,1713,1689],{"class":1418},[1386,1715,1424],{"class":1399},[1386,1717,1719,1721,1723,1725,1727,1730,1732,1734,1736,1739],{"class":1388,"line":1718},9,[1386,1720,1669],{"class":1399},[1386,1722,1522],{"class":1399},[1386,1724,1674],{"class":1478},[1386,1726,1413],{"class":1399},[1386,1728,1729],{"class":1418}," delete",[1386,1731,1534],{"class":1399},[1386,1733,1684],{"class":1478},[1386,1735,1413],{"class":1399},[1386,1737,1738],{"class":1418}," deny",[1386,1740,1424],{"class":1399},[1235,1742,1743,1756],{},[1238,1744,1745],{},[1241,1746,1747,1750,1753],{},[1244,1748,1749],{},"Kind",[1244,1751,1752],{},"Who may write",[1244,1754,1755],{},"Rows",[1254,1757,1758,1771,1787,1799],{},[1241,1759,1760,1765,1768],{},[1259,1761,1762],{},[1265,1763,1764],{},"deny",[1259,1766,1767],{},"No end user",[1259,1769,1770],{},"—",[1241,1772,1773,1778,1784],{},[1259,1774,1775],{},[1265,1776,1777],{},"app_admin_only",[1259,1779,1780,1781],{},"Users whose role holds ",[1265,1782,1783],{},"data:\u003Ctable>:write",[1259,1785,1786],{},"Every row",[1241,1788,1789,1794,1797],{},[1259,1790,1791],{},[1265,1792,1793],{},"app_private",[1259,1795,1796],{},"Any user of the app",[1259,1798,1786],{},[1241,1800,1801,1810,1812],{},[1259,1802,1803,1806,1807],{},[1265,1804,1805],{},"owner_forced"," / ",[1265,1808,1809],{},"owner_only",[1259,1811,1796],{},[1259,1813,1814],{},"Their own rows (the default behaviour)",[1547,1816,1817,1834,1847,1863,1869],{},[1550,1818,1819,1822,1823,1574,1825,1827,1828,1574,1831,1443],{},[1230,1820,1821],{},"Reads stay open."," In declared mode, every user of the app can still read every row. ",[1265,1824,1764],{},[1265,1826,1777],{}," are refused on ",[1265,1829,1830],{},"read",[1265,1832,1833],{},"query",[1550,1835,1836,1839,1840,1367,1843,1846],{},[1230,1837,1838],{},"Your own writes are not affected."," Rows you publish from the organization side (",[1265,1841,1842],{},"appdata.publish-as-app",[1265,1844,1845],{},"appdata.upsert-as-app",") are not end-user writes. Neither are writes by Staff actors granted on the table.",[1550,1848,1849,1852,1853,1855,1856,1859,1860,1443],{},[1230,1850,1851],{},"Grant the capability to the role that edits."," For ",[1265,1854,1777],{},", add ",[1265,1857,1858],{},"data:companies:write"," to the group with ",[1265,1861,1862],{},"identity.end-user.group.define",[1550,1864,1865,1868],{},[1230,1866,1867],{},"Instances enforce it too."," On an app with its own Postgres instance, the database policies enforce the same rule, so the Data API cannot get around it.",[1550,1870,1871,1872,1874],{},"Tables without ",[1265,1873,1322],{}," behave exactly as before.",[1222,1876,1878],{"id":1877},"step-3-put-module-data-behind-roles","Step 3: put module data behind roles",[1203,1880,1881,1882,1884,1885,1888,1889,1443],{},"Product data that belongs to a customer workspace (a farm, a clinic, a company) is an ",[1265,1883,1577],{}," table with a ",[1265,1886,1887],{},"capability_namespace"," per module. A user's role in their active workspace decides each verb, and a module flag can switch the module off per app. See ",[1207,1890,610],{"href":611},[1203,1892,1893,1894,1897],{},"The agent obeys this unchanged, because it runs as the user. If a role only holds ",[1265,1895,1896],{},"harvest:read",", the agent can read harvests for that user and cannot change them.",[1222,1899,1901],{"id":1900},"step-4-create-the-agents-profile","Step 4: create the agent's profile",[1203,1903,1904,1905,1413],{},"One profile per app, saved by an organization admin with ",[1265,1906,1907],{},"dgi.chat.profile.save",[1377,1909,1911],{"className":1379,"code":1910,"language":1381,"meta":1382,"style":1382},"{\n  \"name\": \"Farm assistant\",\n  \"identity_app_uuid\": \"\u003Cyour app>\",\n  \"allowed_workflow_types\": [\n    \"data.appdata.record.query\",\n    \"data.appdata.record.read\",\n    \"data.appdata.record.write\",\n    \"data.appdata.record.update\",\n    \"data.appdata.record.delete\"\n  ],\n  \"decision_engine\": \"llm\",\n  \"llm_fallback\": true,\n  \"locale\": \"pt-BR\",\n  \"prompt\": \"You help farm staff keep their records. Tables: farm.planting (plantings), farm.harvest (harvests) ...\"\n}\n",[1265,1912,1913,1918,1940,1958,1972,1984,1995,2006,2017,2027,2033,2054,2069,2090,2109],{"__ignoreMap":1382},[1386,1914,1915],{"class":1388,"line":1389},[1386,1916,1917],{"class":1399},"{\n",[1386,1919,1920,1923,1926,1928,1930,1932,1935,1937],{"class":1388,"line":1396},[1386,1921,1922],{"class":1399},"  \"",[1386,1924,1925],{"class":1406},"name",[1386,1927,1410],{"class":1399},[1386,1929,1413],{"class":1399},[1386,1931,1403],{"class":1399},[1386,1933,1934],{"class":1418},"Farm assistant",[1386,1936,1410],{"class":1399},[1386,1938,1939],{"class":1399},",\n",[1386,1941,1942,1944,1946,1948,1950,1952,1954,1956],{"class":1388,"line":1495},[1386,1943,1922],{"class":1399},[1386,1945,1407],{"class":1406},[1386,1947,1410],{"class":1399},[1386,1949,1413],{"class":1399},[1386,1951,1403],{"class":1399},[1386,1953,1419],{"class":1418},[1386,1955,1410],{"class":1399},[1386,1957,1939],{"class":1399},[1386,1959,1960,1962,1965,1967,1969],{"class":1388,"line":1506},[1386,1961,1922],{"class":1399},[1386,1963,1964],{"class":1406},"allowed_workflow_types",[1386,1966,1410],{"class":1399},[1386,1968,1413],{"class":1399},[1386,1970,1971],{"class":1399}," [\n",[1386,1973,1974,1977,1980,1982],{"class":1388,"line":1514},[1386,1975,1976],{"class":1399},"    \"",[1386,1978,1979],{"class":1418},"data.appdata.record.query",[1386,1981,1410],{"class":1399},[1386,1983,1939],{"class":1399},[1386,1985,1986,1988,1991,1993],{"class":1388,"line":1658},[1386,1987,1976],{"class":1399},[1386,1989,1990],{"class":1418},"data.appdata.record.read",[1386,1992,1410],{"class":1399},[1386,1994,1939],{"class":1399},[1386,1996,1997,1999,2002,2004],{"class":1388,"line":1666},[1386,1998,1976],{"class":1399},[1386,2000,2001],{"class":1418},"data.appdata.record.write",[1386,2003,1410],{"class":1399},[1386,2005,1939],{"class":1399},[1386,2007,2008,2010,2013,2015],{"class":1388,"line":1694},[1386,2009,1976],{"class":1399},[1386,2011,2012],{"class":1418},"data.appdata.record.update",[1386,2014,1410],{"class":1399},[1386,2016,1939],{"class":1399},[1386,2018,2019,2021,2024],{"class":1388,"line":1718},[1386,2020,1976],{"class":1399},[1386,2022,2023],{"class":1418},"data.appdata.record.delete",[1386,2025,2026],{"class":1399},"\"\n",[1386,2028,2030],{"class":1388,"line":2029},10,[1386,2031,2032],{"class":1399},"  ],\n",[1386,2034,2036,2038,2041,2043,2045,2047,2050,2052],{"class":1388,"line":2035},11,[1386,2037,1922],{"class":1399},[1386,2039,2040],{"class":1406},"decision_engine",[1386,2042,1410],{"class":1399},[1386,2044,1413],{"class":1399},[1386,2046,1403],{"class":1399},[1386,2048,2049],{"class":1418},"llm",[1386,2051,1410],{"class":1399},[1386,2053,1939],{"class":1399},[1386,2055,2057,2059,2062,2064,2066],{"class":1388,"line":2056},12,[1386,2058,1922],{"class":1399},[1386,2060,2061],{"class":1406},"llm_fallback",[1386,2063,1410],{"class":1399},[1386,2065,1413],{"class":1399},[1386,2067,2068],{"class":1399}," true,\n",[1386,2070,2072,2074,2077,2079,2081,2083,2086,2088],{"class":1388,"line":2071},13,[1386,2073,1922],{"class":1399},[1386,2075,2076],{"class":1406},"locale",[1386,2078,1410],{"class":1399},[1386,2080,1413],{"class":1399},[1386,2082,1403],{"class":1399},[1386,2084,2085],{"class":1418},"pt-BR",[1386,2087,1410],{"class":1399},[1386,2089,1939],{"class":1399},[1386,2091,2093,2095,2098,2100,2102,2104,2107],{"class":1388,"line":2092},14,[1386,2094,1922],{"class":1399},[1386,2096,2097],{"class":1406},"prompt",[1386,2099,1410],{"class":1399},[1386,2101,1413],{"class":1399},[1386,2103,1403],{"class":1399},[1386,2105,2106],{"class":1418},"You help farm staff keep their records. Tables: farm.planting (plantings), farm.harvest (harvests) ...",[1386,2108,2026],{"class":1399},[1386,2110,2112],{"class":1388,"line":2111},15,[1386,2113,2114],{"class":1399},"}\n",[1547,2116,2117,2128,2138,2149,2156],{},[1550,2118,2119,2123,2124,2127],{},[1230,2120,2121],{},[1265,2122,1407],{}," binds the profile to one app. A user of any other app is refused with ",[1265,2125,2126],{},"profile_not_for_app",". Without it, any app in your organization can use the profile.",[1550,2129,2130,2134,2135,1443],{},[1230,2131,2132],{},[1265,2133,1964],{}," limits which workflows the agent may start. Leave out the verbs you never want the agent to use, such as ",[1265,2136,2137],{},"record.delete",[1550,2139,2140,2145,2146,1443],{},[1230,2141,2142],{},[1265,2143,2144],{},"data_scope"," (optional) narrows the tables further. Omitted, the agent may use every table except the reserved ones. See ",[1207,2147,1330],{"href":2148},"#data-scope",[1550,2150,2151,2155],{},[1230,2152,2153],{},[1265,2154,2097],{}," is where you describe your tables and their meaning. The model picks tables from this description and the conversation.",[1550,2157,2158,2164,2165,1443],{},[1230,2159,2160,2163],{},[1265,2161,2162],{},"default_inputs"," only pre-fill values",", and the model can override them. Do not use them to limit tables; use ",[1265,2166,2144],{},[1222,2168,2170],{"id":2169},"step-5-expose-the-agent","Step 5: expose the agent",[1203,2172,2173],{},"End users only start exposed compositions. Expose two per app.",[1203,2175,2176,2179],{},[1230,2177,2178],{},"The chat turn",", with the profile fixed:",[1377,2181,2183],{"className":1379,"code":2182,"language":1381,"meta":1382,"style":1382},"{\n  \"name\": \"Farm assistant: chat\",\n  \"inputs\": [{ \"name\": \"message\", \"type\": \"STRING\", \"required\": true }],\n  \"layers\": [{ \"name\": \"turn\", \"steps\": [{\n    \"name\": \"turn\",\n    \"workflow_type\": \"dgi.chat.turn\",\n    \"input_mapping\": {\n      \"profile_uuid\": { \"source\": \"static\", \"value\": \"\u003Cprofile uuid>\" },\n      \"message\": { \"source\": \"input\", \"field\": \"message\" }\n    }\n  }]}]\n}\n",[1265,2184,2185,2189,2208,2272,2314,2332,2352,2366,2417,2463,2468,2473],{"__ignoreMap":1382},[1386,2186,2187],{"class":1388,"line":1389},[1386,2188,1917],{"class":1399},[1386,2190,2191,2193,2195,2197,2199,2201,2204,2206],{"class":1388,"line":1396},[1386,2192,1922],{"class":1399},[1386,2194,1925],{"class":1406},[1386,2196,1410],{"class":1399},[1386,2198,1413],{"class":1399},[1386,2200,1403],{"class":1399},[1386,2202,2203],{"class":1418},"Farm assistant: chat",[1386,2205,1410],{"class":1399},[1386,2207,1939],{"class":1399},[1386,2209,2210,2212,2215,2217,2219,2222,2224,2227,2229,2231,2233,2236,2238,2240,2242,2245,2247,2249,2251,2254,2256,2258,2260,2263,2265,2267,2269],{"class":1388,"line":1495},[1386,2211,1922],{"class":1399},[1386,2213,2214],{"class":1406},"inputs",[1386,2216,1410],{"class":1399},[1386,2218,1413],{"class":1399},[1386,2220,2221],{"class":1399}," [{",[1386,2223,1403],{"class":1399},[1386,2225,1925],{"class":2226},"sBMFI",[1386,2228,1410],{"class":1399},[1386,2230,1413],{"class":1399},[1386,2232,1403],{"class":1399},[1386,2234,2235],{"class":1418},"message",[1386,2237,1410],{"class":1399},[1386,2239,1534],{"class":1399},[1386,2241,1403],{"class":1399},[1386,2243,2244],{"class":2226},"type",[1386,2246,1410],{"class":1399},[1386,2248,1413],{"class":1399},[1386,2250,1403],{"class":1399},[1386,2252,2253],{"class":1418},"STRING",[1386,2255,1410],{"class":1399},[1386,2257,1534],{"class":1399},[1386,2259,1403],{"class":1399},[1386,2261,2262],{"class":2226},"required",[1386,2264,1410],{"class":1399},[1386,2266,1413],{"class":1399},[1386,2268,1543],{"class":1399},[1386,2270,2271],{"class":1399}," }],\n",[1386,2273,2274,2276,2279,2281,2283,2285,2287,2289,2291,2293,2295,2298,2300,2302,2304,2307,2309,2311],{"class":1388,"line":1506},[1386,2275,1922],{"class":1399},[1386,2277,2278],{"class":1406},"layers",[1386,2280,1410],{"class":1399},[1386,2282,1413],{"class":1399},[1386,2284,2221],{"class":1399},[1386,2286,1403],{"class":1399},[1386,2288,1925],{"class":2226},[1386,2290,1410],{"class":1399},[1386,2292,1413],{"class":1399},[1386,2294,1403],{"class":1399},[1386,2296,2297],{"class":1418},"turn",[1386,2299,1410],{"class":1399},[1386,2301,1534],{"class":1399},[1386,2303,1403],{"class":1399},[1386,2305,2306],{"class":2226},"steps",[1386,2308,1410],{"class":1399},[1386,2310,1413],{"class":1399},[1386,2312,2313],{"class":1399}," [{\n",[1386,2315,2316,2318,2320,2322,2324,2326,2328,2330],{"class":1388,"line":1514},[1386,2317,1976],{"class":1399},[1386,2319,1925],{"class":1530},[1386,2321,1410],{"class":1399},[1386,2323,1413],{"class":1399},[1386,2325,1403],{"class":1399},[1386,2327,2297],{"class":1418},[1386,2329,1410],{"class":1399},[1386,2331,1939],{"class":1399},[1386,2333,2334,2336,2339,2341,2343,2345,2348,2350],{"class":1388,"line":1658},[1386,2335,1976],{"class":1399},[1386,2337,2338],{"class":1530},"workflow_type",[1386,2340,1410],{"class":1399},[1386,2342,1413],{"class":1399},[1386,2344,1403],{"class":1399},[1386,2346,2347],{"class":1418},"dgi.chat.turn",[1386,2349,1410],{"class":1399},[1386,2351,1939],{"class":1399},[1386,2353,2354,2356,2359,2361,2363],{"class":1388,"line":1666},[1386,2355,1976],{"class":1399},[1386,2357,2358],{"class":1530},"input_mapping",[1386,2360,1410],{"class":1399},[1386,2362,1413],{"class":1399},[1386,2364,2365],{"class":1399}," {\n",[1386,2367,2368,2371,2374,2376,2378,2380,2382,2386,2388,2390,2392,2394,2396,2398,2400,2403,2405,2407,2409,2412,2414],{"class":1388,"line":1694},[1386,2369,2370],{"class":1399},"      \"",[1386,2372,2373],{"class":1478},"profile_uuid",[1386,2375,1410],{"class":1399},[1386,2377,1413],{"class":1399},[1386,2379,1522],{"class":1399},[1386,2381,1403],{"class":1399},[1386,2383,2385],{"class":2384},"su27w","source",[1386,2387,1410],{"class":1399},[1386,2389,1413],{"class":1399},[1386,2391,1403],{"class":1399},[1386,2393,1438],{"class":1418},[1386,2395,1410],{"class":1399},[1386,2397,1534],{"class":1399},[1386,2399,1403],{"class":1399},[1386,2401,2402],{"class":2384},"value",[1386,2404,1410],{"class":1399},[1386,2406,1413],{"class":1399},[1386,2408,1403],{"class":1399},[1386,2410,2411],{"class":1418},"\u003Cprofile uuid>",[1386,2413,1410],{"class":1399},[1386,2415,2416],{"class":1399}," },\n",[1386,2418,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2442,2444,2446,2448,2451,2453,2455,2457,2459,2461],{"class":1388,"line":1718},[1386,2420,2370],{"class":1399},[1386,2422,2235],{"class":1478},[1386,2424,1410],{"class":1399},[1386,2426,1413],{"class":1399},[1386,2428,1522],{"class":1399},[1386,2430,1403],{"class":1399},[1386,2432,2385],{"class":2384},[1386,2434,1410],{"class":1399},[1386,2436,1413],{"class":1399},[1386,2438,1403],{"class":1399},[1386,2440,2441],{"class":1418},"input",[1386,2443,1410],{"class":1399},[1386,2445,1534],{"class":1399},[1386,2447,1403],{"class":1399},[1386,2449,2450],{"class":2384},"field",[1386,2452,1410],{"class":1399},[1386,2454,1413],{"class":1399},[1386,2456,1403],{"class":1399},[1386,2458,2235],{"class":1418},[1386,2460,1410],{"class":1399},[1386,2462,1424],{"class":1399},[1386,2464,2465],{"class":1388,"line":2029},[1386,2466,2467],{"class":1399},"    }\n",[1386,2469,2470],{"class":1388,"line":2035},[1386,2471,2472],{"class":1399},"  }]}]\n",[1386,2474,2475],{"class":1388,"line":2056},[1386,2476,2114],{"class":1399},[1203,2478,2479,2480,2483],{},"To continue a conversation, also map ",[1265,2481,2482],{},"conversation_uuid"," from input.",[1203,2485,2486,2489],{},[1230,2487,2488],{},"The answer to a card."," Every write the agent proposes comes back as a confirmation card. The user confirms through this composition:",[1377,2491,2493],{"className":1379,"code":2492,"language":1381,"meta":1382,"style":1382},"{\n  \"name\": \"Farm assistant: respond\",\n  \"inputs\": [\n    { \"name\": \"conversation_uuid\", \"type\": \"STRING\", \"required\": true },\n    { \"name\": \"ui_id\", \"type\": \"STRING\", \"required\": true },\n    { \"name\": \"action\", \"type\": \"STRING\", \"required\": true }\n  ],\n  \"layers\": [{ \"name\": \"respond\", \"steps\": [{\n    \"name\": \"respond\",\n    \"workflow_type\": \"dgi.chat.respond\",\n    \"input_mapping\": {\n      \"conversation_uuid\": { \"source\": \"input\", \"field\": \"conversation_uuid\" },\n      \"ui_id\": { \"source\": \"input\", \"field\": \"ui_id\" },\n      \"action\": { \"source\": \"input\", \"field\": \"action\" }\n    }\n  }]}]\n}\n",[1265,2494,2495,2499,2518,2530,2579,2628,2677,2681,2720,2738,2757,2769,2813,2857,2901,2905,2910],{"__ignoreMap":1382},[1386,2496,2497],{"class":1388,"line":1389},[1386,2498,1917],{"class":1399},[1386,2500,2501,2503,2505,2507,2509,2511,2514,2516],{"class":1388,"line":1396},[1386,2502,1922],{"class":1399},[1386,2504,1925],{"class":1406},[1386,2506,1410],{"class":1399},[1386,2508,1413],{"class":1399},[1386,2510,1403],{"class":1399},[1386,2512,2513],{"class":1418},"Farm assistant: respond",[1386,2515,1410],{"class":1399},[1386,2517,1939],{"class":1399},[1386,2519,2520,2522,2524,2526,2528],{"class":1388,"line":1495},[1386,2521,1922],{"class":1399},[1386,2523,2214],{"class":1406},[1386,2525,1410],{"class":1399},[1386,2527,1413],{"class":1399},[1386,2529,1971],{"class":1399},[1386,2531,2532,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577],{"class":1388,"line":1506},[1386,2533,2534],{"class":1399},"    {",[1386,2536,1403],{"class":1399},[1386,2538,1925],{"class":2226},[1386,2540,1410],{"class":1399},[1386,2542,1413],{"class":1399},[1386,2544,1403],{"class":1399},[1386,2546,2482],{"class":1418},[1386,2548,1410],{"class":1399},[1386,2550,1534],{"class":1399},[1386,2552,1403],{"class":1399},[1386,2554,2244],{"class":2226},[1386,2556,1410],{"class":1399},[1386,2558,1413],{"class":1399},[1386,2560,1403],{"class":1399},[1386,2562,2253],{"class":1418},[1386,2564,1410],{"class":1399},[1386,2566,1534],{"class":1399},[1386,2568,1403],{"class":1399},[1386,2570,2262],{"class":2226},[1386,2572,1410],{"class":1399},[1386,2574,1413],{"class":1399},[1386,2576,1543],{"class":1399},[1386,2578,2416],{"class":1399},[1386,2580,2581,2583,2585,2587,2589,2591,2593,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626],{"class":1388,"line":1514},[1386,2582,2534],{"class":1399},[1386,2584,1403],{"class":1399},[1386,2586,1925],{"class":2226},[1386,2588,1410],{"class":1399},[1386,2590,1413],{"class":1399},[1386,2592,1403],{"class":1399},[1386,2594,2595],{"class":1418},"ui_id",[1386,2597,1410],{"class":1399},[1386,2599,1534],{"class":1399},[1386,2601,1403],{"class":1399},[1386,2603,2244],{"class":2226},[1386,2605,1410],{"class":1399},[1386,2607,1413],{"class":1399},[1386,2609,1403],{"class":1399},[1386,2611,2253],{"class":1418},[1386,2613,1410],{"class":1399},[1386,2615,1534],{"class":1399},[1386,2617,1403],{"class":1399},[1386,2619,2262],{"class":2226},[1386,2621,1410],{"class":1399},[1386,2623,1413],{"class":1399},[1386,2625,1543],{"class":1399},[1386,2627,2416],{"class":1399},[1386,2629,2630,2632,2634,2636,2638,2640,2642,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675],{"class":1388,"line":1658},[1386,2631,2534],{"class":1399},[1386,2633,1403],{"class":1399},[1386,2635,1925],{"class":2226},[1386,2637,1410],{"class":1399},[1386,2639,1413],{"class":1399},[1386,2641,1403],{"class":1399},[1386,2643,2644],{"class":1418},"action",[1386,2646,1410],{"class":1399},[1386,2648,1534],{"class":1399},[1386,2650,1403],{"class":1399},[1386,2652,2244],{"class":2226},[1386,2654,1410],{"class":1399},[1386,2656,1413],{"class":1399},[1386,2658,1403],{"class":1399},[1386,2660,2253],{"class":1418},[1386,2662,1410],{"class":1399},[1386,2664,1534],{"class":1399},[1386,2666,1403],{"class":1399},[1386,2668,2262],{"class":2226},[1386,2670,1410],{"class":1399},[1386,2672,1413],{"class":1399},[1386,2674,1543],{"class":1399},[1386,2676,1424],{"class":1399},[1386,2678,2679],{"class":1388,"line":1666},[1386,2680,2032],{"class":1399},[1386,2682,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2706,2708,2710,2712,2714,2716,2718],{"class":1388,"line":1694},[1386,2684,1922],{"class":1399},[1386,2686,2278],{"class":1406},[1386,2688,1410],{"class":1399},[1386,2690,1413],{"class":1399},[1386,2692,2221],{"class":1399},[1386,2694,1403],{"class":1399},[1386,2696,1925],{"class":2226},[1386,2698,1410],{"class":1399},[1386,2700,1413],{"class":1399},[1386,2702,1403],{"class":1399},[1386,2704,2705],{"class":1418},"respond",[1386,2707,1410],{"class":1399},[1386,2709,1534],{"class":1399},[1386,2711,1403],{"class":1399},[1386,2713,2306],{"class":2226},[1386,2715,1410],{"class":1399},[1386,2717,1413],{"class":1399},[1386,2719,2313],{"class":1399},[1386,2721,2722,2724,2726,2728,2730,2732,2734,2736],{"class":1388,"line":1718},[1386,2723,1976],{"class":1399},[1386,2725,1925],{"class":1530},[1386,2727,1410],{"class":1399},[1386,2729,1413],{"class":1399},[1386,2731,1403],{"class":1399},[1386,2733,2705],{"class":1418},[1386,2735,1410],{"class":1399},[1386,2737,1939],{"class":1399},[1386,2739,2740,2742,2744,2746,2748,2750,2753,2755],{"class":1388,"line":2029},[1386,2741,1976],{"class":1399},[1386,2743,2338],{"class":1530},[1386,2745,1410],{"class":1399},[1386,2747,1413],{"class":1399},[1386,2749,1403],{"class":1399},[1386,2751,2752],{"class":1418},"dgi.chat.respond",[1386,2754,1410],{"class":1399},[1386,2756,1939],{"class":1399},[1386,2758,2759,2761,2763,2765,2767],{"class":1388,"line":2035},[1386,2760,1976],{"class":1399},[1386,2762,2358],{"class":1530},[1386,2764,1410],{"class":1399},[1386,2766,1413],{"class":1399},[1386,2768,2365],{"class":1399},[1386,2770,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805,2807,2809,2811],{"class":1388,"line":2056},[1386,2772,2370],{"class":1399},[1386,2774,2482],{"class":1478},[1386,2776,1410],{"class":1399},[1386,2778,1413],{"class":1399},[1386,2780,1522],{"class":1399},[1386,2782,1403],{"class":1399},[1386,2784,2385],{"class":2384},[1386,2786,1410],{"class":1399},[1386,2788,1413],{"class":1399},[1386,2790,1403],{"class":1399},[1386,2792,2441],{"class":1418},[1386,2794,1410],{"class":1399},[1386,2796,1534],{"class":1399},[1386,2798,1403],{"class":1399},[1386,2800,2450],{"class":2384},[1386,2802,1410],{"class":1399},[1386,2804,1413],{"class":1399},[1386,2806,1403],{"class":1399},[1386,2808,2482],{"class":1418},[1386,2810,1410],{"class":1399},[1386,2812,2416],{"class":1399},[1386,2814,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855],{"class":1388,"line":2071},[1386,2816,2370],{"class":1399},[1386,2818,2595],{"class":1478},[1386,2820,1410],{"class":1399},[1386,2822,1413],{"class":1399},[1386,2824,1522],{"class":1399},[1386,2826,1403],{"class":1399},[1386,2828,2385],{"class":2384},[1386,2830,1410],{"class":1399},[1386,2832,1413],{"class":1399},[1386,2834,1403],{"class":1399},[1386,2836,2441],{"class":1418},[1386,2838,1410],{"class":1399},[1386,2840,1534],{"class":1399},[1386,2842,1403],{"class":1399},[1386,2844,2450],{"class":2384},[1386,2846,1410],{"class":1399},[1386,2848,1413],{"class":1399},[1386,2850,1403],{"class":1399},[1386,2852,2595],{"class":1418},[1386,2854,1410],{"class":1399},[1386,2856,2416],{"class":1399},[1386,2858,2859,2861,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899],{"class":1388,"line":2092},[1386,2860,2370],{"class":1399},[1386,2862,2644],{"class":1478},[1386,2864,1410],{"class":1399},[1386,2866,1413],{"class":1399},[1386,2868,1522],{"class":1399},[1386,2870,1403],{"class":1399},[1386,2872,2385],{"class":2384},[1386,2874,1410],{"class":1399},[1386,2876,1413],{"class":1399},[1386,2878,1403],{"class":1399},[1386,2880,2441],{"class":1418},[1386,2882,1410],{"class":1399},[1386,2884,1534],{"class":1399},[1386,2886,1403],{"class":1399},[1386,2888,2450],{"class":2384},[1386,2890,1410],{"class":1399},[1386,2892,1413],{"class":1399},[1386,2894,1403],{"class":1399},[1386,2896,2644],{"class":1418},[1386,2898,1410],{"class":1399},[1386,2900,1424],{"class":1399},[1386,2902,2903],{"class":1388,"line":2111},[1386,2904,2467],{"class":1399},[1386,2906,2908],{"class":1388,"line":2907},16,[1386,2909,2472],{"class":1399},[1386,2911,2913],{"class":1388,"line":2912},17,[1386,2914,2114],{"class":1399},[1203,2916,2917,2918,2921,2922,2924,2925,2928,2929,2931,2932,1443],{},"Save each one with ",[1265,2919,2920],{},"composition.save"," and expose it with ",[1265,2923,1267],{},". Your front end starts ",[1265,2926,2927],{},"virtual.\u003Cuuid>@\u003Cversion>"," with the user's ",[1207,2930,479],{"href":584}," token. To render the cards, see ",[1207,2933,2934],{"href":870},"structured chat",[1222,2936,2938],{"id":2937},"step-6-verify","Step 6: verify",[1203,2940,2941,2942,2945],{},"Sign in as a test user of the app (a dev-mode app with your test address in ",[1265,2943,2944],{},"dev_allowed_emails"," works) and check:",[2947,2948,2949,2955,2964,2975],"ol",{},[1550,2950,2951,2954],{},[1230,2952,2953],{},"A table the role allows."," Ask for a record in it and confirm the card. The record is created.",[1550,2956,2957,2960,2961,1443],{},[1230,2958,2959],{},"A reserved table."," Ask the agent to write to it and confirm. The run is refused with ",[1265,2962,2963],{},"outside this run's data scope",[1550,2965,2966,2971,2972,1443],{},[1230,2967,2968,2969,1443],{},"An app-wide table in declared mode with ",[1265,2970,1764],{}," Write to it through a composition. The run is refused with ",[1265,2973,2974],{},"not open to end users",[1550,2976,2977,2980,2981,1443],{},[1230,2978,2979],{},"A table the role does not cover."," Ask the agent to write to it. The run is refused with ",[1265,2982,2983],{},"appdata_workspace_capability_denied",[1222,2985,1330],{"id":2986},"data-scope",[1203,2988,2989],{},"The scope is a list of the databases, tables and verbs the agent may use:",[1377,2991,2993],{"className":1379,"code":2992,"language":1381,"meta":1382,"style":1382},"{\n  \"version\": 1,\n  \"entries\": [\n    { \"database_slug\": \"farm\", \"table_slug\": \"*\",        \"verbs\": [\"read\", \"query\"] },\n    { \"database_slug\": \"farm\", \"table_slug\": \"planting\", \"verbs\": [\"create\", \"read\", \"query\", \"update\"] }\n  ]\n}\n",[1265,2994,2995,2999,3014,3027,3097,3180,3185],{"__ignoreMap":1382},[1386,2996,2997],{"class":1388,"line":1389},[1386,2998,1917],{"class":1399},[1386,3000,3001,3003,3006,3008,3010,3012],{"class":1388,"line":1396},[1386,3002,1922],{"class":1399},[1386,3004,3005],{"class":1406},"version",[1386,3007,1410],{"class":1399},[1386,3009,1413],{"class":1399},[1386,3011,1531],{"class":1530},[1386,3013,1939],{"class":1399},[1386,3015,3016,3018,3021,3023,3025],{"class":1388,"line":1495},[1386,3017,1922],{"class":1399},[1386,3019,3020],{"class":1406},"entries",[1386,3022,1410],{"class":1399},[1386,3024,1413],{"class":1399},[1386,3026,1971],{"class":1399},[1386,3028,3029,3031,3033,3035,3037,3039,3041,3044,3046,3048,3050,3052,3054,3056,3058,3061,3063,3065,3068,3071,3073,3075,3078,3080,3082,3084,3086,3088,3090,3092,3095],{"class":1388,"line":1506},[1386,3030,2534],{"class":1399},[1386,3032,1403],{"class":1399},[1386,3034,1366],{"class":2226},[1386,3036,1410],{"class":1399},[1386,3038,1413],{"class":1399},[1386,3040,1403],{"class":1399},[1386,3042,3043],{"class":1418},"farm",[1386,3045,1410],{"class":1399},[1386,3047,1534],{"class":1399},[1386,3049,1403],{"class":1399},[1386,3051,1370],{"class":2226},[1386,3053,1410],{"class":1399},[1386,3055,1413],{"class":1399},[1386,3057,1403],{"class":1399},[1386,3059,3060],{"class":1418},"*",[1386,3062,1410],{"class":1399},[1386,3064,1534],{"class":1399},[1386,3066,3067],{"class":1399},"        \"",[1386,3069,3070],{"class":2226},"verbs",[1386,3072,1410],{"class":1399},[1386,3074,1413],{"class":1399},[1386,3076,3077],{"class":1399}," [",[1386,3079,1410],{"class":1399},[1386,3081,1830],{"class":1418},[1386,3083,1410],{"class":1399},[1386,3085,1534],{"class":1399},[1386,3087,1403],{"class":1399},[1386,3089,1833],{"class":1418},[1386,3091,1410],{"class":1399},[1386,3093,3094],{"class":1399},"]",[1386,3096,2416],{"class":1399},[1386,3098,3099,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3130,3132,3134,3136,3138,3140,3142,3144,3146,3149,3151,3153,3155,3157,3159,3161,3163,3165,3167,3169,3171,3174,3176,3178],{"class":1388,"line":1514},[1386,3100,2534],{"class":1399},[1386,3102,1403],{"class":1399},[1386,3104,1366],{"class":2226},[1386,3106,1410],{"class":1399},[1386,3108,1413],{"class":1399},[1386,3110,1403],{"class":1399},[1386,3112,3043],{"class":1418},[1386,3114,1410],{"class":1399},[1386,3116,1534],{"class":1399},[1386,3118,1403],{"class":1399},[1386,3120,1370],{"class":2226},[1386,3122,1410],{"class":1399},[1386,3124,1413],{"class":1399},[1386,3126,1403],{"class":1399},[1386,3128,3129],{"class":1418},"planting",[1386,3131,1410],{"class":1399},[1386,3133,1534],{"class":1399},[1386,3135,1403],{"class":1399},[1386,3137,3070],{"class":2226},[1386,3139,1410],{"class":1399},[1386,3141,1413],{"class":1399},[1386,3143,3077],{"class":1399},[1386,3145,1410],{"class":1399},[1386,3147,3148],{"class":1418},"create",[1386,3150,1410],{"class":1399},[1386,3152,1534],{"class":1399},[1386,3154,1403],{"class":1399},[1386,3156,1830],{"class":1418},[1386,3158,1410],{"class":1399},[1386,3160,1534],{"class":1399},[1386,3162,1403],{"class":1399},[1386,3164,1833],{"class":1418},[1386,3166,1410],{"class":1399},[1386,3168,1534],{"class":1399},[1386,3170,1403],{"class":1399},[1386,3172,3173],{"class":1418},"update",[1386,3175,1410],{"class":1399},[1386,3177,3094],{"class":1399},[1386,3179,1424],{"class":1399},[1386,3181,3182],{"class":1388,"line":1658},[1386,3183,3184],{"class":1399},"  ]\n",[1386,3186,3187],{"class":1388,"line":1666},[1386,3188,2114],{"class":1399},[1547,3190,3191,3222,3229,3234,3243,3249,3258],{},[1550,3192,3193,3196,3197,1367,3199,1367,3201,1367,3203,1574,3205,3208,3209,3212,3213,3215,3216,3219,3220,1443],{},[1230,3194,3195],{},"Verbs"," are ",[1265,3198,3148],{},[1265,3200,1830],{},[1265,3202,1833],{},[1265,3204,3173],{},[1265,3206,3207],{},"delete",". ",[1265,3210,3211],{},"record.write"," counts as ",[1265,3214,3148],{},"; ",[1265,3217,3218],{},"record.update"," as ",[1265,3221,3173],{},[1550,3223,3224,3228],{},[1230,3225,3226],{},[1265,3227,3060],{}," matches every database or every table, except reserved tables.",[1550,3230,3231,3233],{},[1230,3232,1341],{}," need an entry that names the exact database and table.",[1550,3235,3236,3242],{},[1230,3237,3238,3239,3241],{},"An empty ",[1265,3240,3020],{}," list"," denies every table.",[1550,3244,3245,3248],{},[1230,3246,3247],{},"It only narrows."," It never grants what ownership, roles or write policy refuse.",[1550,3250,3251,1852,3254,3257],{},[1230,3252,3253],{},"It also applies to batches.",[1265,3255,3256],{},"transaction.apply",", every operation in the batch must be in scope, otherwise the whole batch is refused and nothing is written.",[1550,3259,3260,3263],{},[1230,3261,3262],{},"Validation."," The profile is validated when you save it. A malformed scope is refused, and if one is ever stored, it denies everything rather than allowing everything.",[1222,3265,3267],{"id":3266},"errors-you-may-see","Errors you may see",[1235,3269,3270,3283],{},[1238,3271,3272],{},[1241,3273,3274,3277,3280],{},[1244,3275,3276],{},"Code or message",[1244,3278,3279],{},"Meaning",[1244,3281,3282],{},"What to do",[1254,3284,3285,3301,3314,3330,3348,3363,3376,3388,3401],{},[1241,3286,3287,3293,3296],{},[1259,3288,3289,3292],{},[1265,3290,3291],{},"appdata_scope_denied",", \"outside this run's data scope\"",[1259,3294,3295],{},"The agent tried a table or verb outside its scope, or a reserved table",[1259,3297,3298,3299],{},"Expected for reserved tables. Otherwise widen the profile's ",[1265,3300,2144],{},[1241,3302,3303,3308,3311],{},[1259,3304,3305],{},[1265,3306,3307],{},"appdata_scope_invalid",[1259,3309,3310],{},"The scope the run carries is malformed",[1259,3312,3313],{},"Re-save the profile; contact support if it persists",[1241,3315,3316,3322,3327],{},[1259,3317,3318,3321],{},[1265,3319,3320],{},"appdata_policy_denied",", \"not open to end users\"",[1259,3323,3324,3325],{},"The table's declared write kind is ",[1265,3326,1764],{},[1259,3328,3329],{},"Write it from the organization side, or change the kind",[1241,3331,3332,3339,3345],{},[1259,3333,3334,3336,3337,1410],{},[1265,3335,3320],{},", \"requires ",[1265,3338,1783],{},[1259,3340,3341,3342,3344],{},"Declared ",[1265,3343,1777],{},", and the user's role lacks the capability",[1259,3346,3347],{},"Grant the capability to the role",[1241,3349,3350,3354,3360],{},[1259,3351,3352],{},[1265,3353,2983],{},[1259,3355,3356,3357,3359],{},"The role lacks ",[1265,3358,1295],{}," on a module table",[1259,3361,3362],{},"Grant it, or this is the intended refusal",[1241,3364,3365,3370,3373],{},[1259,3366,3367],{},[1265,3368,3369],{},"appdata_module_flag_off",[1259,3371,3372],{},"The module is switched off for this app",[1259,3374,3375],{},"Turn the flag on",[1241,3377,3378,3382,3385],{},[1259,3379,3380],{},[1265,3381,2126],{},[1259,3383,3384],{},"The profile is bound to a different app",[1259,3386,3387],{},"Use that app's profile",[1241,3389,3390,3395,3398],{},[1259,3391,3392],{},[1265,3393,3394],{},"NOT_EXPOSED_TO_END_USERS",[1259,3396,3397],{},"The user started something that is not exposed",[1259,3399,3400],{},"Expose a composition that wraps it",[1241,3402,3403,3409,3422],{},[1259,3404,3405,3408],{},[1265,3406,3407],{},"appdata_structure_invalid"," (on apply)",[1259,3410,3411,3412,1371,3414,3416,3417,1806,3419,3421],{},"A malformed ",[1265,3413,1346],{},[1265,3415,1322],{},", or ",[1265,3418,1764],{},[1265,3420,1777],{}," on a read verb",[1259,3423,3424],{},"Fix the declaration",[1222,3426,3428],{"id":3427},"hints","Hints",[1547,3430,3431,3440,3449,3455,3464,3470,3484],{},[1550,3432,3433,3436,3437,3439],{},[1230,3434,3435],{},"Reserve plumbing first, then open the rest."," No scope on the profile plus reserved plumbing tables is the simplest setup. Add a ",[1265,3438,2144],{}," only when an agent should see less than the whole app.",[1550,3441,3442,3445,3446,3448],{},[1230,3443,3444],{},"One agent per app."," Bind every profile to its app. A profile without ",[1265,3447,1407],{}," can be used by any app in your organization.",[1550,3450,3451,3454],{},[1230,3452,3453],{},"Writes always ask."," The agent proposes and the user confirms. Make sure your client renders the confirm card and calls the respond composition.",[1550,3456,3457,3460,3461,3463],{},[1230,3458,3459],{},"The prompt is the map."," List your tables and what they hold in the profile's ",[1265,3462,2097],{},". The model reaches only what the scope and the user's role allow, but it chooses better when it knows the names.",[1550,3465,3466,3469],{},[1230,3467,3468],{},"Your compositions are your code."," A composition that names a reserved table can use it. That is what keeps your own chat or sync features working, so review those compositions as you would any backend code.",[1550,3471,3472,3475,3476,3478,3479,3481,3482,1443],{},[1230,3473,3474],{},"Reference data from your systems"," belongs in ",[1265,3477,1573],{}," tables written with ",[1265,3480,1845],{},", with end-user writes set to ",[1265,3483,1764],{},[1550,3485,3486,3489],{},[1230,3487,3488],{},"A user's direct access"," (their token on the Data API, or a pinned composition) follows ownership, roles and write policy. The data scope is the extra limit for agents.",[1222,3491,3493],{"id":3492},"related","Related",[1203,3495,3496,3498,3499,3498,3502,3498,3505,3498,3507,3498,3510,3498,3513,3498,3516],{},[1207,3497,610],{"href":611}," · ",[1207,3500,3501],{"href":615},"Expose",[1207,3503,3504],{"href":601},"Declare",[1207,3506,911],{"href":912},[1207,3508,3509],{"href":927},"DGI quickstart",[1207,3511,3512],{"href":870},"Structured chat",[1207,3514,3515],{"href":897},"Chat API (option D)",[1207,3517,479],{"href":584},[3519,3520,3521],"style",{},"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 .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 .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}",{"title":1382,"searchDepth":1389,"depth":1396,"links":3523},[3524,3525,3526,3527,3528,3529,3530,3531,3532,3533,3534,3535],{"id":1224,"depth":1396,"text":1225},{"id":1359,"depth":1396,"text":1360},{"id":1452,"depth":1396,"text":1453},{"id":1581,"depth":1396,"text":1582},{"id":1877,"depth":1396,"text":1878},{"id":1900,"depth":1396,"text":1901},{"id":2169,"depth":1396,"text":2170},{"id":2937,"depth":1396,"text":2938},{"id":2986,"depth":1396,"text":1330},{"id":3266,"depth":1396,"text":3267},{"id":3427,"depth":1396,"text":3428},{"id":3492,"depth":1396,"text":3493},"Give your app's users an AI agent that reads and writes App Data by role, and keep chosen tables out of its reach","md",null,{},{"icon":15},{"title":596,"description":3536},"gxbgKNQwszi_p0v54WG_sw7QsCLyGBSK6F7NNysyCXA",[3544,3546],{"title":187,"path":591,"stem":592,"description":3545,"icon":190,"children":-1},"Platform-owned application data — declare tables, never hold a DSN in the frontend. Workflows, Data API, PostgREST, and an admitted SQL console for operators.",{"title":600,"path":601,"stem":602,"description":3547,"icon":603,"children":-1},"Define virtual databases, tables, fields, and ownership — validated and compiled before any row exists",1794361941642]