[{"data":1,"prerenderedAt":421},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fagent\u002Fserver":3},{"id":4,"title":5,"body":6,"description":413,"extension":414,"meta":415,"navigation":209,"path":417,"seo":418,"stem":419,"__hash__":420},"docs\u002Fdocs\u002Fv2\u002Fagent\u002Fserver\u002Findex.md","server\u002F",{"type":7,"value":8,"toc":408},"minimark",[9,13,21,76,85,90,93,128,131,135,146,311,314,318,321,329,332,401,404],[10,11,5],"h1",{"id":12},"server",[14,15,16,17,20],"p",{},"The ",[18,19,5],"code",{}," folder adds an HTTP layer to your agent. Three subdirectories, each with a\ndistinct role:",[22,23,28],"pre",{"className":24,"code":25,"language":26,"meta":27,"style":27},"language-bash shiki shiki-themes dark-plus","server\u002F\n├── api\u002F          # HTTP routes\n├── middleware\u002F   # per-request handlers\n└── plugins\u002F      # boot-time initialization\n","bash","",[18,29,30,39,53,64],{"__ignoreMap":27},[31,32,35],"span",{"class":33,"line":34},"line",1,[31,36,38],{"class":37},"sCudf","server\u002F\n",[31,40,42,45,49],{"class":33,"line":41},2,[31,43,44],{"class":37},"├──",[31,46,48],{"class":47},"sKc5r"," api\u002F",[31,50,52],{"class":51},"sOLPB","          # HTTP routes\n",[31,54,56,58,61],{"class":33,"line":55},3,[31,57,44],{"class":37},[31,59,60],{"class":47}," middleware\u002F",[31,62,63],{"class":51},"   # per-request handlers\n",[31,65,67,70,73],{"class":33,"line":66},4,[31,68,69],{"class":37},"└──",[31,71,72],{"class":47}," plugins\u002F",[31,74,75],{"class":51},"      # boot-time initialization\n",[14,77,78,79,81,82,84],{},"The server is optional. An agent without a ",[18,80,5],{}," folder runs fine — it just has no\nHTTP surface. Add ",[18,83,5],{}," when you need to expose the agent over HTTP, receive webhooks,\nor run setup code at boot.",[86,87,89],"h2",{"id":88},"boot-sequence","Boot sequence",[14,91,92],{},"When the agent starts:",[94,95,96,103,109,115,121],"ol",{},[97,98,99,102],"li",{},[18,100,101],{},"axon.config.ts"," loaded — identity, engine, policy, env",[97,104,105,108],{},[18,106,107],{},"src\u002F"," scanned — tools, prompts, scripts indexed",[97,110,111,114],{},[18,112,113],{},"modules\u002F"," loaded — their contributions merged in",[97,116,117,120],{},[18,118,119],{},"server\u002Fplugins\u002F"," run — connections established, hooks registered",[97,122,123,124,127],{},"HTTP server ready — routes in ",[18,125,126],{},"server\u002Fapi\u002F"," accepting requests",[14,129,130],{},"Plugins run before the server accepts requests. This guarantees that anything a plugin\nsets up — database connections, hook subscriptions, SDK clients — is ready before the\nfirst route fires.",[86,132,134],{"id":133},"no-implicit-invocation","No implicit invocation",[14,136,137,138,141,142,145],{},"Routes do not invoke the agent automatically. An HTTP request arrives, your handler runs,\nand if you want the agent involved you call ",[18,139,140],{},"axon.request()"," or ",[18,143,144],{},"axon.stream()",". When you\ndo, the runtime takes over — context assembly, the cognitive loop, tool dispatch, stop\nconditions. You get back a result or a stream.",[22,147,151],{"className":148,"code":149,"language":150,"meta":27,"style":27},"language-ts shiki shiki-themes dark-plus","\u002F\u002F This route never touches the agent\nexport default defineEventHandler(() => {\n    return { ok: true }\n})\n\n\u002F\u002F This route invokes the agent\nexport default defineEventHandler(async event => {\n    const prompt = await axon.prompt(\"triage\", await readBody(event))\n    return axon.stream({ prompt })\n})\n","ts",[18,152,153,158,181,199,204,211,217,240,286,306],{"__ignoreMap":27},[31,154,155],{"class":33,"line":34},[31,156,157],{"class":51},"\u002F\u002F This route never touches the agent\n",[31,159,160,164,167,170,174,178],{"class":33,"line":41},[31,161,163],{"class":162},"sYbnZ","export",[31,165,166],{"class":162}," default",[31,168,169],{"class":37}," defineEventHandler",[31,171,173],{"class":172},"sTNBD","(() ",[31,175,177],{"class":176},"scz_3","=>",[31,179,180],{"class":172}," {\n",[31,182,183,186,189,193,196],{"class":33,"line":55},[31,184,185],{"class":162},"    return",[31,187,188],{"class":172}," { ",[31,190,192],{"class":191},"s3F5K","ok:",[31,194,195],{"class":176}," true",[31,197,198],{"class":172}," }\n",[31,200,201],{"class":33,"line":66},[31,202,203],{"class":172},"})\n",[31,205,207],{"class":33,"line":206},5,[31,208,210],{"emptyLinePlaceholder":209},true,"\n",[31,212,214],{"class":33,"line":213},6,[31,215,216],{"class":51},"\u002F\u002F This route invokes the agent\n",[31,218,220,222,224,226,229,232,235,238],{"class":33,"line":219},7,[31,221,163],{"class":162},[31,223,166],{"class":162},[31,225,169],{"class":37},[31,227,228],{"class":172},"(",[31,230,231],{"class":176},"async",[31,233,234],{"class":191}," event",[31,236,237],{"class":176}," =>",[31,239,180],{"class":172},[31,241,243,246,250,253,256,259,262,265,267,270,273,275,278,280,283],{"class":33,"line":242},8,[31,244,245],{"class":176},"    const",[31,247,249],{"class":248},"s9McN"," prompt",[31,251,252],{"class":172}," = ",[31,254,255],{"class":162},"await",[31,257,258],{"class":191}," axon",[31,260,261],{"class":172},".",[31,263,264],{"class":37},"prompt",[31,266,228],{"class":172},[31,268,269],{"class":47},"\"triage\"",[31,271,272],{"class":172},", ",[31,274,255],{"class":162},[31,276,277],{"class":37}," readBody",[31,279,228],{"class":172},[31,281,282],{"class":191},"event",[31,284,285],{"class":172},"))\n",[31,287,289,291,293,295,298,301,303],{"class":33,"line":288},9,[31,290,185],{"class":162},[31,292,258],{"class":191},[31,294,261],{"class":172},[31,296,297],{"class":37},"stream",[31,299,300],{"class":172},"({ ",[31,302,264],{"class":191},[31,304,305],{"class":172}," })\n",[31,307,309],{"class":33,"line":308},10,[31,310,203],{"class":172},[14,312,313],{},"The agent is a capability your routes reach for — not something that runs on every request.",[86,315,317],{"id":316},"authentication","Authentication",[14,319,320],{},"Deployed routes require a valid API key by default:",[22,322,327],{"className":323,"code":325,"language":326},[324],"language-text","Authorization: Bearer axon_...\n","text",[18,328,325],{"__ignoreMap":27},[14,330,331],{},"To make a route public:",[22,333,335],{"className":148,"code":334,"language":150,"meta":27,"style":27},"export const routeMeta = { auth: false }\n\nexport default defineEventHandler(async event => {\n    \u002F\u002F verify third-party signature here before using the payload\n    return { ok: true }\n})\n",[18,336,337,358,362,380,385,397],{"__ignoreMap":27},[31,338,339,341,344,347,350,353,356],{"class":33,"line":34},[31,340,163],{"class":162},[31,342,343],{"class":176}," const",[31,345,346],{"class":248}," routeMeta",[31,348,349],{"class":172}," = { ",[31,351,352],{"class":191},"auth:",[31,354,355],{"class":176}," false",[31,357,198],{"class":172},[31,359,360],{"class":33,"line":41},[31,361,210],{"emptyLinePlaceholder":209},[31,363,364,366,368,370,372,374,376,378],{"class":33,"line":55},[31,365,163],{"class":162},[31,367,166],{"class":162},[31,369,169],{"class":37},[31,371,228],{"class":172},[31,373,231],{"class":176},[31,375,234],{"class":191},[31,377,237],{"class":176},[31,379,180],{"class":172},[31,381,382],{"class":33,"line":66},[31,383,384],{"class":51},"    \u002F\u002F verify third-party signature here before using the payload\n",[31,386,387,389,391,393,395],{"class":33,"line":206},[31,388,185],{"class":162},[31,390,188],{"class":172},[31,392,192],{"class":191},[31,394,195],{"class":176},[31,396,198],{"class":172},[31,398,399],{"class":33,"line":213},[31,400,203],{"class":172},[14,402,403],{},"Public routes should always verify their own signatures or tokens. Webhooks from GitHub,\nStripe, Linear, etc. include HMAC signatures for exactly this purpose.",[405,406,407],"style",{},"html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}html pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}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 pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}",{"title":27,"searchDepth":41,"depth":41,"links":409},[410,411,412],{"id":88,"depth":41,"text":89},{"id":133,"depth":41,"text":134},{"id":316,"depth":41,"text":317},"The server\u002F folder adds an HTTP layer to your agent. Three subdirectories, each with a\ndistinct role:","md",{"icon":416},"vscode-icons:folder-type-server","\u002Fdocs\u002Fv2\u002Fagent\u002Fserver",{"title":5,"description":413},"docs\u002Fv2\u002Fagent\u002Fserver\u002Findex","1CqW0NDbOm-qwmktQIvCCMScK0D6XW9OX9P7Fo6mKbk",1785671806450]