[{"data":1,"prerenderedAt":1204},["ShallowReactive",2],{"navigation_docs":3,"-agents-runtime-api":320,"-agents-runtime-api-surround":1199},[4,35,69,109,133,193,228,262,305],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-ph-house",{"title":16,"path":17,"stem":18,"icon":19},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-ph-rocket-launch",{"title":21,"path":22,"stem":23,"icon":24},"Concepts","\u002Fgetting-started\u002Fconcepts","1.getting-started\u002F3.concepts","i-ph-book-open",{"title":26,"path":27,"stem":28,"icon":29},"Install","\u002Fgetting-started\u002Finstall","1.getting-started\u002F4.install","i-ph-download-simple",{"title":31,"path":32,"stem":33,"icon":34},"What works today","\u002Fgetting-started\u002Fstatus","1.getting-started\u002F5.status","i-ph-list-checks",{"title":21,"icon":6,"path":36,"stem":37,"children":38,"page":6},"\u002Fconcepts","2.concepts",[39,44,49,54,59,64],{"title":40,"path":41,"stem":42,"icon":43},"Architecture","\u002Fconcepts\u002Farchitecture","2.concepts\u002F1.architecture","i-ph-planet",{"title":45,"path":46,"stem":47,"icon":48},"Jobs and durability","\u002Fconcepts\u002Fjobs","2.concepts\u002F2.jobs","i-ph-infinity",{"title":50,"path":51,"stem":52,"icon":53},"Routing","\u002Fconcepts\u002Frouting","2.concepts\u002F3.routing","i-ph-path",{"title":55,"path":56,"stem":57,"icon":58},"Security model","\u002Fconcepts\u002Fsecurity","2.concepts\u002F4.security","i-ph-shield-check",{"title":60,"path":61,"stem":62,"icon":63},"Tenants","\u002Fconcepts\u002Ftenants","2.concepts\u002F5.tenants","i-ph-buildings",{"title":65,"path":66,"stem":67,"icon":68},"Temporal","\u002Fconcepts\u002Ftemporal","2.concepts\u002F6.temporal","i-ph-clock",{"title":70,"icon":6,"path":71,"stem":72,"children":73,"page":6},"Run a fleet","\u002Ffleet","3.fleet",[74,79,84,89,94,99,104],{"title":75,"path":76,"stem":77,"icon":78},"Dev mode","\u002Ffleet\u002Fdev-mode","3.fleet\u002F1.dev-mode","i-ph-laptop",{"title":80,"path":81,"stem":82,"icon":83},"Run a cluster","\u002Ffleet\u002Fcluster","3.fleet\u002F2.cluster","i-ph-hard-drives",{"title":85,"path":86,"stem":87,"icon":88},"Join nodes","\u002Ffleet\u002Fjoin-nodes","3.fleet\u002F3.join-nodes","i-ph-plugs-connected",{"title":90,"path":91,"stem":92,"icon":93},"Manage nodes","\u002Ffleet\u002Fmanage-nodes","3.fleet\u002F4.manage-nodes","i-ph-list-bullets",{"title":95,"path":96,"stem":97,"icon":98},"Secrets","\u002Ffleet\u002Fsecrets","3.fleet\u002F5.secrets","i-ph-key",{"title":100,"path":101,"stem":102,"icon":103},"High availability","\u002Ffleet\u002Fhigh-availability","3.fleet\u002F6.high-availability","i-ph-copy",{"title":105,"path":106,"stem":107,"icon":108},"Upgrades, backups and restores","\u002Ffleet\u002Fupgrades","3.fleet\u002F7.upgrades","i-ph-arrows-clockwise",{"title":110,"icon":6,"path":111,"stem":112,"children":113,"page":6},"Use plugins","\u002Fplugins","4.plugins",[114,119,124,128],{"title":115,"path":116,"stem":117,"icon":118},"What a plugin is","\u002Fplugins\u002Foverview","4.plugins\u002F1.overview","i-ph-puzzle-piece",{"title":120,"path":121,"stem":122,"icon":123},"Install and update","\u002Fplugins\u002Finstall","4.plugins\u002F2.install","i-ph-package",{"title":125,"path":126,"stem":127,"icon":123},"Existing MCP packages","\u002Fplugins\u002Fpackages","4.plugins\u002F3.packages",{"title":129,"path":130,"stem":131,"icon":132},"The catalog","\u002Fplugins\u002Fcatalog","4.plugins\u002F4.catalog","i-ph-books",{"title":134,"icon":6,"path":135,"stem":136,"children":137,"page":6},"Build plugins","\u002Fbuild-plugins","5.build-plugins",[138,143,148,153,158,163,168,173,178,183,188],{"title":139,"path":140,"stem":141,"icon":142},"Your first plugin","\u002Fbuild-plugins\u002Ffirst-plugin","5.build-plugins\u002F1.first-plugin","i-ph-hammer",{"title":144,"path":145,"stem":146,"icon":147},"Harnesses","\u002Fbuild-plugins\u002Fharnesses","5.build-plugins\u002F10.harnesses","i-ph-cpu",{"title":149,"path":150,"stem":151,"icon":152},"Example: support triage","\u002Fbuild-plugins\u002Fexample-support-triage","5.build-plugins\u002F11.example-support-triage","i-ph-lifebuoy",{"title":154,"path":155,"stem":156,"icon":157},"Tools","\u002Fbuild-plugins\u002Ftools","5.build-plugins\u002F2.tools","i-ph-wrench",{"title":159,"path":160,"stem":161,"icon":162},"Agents","\u002Fbuild-plugins\u002Fagents","5.build-plugins\u002F3.agents","i-ph-robot",{"title":164,"path":165,"stem":166,"icon":167},"Skills","\u002Fbuild-plugins\u002Fskills","5.build-plugins\u002F4.skills","i-ph-graduation-cap",{"title":169,"path":170,"stem":171,"icon":172},"Develop and test","\u002Fbuild-plugins\u002Fdevelop-and-test","5.build-plugins\u002F5.develop-and-test","i-ph-flask",{"title":174,"path":175,"stem":176,"icon":177},"Publish and version","\u002Fbuild-plugins\u002Fpublish","5.build-plugins\u002F6.publish","i-ph-tag",{"title":179,"path":180,"stem":181,"icon":182},"Hooks","\u002Fbuild-plugins\u002Fhooks","5.build-plugins\u002F7.hooks","i-ph-anchor",{"title":184,"path":185,"stem":186,"icon":187},"Flows","\u002Fbuild-plugins\u002Fflows","5.build-plugins\u002F8.flows","i-ph-flow-arrow",{"title":189,"path":190,"stem":191,"icon":192},"Evals and quality gates","\u002Fbuild-plugins\u002Fevals","5.build-plugins\u002F9.evals","i-ph-seal-check",{"title":194,"icon":6,"path":195,"stem":196,"children":197,"page":6},"Run agents","\u002Fagents","6.agents",[198,203,208,213,218,223],{"title":199,"path":200,"stem":201,"icon":202},"Run jobs","\u002Fagents\u002Frun-jobs","6.agents\u002F1.run-jobs","i-ph-play",{"title":204,"path":205,"stem":206,"icon":207},"Models and keys","\u002Fagents\u002Fmodels-and-keys","6.agents\u002F2.models-and-keys","i-ph-sparkle",{"title":209,"path":210,"stem":211,"icon":212},"Delegation","\u002Fagents\u002Fdelegation","6.agents\u002F3.delegation","i-ph-git-fork",{"title":214,"path":215,"stem":216,"icon":217},"Contracts and limits","\u002Fagents\u002Fcontracts-and-limits","6.agents\u002F4.contracts-and-limits","i-ph-ruler",{"title":219,"path":220,"stem":221,"icon":222},"Runtime API","\u002Fagents\u002Fruntime-api","6.agents\u002F5.runtime-api","i-ph-plug",{"title":224,"path":225,"stem":226,"icon":227},"Approvals","\u002Fagents\u002Fapprovals","6.agents\u002F6.approvals","i-ph-hand-palm",{"title":229,"icon":6,"path":230,"stem":231,"children":232,"page":6},"Monitor","\u002Fmonitor","7.monitor",[233,238,243,248,253,258],{"title":234,"path":235,"stem":236,"icon":237},"Web UI","\u002Fmonitor\u002Fweb-ui","7.monitor\u002F0.web-ui","i-ph-monitor",{"title":239,"path":240,"stem":241,"icon":242},"Cost and usage","\u002Fmonitor\u002Fcost-and-usage","7.monitor\u002F1.cost-and-usage","i-ph-coins",{"title":244,"path":245,"stem":246,"icon":247},"Node health","\u002Fmonitor\u002Fnodes","7.monitor\u002F2.nodes","i-ph-heartbeat",{"title":249,"path":250,"stem":251,"icon":252},"Job history","\u002Fmonitor\u002Fhistory","7.monitor\u002F3.history","i-ph-clock-counter-clockwise",{"title":254,"path":255,"stem":256,"icon":257},"Tracing and metrics","\u002Fmonitor\u002Fobservability","7.monitor\u002F4.observability","i-ph-chart-line",{"title":259,"path":260,"stem":261,"icon":152},"Troubleshooting","\u002Fmonitor\u002Ftroubleshooting","7.monitor\u002F5.troubleshooting",{"title":263,"icon":6,"path":264,"stem":265,"children":266,"page":6},"Reference","\u002Freference","8.reference",[267,281,286,290,295,300],{"title":268,"icon":269,"path":270,"stem":271,"children":272,"page":6},"CLI","i-ph-terminal-window","\u002Freference\u002Fcli","8.reference\u002F1.cli",[273,277],{"title":274,"path":275,"stem":276},"orchestrator-zero","\u002Freference\u002Fcli\u002Forchestrator-zero","8.reference\u002F1.cli\u002F1.orchestrator-zero",{"title":278,"path":279,"stem":280},"orchestrator-zero-node","\u002Freference\u002Fcli\u002Forchestrator-zero-node","8.reference\u002F1.cli\u002F2.orchestrator-zero-node",{"title":282,"path":283,"stem":284,"icon":285},"oz0-plugin.yaml","\u002Freference\u002Fplugin-manifest","8.reference\u002F2.plugin-manifest","i-ph-file-code",{"title":287,"path":288,"stem":289,"icon":162},"Agent definition","\u002Freference\u002Fagent-definition","8.reference\u002F3.agent-definition",{"title":291,"path":292,"stem":293,"icon":294},"Ports","\u002Freference\u002Fports","8.reference\u002F4.ports","i-ph-network",{"title":296,"path":297,"stem":298,"icon":299},"Environment variables","\u002Freference\u002Fenvironment","8.reference\u002F5.environment","i-ph-brackets-curly",{"title":301,"path":302,"stem":303,"icon":304},"Files and directories","\u002Freference\u002Ffiles","8.reference\u002F6.files","i-ph-tree-structure",{"title":306,"icon":6,"path":307,"stem":308,"children":309,"page":6},"About","\u002Fabout","9.about",[310,315],{"title":311,"path":312,"stem":313,"icon":314},"Licensing","\u002Fabout\u002Flicensing","9.about\u002F1.licensing","i-ph-scales",{"title":316,"path":317,"stem":318,"icon":319},"About these docs","\u002Fabout\u002Fcontributing-docs","9.about\u002F2.contributing-docs","i-ph-pencil-simple",{"id":321,"title":219,"body":322,"description":1192,"extension":1193,"links":1194,"meta":1195,"navigation":1196,"path":220,"seo":1197,"stem":221,"__hash__":1198},"docs\u002F6.agents\u002F5.runtime-api.md",{"type":323,"value":324,"toc":1186},"minimark",[325,334,463,468,480,575,586,633,656,666,670,673,724,822,841,845,901,1003,1006,1058,1062,1067,1103,1164,1182],[326,327,328,329,333],"p",{},"The runtime API is ",[330,331,332],"code",{},"oz0.runtime.v1.RuntimeService"," on the edge's HTTPS port, 7443. It speaks Connect (JSON or protobuf over HTTP), gRPC and gRPC-Web, so any language with an HTTP client or a gRPC library can use it. The CLI uses the same API.",[335,336,337,350],"table",{},[338,339,340],"thead",{},[341,342,343,347],"tr",{},[344,345,346],"th",{},"Method",[344,348,349],{},"Does",[351,352,353,364,374,384,394,404,418,431,443,453],"tbody",{},[341,354,355,361],{},[356,357,358],"td",{},[330,359,360],{},"StartJob",[356,362,363],{},"Starts an agent. Starting a job with the ID of one still running returns that job.",[341,365,366,371],{},[356,367,368],{},[330,369,370],{},"GetJob",[356,372,373],{},"Status, answer or error, child job IDs, and cost per branch",[341,375,376,381],{},[356,377,378],{},[330,379,380],{},"CancelJob",[356,382,383],{},"Cancels a job and its children",[341,385,386,391],{},[356,387,388],{},[330,389,390],{},"ListJobs",[356,392,393],{},"Recent top-level jobs, newest first",[341,395,396,401],{},[356,397,398],{},[330,399,400],{},"WatchJob",[356,402,403],{},"A stream of what the job and its child jobs do as it happens: text, tool calls, tool results, children and approvals, ending with the job's final state",[341,405,406,411],{},[356,407,408],{},[330,409,410],{},"ListApprovals",[356,412,413,414,417],{},"What waits for a person's decision across the tenant's running jobs, oldest first; ",[330,415,416],{},"job"," narrows it to one job",[341,419,420,425],{},[356,421,422],{},[330,423,424],{},"DecideApproval",[356,426,427,428],{},"Approves or denies one, with a comment; admins and operators may. See ",[429,430,224],"a",{"href":225},[341,432,433,438],{},[356,434,435],{},[330,436,437],{},"GetJobTrace",[356,439,440,441],{},"The job's steps from its history, with what each cost, and findings about what looks wrong. See ",[429,442,249],{"href":250},[341,444,445,450],{},[356,446,447],{},[330,448,449],{},"GetJobStep",[356,451,452],{},"What one step read and wrote. It can hold customer data: admins and operators may, and each call is in the audit log",[341,454,455,460],{},[356,456,457],{},[330,458,459],{},"GetCatalog",[356,461,462],{},"The tenant's agents and flows, with their input and output schemas",[464,465,467],"h2",{"id":466},"authentication","Authentication",[326,469,470,471,475,476,479],{},"Apps use one of the tenant's ",[472,473,474],"strong",{},"API keys",". A tenant's admins make them with the CLI, or on the web UI's ",[472,477,478],{},"Settings"," page:",[481,482,488],"pre",{"className":483,"code":484,"filename":485,"language":486,"meta":487,"style":487},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","orchestrator-zero apikey create support-desk --tenant acme --role operator\norchestrator-zero apikey create dashboard --tenant acme --role reader --expires 30d\norchestrator-zero apikey list --tenant acme\norchestrator-zero apikey revoke 3f9c2a1b7d0e\n","Terminal","bash","",[330,489,490,520,547,562],{"__ignoreMap":487},[491,492,495,498,502,505,508,511,514,517],"span",{"class":493,"line":494},"line",1,[491,496,274],{"class":497},"sBMFI",[491,499,501],{"class":500},"sfazB"," apikey",[491,503,504],{"class":500}," create",[491,506,507],{"class":500}," support-desk",[491,509,510],{"class":500}," --tenant",[491,512,513],{"class":500}," acme",[491,515,516],{"class":500}," --role",[491,518,519],{"class":500}," operator\n",[491,521,523,525,527,529,532,534,536,538,541,544],{"class":493,"line":522},2,[491,524,274],{"class":497},[491,526,501],{"class":500},[491,528,504],{"class":500},[491,530,531],{"class":500}," dashboard",[491,533,510],{"class":500},[491,535,513],{"class":500},[491,537,516],{"class":500},[491,539,540],{"class":500}," reader",[491,542,543],{"class":500}," --expires",[491,545,546],{"class":500}," 30d\n",[491,548,550,552,554,557,559],{"class":493,"line":549},3,[491,551,274],{"class":497},[491,553,501],{"class":500},[491,555,556],{"class":500}," list",[491,558,510],{"class":500},[491,560,561],{"class":500}," acme\n",[491,563,565,567,569,572],{"class":493,"line":564},4,[491,566,274],{"class":497},[491,568,501],{"class":500},[491,570,571],{"class":500}," revoke",[491,573,574],{"class":500}," 3f9c2a1b7d0e\n",[326,576,577,578,581,582,585],{},"The key is shown once, as ",[330,579,580],{},"oz0_\u003Cid>_\u003Csecret>","; keep it as a secret. Send it as ",[330,583,584],{},"Authorization: Bearer \u003Ckey>",".",[587,588,589,596,605,611,624],"ul",{},[590,591,592,595],"li",{},[472,593,594],{},"A key has a role in its one tenant."," A reader follows jobs. An operator also starts and cancels them and decides approvals.",[590,597,598,601,602,585],{},[472,599,600],{},"Operator keys see what jobs read and wrote,"," unless they are made with ",[330,603,604],{},"--no-content",[590,606,607,610],{},[472,608,609],{},"Keys work only on the runtime API."," They do not work on the admin API, or on Temporal's ports.",[590,612,613,616,617,620,621,585],{},[472,614,615],{},"A key lasts 90 days"," unless it is made with ",[330,618,619],{},"--expires 30d",", another time, or ",[330,622,623],{},"never",[590,625,626,629,630,585],{},[472,627,628],{},"A revoked key stops working within seconds"," on every edge. The jobs a key starts, and the audit log, name it as ",[330,631,632],{},"apikey:\u003Cid>",[326,634,635,636,639,640,643,644,647,648,651,652,655],{},"Operators can use their certificate instead. ",[330,637,638],{},"server init"," writes one to the operator's directory, ",[330,641,642],{},"~\u002F.config\u002Forchestrator-zero\u002F\u003Ccluster>\u002F",", as ",[330,645,646],{},"operator.crt"," and ",[330,649,650],{},"operator.key",", with the cluster's CA as ",[330,653,654],{},"ca.crt",". Nodes are refused.",[326,657,658,659,661,662,665],{},"The edge's certificate comes from the cluster's own CA, so a client trusts that CA rather than the system's: ",[330,660,654],{}," from an operator's directory, or fetched and checked the way the ",[429,663,664],{"href":86},"one-line install"," does.",[464,667,669],{"id":668},"typed-http-routes-and-the-openapi-document","Typed HTTP routes and the OpenAPI document",[326,671,672],{},"Next to the Connect API, the edge has three plain HTTP routes, for the same callers:",[335,674,675,684],{},[338,676,677],{},[341,678,679,682],{},[344,680,681],{},"Route",[344,683,349],{},[351,685,686,704,714],{},[341,687,688,693],{},[356,689,690],{},[330,691,692],{},"POST \u002Fv1\u002Fagents\u002F\u003Cname>\u002Fjobs",[356,694,695,696,699,700,703],{},"Starts an agent or a flow with its input as the body: JSON, or ",[330,697,698],{},"text\u002Fplain"," for a text input. It answers ",[330,701,702],{},"201"," with the job.",[341,705,706,711],{},[356,707,708],{},[330,709,710],{},"GET \u002Fv1\u002Fjobs\u002F\u003Cid>",[356,712,713],{},"The job: its status, and its answer once it has one",[341,715,716,721],{},[356,717,718],{},[330,719,720],{},"GET \u002Fv1\u002Fopenapi.json",[356,722,723],{},"An OpenAPI 3.1 document of the tenant's agents and flows",[481,725,727],{"className":483,"code":726,"filename":485,"language":486,"meta":487,"style":487},"curl --cacert ca.crt -H \"Authorization: Bearer $OZ0_API_KEY\" -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"repo\": \"acme\u002Fapi\", \"pr\": 42}' 'https:\u002F\u002Fedge.example.com:7443\u002Fv1\u002Fagents\u002Freviewer\u002Fjobs?tenant=acme'\ncurl --cacert ca.crt -H \"Authorization: Bearer $OZ0_API_KEY\" 'https:\u002F\u002Fedge.example.com:7443\u002Fv1\u002Fopenapi.json?tenant=acme' > oz0.json\n",[330,728,729,771,791],{"__ignoreMap":487},[491,730,731,734,737,740,743,747,750,754,757,759,762,765,768],{"class":493,"line":494},[491,732,733],{"class":497},"curl",[491,735,736],{"class":500}," --cacert",[491,738,739],{"class":500}," ca.crt",[491,741,742],{"class":500}," -H",[491,744,746],{"class":745},"sMK4o"," \"",[491,748,749],{"class":500},"Authorization: Bearer ",[491,751,753],{"class":752},"sTEyZ","$OZ0_API_KEY",[491,755,756],{"class":745},"\"",[491,758,742],{"class":500},[491,760,761],{"class":745}," '",[491,763,764],{"class":500},"Content-Type: application\u002Fjson",[491,766,767],{"class":745},"'",[491,769,770],{"class":752}," \\\n",[491,772,773,776,778,781,783,785,788],{"class":493,"line":522},[491,774,775],{"class":500},"  -d",[491,777,761],{"class":745},[491,779,780],{"class":500},"{\"repo\": \"acme\u002Fapi\", \"pr\": 42}",[491,782,767],{"class":745},[491,784,761],{"class":745},[491,786,787],{"class":500},"https:\u002F\u002Fedge.example.com:7443\u002Fv1\u002Fagents\u002Freviewer\u002Fjobs?tenant=acme",[491,789,790],{"class":745},"'\n",[491,792,793,795,797,799,801,803,805,807,809,811,814,816,819],{"class":493,"line":549},[491,794,733],{"class":497},[491,796,736],{"class":500},[491,798,739],{"class":500},[491,800,742],{"class":500},[491,802,746],{"class":745},[491,804,749],{"class":500},[491,806,753],{"class":752},[491,808,756],{"class":745},[491,810,761],{"class":745},[491,812,813],{"class":500},"https:\u002F\u002Fedge.example.com:7443\u002Fv1\u002Fopenapi.json?tenant=acme",[491,815,767],{"class":745},[491,817,818],{"class":745}," >",[491,820,821],{"class":500}," oz0.json\n",[326,823,824,825,828,829,832,833,836,837,840],{},"The document has one operation per agent, ",[330,826,827],{},"run_\u003Cname>",". Its request body is the agent's input schema, and its response is the job, with ",[330,830,831],{},"output"," typed by the agent's output schema. Generate a client from it with any OpenAPI generator. It changes when a plugin changes an agent or a schema, and its ",[330,834,835],{},"ETag"," says when. A plugin installed before Orchestrator Zero put schemas in plugins' bundles needs ",[330,838,839],{},"plugin update"," before its agents' schemas appear.",[464,842,844],{"id":843},"start-a-job-with-curl","Start a job with curl",[481,846,848],{"className":483,"code":847,"filename":485,"language":486,"meta":487,"style":487},"curl --cacert ca.crt -H \"Authorization: Bearer $OZ0_API_KEY\" \\\n  -H 'Content-Type: application\u002Fjson' \\\n  -d '{\"agent\": \"reviewer\", \"input\": {\"repo\": \"acme\u002Fapi\", \"pr\": 42}, \"timeout\": \"900s\", \"tenant\": \"acme\"}' \\\n  https:\u002F\u002Fedge.example.com:7443\u002Foz0.runtime.v1.RuntimeService\u002FStartJob\n",[330,849,850,870,883,896],{"__ignoreMap":487},[491,851,852,854,856,858,860,862,864,866,868],{"class":493,"line":494},[491,853,733],{"class":497},[491,855,736],{"class":500},[491,857,739],{"class":500},[491,859,742],{"class":500},[491,861,746],{"class":745},[491,863,749],{"class":500},[491,865,753],{"class":752},[491,867,756],{"class":745},[491,869,770],{"class":752},[491,871,872,875,877,879,881],{"class":493,"line":522},[491,873,874],{"class":500},"  -H",[491,876,761],{"class":745},[491,878,764],{"class":500},[491,880,767],{"class":745},[491,882,770],{"class":752},[491,884,885,887,889,892,894],{"class":493,"line":549},[491,886,775],{"class":500},[491,888,761],{"class":745},[491,890,891],{"class":500},"{\"agent\": \"reviewer\", \"input\": {\"repo\": \"acme\u002Fapi\", \"pr\": 42}, \"timeout\": \"900s\", \"tenant\": \"acme\"}",[491,893,767],{"class":745},[491,895,770],{"class":752},[491,897,898],{"class":493,"line":564},[491,899,900],{"class":500},"  https:\u002F\u002Fedge.example.com:7443\u002Foz0.runtime.v1.RuntimeService\u002FStartJob\n",[481,902,906],{"className":903,"code":904,"language":905,"meta":487,"style":487},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ \"job\": { \"id\": \"job-bb270cf1-...\", \"agent\": \"reviewer\", \"status\": \"JOB_STATUS_RUNNING\", \"startedAt\": \"...\" } }\n","json",[330,907,908],{"__ignoreMap":487},[491,909,910,913,915,918,920,923,926,928,931,933,935,937,940,942,945,947,950,952,954,956,959,961,963,965,968,970,972,974,977,979,981,983,986,988,990,992,995,997,1000],{"class":493,"line":494},[491,911,912],{"class":745},"{",[491,914,746],{"class":745},[491,916,416],{"class":917},"spNyl",[491,919,756],{"class":745},[491,921,922],{"class":745},":",[491,924,925],{"class":745}," {",[491,927,746],{"class":745},[491,929,930],{"class":497},"id",[491,932,756],{"class":745},[491,934,922],{"class":745},[491,936,746],{"class":745},[491,938,939],{"class":500},"job-bb270cf1-...",[491,941,756],{"class":745},[491,943,944],{"class":745},",",[491,946,746],{"class":745},[491,948,949],{"class":497},"agent",[491,951,756],{"class":745},[491,953,922],{"class":745},[491,955,746],{"class":745},[491,957,958],{"class":500},"reviewer",[491,960,756],{"class":745},[491,962,944],{"class":745},[491,964,746],{"class":745},[491,966,967],{"class":497},"status",[491,969,756],{"class":745},[491,971,922],{"class":745},[491,973,746],{"class":745},[491,975,976],{"class":500},"JOB_STATUS_RUNNING",[491,978,756],{"class":745},[491,980,944],{"class":745},[491,982,746],{"class":745},[491,984,985],{"class":497},"startedAt",[491,987,756],{"class":745},[491,989,922],{"class":745},[491,991,746],{"class":745},[491,993,994],{"class":500},"...",[491,996,756],{"class":745},[491,998,999],{"class":745}," }",[491,1001,1002],{"class":745}," }\n",[326,1004,1005],{},"Then poll it:",[481,1007,1009],{"className":483,"code":1008,"filename":485,"language":486,"meta":487,"style":487},"curl --cacert ca.crt -H \"Authorization: Bearer $OZ0_API_KEY\" \\\n  -H 'Content-Type: application\u002Fjson' -d '{\"id\": \"job-bb270cf1-...\", \"tenant\": \"acme\"}' \\\n  https:\u002F\u002Fedge.example.com:7443\u002Foz0.runtime.v1.RuntimeService\u002FGetJob\n",[330,1010,1011,1031,1053],{"__ignoreMap":487},[491,1012,1013,1015,1017,1019,1021,1023,1025,1027,1029],{"class":493,"line":494},[491,1014,733],{"class":497},[491,1016,736],{"class":500},[491,1018,739],{"class":500},[491,1020,742],{"class":500},[491,1022,746],{"class":745},[491,1024,749],{"class":500},[491,1026,753],{"class":752},[491,1028,756],{"class":745},[491,1030,770],{"class":752},[491,1032,1033,1035,1037,1039,1041,1044,1046,1049,1051],{"class":493,"line":522},[491,1034,874],{"class":500},[491,1036,761],{"class":745},[491,1038,764],{"class":500},[491,1040,767],{"class":745},[491,1042,1043],{"class":500}," -d",[491,1045,761],{"class":745},[491,1047,1048],{"class":500},"{\"id\": \"job-bb270cf1-...\", \"tenant\": \"acme\"}",[491,1050,767],{"class":745},[491,1052,770],{"class":752},[491,1054,1055],{"class":493,"line":549},[491,1056,1057],{"class":500},"  https:\u002F\u002Fedge.example.com:7443\u002Foz0.runtime.v1.RuntimeService\u002FGetJob\n",[464,1059,1061],{"id":1060},"requests-and-responses","Requests and responses",[326,1063,1064,1066],{},[330,1065,360],{}," takes:",[1068,1069,1070,1076,1085,1092,1098],"field-group",{},[1071,1072,1075],"field",{"name":949,"type":1073,":required":1074},"string","true","The agent's or the flow's name, as the catalog lists it.",[1071,1077,1080,1081,1084],{"name":1078,"type":1079},"input","value","Text, or JSON that matches the agent's input schema. The edge checks it against the schema before the job starts: an input that does not fit is refused with ",[330,1082,1083],{},"invalid_argument"," (HTTP 400) and what is wrong, and no job is made.",[1071,1086,1088,1089,585],{"name":1087,"type":1073},"tenant","The tenant to run in; empty means ",[330,1090,1091],{},"default",[1071,1093,1094,1095,585],{"name":930,"type":1073},"An ID for the job; empty means a new random one. May not contain ",[330,1096,1097],{},"\u002F",[1071,1099,1102],{"name":1100,"type":1101},"timeout","duration","How long the job may run in all, on top of the agent's own limits.",[326,1104,1105,1106,1109,1110,1112,1113,1112,1115,1112,1117,1112,1119,1112,1122,1124,1125,1112,1128,1131,1132,1135,1136,1139,1140,1143,1144,1146,1147,1112,1150,1112,1153,1112,1156,1159,1160,1163],{},"A ",[330,1107,1108],{},"Job"," has ",[330,1111,930],{},", ",[330,1114,949],{},[330,1116,967],{},[330,1118,985],{},[330,1120,1121],{},"closedAt",[330,1123,831],{}," (the answer, text or JSON), ",[330,1126,1127],{},"error",[330,1129,1130],{},"children"," (direct child job IDs), ",[330,1133,1134],{},"approvals"," (what it waits for, while it runs), ",[330,1137,1138],{},"flow"," (true for a flow's job) and ",[330,1141,1142],{},"cost",". ",[330,1145,1142],{}," holds the totals (",[330,1148,1149],{},"usd",[330,1151,1152],{},"calls",[330,1154,1155],{},"inputTokens",[330,1157,1158],{},"outputTokens",") and ",[330,1161,1162],{},"branches",": one entry per job in the tree, the job itself first, with its agent, models, nodes, tokens, cached tokens and cost.",[326,1165,1166,1167,1170,1171,1177,1178,1181],{},"The protobuf definition is ",[330,1168,1169],{},"proto\u002Foz0\u002Fruntime\u002Fv1\u002Fruntime.proto"," in the repository. Generate a client for your language from it with ",[429,1172,1176],{"href":1173,"rel":1174},"https:\u002F\u002Fbuf.build",[1175],"nofollow","buf"," or ",[330,1179,1180],{},"protoc","; typed client SDKs for Python, TypeScript and Go are planned.",[1183,1184,1185],"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":487,"searchDepth":522,"depth":522,"links":1187},[1188,1189,1190,1191],{"id":466,"depth":522,"text":467},{"id":668,"depth":522,"text":669},{"id":843,"depth":522,"text":844},{"id":1060,"depth":522,"text":1061},"Start and follow jobs from your own apps, over Connect, gRPC or gRPC-Web.","md",null,{},{"icon":222},{"title":219,"description":1192},"FlirV8yHjDntI8RGPtd37X-3YgqBdbG6GvCK2CBBSzw",[1200,1202],{"title":214,"path":215,"stem":216,"description":1201,"icon":217,"children":-1},"JSON Schema on inputs and answers, and limits the model cannot talk its way around.",{"title":224,"path":225,"stem":226,"description":1203,"icon":227,"children":-1},"Let a person decide before a tool call runs, with the job waiting durably until someone does.",1791135412666]