[{"data":1,"prerenderedAt":923},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fconcepts\u002Fvuedown":3},{"id":4,"title":5,"body":6,"description":916,"extension":917,"meta":918,"navigation":312,"path":919,"seo":920,"stem":921,"__hash__":922},"docs\u002Fdocs\u002Fv2\u002Fconcepts\u002Fvuedown.md","Vuedown",{"type":7,"value":8,"toc":905},"minimark",[9,13,42,45,50,53,134,144,148,167,400,403,425,432,436,441,501,512,516,519,634,638,651,711,772,779,825,828,835,844,892,901],[10,11,5],"h1",{"id":12},"vuedown",[14,15,16,17,21,22,25,26,29,30,33,34,38,39,41],"p",{},"Axon uses ",[18,19,20],"code",{},".vue"," files in ",[18,23,24],{},"src\u002Fboot.vue",", ",[18,27,28],{},"src\u002Fprompts\u002F",", and ",[18,31,32],{},"src\u002Fprompts\u002Fcomponents\u002F","\nas a template format for generating text. This is ",[35,36,37],"strong",{},"not"," a web application. There is no\nbrowser, no DOM, no hydration, no routing. The ",[18,40,20],{}," file extension is reused because\nVue's template syntax is expressive enough to build data-driven prompts, and the existing\ntooling ecosystem (Volar, Prettier, syntax highlighting) works without configuration.",[14,43,44],{},"The output is always a string — markdown, by default — that the agent reads as context.",[46,47,49],"h2",{"id":48},"the-mental-model","The mental model",[14,51,52],{},"Think of it like Markdown, but composable and programmable:",[54,55,56,70],"table",{},[57,58,59],"thead",{},[60,61,62,65,68],"tr",{},[63,64],"th",{},[63,66,67],{},"Markdown",[63,69,5],{},[71,72,73,85,101,113,123],"tbody",{},[60,74,75,79,82],{},[76,77,78],"td",{},"Output",[76,80,81],{},"String",[76,83,84],{},"String (markdown)",[60,86,87,90,93],{},[76,88,89],{},"Logic",[76,91,92],{},"None",[76,94,95,25,98],{},[18,96,97],{},"v-if",[18,99,100],{},"v-for",[60,102,103,106,108],{},[76,104,105],{},"Data",[76,107,92],{},[76,109,110],{},[18,111,112],{},"await axon.tools.*",[60,114,115,118,120],{},[76,116,117],{},"Composition",[76,119,92],{},[76,121,122],{},"Import components",[60,124,125,128,131],{},[76,126,127],{},"Tooling",[76,129,130],{},"Any editor",[76,132,133],{},"Volar (Vue extension)",[14,135,136,137,139,140,143],{},"A ",[18,138,20],{}," file in Axon is a ",[35,141,142],{},"template that renders to text",". Same syntax as a Vue\ncomponent, completely different purpose.",[46,145,147],{"id":146},"what-runs","What runs",[14,149,150,151,154,155,158,159,162,163,166],{},"The ",[18,152,153],{},"\u003Cscript setup>"," block executes before render. Top-level ",[18,156,157],{},"await"," works. The ",[18,160,161],{},"axon","\nglobal is injected — no import needed. When the script finishes, the ",[18,164,165],{},"\u003Ctemplate>"," renders\nto a markdown string.",[168,169,174],"pre",{"className":170,"code":171,"language":172,"meta":173,"style":173},"language-vue shiki shiki-themes dark-plus","\u003Cscript setup lang=\"ts\">\n\u002F\u002F This runs at render time, not in a browser\nconst tasks = await axon.tools.kanban.list()\nconst next = tasks.find(t => t.status === \"accepted\")\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n    \u003Ch2>Current Task\u003C\u002Fh2>\n    \u003Cp v-if=\"next\">{{ next.title }}\u003C\u002Fp>\n    \u003Cp v-else>No task assigned.\u003C\u002Fp>\n\u003C\u002Ftemplate>\n","vue","",[18,175,176,207,214,253,297,307,314,324,344,370,391],{"__ignoreMap":173},[177,178,181,185,189,193,196,200,204],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"srRes","\u003C",[177,186,188],{"class":187},"scz_3","script",[177,190,192],{"class":191},"s3F5K"," setup",[177,194,195],{"class":191}," lang",[177,197,199],{"class":198},"sTNBD","=",[177,201,203],{"class":202},"sKc5r","\"ts\"",[177,205,206],{"class":183},">\n",[177,208,210],{"class":179,"line":209},2,[177,211,213],{"class":212},"sOLPB","\u002F\u002F This runs at render time, not in a browser\n",[177,215,217,220,224,227,230,233,236,239,241,244,246,250],{"class":179,"line":216},3,[177,218,219],{"class":187},"const",[177,221,223],{"class":222},"s9McN"," tasks",[177,225,226],{"class":198}," = ",[177,228,157],{"class":229},"sYbnZ",[177,231,232],{"class":191}," axon",[177,234,235],{"class":198},".",[177,237,238],{"class":191},"tools",[177,240,235],{"class":198},[177,242,243],{"class":191},"kanban",[177,245,235],{"class":198},[177,247,249],{"class":248},"sCudf","list",[177,251,252],{"class":198},"()\n",[177,254,256,258,261,263,266,268,271,274,277,280,283,285,288,291,294],{"class":179,"line":255},4,[177,257,219],{"class":187},[177,259,260],{"class":222}," next",[177,262,226],{"class":198},[177,264,265],{"class":191},"tasks",[177,267,235],{"class":198},[177,269,270],{"class":248},"find",[177,272,273],{"class":198},"(",[177,275,276],{"class":191},"t",[177,278,279],{"class":187}," =>",[177,281,282],{"class":191}," t",[177,284,235],{"class":198},[177,286,287],{"class":191},"status",[177,289,290],{"class":198}," === ",[177,292,293],{"class":202},"\"accepted\"",[177,295,296],{"class":198},")\n",[177,298,300,303,305],{"class":179,"line":299},5,[177,301,302],{"class":183},"\u003C\u002F",[177,304,188],{"class":187},[177,306,206],{"class":183},[177,308,310],{"class":179,"line":309},6,[177,311,313],{"emptyLinePlaceholder":312},true,"\n",[177,315,317,319,322],{"class":179,"line":316},7,[177,318,184],{"class":183},[177,320,321],{"class":187},"template",[177,323,206],{"class":183},[177,325,327,330,332,335,338,340,342],{"class":179,"line":326},8,[177,328,329],{"class":183},"    \u003C",[177,331,46],{"class":187},[177,333,334],{"class":183},">",[177,336,337],{"class":198},"Current Task",[177,339,302],{"class":183},[177,341,46],{"class":187},[177,343,206],{"class":183},[177,345,347,349,351,354,356,359,361,364,366,368],{"class":179,"line":346},9,[177,348,329],{"class":183},[177,350,14],{"class":187},[177,352,353],{"class":191}," v-if",[177,355,199],{"class":198},[177,357,358],{"class":202},"\"next\"",[177,360,334],{"class":183},[177,362,363],{"class":198},"{{ next.title }}",[177,365,302],{"class":183},[177,367,14],{"class":187},[177,369,206],{"class":183},[177,371,373,375,377,380,382,385,387,389],{"class":179,"line":372},10,[177,374,329],{"class":183},[177,376,14],{"class":187},[177,378,379],{"class":191}," v-else",[177,381,334],{"class":183},[177,383,384],{"class":198},"No task assigned.",[177,386,302],{"class":183},[177,388,14],{"class":187},[177,390,206],{"class":183},[177,392,394,396,398],{"class":179,"line":393},11,[177,395,302],{"class":183},[177,397,321],{"class":187},[177,399,206],{"class":183},[14,401,402],{},"The agent receives:",[168,404,408],{"className":405,"code":406,"language":407,"meta":173,"style":173},"language-markdown shiki shiki-themes dark-plus","## Current Task\n\nFix auth token refresh on mobile.\n","markdown",[18,409,410,416,420],{"__ignoreMap":173},[177,411,412],{"class":179,"line":180},[177,413,415],{"class":414},"sf2jR","## Current Task\n",[177,417,418],{"class":179,"line":209},[177,419,313],{"emptyLinePlaceholder":312},[177,421,422],{"class":179,"line":216},[177,423,424],{"class":198},"Fix auth token refresh on mobile.\n",[14,426,427,428,431],{},"No React, no Vue runtime in a browser, no build step. The renderer (",[18,429,430],{},"@axon\u002Fvstr",") compiles\nand runs the file server-side and returns the string.",[46,433,435],{"id":434},"what-doesnt-work","What doesn't work",[14,437,438,440],{},[18,439,20],{}," files in Axon are not full Vue components. These are explicitly not supported:",[442,443,444,457,467,476,486,495],"ul",{},[445,446,447,25,450,25,453,456],"li",{},[18,448,449],{},"window",[18,451,452],{},"document",[18,454,455],{},"localStorage"," — no DOM globals",[445,458,459,460,462,463,466],{},"npm imports in ",[18,461,153],{}," — stripped before evaluation. Pass npm results via ",[18,464,465],{},"axon.tools"," instead.",[445,468,469,25,472,475],{},[18,470,471],{},"onMounted",[18,473,474],{},"onUnmounted"," — no lifecycle hooks (one-shot render)",[445,477,478,481,482,485],{},[18,479,480],{},"provide"," \u002F ",[18,483,484],{},"inject"," across component boundaries",[445,487,488,25,491,494],{},[18,489,490],{},"defineEmits",[18,492,493],{},"defineExpose"," — no-ops",[445,496,497,500],{},[18,498,499],{},"\u003Cstyle>"," blocks — silently ignored",[14,502,503,504,507,508,511],{},"If you need an npm package, consume it in a tool function in ",[18,505,506],{},"src\u002Ftools\u002F"," and call\n",[18,509,510],{},"axon.tools.yourTool.fn()"," from the script block.",[46,513,515],{"id":514},"directives","Directives",[14,517,518],{},"Standard Vue template directives all work:",[168,520,522],{"className":170,"code":521,"language":172,"meta":173,"style":173},"\u003Ctemplate>\n    \u003Cul>\n        \u003Cli v-for=\"item in items\" :key=\"item.id\">{{ item.title }}\u003C\u002Fli>\n    \u003C\u002Ful>\n    \u003Cp v-if=\"urgent\">⚠ Urgent items present\u003C\u002Fp>\n    \u003Cp v-else>All clear.\u003C\u002Fp>\n\u003C\u002Ftemplate>\n",[18,523,524,532,540,574,583,607,626],{"__ignoreMap":173},[177,525,526,528,530],{"class":179,"line":180},[177,527,184],{"class":183},[177,529,321],{"class":187},[177,531,206],{"class":183},[177,533,534,536,538],{"class":179,"line":209},[177,535,329],{"class":183},[177,537,442],{"class":187},[177,539,206],{"class":183},[177,541,542,545,547,550,552,555,558,560,563,565,568,570,572],{"class":179,"line":216},[177,543,544],{"class":183},"        \u003C",[177,546,445],{"class":187},[177,548,549],{"class":191}," v-for",[177,551,199],{"class":198},[177,553,554],{"class":202},"\"item in items\"",[177,556,557],{"class":191}," :key",[177,559,199],{"class":198},[177,561,562],{"class":202},"\"item.id\"",[177,564,334],{"class":183},[177,566,567],{"class":198},"{{ item.title }}",[177,569,302],{"class":183},[177,571,445],{"class":187},[177,573,206],{"class":183},[177,575,576,579,581],{"class":179,"line":255},[177,577,578],{"class":183},"    \u003C\u002F",[177,580,442],{"class":187},[177,582,206],{"class":183},[177,584,585,587,589,591,593,596,598,601,603,605],{"class":179,"line":299},[177,586,329],{"class":183},[177,588,14],{"class":187},[177,590,353],{"class":191},[177,592,199],{"class":198},[177,594,595],{"class":202},"\"urgent\"",[177,597,334],{"class":183},[177,599,600],{"class":198},"⚠ Urgent items present",[177,602,302],{"class":183},[177,604,14],{"class":187},[177,606,206],{"class":183},[177,608,609,611,613,615,617,620,622,624],{"class":179,"line":309},[177,610,329],{"class":183},[177,612,14],{"class":187},[177,614,379],{"class":191},[177,616,334],{"class":183},[177,618,619],{"class":198},"All clear.",[177,621,302],{"class":183},[177,623,14],{"class":187},[177,625,206],{"class":183},[177,627,628,630,632],{"class":179,"line":316},[177,629,302],{"class":183},[177,631,321],{"class":187},[177,633,206],{"class":183},[46,635,637],{"id":636},"components","Components",[14,639,640,641,643,644,646,647,650],{},"Components in ",[18,642,32],{}," are auto-imported globally. Any ",[18,645,20],{}," file\nthere is available in ",[18,648,649],{},"boot.vue"," and all prompts without an import statement.",[168,652,654],{"className":170,"code":653,"language":172,"meta":173,"style":173},"\u003C!-- src\u002Fprompts\u002Fcomponents\u002Fidentity.vue -->\n\u003Ctemplate>\n    \u003Ch2>Identity\u003C\u002Fh2>\n    \u003Cp>You are Barry — a spec-driven automation agent...\u003C\u002Fp>\n\u003C\u002Ftemplate>\n",[18,655,656,661,669,686,703],{"__ignoreMap":173},[177,657,658],{"class":179,"line":180},[177,659,660],{"class":212},"\u003C!-- src\u002Fprompts\u002Fcomponents\u002Fidentity.vue -->\n",[177,662,663,665,667],{"class":179,"line":209},[177,664,184],{"class":183},[177,666,321],{"class":187},[177,668,206],{"class":183},[177,670,671,673,675,677,680,682,684],{"class":179,"line":216},[177,672,329],{"class":183},[177,674,46],{"class":187},[177,676,334],{"class":183},[177,678,679],{"class":198},"Identity",[177,681,302],{"class":183},[177,683,46],{"class":187},[177,685,206],{"class":183},[177,687,688,690,692,694,697,699,701],{"class":179,"line":255},[177,689,329],{"class":183},[177,691,14],{"class":187},[177,693,334],{"class":183},[177,695,696],{"class":198},"You are Barry — a spec-driven automation agent...",[177,698,302],{"class":183},[177,700,14],{"class":187},[177,702,206],{"class":183},[177,704,705,707,709],{"class":179,"line":299},[177,706,302],{"class":183},[177,708,321],{"class":187},[177,710,206],{"class":183},[168,712,714],{"className":170,"code":713,"language":172,"meta":173,"style":173},"\u003C!-- src\u002Fboot.vue — Identity is auto-imported, no import needed -->\n\u003Ctemplate>\n    \u003Ch1>Barry\u003C\u002Fh1>\n    \u003CIdentity \u002F>\n    \u003CPersonality \u002F>\n\u003C\u002Ftemplate>\n",[18,715,716,721,729,746,755,764],{"__ignoreMap":173},[177,717,718],{"class":179,"line":180},[177,719,720],{"class":212},"\u003C!-- src\u002Fboot.vue — Identity is auto-imported, no import needed -->\n",[177,722,723,725,727],{"class":179,"line":209},[177,724,184],{"class":183},[177,726,321],{"class":187},[177,728,206],{"class":183},[177,730,731,733,735,737,740,742,744],{"class":179,"line":216},[177,732,329],{"class":183},[177,734,10],{"class":187},[177,736,334],{"class":183},[177,738,739],{"class":198},"Barry",[177,741,302],{"class":183},[177,743,10],{"class":187},[177,745,206],{"class":183},[177,747,748,750,752],{"class":179,"line":255},[177,749,329],{"class":183},[177,751,679],{"class":187},[177,753,754],{"class":183}," \u002F>\n",[177,756,757,759,762],{"class":179,"line":299},[177,758,329],{"class":183},[177,760,761],{"class":187},"Personality",[177,763,754],{"class":183},[177,765,766,768,770],{"class":179,"line":309},[177,767,302],{"class":183},[177,769,321],{"class":187},[177,771,206],{"class":183},[46,773,775,776,778],{"id":774},"where-vue-appears-in-an-agent","Where ",[18,777,20],{}," appears in an agent",[54,780,781,791],{},[57,782,783],{},[60,784,785,788],{},[63,786,787],{},"File",[63,789,790],{},"What it does",[71,792,793,802,815],{},[60,794,795,799],{},[76,796,797],{},[18,798,24],{},[76,800,801],{},"Standing system prompt, rendered as the agent's base identity",[60,803,804,809],{},[76,805,806],{},[18,807,808],{},"src\u002Fprompts\u002F*.vue",[76,810,811,812],{},"On-demand context loaded via ",[18,813,814],{},"axon.prompt(\"name\")",[60,816,817,822],{},[76,818,819],{},[18,820,821],{},"src\u002Fprompts\u002Fcomponents\u002F*.vue",[76,823,824],{},"Reusable fragments, auto-imported into boot and prompts",[14,826,827],{},"All three use the same renderer. All three produce markdown strings. None of them are\nweb components.",[46,829,150,831,834],{"id":830},"the-md-alternative",[18,832,833],{},".md"," alternative",[14,836,837,838,840,841,843],{},"Every ",[18,839,20],{}," file has a plain markdown equivalent. For prompts that don't need live data\nor composition, ",[18,842,833],{}," is simpler:",[168,845,847],{"className":405,"code":846,"language":407,"meta":173,"style":173},"\u003C!-- src\u002Fprompts\u002Fcode-review.md -->\n---\nargs:\n    - name: issueId\n      required: true\n---\n\nReview the changes for issue {{issueId}}.\nCheck for correctness, test coverage, and style compliance.\n",[18,848,849,854,859,864,869,874,878,882,887],{"__ignoreMap":173},[177,850,851],{"class":179,"line":180},[177,852,853],{"class":212},"\u003C!-- src\u002Fprompts\u002Fcode-review.md -->\n",[177,855,856],{"class":179,"line":209},[177,857,858],{"class":198},"---\n",[177,860,861],{"class":179,"line":216},[177,862,863],{"class":198},"args:\n",[177,865,866],{"class":179,"line":255},[177,867,868],{"class":198},"    - name: issueId\n",[177,870,871],{"class":179,"line":299},[177,872,873],{"class":198},"      required: true\n",[177,875,876],{"class":179,"line":309},[177,877,858],{"class":414},[177,879,880],{"class":179,"line":316},[177,881,313],{"emptyLinePlaceholder":312},[177,883,884],{"class":179,"line":326},[177,885,886],{"class":198},"Review the changes for issue {{issueId}}.\n",[177,888,889],{"class":179,"line":346},[177,890,891],{"class":198},"Check for correctness, test coverage, and style compliance.\n",[14,893,894,895,897,898,900],{},"Use ",[18,896,833],{}," when the instruction is static. Use ",[18,899,20],{}," when it needs live data or\nconditional structure.",[902,903,904],"style",{},"html pre.shiki code .srRes, html code.shiki .srRes{--shiki-default:#808080}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 .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}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 pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}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 .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 .sf2jR, html code.shiki .sf2jR{--shiki-default:#569CD6;--shiki-default-font-weight:bold}",{"title":173,"searchDepth":209,"depth":209,"links":906},[907,908,909,910,911,912,914],{"id":48,"depth":209,"text":49},{"id":146,"depth":209,"text":147},{"id":434,"depth":209,"text":435},{"id":514,"depth":209,"text":515},{"id":636,"depth":209,"text":637},{"id":774,"depth":209,"text":913},"Where .vue appears in an agent",{"id":830,"depth":209,"text":915},"The .md alternative","Axon uses .vue files in src\u002Fboot.vue, src\u002Fprompts\u002F, and src\u002Fprompts\u002Fcomponents\u002F\nas a template format for generating text. This is not a web application. There is no\nbrowser, no DOM, no hydration, no routing. The .vue file extension is reused because\nVue's template syntax is expressive enough to build data-driven prompts, and the existing\ntooling ecosystem (Volar, Prettier, syntax highlighting) works without configuration.","md",{},"\u002Fdocs\u002Fv2\u002Fconcepts\u002Fvuedown",{"title":5,"description":916},"docs\u002Fv2\u002Fconcepts\u002Fvuedown","-7H45CAHu0kTKoRh_9ECTIQDD5K3rz48OPpF25tgji0",1785671807714]