[{"data":1,"prerenderedAt":464},["ShallowReactive",2],{"navigation_docs":3,"-guide-frontend":168,"-guide-frontend-surround":459},[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":60,"body":170,"description":452,"extension":453,"links":454,"meta":455,"navigation":456,"path":61,"seo":457,"stem":62,"__hash__":458},"docs\u002F1.guide\u002F13.frontend.md",{"type":171,"value":172,"toc":443},"minimark",[173,189,194,229,239,260,264,314,318,330,369,372,384,388,401,405],[174,175,176,180,181,188],"p",{},[177,178,179],"code",{},"apps\u002Fdashboard"," is a ",[182,183,187],"a",{"href":184,"rel":185},"https:\u002F\u002Fnuxt.com",[186],"nofollow","Nuxt"," 4 app and the single deployable artifact: it serves the UI, the control plane, and authentication from one origin.",[190,191,193],"h2",{"id":192},"module-per-feature-layout","Module-per-feature layout",[174,195,196,197,200,201,204,205,208,209,212,213,216,217,220,221,224,225,228],{},"Application code lives under ",[177,198,199],{},"modules\u002F\u003Cfeature>\u002F"," rather than Nuxt's default flat directories. Each feature is a real Nuxt module: its ",[177,202,203],{},"index.ts"," registers its own ",[177,206,207],{},"components\u002F",", ",[177,210,211],{},"composables\u002F",", and ",[177,214,215],{},"utils\u002F"," directories, and Nuxt discovers it by scanning ",[177,218,219],{},"modules\u002F",", so nothing has to be listed in ",[177,222,223],{},"nuxt.config.ts",". ",[177,226,227],{},"apps\u002Fmarketing"," uses the same layout.",[230,231,237],"pre",{"className":232,"code":234,"language":235,"meta":236},[233],"language-text","apps\u002Fdashboard\u002F\n├── app\u002F\n│   ├── app.vue\n│   ├── pages\u002F\n│   │   ├── (auth)\u002Flogin.vue\n│   │   ├── (dashboard)\u002Findex.vue\n│   │   └── (organizations)\u002F…\n│   ├── layouts\u002F\n│   ├── plugins\u002F\n│   ├── types\u002F\n│   └── assets\u002Fcss\u002F\n└── modules\u002F\n    ├── shared\u002F          # cross-feature components, composables, and utils\n    ├── auth\u002F            # login and session UI\n    ├── dashboard\u002F       # task history, queue, approvals\n    ├── organizations\u002F   # organization management\n    ├── i18n-strip-empty\u002F # drops untranslated placeholder keys from the bundle\n    └── vitehub.ts       # ViteHub KV inside Nuxt's Nitro build\n","text","",[177,238,234],{"__ignoreMap":236},[174,240,241,242,208,245,208,248,251,252,255,256,259],{},"Route groups — ",[177,243,244],{},"(auth)",[177,246,247],{},"(dashboard)",[177,249,250],{},"(organizations)"," — organize pages without affecting URLs. Pages are gated through ",[177,253,254],{},"routeRules"," with ",[177,257,258],{},"auth: { only: 'user' | 'guest' }"," and a layout assignment.",[190,261,263],{"id":262},"styling-and-icons","Styling and icons",[265,266,267,286,300],"ul",{},[268,269,270,255,278,281,282,285],"li",{},[271,272,273],"strong",{},[182,274,277],{"href":275,"rel":276},"https:\u002F\u002Funocss.dev",[186],"UnoCSS",[177,279,280],{},"preset-wind4"," — utility classes, not Tailwind. The CSS entry is ",[177,283,284],{},"app\u002Fassets\u002Fcss\u002Fmain.css",".",[268,287,288,295,296,299],{},[271,289,290],{},[182,291,294],{"href":292,"rel":293},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ficon",[186],"@nuxt\u002Ficon"," with the Lucide collection, fully client-bundled (",[177,297,298],{},"provider: 'none'",") so no icon request leaves the app.",[268,301,302,309,310,313],{},[271,303,304],{},[182,305,308],{"href":306,"rel":307},"https:\u002F\u002Fcolor-mode.nuxtjs.org",[186],"@nuxtjs\u002Fcolor-mode"," drives theming (",[177,311,312],{},"dataValue: 'theme'",").",[190,315,317],{"id":316},"server-composition","Server composition",[174,319,320,321,324,325,327,328,285],{},"The ",[177,322,323],{},"server\u002F"," directory hosts the API transports, webhook ingress, and the Better Auth mount — see ",[182,326,21],{"href":22}," and ",[182,329,38],{"href":45},[174,331,332,334,335,338,339,342,343,346,347,350,351,354,355,358,359,362,363,366,367,285],{},[177,333,223],{}," registers ",[177,336,337],{},"vite-hub\u002Fnuxt"," as a module entry, composing the ViteHub KV Runtime Helper into Nuxt's own Nitro build and giving the server a ",[177,340,341],{},"KeyValueStorage"," backed by ",[177,344,345],{},"fs-lite"," on the filesystem (",[177,348,349],{},".data\u002Fkv",") when self-hosted, with Cloudflare KV, Deno KV, or Upstash as drop-in driver configuration. Its deployment preset comes from ",[177,352,353],{},"config\u002Fenv.ts"," (",[177,356,357],{},"node"," unless ",[177,360,361],{},"NITRO_PRESET"," or ",[177,364,365],{},"VITEHUB_HOSTING"," names a host), and that preset fixes both the Nitro preset the build emits and the KV driver — see ",[182,368,72],{"href":73},[190,370,68],{"id":371},"internationalization",[174,373,374,375,354,378,381,382,285],{},"The interface ships English and Italian through ",[177,376,377],{},"@nuxtjs\u002Fi18n",[177,379,380],{},"strategy: 'no_prefix'","), with dictionaries split by scope. See ",[182,383,68],{"href":69},[190,385,387],{"id":386},"auth-capability-flags","Auth capability flags",[174,389,390,391,394,395,398,399,285],{},"The login page's capabilities (signup enabled, GitHub button) are published via ",[177,392,393],{},"appConfig"," — captured at ",[271,396,397],{},"build time",", deliberately not runtime-overridable. Rebuild after changing auth policy variables. See ",[182,400,44],{"href":45},[190,402,404],{"id":403},"testing","Testing",[265,406,407,416,436],{},[268,408,409,410,327,413,285],{},"Unit and component tests live in ",[177,411,412],{},"test\u002Funit\u002F",[177,414,415],{},"test\u002Fnuxt\u002F",[268,417,418,421,422,427,428,431,432,435],{},[177,419,420],{},"aube run test:browser"," builds the dashboard, starts the production preview on port 5678, and runs the ",[182,423,426],{"href":424,"rel":425},"https:\u002F\u002Fplaywright.dev",[186],"Playwright"," suite against the real ",[177,429,430],{},"\u002Fapi\u002Fauth\u002F**"," endpoints with an in-memory Better Auth adapter (",[177,433,434],{},"AUTH_E2E_MEMORY=true",", set only for that preview server) — the suite creates and signs in its own throwaway account instead of using a live database.",[268,437,438,439,442],{},"Use ",[177,440,441],{},"aube --filter @agent-zero\u002Fdashboard run test:browser:ui"," for Playwright UI mode.",{"title":236,"searchDepth":444,"depth":444,"links":445},2,[446,447,448,449,450,451],{"id":192,"depth":444,"text":193},{"id":262,"depth":444,"text":263},{"id":316,"depth":444,"text":317},{"id":371,"depth":444,"text":68},{"id":386,"depth":444,"text":387},{"id":403,"depth":444,"text":404},"apps\u002Fdashboard is a Nuxt 4 app and the single deployable artifact: it serves the UI, the control plane, and authentication from one origin.","md",null,{},true,{"title":60,"description":452},"UQzdfhjAFxULjqateddfRj-phsCZEFbn6_w3FA0voMk",[460,462],{"title":56,"path":57,"stem":58,"description":461,"children":-1},"The dashboard ships with optional multi-user organizations: teams that share visibility into task history and approvals.",{"title":64,"path":65,"stem":66,"description":463,"children":-1},"packages\u002Fmail owns transactional email: Maizzle-based templates plus a small provider layer. The dashboard uses it for organization invitations and other auth-driven messages.",1787482152395]