[{"data":1,"prerenderedAt":727},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fagent\u002Fconfig":3},{"id":4,"title":5,"body":6,"description":16,"extension":721,"meta":722,"navigation":76,"path":723,"seo":724,"stem":725,"__hash__":726},"docs\u002Fdocs\u002Fv2\u002Fagent\u002Fconfig.md","axon.config.ts",{"type":7,"value":8,"toc":714},"minimark",[9,13,17,284,290,406,423,428,435,627,634,642,646,657,662,686,693,700,704,710],[10,11,5],"h1",{"id":12},"axonconfigts",[14,15,16],"p",{},"Every agent has one. It declares which engine the agent uses and what the capsule is\nallowed to do. Everything else in the folder is discovered automatically — this is the\none file Axon explicitly reads at boot.",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-ts shiki shiki-themes dark-plus","import { defineAgent } from \"@axon\u002Fsdk\"\nimport { Axon } from \"@arcforge\u002Fengines\"\n\nexport default defineAgent({\n    engine: Axon(),\n\n    policy: {\n        fs: {\n            read:  [\".\u002F**\"],\n            write: [\".\u002F**\"],\n            deny:  [\".env\", \"**\u002Fnode_modules\u002F**\"],\n        },\n        network: {\n            allow: [\"api.github.com\", \"api.linear.app\"],\n        },\n        process: {\n            allow: [\"git *\", \"bun *\"],\n            deny:  [\"git push --force*\"],\n        },\n    },\n\n    workspace: true,\n})\n","ts","",[25,26,27,54,71,78,94,106,111,120,128,143,156,175,181,189,207,212,220,237,249,254,260,265,278],"code",{"__ignoreMap":23},[28,29,32,36,40,44,47,50],"span",{"class":30,"line":31},"line",1,[28,33,35],{"class":34},"sYbnZ","import",[28,37,39],{"class":38},"sTNBD"," { ",[28,41,43],{"class":42},"s3F5K","defineAgent",[28,45,46],{"class":38}," } ",[28,48,49],{"class":34},"from",[28,51,53],{"class":52},"sKc5r"," \"@axon\u002Fsdk\"\n",[28,55,57,59,61,64,66,68],{"class":30,"line":56},2,[28,58,35],{"class":34},[28,60,39],{"class":38},[28,62,63],{"class":42},"Axon",[28,65,46],{"class":38},[28,67,49],{"class":34},[28,69,70],{"class":52}," \"@arcforge\u002Fengines\"\n",[28,72,74],{"class":30,"line":73},3,[28,75,77],{"emptyLinePlaceholder":76},true,"\n",[28,79,81,84,87,91],{"class":30,"line":80},4,[28,82,83],{"class":34},"export",[28,85,86],{"class":34}," default",[28,88,90],{"class":89},"sCudf"," defineAgent",[28,92,93],{"class":38},"({\n",[28,95,97,100,103],{"class":30,"line":96},5,[28,98,99],{"class":42},"    engine:",[28,101,102],{"class":89}," Axon",[28,104,105],{"class":38},"(),\n",[28,107,109],{"class":30,"line":108},6,[28,110,77],{"emptyLinePlaceholder":76},[28,112,114,117],{"class":30,"line":113},7,[28,115,116],{"class":42},"    policy:",[28,118,119],{"class":38}," {\n",[28,121,123,126],{"class":30,"line":122},8,[28,124,125],{"class":42},"        fs:",[28,127,119],{"class":38},[28,129,131,134,137,140],{"class":30,"line":130},9,[28,132,133],{"class":42},"            read:",[28,135,136],{"class":38},"  [",[28,138,139],{"class":52},"\".\u002F**\"",[28,141,142],{"class":38},"],\n",[28,144,146,149,152,154],{"class":30,"line":145},10,[28,147,148],{"class":42},"            write:",[28,150,151],{"class":38}," [",[28,153,139],{"class":52},[28,155,142],{"class":38},[28,157,159,162,164,167,170,173],{"class":30,"line":158},11,[28,160,161],{"class":42},"            deny:",[28,163,136],{"class":38},[28,165,166],{"class":52},"\".env\"",[28,168,169],{"class":38},", ",[28,171,172],{"class":52},"\"**\u002Fnode_modules\u002F**\"",[28,174,142],{"class":38},[28,176,178],{"class":30,"line":177},12,[28,179,180],{"class":38},"        },\n",[28,182,184,187],{"class":30,"line":183},13,[28,185,186],{"class":42},"        network:",[28,188,119],{"class":38},[28,190,192,195,197,200,202,205],{"class":30,"line":191},14,[28,193,194],{"class":42},"            allow:",[28,196,151],{"class":38},[28,198,199],{"class":52},"\"api.github.com\"",[28,201,169],{"class":38},[28,203,204],{"class":52},"\"api.linear.app\"",[28,206,142],{"class":38},[28,208,210],{"class":30,"line":209},15,[28,211,180],{"class":38},[28,213,215,218],{"class":30,"line":214},16,[28,216,217],{"class":42},"        process:",[28,219,119],{"class":38},[28,221,223,225,227,230,232,235],{"class":30,"line":222},17,[28,224,194],{"class":42},[28,226,151],{"class":38},[28,228,229],{"class":52},"\"git *\"",[28,231,169],{"class":38},[28,233,234],{"class":52},"\"bun *\"",[28,236,142],{"class":38},[28,238,240,242,244,247],{"class":30,"line":239},18,[28,241,161],{"class":42},[28,243,136],{"class":38},[28,245,246],{"class":52},"\"git push --force*\"",[28,248,142],{"class":38},[28,250,252],{"class":30,"line":251},19,[28,253,180],{"class":38},[28,255,257],{"class":30,"line":256},20,[28,258,259],{"class":38},"    },\n",[28,261,263],{"class":30,"line":262},21,[28,264,77],{"emptyLinePlaceholder":76},[28,266,268,271,275],{"class":30,"line":267},22,[28,269,270],{"class":42},"    workspace:",[28,272,274],{"class":273},"scz_3"," true",[28,276,277],{"class":38},",\n",[28,279,281],{"class":30,"line":280},23,[28,282,283],{"class":38},"})\n",[285,286,288],"h2",{"id":287},"engine",[25,289,287],{},[18,291,293],{"className":20,"code":292,"language":22,"meta":23,"style":23},"import { defineAgent } from \"@axon\u002Fsdk\"\nimport { Axon, Cerebras, Codex, Ollama, OpenRouter } from \"@arcforge\u002Fengines\"\n\nexport default defineAgent({\n    engine: Axon(),                                      \u002F\u002F Axon Cloud (default)\n    \u002F\u002F engine: Codex(),                                  \u002F\u002F ChatGPT subscription via OAuth\n    \u002F\u002F engine: Cerebras({ model: \"gpt-oss-120b\" }),      \u002F\u002F Cerebras Inference\n    \u002F\u002F engine: Ollama({ model: \"qwen2.5:7b\" }),          \u002F\u002F local inference\n    \u002F\u002F engine: OpenRouter({ model: \"openai\u002Fgpt-4o\" }),   \u002F\u002F BYOK, 100+ models\n})\n",[25,294,295,309,343,347,357,370,378,386,394,402],{"__ignoreMap":23},[28,296,297,299,301,303,305,307],{"class":30,"line":31},[28,298,35],{"class":34},[28,300,39],{"class":38},[28,302,43],{"class":42},[28,304,46],{"class":38},[28,306,49],{"class":34},[28,308,53],{"class":52},[28,310,311,313,315,317,319,322,324,327,329,332,334,337,339,341],{"class":30,"line":56},[28,312,35],{"class":34},[28,314,39],{"class":38},[28,316,63],{"class":42},[28,318,169],{"class":38},[28,320,321],{"class":42},"Cerebras",[28,323,169],{"class":38},[28,325,326],{"class":42},"Codex",[28,328,169],{"class":38},[28,330,331],{"class":42},"Ollama",[28,333,169],{"class":38},[28,335,336],{"class":42},"OpenRouter",[28,338,46],{"class":38},[28,340,49],{"class":34},[28,342,70],{"class":52},[28,344,345],{"class":30,"line":73},[28,346,77],{"emptyLinePlaceholder":76},[28,348,349,351,353,355],{"class":30,"line":80},[28,350,83],{"class":34},[28,352,86],{"class":34},[28,354,90],{"class":89},[28,356,93],{"class":38},[28,358,359,361,363,366],{"class":30,"line":96},[28,360,99],{"class":42},[28,362,102],{"class":89},[28,364,365],{"class":38},"(),                                      ",[28,367,369],{"class":368},"sOLPB","\u002F\u002F Axon Cloud (default)\n",[28,371,372,375],{"class":30,"line":108},[28,373,374],{"class":368},"    \u002F\u002F engine: Codex(),",[28,376,377],{"class":368},"                                  \u002F\u002F ChatGPT subscription via OAuth\n",[28,379,380,383],{"class":30,"line":113},[28,381,382],{"class":368},"    \u002F\u002F engine: Cerebras({ model: \"gpt-oss-120b\" }),",[28,384,385],{"class":368},"      \u002F\u002F Cerebras Inference\n",[28,387,388,391],{"class":30,"line":122},[28,389,390],{"class":368},"    \u002F\u002F engine: Ollama({ model: \"qwen2.5:7b\" }),",[28,392,393],{"class":368},"          \u002F\u002F local inference\n",[28,395,396,399],{"class":30,"line":130},[28,397,398],{"class":368},"    \u002F\u002F engine: OpenRouter({ model: \"openai\u002Fgpt-4o\" }),",[28,400,401],{"class":368},"   \u002F\u002F BYOK, 100+ models\n",[28,403,404],{"class":30,"line":145},[28,405,283],{"class":38},[14,407,408,409,412,413,416,417,422],{},"Engine functions come from ",[25,410,411],{},"@arcforge\u002Fengines",". The connected provider in the TUI (",[25,414,415],{},"*"," to\nswitch) overrides this when running locally — the config value is the default for headless\nand deployed runs. See ",[418,419,421],"a",{"href":420},"\u002Fdocs\u002Fv2\u002Fgetting-started\u002Finstallation#powering-your-agent","Powering your agent","\nfor the provider options.",[285,424,426],{"id":425},"policy",[25,427,425],{},[14,429,430,431,434],{},"Controls what the capsule subprocess is allowed to do. Three rule groups plus an optional\n",[25,432,433],{},"escalate"," callback for decisions that need context.",[18,436,438],{"className":20,"code":437,"language":22,"meta":23,"style":23},"export default defineAgent({\n    policy: {\n        fs: {\n            read:  [\".\u002Fsrc\u002F**\"],\n            write: [\".\u002Fsrc\u002F**\"],\n            deny:  [\".env\", \"**\u002Fnode_modules\u002F**\"],\n        },\n        network: {\n            allow: [\"api.github.com\"],\n        },\n        process: {\n            allow: [\"git *\", \"bun *\"],\n            deny:  [\"git push --force*\"],\n        },\n        escalate: call =>\n            call.fn === \"process.spawn\" && call.args[0]?.includes(\"push --force\"),\n    },\n})\n",[25,439,440,450,456,462,473,483,497,501,507,517,521,527,541,551,555,569,619,623],{"__ignoreMap":23},[28,441,442,444,446,448],{"class":30,"line":31},[28,443,83],{"class":34},[28,445,86],{"class":34},[28,447,90],{"class":89},[28,449,93],{"class":38},[28,451,452,454],{"class":30,"line":56},[28,453,116],{"class":42},[28,455,119],{"class":38},[28,457,458,460],{"class":30,"line":73},[28,459,125],{"class":42},[28,461,119],{"class":38},[28,463,464,466,468,471],{"class":30,"line":80},[28,465,133],{"class":42},[28,467,136],{"class":38},[28,469,470],{"class":52},"\".\u002Fsrc\u002F**\"",[28,472,142],{"class":38},[28,474,475,477,479,481],{"class":30,"line":96},[28,476,148],{"class":42},[28,478,151],{"class":38},[28,480,470],{"class":52},[28,482,142],{"class":38},[28,484,485,487,489,491,493,495],{"class":30,"line":108},[28,486,161],{"class":42},[28,488,136],{"class":38},[28,490,166],{"class":52},[28,492,169],{"class":38},[28,494,172],{"class":52},[28,496,142],{"class":38},[28,498,499],{"class":30,"line":113},[28,500,180],{"class":38},[28,502,503,505],{"class":30,"line":122},[28,504,186],{"class":42},[28,506,119],{"class":38},[28,508,509,511,513,515],{"class":30,"line":130},[28,510,194],{"class":42},[28,512,151],{"class":38},[28,514,199],{"class":52},[28,516,142],{"class":38},[28,518,519],{"class":30,"line":145},[28,520,180],{"class":38},[28,522,523,525],{"class":30,"line":158},[28,524,217],{"class":42},[28,526,119],{"class":38},[28,528,529,531,533,535,537,539],{"class":30,"line":177},[28,530,194],{"class":42},[28,532,151],{"class":38},[28,534,229],{"class":52},[28,536,169],{"class":38},[28,538,234],{"class":52},[28,540,142],{"class":38},[28,542,543,545,547,549],{"class":30,"line":183},[28,544,161],{"class":42},[28,546,136],{"class":38},[28,548,246],{"class":52},[28,550,142],{"class":38},[28,552,553],{"class":30,"line":191},[28,554,180],{"class":38},[28,556,557,560,563,566],{"class":30,"line":209},[28,558,559],{"class":89},"        escalate",[28,561,562],{"class":42},":",[28,564,565],{"class":42}," call",[28,567,568],{"class":273}," =>\n",[28,570,571,574,577,580,583,586,589,592,594,597,600,604,607,610,613,616],{"class":30,"line":214},[28,572,573],{"class":42},"            call",[28,575,576],{"class":38},".",[28,578,579],{"class":42},"fn",[28,581,582],{"class":38}," === ",[28,584,585],{"class":52},"\"process.spawn\"",[28,587,588],{"class":38}," && ",[28,590,591],{"class":42},"call",[28,593,576],{"class":38},[28,595,596],{"class":42},"args",[28,598,599],{"class":38},"[",[28,601,603],{"class":602},"sDGX8","0",[28,605,606],{"class":38},"]?.",[28,608,609],{"class":89},"includes",[28,611,612],{"class":38},"(",[28,614,615],{"class":52},"\"push --force\"",[28,617,618],{"class":38},"),\n",[28,620,621],{"class":30,"line":222},[28,622,259],{"class":38},[28,624,625],{"class":30,"line":239},[28,626,283],{"class":38},[14,628,629,630,633],{},"A missing block means unrestricted access in that domain — no ",[25,631,632],{},"fs"," block means the capsule\ncan read and write anywhere. For production agents, always declare explicit rules.",[14,635,636,637,641],{},"See ",[418,638,640],{"href":639},"\u002Fdocs\u002Fv2\u002Fagent\u002Fpolicy","Policy"," for the full reference.",[285,643,645],{"id":644},"environment","Environment",[14,647,648,649,652,653,576],{},"Environment variables don't live in the config — the agent's ",[25,650,651],{},".env"," file is the source\nof truth, like any other project. Putting a key there is the explicit act of giving the\nagent that key. See ",[418,654,656],{"href":655},"\u002Fdocs\u002Fv2\u002Fagent\u002Fenvironment","Environment & Secrets",[285,658,660],{"id":659},"workspace",[25,661,659],{},[18,663,665],{"className":20,"code":664,"language":22,"meta":23,"style":23},"export default defineAgent({ workspace: true })\n",[25,666,667],{"__ignoreMap":23},[28,668,669,671,673,675,678,681,683],{"class":30,"line":31},[28,670,83],{"class":34},[28,672,86],{"class":34},[28,674,90],{"class":89},[28,676,677],{"class":38},"({ ",[28,679,680],{"class":42},"workspace:",[28,682,274],{"class":273},[28,684,685],{"class":38}," })\n",[14,687,688,689,692],{},"Opts the agent into the nearest ",[25,690,691],{},".agents\u002F"," folder in the directory tree. When true, Axon\nwalks upward from the agent's working directory, finds the workspace layer, and merges its\ntools, prompts, scripts, and modules into the agent's runtime.",[14,694,636,695,699],{},[418,696,698],{"href":697},"\u002Fdocs\u002Fv2\u002Fworkspace","Workspace Agents"," for the full guide.",[285,701,703],{"id":702},"why-one-file","Why one file",[14,705,706,707,709],{},"Everything declared in one TypeScript file means the agent is readable at a glance. One\nfile changed is one diff to review. The ",[25,708,433],{}," callback can contain real logic —\nconditions, pattern matching, context-sensitive decisions — which a JSON config file can't.",[711,712,713],"style",{},"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 .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}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 .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}html pre.shiki code .sDGX8, html code.shiki .sDGX8{--shiki-default:#B5CEA8}",{"title":23,"searchDepth":56,"depth":56,"links":715},[716,717,718,719,720],{"id":287,"depth":56,"text":287},{"id":425,"depth":56,"text":425},{"id":644,"depth":56,"text":645},{"id":659,"depth":56,"text":659},{"id":702,"depth":56,"text":703},"md",{},"\u002Fdocs\u002Fv2\u002Fagent\u002Fconfig",{"title":5,"description":16},"docs\u002Fv2\u002Fagent\u002Fconfig","44qNSeQrZyMAevexDStp0dY1ojyF2qDMRR9ha0hhrP4",1785671805839]