[{"data":1,"prerenderedAt":320},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fapi\u002Fconfig\u002Fmodules":3},{"id":4,"title":5,"body":6,"description":313,"extension":314,"meta":315,"navigation":87,"path":316,"seo":317,"stem":318,"__hash__":319},"docs\u002Fdocs\u002Fv2\u002Fapi\u002Fconfig\u002Fmodules.md","modules",{"type":7,"value":8,"toc":309},"minimark",[9,12,26,163,166,231,242,247,258,262,271,289,305],[10,11,5],"h1",{"id":5},[13,14,15,16,20,21,25],"p",{},"The modules this agent loads. An ",[17,18,19],"strong",{},"array"," of entries — each entry is a module\nname (or an imported module config), optionally paired with an options object\nin a ",[22,23,24],"code",{},"[module, options]"," tuple.",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-ts shiki shiki-themes dark-plus","export default defineAgent({\n    modules: [\n        \u002F\u002F no options — just the name\n        \"@axon\u002Ffs\",\n\n        \u002F\u002F with options — a [name, options] tuple\n        [\"@axon\u002Fgithub\", { owner: \"acme\", repo: \"backend\" }],\n        [\"@axon\u002Fslack\", { channel: \"#eng-alerts\", botName: \"axon\" }],\n    ],\n})\n","ts","",[22,34,35,55,65,72,82,89,95,125,151,157],{"__ignoreMap":32},[36,37,40,44,47,51],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sYbnZ","export",[36,45,46],{"class":42}," default",[36,48,50],{"class":49},"sCudf"," defineAgent",[36,52,54],{"class":53},"sTNBD","({\n",[36,56,58,62],{"class":38,"line":57},2,[36,59,61],{"class":60},"s3F5K","    modules:",[36,63,64],{"class":53}," [\n",[36,66,68],{"class":38,"line":67},3,[36,69,71],{"class":70},"sOLPB","        \u002F\u002F no options — just the name\n",[36,73,75,79],{"class":38,"line":74},4,[36,76,78],{"class":77},"sKc5r","        \"@axon\u002Ffs\"",[36,80,81],{"class":53},",\n",[36,83,85],{"class":38,"line":84},5,[36,86,88],{"emptyLinePlaceholder":87},true,"\n",[36,90,92],{"class":38,"line":91},6,[36,93,94],{"class":70},"        \u002F\u002F with options — a [name, options] tuple\n",[36,96,98,101,104,107,110,113,116,119,122],{"class":38,"line":97},7,[36,99,100],{"class":53},"        [",[36,102,103],{"class":77},"\"@axon\u002Fgithub\"",[36,105,106],{"class":53},", { ",[36,108,109],{"class":60},"owner:",[36,111,112],{"class":77}," \"acme\"",[36,114,115],{"class":53},", ",[36,117,118],{"class":60},"repo:",[36,120,121],{"class":77}," \"backend\"",[36,123,124],{"class":53}," }],\n",[36,126,128,130,133,135,138,141,143,146,149],{"class":38,"line":127},8,[36,129,100],{"class":53},[36,131,132],{"class":77},"\"@axon\u002Fslack\"",[36,134,106],{"class":53},[36,136,137],{"class":60},"channel:",[36,139,140],{"class":77}," \"#eng-alerts\"",[36,142,115],{"class":53},[36,144,145],{"class":60},"botName:",[36,147,148],{"class":77}," \"axon\"",[36,150,124],{"class":53},[36,152,154],{"class":38,"line":153},9,[36,155,156],{"class":53},"    ],\n",[36,158,160],{"class":38,"line":159},10,[36,161,162],{"class":53},"})\n",[13,164,165],{},"You can also import a local module's config directly instead of naming it:",[27,167,169],{"className":29,"code":168,"language":31,"meta":32,"style":32},"import DiscordModule from \"..\u002Fmodules\u002Fdiscord\u002Fmodule.config\"\n\nexport default defineAgent({\n    modules: [\n        [DiscordModule, { mentionOnly: true }],\n    ],\n})\n",[22,170,171,185,189,199,205,223,227],{"__ignoreMap":32},[36,172,173,176,179,182],{"class":38,"line":39},[36,174,175],{"class":42},"import",[36,177,178],{"class":60}," DiscordModule",[36,180,181],{"class":42}," from",[36,183,184],{"class":77}," \"..\u002Fmodules\u002Fdiscord\u002Fmodule.config\"\n",[36,186,187],{"class":38,"line":57},[36,188,88],{"emptyLinePlaceholder":87},[36,190,191,193,195,197],{"class":38,"line":67},[36,192,43],{"class":42},[36,194,46],{"class":42},[36,196,50],{"class":49},[36,198,54],{"class":53},[36,200,201,203],{"class":38,"line":74},[36,202,61],{"class":60},[36,204,64],{"class":53},[36,206,207,209,212,214,217,221],{"class":38,"line":84},[36,208,100],{"class":53},[36,210,211],{"class":60},"DiscordModule",[36,213,106],{"class":53},[36,215,216],{"class":60},"mentionOnly:",[36,218,220],{"class":219},"scz_3"," true",[36,222,124],{"class":53},[36,224,225],{"class":38,"line":91},[36,226,156],{"class":53},[36,228,229],{"class":38,"line":97},[36,230,162],{"class":53},[13,232,233,234,237,238,241],{},"Options are validated against the module's declared schema, then passed to its\n",[22,235,236],{},"setup()"," as ",[22,239,240],{},"ctx.options",". A missing required option fails boot with a clear error.",[243,244,246],"h2",{"id":245},"what-belongs-here","What belongs here",[13,248,249,250,253,254,257],{},"Only configuration the module explicitly declares as an option. Not secrets —\nthose belong in ",[22,251,252],{},".env"," and accessed via ",[22,255,256],{},"axon.env",". Not logic — modules handle\ntheir own setup.",[243,259,261],{"id":260},"installing-modules","Installing modules",[13,263,264,266,267,270],{},[22,265,5],{}," config only applies to modules already present in the ",[22,268,269],{},"modules\u002F","\nfolder. To add a module:",[27,272,276],{"className":273,"code":274,"language":275,"meta":32,"style":32},"language-bash shiki shiki-themes dark-plus","axon install @acme\u002Fgithub\n","bash",[22,277,278],{"__ignoreMap":32},[36,279,280,283,286],{"class":38,"line":39},[36,281,282],{"class":49},"axon",[36,284,285],{"class":77}," install",[36,287,288],{"class":77}," @acme\u002Fgithub\n",[13,290,291,292,294,295,298,299,304],{},"This copies the module source into ",[22,293,269],{}," and patches ",[22,296,297],{},"axon.config.ts"," with\nany policy the module needs. See ",[300,301,303],"a",{"href":302},"\u002Fdocs\u002Fv2\u002Fmodules\u002Finstalling","Installing & Using",".",[306,307,308],"style",{},"html pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}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 .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}",{"title":32,"searchDepth":57,"depth":57,"links":310},[311,312],{"id":245,"depth":57,"text":246},{"id":260,"depth":57,"text":261},"The modules this agent loads. An array of entries — each entry is a module\nname (or an imported module config), optionally paired with an options object\nin a [module, options] tuple.","md",{},"\u002Fdocs\u002Fv2\u002Fapi\u002Fconfig\u002Fmodules",{"title":5,"description":313},"docs\u002Fv2\u002Fapi\u002Fconfig\u002Fmodules","_NIwmYRiyypR_yhH2OMX3Q-bFFSGyw7BX6PKAcgZXEU",1785671808293]