[{"data":1,"prerenderedAt":733},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fdeploy\u002Faxon-cloud":3},{"id":4,"title":5,"body":6,"description":16,"extension":726,"meta":727,"navigation":728,"path":729,"seo":730,"stem":731,"__hash__":732},"docs\u002Fdocs\u002Fv2\u002Fdeploy\u002Faxon-cloud.md","Axon Cloud",{"type":7,"value":8,"toc":715},"minimark",[9,13,17,52,55,89,92,97,104,116,120,123,159,163,170,232,238,242,280,284,298,303,388,402,406,409,474,481,485,491,612,625,704,711],[10,11,5],"h1",{"id":12},"axon-cloud",[14,15,16],"p",{},"One command. Your agent gets a public URL, an API key, and durable storage. No\nDockerfile, no infra config, no container registry.",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-bash shiki shiki-themes dark-plus","axon login      # once\naxon deploy\n","bash","",[25,26,27,44],"code",{"__ignoreMap":23},[28,29,32,36,40],"span",{"class":30,"line":31},"line",1,[28,33,35],{"class":34},"sCudf","axon",[28,37,39],{"class":38},"sKc5r"," login",[28,41,43],{"class":42},"sOLPB","      # once\n",[28,45,47,49],{"class":30,"line":46},2,[28,48,35],{"class":34},[28,50,51],{"class":38}," deploy\n",[14,53,54],{},"First deploy prints:",[18,56,58],{"className":20,"code":57,"language":22,"meta":23,"style":23},"Deployed: https:\u002F\u002F\u003Cyour-agent-url>\nAPI key:  axon_...\n",[25,59,60,78],{"__ignoreMap":23},[28,61,62,65,68,72,75],{"class":30,"line":31},[28,63,64],{"class":34},"Deployed:",[28,66,67],{"class":38}," https:\u002F\u002F",[28,69,71],{"class":70},"sTNBD","\u003C",[28,73,74],{"class":38},"your-agent-ur",[28,76,77],{"class":70},"l>\n",[28,79,80,83,86],{"class":30,"line":46},[28,81,82],{"class":34},"API",[28,84,85],{"class":38}," key:",[28,87,88],{"class":38},"  axon_...\n",[14,90,91],{},"Subsequent deploys update the running agent in place.",[93,94,96],"h2",{"id":95},"environment-keys-travel-with-the-agent","Environment keys travel with the agent",[14,98,99,100,103],{},"Your agent's ",[25,101,102],{},".env"," is the source of truth for its keys — and deployment doesn't change\nthat. The keys in the agent folder ship with the deployment; the agent reads them from\nits environment in the cloud exactly as it did locally. No separate secrets dashboard,\nno re-declaring variables per environment.",[14,105,106,107,109,110,115],{},"Giving an agent a key is one explicit act: put it in the agent's ",[25,108,102],{},". See\n",[111,112,114],"a",{"href":113},"\u002Fdocs\u002Fv2\u002Fagent\u002Fenvironment","Environment & Secrets",".",[93,117,119],{"id":118},"what-changes-in-the-cloud","What changes in the cloud",[14,121,122],{},"The agent source is identical. The runtime is different:",[124,125,126,137,143,153],"ul",{},[127,128,129,133,134],"li",{},[130,131,132],"strong",{},"No TUI"," — your agent is accessed over HTTP via the routes in ",[25,135,136],{},"server\u002Fapi\u002F",[127,138,139,142],{},[130,140,141],{},"Isolated runtime"," — runs in a container with no access to your local machine",[127,144,145,148,149,152],{},[130,146,147],{},"Durable data"," — ",[25,150,151],{},"data\u002F"," is backed by cloud storage, persists across restarts and redeploys",[127,154,155,158],{},[130,156,157],{},"Email address"," — every deployed agent gets its own email address",[93,160,162],{"id":161},"calling-your-agent","Calling your agent",[14,164,165,166,169],{},"The default ",[25,167,168],{},"POST \u002Fapi\u002Fchat"," route is built-in:",[18,171,173],{"className":20,"code":172,"language":22,"meta":23,"style":23},"curl -X POST https:\u002F\u002F\u003Cyour-agent-url>\u002Fapi\u002Fchat \\\n  -H \"Authorization: Bearer axon_...\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"message\": \"summarise my open issues\" }'\n",[25,174,175,203,213,223],{"__ignoreMap":23},[28,176,177,180,184,187,189,191,193,196,199],{"class":30,"line":31},[28,178,179],{"class":34},"curl",[28,181,183],{"class":182},"scz_3"," -X",[28,185,186],{"class":38}," POST",[28,188,67],{"class":38},[28,190,71],{"class":70},[28,192,74],{"class":38},[28,194,195],{"class":70},"l>",[28,197,198],{"class":38},"\u002Fapi\u002Fchat",[28,200,202],{"class":201},"svVle"," \\\n",[28,204,205,208,211],{"class":30,"line":46},[28,206,207],{"class":182},"  -H",[28,209,210],{"class":38}," \"Authorization: Bearer axon_...\"",[28,212,202],{"class":201},[28,214,216,218,221],{"class":30,"line":215},3,[28,217,207],{"class":182},[28,219,220],{"class":38}," \"Content-Type: application\u002Fjson\"",[28,222,202],{"class":201},[28,224,226,229],{"class":30,"line":225},4,[28,227,228],{"class":182},"  -d",[28,230,231],{"class":38}," '{ \"message\": \"summarise my open issues\" }'\n",[14,233,234,235,237],{},"Any route you defined in ",[25,236,136],{}," is available at the same base URL.",[93,239,241],{"id":240},"managing","Managing",[18,243,245],{"className":20,"code":244,"language":22,"meta":23,"style":23},"axon status                 # is it running\naxon logs                   # tail live logs\naxon undeploy --yes         # tear it down\n",[25,246,247,257,267],{"__ignoreMap":23},[28,248,249,251,254],{"class":30,"line":31},[28,250,35],{"class":34},[28,252,253],{"class":38}," status",[28,255,256],{"class":42},"                 # is it running\n",[28,258,259,261,264],{"class":30,"line":46},[28,260,35],{"class":34},[28,262,263],{"class":38}," logs",[28,265,266],{"class":42},"                   # tail live logs\n",[28,268,269,271,274,277],{"class":30,"line":215},[28,270,35],{"class":34},[28,272,273],{"class":38}," undeploy",[28,275,276],{"class":182}," --yes",[28,278,279],{"class":42},"         # tear it down\n",[93,281,283],{"id":282},"runtime-config","Runtime config",[14,285,286,287,290,291,294,295,115],{},"All deployment config lives in ",[25,288,289],{},"axon.config.ts"," under ",[25,292,293],{},"deploy"," and ",[25,296,297],{},"connections",[299,300,302],"h3",{"id":301},"scaling","Scaling",[18,304,308],{"className":305,"code":306,"language":307,"meta":23,"style":23},"language-ts shiki shiki-themes dark-plus","export default defineAgent({\n    deploy: {\n        scaling: {\n            min: 0,   \u002F\u002F scale to zero when idle (default)\n            max: 3,   \u002F\u002F max concurrent instances (default)\n        },\n    },\n})\n","ts",[25,309,310,325,334,341,356,370,376,382],{"__ignoreMap":23},[28,311,312,316,319,322],{"class":30,"line":31},[28,313,315],{"class":314},"sYbnZ","export",[28,317,318],{"class":314}," default",[28,320,321],{"class":34}," defineAgent",[28,323,324],{"class":70},"({\n",[28,326,327,331],{"class":30,"line":46},[28,328,330],{"class":329},"s3F5K","    deploy:",[28,332,333],{"class":70}," {\n",[28,335,336,339],{"class":30,"line":215},[28,337,338],{"class":329},"        scaling:",[28,340,333],{"class":70},[28,342,343,346,350,353],{"class":30,"line":225},[28,344,345],{"class":329},"            min:",[28,347,349],{"class":348},"sDGX8"," 0",[28,351,352],{"class":70},",   ",[28,354,355],{"class":42},"\u002F\u002F scale to zero when idle (default)\n",[28,357,359,362,365,367],{"class":30,"line":358},5,[28,360,361],{"class":329},"            max:",[28,363,364],{"class":348}," 3",[28,366,352],{"class":70},[28,368,369],{"class":42},"\u002F\u002F max concurrent instances (default)\n",[28,371,373],{"class":30,"line":372},6,[28,374,375],{"class":70},"        },\n",[28,377,379],{"class":30,"line":378},7,[28,380,381],{"class":70},"    },\n",[28,383,385],{"class":30,"line":384},8,[28,386,387],{"class":70},"})\n",[14,389,390,393,394,397,398,401],{},[25,391,392],{},"min: 0"," means the agent shuts down when idle and cold-starts on the next request.\nSet ",[25,395,396],{},"min: 1"," to keep an instance warm if cold-start latency matters for your use case.\n",[25,399,400],{},"max"," caps concurrent instances — useful for agents that hold external connections or\nhave per-instance rate limits.",[299,403,405],{"id":404},"system-packages","System packages",[14,407,408],{},"The container runs Alpine Linux with Bun and standard Unix tools. Add extras:",[18,410,412],{"className":305,"code":411,"language":307,"meta":23,"style":23},"export default defineAgent({\n    deploy: {\n        runtime: {\n            packages: [\"git\", \"ripgrep\", \"ffmpeg\"],\n        },\n    },\n})\n",[25,413,414,424,430,437,462,466,470],{"__ignoreMap":23},[28,415,416,418,420,422],{"class":30,"line":31},[28,417,315],{"class":314},[28,419,318],{"class":314},[28,421,321],{"class":34},[28,423,324],{"class":70},[28,425,426,428],{"class":30,"line":46},[28,427,330],{"class":329},[28,429,333],{"class":70},[28,431,432,435],{"class":30,"line":215},[28,433,434],{"class":329},"        runtime:",[28,436,333],{"class":70},[28,438,439,442,445,448,451,454,456,459],{"class":30,"line":225},[28,440,441],{"class":329},"            packages:",[28,443,444],{"class":70}," [",[28,446,447],{"class":38},"\"git\"",[28,449,450],{"class":70},", ",[28,452,453],{"class":38},"\"ripgrep\"",[28,455,450],{"class":70},[28,457,458],{"class":38},"\"ffmpeg\"",[28,460,461],{"class":70},"],\n",[28,463,464],{"class":30,"line":358},[28,465,375],{"class":70},[28,467,468],{"class":30,"line":372},[28,469,381],{"class":70},[28,471,472],{"class":30,"line":378},[28,473,387],{"class":70},[14,475,476,477,480],{},"Packages are installed via ",[25,478,479],{},"apk"," at build time. Anything available in the Alpine package\nregistry can go here.",[299,482,484],{"id":483},"scheduled-triggers","Scheduled triggers",[14,486,487,488,490],{},"Axon provisions Cloud Scheduler jobs for you. Declare schedules in ",[25,489,297],{},":",[18,492,494],{"className":305,"code":493,"language":307,"meta":23,"style":23},"export default defineAgent({\n    connections: {\n        schedule: [\n            {\n                name: \"daily-digest\",\n                cron: \"0 9 * * *\",        \u002F\u002F 9am UTC daily\n                timezone: \"Europe\u002FLondon\",\n            },\n            {\n                name: \"hourly-sync\",\n                cron: \"0 * * * *\",\n            },\n        ],\n    },\n})\n",[25,495,496,506,513,521,526,537,551,561,566,571,581,591,596,602,607],{"__ignoreMap":23},[28,497,498,500,502,504],{"class":30,"line":31},[28,499,315],{"class":314},[28,501,318],{"class":314},[28,503,321],{"class":34},[28,505,324],{"class":70},[28,507,508,511],{"class":30,"line":46},[28,509,510],{"class":329},"    connections:",[28,512,333],{"class":70},[28,514,515,518],{"class":30,"line":215},[28,516,517],{"class":329},"        schedule:",[28,519,520],{"class":70}," [\n",[28,522,523],{"class":30,"line":225},[28,524,525],{"class":70},"            {\n",[28,527,528,531,534],{"class":30,"line":358},[28,529,530],{"class":329},"                name:",[28,532,533],{"class":38}," \"daily-digest\"",[28,535,536],{"class":70},",\n",[28,538,539,542,545,548],{"class":30,"line":372},[28,540,541],{"class":329},"                cron:",[28,543,544],{"class":38}," \"0 9 * * *\"",[28,546,547],{"class":70},",        ",[28,549,550],{"class":42},"\u002F\u002F 9am UTC daily\n",[28,552,553,556,559],{"class":30,"line":378},[28,554,555],{"class":329},"                timezone:",[28,557,558],{"class":38}," \"Europe\u002FLondon\"",[28,560,536],{"class":70},[28,562,563],{"class":30,"line":384},[28,564,565],{"class":70},"            },\n",[28,567,569],{"class":30,"line":568},9,[28,570,525],{"class":70},[28,572,574,576,579],{"class":30,"line":573},10,[28,575,530],{"class":329},[28,577,578],{"class":38}," \"hourly-sync\"",[28,580,536],{"class":70},[28,582,584,586,589],{"class":30,"line":583},11,[28,585,541],{"class":329},[28,587,588],{"class":38}," \"0 * * * *\"",[28,590,536],{"class":70},[28,592,594],{"class":30,"line":593},12,[28,595,565],{"class":70},[28,597,599],{"class":30,"line":598},13,[28,600,601],{"class":70},"        ],\n",[28,603,605],{"class":30,"line":604},14,[28,606,381],{"class":70},[28,608,610],{"class":30,"line":609},15,[28,611,387],{"class":70},[14,613,614,615,618,619,622,623,490],{},"Each schedule fires a ",[25,616,617],{},"POST"," to ",[25,620,621],{},"\u002F_axon\u002Finbox\u002F{name}"," on your agent. Handle it in\n",[25,624,136],{},[18,626,628],{"className":305,"code":627,"language":307,"meta":23,"style":23},"\u002F\u002F server\u002Fapi\u002F_axon\u002Finbox\u002Fdaily-digest.post.ts\nexport default defineEventHandler(async () => {\n    const { stream } = axon.scripts.stream(\"daily-digest\")\n    return stream\n})\n",[25,629,630,635,658,692,700],{"__ignoreMap":23},[28,631,632],{"class":30,"line":31},[28,633,634],{"class":42},"\u002F\u002F server\u002Fapi\u002F_axon\u002Finbox\u002Fdaily-digest.post.ts\n",[28,636,637,639,641,644,647,650,653,656],{"class":30,"line":46},[28,638,315],{"class":314},[28,640,318],{"class":314},[28,642,643],{"class":34}," defineEventHandler",[28,645,646],{"class":70},"(",[28,648,649],{"class":182},"async",[28,651,652],{"class":70}," () ",[28,654,655],{"class":182},"=>",[28,657,333],{"class":70},[28,659,660,663,666,670,673,675,677,680,682,684,686,689],{"class":30,"line":215},[28,661,662],{"class":182},"    const",[28,664,665],{"class":70}," { ",[28,667,669],{"class":668},"s9McN","stream",[28,671,672],{"class":70}," } = ",[28,674,35],{"class":329},[28,676,115],{"class":70},[28,678,679],{"class":329},"scripts",[28,681,115],{"class":70},[28,683,669],{"class":34},[28,685,646],{"class":70},[28,687,688],{"class":38},"\"daily-digest\"",[28,690,691],{"class":70},")\n",[28,693,694,697],{"class":30,"line":225},[28,695,696],{"class":314},"    return",[28,698,699],{"class":329}," stream\n",[28,701,702],{"class":30,"line":358},[28,703,387],{"class":70},[14,705,706,707,710],{},"Schedules are created and updated on every ",[25,708,709],{},"axon deploy",". Deleting an entry removes the\nCloud Scheduler job on next deploy.",[712,713,714],"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 .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 .svVle, html code.shiki .svVle{--shiki-default:#D7BA7D}html pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .sDGX8, html code.shiki .sDGX8{--shiki-default:#B5CEA8}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}",{"title":23,"searchDepth":46,"depth":46,"links":716},[717,718,719,720,721],{"id":95,"depth":46,"text":96},{"id":118,"depth":46,"text":119},{"id":161,"depth":46,"text":162},{"id":240,"depth":46,"text":241},{"id":282,"depth":46,"text":283,"children":722},[723,724,725],{"id":301,"depth":215,"text":302},{"id":404,"depth":215,"text":405},{"id":483,"depth":215,"text":484},"md",{},true,"\u002Fdocs\u002Fv2\u002Fdeploy\u002Faxon-cloud",{"title":5,"description":16},"docs\u002Fv2\u002Fdeploy\u002Faxon-cloud","9zAmJ_Qzx4rDuWvR51YqLiXEAxgZq4zLlbfWQde6gCQ",1785671804877]