[{"data":1,"prerenderedAt":3925},["ShallowReactive",2],{"navigation":3,"/staff-and-agents/agents-that-serve-people":1197,"/staff-and-agents/agents-that-serve-people-surround":3920},[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":738,"body":1199,"description":3913,"extension":3914,"links":3915,"meta":3916,"navigation":3917,"path":739,"seo":3918,"stem":740,"__hash__":3919},"docs/20.staff-and-agents/16.agents-that-serve-people.md",{"type":1200,"value":1201,"toc":3896},"minimark",[1202,1224,1231,1249,1254,1257,1291,1301,1305,1416,1419,1423,1426,1487,1490,1494,1504,1539,1552,1556,1563,1820,1824,1827,1863,1876,1895,1899,1908,1979,2332,2456,2466,2536,2567,2584,2588,2745,2852,2865,2869,2885,2888,2894,2900,2974,2980,2986,2989,2992,3064,3073,3077,3109,3113,3118,3302,3307,3435,3440,3564,3569,3693,3697,3738,3742,3749,3753,3865,3892],[1203,1204,1205,1206,1210,1211,1215,1216,1219,1220,1223],"p",{},"When a person asks an agent to do something, the agent runs ",[1207,1208,1209],"strong",{},"as itself",": its own ",[1212,1213,1214],"a",{"href":674},"Staff actor",", its own paid seat, its own roles. The person who asked is the ",[1207,1217,1218],{},"requester",". The platform works out who the requester is from their signed chat message, records them on the run, and checks on ",[1207,1221,1222],{},"every"," start (the run itself and every step it starts) that the requester may ask for it. The agent never holds the person's sign-in, token or seat.",[1203,1225,1226,1227,1230],{},"What the agent can do for someone is the ",[1207,1228,1229],{},"overlap"," of two things: what the agent itself may do, and what the requester may do. Nothing is open by default. An app admin opts each workflow in for agents, the requester's group must be granted it, and every write waits for a tap from the requester.",[1232,1233,1234],"note",{},[1203,1235,1236,1237,1240,1241,1245,1246,1248],{},"Live since 2026-11-04. If you want an assistant that acts ",[1207,1238,1239],{},"as"," the person instead, use a ",[1212,1242,1244],{"href":1243},"/chat/actors-in-chat#dgi-responders-answers-with-cards","DGI responder"," or ",[1212,1247,596],{"href":597},". Those run as the person who is talking; this page is for your own Staff agents.",[1250,1251,1253],"h2",{"id":1252},"the-seat-rule","The seat rule",[1203,1255,1256],{},"Only a live, paid Staff agent can work for a requester. Every request checks that the calling actor:",[1258,1259,1260,1281],"ul",{},[1261,1262,1263,1264,1267,1268,1271,1272,1280],"li",{},"is ",[1207,1265,1266],{},"active"," and has exactly ",[1207,1269,1270],{},"one live identity"," with an ",[1207,1273,1274,1275,1279],{},"active ",[1276,1277,1278],"code",{},"agt_"," token",";",[1261,1282,1283,1284,1287,1288,1290],{},"is in ",[1207,1285,1286],{},"RBAC-scoped"," mode, which takes a paid actor seat (see ",[1212,1289,703],{"href":704},").",[1203,1292,1293,1294,1297,1298,1290],{},"The agent's seat pays for the work, and runs, cost and audit are attributed to the agent. The requester's own seat is not touched, and the requester check takes no extra end-user seat. (In the platform chat, path A below, the actor still uses its usual ",[1212,1295,1296],{"href":852},"chat attachment",", which holds an end-user seat in the app. Path B needs none.) An organization API token, an integration key, or a chat key with no actor behind it cannot name a requester (",[1276,1299,1300],{},"REQUESTER_REQUIRES_AGENT",[1250,1302,1304],{"id":1303},"two-ways-a-request-arrives","Two ways a request arrives",[1306,1307,1308,1327],"table",{},[1309,1310,1311],"thead",{},[1312,1313,1314,1317,1322],"tr",{},[1315,1316],"th",{},[1315,1318,1319],{},[1207,1320,1321],{},"Path A: platform chat",[1315,1323,1324],{},[1207,1325,1326],{},"Path B: your own harness",[1328,1329,1330,1345,1356,1375,1388,1405],"tbody",{},[1312,1331,1332,1336,1342],{},[1333,1334,1335],"td",{},"Who listens to the chat",[1333,1337,1338,1339],{},"The platform chat bridge, for an actor ",[1212,1340,1341],{"href":852},"attached to the space",[1333,1343,1344],{},"Your agent process, connected to the chat with its own key",[1312,1346,1347,1350,1353],{},[1333,1348,1349],{},"Who works out the requester",[1333,1351,1352],{},"The platform, from the message that woke the actor",[1333,1354,1355],{},"The platform, from the signed message your harness forwards",[1312,1357,1358,1361,1364],{},[1333,1359,1360],{},"What your code sends",[1333,1362,1363],{},"Nothing. The session is bound to the requester at launch",[1333,1365,1366,1369,1370,1374],{},[1276,1367,1368],{},"_orkestia_requested_by"," on each start (see ",[1212,1371,1373],{"href":1372},"#path-b-the-harness-contract","the harness contract",")",[1312,1376,1377,1380,1383],{},[1333,1378,1379],{},"Credential",[1333,1381,1382],{},"The agent's hosted session",[1333,1384,1385,1386,1279],{},"The agent's ",[1276,1387,1278],{},[1312,1389,1390,1393,1400],{},[1333,1391,1392],{},"How long one request lasts",[1333,1394,1395,1396],{},"15 minutes after the message, for reads and approved writes. Longer with a ",[1212,1397,1399],{"href":1398},"#long-tasks","task lease",[1333,1401,1402,1403],{},"5 minutes after the message and at most 20 read starts. A write keeps its request usable while its approval lives. Longer with a ",[1212,1404,1399],{"href":1398},[1312,1406,1407,1410,1413],{},[1333,1408,1409],{},"Approval card",[1333,1411,1412],{},"Posted by the agent as its answer",[1333,1414,1415],{},"Posted by your harness",[1203,1417,1418],{},"Both paths use the same rules. A request message is always a chat message (kind 9) in one channel, mentioning the agent, written by a person who is an active member of the space.",[1250,1420,1422],{"id":1421},"what-is-checked-on-every-start","What is checked on every start",[1203,1424,1425],{},"For each start, top level and every step below it, the platform refuses unless all of these hold:",[1427,1428,1429,1435,1441,1447,1453,1459,1469,1475,1481],"ol",{},[1261,1430,1431,1434],{},[1207,1432,1433],{},"The message is genuine."," Its id and signature verify, it is a chat message in one channel of an active space of the agent's organization, and it mentions the calling agent's own key.",[1261,1436,1437,1440],{},[1207,1438,1439],{},"It is fresh."," Not older than the path's window, and not more than 60 seconds in the future.",[1261,1442,1443,1446],{},[1207,1444,1445],{},"A person wrote it."," The author is an active member of the space and a human end user of the space's app: active, seated, with a live account and app grant, and not signed out by an admin after the message was sent. Actors, the organization's agent keys, relay bots and unknown keys are refused.",[1261,1448,1449,1452],{},[1207,1450,1451],{},"This agent claimed it."," The first agent that uses a message claims it. Another agent presenting the same message is refused.",[1261,1454,1455,1458],{},[1207,1456,1457],{},"The workflow is an exposed composition of the requester's app."," Raw catalog workflows run only as steps inside an allowed composition.",[1261,1460,1461,1464,1465,1468],{},[1207,1462,1463],{},"An app admin enabled it for agents"," (",[1276,1466,1467],{},"agent_on_behalf"," on that exposure).",[1261,1470,1471,1474],{},[1207,1472,1473],{},"The requester's group is explicitly granted it."," A capability no group manages is refused for agents, even though a person clicking it in your app may still run it.",[1261,1476,1477,1480],{},[1207,1478,1479],{},"The requester is in the workspace"," the request belongs to, when there is one.",[1261,1482,1483,1486],{},[1207,1484,1485],{},"Read or approved write."," A read-only exposure rides on the message; anything else needs an approval tap (next section).",[1203,1488,1489],{},"The check reads the database each time and caches nothing. If any part of it cannot be read, the start is refused.",[1250,1491,1493],{"id":1492},"reads-ride-on-the-message-writes-need-a-tap","Reads ride on the message, writes need a tap",[1203,1495,1496,1503],{},[1207,1497,1498,1499,1502],{},"A workflow is a write unless its exposure is marked ",[1276,1500,1501],{},"read_only","."," An app admin sets the mark, and the platform accepts it only when every workflow the composition can start, nested compositions included, declares that it has no side effects. A wrong or missing mark costs the person a tap; it never lets an unapproved write through.",[1258,1505,1506,1512,1527,1533],{},[1261,1507,1508,1511],{},[1207,1509,1510],{},"Reads."," A read-only exposure runs on the request message alone, inside the window: path A for 15 minutes after the message, path B for 5 minutes and at most 20 read starts.",[1261,1513,1514,1517,1518,1521,1522,1526],{},[1207,1515,1516],{},"Writes."," Every other start needs a ",[1207,1519,1520],{},"per-action approval",": the requester taps ",[1523,1524,1525],"em",{},"approve"," on a card that names the workflow and shows its input. The approval is bound to that exact composition version and that exact input. It is single use, expires 10 minutes after it was asked for, and covers that one run and everything it starts.",[1261,1528,1529,1532],{},[1207,1530,1531],{},"Inheritance."," A step started by a read-only run must itself be read-only. A step started by an approved write is covered by that approval, but it is still checked against the requester (exposure, agent opt-in, grant).",[1261,1534,1535,1538],{},[1207,1536,1537],{},"Only the requester approves."," A tap from anyone else is refused. A typed \"ok\", \"yes\" or \"pode\" approves nothing.",[1540,1541,1542],"warning",{},[1203,1543,1544,1545,1547,1548,1551],{},"Few catalog workflows declare that they have no side effects yet, so most compositions cannot be marked ",[1276,1546,1501],{},". Expect a tap for most actions, reads included, until more workflows carry the declaration. When the mark is refused, ",[1276,1549,1550],{},"identity.exposure.set-agent-policy"," lists the steps that block it.",[1250,1553,1555],{"id":1554},"set-it-up","Set it up",[1203,1557,1558,1559,1562],{},"A person in your organization does every step marked ",[1207,1560,1561],{},"human only",". The platform refuses those workflows when an agent starts them, so an agent can never widen its own reach.",[1564,1565,1566,1571,1589,1593,1604,1608,1618,1636,1640,1667,1673,1690,1707,1744,1754,1758,1764,1771,1776,1780,1804,1810],"steps",{},[1567,1568,1570],"h3",{"id":1569},"hire-the-agent-with-a-seat","Hire the agent with a seat",[1203,1572,1573,1576,1577,1579,1580,1582,1583,1586,1587,1502],{},[1212,1574,1575],{"href":684},"Hire the actor",", switch it to ",[1207,1578,1286],{}," mode (a paid actor seat) and mint its ",[1276,1581,1278],{}," token under ",[1207,1584,1585],{},"Admin → RBAC seats",". See ",[1212,1588,703],{"href":704},[1567,1590,1592],{"id":1591},"expose-the-compositions","Expose the compositions",[1203,1594,1595,1596,1599,1600,1603],{},"Expose each ",[1212,1597,1598],{"href":488},"composition"," the agent may run for people on your app, with ",[1276,1601,1602],{},"identity.app.expose-virtual-workflow",". This includes compositions nested as steps of another one: each is checked against the requester when it starts.",[1567,1605,1607],{"id":1606},"enable-each-exposure-for-agents-human-only","Enable each exposure for agents (human only)",[1609,1610,1616],"pre",{"className":1611,"code":1613,"language":1614,"meta":1615},[1612],"language-text","start_workflow(\"identity.exposure.set-agent-policy\", {\n  \"identity_app_uuid\": \"\u003Capp>\",\n  \"composition_uuid\": \"\u003Cany version of the composition>\",\n  \"agent_on_behalf\": true\n})\n","text","",[1276,1617,1613],{"__ignoreMap":1615},[1203,1619,1620,1621,1624,1625,1628,1629,1631,1632,1635],{},"The setting applies to every exposed version of that composition on the app, and new versions keep it. Add ",[1276,1622,1623],{},"\"read_only\": true"," for a composition that only reads. It is refused, and nothing changes, unless every step declares no side effects; the output then lists them in ",[1276,1626,1627],{},"read_only_blockers",". A new version that adds a step with side effects loses ",[1276,1630,1501],{}," on expose. ",[1276,1633,1634],{},"\"agent_on_behalf\": false"," closes the exposure to agents again.",[1567,1637,1639],{"id":1638},"grant-the-requesters-groups","Grant the requesters' groups",[1203,1641,1642,1643,1646,1647,1650,1651,1654,1655,1658,1659,1662,1663,1666],{},"The requester's group must hold an explicit grant for the composition: ",[1276,1644,1645],{},"vw:\u003Clineage_uuid>:invoke"," (or ",[1276,1648,1649],{},"vw:\u003Clineage_uuid>:*",", or ",[1276,1652,1653],{},"vw:*","). The ",[1276,1656,1657],{},"lineage_uuid"," comes from ",[1276,1660,1661],{},"composition.save",". The owner's ",[1276,1664,1665],{},"*"," does not count.",[1609,1668,1671],{"className":1669,"code":1670,"language":1614,"meta":1615},[1612],"start_workflow(\"identity.end-user.group.set-capabilities\", {\n  \"identity_app_uuid\": \"\u003Capp>\",\n  \"group_slug\": \"sales\",\n  \"capabilities\": [\"vw:\u003Clineage_uuid>:invoke\"]\n})\n",[1276,1672,1670],{"__ignoreMap":1615},[1203,1674,1675,1678,1679,1682,1683,1686,1687,1502],{},[1276,1676,1677],{},"set-capabilities"," ",[1207,1680,1681],{},"replaces"," the group's whole list, so send the existing capabilities too. Put people in the group with ",[1276,1684,1685],{},"identity.end-user.assign-group",", or give them that role in a ",[1212,1688,1689],{"href":1038},"workspace",[1203,1691,1692,1695,1696,1699,1700,1703,1704,1706],{},[1207,1693,1694],{},"Agent-only grants, for admin groups"," (rolling out, see ",[1212,1697,1698],{"href":1398},"below","). A ",[1276,1701,1702],{},"vw:"," grant also decides what people in your app may click, and granting ",[1276,1705,1653],{}," to one group takes the open default away from every other group. To let a group (your admins, for example) ask agents for every agent-enabled composition without changing what anyone can click, grant an agent-only capability instead:",[1306,1708,1709,1719],{},[1309,1710,1711],{},[1312,1712,1713,1716],{},[1315,1714,1715],{},"Capability",[1315,1717,1718],{},"Lets the group's people ask an agent for",[1328,1720,1721,1734],{},[1312,1722,1723,1731],{},[1333,1724,1725,1646,1728,1374],{},[1276,1726,1727],{},"agent:vw:\u003Clineage_uuid>:invoke",[1276,1729,1730],{},"agent:vw:\u003Clineage_uuid>:*",[1333,1732,1733],{},"That one composition",[1312,1735,1736,1741],{},[1333,1737,1738],{},[1276,1739,1740],{},"agent:vw:*",[1333,1742,1743],{},"Every composition of the app that is enabled for agents",[1203,1745,1746,1747,1749,1750,1753],{},"Agent-only grants are read only by the requester check. They never change who may run a composition directly, and the exposure must still be enabled for agents. ",[1276,1748,1677],{}," is human only and refuses any other ",[1276,1751,1752],{},"agent:"," form, or one naming a composition your app does not expose.",[1567,1755,1757],{"id":1756},"require-a-requester-human-only","Require a requester (human only)",[1609,1759,1762],{"className":1760,"code":1761,"language":1614,"meta":1615},[1612],"start_workflow(\"staff.set-actor-requester-required\", {\n  \"organization_uuid\": \"\u003Cyour organization>\",\n  \"actor_uuid\": \"\u003Cactor uuid>\",\n  \"requester_required\": true\n})\n",[1276,1763,1761],{"__ignoreMap":1615},[1203,1765,1766,1767,1770],{},"From then on every start this actor makes must name a requester, and is refused with ",[1276,1768,1769],{},"REQUESTER_REQUIRED"," otherwise. It needs the admin role on the actor. The flag stays on the actor when its token is rotated.",[1203,1772,1773,1774,1502],{},"In chat (path A) this flag is also what turns the requester check on: an attached actor without it answers exactly as before, as described on ",[1212,1775,851],{"href":852},[1567,1777,1779],{"id":1778},"connect-the-chat","Connect the chat",[1258,1781,1782,1798],{},[1261,1783,1784,1787,1788,1790,1791,1794,1795,1502],{},[1207,1785,1786],{},"Path A."," Attach the actor to the space as on ",[1212,1789,851],{"href":852},": bind its end-user seat, ",[1276,1792,1793],{},"buzz.actor.attach",", ",[1276,1796,1797],{},"buzz.bridge.sync",[1261,1799,1800,1803],{},[1207,1801,1802],{},"Path B."," Your harness signs with its own key, which the platform never holds. An organization admin or owner registers that key, adds it to the space, and binds it to the actor (human only):",[1609,1805,1808],{"className":1806,"code":1807,"language":1614,"meta":1615},[1612],"start_workflow(\"buzz.org.set-agent-keys\", {\n  \"add\": [{\"public_key\": \"\u003C64 hex>\", \"display_name\": \"Sales agent\"}]\n})\n\nstart_workflow(\"buzz.member.add-pubkey\", {\n  \"space_uuid\": \"\u003Cspace uuid>\",\n  \"pubkey\": \"\u003C64 hex>\"\n})\n\nstart_workflow(\"buzz.org-agent-key.bind-actor\", {\n  \"public_key\": \"\u003C64 hex>\",\n  \"staff_actor_uuid\": \"\u003Cactor uuid>\"\n})\n",[1276,1809,1807],{"__ignoreMap":1615},[1203,1811,1812,1813,1816,1817,1290],{},"One active key per actor. An empty ",[1276,1814,1815],{},"staff_actor_uuid"," unbinds. Without the binding, no request to that agent resolves (",[1276,1818,1819],{},"REQUESTER_AGENT_KEY_UNBOUND",[1250,1821,1823],{"id":1822},"path-a-in-the-platform-chat","Path A: in the platform chat",[1203,1825,1826],{},"When a person mentions a requester-required actor, the platform resolves them from that message and binds the actor's session to them. Inside that session:",[1258,1828,1829,1842,1849,1856],{},[1261,1830,1831,1832,1835,1836,1838,1839,1280],{},"the agent may call only ",[1207,1833,1834],{},"compositions your app exposes"," (each checked as above) and the person's own paired ",[1212,1837,1171],{"href":1167},". Other skills, MCP servers and generic workflow tools are refused with ",[1276,1840,1841],{},"REQUESTER_RAW_TYPE_REFUSED",[1261,1843,1844,1845,1848],{},"only the requester may send messages into the session (",[1276,1846,1847],{},"REQUESTER_SESSION_MISMATCH"," for anyone else);",[1261,1850,1851,1852,1855],{},"the session can act for ",[1207,1853,1854],{},"15 minutes after the message",". After that, the person sends the request again;",[1261,1857,1858,1859,1862],{},"a call your organization's tool policy sends to an org reviewer is refused (",[1276,1860,1861],{},"REQUESTER_ORG_APPROVAL_UNSUPPORTED","): the person's own tap is the only approval here.",[1203,1864,1865,1866,1868,1869,1872,1873,1875],{},"For a write, the agent asks for an approval card and posts it as its answer, with ",[1523,1867,1525],{}," and ",[1523,1870,1871],{},"deny"," buttons. When the person taps ",[1523,1874,1525],{},", the actor wakes again on the same request and makes the call with the approval.",[1203,1877,1878,1879,1882,1883,1886,1887,1890,1891,1502],{},"A message the actor may not act on gets ",[1207,1880,1881],{},"no answer",", so nobody outside the rules learns that an agent sits in the space. An organization admin sees why in ",[1276,1884,1885],{},"data.buzz.inbound.list",": the reason is ",[1276,1888,1889],{},"REQUESTER_REQUIRED:\u003Ccode>",", with a code from the ",[1212,1892,1894],{"href":1893},"#refusal-codes","table below",[1250,1896,1898],{"id":1897},"path-b-the-harness-contract","Path B: the harness contract",[1203,1900,1901,1902,1904,1905,1907],{},"Your harness reads the person's message from the chat, then starts the workflow with the agent's ",[1276,1903,1278],{}," token and the message itself under the reserved key ",[1276,1906,1368],{},":",[1609,1909,1913],{"className":1910,"code":1911,"language":1912,"meta":1615,"style":1615},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST https://workflow-api.orkestia.dev/api/workflows/start \\\n  -H \"Authorization: Bearer agt_…\" \\\n  -H \"Content-Type: application/json\" \\\n  -d @start.json\n","bash",[1276,1914,1915,1938,1956,1970],{"__ignoreMap":1615},[1916,1917,1920,1924,1928,1931,1934],"span",{"class":1918,"line":1919},"line",1,[1916,1921,1923],{"class":1922},"sBMFI","curl",[1916,1925,1927],{"class":1926},"sfazB"," -X",[1916,1929,1930],{"class":1926}," POST",[1916,1932,1933],{"class":1926}," https://workflow-api.orkestia.dev/api/workflows/start",[1916,1935,1937],{"class":1936},"sTEyZ"," \\\n",[1916,1939,1941,1944,1948,1951,1954],{"class":1918,"line":1940},2,[1916,1942,1943],{"class":1926},"  -H",[1916,1945,1947],{"class":1946},"sMK4o"," \"",[1916,1949,1950],{"class":1926},"Authorization: Bearer agt_…",[1916,1952,1953],{"class":1946},"\"",[1916,1955,1937],{"class":1936},[1916,1957,1959,1961,1963,1966,1968],{"class":1918,"line":1958},3,[1916,1960,1943],{"class":1926},[1916,1962,1947],{"class":1946},[1916,1964,1965],{"class":1926},"Content-Type: application/json",[1916,1967,1953],{"class":1946},[1916,1969,1937],{"class":1936},[1916,1971,1973,1976],{"class":1918,"line":1972},4,[1916,1974,1975],{"class":1926},"  -d",[1916,1977,1978],{"class":1926}," @start.json\n",[1609,1980,1984],{"className":1981,"code":1982,"language":1983,"meta":1615,"style":1615},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"workflow_type\": \"virtual.\u003Ccomposition_uuid>@3\",\n  \"initial_data\": {\n    \"customer_id\": \"C-1042\",\n    \"_orkestia_requested_by\": {\n      \"kind\": \"buzz_event\",\n      \"space_uuid\": \"\u003Cspace uuid>\",\n      \"event\": {\n        \"id\": \"\u003C64 hex>\",\n        \"pubkey\": \"\u003Cthe person's key, 64 hex>\",\n        \"created_at\": 1793782800,\n        \"kind\": 9,\n        \"tags\": [\n          [\"h\", \"\u003Cchannel id>\"],\n          [\"p\", \"\u003Cyour agent's bound key, 64 hex>\"]\n        ],\n        \"content\": \"@Sales agent what is the status of C-1042?\",\n        \"sig\": \"\u003C128 hex>\"\n      }\n    }\n  }\n}\n","json",[1276,1985,1986,1991,2014,2028,2049,2062,2085,2106,2120,2143,2164,2181,2197,2212,2238,2261,2267,2288,2308,2314,2320,2326],{"__ignoreMap":1615},[1916,1987,1988],{"class":1918,"line":1919},[1916,1989,1990],{"class":1946},"{\n",[1916,1992,1993,1996,2000,2002,2004,2006,2009,2011],{"class":1918,"line":1940},[1916,1994,1995],{"class":1946},"  \"",[1916,1997,1999],{"class":1998},"spNyl","workflow_type",[1916,2001,1953],{"class":1946},[1916,2003,1907],{"class":1946},[1916,2005,1947],{"class":1946},[1916,2007,2008],{"class":1926},"virtual.\u003Ccomposition_uuid>@3",[1916,2010,1953],{"class":1946},[1916,2012,2013],{"class":1946},",\n",[1916,2015,2016,2018,2021,2023,2025],{"class":1918,"line":1958},[1916,2017,1995],{"class":1946},[1916,2019,2020],{"class":1998},"initial_data",[1916,2022,1953],{"class":1946},[1916,2024,1907],{"class":1946},[1916,2026,2027],{"class":1946}," {\n",[1916,2029,2030,2033,2036,2038,2040,2042,2045,2047],{"class":1918,"line":1972},[1916,2031,2032],{"class":1946},"    \"",[1916,2034,2035],{"class":1922},"customer_id",[1916,2037,1953],{"class":1946},[1916,2039,1907],{"class":1946},[1916,2041,1947],{"class":1946},[1916,2043,2044],{"class":1926},"C-1042",[1916,2046,1953],{"class":1946},[1916,2048,2013],{"class":1946},[1916,2050,2052,2054,2056,2058,2060],{"class":1918,"line":2051},5,[1916,2053,2032],{"class":1946},[1916,2055,1368],{"class":1922},[1916,2057,1953],{"class":1946},[1916,2059,1907],{"class":1946},[1916,2061,2027],{"class":1946},[1916,2063,2065,2068,2072,2074,2076,2078,2081,2083],{"class":1918,"line":2064},6,[1916,2066,2067],{"class":1946},"      \"",[1916,2069,2071],{"class":2070},"sbssI","kind",[1916,2073,1953],{"class":1946},[1916,2075,1907],{"class":1946},[1916,2077,1947],{"class":1946},[1916,2079,2080],{"class":1926},"buzz_event",[1916,2082,1953],{"class":1946},[1916,2084,2013],{"class":1946},[1916,2086,2088,2090,2093,2095,2097,2099,2102,2104],{"class":1918,"line":2087},7,[1916,2089,2067],{"class":1946},[1916,2091,2092],{"class":2070},"space_uuid",[1916,2094,1953],{"class":1946},[1916,2096,1907],{"class":1946},[1916,2098,1947],{"class":1946},[1916,2100,2101],{"class":1926},"\u003Cspace uuid>",[1916,2103,1953],{"class":1946},[1916,2105,2013],{"class":1946},[1916,2107,2109,2111,2114,2116,2118],{"class":1918,"line":2108},8,[1916,2110,2067],{"class":1946},[1916,2112,2113],{"class":2070},"event",[1916,2115,1953],{"class":1946},[1916,2117,1907],{"class":1946},[1916,2119,2027],{"class":1946},[1916,2121,2123,2126,2130,2132,2134,2136,2139,2141],{"class":1918,"line":2122},9,[1916,2124,2125],{"class":1946},"        \"",[1916,2127,2129],{"class":2128},"swJcz","id",[1916,2131,1953],{"class":1946},[1916,2133,1907],{"class":1946},[1916,2135,1947],{"class":1946},[1916,2137,2138],{"class":1926},"\u003C64 hex>",[1916,2140,1953],{"class":1946},[1916,2142,2013],{"class":1946},[1916,2144,2146,2148,2151,2153,2155,2157,2160,2162],{"class":1918,"line":2145},10,[1916,2147,2125],{"class":1946},[1916,2149,2150],{"class":2128},"pubkey",[1916,2152,1953],{"class":1946},[1916,2154,1907],{"class":1946},[1916,2156,1947],{"class":1946},[1916,2158,2159],{"class":1926},"\u003Cthe person's key, 64 hex>",[1916,2161,1953],{"class":1946},[1916,2163,2013],{"class":1946},[1916,2165,2167,2169,2172,2174,2176,2179],{"class":1918,"line":2166},11,[1916,2168,2125],{"class":1946},[1916,2170,2171],{"class":2128},"created_at",[1916,2173,1953],{"class":1946},[1916,2175,1907],{"class":1946},[1916,2177,2178],{"class":2070}," 1793782800",[1916,2180,2013],{"class":1946},[1916,2182,2184,2186,2188,2190,2192,2195],{"class":1918,"line":2183},12,[1916,2185,2125],{"class":1946},[1916,2187,2071],{"class":2128},[1916,2189,1953],{"class":1946},[1916,2191,1907],{"class":1946},[1916,2193,2194],{"class":2070}," 9",[1916,2196,2013],{"class":1946},[1916,2198,2200,2202,2205,2207,2209],{"class":1918,"line":2199},13,[1916,2201,2125],{"class":1946},[1916,2203,2204],{"class":2128},"tags",[1916,2206,1953],{"class":1946},[1916,2208,1907],{"class":1946},[1916,2210,2211],{"class":1946}," [\n",[1916,2213,2215,2218,2220,2223,2225,2228,2230,2233,2235],{"class":1918,"line":2214},14,[1916,2216,2217],{"class":1946},"          [",[1916,2219,1953],{"class":1946},[1916,2221,2222],{"class":1926},"h",[1916,2224,1953],{"class":1946},[1916,2226,2227],{"class":1946},",",[1916,2229,1947],{"class":1946},[1916,2231,2232],{"class":1926},"\u003Cchannel id>",[1916,2234,1953],{"class":1946},[1916,2236,2237],{"class":1946},"],\n",[1916,2239,2241,2243,2245,2247,2249,2251,2253,2256,2258],{"class":1918,"line":2240},15,[1916,2242,2217],{"class":1946},[1916,2244,1953],{"class":1946},[1916,2246,1203],{"class":1926},[1916,2248,1953],{"class":1946},[1916,2250,2227],{"class":1946},[1916,2252,1947],{"class":1946},[1916,2254,2255],{"class":1926},"\u003Cyour agent's bound key, 64 hex>",[1916,2257,1953],{"class":1946},[1916,2259,2260],{"class":1946},"]\n",[1916,2262,2264],{"class":1918,"line":2263},16,[1916,2265,2266],{"class":1946},"        ],\n",[1916,2268,2270,2272,2275,2277,2279,2281,2284,2286],{"class":1918,"line":2269},17,[1916,2271,2125],{"class":1946},[1916,2273,2274],{"class":2128},"content",[1916,2276,1953],{"class":1946},[1916,2278,1907],{"class":1946},[1916,2280,1947],{"class":1946},[1916,2282,2283],{"class":1926},"@Sales agent what is the status of C-1042?",[1916,2285,1953],{"class":1946},[1916,2287,2013],{"class":1946},[1916,2289,2291,2293,2296,2298,2300,2302,2305],{"class":1918,"line":2290},18,[1916,2292,2125],{"class":1946},[1916,2294,2295],{"class":2128},"sig",[1916,2297,1953],{"class":1946},[1916,2299,1907],{"class":1946},[1916,2301,1947],{"class":1946},[1916,2303,2304],{"class":1926},"\u003C128 hex>",[1916,2306,2307],{"class":1946},"\"\n",[1916,2309,2311],{"class":1918,"line":2310},19,[1916,2312,2313],{"class":1946},"      }\n",[1916,2315,2317],{"class":1918,"line":2316},20,[1916,2318,2319],{"class":1946},"    }\n",[1916,2321,2323],{"class":1918,"line":2322},21,[1916,2324,2325],{"class":1946},"  }\n",[1916,2327,2329],{"class":1918,"line":2328},22,[1916,2330,2331],{"class":1946},"}\n",[1306,2333,2334,2344],{},[1309,2335,2336],{},[1312,2337,2338,2341],{},[1315,2339,2340],{},"Rule",[1315,2342,2343],{},"Detail",[1328,2345,2346,2358,2373,2387,2408,2419,2427,2445],{},[1312,2347,2348,2350],{},[1333,2349,1379],{},[1333,2351,2352,2353,2355,2356,1374],{},"Only an ",[1276,2354,1278],{}," token may send the key. Any other caller is refused (",[1276,2357,1300],{},[1312,2359,2360,2363],{},[1333,2361,2362],{},"The event",[1333,2364,2365,2366,2369,2370,1374],{},"The person's message ",[1207,2367,2368],{},"exactly as signed",": all seven fields, unchanged. Any edit breaks the signature (",[1276,2371,2372],{},"REQUESTER_BAD_SIGNATURE",[1312,2374,2375,2378],{},[1333,2376,2377],{},"Channel and mention",[1333,2379,2380,2381,2383,2384,2386],{},"One ",[1276,2382,2222],{}," tag with the channel. A ",[1276,2385,1203],{}," tag with your agent's bound key",[1312,2388,2389,2392],{},[1333,2390,2391],{},"Keys",[1333,2393,2394,1794,2396,1794,2398,2400,2401,2404,2405,1374],{},[1276,2395,2071],{},[1276,2397,2092],{},[1276,2399,2113],{},", and ",[1276,2402,2403],{},"approval_uuid"," for a write. Any other key is refused (",[1276,2406,2407],{},"REQUESTER_MALFORMED",[1312,2409,2410,2413],{},[1333,2411,2412],{},"Age",[1333,2414,2415,2416,2418],{},"At most 5 minutes old for a read and for asking an approval, unless a live ",[1212,2417,1399],{"href":1398}," covers the request",[1312,2420,2421,2424],{},[1333,2422,2423],{},"Never sent to the workflow",[1333,2425,2426],{},"The key is removed before the input is validated. Your composition never sees it, and the approval digest is computed without it",[1312,2428,2429,2432],{},[1333,2430,2431],{},"Do not name the requester yourself",[1333,2433,2434,1794,2437,2440,2441,2444],{},[1276,2435,2436],{},"requested_by",[1276,2438,2439],{},"_requested_by"," or similar keys in the input are refused (",[1276,2442,2443],{},"REQUESTER_OVERRIDE_REJECTED","). The requester comes only from the signed message",[1312,2446,2447,2450],{},[1333,2448,2449],{},"Version",[1333,2451,2452,2453],{},"The platform starts the exact composition version it checked. When that differs from the type you sent (an ORN, for example), the answer says so in ",[1276,2454,2455],{},"requested_workflow_type",[1203,2457,2458,2459,1464,2462,2465],{},"A refused start answers ",[1276,2460,2461],{},"403",[1276,2463,2464],{},"503"," when the check is unavailable) with the code:",[1609,2467,2469],{"className":1981,"code":2468,"language":1983,"meta":1615,"style":1615},"{\n  \"code\": \"REQUESTER_NOT_GRANTED\",\n  \"message\": \"The requester may not ask this agent for this start.\",\n  \"error\": \"ForbiddenError\"\n}\n",[1276,2470,2471,2475,2494,2514,2532],{"__ignoreMap":1615},[1916,2472,2473],{"class":1918,"line":1919},[1916,2474,1990],{"class":1946},[1916,2476,2477,2479,2481,2483,2485,2487,2490,2492],{"class":1918,"line":1940},[1916,2478,1995],{"class":1946},[1916,2480,1276],{"class":1998},[1916,2482,1953],{"class":1946},[1916,2484,1907],{"class":1946},[1916,2486,1947],{"class":1946},[1916,2488,2489],{"class":1926},"REQUESTER_NOT_GRANTED",[1916,2491,1953],{"class":1946},[1916,2493,2013],{"class":1946},[1916,2495,2496,2498,2501,2503,2505,2507,2510,2512],{"class":1918,"line":1958},[1916,2497,1995],{"class":1946},[1916,2499,2500],{"class":1998},"message",[1916,2502,1953],{"class":1946},[1916,2504,1907],{"class":1946},[1916,2506,1947],{"class":1946},[1916,2508,2509],{"class":1926},"The requester may not ask this agent for this start.",[1916,2511,1953],{"class":1946},[1916,2513,2013],{"class":1946},[1916,2515,2516,2518,2521,2523,2525,2527,2530],{"class":1918,"line":1972},[1916,2517,1995],{"class":1946},[1916,2519,2520],{"class":1998},"error",[1916,2522,1953],{"class":1946},[1916,2524,1907],{"class":1946},[1916,2526,1947],{"class":1946},[1916,2528,2529],{"class":1926},"ForbiddenError",[1916,2531,2307],{"class":1946},[1916,2533,2534],{"class":1918,"line":2051},[1916,2535,2331],{"class":1946},[1203,2537,2538,2539,2542,2543,2546,2547,2549,2550,2552,2553,1794,2556,1794,2558,1794,2561,1868,2563,2566],{},"To ask before acting, call ",[1276,2540,2541],{},"identity.requester.check"," with ",[1276,2544,2545],{},"request_reference"," (the same object as ",[1276,2548,1368],{},") and ",[1276,2551,1999],{},". It answers ",[1276,2554,2555],{},"allowed",[1276,2557,1276],{},[1276,2559,2560],{},"served_workflow_type",[1276,2562,1501],{},[1276,2564,2565],{},"needs_approval",", and spends nothing. It is advice only: the start is checked again.",[1203,2568,2569,2572,2573,2575,2576,2579,2580,1502],{},[1207,2570,2571],{},"Before you post an answer, check the person again."," Your harness posts its answers to the chat itself, so the platform never sees them before they appear. Call ",[1276,2574,2541],{}," with the request and the composition the answer came from, and post only when the answer is ",[1276,2577,2578],{},"allowed: true",". On any other code, post nothing in that channel. This is your harness's side of the contract: the platform cannot enforce it, because your harness signs its own messages. See ",[1212,2581,2583],{"href":2582},"#when-a-person-loses-access","When a person loses access",[1250,2585,2587],{"id":2586},"writes-the-approval-flow","Writes: the approval flow",[1427,2589,2590,2622,2659,2723],{},[1261,2591,2592,2595,2596,2542,2599,1794,2601,2603,2604,2607,2608,1464,2611,1245,2614,2617,2618,2621],{},[1207,2593,2594],{},"Ask."," The agent calls ",[1276,2597,2598],{},"identity.requester.approval.request",[1276,2600,2545],{},[1276,2602,1999],{},", the exact ",[1276,2605,2606],{},"input"," it will send, and optionally ",[1276,2609,2610],{},"locale",[1276,2612,2613],{},"pt-BR",[1276,2615,2616],{},"en","). The person must be allowed to run the composition, or the answer is ",[1276,2619,2620],{},"status: \"refused\""," with a code and no card is made.",[1261,2623,2624,2627,2628,1794,2631,1794,2633,1794,2635,2638,2639,2642,2643,2646,2647,2650,2651,2654,2655,2658],{},[1207,2625,2626],{},"Post the card."," The answer has ",[1276,2629,2630],{},"status: \"pending\"",[1276,2632,2403],{},[1276,2634,2560],{},[1276,2636,2637],{},"expires_at"," (10 minutes), the ",[1276,2640,2641],{},"channel"," to post in, and the card. On path A the agent posts ",[1276,2644,2645],{},"reply_text"," as its answer. On path B, post ",[1276,2648,2649],{},"card.text"," in that channel with one ",[1276,2652,2653],{},"[\"buzz-quick-reply\", \"\u003Clabel>\"]"," tag for each entry of ",[1276,2656,2657],{},"card.quick_replies",". Values whose names look sensitive (passwords, tokens, tax ids) are masked on the card; the approval still covers their real values.",[1261,2660,2661,2664,2665,1868,2668,2671,2672],{},[1207,2662,2663],{},"The person taps."," The buttons are ",[1276,2666,2667],{},"rq:\u003Capproval_uuid>:approve",[1276,2669,2670],{},"rq:\u003Capproval_uuid>:deny",". A tap is the person's own signed message in that channel. It counts only from the requester, while the approval is pending and unexpired.\n",[1258,2673,2674,2680],{},[1261,2675,2676,2679],{},[1207,2677,2678],{},"Path A:"," the platform chat records the tap and wakes the agent; nothing to do.",[1261,2681,2682,2685,2686,2542,2689,1868,2691,2693,2694,2696,2697,2700,2701,1464,2704,1794,2707,1245,2710,2713,2714,1868,2716,2719,2720,1502],{},[1207,2683,2684],{},"Path B:"," your harness receives the tap. Forward it unchanged to ",[1276,2687,2688],{},"identity.requester.approval.record-tap",[1276,2690,2092],{},[1276,2692,2113],{}," (the full signed tap; ",[1276,2695,2403],{}," is optional and must match the token). The answer is ",[1276,2698,2699],{},"recorded"," (true or false), ",[1276,2702,2703],{},"status",[1276,2705,2706],{},"approved",[1276,2708,2709],{},"denied",[1276,2711,2712],{},"refused",") and, when refused, ",[1276,2715,1276],{},[1276,2717,2718],{},"reason",". The person's signature authorizes the tap, not your harness, and only the agent the approval was issued to can record it. Recording the same tap twice answers ",[1276,2721,2722],{},"REQUESTER_APPROVAL_USED",[1261,2724,2725,2728,2729,2731,2732,1868,2735,2737,2738,2740,2741,2744],{},[1207,2726,2727],{},"Start."," Start ",[1276,2730,2560],{}," with the ",[1207,2733,2734],{},"identical input",[1276,2736,2403],{}," added to ",[1276,2739,1368],{},". Changing any value refuses the start (",[1276,2742,2743],{},"REQUESTER_APPROVAL_DIGEST_MISMATCH","). The approval is spent by that start, even if the run then fails: ask again for a retry.",[1609,2746,2748],{"className":1981,"code":2747,"language":1983,"meta":1615,"style":1615},"\"_orkestia_requested_by\": {\n  \"kind\": \"buzz_event\",\n  \"space_uuid\": \"\u003Cspace uuid>\",\n  \"event\": { \"…\": \"the same request message\" },\n  \"approval_uuid\": \"\u003Capproval_uuid>\"\n}\n",[1276,2749,2750,2763,2781,2799,2831,2848],{"__ignoreMap":1615},[1916,2751,2752,2754,2756,2758,2761],{"class":1918,"line":1919},[1916,2753,1953],{"class":1946},[1916,2755,1368],{"class":1926},[1916,2757,1953],{"class":1946},[1916,2759,2760],{"class":1936},": ",[1916,2762,1990],{"class":1946},[1916,2764,2765,2767,2769,2771,2773,2775,2777,2779],{"class":1918,"line":1940},[1916,2766,1995],{"class":1946},[1916,2768,2071],{"class":1998},[1916,2770,1953],{"class":1946},[1916,2772,1907],{"class":1946},[1916,2774,1947],{"class":1946},[1916,2776,2080],{"class":1926},[1916,2778,1953],{"class":1946},[1916,2780,2013],{"class":1946},[1916,2782,2783,2785,2787,2789,2791,2793,2795,2797],{"class":1918,"line":1958},[1916,2784,1995],{"class":1946},[1916,2786,2092],{"class":1998},[1916,2788,1953],{"class":1946},[1916,2790,1907],{"class":1946},[1916,2792,1947],{"class":1946},[1916,2794,2101],{"class":1926},[1916,2796,1953],{"class":1946},[1916,2798,2013],{"class":1946},[1916,2800,2801,2803,2805,2807,2809,2812,2814,2817,2819,2821,2823,2826,2828],{"class":1918,"line":1972},[1916,2802,1995],{"class":1946},[1916,2804,2113],{"class":1998},[1916,2806,1953],{"class":1946},[1916,2808,1907],{"class":1946},[1916,2810,2811],{"class":1946}," {",[1916,2813,1947],{"class":1946},[1916,2815,2816],{"class":1922},"…",[1916,2818,1953],{"class":1946},[1916,2820,1907],{"class":1946},[1916,2822,1947],{"class":1946},[1916,2824,2825],{"class":1926},"the same request message",[1916,2827,1953],{"class":1946},[1916,2829,2830],{"class":1946}," },\n",[1916,2832,2833,2835,2837,2839,2841,2843,2846],{"class":1918,"line":2051},[1916,2834,1995],{"class":1946},[1916,2836,2403],{"class":1998},[1916,2838,1953],{"class":1946},[1916,2840,1907],{"class":1946},[1916,2842,1947],{"class":1946},[1916,2844,2845],{"class":1926},"\u003Capproval_uuid>",[1916,2847,2307],{"class":1946},[1916,2849,2850],{"class":1918,"line":2064},[1916,2851,2331],{"class":1946},[1203,2853,2854,2855,2858,2859,2861,2862,1502],{},"Before the tap, the start is refused with ",[1276,2856,2857],{},"REQUESTER_APPROVAL_PENDING","; after ",[1523,2860,1871],{},", with ",[1276,2863,2864],{},"REQUESTER_APPROVAL_DENIED",[1250,2866,2868],{"id":2867},"long-tasks","Long tasks",[1232,2870,2871],{},[1203,2872,2873,2876,2877,2880,2881,2884],{},[1207,2874,2875],{},"Rolling out."," Task leases, the agent-only grants above, and the stopping of work already running and of path-A answers described in the next section reach your organization with the next platform release. Until then ",[1276,2878,2879],{},"identity.requester.lease.request"," is not in your catalog, and the windows in ",[1212,2882,1304],{"href":2883},"#two-ways-a-request-arrives"," apply as they are.",[1203,2886,2887],{},"One request message lets an agent read for a short time: 15 minutes on path A, 5 minutes and 20 read starts on path B. Work that lasts longer has three options. The windows themselves are never raised.",[1203,2889,2890,2893],{},[1207,2891,2892],{},"A task lease: one tap for up to 2 hours."," Inside the request's window, the agent asks the person to let the task keep reading:",[1609,2895,2898],{"className":2896,"code":2897,"language":1614,"meta":1615},[1612],"start_workflow(\"identity.requester.lease.request\", {\n  \"organization_uuid\": \"\u003Cyour organization>\",\n  \"request_reference\": { \"kind\": \"buzz_event\", \"space_uuid\": \"\u003Cspace uuid>\", \"event\": { \"…\": \"the request message\" } },\n  \"minutes\": 120,\n  \"purpose\": \"Analysing the 40 contracts you sent\",\n  \"locale\": \"en\"\n})\n",[1276,2899,2897],{"__ignoreMap":1615},[1258,2901,2902,2930,2935,2941,2946,2962,2965,2971],{},[1261,2903,2904,2905,1794,2907,1794,2910,1794,2913,1794,2916,2918,2919,1794,2921,1794,2924,1868,2927,2929],{},"The answer has the same shape as an approval request: ",[1276,2906,2630],{},[1276,2908,2909],{},"code: \"LEASE_PENDING\"",[1276,2911,2912],{},"lease_uuid",[1276,2914,2915],{},"minutes",[1276,2917,2637],{}," (10 minutes to tap), the ",[1276,2920,2641],{},[1276,2922,2923],{},"card",[1276,2925,2926],{},"quick_replies",[1276,2928,2645],{},". Post the card as you post an approval card.",[1261,2931,2932,2934],{},[1276,2933,2915],{}," is 1 to 120. The lease runs from the person's tap, not from the request.",[1261,2936,2937,2938,1502],{},"It must be asked inside the request's window, by an agent the person may still ask. A late ask answers ",[1276,2939,2940],{},"REQUESTER_REQUEST_EXPIRED",[1261,2942,2943,2945],{},[1207,2944,2678],{}," the agent asks for it itself when a task needs more time, and posts the card as its answer. When the person taps, the agent continues.",[1261,2947,2948,2950,2951,2953,2954,2956,2957,2959,2960,1502],{},[1207,2949,2684],{}," forward the person's tap to ",[1276,2952,2688],{}," exactly like an approval tap (",[1276,2955,2403],{}," is the ",[1276,2958,2912],{},"), then keep sending the same ",[1276,2961,1368],{},[1261,2963,2964],{},"While the lease lives, read-only starts under that request are allowed after the window ends, and path B may make up to 500 read starts instead of 20.",[1261,2966,2967,2970],{},[1207,2968,2969],{},"Writes still need a tap each."," A lease never approves a write.",[1261,2972,2973],{},"The lease ends at its time, or at once when the person loses access.",[1203,2975,2976,2979],{},[1207,2977,2978],{},"A new message from the person."," On path B, send the person's newer signed message: it opens a new window. On path A, a new message from the same person in the same conversation also gives the agent's work still running for them a fresh 15 minutes.",[1203,2981,2982,2985],{},[1207,2983,2984],{},"One composition for the whole task."," Steps started by a run the request allowed are not limited by the window: one exposed composition started inside it runs to the end. Use this when the steps are known in advance.",[1250,2987,2583],{"id":2988},"when-a-person-loses-access",[1203,2990,2991],{},"A person loses access when they are disabled or signed out by an admin, lose their seat or app grant, leave the workspace, or are removed from or suspended in the space. What stops, and when:",[1306,2993,2994,3004],{},[1309,2995,2996],{},[1312,2997,2998,3001],{},[1315,2999,3000],{},"What",[1315,3002,3003],{},"When it stops",[1328,3005,3006,3014,3032,3040,3054],{},[1312,3007,3008,3011],{},[1333,3009,3010],{},"A new request, or a new composition started for them",[1333,3012,3013],{},"At once: every start checks the person again",[1312,3015,3016,3019],{},[1333,3017,3018],{},"A step that may change data, inside work already running",[1333,3020,3021,3022,1794,3025,1794,3028,3031],{},"At its next such step: the step is refused and the run fails with the reason (",[1276,3023,3024],{},"REQUESTER_INACTIVE",[1276,3026,3027],{},"REQUESTER_NOT_MEMBER",[1276,3029,3030],{},"REQUESTER_NOT_IN_WORKSPACE",", ...)",[1312,3033,3034,3037],{},[1333,3035,3036],{},"Work that only reads, task leases and agent sessions working for them",[1333,3038,3039],{},"Within seconds: the platform cancels them",[1312,3041,3042,3045],{},[1333,3043,3044],{},"The agent's answer in the platform chat (path A)",[1333,3046,3047,3048,3051,3052],{},"Never posted. An organization admin sees ",[1276,3049,3050],{},"requester_revoked:\u003Ccode>"," in ",[1276,3053,1885],{},[1312,3055,3056,3059],{},[1333,3057,3058],{},"Your harness's answer (path B)",[1333,3060,3061,3062],{},"Only if your harness checks before posting, as described in ",[1212,3063,1373],{"href":1372},[1203,3065,3066,3069,3070,3072],{},[1207,3067,3068],{},"Path B: stop work you hold outside the platform."," The platform cannot cancel work your harness does on its own. Check the person before each answer with ",[1276,3071,2541],{},". When a person is removed from or suspended in the space, their key also leaves the space's membership list (kind 13534, signed by the chat server), so a harness subscribed to that list can stop their work at once. Other ways of losing access (an admin disabling the person, for example) are not announced in the chat yet: your next start or check is refused instead.",[1250,3074,3076],{"id":3075},"what-the-run-records","What the run records",[1258,3078,3079,3085,3096,3102],{},[1261,3080,3081,3084],{},[1276,3082,3083],{},"metadata.requested_by"," on the run and on every step below it: the requester's end user, app, workspace, space, the request message id, and the approval when there was one. No step can change or drop it.",[1261,3086,3087,3088,3091,3092,3095],{},"The run's actor is the agent, and ",[1276,3089,3090],{},"triggered_by"," is ",[1276,3093,3094],{},"agent:\u003Cstaff actor uuid>",", whatever the caller sent.",[1261,3097,3098,3099,3101],{},"Rows the run writes in ",[1212,3100,187],{"href":591}," are owned by the agent, never by the requester.",[1261,3103,3104,3105,3108],{},"Refused starts are written to your audit log as ",[1276,3106,3107],{},"identity.requester.refused",", sampled to about one entry a minute per agent and code.",[1250,3110,3112],{"id":3111},"refusal-codes","Refusal codes",[1203,3114,3115],{},[1207,3116,3117],{},"The request message",[1306,3119,3120,3133],{},[1309,3121,3122],{},[1312,3123,3124,3127,3130],{},[1315,3125,3126],{},"Code",[1315,3128,3129],{},"Meaning",[1315,3131,3132],{},"What to do",[1328,3134,3135,3157,3169,3182,3198,3213,3226,3239,3251,3264,3276,3289],{},[1312,3136,3137,3141,3144],{},[1333,3138,3139],{},[1276,3140,2407],{},[1333,3142,3143],{},"The reference or event has the wrong shape: unknown keys, not a chat message, missing fields",[1333,3145,3146,3147,1794,3149,1794,3151,3153,3154,3156],{},"Send ",[1276,3148,2071],{},[1276,3150,2092],{},[1276,3152,2113],{}," (and ",[1276,3155,2403],{},") only, with the full event",[1312,3158,3159,3163,3166],{},[1333,3160,3161],{},[1276,3162,2372],{},[1333,3164,3165],{},"The event id or signature does not verify",[1333,3167,3168],{},"Forward the event exactly as it came from the chat",[1312,3170,3171,3176,3179],{},[1333,3172,3173],{},[1276,3174,3175],{},"REQUESTER_SPACE_UNAVAILABLE",[1333,3177,3178],{},"The space is not active, or belongs to another organization",[1333,3180,3181],{},"Use a space of the agent's organization",[1312,3183,3184,3189,3192],{},[1333,3185,3186],{},[1276,3187,3188],{},"REQUESTER_WRONG_CHANNEL",[1333,3190,3191],{},"Not exactly one channel tag, an archived channel, or a tap outside the approval's channel",[1333,3193,3194,3195,3197],{},"Use the message's own channel; post the card where ",[1276,3196,2641],{}," says",[1312,3199,3200,3204,3207],{},[1333,3201,3202],{},[1276,3203,1819],{},[1333,3205,3206],{},"The agent has no key in this space: not attached (path A) or no bound key (path B)",[1333,3208,3209,3210],{},"Attach the actor, or bind its key with ",[1276,3211,3212],{},"buzz.org-agent-key.bind-actor",[1312,3214,3215,3220,3223],{},[1333,3216,3217],{},[1276,3218,3219],{},"REQUESTER_NOT_ADDRESSED",[1333,3221,3222],{},"The message does not mention this agent",[1333,3224,3225],{},"The person must mention the agent",[1312,3227,3228,3233,3236],{},[1333,3229,3230],{},[1276,3231,3232],{},"REQUESTER_STALE_EVENT",[1333,3234,3235],{},"The message is older than the window or dated in the future, or a tap falls outside the approval's life",[1333,3237,3238],{},"Ask the person to send the request again",[1312,3240,3241,3245,3248],{},[1333,3242,3243],{},[1276,3244,3027],{},[1333,3246,3247],{},"The author is not a member of the space",[1333,3249,3250],{},"Add the person to the space",[1312,3252,3253,3258,3261],{},[1333,3254,3255],{},[1276,3256,3257],{},"REQUESTER_NOT_HUMAN",[1333,3259,3260],{},"The author is an actor, an organization agent key, a relay bot, or the agent itself",[1333,3262,3263],{},"Only people can be requesters",[1312,3265,3266,3270,3273],{},[1333,3267,3268],{},[1276,3269,3024],{},[1333,3271,3272],{},"The person, their seat, account or app grant is not active, or they were signed out after the message",[1333,3274,3275],{},"Restore the person's access, then ask them to send the request again",[1312,3277,3278,3283,3286],{},[1333,3279,3280],{},[1276,3281,3282],{},"REQUESTER_EVENT_CLAIMED",[1333,3284,3285],{},"Another agent already used this message",[1333,3287,3288],{},"Each agent answers its own mentions",[1312,3290,3291,3296,3299],{},[1333,3292,3293],{},[1276,3294,3295],{},"REQUESTER_WRONG_ORGANIZATION",[1333,3297,3298],{},"The run's organization is not the requester's",[1333,3300,3301],{},"Start in the organization that owns the space",[1203,3303,3304],{},[1207,3305,3306],{},"The workflow and the requester",[1306,3308,3309,3319],{},[1309,3310,3311],{},[1312,3312,3313,3315,3317],{},[1315,3314,3126],{},[1315,3316,3129],{},[1315,3318,3132],{},[1328,3320,3321,3337,3355,3370,3383,3395,3407,3420],{},[1312,3322,3323,3328,3334],{},[1333,3324,3325],{},[1276,3326,3327],{},"REQUESTER_NOT_EXPOSED",[1333,3329,3330,3331,3333],{},"Not a composition your app exposes, or not the version it serves (",[1276,3332,2560],{}," says which)",[1333,3335,3336],{},"Expose it, or start the served version",[1312,3338,3339,3344,3347],{},[1333,3340,3341],{},[1276,3342,3343],{},"REQUESTER_NOT_AGENT_ENABLED",[1333,3345,3346],{},"The exposure is not enabled for agents",[1333,3348,3349,3350,2542,3352],{},"A person runs ",[1276,3351,1550],{},[1276,3353,3354],{},"agent_on_behalf: true",[1312,3356,3357,3361,3364],{},[1333,3358,3359],{},[1276,3360,2489],{},[1333,3362,3363],{},"No group of the app explicitly grants this composition",[1333,3365,3366,3367,3369],{},"Grant ",[1276,3368,1645],{}," to the right groups",[1312,3371,3372,3377,3380],{},[1333,3373,3374],{},[1276,3375,3376],{},"REQUESTER_NOT_PERMITTED",[1333,3378,3379],{},"Groups are granted it, but not the requester's",[1333,3381,3382],{},"Move the person to a granted group, or tell them they cannot",[1312,3384,3385,3389,3392],{},[1333,3386,3387],{},[1276,3388,3030],{},[1333,3390,3391],{},"The person is not an active member of the request's workspace, or the workspace is inactive",[1333,3393,3394],{},"Add them to the workspace",[1312,3396,3397,3401,3404],{},[1333,3398,3399],{},[1276,3400,1841],{},[1333,3402,3403],{},"A raw catalog workflow or another tool was called for the requester",[1333,3405,3406],{},"Wrap the step in an exposed composition",[1312,3408,3409,3414,3417],{},[1333,3410,3411],{},[1276,3412,3413],{},"REQUESTER_READ_ONLY_VIOLATION",[1333,3415,3416],{},"A read-only run tried to start a write",[1333,3418,3419],{},"Mark the step read-only only if it is; otherwise ask for an approval",[1312,3421,3422,3426,3429],{},[1333,3423,3424],{},[1276,3425,2940],{},[1333,3427,3428],{},"The read window is over or the read budget (path B: 20) is spent, or a task lease was asked after the window",[1333,3430,3431,3432,3434],{},"Ask the person to send the request again. For long work, ask for a ",[1212,3433,1399],{"href":1398}," inside the window",[1203,3436,3437],{},[1207,3438,3439],{},"Approvals",[1306,3441,3442,3452],{},[1309,3443,3444],{},[1312,3445,3446,3448,3450],{},[1315,3447,3126],{},[1315,3449,3129],{},[1315,3451,3132],{},[1328,3453,3454,3470,3482,3496,3509,3521,3539,3551],{},[1312,3455,3456,3461,3464],{},[1333,3457,3458],{},[1276,3459,3460],{},"REQUESTER_APPROVAL_REQUIRED",[1333,3462,3463],{},"A write with no approval",[1333,3465,3466,3467,3469],{},"Call ",[1276,3468,2598],{}," and wait for the tap",[1312,3471,3472,3476,3479],{},[1333,3473,3474],{},[1276,3475,2857],{},[1333,3477,3478],{},"The card has not been tapped yet",[1333,3480,3481],{},"Wait for the tap; do not start again until then",[1312,3483,3484,3488,3493],{},[1333,3485,3486],{},[1276,3487,2864],{},[1333,3489,3490,3491],{},"The person tapped ",[1523,3492,1871],{},[1333,3494,3495],{},"Do not retry. Ask the person what they want instead",[1312,3497,3498,3503,3506],{},[1333,3499,3500],{},[1276,3501,3502],{},"REQUESTER_APPROVAL_EXPIRED",[1333,3504,3505],{},"Past the 10 minutes",[1333,3507,3508],{},"Ask for a new approval",[1312,3510,3511,3515,3518],{},[1333,3512,3513],{},[1276,3514,2722],{},[1333,3516,3517],{},"Already spent by an earlier start",[1333,3519,3520],{},"Ask for a new approval for each start",[1312,3522,3523,3528,3531],{},[1333,3524,3525],{},[1276,3526,3527],{},"REQUESTER_APPROVAL_INVALID",[1333,3529,3530],{},"Unknown approval, or one for another agent, person, request, composition or version",[1333,3532,3533,3534,1868,3536,3538],{},"Use the ",[1276,3535,2403],{},[1276,3537,2560],{}," from your own request",[1312,3540,3541,3545,3548],{},[1333,3542,3543],{},[1276,3544,2743],{},[1333,3546,3547],{},"The input differs from the approved input",[1333,3549,3550],{},"Send exactly the input you asked approval for",[1312,3552,3553,3558,3561],{},[1333,3554,3555],{},[1276,3556,3557],{},"REQUESTER_APPROVER_MISMATCH",[1333,3559,3560],{},"Someone other than the requester tapped",[1333,3562,3563],{},"Only the requester can approve",[1203,3565,3566],{},[1207,3567,3568],{},"The agent and the call",[1306,3570,3571,3581],{},[1309,3572,3573],{},[1312,3574,3575,3577,3579],{},[1315,3576,3126],{},[1315,3578,3129],{},[1315,3580,3132],{},[1328,3582,3583,3598,3611,3625,3637,3649,3661,3674],{},[1312,3584,3585,3589,3595],{},[1333,3586,3587],{},[1276,3588,1300],{},[1333,3590,3591,3592,3594],{},"The caller is not a Staff agent's ",[1276,3593,1278],{}," token or hosted session",[1333,3596,3597],{},"Call with the agent's own credential",[1312,3599,3600,3605,3608],{},[1333,3601,3602],{},[1276,3603,3604],{},"REQUESTER_AGENT_INELIGIBLE",[1333,3606,3607],{},"The agent is not active, has no live identity or token, or is not on a paid RBAC-scoped seat",[1333,3609,3610],{},"Fix the actor's seat and token",[1312,3612,3613,3617,3620],{},[1333,3614,3615],{},[1276,3616,1769],{},[1333,3618,3619],{},"This actor must name a requester and none was given or resolved",[1333,3621,3146,3622,3624],{},[1276,3623,1368],{},", or have the person mention the actor",[1312,3626,3627,3631,3634],{},[1333,3628,3629],{},[1276,3630,2443],{},[1333,3632,3633],{},"The input tries to set the requester, or a hosted session sent a second one",[1333,3635,3636],{},"Remove the field; the requester comes only from the message",[1312,3638,3639,3643,3646],{},[1333,3640,3641],{},[1276,3642,1847],{},[1333,3644,3645],{},"Someone other than the requester messaged a requester-bound session",[1333,3647,3648],{},"The other person starts their own request",[1312,3650,3651,3655,3658],{},[1333,3652,3653],{},[1276,3654,1861],{},[1333,3656,3657],{},"The org's tool policy sends this call to a reviewer, which cannot apply to a call made for a person",[1333,3659,3660],{},"Allow that workflow for the agent in the tool policy",[1312,3662,3663,3668,3671],{},[1333,3664,3665],{},[1276,3666,3667],{},"REQUESTER_START_NOT_RECORDED",[1333,3669,3670],{},"The start was not recorded against its approval or read before it ran",[1333,3672,3673],{},"Start again through the normal start call",[1312,3675,3676,3687,3690],{},[1333,3677,3678,1794,3681,1794,3684],{},[1276,3679,3680],{},"REQUESTER_UNAVAILABLE",[1276,3682,3683],{},"REQUESTER_CHECK_UNAVAILABLE",[1276,3685,3686],{},"REQUESTER_CHECK_FAILED",[1333,3688,3689],{},"The check could not run, so the start was refused",[1333,3691,3692],{},"Retry later. If it persists, contact support",[1250,3694,3696],{"id":3695},"not-supported-yet","Not supported yet",[1258,3698,3699,3708,3714,3720,3726,3732],{},[1261,3700,3701,3704,3705,3707],{},[1207,3702,3703],{},"Person- and workspace-owned tables."," Runs made for a requester reach only the app-owned ",[1212,3706,187],{"href":611}," tables granted to the agent. Tables owned by a person or a workspace stay closed to them, so the agent can reach neither the requester's own rows nor anyone else's. Writes that land in such tables are refused until a narrowing design ships.",[1261,3709,3710,3713],{},[1207,3711,3712],{},"Read-only exposures are rare."," See the warning above: most actions need a tap until more catalog workflows declare that they have no side effects.",[1261,3715,3716,3719],{},[1207,3717,3718],{},"Approval card preparation."," On path A the agent waits up to 120 seconds for the card to be prepared. If it is not ready in time, nothing is done and the person can ask again.",[1261,3721,3722,3725],{},[1207,3723,3724],{},"Approvals by someone else."," Only the requester approves. An app admin cannot approve for another person.",[1261,3727,3728,3731],{},[1207,3729,3730],{},"Other work by a requester-required actor."," Such an actor works only for people. Its sessions started by a schedule or a Staff event, with no person behind them, cannot call tools.",[1261,3733,3734,3737],{},[1207,3735,3736],{},"Who asked, on rows."," App Data rows do not record the requester yet; the run does.",[1250,3739,3741],{"id":3740},"ask-your-ai-assistant","Ask your AI assistant",[1609,3743,3747],{"className":3744,"code":3745,"filename":3746,"language":1614,"meta":1615},[1612],"Check whether the person who sent this chat message may have my agent run virtual.\u003Cuuid>@\u003Cversion>. Use identity.requester.check with the message as request_reference and tell me the code.\n\nList the compositions my app exposes and which of them have agent_on_behalf on. Prepare (do not run) the identity.exposure.set-agent-policy call for the one called \"\u003Cname>\".\n\nMy agent got REQUESTER_NOT_PERMITTED for \"\u003Ccomposition>\". Find the group that grants vw:\u003Clineage_uuid>:invoke and the group of the requester, and explain the gap. Do not change anything.\n","prompts",[1276,3748,3745],{"__ignoreMap":1615},[1250,3750,3752],{"id":3751},"for-ai-agents","For AI agents",[1306,3754,3755,3763],{},[1309,3756,3757],{},[1312,3758,3759,3761],{},[1315,3760,2340],{},[1315,3762,2343],{},[1328,3764,3765,3773,3792,3808,3822,3834,3844,3857],{},[1312,3766,3767,3770],{},[1333,3768,3769],{},"Who you are",[1333,3771,3772],{},"You run as your own actor. Never ask for or use a person's token",[1312,3774,3775,3778],{},[1333,3776,3777],{},"Human only",[1333,3779,3780,1794,3782,1868,3785,3787,3788,3791],{},[1276,3781,1550],{},[1276,3783,3784],{},"staff.set-actor-requester-required",[1276,3786,3212],{}," are refused for agents: each checks who started it and answers a permission error (",[1276,3789,3790],{},"identity_admin_requires_human"," for the identity one) to an agent, an agent session or an API key. Prepare the call; a person starts it",[1312,3793,3794,3797],{},[1333,3795,3796],{},"Writes",[1333,3798,3466,3799,3801,3802,3804,3805,3807],{},[1276,3800,2598],{},", post its card, wait for the tap (path B: forward it to ",[1276,3803,2688],{},"), then start with the identical input and ",[1276,3806,2403],{},". Never treat a typed \"ok\" as approval",[1312,3809,3810,3813],{},[1333,3811,3812],{},"Retries",[1333,3814,3815,1794,3817,1868,3819,3821],{},[1276,3816,2864],{},[1276,3818,3376],{},[1276,3820,2489],{}," do not change on retry. Tell the person",[1312,3823,3824,3827],{},[1333,3825,3826],{},"Expired",[1333,3828,3829,1245,3831,3833],{},[1276,3830,2940],{},[1276,3832,3232],{},": ask the person to send the request again",[1312,3835,3836,3838],{},[1333,3837,2868],{},[1333,3839,3840,3841,3843],{},"Ask ",[1276,3842,2879],{}," inside the window, post its card, and wait for the tap. A lease never approves a write",[1312,3845,3846,3849],{},[1333,3847,3848],{},"Before answering (path B)",[1333,3850,3466,3851,3853,3854,3856],{},[1276,3852,2541],{},"; post nothing unless ",[1276,3855,2555],{}," is true",[1312,3858,3859,3862],{},[1333,3860,3861],{},"Raw tools",[1333,3863,3864],{},"For a requester, use exposed compositions only",[3866,3867,3868,3876,3881,3887],"card-group",{},[2923,3869,3870],{"icon":25,"title":703,"to":704},[1203,3871,3872,3873,3875],{},"RBAC-scoped seats and ",[1276,3874,1278],{}," tokens.",[2923,3877,3878],{"icon":826,"title":851,"to":852},[1203,3879,3880],{},"Attach an actor to a space (path A).",[2923,3882,3884],{"icon":93,"title":3883,"to":488},"Compositions",[1203,3885,3886],{},"Save and expose what the agent may run.",[2923,3888,3889],{"icon":162,"title":1037,"to":1038},[1203,3890,3891],{},"Roles and groups that grant capabilities.",[3893,3894,3895],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":1615,"searchDepth":1919,"depth":1940,"links":3897},[3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912],{"id":1252,"depth":1940,"text":1253},{"id":1303,"depth":1940,"text":1304},{"id":1421,"depth":1940,"text":1422},{"id":1492,"depth":1940,"text":1493},{"id":1554,"depth":1940,"text":1555},{"id":1822,"depth":1940,"text":1823},{"id":1897,"depth":1940,"text":1898},{"id":2586,"depth":1940,"text":2587},{"id":2867,"depth":1940,"text":2868},{"id":2988,"depth":1940,"text":2583},{"id":3075,"depth":1940,"text":3076},{"id":3111,"depth":1940,"text":3112},{"id":3695,"depth":1940,"text":3696},{"id":3740,"depth":1940,"text":3741},{"id":3751,"depth":1940,"text":3752},"Let a Staff agent do work for the person who asked it, in chat or from your own agent harness. The agent keeps its own identity and seat; the person is checked on every start, reads ride on their message and every write needs their tap","md",null,{},{"icon":741},{"title":738,"description":3913},"eFRurOZcMcfPpujssU9enk1X31OfaymWW7w7nUOEqjM",[3921,3923],{"title":733,"path":734,"stem":735,"description":3922,"icon":736,"children":-1},"Staff actors that make videos and posts. They fill existing templates, render them and send everything for review; they never generate images or video with a model",{"title":201,"path":743,"stem":744,"description":3924,"icon":44,"children":-1},"Host your Orkestia app — website, App Data, Files on site MinIO, and a Nostr Buzz relay — from the console, without running your own cluster.",1794361934902]