[{"data":1,"prerenderedAt":1210},["ShallowReactive",2],{"navigation_docs":3,"-docs-under-the-hood-ai-and-agents":493,"-docs-under-the-hood-ai-and-agents-surround":1205},[4,46,135,218,257,292,355,377,420],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":45},"Getting Started","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",[10,15,20,25,30,35,40],{"title":11,"path":12,"stem":13,"icon":14},"What is Heximon?","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F01.getting-started\u002F02.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick Start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002F01.getting-started\u002F03.quick-start","i-lucide-zap",{"title":26,"path":27,"stem":28,"icon":29},"Core Concepts","\u002Fdocs\u002Fgetting-started\u002Fcore-concepts","docs\u002F01.getting-started\u002F04.core-concepts","i-lucide-shapes",{"title":31,"path":32,"stem":33,"icon":34},"Examples","\u002Fdocs\u002Fgetting-started\u002Fexamples","docs\u002F01.getting-started\u002F05.examples","i-lucide-library",{"title":36,"path":37,"stem":38,"icon":39},"Where Next?","\u002Fdocs\u002Fgetting-started\u002Fwhere-next","docs\u002F01.getting-started\u002F06.where-next","i-lucide-signpost",{"title":41,"path":42,"stem":43,"icon":44},"Troubleshooting","\u002Fdocs\u002Fgetting-started\u002Ftroubleshooting","docs\u002F01.getting-started\u002F07.troubleshooting","i-lucide-life-buoy",false,{"title":47,"icon":48,"path":49,"stem":50,"children":51,"page":45},"Essentials","i-lucide-boxes","\u002Fdocs\u002Fessentials","docs\u002F02.essentials",[52,56,61,66,71,76,81,86,91,96,101,105,110,115,120,125,130],{"title":53,"path":54,"stem":55,"icon":48},"Modules & DI","\u002Fdocs\u002Fessentials\u002Fmodules-and-di","docs\u002F02.essentials\u002F01.modules-and-di",{"title":57,"path":58,"stem":59,"icon":60},"Controllers","\u002Fdocs\u002Fessentials\u002Fcontrollers","docs\u002F02.essentials\u002F02.controllers","i-lucide-route",{"title":62,"path":63,"stem":64,"icon":65},"Validation & DTOs","\u002Fdocs\u002Fessentials\u002Fvalidation","docs\u002F02.essentials\u002F03.validation","i-lucide-shield-check",{"title":67,"path":68,"stem":69,"icon":70},"Contracts","\u002Fdocs\u002Fessentials\u002Fcontracts","docs\u002F02.essentials\u002F04.contracts","i-lucide-file-signature",{"title":72,"path":73,"stem":74,"icon":75},"REST Client","\u002Fdocs\u002Fessentials\u002Fclient","docs\u002F02.essentials\u002F05.client","i-lucide-plug",{"title":77,"path":78,"stem":79,"icon":80},"Database","\u002Fdocs\u002Fessentials\u002Fdatabase","docs\u002F02.essentials\u002F06.database","i-lucide-database",{"title":82,"path":83,"stem":84,"icon":85},"Drizzle ORM","\u002Fdocs\u002Fessentials\u002Fdrizzle","docs\u002F02.essentials\u002F07.drizzle","i-lucide-database-zap",{"title":87,"path":88,"stem":89,"icon":90},"Persistence & Transactions","\u002Fdocs\u002Fessentials\u002Fpersistence","docs\u002F02.essentials\u002F08.persistence","i-lucide-database-backup",{"title":92,"path":93,"stem":94,"icon":95},"Migrations","\u002Fdocs\u002Fessentials\u002Fmigrations","docs\u002F02.essentials\u002F09.migrations","i-lucide-git-branch",{"title":97,"path":98,"stem":99,"icon":100},"Authentication","\u002Fdocs\u002Fessentials\u002Fauthentication","docs\u002F02.essentials\u002F10.authentication","i-lucide-key-round",{"title":102,"path":103,"stem":104,"icon":65},"Permissions & scopes","\u002Fdocs\u002Fessentials\u002Fpermissions","docs\u002F02.essentials\u002F11.permissions",{"title":106,"path":107,"stem":108,"icon":109},"Error Handling","\u002Fdocs\u002Fessentials\u002Ferrors","docs\u002F02.essentials\u002F12.errors","i-lucide-triangle-alert",{"title":111,"path":112,"stem":113,"icon":114},"Testing a Heximon App","\u002Fdocs\u002Fessentials\u002Ftesting","docs\u002F02.essentials\u002F13.testing","i-lucide-flask-conical",{"title":116,"path":117,"stem":118,"icon":119},"Test app harness","\u002Fdocs\u002Fessentials\u002Fcreatetestapp","docs\u002F02.essentials\u002F14.createtestapp","i-lucide-test-tube",{"title":121,"path":122,"stem":123,"icon":124},"Logging & Observability","\u002Fdocs\u002Fessentials\u002Flogging","docs\u002F02.essentials\u002F17.logging","i-lucide-scroll-text",{"title":126,"path":127,"stem":128,"icon":129},"Context & Lifecycle","\u002Fdocs\u002Fessentials\u002Fcontext-and-lifecycle","docs\u002F02.essentials\u002F18.context-and-lifecycle","i-lucide-radio",{"title":131,"path":132,"stem":133,"icon":134},"Project Structure","\u002Fdocs\u002Fessentials\u002Fproject-structure","docs\u002F02.essentials\u002F19.project-structure","i-lucide-folder-tree",{"title":136,"icon":137,"path":138,"stem":139,"children":140,"page":45},"Capabilities","i-lucide-sparkles","\u002Fdocs\u002Fcapabilities","docs\u002F03.capabilities",[141,145,150,155,160,164,169,174,179,184,188,193,198,203,208,213],{"title":142,"path":143,"stem":144,"icon":137},"Overview","\u002Fdocs\u002Fcapabilities\u002Foverview","docs\u002F03.capabilities\u002F01.overview",{"title":146,"path":147,"stem":148,"icon":149},"Events","\u002Fdocs\u002Fcapabilities\u002Fevents","docs\u002F03.capabilities\u002F02.events","i-lucide-radio-tower",{"title":151,"path":152,"stem":153,"icon":154},"Queue","\u002Fdocs\u002Fcapabilities\u002Fbackground-jobs","docs\u002F03.capabilities\u002F03.background-jobs","i-lucide-list-ordered",{"title":156,"path":157,"stem":158,"icon":159},"Scheduled Work","\u002Fdocs\u002Fcapabilities\u002Fscheduled-jobs","docs\u002F03.capabilities\u002F04.scheduled-jobs","i-lucide-clock",{"title":161,"path":162,"stem":163,"icon":85},"Caching","\u002Fdocs\u002Fcapabilities\u002Fcaching","docs\u002F03.capabilities\u002F05.caching",{"title":165,"path":166,"stem":167,"icon":168},"Key\u002FValue Storage","\u002Fdocs\u002Fcapabilities\u002Fkey-value","docs\u002F03.capabilities\u002F06.key-value","i-lucide-hard-drive",{"title":170,"path":171,"stem":172,"icon":173},"Blob Storage","\u002Fdocs\u002Fcapabilities\u002Fblob","docs\u002F03.capabilities\u002F07.blob","i-lucide-folder-open",{"title":175,"path":176,"stem":177,"icon":178},"Health & Readiness","\u002Fdocs\u002Fcapabilities\u002Fhealth","docs\u002F03.capabilities\u002F08.health","i-lucide-heart-pulse",{"title":180,"path":181,"stem":182,"icon":183},"Notifications","\u002Fdocs\u002Fcapabilities\u002Fnotifications","docs\u002F03.capabilities\u002F09.notifications","i-lucide-mail",{"title":185,"path":186,"stem":187,"icon":65},"Idempotency","\u002Fdocs\u002Fcapabilities\u002Fidempotency","docs\u002F03.capabilities\u002F10.idempotency",{"title":189,"path":190,"stem":191,"icon":192},"Security Hardening","\u002Fdocs\u002Fcapabilities\u002Fsecurity","docs\u002F03.capabilities\u002F11.security","i-lucide-shield",{"title":194,"path":195,"stem":196,"icon":197},"Observability & Tracing","\u002Fdocs\u002Fcapabilities\u002Fobservability","docs\u002F03.capabilities\u002F12.observability","i-lucide-activity",{"title":199,"path":200,"stem":201,"icon":202},"OpenAPI","\u002Fdocs\u002Fcapabilities\u002Fopenapi","docs\u002F03.capabilities\u002F13.openapi","i-lucide-book-marked",{"title":204,"path":205,"stem":206,"icon":207},"MCP Server","\u002Fdocs\u002Fcapabilities\u002Fmcp","docs\u002F03.capabilities\u002F14.mcp","i-lucide-bot",{"title":209,"path":210,"stem":211,"icon":212},"Schema DTOs","\u002Fdocs\u002Fcapabilities\u002Fschema","docs\u002F03.capabilities\u002F15.schema","i-lucide-file-json",{"title":214,"path":215,"stem":216,"icon":217},"Branded IDs","\u002Fdocs\u002Fcapabilities\u002Fbranded-ids","docs\u002F03.capabilities\u002F16.branded-ids","i-lucide-tag",{"title":219,"icon":220,"path":221,"stem":222,"children":223,"page":45},"Architecture","i-lucide-building","\u002Fdocs\u002Farchitecture","docs\u002F04.architecture",[224,227,232,237,242,247,252],{"title":142,"path":225,"stem":226,"icon":220},"\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F04.architecture\u002F01.overview",{"title":228,"path":229,"stem":230,"icon":231},"Domain-Driven Design","\u002Fdocs\u002Farchitecture\u002Fddd","docs\u002F04.architecture\u002F02.ddd","i-lucide-hexagon",{"title":233,"path":234,"stem":235,"icon":236},"CQRS","\u002Fdocs\u002Farchitecture\u002Fcqrs","docs\u002F04.architecture\u002F03.cqrs","i-lucide-split",{"title":238,"path":239,"stem":240,"icon":241},"Repository Pattern","\u002Fdocs\u002Farchitecture\u002Frepository-pattern","docs\u002F04.architecture\u002F04.repository-pattern","i-lucide-archive",{"title":243,"path":244,"stem":245,"icon":246},"Integration Events","\u002Fdocs\u002Farchitecture\u002Fintegration-events","docs\u002F04.architecture\u002F05.integration-events","i-lucide-send-horizontal",{"title":248,"path":249,"stem":250,"icon":251},"Saga Orchestration","\u002Fdocs\u002Farchitecture\u002Fsagas","docs\u002F04.architecture\u002F06.sagas","i-lucide-hourglass",{"title":253,"path":254,"stem":255,"icon":256},"Durable Workflows","\u002Fdocs\u002Farchitecture\u002Fworkflows","docs\u002F04.architecture\u002F07.workflows","i-lucide-workflow",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":45},"Realtime","i-lucide-cable","\u002Fdocs\u002Frealtime","docs\u002F05.realtime",[263,266,270,274,279,284,288],{"title":142,"path":264,"stem":265,"icon":259},"\u002Fdocs\u002Frealtime\u002Foverview","docs\u002F05.realtime\u002F01.overview",{"title":267,"path":268,"stem":269,"icon":129},"WebSockets","\u002Fdocs\u002Frealtime\u002Fwebsockets","docs\u002F05.realtime\u002F02.websockets",{"title":271,"path":272,"stem":273,"icon":70},"WebSocket Contracts","\u002Fdocs\u002Frealtime\u002Fwebsocket-contracts","docs\u002F05.realtime\u002F03.websocket-contracts",{"title":275,"path":276,"stem":277,"icon":278},"Server-Sent Events","\u002Fdocs\u002Frealtime\u002Fserver-sent-events","docs\u002F05.realtime\u002F04.server-sent-events","i-lucide-rss",{"title":280,"path":281,"stem":282,"icon":283},"Typed Clients","\u002Fdocs\u002Frealtime\u002Ftyped-clients","docs\u002F05.realtime\u002F05.typed-clients","i-lucide-plug-zap",{"title":285,"path":286,"stem":287,"icon":259},"AsyncAPI","\u002Fdocs\u002Frealtime\u002Fasyncapi","docs\u002F05.realtime\u002F06.asyncapi",{"title":289,"path":290,"stem":291,"icon":80},"Durable Objects","\u002Fdocs\u002Frealtime\u002Fdurable-objects","docs\u002F05.realtime\u002F07.durable-objects",{"title":293,"icon":294,"path":295,"stem":296,"children":297,"page":45},"Deploy","i-lucide-cloud-upload","\u002Fdocs\u002Fdeploy","docs\u002F06.deploy",[298,301,306,311,316,321,326,331,336,341,345,350],{"title":142,"path":299,"stem":300,"icon":6},"\u002Fdocs\u002Fdeploy\u002Foverview","docs\u002F06.deploy\u002F01.overview",{"title":302,"path":303,"stem":304,"icon":305},"Node","\u002Fdocs\u002Fdeploy\u002Fnode","docs\u002F06.deploy\u002F02.node","la:node-js",{"title":307,"path":308,"stem":309,"icon":310},"Cloudflare","\u002Fdocs\u002Fdeploy\u002Fcloudflare","docs\u002F06.deploy\u002F03.cloudflare","simple-icons:cloudflare",{"title":312,"path":313,"stem":314,"icon":315},"Vercel","\u002Fdocs\u002Fdeploy\u002Fvercel","docs\u002F06.deploy\u002F04.vercel","ri:vercel-fill",{"title":317,"path":318,"stem":319,"icon":320},"Netlify","\u002Fdocs\u002Fdeploy\u002Fnetlify","docs\u002F06.deploy\u002F05.netlify","i-simple-icons-netlify",{"title":322,"path":323,"stem":324,"icon":325},"AWS Lambda","\u002Fdocs\u002Fdeploy\u002Faws-lambda","docs\u002F06.deploy\u002F06.aws-lambda","hugeicons:aws-lambda",{"title":327,"path":328,"stem":329,"icon":330},"Deno Deploy","\u002Fdocs\u002Fdeploy\u002Fdeno-deploy","docs\u002F06.deploy\u002F07.deno-deploy","simple-icons:denodeploy",{"title":332,"path":333,"stem":334,"icon":335},"Nitro","\u002Fdocs\u002Fdeploy\u002Fnitro","docs\u002F06.deploy\u002F08.nitro","i-unjs-nitro",{"title":337,"path":338,"stem":339,"icon":340},"Nuxt","\u002Fdocs\u002Fdeploy\u002Fnuxt","docs\u002F06.deploy\u002F09.nuxt","i-devicon-nuxt",{"title":342,"path":343,"stem":344,"icon":236},"Mixed-runtime split","\u002Fdocs\u002Fdeploy\u002Fmixed-runtime-split","docs\u002F06.deploy\u002F10.mixed-runtime-split",{"title":346,"path":347,"stem":348,"icon":349},"Hosts","\u002Fdocs\u002Fdeploy\u002Fhosts","docs\u002F06.deploy\u002F11.hosts","i-lucide-map",{"title":351,"path":352,"stem":353,"icon":354},"Cross-service events","\u002Fdocs\u002Fdeploy\u002Fcross-service-events","docs\u002F06.deploy\u002F12.cross-service-events","i-lucide-network",{"title":356,"icon":357,"path":358,"stem":359,"children":360,"page":45},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F07.cli",[361,365,369,373],{"title":362,"path":363,"stem":364,"icon":357},"The heximon CLI","\u002Fdocs\u002Fcli\u002Foverview","docs\u002F07.cli\u002F01.overview",{"title":366,"path":367,"stem":368,"icon":137},"Create a New App","\u002Fdocs\u002Fcli\u002Fcreate","docs\u002F07.cli\u002F02.create",{"title":370,"path":371,"stem":372,"icon":95},"Migrations from the CLI","\u002Fdocs\u002Fcli\u002Fmigrations","docs\u002F07.cli\u002F03.migrations",{"title":374,"path":375,"stem":376,"icon":6},"Deploying a Heximon app","\u002Fdocs\u002Fcli\u002Fdeploy","docs\u002F07.cli\u002F04.deploy",{"title":378,"icon":379,"path":380,"stem":381,"children":382,"page":45},"Under the Hood","i-lucide-wrench","\u002Fdocs\u002Funder-the-hood","docs\u002F08.under-the-hood",[383,388,393,397,402,407,411,415],{"title":384,"path":385,"stem":386,"icon":387},"How the Compiler Works","\u002Fdocs\u002Funder-the-hood\u002Fhow-the-compiler-works","docs\u002F08.under-the-hood\u002F01.how-the-compiler-works","i-lucide-cog",{"title":389,"path":390,"stem":391,"icon":392},"Compiler","\u002Fdocs\u002Funder-the-hood\u002Fextending-the-compiler","docs\u002F08.under-the-hood\u002F02.extending-the-compiler","i-lucide-cpu",{"title":394,"path":395,"stem":396,"icon":357},"Compiler Diagnostics","\u002Fdocs\u002Funder-the-hood\u002Fcompiler-diagnostics","docs\u002F08.under-the-hood\u002F03.compiler-diagnostics",{"title":398,"path":399,"stem":400,"icon":401},"Library Mode","\u002Fdocs\u002Funder-the-hood\u002Flibrary-mode","docs\u002F08.under-the-hood\u002F04.library-mode","i-lucide-package",{"title":403,"path":404,"stem":405,"icon":406},"Other bundlers","\u002Fdocs\u002Funder-the-hood\u002Falternate-bundlers","docs\u002F08.under-the-hood\u002F05.alternate-bundlers","i-lucide-blocks",{"title":408,"path":409,"stem":410,"icon":401},"Packages","\u002Fdocs\u002Funder-the-hood\u002Fpackages","docs\u002F08.under-the-hood\u002F06.packages",{"title":412,"path":413,"stem":414,"icon":207},"AI Skills","\u002Fdocs\u002Funder-the-hood\u002Fai-and-agents","docs\u002F08.under-the-hood\u002F07.ai-and-agents",{"title":416,"path":417,"stem":418,"icon":419},"Advanced DI","\u002Fdocs\u002Funder-the-hood\u002Fadvanced-di","docs\u002F08.under-the-hood\u002F08.advanced-di","i-lucide-git-fork",{"title":421,"icon":422,"path":423,"stem":424,"children":425,"page":45},"Recipes","i-lucide-book-open-check","\u002Fdocs\u002Frecipes","docs\u002F09.recipes",[426,431,436,440,444,448,452,456,460,465,469,474,479,484,488],{"title":427,"path":428,"stem":429,"icon":430},"Send an Email","\u002Fdocs\u002Frecipes\u002Fsend-an-email","docs\u002F09.recipes\u002F01.send-an-email","i-lucide-send",{"title":432,"path":433,"stem":434,"icon":435},"Upload a File","\u002Fdocs\u002Frecipes\u002Fupload-a-file","docs\u002F09.recipes\u002F02.upload-a-file","i-lucide-upload",{"title":437,"path":438,"stem":439,"icon":24},"Cache an Expensive Call","\u002Fdocs\u002Frecipes\u002Fcache-an-expensive-call","docs\u002F09.recipes\u002F03.cache-an-expensive-call",{"title":441,"path":442,"stem":443,"icon":154},"Paginate a List","\u002Fdocs\u002Frecipes\u002Fpaginate-a-list","docs\u002F09.recipes\u002F04.paginate-a-list",{"title":445,"path":446,"stem":447,"icon":65},"Protect Admin Routes","\u002Fdocs\u002Frecipes\u002Fprotect-admin-routes","docs\u002F09.recipes\u002F05.protect-admin-routes",{"title":449,"path":450,"stem":451,"icon":178},"Health Probes and a Nightly Job","\u002Fdocs\u002Frecipes\u002Fhealth-probes-and-a-nightly-job","docs\u002F09.recipes\u002F06.health-probes-and-a-nightly-job",{"title":453,"path":454,"stem":455,"icon":80},"Build a CRUD API","\u002Fdocs\u002Frecipes\u002Fcrud-api","docs\u002F09.recipes\u002F07.crud-api",{"title":457,"path":458,"stem":459,"icon":100},"Add Authentication","\u002Fdocs\u002Frecipes\u002Fadd-authentication","docs\u002F09.recipes\u002F08.add-authentication",{"title":461,"path":462,"stem":463,"icon":464},"Background Jobs","\u002Fdocs\u002Frecipes\u002Fbackground-jobs","docs\u002F09.recipes\u002F09.background-jobs","i-lucide-timer",{"title":466,"path":467,"stem":468,"icon":149},"Decouple Features with Events","\u002Fdocs\u002Frecipes\u002Fevent-driven-module","docs\u002F09.recipes\u002F10.event-driven-module",{"title":470,"path":471,"stem":472,"icon":473},"Build a DDD Aggregate","\u002Fdocs\u002Frecipes\u002Fddd-aggregate","docs\u002F09.recipes\u002F11.ddd-aggregate","i-lucide-box",{"title":475,"path":476,"stem":477,"icon":478},"Publish a Feature Package","\u002Fdocs\u002Frecipes\u002Ffeature-package","docs\u002F09.recipes\u002F12.feature-package","i-lucide-package-open",{"title":480,"path":481,"stem":482,"icon":483},"Reliable Integration Events","\u002Fdocs\u002Frecipes\u002Freliable-integration-events","docs\u002F09.recipes\u002F13.reliable-integration-events","i-lucide-inbox",{"title":485,"path":486,"stem":487,"icon":95},"Reactive Choreography","\u002Fdocs\u002Frecipes\u002Freactive-choreography","docs\u002F09.recipes\u002F14.reactive-choreography",{"title":489,"path":490,"stem":491,"icon":492},"Build a Production CRUD API","\u002Fdocs\u002Frecipes\u002Fproduction-crud-api","docs\u002F09.recipes\u002F15.production-crud-api","i-lucide-layers",{"id":494,"title":412,"body":495,"description":1198,"extension":1199,"links":1200,"meta":1201,"navigation":1202,"path":413,"seo":1203,"stem":414,"__hash__":1204},"docs\u002Fdocs\u002F08.under-the-hood\u002F07.ai-and-agents.md",{"type":496,"value":497,"toc":1190},"minimark",[498,507,512,529,532,535,538,640,650,1024,1028,1034,1054,1060,1066,1093,1097,1108,1140,1161,1165,1186],[499,500,501,502,506],"p",{},"Heximon ships an ",[503,504,505],"strong",{},"Agent Skill"," — a self-contained reference that teaches AI coding assistants how to\nbuild Heximon apps correctly, so they don't reach for a decorator.",[508,509,511],"h2",{"id":510},"why-a-skill-at-all","Why a skill at all",[499,513,514,515,519,520,523,524,528],{},"Heximon doesn't look like most TypeScript backends an LLM has seen. There are no decorators, no injection\ntokens, and no runtime DI container. A class becomes part of the app by being listed in a module's config\nand recognized by the concept base it ",[516,517,518],"code",{},"extends"," or ",[516,521,522],{},"implements","; its constructor parameters ",[525,526,527],"em",{},"are"," its\ndependencies.",[499,530,531],{},"An assistant answering from generic priors will confidently reach for decorator syntax — annotations\nHeximon rejects at compile time.",[499,533,534],{},"The skill closes that gap: it encodes the invariants, the package map, and the authoring idioms so a\nskill-aware agent generates Heximon-correct code from the first try instead of decorator-shaped guesses.",[499,536,537],{},"Without the skill, an unprimed agent reaches for the decorator API it's seen a thousand times — and Heximon\nrejects it at build time:",[539,540,545],"pre",{"className":541,"code":542,"language":543,"meta":544,"style":544},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F what an unprimed agent writes — rejected at build: no decorators at all\n@Controller(\"\u002Fusers\")\nexport class UsersController {\n  @Get(\"\u002F:id\")\n  findOne() {}\n}\n","ts","",[516,546,547,556,583,601,621,634],{"__ignoreMap":544},[548,549,552],"span",{"class":550,"line":551},"line",1,[548,553,555],{"class":554},"sHwdD","\u002F\u002F what an unprimed agent writes — rejected at build: no decorators at all\n",[548,557,559,563,567,571,574,578,580],{"class":550,"line":558},2,[548,560,562],{"class":561},"sMK4o","@",[548,564,566],{"class":565},"s2Zo4","Controller",[548,568,570],{"class":569},"sTEyZ","(",[548,572,573],{"class":561},"\"",[548,575,577],{"class":576},"sfazB","\u002Fusers",[548,579,573],{"class":561},[548,581,582],{"class":569},")\n",[548,584,586,590,594,598],{"class":550,"line":585},3,[548,587,589],{"class":588},"s7zQu","export",[548,591,593],{"class":592},"spNyl"," class",[548,595,597],{"class":596},"sBMFI"," UsersController",[548,599,600],{"class":561}," {\n",[548,602,604,607,610,612,614,617,619],{"class":550,"line":603},4,[548,605,606],{"class":561},"  @",[548,608,609],{"class":565},"Get",[548,611,570],{"class":569},[548,613,573],{"class":561},[548,615,616],{"class":576},"\u002F:id",[548,618,573],{"class":561},[548,620,582],{"class":569},[548,622,624,628,631],{"class":550,"line":623},5,[548,625,627],{"class":626},"swJcz","  findOne",[548,629,630],{"class":561},"()",[548,632,633],{"class":561}," {}\n",[548,635,637],{"class":550,"line":636},6,[548,638,639],{"class":561},"}\n",[499,641,642,643,645,646,649],{},"With the skill installed, the same request produces the ",[516,644,522],{}," form the compiler actually reads —\nthis is the real controller from ",[516,647,648],{},"examples\u002Fladder\u002FL01-minimal\u002Fsrc\u002Fusers\u002Fusers.controller.ts",":",[539,651,653],{"className":541,"code":652,"language":543,"meta":544,"style":544},"import type { Controller, Get } from \"@heximon\u002Fhttp\";\nimport { type User, UsersRepository } from \".\u002Fusers.repository\";\n\nexport class UsersController implements Controller\u003C\"\u002Fusers\"> {\n  constructor(private readonly users: UsersRepository) {}\n\n  public async list(_action: Get\u003C\"\u002F\", { scopes: [\"public\"] }>): Promise\u003CUser[]> {\n    return this.users.list();\n  }\n\n  public async get(action: Get\u003C\"\u002F:id\">): Promise\u003CUser | { error: string }> {\n    const user = await this.users.findById(action.request.pathParams.id);\n    return user ?? { error: \"User not found\" };\n  }\n}\n",[516,654,655,692,721,727,754,780,784,854,876,882,887,941,988,1014,1019],{"__ignoreMap":544},[548,656,657,660,663,666,669,672,675,678,681,684,687,689],{"class":550,"line":551},[548,658,659],{"class":588},"import",[548,661,662],{"class":588}," type",[548,664,665],{"class":561}," {",[548,667,668],{"class":569}," Controller",[548,670,671],{"class":561},",",[548,673,674],{"class":569}," Get",[548,676,677],{"class":561}," }",[548,679,680],{"class":588}," from",[548,682,683],{"class":561}," \"",[548,685,686],{"class":576},"@heximon\u002Fhttp",[548,688,573],{"class":561},[548,690,691],{"class":561},";\n",[548,693,694,696,698,700,703,705,708,710,712,714,717,719],{"class":550,"line":558},[548,695,659],{"class":588},[548,697,665],{"class":561},[548,699,662],{"class":588},[548,701,702],{"class":569}," User",[548,704,671],{"class":561},[548,706,707],{"class":569}," UsersRepository",[548,709,677],{"class":561},[548,711,680],{"class":588},[548,713,683],{"class":561},[548,715,716],{"class":576},".\u002Fusers.repository",[548,718,573],{"class":561},[548,720,691],{"class":561},[548,722,723],{"class":550,"line":585},[548,724,726],{"emptyLinePlaceholder":725},true,"\n",[548,728,729,731,733,735,738,740,743,745,747,749,752],{"class":550,"line":603},[548,730,589],{"class":588},[548,732,593],{"class":592},[548,734,597],{"class":596},[548,736,737],{"class":592}," implements",[548,739,668],{"class":596},[548,741,742],{"class":561},"\u003C",[548,744,573],{"class":561},[548,746,577],{"class":576},[548,748,573],{"class":561},[548,750,751],{"class":561},">",[548,753,600],{"class":561},[548,755,756,759,761,764,767,771,773,775,778],{"class":550,"line":623},[548,757,758],{"class":592},"  constructor",[548,760,570],{"class":561},[548,762,763],{"class":592},"private",[548,765,766],{"class":592}," readonly",[548,768,770],{"class":769},"sHdIc"," users",[548,772,649],{"class":561},[548,774,707],{"class":596},[548,776,777],{"class":561},")",[548,779,633],{"class":561},[548,781,782],{"class":550,"line":636},[548,783,726],{"emptyLinePlaceholder":725},[548,785,787,790,793,796,798,801,803,805,807,809,812,814,816,818,821,823,826,828,831,833,836,839,842,844,847,850,852],{"class":550,"line":786},7,[548,788,789],{"class":592},"  public",[548,791,792],{"class":592}," async",[548,794,795],{"class":626}," list",[548,797,570],{"class":561},[548,799,800],{"class":769},"_action",[548,802,649],{"class":561},[548,804,674],{"class":596},[548,806,742],{"class":561},[548,808,573],{"class":561},[548,810,811],{"class":576},"\u002F",[548,813,573],{"class":561},[548,815,671],{"class":561},[548,817,665],{"class":561},[548,819,820],{"class":626}," scopes",[548,822,649],{"class":561},[548,824,825],{"class":569}," [",[548,827,573],{"class":561},[548,829,830],{"class":576},"public",[548,832,573],{"class":561},[548,834,835],{"class":569},"] ",[548,837,838],{"class":561},"}>):",[548,840,841],{"class":596}," Promise",[548,843,742],{"class":561},[548,845,846],{"class":596},"User",[548,848,849],{"class":569},"[]",[548,851,751],{"class":561},[548,853,600],{"class":561},[548,855,857,860,863,866,869,872,874],{"class":550,"line":856},8,[548,858,859],{"class":588},"    return",[548,861,862],{"class":561}," this.",[548,864,865],{"class":569},"users",[548,867,868],{"class":561},".",[548,870,871],{"class":565},"list",[548,873,630],{"class":626},[548,875,691],{"class":561},[548,877,879],{"class":550,"line":878},9,[548,880,881],{"class":561},"  }\n",[548,883,885],{"class":550,"line":884},10,[548,886,726],{"emptyLinePlaceholder":725},[548,888,890,892,894,897,899,902,904,906,908,910,912,914,917,919,921,923,926,928,931,933,936,939],{"class":550,"line":889},11,[548,891,789],{"class":592},[548,893,792],{"class":592},[548,895,896],{"class":626}," get",[548,898,570],{"class":561},[548,900,901],{"class":769},"action",[548,903,649],{"class":561},[548,905,674],{"class":596},[548,907,742],{"class":561},[548,909,573],{"class":561},[548,911,616],{"class":576},[548,913,573],{"class":561},[548,915,916],{"class":561},">):",[548,918,841],{"class":596},[548,920,742],{"class":561},[548,922,846],{"class":596},[548,924,925],{"class":561}," |",[548,927,665],{"class":561},[548,929,930],{"class":626}," error",[548,932,649],{"class":561},[548,934,935],{"class":596}," string",[548,937,938],{"class":561}," }>",[548,940,600],{"class":561},[548,942,944,947,950,953,956,958,960,962,965,967,969,971,974,976,979,981,984,986],{"class":550,"line":943},12,[548,945,946],{"class":592},"    const",[548,948,949],{"class":569}," user",[548,951,952],{"class":561}," =",[548,954,955],{"class":588}," await",[548,957,862],{"class":561},[548,959,865],{"class":569},[548,961,868],{"class":561},[548,963,964],{"class":565},"findById",[548,966,570],{"class":626},[548,968,901],{"class":569},[548,970,868],{"class":561},[548,972,973],{"class":569},"request",[548,975,868],{"class":561},[548,977,978],{"class":569},"pathParams",[548,980,868],{"class":561},[548,982,983],{"class":569},"id",[548,985,777],{"class":626},[548,987,691],{"class":561},[548,989,991,993,995,998,1000,1002,1004,1006,1009,1011],{"class":550,"line":990},13,[548,992,859],{"class":588},[548,994,949],{"class":569},[548,996,997],{"class":561}," ??",[548,999,665],{"class":561},[548,1001,930],{"class":626},[548,1003,649],{"class":561},[548,1005,683],{"class":561},[548,1007,1008],{"class":576},"User not found",[548,1010,573],{"class":561},[548,1012,1013],{"class":561}," };\n",[548,1015,1017],{"class":550,"line":1016},14,[548,1018,881],{"class":561},[548,1020,1022],{"class":550,"line":1021},15,[548,1023,639],{"class":561},[508,1025,1027],{"id":1026},"where-it-lives","Where it lives",[499,1029,1030,1031,649],{},"The skill is a folder in the monorepo, ",[516,1032,1033],{},"docs\u002Fskills\u002Fheximon\u002F",[1035,1036,1037,1046],"ul",{},[1038,1039,1040,1045],"li",{},[503,1041,1042],{},[516,1043,1044],{},"SKILL.md"," — one document covering the whole authoring surface: the invariants (no decorators, no\nruntime container, class identity as the only DI token, constructor signatures as the dependency\ndeclaration), the package map, and worked idioms for modules, controllers, contracts, CQRS, DDD,\nDrizzle, auth, and testing.",[1038,1047,1048,1053],{},[503,1049,1050],{},[516,1051,1052],{},"references\u002F"," — deeper, source-grounded per-area files the skill links out to (events\u002FCQRS, DDD,\nsagas, workflows, auth, drizzle, observability, testing, and more) for the detail that doesn't belong\nin the top-level document.",[499,1055,1056,1057,1059],{},"Point a skill-aware tool — Claude Code, or anything that reads local ",[516,1058,1044],{}," files — at that folder\nand it picks up both the rules and the deeper references.",[508,1061,1063,1064],{"id":1062},"whats-in-skillmd","What's in ",[516,1065,1044],{},[1035,1067,1068,1077,1087],{},[1038,1069,1070,1073,1074,868],{},[503,1071,1072],{},"The invariants"," — no decorators, no runtime DI container, class identity as the only token,\nconstructor signatures as the dependency declaration, oxc-based compilation into ",[516,1075,1076],{},".heximon\u002F",[1038,1078,1079,1082,1083,1086],{},[503,1080,1081],{},"The package map"," — every ",[516,1084,1085],{},"@heximon\u002F*"," package and what it provides, so the agent imports the right\nname from the right place instead of guessing a module path.",[1038,1088,1089,1092],{},[503,1090,1091],{},"Authoring idioms"," — modules and DI, HTTP controllers and contracts, middleware and error filters,\nevents\u002Fcommands\u002Fqueries, DDD entities and repositories, the Drizzle dialect, auth, and the test\naffordances — each a worked example, not a one-line blurb.",[508,1094,1096],{"id":1095},"llmstxt-and-mcp","llms.txt and MCP",[499,1098,1099,1100,1107],{},"This documentation site is built with ",[1101,1102,1106],"a",{"href":1103,"rel":1104},"https:\u002F\u002Fdocus.dev",[1105],"nofollow","Docus",", which can serve two\nmachine-readable surfaces from the same content, no extra authoring required:",[1035,1109,1110,1124],{},[1038,1111,1112,1117,1118,1123],{},[503,1113,1114],{},[516,1115,1116],{},"\u002Fllms.txt"," — a plain-text index of the site's content, generated from the same pages you're\nreading, for any tool that consumes the ",[1101,1119,1122],{"href":1120,"rel":1121},"https:\u002F\u002Fllmstxt.org",[1105],"llms.txt convention",". Enabled for\nthis site.",[1038,1125,1126,1131,1132,1135,1136,1139],{},[503,1127,1128],{},[516,1129,1130],{},"\u002Fmcp"," — a Model Context Protocol server exposing this site's content as MCP resources, for an\nagent that talks MCP instead of fetching pages directly. Docus ships this capability, but it is\nturned off for this deployment (",[516,1133,1134],{},"mcp: { enabled: false }"," in ",[516,1137,1138],{},"docs\u002Fnuxt.config.ts","); enable it in a\nDocus site's config to serve it.",[499,1141,1142,1143,1146,1147,1150,1151,1153,1154,1156,1157,1160],{},"Both ride the published docs site itself; neither depends on installing the ",[516,1144,1145],{},"docs\u002Fskills\u002Fheximon"," skill\nseparately. Use the skill when you want an agent to ",[525,1148,1149],{},"author"," Heximon code correctly; use ",[516,1152,1116],{},"\n(or ",[516,1155,1130],{},", once enabled) when you want an agent to ",[525,1158,1159],{},"look up"," something from these docs.",[508,1162,1164],{"id":1163},"next-steps","Next steps",[1035,1166,1167,1181],{},[1038,1168,1169,1170,1173,1174,1177,1178,1180],{},"Point your project's ",[516,1171,1172],{},"CLAUDE.md"," (or equivalent) at ",[516,1175,1176],{},"docs\u002Fskills\u002Fheximon\u002FSKILL.md"," so your agent\nconsults it before writing ",[516,1179,1085],{}," code.",[1038,1182,1183,1185],{},[1101,1184,21],{"href":22}," — build a module and controller by hand to recognize the\ncorrect, skill-driven output when you see it.",[1187,1188,1189],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":544,"searchDepth":558,"depth":558,"links":1191},[1192,1193,1194,1196,1197],{"id":510,"depth":558,"text":511},{"id":1026,"depth":558,"text":1027},{"id":1062,"depth":558,"text":1195},"What's in SKILL.md",{"id":1095,"depth":558,"text":1096},{"id":1163,"depth":558,"text":1164},"The Heximon Agent Skill at docs\u002Fskills\u002Fheximon, its SKILL.md and references, and the llms.txt and MCP endpoints Docus serves for this site.","md",null,{},{"icon":207},{"title":412,"description":1198},"I6kF76r2oolK4mnufxGQNEv7cs9acPWSyjSCP-SoLA8",[1206,1208],{"title":408,"path":409,"stem":410,"description":1207,"icon":401,"children":-1},"All 44 @heximon\u002F* packages by tier — foundation, kernel, architecture, data, api, capabilities, platforms, tooling — with the npm-name-to-directory mapping.",{"title":416,"path":417,"stem":418,"description":1209,"icon":419,"children":-1},"The nominal-satisfier walk (a concrete subclass satisfies an abstract token, AmbiguousProviders on a tie), array-provide, useExisting aliasing, useFactory with multiple dependencies, the generic-token pitfall (DrizzleLibSQLConfig and named subclasses), useValue with eager, factory-form Module((config) => ({...})) configs, and overriding the ErrorEnvelope.",1783300761903]