@xano/sdk 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/CHANGELOG.md +20 -5
  2. package/README.md +30 -4
  3. package/dist/.build-fingerprint +1 -1
  4. package/dist/{agent-file-refresh-67QIX45H.js → agent-file-refresh-DGGSRPJ4.js} +12 -12
  5. package/dist/agent-skill-command-37DFYS7Q.js +414 -0
  6. package/dist/{answer-shape-UCDUKPAN.js → answer-shape-RBFDCNZ7.js} +4 -4
  7. package/dist/{backend-dir-3LIL6SCT.js → backend-dir-KDD43X7K.js} +14 -14
  8. package/dist/{backend-slot-JREP27UD.js → backend-slot-TBOVZXDE.js} +3 -3
  9. package/dist/bin.js +48 -47
  10. package/dist/{branch-2IPHOAYS.js → branch-7PIKNUD7.js} +11 -10
  11. package/dist/{branch-commands-KTKAXBAN.js → branch-commands-EGY7ZEZE.js} +23 -22
  12. package/dist/bundle.js +4 -4
  13. package/dist/{chunk-GWTFI3GA.js → chunk-26LHXLD3.js} +2 -2
  14. package/dist/{chunk-ENMBEXOP.js → chunk-2ACWDSAQ.js} +3 -3
  15. package/dist/{chunk-GOLFAEUV.js → chunk-2SD4LA22.js} +2 -2
  16. package/dist/{chunk-GZHLCUZ6.js → chunk-2XWVZRL6.js} +7 -7
  17. package/dist/{chunk-IF4PEGVD.js → chunk-2YER2J47.js} +11 -11
  18. package/dist/{chunk-N5I37JFB.js → chunk-3FRGNBOC.js} +2 -2
  19. package/dist/{chunk-YKP4ZKVO.js → chunk-46PATL23.js} +3 -3
  20. package/dist/{chunk-QJM5XZ4K.js → chunk-47XT6WQL.js} +8 -8
  21. package/dist/{chunk-AWQ7BQTQ.js → chunk-4GPIOIAC.js} +6 -1
  22. package/dist/{chunk-ND43ZOS3.js → chunk-567KK6XF.js} +7 -7
  23. package/dist/{chunk-EQFYOOO6.js → chunk-5GIOCDUM.js} +829 -893
  24. package/dist/{chunk-TTEIDD5Q.js → chunk-5SCPRXFB.js} +4 -4
  25. package/dist/{chunk-LAOMN6QQ.js → chunk-5ZG7V2VW.js} +3 -3
  26. package/dist/{chunk-JXVJGF3Y.js → chunk-7M6JP3FS.js} +2 -2
  27. package/dist/{chunk-JFBRXRJD.js → chunk-7XXWKTCE.js} +36 -36
  28. package/dist/{chunk-PL7AIAWS.js → chunk-A4R5CAY4.js} +4 -111
  29. package/dist/{chunk-SPKA2LV6.js → chunk-AKERAUNH.js} +4 -4
  30. package/dist/{chunk-26MOFAJT.js → chunk-ARWMVNDJ.js} +6 -3
  31. package/dist/{chunk-I3VHW6XM.js → chunk-B2URJBC4.js} +18 -18
  32. package/dist/{chunk-A7MRZ4GF.js → chunk-B3P25SDP.js} +4 -4
  33. package/dist/chunk-BRANWM4U.js +853 -0
  34. package/dist/{chunk-CHINR7WD.js → chunk-BSVQEKHO.js} +4 -4
  35. package/dist/{chunk-UD2Z7K6W.js → chunk-BZ6WTG3E.js} +4 -4
  36. package/dist/{chunk-D7BUMOKU.js → chunk-CH23ONYG.js} +76 -5
  37. package/dist/{chunk-763M6LX3.js → chunk-CNZASQPL.js} +2 -2
  38. package/dist/{chunk-TECTL2NU.js → chunk-CPN6WSBH.js} +4 -4
  39. package/dist/{chunk-5YQV35C2.js → chunk-CT3J5JRZ.js} +7 -7
  40. package/dist/{chunk-YYC2DZMG.js → chunk-D5OZRJ3T.js} +6 -6
  41. package/dist/{chunk-XFBGXB7X.js → chunk-DG3APBUJ.js} +149 -97
  42. package/dist/chunk-DIWF7L33.js +995 -0
  43. package/dist/{chunk-RIN4YY34.js → chunk-DXZTL7NA.js} +95 -58
  44. package/dist/{chunk-PMMHSX4H.js → chunk-EF4MHLEW.js} +4 -4
  45. package/dist/{chunk-ZDP6GDAB.js → chunk-ELPQTDW6.js} +101 -93
  46. package/dist/{chunk-Q22BMRPF.js → chunk-EPFDY5JU.js} +2 -2
  47. package/dist/{chunk-ZJSTUD6D.js → chunk-EU32BC5B.js} +8 -8
  48. package/dist/{chunk-3BBIDW3Y.js → chunk-FDTET7FZ.js} +3 -3
  49. package/dist/{chunk-YYLUBYXM.js → chunk-FENA7K7C.js} +3 -3
  50. package/dist/{chunk-QZEAANWP.js → chunk-GHMLRFRX.js} +8 -8
  51. package/dist/{chunk-MBDFH7XB.js → chunk-H2K4GFUS.js} +3 -3
  52. package/dist/{chunk-U35MTOXQ.js → chunk-HTQWAQRW.js} +3 -3
  53. package/dist/{chunk-ROY4YAEQ.js → chunk-HU7F56VF.js} +22 -2
  54. package/dist/{chunk-2FLIJGBZ.js → chunk-HZ6ADG3O.js} +47 -8
  55. package/dist/{chunk-GLY552SI.js → chunk-I6XRUU6U.js} +54 -54
  56. package/dist/{chunk-KPFS3RGM.js → chunk-IPNN2KRW.js} +3 -3
  57. package/dist/{chunk-LD6ARK3A.js → chunk-JOOKM7AH.js} +2 -2
  58. package/dist/{chunk-6X6BJN6Y.js → chunk-JOWY6HFL.js} +3 -3
  59. package/dist/{chunk-UIVMR7UK.js → chunk-JX6N73H3.js} +2 -2
  60. package/dist/{chunk-JRVQ7M7W.js → chunk-L472YIGG.js} +8 -8
  61. package/dist/{chunk-YR2I5HGE.js → chunk-L6HZ67P6.js} +2 -2
  62. package/dist/chunk-LCOCRJ4K.js +116 -0
  63. package/dist/{chunk-3EDSPMXN.js → chunk-LJM5CIY4.js} +5 -1
  64. package/dist/{chunk-NPODGBVJ.js → chunk-M2C54ZBC.js} +4 -4
  65. package/dist/{chunk-QXYMDARD.js → chunk-M3NEK3LT.js} +4 -4
  66. package/dist/{chunk-BL3AZ3AP.js → chunk-MBL7CXJ7.js} +2 -2
  67. package/dist/{chunk-7GAIJW62.js → chunk-MYZRMSPM.js} +2 -2
  68. package/dist/{chunk-GHQ4BVI4.js → chunk-N3YFCFCO.js} +13 -13
  69. package/dist/{chunk-M5CSVB23.js → chunk-NDJAKSE7.js} +11 -8
  70. package/dist/{chunk-Z4ZGTCCD.js → chunk-NV37YGOV.js} +6 -6
  71. package/dist/{chunk-GW5RHGOB.js → chunk-O56DQKPL.js} +9 -9
  72. package/dist/{chunk-U6MTGB46.js → chunk-ORGNLQN6.js} +5 -5
  73. package/dist/{chunk-I3H3HCPY.js → chunk-PEIBGH2V.js} +33 -30
  74. package/dist/{chunk-5TVFLG3C.js → chunk-PEX4QZVI.js} +2 -2
  75. package/dist/{chunk-HCG7NDIL.js → chunk-PV25BDCH.js} +5 -5
  76. package/dist/{chunk-VDHA5SSQ.js → chunk-PY722CHR.js} +2 -2
  77. package/dist/{chunk-VW4CWVYX.js → chunk-QGIZLFAS.js} +4 -4
  78. package/dist/{chunk-SSITMX7I.js → chunk-QRQ54LUI.js} +16 -14
  79. package/dist/{chunk-OIKLDDYC.js → chunk-RBU2YX22.js} +3 -3
  80. package/dist/{chunk-EADVVTDK.js → chunk-RRMH7WMY.js} +7 -7
  81. package/dist/{chunk-WZHLMU6T.js → chunk-S46ODQRA.js} +2 -2
  82. package/dist/{chunk-SPITRSOF.js → chunk-SDGV76HF.js} +2 -2
  83. package/dist/{chunk-ATJ2W7DC.js → chunk-SGK3PTTM.js} +281 -121
  84. package/dist/{chunk-3II44CUJ.js → chunk-TWVUYS63.js} +24 -24
  85. package/dist/{chunk-2WBH5HUY.js → chunk-U5M7T6CI.js} +7 -7
  86. package/dist/{chunk-6X3MY2JP.js → chunk-UYFUIHH3.js} +2 -2
  87. package/dist/{chunk-IMELQ2I6.js → chunk-V7MBRUK6.js} +3 -3
  88. package/dist/{chunk-NDWVJ2QZ.js → chunk-VAGSKUWC.js} +3 -3
  89. package/dist/{chunk-WBH4KJWM.js → chunk-VIJ5D3RC.js} +3 -3
  90. package/dist/{chunk-ITC2R2OT.js → chunk-VNDR2T35.js} +7 -7
  91. package/dist/{chunk-IXFJORNH.js → chunk-WNCW2RNB.js} +4 -4
  92. package/dist/{chunk-BTVUYHWV.js → chunk-WUEPP5HD.js} +4 -4
  93. package/dist/{local-engine-command-RYLGMQ2O.js → chunk-YCUDOF6Q.js} +22 -77
  94. package/dist/{chunk-YGLMRH5U.js → chunk-YH2JVJAO.js} +12 -12
  95. package/dist/{chunk-PFBXSVZF.js → chunk-ZGLNHA7T.js} +7 -7
  96. package/dist/{chunk-CCU5CCRX.js → chunk-ZJOAWRED.js} +8 -8
  97. package/dist/{chunk-FU3VCE5A.js → chunk-ZXRDD3Q2.js} +13 -9
  98. package/dist/cli.d.ts +25 -4
  99. package/dist/cli.js +45 -42
  100. package/dist/{codegen-command-R5IASBFC.js → codegen-command-T7TC7PQO.js} +58 -57
  101. package/dist/{commands-H7CPMMHH.js → commands-JDENTDJS.js} +2 -2
  102. package/dist/{completion-W5ZAI6TN.js → completion-YFD5OVJW.js} +8 -4
  103. package/dist/{config-MZ5KG4EP.js → config-YJFUTRJW.js} +7 -7
  104. package/dist/{deploy-command-34T2LKQ5.js → deploy-command-OEVEE6UG.js} +50 -49
  105. package/dist/{deploy-source-YLQ7WMYR.js → deploy-source-HYVZEYXV.js} +33 -32
  106. package/dist/{dev-env-sync-TMJTNU3U.js → dev-env-sync-EFDCJ6KU.js} +48 -47
  107. package/dist/{display-name-hint-ZJGFNJKQ.js → display-name-hint-SW3GB3V7.js} +13 -12
  108. package/dist/{emit-D125xxty.d.ts → emit-Dov_92kn.d.ts} +1 -1
  109. package/dist/{env-example-refresh-CQP3ZMKM.js → env-example-refresh-WNSOH534.js} +59 -58
  110. package/dist/{env-pull-command-UTG6IC2K.js → env-pull-command-UYEXMQ3P.js} +43 -42
  111. package/dist/{env-target-FZROWYFS.js → env-target-JBSLBKNX.js} +12 -11
  112. package/dist/{env-var-command-VYDBQJJW.js → env-var-command-BJNRAXNV.js} +49 -48
  113. package/dist/{ephemeral-BIE6FMJV.js → ephemeral-CEOGMIEA.js} +10 -9
  114. package/dist/{ephemeral-command-OZ26RGXF.js → ephemeral-command-IPSGBCS5.js} +61 -60
  115. package/dist/{ephemeral-state-SNZOX2YK.js → ephemeral-state-MTBASPRS.js} +10 -9
  116. package/dist/{generate-command-4HR7MR36.js → generate-command-XQXODBS6.js} +73 -71
  117. package/dist/{gitignore-EWQBXNX2.js → gitignore-RUVCIZO4.js} +18 -18
  118. package/dist/{impersonate-command-WC7OGKUM.js → impersonate-command-MA27O7S5.js} +41 -40
  119. package/dist/{import-7Z4GCCPO.js → import-XKRFHABE.js} +4 -4
  120. package/dist/index.d.ts +4 -4
  121. package/dist/{init-command-HAO3WXH3.js → init-command-6RDTCMAB.js} +61 -46
  122. package/dist/{init-modules-NSKD4ASY.js → init-modules-DHTBOCQT.js} +7 -7
  123. package/dist/{init-web-MKFFOQUU.js → init-web-ELBXSXDL.js} +2 -2
  124. package/dist/internal.d.ts +4 -4
  125. package/dist/internal.js +1 -1
  126. package/dist/{keep-data-merge-QR2TMKEO.js → keep-data-merge-TDJOIAVT.js} +23 -23
  127. package/dist/{lambda-config-reconcile-7FJXXV6V.js → lambda-config-reconcile-47X5C2E4.js} +6 -5
  128. package/dist/{landing-record-MWXFIRCP.js → landing-record-TPPYFQAS.js} +21 -21
  129. package/dist/{local-engine-choice-VD5LNXJU.js → local-engine-choice-S6VHPJRU.js} +36 -35
  130. package/dist/local-engine-command-4EZCGZ6M.js +85 -0
  131. package/dist/{local-engine-config-W3KB7RWM.js → local-engine-config-2EBL3QKA.js} +3 -2
  132. package/dist/{local-engine-deploy-6O7NKZCA.js → local-engine-deploy-FOPNWU7X.js} +17 -15
  133. package/dist/local-engine-lookup-GM3E3NPP.js +43 -0
  134. package/dist/local-engine-mcp-bridge-QKZHUGW3.js +423 -0
  135. package/dist/local-engine-mcp-command-BFQVLXZC.js +181 -0
  136. package/dist/{local-engine-process-ZLLZEIRF.js → local-engine-process-XUQPQENQ.js} +11 -8
  137. package/dist/{local-engine-state-OCW5YDD7.js → local-engine-state-JQPKGB65.js} +4 -3
  138. package/dist/{local-engine-update-check-LVX4HBBI.js → local-engine-update-check-S7UF6ZF5.js} +6 -5
  139. package/dist/{lock-commands-X2OECR4R.js → lock-commands-HJ6Y5QVS.js} +51 -50
  140. package/dist/{login-command-RLLKD565.js → login-command-JO55NZAS.js} +32 -32
  141. package/dist/{logout-command-XDMSXCDO.js → logout-command-MPRIRSJA.js} +15 -14
  142. package/dist/{marketplace-command-2NHHY2X3.js → marketplace-command-BM6G257N.js} +33 -33
  143. package/dist/{marketplace-resolve-OTZYT4FG.js → marketplace-resolve-AWH3RG57.js} +5 -5
  144. package/dist/{meta-client-TMHVBZFY.js → meta-client-AOSWODQQ.js} +13 -12
  145. package/dist/{module-manifest-FNMW23IX.js → module-manifest-GXI46PEF.js} +3 -3
  146. package/dist/node.d.ts +4 -4
  147. package/dist/node.js +50 -49
  148. package/dist/{operation-outcome-RN62735X.js → operation-outcome-4UKPXTNC.js} +25 -23
  149. package/dist/{output-target-MOLCTPBP.js → output-target-RAZ4KN5J.js} +19 -19
  150. package/dist/{plan-disclosure-CY7AF6KP.js → plan-disclosure-JR52DWXN.js} +13 -12
  151. package/dist/{plugin-contributions-WR26U7NT.js → plugin-contributions-E6XHLQWK.js} +5 -5
  152. package/dist/{plugin-prompt-ZUYQQIX4.js → plugin-prompt-IODX5EU6.js} +4 -4
  153. package/dist/{plugin-questions-HAZOQ67R.js → plugin-questions-AAAJ7POP.js} +3 -3
  154. package/dist/{preflight-command-OHJXYND3.js → preflight-command-7GKJBWOQ.js} +52 -51
  155. package/dist/{profile-command-6JWT2BTL.js → profile-command-CM6J7E2M.js} +33 -33
  156. package/dist/{profile-pointer-PDA5XBIB.js → profile-pointer-KTYXL6FU.js} +4 -3
  157. package/dist/{project-dependency-GZWWGWEW.js → project-dependency-OQ5575QQ.js} +6 -6
  158. package/dist/{project-sdk-3W72H5QO.js → project-sdk-2ESHHZVL.js} +3 -3
  159. package/dist/{promote-command-UYAMUXKB.js → promote-command-BDRPG6UU.js} +68 -67
  160. package/dist/{prompt-U37K5RPQ.js → prompt-MQPGU4ZI.js} +3 -3
  161. package/dist/{publish-command-BUS27HGB.js → publish-command-IEMYZ7LF.js} +55 -54
  162. package/dist/{pull-command-ZGUNP27P.js → pull-command-S5E2ABZ4.js} +61 -60
  163. package/dist/{pull-superseded-EZBGYRZF.js → pull-superseded-E34BZVLH.js} +3 -3
  164. package/dist/{release-command-BQ6OHS3P.js → release-command-7F5TBKO2.js} +58 -57
  165. package/dist/{release-ns-command-ATGVBVIU.js → release-ns-command-EK2ZQ4CC.js} +84 -83
  166. package/dist/{retry-command-QJ57WVW7.js → retry-command-GL5HCMVB.js} +9 -8
  167. package/dist/{routes-manifest-file-UALYSZLY.js → routes-manifest-file-LCIKPDAG.js} +5 -5
  168. package/dist/scaffold.js +4 -4
  169. package/dist/secrets-IV4N5HYI.js +20 -0
  170. package/dist/{secrets-file-LMS7KX3E.js → secrets-file-LXREYU3M.js} +18 -18
  171. package/dist/{secrets-fill-command-QNBDGCGM.js → secrets-fill-command-QHZS3KWM.js} +49 -48
  172. package/dist/{seed-SZ6OS5DQ.js → seed-FRKMDN2Z.js} +4 -4
  173. package/dist/{source-resolve-MKLNYFWG.js → source-resolve-BBHYTOXI.js} +23 -21
  174. package/dist/{static-host-ONEHA4LI.js → static-host-7LC7OZR4.js} +4 -4
  175. package/dist/{status-command-XKIFKBGM.js → status-command-TY253MJT.js} +52 -51
  176. package/dist/{store-Bg4Na6Sm.d.ts → store-Boba9OOh.d.ts} +1 -1
  177. package/dist/{store-X6ZH7EC3.js → store-VJ3OS6VO.js} +7 -6
  178. package/dist/{sync-contributions-HNVHDIQW.js → sync-contributions-63542VE4.js} +9 -9
  179. package/dist/{sync-record-PRXHLK4S.js → sync-record-RGHK7EAL.js} +13 -12
  180. package/dist/{table-DC36QA4Y.js → table-OAYGFGEN.js} +5 -5
  181. package/dist/{tables-command-UQLKTELN.js → tables-command-PZIVDAH3.js} +38 -37
  182. package/dist/{tenant-EKNQGG5A.js → tenant-Y3II4VY3.js} +11 -10
  183. package/dist/{tenant-command-2LWP2MPB.js → tenant-command-G6XON7CF.js} +86 -85
  184. package/dist/{test-command-IU5MBBXY.js → test-command-3FZOX7O3.js} +41 -40
  185. package/dist/{tests-RG2Y5EQ4.js → tests-KF6N6BZ7.js} +5 -5
  186. package/dist/{token-7AWSJLKO.js → token-DJJUW5HY.js} +11 -10
  187. package/dist/{toolchain-hooks-4ZMQLBPQ.js → toolchain-hooks-7PWCFLSU.js} +4 -4
  188. package/dist/{toolchain-modules-VU7SURVJ.js → toolchain-modules-OTNSKK52.js} +4 -4
  189. package/dist/{toolchain-peers-CIDNEEQV.js → toolchain-peers-KQ7TQ2AR.js} +7 -7
  190. package/dist/{tracked-backend-4BHSV7NC.js → tracked-backend-AJCGTO5Y.js} +36 -35
  191. package/dist/{update-check-A7FXIINW.js → update-check-4E5L6GAW.js} +46 -45
  192. package/dist/{upgrade-command-C5KBITFI.js → upgrade-command-BXMSQN4C.js} +52 -49
  193. package/dist/{whoami-command-7WQII2H4.js → whoami-command-NLCCIEUM.js} +14 -13
  194. package/dist/{workspace-Z46PUZNI.js → workspace-PNMJOXE4.js} +4 -4
  195. package/dist/{workspace-binding-JE6YNDZJ.js → workspace-binding-J5GWDFRI.js} +13 -12
  196. package/dist/{workspace-command-FC4IMLAE.js → workspace-command-MHIIY352.js} +79 -78
  197. package/dist/{workspace-env-N4ZPFT6A.js → workspace-env-LLRWCHSA.js} +15 -15
  198. package/dist/{workspace-export-3A5BZTPS.js → workspace-export-BIKAYHWJ.js} +4 -4
  199. package/dist/{writable-D7KCZI5N.js → writable-UOTO4WWC.js} +3 -3
  200. package/dist/{xanosdk-import-P2A2KSXM.js → xanosdk-import-S7A3CVBN.js} +5 -5
  201. package/dist/{xanosdk-project-6AGMW2SL.js → xanosdk-project-J4VCFRHP.js} +15 -15
  202. package/guides/README.md +2 -2
  203. package/guides/cli.md +69 -0
  204. package/guides/codegen.md +23 -5
  205. package/guides/codes.md +1 -0
  206. package/guides/coverage.md +5 -0
  207. package/guides/deploying.md +28 -0
  208. package/guides/scaffold.md +61 -10
  209. package/llms-full.txt +1 -1
  210. package/llms.txt +1 -1
  211. package/manifest.json +63 -5
  212. package/package.json +5 -2
  213. package/skills/xano-backend/SKILL.md +119 -0
  214. package/dist/chunk-LL7SGTRC.js +0 -663
  215. package/dist/chunk-M6ZFSTIZ.js +0 -630
@@ -652,6 +652,34 @@ re-importing the backend. One command cannot serve it and refuses it by name: `r
652
652
  | `xanosdk local cache list` | Each cached engine version, its size on disk, and the engines running on it. |
653
653
  | `xanosdk local cache clear` | Removes every cached engine (`--version <v>`: just that one). An engine running on a removed version is stopped first; the next deploy fetches it again. |
654
654
 
655
+ #### Connecting a coding agent
656
+
657
+ The Xano Engine serves an MCP server for coding agents, and a local deploy prints where. It is
658
+ for looking at the deployed backend (objects, table schemas, rows, run history), seeding and
659
+ editing rows, and running functions, tasks, triggers, endpoints and tests by hand, each
660
+ answering its result and logs. It never changes a primitive: tables, endpoints, functions and
661
+ every other object change in `xano/` and ship with `xanosdk deploy`.
662
+
663
+ `xanosdk init` connects Claude Code (`.mcp.json`) and Cursor (`.cursor/mcp.json`) to it with one
664
+ server, `xano-local`, that launches a bridge:
665
+
666
+ ```json
667
+ { "mcpServers": { "xano-local": { "command": "npx", "args": ["--yes", "--package", "@xano/sdk", "xanosdk", "local", "mcp", "--stdio"] } } }
668
+ ```
669
+
670
+ Nothing has to be started or installed by hand: the agent launches the server itself, using the
671
+ project's own `@xano/sdk` when it is installed and fetching it when it is not (a fresh clone opened
672
+ before `npm install`). The config holds no url and no token. The engine may come back on a new port after a restart and
673
+ always mints a new bearer, so the bridge looks both up when it needs them, and again when the
674
+ engine stops answering or refuses the bearer. Before the first deploy the server connects and
675
+ lists no tools; once an engine is up it tells the agent its tools changed. A call cut off after
676
+ it reached the engine is reported as unknown, never sent twice. `xanosdk local mcp` prints the
677
+ details and each agent's config line, and `init` in an existing project adds the server beside
678
+ the ones a config already declares. An engine too old to serve MCP says so on deploy, and
679
+ `xanosdk local update` moves the project to one that does. Claude Code asks once before it
680
+ starts a project's server; a Cursor version that does not pick up the tool change needs the
681
+ `xano-local` server refreshed in its MCP settings after the first deploy.
682
+
655
683
  #### A frontend on the Xano Engine, and server rendering
656
684
 
657
685
  `xanosdk deploy <entry> --local --static <dir>` publishes a built frontend to the
@@ -1,27 +1,29 @@
1
1
  # The scaffolded project
2
2
 
3
- What `xanosdk init` writes, the two frontend presets, theming, add-ons, and the SvelteKit prerendering rules.
3
+ What `xanosdk init` writes, the two frontend presets, a project with no frontend, adding the backend to an existing app, theming, add-ons, and the SvelteKit prerendering rules.
4
4
 
5
5
  ## init flags and add-ons
6
6
 
7
- `init` flags: `--framework <react|svelte>` (default: `react`), `--name <name>`
7
+ `init` flags: `--framework <react|svelte|none>` (default: `react`; `none` writes the
8
+ backend alone — see [No frontend, and existing apps](#no-frontend-and-existing-apps)), `--name <name>`
8
9
  (default: the folder name), `--theme <id>` / `--radius <len>` / `--dark <mode>` /
9
10
  `--font <id>` / `--font-mono <id>` / `--font-heading <id>` / `--icons <id>`
10
11
  (the look — see [Theming](#theming)), `--no-agents-md` (skip the `AGENTS.md`
11
12
  agent brief, which every coding agent reads and `init` writes by default),
12
13
  `--marketplace <pkg>` (repeatable, comma-separated; installs add-ons and
13
- registers them — below), `--force` (scaffold into a non-empty folder; over an
14
- existing project it lists the files it would overwrite and asks, `--yes` answering
15
- without a terminal — files it does not write are kept),
14
+ registers them — below), `--force` (write over what clashes when adding the backend to
15
+ a non-empty folder; it lists the files and scripts it would overwrite and asks, `--yes`
16
+ answering without a terminal — files it does not write are kept),
16
17
  `--no-install` (skip `npm install`), `--web` (choose all of the above in a
17
18
  browser instead — see [Choosing in a browser](#choosing-in-a-browser)),
18
19
  `--from <source>` (fill `xano/` from an existing backend — any
19
20
  [backend spelling](cli.md#naming-a-backend) or a bundle path — rather than the
20
21
  starter — see [Pulling an existing workspace](codegen.md); over an existing `xano/` it lists
21
22
  what it replaces and asks, and `--yes` answers without a terminal).
22
- In a terminal, `init` prompts for the framework; the prompt has a default, so
23
- pressing enter is a valid answer. The look is never
24
- prompted for — it comes from the flags above, or from `--web`.
23
+ In a terminal, `init` prompts for the framework in an empty or missing folder
24
+ (React, Svelte, or "No frontend"); the prompt has a default, so pressing enter is a
25
+ valid answer. A folder that already has files gets no prompt and no frontend. The look
26
+ is never prompted for — it comes from the flags above, or from `--web`.
25
27
  The starter backend is empty but already compiles and deploys — grow it from the
26
28
  walkthrough in `xano/EXAMPLE.md`.
27
29
 
@@ -113,10 +115,59 @@ project — the mistake npm answers by silently writing to the wrong `package.js
113
115
  The package name is passed through exactly as typed, so version specifiers, tags,
114
116
  and third-party packages all work.
115
117
 
118
+ ## No frontend, and existing apps
119
+
120
+ `init` reads its target directory before it writes anything. An empty or missing directory
121
+ is a **new** project, and `--framework` decides its frontend. Any other directory is an
122
+ **existing** project, which has its own app and gets the backend only.
123
+
124
+ **A new project with `--framework none`** (or "No frontend" at the prompt) gets everything
125
+ above except the frontend: `xano/`, a `package.json` with only the backend's scripts and
126
+ dependencies, `.gitignore`, `.gitattributes`, the CI check, a README and `AGENTS.md`. There is
127
+ no `frontend/` and no root `tsconfig.json`; `xano/` type-checks under its own
128
+ `xano/tsconfig.json`, and `npm run xano:typecheck` checks it and its lambdas.
129
+ `xano:deploy:ephemeral` deploys the backend alone, and there is no `dev`, `build` or
130
+ `xano:deploy:frontend`.
131
+
132
+ **An existing project** (any non-empty directory) gets:
133
+
134
+ - `xano/`, the same starter a new project gets. When the project's `package.json` is not
135
+ `"type": "module"` (Next.js and `npm init -y` write one that is not), `init` also writes
136
+ `xano/package.json` holding only `{"type": "module"}`, so `xano/` loads as ES modules
137
+ without changing the project's own type.
138
+ - The `xano:*` scripts and the backend's dependencies merged into `package.json`. The
139
+ project's entries win: a dependency it already has keeps its range, a script it already
140
+ has keeps its command, and no other key changes (an add-on's settings under `"xanosdk"`
141
+ aside). The file keeps its indentation and line endings. A project with no
142
+ `package.json` gets one holding only what the backend needs.
143
+ - A marked block in `.gitignore` (created when missing) and in `AGENTS.md`, added or
144
+ refreshed in place; the rest of each file is left as it was. A symlinked `AGENTS.md` is left
145
+ alone, and `--no-agents-md` skips it.
146
+ - No frontend, README, CI workflow or root `tsconfig.json`. The line-ending rule goes in
147
+ `xano/.gitattributes`, scoped to `xano/`, so the project's own files are not renormalized.
148
+
149
+ What would be written over is a **clash**: an existing `xano/`, any other file `init` writes
150
+ that is already there, and a `xano:*` script the project defines with a different command (the
151
+ same command is no clash). `init` lists every clash and writes nothing; `--force` lists what it
152
+ overwrites and asks first. A `package.json` that is not valid JSON is refused, since there is
153
+ nothing to merge into.
154
+
155
+ `--framework react` or `--framework svelte` in a non-empty directory is refused, as are the
156
+ frontend-only flags (`--theme`, `--radius`, `--dark`, `--font`, `--font-mono`,
157
+ `--font-heading`, `--icons`) wherever no frontend is written. After the merge, `npm run
158
+ xano:deploy` runs the backend on the Xano Engine as it does in a new project.
159
+
160
+ If the project's own root `tsconfig.json` includes every `.ts` file (Next.js's does), add
161
+ `"xano/lambdas"` to its `exclude` before adding the first lambda: the lambda globals
162
+ type-check only under `xano/lambdas/tsconfig.json`. `init` leaves that file alone, and the
163
+ `AGENTS.md` it writes says the same.
164
+
116
165
  ## Git and CI
117
166
 
118
- `init` writes a `.gitattributes` and a `.github/workflows/check.yml` (`xanosdk-<dir>.yml`
119
- below the repository root, so moving it up never replaces another workflow).
167
+ A new project gets a `.gitattributes` and a `.github/workflows/check.yml` (`xanosdk-<dir>.yml`
168
+ below the repository root, so moving it up never replaces another workflow). An existing
169
+ project gets no workflow, and its line-ending rule is scoped to `xano/`; run
170
+ `npm run xano:check` from its own CI.
120
171
 
121
172
  The attributes file normalizes line endings, so any generated artifact the project
122
173
  commits is byte-identical on every checkout and a `--frozen-lock` check cannot fail
package/llms-full.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanosdk v1.0.6
1
+ # xanosdk v1.0.7
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # xanosdk v1.0.6
1
+ # xanosdk v1.0.7
2
2
 
3
3
  > TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.
4
4
 
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xanosdk",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "TypeScript SDK that compiles a typed Xano workspace into the importable packageExport JSON bundle.",
5
5
  "coverage": {
6
6
  "objectKinds": {
@@ -8997,6 +8997,48 @@
8997
8997
  }
8998
8998
  ],
8999
8999
  "cli": [
9000
+ {
9001
+ "command": "agent-skill install",
9002
+ "flags": [
9003
+ {
9004
+ "flag": "--agent <id>",
9005
+ "description": "Which agent to act for, instead of the ones detected (repeatable): claude-code, agents (the shared ~/.agents directory), codex, cursor, copilot, gemini, amp, opencode"
9006
+ },
9007
+ {
9008
+ "flag": "--dry-run",
9009
+ "description": "Report what would change and write nothing"
9010
+ },
9011
+ {
9012
+ "flag": "--force",
9013
+ "description": "Replace a copy that was edited since it was installed"
9014
+ }
9015
+ ],
9016
+ "description": "Write the skill into the user-level skill directory of each detected agent; an edited copy is left alone unless --force"
9017
+ },
9018
+ {
9019
+ "command": "agent-skill status",
9020
+ "flags": [
9021
+ {
9022
+ "flag": "--agent <id>",
9023
+ "description": "Which agent to act for, instead of the ones detected (repeatable): claude-code, agents (the shared ~/.agents directory), codex, cursor, copilot, gemini, amp, opencode"
9024
+ }
9025
+ ],
9026
+ "description": "Report each copy as current, stale, edited or absent"
9027
+ },
9028
+ {
9029
+ "command": "agent-skill uninstall",
9030
+ "flags": [
9031
+ {
9032
+ "flag": "--agent <id>",
9033
+ "description": "Which agent to act for, instead of the ones detected (repeatable): claude-code, agents (the shared ~/.agents directory), codex, cursor, copilot, gemini, amp, opencode"
9034
+ },
9035
+ {
9036
+ "flag": "--dry-run",
9037
+ "description": "Report what would be removed and remove nothing"
9038
+ }
9039
+ ],
9040
+ "description": "Remove the copies install wrote; an edited copy is reported and kept"
9041
+ },
9000
9042
  {
9001
9043
  "command": "compile",
9002
9044
  "args": "<file>",
@@ -9655,10 +9697,11 @@
9655
9697
  },
9656
9698
  {
9657
9699
  "flag": "--framework <id>",
9658
- "description": "Frontend framework to scaffold: react (default), svelte",
9700
+ "description": "Frontend to scaffold in a new project: react (default), svelte, or none for the backend only. A non-empty directory always gets the backend only",
9659
9701
  "values": [
9660
9702
  "react",
9661
- "svelte"
9703
+ "svelte",
9704
+ "none"
9662
9705
  ]
9663
9706
  },
9664
9707
  {
@@ -9777,7 +9820,7 @@
9777
9820
  },
9778
9821
  {
9779
9822
  "flag": "--force",
9780
- "description": "Write into a non-empty target directory. Over an existing project it lists every file it would overwrite and confirms first (--yes without a terminal); files the scaffold does not write are kept"
9823
+ "description": "Write over what clashes when adding the backend to a non-empty target directory: an existing xano/, a file init would write, a xano:* script with another command. It lists every file and script it would overwrite and confirms first (--yes without a terminal); files the scaffold does not write are kept"
9781
9824
  },
9782
9825
  {
9783
9826
  "flag": "--no-install",
@@ -9851,7 +9894,7 @@
9851
9894
  ]
9852
9895
  }
9853
9896
  ],
9854
- "description": "Scaffold a Xano SDK project — empty, or filled from an existing backend"
9897
+ "description": "Scaffold a Xano SDK project — empty, or filled from an existing backend. In a non-empty directory, add the backend to the project there"
9855
9898
  },
9856
9899
  {
9857
9900
  "command": "local cache",
@@ -9876,6 +9919,21 @@
9876
9919
  "command": "local list",
9877
9920
  "description": "List Xano Engines on this machine, marking the ones xanosdk started"
9878
9921
  },
9922
+ {
9923
+ "command": "local mcp",
9924
+ "args": "[name]",
9925
+ "flags": [
9926
+ {
9927
+ "flag": "--stdio",
9928
+ "description": "Run as an MCP stdio server that forwards to the live engine with its current bearer — the command a coding agent's MCP config launches"
9929
+ },
9930
+ {
9931
+ "flag": "--project <dir>",
9932
+ "description": "The project whose engine to reach, when the agent launches the bridge outside it (default: the current directory)"
9933
+ }
9934
+ ],
9935
+ "description": "Print how a coding agent connects to a Xano Engine's MCP server (look at the backend, seed rows, run functions, tasks, triggers, endpoints and tests); `--stdio` runs the bridge the agent's MCP config launches (default: the engine this project deployed to)"
9936
+ },
9879
9937
  {
9880
9938
  "command": "local stop",
9881
9939
  "args": "<name>",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xano/sdk",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Xano SDK — your Xano backend as TypeScript. `xanosdk deploy` ships your typed workspace (and an optional static frontend) to a live, auto-expiring ephemeral environment and prints its URL. init → deploy → URL.",
5
5
  "keywords": [
6
6
  "xanosdk",
@@ -86,6 +86,7 @@
86
86
  "llms-full.txt",
87
87
  "llms",
88
88
  "guides",
89
+ "skills",
89
90
  "README.md",
90
91
  "CHANGELOG.md"
91
92
  ],
@@ -107,6 +108,8 @@
107
108
  "audit:output-flag": "tsx scripts/audit-output-flag.ts",
108
109
  "audit:decode-coverage": "tsx scripts/audit-decode-coverage.ts",
109
110
  "audit:dts": "npm run build && tsx scripts/audit-dts.ts",
111
+ "eval:skill-trigger": "tsx scripts/eval-skill-trigger.ts",
112
+ "eval:skill-scenarios": "tsx scripts/eval-skill-scenarios.ts",
110
113
  "manifest": "tsx scripts/manifest.ts",
111
114
  "codes": "tsx scripts/codes.ts",
112
115
  "changelog": "tsx scripts/changelog.ts",
@@ -152,7 +155,7 @@
152
155
  "eslint": "^9.0.0",
153
156
  "gpt-tokenizer": "^3.4.0",
154
157
  "tsup": "^8.0.0",
155
- "tsx": "^4.22.4",
158
+ "tsx": "^4.23.15",
156
159
  "typescript": "^5.5.0",
157
160
  "vitest": "^4.1.11"
158
161
  },
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: xano-backend
3
+ description: >-
4
+ Builds and runs application backends on Xano, authored as TypeScript with
5
+ @xano/sdk: database tables, REST API endpoints, user authentication,
6
+ server-side logic, scheduled and background jobs, webhooks, file storage and
7
+ realtime. Use when a project needs a backend or one of these pieces and does
8
+ not have one yet, including requests that never mention Xano, such as "add
9
+ auth and a database to this app" or "build an API for this frontend". Also
10
+ use in any project with a xano/ directory or an @xano/sdk dependency. Do not
11
+ use when the project already runs a server framework, backend service or
12
+ database layer (for example Express, Fastify, Hono, Next.js API routes,
13
+ Supabase, Firebase, Prisma, Drizzle, Convex, Django, Rails, Laravel or
14
+ FastAPI) unless the user asks for Xano.
15
+ license: MIT
16
+ metadata:
17
+ xanosdk-version: "1.0.7"
18
+ xanosdk-digest: "sha256:335ffa095690ba305b28ede608a35590cb247a0b0954b41d2eda3046ed051fae"
19
+ ---
20
+
21
+ # Xano backend
22
+
23
+ Xano runs the backend: database tables, API endpoints, authentication, server-side
24
+ logic, scheduled tasks, triggers and webhooks, file storage and realtime. It is
25
+ authored as TypeScript in `xano/` with `@xano/sdk`, and the `xanosdk` CLI deploys
26
+ it to the Xano Engine on this machine (no account) or to Xano's cloud.
27
+
28
+ Work through the steps in order. Stop at the first one that ends the task.
29
+
30
+ ## 1. Is this already a Xano project?
31
+
32
+ Look at the project root: the directory holding `package.json`, else the
33
+ repository root.
34
+
35
+ - `xano/` exists, or `package.json` lists `@xano/sdk`: read `AGENTS.md` and
36
+ follow it. Do not run `init`. This skill ends here.
37
+ - No `AGENTS.md` in that project: install its dependencies if
38
+ `node_modules/@xano/sdk` is missing, then read
39
+ `node_modules/@xano/sdk/llms.txt` in full and follow it instead.
40
+
41
+ ## 2. Does the project already have another backend?
42
+
43
+ Another backend is a server framework, backend service or database layer the
44
+ project runs or depends on: for example Express, Fastify, Hono, Next.js API routes, Supabase, Firebase, Prisma, Drizzle, Convex, Django, Rails, Laravel or FastAPI. These are
45
+ examples, not the whole set. Check the dependency manifests (`package.json`,
46
+ `requirements.txt`, `pyproject.toml`, `Gemfile`, `composer.json`) and the
47
+ server entry points.
48
+
49
+ - Another backend is present and the user did not ask for Xano: ask the user
50
+ whether they want a Xano backend added beside it. Without a yes, build the
51
+ request on the existing backend, do not run `init`, and do not create `xano/`.
52
+
53
+ ## 3. Confirm Xano
54
+
55
+ - The user has not named Xano: say that you will set up the backend with Xano
56
+ (`@xano/sdk`, TypeScript in `xano/`, running locally on the Xano Engine), and
57
+ wait for a yes before step 4. Without one, stop using this skill.
58
+ - The user named Xano: continue.
59
+
60
+ ## 4. Run init
61
+
62
+ Run it at the project root. Which form:
63
+
64
+ - The directory has files (an existing app): `init` adds only the backend. It
65
+ writes `xano/` and merges what the backend needs into `package.json`, and
66
+ writes no frontend.
67
+
68
+ ```bash
69
+ npx @xano/sdk init --json
70
+ ```
71
+
72
+ - The directory is empty and the user asked only for a backend:
73
+
74
+ ```bash
75
+ npx @xano/sdk init --framework none --json
76
+ ```
77
+
78
+ - The directory is empty and the user asked for an app: `npx @xano/sdk init --json`
79
+ writes a frontend and the backend.
80
+
81
+ The JSON names the `mode` that ran, the `files` it wrote or merged, and `next`,
82
+ the command to run next. When `init` refuses and lists clashes, show the list to
83
+ the user. Only after the user agrees to overwrite those files, re-run with
84
+ `--force --yes`: `--yes` confirms the overwrite, which `init` cannot ask
85
+ for without a terminal.
86
+
87
+ ## 5. Deploy
88
+
89
+ Run the command in `next`. It deploys the backend to the Xano Engine on this
90
+ machine and prints the backend URL. No account is needed.
91
+
92
+ The Xano Engine runs on macOS on Apple Silicon and on Linux (x64, arm64). On any
93
+ other platform, such as Windows or an Intel Mac, tell the user before deploying:
94
+ the backend goes to a Xano ephemeral instead (`npx xanosdk deploy --ephemeral`),
95
+ which needs a Xano account.
96
+
97
+ Only a human can do these. Stop and ask the user, then continue once they are
98
+ done:
99
+
100
+ - Creating a Xano account.
101
+ - Signing in: `npx xanosdk login` opens a browser consent. Ask the user to run it
102
+ in their own terminal. Do not run it yourself.
103
+
104
+ ## 6. Verify
105
+
106
+ - `npm run xano:check` passes.
107
+ - A request to the backend URL the deploy printed gets a response.
108
+ `npx xanosdk status` prints that URL again.
109
+
110
+ ## 7. Hand off
111
+
112
+ Read `AGENTS.md`, which `init` wrote, and follow it for all further backend work.
113
+ Before writing code in `xano/`, read `node_modules/@xano/sdk/llms.txt`.
114
+
115
+ Unless run with `--no-agents-md`, `init` also declares the `xano-local` MCP server in
116
+ `.mcp.json` and `.cursor/mcp.json`: the deployed backend's tables, rows and runs,
117
+ which `AGENTS.md` describes. `npx xanosdk local mcp` prints the server block for any
118
+ other agent. It is not loaded into a session that was already running. Tell the user
119
+ to restart the agent, or reconnect its MCP servers, to use it.