[{"data":1,"prerenderedAt":480},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fconcepts\u002Fcapabilities":3},{"id":4,"title":5,"body":6,"description":16,"extension":474,"meta":475,"navigation":334,"path":476,"seo":477,"stem":478,"__hash__":479},"docs\u002Fdocs\u002Fv2\u002Fconcepts\u002Fcapabilities.md","Capabilities",{"type":7,"value":8,"toc":468},"minimark",[9,13,17,22,30,120,127,130,134,141,218,229,232,236,243,418,437,441,451,464],[10,11,5],"h1",{"id":12},"capabilities",[14,15,16],"p",{},"Tools, prompts, and scripts are the three authoring primitives. Everything an agent can do or know is expressed through one of them.",[18,19,21],"h2",{"id":20},"tools","Tools",[14,23,24,25,29],{},"Tools are exported async TypeScript functions in ",[26,27,28],"code",{},"src\u002Ftools\u002F",". Each file in that directory becomes a named tool namespace — the filename becomes the namespace, the exports become callable functions.",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-ts shiki shiki-themes dark-plus","\u002F\u002F src\u002Ftools\u002Fkanban.ts\nexport async function list(): Promise\u003CTask[]> { ... }\nexport async function createTask(title: string): Promise\u003CTask> { ... }\n","ts","",[26,38,39,48,83],{"__ignoreMap":36},[40,41,44],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"sOLPB","\u002F\u002F src\u002Ftools\u002Fkanban.ts\n",[40,49,51,55,59,62,66,70,74,77,80],{"class":42,"line":50},2,[40,52,54],{"class":53},"sYbnZ","export",[40,56,58],{"class":57},"scz_3"," async",[40,60,61],{"class":57}," function",[40,63,65],{"class":64},"sCudf"," list",[40,67,69],{"class":68},"sTNBD","(): ",[40,71,73],{"class":72},"sNl3T","Promise",[40,75,76],{"class":68},"\u003C",[40,78,79],{"class":72},"Task",[40,81,82],{"class":68},"[]> { ... }\n",[40,84,86,88,90,92,95,98,102,105,108,111,113,115,117],{"class":42,"line":85},3,[40,87,54],{"class":53},[40,89,58],{"class":57},[40,91,61],{"class":57},[40,93,94],{"class":64}," createTask",[40,96,97],{"class":68},"(",[40,99,101],{"class":100},"s3F5K","title",[40,103,104],{"class":68},": ",[40,106,107],{"class":72},"string",[40,109,110],{"class":68},"): ",[40,112,73],{"class":72},[40,114,76],{"class":68},[40,116,79],{"class":72},[40,118,119],{"class":68},"> { ... }\n",[14,121,122,123,126],{},"The agent calls them by name during its loop. Your scripts call them directly via ",[26,124,125],{},"axon.tools.ns.fn(args)",". Both paths go through the capsule — policy enforcement applies to every call regardless of who initiated it.",[14,128,129],{},"Tools are declared to the model via JSDoc. Write documentation as if explaining to someone who cannot see your implementation — because that is exactly what happens.",[18,131,133],{"id":132},"prompts","Prompts",[14,135,136,137,140],{},"Prompts are reusable context templates in ",[26,138,139],{},"src\u002Fprompts\u002F",". They render to text at invocation time, optionally accepting variables.",[31,142,144],{"className":33,"code":143,"language":35,"meta":36,"style":36},"const prompt = await axon.prompt(\"repo-review\", { repo, branch })\nconst { stream } = axon.stream({ prompt })\n",[26,145,146,191],{"__ignoreMap":36},[40,147,148,151,155,158,161,164,167,170,172,176,179,182,185,188],{"class":42,"line":43},[40,149,150],{"class":57},"const",[40,152,154],{"class":153},"s9McN"," prompt",[40,156,157],{"class":68}," = ",[40,159,160],{"class":53},"await",[40,162,163],{"class":100}," axon",[40,165,166],{"class":68},".",[40,168,169],{"class":64},"prompt",[40,171,97],{"class":68},[40,173,175],{"class":174},"sKc5r","\"repo-review\"",[40,177,178],{"class":68},", { ",[40,180,181],{"class":100},"repo",[40,183,184],{"class":68},", ",[40,186,187],{"class":100},"branch",[40,189,190],{"class":68}," })\n",[40,192,193,195,198,201,204,207,209,211,214,216],{"class":42,"line":50},[40,194,150],{"class":57},[40,196,197],{"class":68}," { ",[40,199,200],{"class":153},"stream",[40,202,203],{"class":68}," } = ",[40,205,206],{"class":100},"axon",[40,208,166],{"class":68},[40,210,200],{"class":64},[40,212,213],{"class":68},"({ ",[40,215,169],{"class":100},[40,217,190],{"class":68},[14,219,220,221,224,225,228],{},"Prompts can be plain Markdown or Vuedown files (",[26,222,223],{},".vue",") with a ",[26,226,227],{},"\u003Cscript setup>"," block that fetches live data at render time. A prompt that loads the current sprint state, open issues, and recent commits gives the agent a hydrated snapshot of the world — more reliable than letting the agent call tools to gather it.",[14,230,231],{},"Pass an array to compose multiple prompts. Axon concatenates them in order.",[18,233,235],{"id":234},"scripts","Scripts",[14,237,238,239,242],{},"Scripts are TypeScript files in ",[26,240,241],{},"src\u002Fscripts\u002F",". Each script is an explicit automation — it gathers context, calls tools, invokes the agent loop, and produces output.",[31,244,246],{"className":33,"code":245,"language":35,"meta":36,"style":36},"\u002F\u002F src\u002Fscripts\u002Fclose-plan.ts\nconst { issueId } = defineArgs\u003C{ issueId: string }>()\nconst prompt = await axon.prompt(\"close-plan\", { issueId })\nconst { stream } = axon.stream({ prompt })\n\nfor await (const entry of stream) {\n    if (entry.type === \"text\") process.stdout.write(entry.content)\n}\n",[26,247,248,253,279,306,329,336,362,412],{"__ignoreMap":36},[40,249,250],{"class":42,"line":43},[40,251,252],{"class":46},"\u002F\u002F src\u002Fscripts\u002Fclose-plan.ts\n",[40,254,255,257,259,262,264,267,270,272,274,276],{"class":42,"line":50},[40,256,150],{"class":57},[40,258,197],{"class":68},[40,260,261],{"class":153},"issueId",[40,263,203],{"class":68},[40,265,266],{"class":64},"defineArgs",[40,268,269],{"class":68},"\u003C{ ",[40,271,261],{"class":100},[40,273,104],{"class":68},[40,275,107],{"class":72},[40,277,278],{"class":68}," }>()\n",[40,280,281,283,285,287,289,291,293,295,297,300,302,304],{"class":42,"line":85},[40,282,150],{"class":57},[40,284,154],{"class":153},[40,286,157],{"class":68},[40,288,160],{"class":53},[40,290,163],{"class":100},[40,292,166],{"class":68},[40,294,169],{"class":64},[40,296,97],{"class":68},[40,298,299],{"class":174},"\"close-plan\"",[40,301,178],{"class":68},[40,303,261],{"class":100},[40,305,190],{"class":68},[40,307,309,311,313,315,317,319,321,323,325,327],{"class":42,"line":308},4,[40,310,150],{"class":57},[40,312,197],{"class":68},[40,314,200],{"class":153},[40,316,203],{"class":68},[40,318,206],{"class":100},[40,320,166],{"class":68},[40,322,200],{"class":64},[40,324,213],{"class":68},[40,326,169],{"class":100},[40,328,190],{"class":68},[40,330,332],{"class":42,"line":331},5,[40,333,335],{"emptyLinePlaceholder":334},true,"\n",[40,337,339,342,345,348,350,353,356,359],{"class":42,"line":338},6,[40,340,341],{"class":53},"for",[40,343,344],{"class":53}," await",[40,346,347],{"class":68}," (",[40,349,150],{"class":57},[40,351,352],{"class":153}," entry",[40,354,355],{"class":57}," of",[40,357,358],{"class":100}," stream",[40,360,361],{"class":68},") {\n",[40,363,365,368,370,373,375,378,381,384,387,390,392,395,397,400,402,404,406,409],{"class":42,"line":364},7,[40,366,367],{"class":53},"    if",[40,369,347],{"class":68},[40,371,372],{"class":100},"entry",[40,374,166],{"class":68},[40,376,377],{"class":100},"type",[40,379,380],{"class":68}," === ",[40,382,383],{"class":174},"\"text\"",[40,385,386],{"class":68},") ",[40,388,389],{"class":100},"process",[40,391,166],{"class":68},[40,393,394],{"class":100},"stdout",[40,396,166],{"class":68},[40,398,399],{"class":64},"write",[40,401,97],{"class":68},[40,403,372],{"class":100},[40,405,166],{"class":68},[40,407,408],{"class":100},"content",[40,410,411],{"class":68},")\n",[40,413,415],{"class":42,"line":414},8,[40,416,417],{"class":68},"}\n",[14,419,420,421,424,425,428,429,432,433,436],{},"Scripts are invoked four ways: ",[26,422,423],{},"axon run \u003Cname>"," from the CLI, ",[26,426,427],{},"!\u003Cname>"," from the TUI palette, ",[26,430,431],{},"axon.scripts.request\u002Fstream()"," from another script or route, or via an HTTP route that calls ",[26,434,435],{},"axon.scripts.stream",". The script is always the logic owner — routes are thin wrappers that expose scripts over HTTP.",[18,438,440],{"id":439},"modules","Modules",[14,442,443,444,184,447,450],{},"A module packages any combination of tools, prompts, scripts, and routes for installation into another agent. Installed modules contribute to the same namespaced surfaces — ",[26,445,446],{},"axon.tools.\u003Cmodule>.*",[26,448,449],{},"axon.prompt(\"\u003Cmodule>:name\")"," — subject to the host agent's policy.",[14,452,453,454,458,459,463],{},"See ",[455,456,440],"a",{"href":457},"\u002Fdocs\u002Fv2\u002Fconcepts\u002Fmodules"," for how modules work, and ",[455,460,462],{"href":461},"\u002Fdocs\u002Fv2\u002Fmodules\u002Foverview","Modules tab"," for authoring them.",[465,466,467],"style",{},"html pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}html pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}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 .sNl3T, html code.shiki .sNl3T{--shiki-default:#4EC9B0}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}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 .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}",{"title":36,"searchDepth":50,"depth":50,"links":469},[470,471,472,473],{"id":20,"depth":50,"text":21},{"id":132,"depth":50,"text":133},{"id":234,"depth":50,"text":235},{"id":439,"depth":50,"text":440},"md",{},"\u002Fdocs\u002Fv2\u002Fconcepts\u002Fcapabilities",{"title":5,"description":16},"docs\u002Fv2\u002Fconcepts\u002Fcapabilities","vfGImYPgFAhKUmn37DjXF_04-jCqLQoEK9lLxWV-zr8",1785671807784]