[{"data":1,"prerenderedAt":807},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fworkspace":3},{"id":4,"title":5,"body":6,"description":16,"extension":801,"meta":802,"navigation":658,"path":803,"seo":804,"stem":805,"__hash__":806},"docs\u002Fdocs\u002Fv2\u002Fworkspace\u002Findex.md","Workspace Agents",{"type":7,"value":8,"toc":792},"minimark",[9,13,17,25,28,155,160,166,173,181,368,379,383,389,410,413,417,431,435,442,483,496,500,597,600,604,607,699,770,773,777,785,788],[10,11,5],"h1",{"id":12},"workspace-agents",[14,15,16],"p",{},"Clone the repo. Open Axon. The agent already knows where you are.",[14,18,19,20,24],{},"Not because someone configured it. Because the team committed a ",[21,22,23],"code",{},".agents\u002F"," folder — tools\nthat call the project's APIs, prompts that hydrate sprint state, scripts that automate the\nworkflows senior engineers carry in their heads, knowledge files that encode the decisions\nthat would otherwise require a two-hour onboarding call.",[14,26,27],{},"A new teammate picks all of it up automatically. No setup. No documentation to find. No\none to ask.",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-bash shiki shiki-themes dark-plus","my-repo\u002F\n├── .agents\u002F\n│   ├── data\u002F\n│   │   └── knowledge\u002F  # architecture docs, contracts, runbooks\n│   ├── modules\u002F        # shared installed modules\n│   ├── prompts\u002F        # context templates — workspace:name\n│   ├── scripts\u002F        # team automations — workspace:name\n│   └── tools\u002F          # project-specific callables — workspace.*\n├── src\u002F\n└── package.json\n","bash","",[21,36,37,46,56,68,86,99,112,125,138,146],{"__ignoreMap":34},[38,39,42],"span",{"class":40,"line":41},"line",1,[38,43,45],{"class":44},"sCudf","my-repo\u002F\n",[38,47,49,52],{"class":40,"line":48},2,[38,50,51],{"class":44},"├──",[38,53,55],{"class":54},"sKc5r"," .agents\u002F\n",[38,57,59,62,65],{"class":40,"line":58},3,[38,60,61],{"class":44},"│",[38,63,64],{"class":54},"   ├──",[38,66,67],{"class":54}," data\u002F\n",[38,69,71,73,76,79,82],{"class":40,"line":70},4,[38,72,61],{"class":44},[38,74,75],{"class":54},"   │",[38,77,78],{"class":54},"   └──",[38,80,81],{"class":54}," knowledge\u002F",[38,83,85],{"class":84},"sOLPB","  # architecture docs, contracts, runbooks\n",[38,87,89,91,93,96],{"class":40,"line":88},5,[38,90,61],{"class":44},[38,92,64],{"class":54},[38,94,95],{"class":54}," modules\u002F",[38,97,98],{"class":84},"        # shared installed modules\n",[38,100,102,104,106,109],{"class":40,"line":101},6,[38,103,61],{"class":44},[38,105,64],{"class":54},[38,107,108],{"class":54}," prompts\u002F",[38,110,111],{"class":84},"        # context templates — workspace:name\n",[38,113,115,117,119,122],{"class":40,"line":114},7,[38,116,61],{"class":44},[38,118,64],{"class":54},[38,120,121],{"class":54}," scripts\u002F",[38,123,124],{"class":84},"        # team automations — workspace:name\n",[38,126,128,130,132,135],{"class":40,"line":127},8,[38,129,61],{"class":44},[38,131,78],{"class":54},[38,133,134],{"class":54}," tools\u002F",[38,136,137],{"class":84},"          # project-specific callables — workspace.*\n",[38,139,141,143],{"class":40,"line":140},9,[38,142,51],{"class":44},[38,144,145],{"class":54}," src\u002F\n",[38,147,149,152],{"class":40,"line":148},10,[38,150,151],{"class":44},"└──",[38,153,154],{"class":54}," package.json\n",[156,157,159],"h2",{"id":158},"what-this-actually-enables","What this actually enables",[14,161,162,163,165],{},"The institutional memory problem is hard. Knowledge accumulates in people's heads, degrades\nas people leave, and never makes it into the wiki — or if it does, nobody reads it. ",[21,164,23],{},"\nis the first mechanism that makes that knowledge executable rather than just documented.",[14,167,168,169,172],{},"The knowledge layer is underrated. Architecture decisions, API contracts, incident runbooks —\nin ",[21,170,171],{},"data\u002Fknowledge\u002F"," these aren't docs nobody reads. They're the agent's grounding context.\nWhen something breaks at 2am, the agent doesn't just know the runbook exists — it uses it.",[14,174,175,176,180],{},"The scripts layer is where it compounds. Tools and prompts are capabilities. Scripts are\n",[177,178,179],"strong",{},"workflows"," — the things senior engineers do that junior engineers can't yet:",[29,182,184],{"className":31,"code":183,"language":33,"meta":34,"style":34},".agents\u002F\n├── data\u002F\n│   └── knowledge\u002F\n│       ├── decisions\u002F\n│       ├── api-contracts.md\n│       └── architecture.md\n├── prompts\u002F\n│   ├── conventions.md  # codebase style and conventions\n│   ├── runbook.md      # incident response steps\n│   └── session.vue     # hydrates current sprint state\n├── scripts\u002F\n│   ├── close-plan.ts   # sprint close automation\n│   ├── scout.ts        # daily codebase scan\n│   └── triage.ts       # issue triage workflow\n└── tools\u002F\n    ├── deploy.ts       # deployment tooling for this project\n    ├── github.ts       # repo-specific GitHub helpers\n    └── kanban.ts       # project task management\n",[21,185,186,191,197,206,216,225,235,242,254,266,278,286,299,312,325,333,345,356],{"__ignoreMap":34},[38,187,188],{"class":40,"line":41},[38,189,190],{"class":44},".agents\u002F\n",[38,192,193,195],{"class":40,"line":48},[38,194,51],{"class":44},[38,196,67],{"class":54},[38,198,199,201,203],{"class":40,"line":58},[38,200,61],{"class":44},[38,202,78],{"class":54},[38,204,205],{"class":54}," knowledge\u002F\n",[38,207,208,210,213],{"class":40,"line":70},[38,209,61],{"class":44},[38,211,212],{"class":54},"       ├──",[38,214,215],{"class":54}," decisions\u002F\n",[38,217,218,220,222],{"class":40,"line":88},[38,219,61],{"class":44},[38,221,212],{"class":54},[38,223,224],{"class":54}," api-contracts.md\n",[38,226,227,229,232],{"class":40,"line":101},[38,228,61],{"class":44},[38,230,231],{"class":54},"       └──",[38,233,234],{"class":54}," architecture.md\n",[38,236,237,239],{"class":40,"line":114},[38,238,51],{"class":44},[38,240,241],{"class":54}," prompts\u002F\n",[38,243,244,246,248,251],{"class":40,"line":127},[38,245,61],{"class":44},[38,247,64],{"class":54},[38,249,250],{"class":54}," conventions.md",[38,252,253],{"class":84},"  # codebase style and conventions\n",[38,255,256,258,260,263],{"class":40,"line":140},[38,257,61],{"class":44},[38,259,64],{"class":54},[38,261,262],{"class":54}," runbook.md",[38,264,265],{"class":84},"      # incident response steps\n",[38,267,268,270,272,275],{"class":40,"line":148},[38,269,61],{"class":44},[38,271,78],{"class":54},[38,273,274],{"class":54}," session.vue",[38,276,277],{"class":84},"     # hydrates current sprint state\n",[38,279,281,283],{"class":40,"line":280},11,[38,282,51],{"class":44},[38,284,285],{"class":54}," scripts\u002F\n",[38,287,289,291,293,296],{"class":40,"line":288},12,[38,290,61],{"class":44},[38,292,64],{"class":54},[38,294,295],{"class":54}," close-plan.ts",[38,297,298],{"class":84},"   # sprint close automation\n",[38,300,302,304,306,309],{"class":40,"line":301},13,[38,303,61],{"class":44},[38,305,64],{"class":54},[38,307,308],{"class":54}," scout.ts",[38,310,311],{"class":84},"        # daily codebase scan\n",[38,313,315,317,319,322],{"class":40,"line":314},14,[38,316,61],{"class":44},[38,318,78],{"class":54},[38,320,321],{"class":54}," triage.ts",[38,323,324],{"class":84},"       # issue triage workflow\n",[38,326,328,330],{"class":40,"line":327},15,[38,329,151],{"class":44},[38,331,332],{"class":54}," tools\u002F\n",[38,334,336,339,342],{"class":40,"line":335},16,[38,337,338],{"class":44},"    ├──",[38,340,341],{"class":54}," deploy.ts",[38,343,344],{"class":84},"       # deployment tooling for this project\n",[38,346,348,350,353],{"class":40,"line":347},17,[38,349,338],{"class":44},[38,351,352],{"class":54}," github.ts",[38,354,355],{"class":84},"       # repo-specific GitHub helpers\n",[38,357,359,362,365],{"class":40,"line":358},18,[38,360,361],{"class":44},"    └──",[38,363,364],{"class":54}," kanban.ts",[38,366,367],{"class":84},"       # project task management\n",[14,369,370,371,374,375,378],{},"Commit ",[21,372,373],{},"triage.ts"," to ",[21,376,377],{},".agents\u002Fscripts\u002F"," and triage is now team infrastructure. Anyone can\nrun it. The agent can run it. It runs the same way every time.",[156,380,382],{"id":381},"it-versions-with-the-codebase","It versions with the codebase",[14,384,385,386,388],{},"This is the structural insight. ",[21,387,23],{}," is committed source. That means:",[390,391,392,404,407],"ul",{},[393,394,395,396,399,400,403],"li",{},"The ",[21,397,398],{},"main"," branch agent knows about production. The ",[21,401,402],{},"feature\u002Fpayments"," branch agent knows\nabout the payments work in progress.",[393,405,406],{},"A PR can ship a new workspace script alongside the feature it automates. The automation\nand the code land together, reviewed together, rolled back together.",[393,408,409],{},"When a convention changes, the prompt that encodes it changes in the same commit.",[14,411,412],{},"There's no separate \"update the agent\" step. The agent stays current because it's part of\nthe codebase.",[156,414,416],{"id":415},"discovery","Discovery",[14,418,419,420,422,423,426,427,430],{},"Axon walks upward from the agent's working directory until it finds a ",[21,421,23],{}," folder.\nThe first one found is used. This mirrors how ",[21,424,425],{},"tsconfig.json"," and ",[21,428,429],{},"package.json"," resolution\nworks — no path to configure, no registration step. Run an agent from anywhere inside the\nrepo and it finds the workspace layer automatically.",[156,432,434],{"id":433},"opting-in","Opting in",[14,436,437,438,441],{},"Workspace resources are not loaded automatically. Each agent opts in explicitly in\n",[21,439,440],{},"axon.config.ts",":",[29,443,447],{"className":444,"code":445,"language":446,"meta":34,"style":34},"language-ts shiki shiki-themes dark-plus","export default defineAgent({\n    workspace: true,\n})\n","ts",[21,448,449,465,478],{"__ignoreMap":34},[38,450,451,455,458,461],{"class":40,"line":41},[38,452,454],{"class":453},"sYbnZ","export",[38,456,457],{"class":453}," default",[38,459,460],{"class":44}," defineAgent",[38,462,464],{"class":463},"sTNBD","({\n",[38,466,467,471,475],{"class":40,"line":48},[38,468,470],{"class":469},"s3F5K","    workspace:",[38,472,474],{"class":473},"scz_3"," true",[38,476,477],{"class":463},",\n",[38,479,480],{"class":40,"line":58},[38,481,482],{"class":463},"})\n",[14,484,485,486,489,490,492,493,495],{},"With ",[21,487,488],{},"workspace: true",", the agent picks up everything in ",[21,491,23],{},". If no ",[21,494,23],{},"\nfolder exists, the flag is silently ignored. If the folder exists but an agent doesn't set\nthe flag, nothing is loaded — the agent is unaffected.",[156,497,499],{"id":498},"what-gets-loaded","What gets loaded",[501,502,503,519],"table",{},[504,505,506],"thead",{},[507,508,509,513,516],"tr",{},[510,511,512],"th",{},"Resource",[510,514,515],{},"Namespace",[510,517,518],{},"What it means",[520,521,522,538,556,573,586],"tbody",{},[507,523,524,530,535],{},[525,526,527],"td",{},[21,528,529],{},"tools\u002F",[525,531,532],{},[21,533,534],{},"workspace.*",[525,536,537],{},"Exported functions callable by the agent and in scripts",[507,539,540,545,550],{},[525,541,542],{},[21,543,544],{},"prompts\u002F",[525,546,547],{},[21,548,549],{},"workspace:name",[525,551,552,553],{},"Context templates loadable via ",[21,554,555],{},"axon.prompt(\"workspace:triage\")",[507,557,558,563,567],{},[525,559,560],{},[21,561,562],{},"scripts\u002F",[525,564,565],{},[21,566,549],{},[525,568,569,570],{},"Automations runnable via ",[21,571,572],{},"axon run workspace:scout",[507,574,575,580,583],{},[525,576,577],{},[21,578,579],{},"modules\u002F",[525,581,582],{},"—",[525,584,585],{},"Module source loaded and registered as if agent-installed",[507,587,588,592,594],{},[525,589,590],{},[21,591,171],{},[525,593,582],{},[525,595,596],{},"Files on disk, readable by the agent when directed",[14,598,599],{},"Nothing is injected into context automatically. Tools become callable. Prompts and scripts\nbecome invocable by name. Knowledge files sit on disk for the agent to read when a prompt\nor script points it there.",[156,601,603],{"id":602},"namespacing","Namespacing",[14,605,606],{},"Workspace capabilities are namespaced to prevent collisions with the agent's own source.",[29,608,610],{"className":444,"code":609,"language":446,"meta":34,"style":34},"\u002F\u002F agent's own tool\nconst prs = await axon.tools.github.listOpenPrs()\n\n\u002F\u002F workspace tool — same name, different namespace\nconst tasks = await axon.tools.workspace.kanban.list()\n",[21,611,612,617,654,660,665],{"__ignoreMap":34},[38,613,614],{"class":40,"line":41},[38,615,616],{"class":84},"\u002F\u002F agent's own tool\n",[38,618,619,622,626,629,632,635,638,641,643,646,648,651],{"class":40,"line":48},[38,620,621],{"class":473},"const",[38,623,625],{"class":624},"s9McN"," prs",[38,627,628],{"class":463}," = ",[38,630,631],{"class":453},"await",[38,633,634],{"class":469}," axon",[38,636,637],{"class":463},".",[38,639,640],{"class":469},"tools",[38,642,637],{"class":463},[38,644,645],{"class":469},"github",[38,647,637],{"class":463},[38,649,650],{"class":44},"listOpenPrs",[38,652,653],{"class":463},"()\n",[38,655,656],{"class":40,"line":58},[38,657,659],{"emptyLinePlaceholder":658},true,"\n",[38,661,662],{"class":40,"line":70},[38,663,664],{"class":84},"\u002F\u002F workspace tool — same name, different namespace\n",[38,666,667,669,672,674,676,678,680,682,684,687,689,692,694,697],{"class":40,"line":88},[38,668,621],{"class":473},[38,670,671],{"class":624}," tasks",[38,673,628],{"class":463},[38,675,631],{"class":453},[38,677,634],{"class":469},[38,679,637],{"class":463},[38,681,640],{"class":469},[38,683,637],{"class":463},[38,685,686],{"class":469},"workspace",[38,688,637],{"class":463},[38,690,691],{"class":469},"kanban",[38,693,637],{"class":463},[38,695,696],{"class":44},"list",[38,698,653],{"class":463},[29,700,702],{"className":444,"code":701,"language":446,"meta":34,"style":34},"\u002F\u002F agent's own prompt\nconst agentContext     = await axon.prompt(\"session\")\n\n\u002F\u002F workspace prompt\nconst workspaceContext = await axon.prompt(\"workspace:session\")\n",[21,703,704,709,737,741,746],{"__ignoreMap":34},[38,705,706],{"class":40,"line":41},[38,707,708],{"class":84},"\u002F\u002F agent's own prompt\n",[38,710,711,713,716,719,721,723,725,728,731,734],{"class":40,"line":48},[38,712,621],{"class":473},[38,714,715],{"class":624}," agentContext",[38,717,718],{"class":463},"     = ",[38,720,631],{"class":453},[38,722,634],{"class":469},[38,724,637],{"class":463},[38,726,727],{"class":44},"prompt",[38,729,730],{"class":463},"(",[38,732,733],{"class":54},"\"session\"",[38,735,736],{"class":463},")\n",[38,738,739],{"class":40,"line":58},[38,740,659],{"emptyLinePlaceholder":658},[38,742,743],{"class":40,"line":70},[38,744,745],{"class":84},"\u002F\u002F workspace prompt\n",[38,747,748,750,753,755,757,759,761,763,765,768],{"class":40,"line":88},[38,749,621],{"class":473},[38,751,752],{"class":624}," workspaceContext",[38,754,628],{"class":463},[38,756,631],{"class":453},[38,758,634],{"class":469},[38,760,637],{"class":463},[38,762,727],{"class":44},[38,764,730],{"class":463},[38,766,767],{"class":54},"\"workspace:session\"",[38,769,736],{"class":463},[14,771,772],{},"An agent's own capabilities always take precedence. Workspace capabilities extend the\nsurface without overwriting anything.",[156,774,776],{"id":775},"what-agents-is-not","What .agents\u002F is not",[14,778,779,781,782,784],{},[21,780,23],{}," has no ",[21,783,440],{},". It is not an agent. It has no identity, no engine\nconfiguration, no policy, no sessions, no deployment. The parent agent remains fully\nauthoritative over all of those things.",[14,786,787],{},"A workspace tool runs inside the parent agent's capsule, subject to the parent agent's\npolicy. If the base policy doesn't allow network calls to a particular host, a workspace\ntool that tries to reach it will be blocked — exactly the same as if the agent's own tool\ntried it. The workspace layer contributes capabilities; it never gains authority.",[789,790,791],"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 .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 .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}",{"title":34,"searchDepth":48,"depth":48,"links":793},[794,795,796,797,798,799,800],{"id":158,"depth":48,"text":159},{"id":381,"depth":48,"text":382},{"id":415,"depth":48,"text":416},{"id":433,"depth":48,"text":434},{"id":498,"depth":48,"text":499},{"id":602,"depth":48,"text":603},{"id":775,"depth":48,"text":776},"md",{},"\u002Fdocs\u002Fv2\u002Fworkspace",{"title":5,"description":16},"docs\u002Fv2\u002Fworkspace\u002Findex","XpkYT9S0M-Uv4UStTlLhBFAjwwi9s3GnCGWyROEPi-M",1785671804879]