[{"data":1,"prerenderedAt":686},["ShallowReactive",2],{"navigation_docs":3,"-guide-api-use-from-client":168,"-guide-api-use-from-client-surround":681},[4,146],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":36},"Guide","i-lucide-book-open","\u002Fguide","1.guide",[10,14,37,55,59,63,67,71,75,79,83,87,109,134,138,142],{"title":11,"path":12,"stem":13},"What is Agent Zero?","\u002Fguide\u002Fintroduction","1.guide\u002F1.introduction",{"title":15,"icon":16,"path":17,"stem":18,"children":19,"page":36},"API","i-lucide-plug","\u002Fguide\u002Fapi","1.guide\u002F10.api",[20,24,28,32],{"title":21,"path":22,"stem":23},"API overview","\u002Fguide\u002Fapi\u002Foverview","1.guide\u002F10.api\u002F1.overview",{"title":25,"path":26,"stem":27},"Define endpoints","\u002Fguide\u002Fapi\u002Fdefine-endpoints","1.guide\u002F10.api\u002F2.define-endpoints",{"title":29,"path":30,"stem":31},"Use the API from a client","\u002Fguide\u002Fapi\u002Fuse-from-client","1.guide\u002F10.api\u002F3.use-from-client",{"title":33,"path":34,"stem":35},"Protect endpoints","\u002Fguide\u002Fapi\u002Fprotect-endpoints","1.guide\u002F10.api\u002F4.protect-endpoints",false,{"title":38,"icon":39,"path":40,"stem":41,"children":42,"page":36},"Authentication","i-lucide-lock","\u002Fguide\u002Fauthentication","1.guide\u002F11.authentication",[43,47,51],{"title":44,"path":45,"stem":46},"Authentication overview","\u002Fguide\u002Fauthentication\u002Foverview","1.guide\u002F11.authentication\u002F1.overview",{"title":48,"path":49,"stem":50},"GitHub OAuth","\u002Fguide\u002Fauthentication\u002Foauth","1.guide\u002F11.authentication\u002F2.oauth",{"title":52,"path":53,"stem":54},"Permissions","\u002Fguide\u002Fauthentication\u002Fpermissions","1.guide\u002F11.authentication\u002F3.permissions",{"title":56,"path":57,"stem":58},"Organizations","\u002Fguide\u002Forganizations","1.guide\u002F12.organizations",{"title":60,"path":61,"stem":62},"Frontend","\u002Fguide\u002Ffrontend","1.guide\u002F13.frontend",{"title":64,"path":65,"stem":66},"Mails","\u002Fguide\u002Fmails","1.guide\u002F14.mails",{"title":68,"path":69,"stem":70},"Internationalization","\u002Fguide\u002Finternationalization","1.guide\u002F15.internationalization",{"title":72,"path":73,"stem":74},"Deployment","\u002Fguide\u002Fdeployment","1.guide\u002F16.deployment",{"title":76,"path":77,"stem":78},"Tech stack","\u002Fguide\u002Ftech-stack","1.guide\u002F2.tech-stack",{"title":80,"path":81,"stem":82},"Installation","\u002Fguide\u002Finstallation","1.guide\u002F3.installation",{"title":84,"path":85,"stem":86},"Environment variables","\u002Fguide\u002Fenvironment-variables","1.guide\u002F4.environment-variables",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":36},"Codebase","i-lucide-folder-tree","\u002Fguide\u002Fcodebase","1.guide\u002F5.codebase",[93,97,101,105],{"title":94,"path":95,"stem":96},"Codebase structure","\u002Fguide\u002Fcodebase\u002Fstructure","1.guide\u002F5.codebase\u002F1.structure",{"title":98,"path":99,"stem":100},"Dependencies","\u002Fguide\u002Fcodebase\u002Fdependencies","1.guide\u002F5.codebase\u002F2.dependencies",{"title":102,"path":103,"stem":104},"Formatting and linting","\u002Fguide\u002Fcodebase\u002Fformatting-linting","1.guide\u002F5.codebase\u002F3.formatting-linting",{"title":106,"path":107,"stem":108},"Agent Skills","\u002Fguide\u002Fcodebase\u002Fagent-skills","1.guide\u002F5.codebase\u002F4.agent-skills",{"title":110,"icon":111,"path":112,"stem":113,"children":114,"page":36},"Architecture","i-lucide-layers","\u002Fguide\u002Farchitecture","1.guide\u002F6.architecture",[115,118,122,126,130],{"title":110,"path":116,"stem":117},"\u002Fguide\u002Farchitecture\u002Foverview","1.guide\u002F6.architecture\u002F1.overview",{"title":119,"path":120,"stem":121},"State machine","\u002Fguide\u002Farchitecture\u002Fstate-machine","1.guide\u002F6.architecture\u002F2.state-machine",{"title":123,"path":124,"stem":125},"Execution boundary","\u002Fguide\u002Farchitecture\u002Fexecution-boundary","1.guide\u002F6.architecture\u002F3.execution-boundary",{"title":127,"path":128,"stem":129},"Issue-to-PR workflow","\u002Fguide\u002Farchitecture\u002Fissue-to-pr","1.guide\u002F6.architecture\u002F4.issue-to-pr",{"title":131,"path":132,"stem":133},"Adding a capability","\u002Fguide\u002Farchitecture\u002Fadding-a-capability","1.guide\u002F6.architecture\u002F5.adding-a-capability",{"title":135,"path":136,"stem":137},"Repository policy","\u002Fguide\u002Fconfiguration","1.guide\u002F7.configuration",{"title":139,"path":140,"stem":141},"Safety model","\u002Fguide\u002Fsafety","1.guide\u002F8.safety",{"title":143,"path":144,"stem":145},"Database","\u002Fguide\u002Fdatabase","1.guide\u002F9.database",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":36},"Reference","i-lucide-book-marked","\u002Freference","2.reference",[152,156,160,164],{"title":153,"path":154,"stem":155},"CLI","\u002Freference\u002Fcli","2.reference\u002F1.cli",{"title":157,"path":158,"stem":159},"Model providers","\u002Freference\u002Fmodel-providers","2.reference\u002F2.model-providers",{"title":161,"path":162,"stem":163},"Source-control providers","\u002Freference\u002Fsource-control-providers","2.reference\u002F3.source-control-providers",{"title":165,"path":166,"stem":167},"Sandbox providers","\u002Freference\u002Fsandbox-providers","2.reference\u002F4.sandbox-providers",{"id":169,"title":29,"body":170,"description":188,"extension":676,"links":677,"meta":678,"navigation":307,"path":30,"seo":679,"stem":31,"__hash__":680},"docs\u002F1.guide\u002F10.api\u002F3.use-from-client.md",{"type":171,"value":172,"toc":671},"minimark",[173,178,182,543,546,550,557,637,647,651,667],[174,175,177],"h2",{"id":176},"typed-typescript-clients","Typed TypeScript clients",[179,180,181],"p",{},"Typed clients infer their shape from the router rather than redeclaring request and response types:",[183,184,189],"pre",{"className":185,"code":186,"language":187,"meta":188,"style":188},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createORPCClient } from '@orpc\u002Fclient';\nimport { RPCLink } from '@orpc\u002Fclient\u002Ffetch';\nimport type { RouterClient } from '@orpc\u002Fserver';\nimport type { RpcRouter } from '@agent-zero\u002Fapi';\n\nconst client: RouterClient\u003CRpcRouter> = createORPCClient(\n  new RPCLink({\n    url: 'http:\u002F\u002Flocalhost:3000\u002Frpc',\n    headers: { authorization: `Bearer ${process.env.CONTROL_PLANE_TOKEN}` },\n  }),\n);\n\nconst { tasks } = await client.tasks.list();\nawait client.approvals.decide({ taskId: tasks[0]!.id, decision: 'approved' });\n","ts","",[190,191,192,228,251,277,302,309,343,357,376,420,431,438,443,478],"code",{"__ignoreMap":188},[193,194,197,201,205,209,212,215,218,222,225],"span",{"class":195,"line":196},"line",1,[193,198,200],{"class":199},"s7zQu","import",[193,202,204],{"class":203},"sMK4o"," {",[193,206,208],{"class":207},"sTEyZ"," createORPCClient",[193,210,211],{"class":203}," }",[193,213,214],{"class":199}," from",[193,216,217],{"class":203}," '",[193,219,221],{"class":220},"sfazB","@orpc\u002Fclient",[193,223,224],{"class":203},"'",[193,226,227],{"class":203},";\n",[193,229,231,233,235,238,240,242,244,247,249],{"class":195,"line":230},2,[193,232,200],{"class":199},[193,234,204],{"class":203},[193,236,237],{"class":207}," RPCLink",[193,239,211],{"class":203},[193,241,214],{"class":199},[193,243,217],{"class":203},[193,245,246],{"class":220},"@orpc\u002Fclient\u002Ffetch",[193,248,224],{"class":203},[193,250,227],{"class":203},[193,252,254,256,259,261,264,266,268,270,273,275],{"class":195,"line":253},3,[193,255,200],{"class":199},[193,257,258],{"class":199}," type",[193,260,204],{"class":203},[193,262,263],{"class":207}," RouterClient",[193,265,211],{"class":203},[193,267,214],{"class":199},[193,269,217],{"class":203},[193,271,272],{"class":220},"@orpc\u002Fserver",[193,274,224],{"class":203},[193,276,227],{"class":203},[193,278,280,282,284,286,289,291,293,295,298,300],{"class":195,"line":279},4,[193,281,200],{"class":199},[193,283,258],{"class":199},[193,285,204],{"class":203},[193,287,288],{"class":207}," RpcRouter",[193,290,211],{"class":203},[193,292,214],{"class":199},[193,294,217],{"class":203},[193,296,297],{"class":220},"@agent-zero\u002Fapi",[193,299,224],{"class":203},[193,301,227],{"class":203},[193,303,305],{"class":195,"line":304},5,[193,306,308],{"emptyLinePlaceholder":307},true,"\n",[193,310,312,316,319,322,325,328,331,334,337,340],{"class":195,"line":311},6,[193,313,315],{"class":314},"spNyl","const",[193,317,318],{"class":207}," client",[193,320,321],{"class":203},":",[193,323,263],{"class":324},"sBMFI",[193,326,327],{"class":203},"\u003C",[193,329,330],{"class":324},"RpcRouter",[193,332,333],{"class":203},">",[193,335,336],{"class":203}," =",[193,338,208],{"class":339},"s2Zo4",[193,341,342],{"class":207},"(\n",[193,344,346,349,351,354],{"class":195,"line":345},7,[193,347,348],{"class":203},"  new",[193,350,237],{"class":339},[193,352,353],{"class":207},"(",[193,355,356],{"class":203},"{\n",[193,358,360,364,366,368,371,373],{"class":195,"line":359},8,[193,361,363],{"class":362},"swJcz","    url",[193,365,321],{"class":203},[193,367,217],{"class":203},[193,369,370],{"class":220},"http:\u002F\u002Flocalhost:3000\u002Frpc",[193,372,224],{"class":203},[193,374,375],{"class":203},",\n",[193,377,379,382,384,386,389,391,394,397,400,403,406,409,411,414,417],{"class":195,"line":378},9,[193,380,381],{"class":362},"    headers",[193,383,321],{"class":203},[193,385,204],{"class":203},[193,387,388],{"class":362}," authorization",[193,390,321],{"class":203},[193,392,393],{"class":203}," `",[193,395,396],{"class":220},"Bearer ",[193,398,399],{"class":203},"${",[193,401,402],{"class":207},"process",[193,404,405],{"class":203},".",[193,407,408],{"class":207},"env",[193,410,405],{"class":203},[193,412,413],{"class":207},"CONTROL_PLANE_TOKEN",[193,415,416],{"class":203},"}`",[193,418,419],{"class":203}," },\n",[193,421,423,426,429],{"class":195,"line":422},10,[193,424,425],{"class":203},"  }",[193,427,428],{"class":207},")",[193,430,375],{"class":203},[193,432,434,436],{"class":195,"line":433},11,[193,435,428],{"class":207},[193,437,227],{"class":203},[193,439,441],{"class":195,"line":440},12,[193,442,308],{"emptyLinePlaceholder":307},[193,444,446,448,450,453,456,458,461,463,465,468,470,473,476],{"class":195,"line":445},13,[193,447,315],{"class":314},[193,449,204],{"class":203},[193,451,452],{"class":207}," tasks ",[193,454,455],{"class":203},"}",[193,457,336],{"class":203},[193,459,460],{"class":199}," await",[193,462,318],{"class":207},[193,464,405],{"class":203},[193,466,467],{"class":207},"tasks",[193,469,405],{"class":203},[193,471,472],{"class":339},"list",[193,474,475],{"class":207},"()",[193,477,227],{"class":203},[193,479,481,484,486,488,491,493,496,498,501,504,506,509,513,516,519,522,525,528,530,532,535,537,539,541],{"class":195,"line":480},14,[193,482,483],{"class":199},"await",[193,485,318],{"class":207},[193,487,405],{"class":203},[193,489,490],{"class":207},"approvals",[193,492,405],{"class":203},[193,494,495],{"class":339},"decide",[193,497,353],{"class":207},[193,499,500],{"class":203},"{",[193,502,503],{"class":362}," taskId",[193,505,321],{"class":203},[193,507,508],{"class":207}," tasks[",[193,510,512],{"class":511},"sbssI","0",[193,514,515],{"class":207},"]",[193,517,518],{"class":203},"!.",[193,520,521],{"class":207},"id",[193,523,524],{"class":203},",",[193,526,527],{"class":362}," decision",[193,529,321],{"class":203},[193,531,217],{"class":203},[193,533,534],{"class":220},"approved",[193,536,224],{"class":203},[193,538,211],{"class":203},[193,540,428],{"class":207},[193,542,227],{"class":203},[179,544,545],{},"When a procedure changes, every client type-checks against the new shape at compile time — there is no generated client to regenerate.",[174,547,549],{"id":548},"plain-http","Plain HTTP",[179,551,552,553,556],{},"Non-TypeScript or external callers can use plain HTTP against ",[190,554,555],{},"\u002Fapi\u002Fv1\u002F**"," instead, with the same bearer-token rules:",[183,558,562],{"className":559,"code":560,"language":561,"meta":188,"style":188},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fv1\u002Ftasks\n\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fv1\u002Ftasks \\\n  -H \"Authorization: Bearer $CONTROL_PLANE_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"repository\": \"\u002Fpath\u002Fto\u002Frepo\", \"feedback\": \"…\"}'\n","bash",[190,563,564,572,576,592,611,624],{"__ignoreMap":188},[193,565,566,569],{"class":195,"line":196},[193,567,568],{"class":324},"curl",[193,570,571],{"class":220}," http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fv1\u002Ftasks\n",[193,573,574],{"class":195,"line":230},[193,575,308],{"emptyLinePlaceholder":307},[193,577,578,580,583,586,589],{"class":195,"line":253},[193,579,568],{"class":324},[193,581,582],{"class":220}," -X",[193,584,585],{"class":220}," POST",[193,587,588],{"class":220}," http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fv1\u002Ftasks",[193,590,591],{"class":207}," \\\n",[193,593,594,597,600,603,606,609],{"class":195,"line":279},[193,595,596],{"class":220},"  -H",[193,598,599],{"class":203}," \"",[193,601,602],{"class":220},"Authorization: Bearer ",[193,604,605],{"class":207},"$CONTROL_PLANE_TOKEN",[193,607,608],{"class":203},"\"",[193,610,591],{"class":207},[193,612,613,615,617,620,622],{"class":195,"line":304},[193,614,596],{"class":220},[193,616,599],{"class":203},[193,618,619],{"class":220},"Content-Type: application\u002Fjson",[193,621,608],{"class":203},[193,623,591],{"class":207},[193,625,626,629,631,634],{"class":195,"line":311},[193,627,628],{"class":220},"  -d",[193,630,217],{"class":203},[193,632,633],{"class":220},"{\"repository\": \"\u002Fpath\u002Fto\u002Frepo\", \"feedback\": \"…\"}",[193,635,636],{"class":203},"'\n",[179,638,639,640,643,644,405],{},"The interactive reference at ",[190,641,642],{},"\u002Fapi\u002Fv1\u002Fdocs"," documents every route from the generated OpenAPI spec at ",[190,645,646],{},"\u002Fapi\u002Fv1\u002Fopenapi.json",[174,648,650],{"id":649},"authorization-is-identical-on-both-transports","Authorization is identical on both transports",[179,652,653,656,657,659,660,663,664,405],{},[190,654,655],{},"\u002Frpc\u002F**"," and ",[190,658,555],{}," serve the exact same ",[190,661,662],{},"rpcRouter",", so a token that may create tasks over RPC may create the same tasks over REST and vice versa. Reads are open; mutations fail closed — see ",[665,666,33],"a",{"href":34},[668,669,670],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":188,"searchDepth":230,"depth":230,"links":672},[673,674,675],{"id":176,"depth":230,"text":177},{"id":548,"depth":230,"text":549},{"id":649,"depth":230,"text":650},"md",null,{},{"title":29,"description":188},"yMKdMIXwUC0cInVkIicSwqx19D6LG4J-u0ZR11XPO54",[682,684],{"title":25,"path":26,"stem":27,"description":683,"children":-1},"Procedures are defined once in packages\u002Fapi\u002Fsrc\u002Forpc\u002Frouter.ts and served over both transports automatically. Before changing routes, read the orpc-server Agent Skill.",{"title":33,"path":34,"stem":35,"description":685,"children":-1},"The control plane fails closed. Reads (tasks.list, tasks.get, health) stay open for the dashboard; every mutation requires an operator-issued bearer credential, and without configuration every mutation is rejected.",1787482153457]