specrails-desktop 2.18.2 → 2.19.1

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 (346) hide show
  1. package/README.md +1 -1
  2. package/client/dist/assets/{ActivityFeedPage-mGnv5SOe.js → ActivityFeedPage-C0_k6n5T.js} +1 -1
  3. package/client/dist/assets/AgentBrowserCapture-NHUCEnTh.js +1 -0
  4. package/client/dist/assets/AgentModeCodePane-jddXrhPY.js +2 -0
  5. package/client/dist/assets/AgentsPage-BPjf6bId.js +86 -0
  6. package/client/dist/assets/AnalyticsPage-BaJjj5mO.js +1 -0
  7. package/client/dist/assets/{BarChart-BqHUOnl9.js → BarChart-HPiao--v.js} +1 -1
  8. package/client/dist/assets/CodePage-CAD4KfkC.js +2 -0
  9. package/client/dist/assets/{DesktopAnalyticsPage-CR-m97Ui.js → DesktopAnalyticsPage-B2RBxIvj.js} +1 -1
  10. package/client/dist/assets/DocsDialog-BJDvUEGj.js +11 -0
  11. package/client/dist/assets/DocsPage-B6H-DBs8.js +11 -0
  12. package/client/dist/assets/{ExportDropdown-C-o1Q4ef.js → ExportDropdown-CYMcbLTD.js} +1 -1
  13. package/client/dist/assets/IntegrationsPage-Dx_UpQVk.js +3 -0
  14. package/client/dist/assets/JobDetailPage-BlTnsRAN.js +16 -0
  15. package/client/dist/assets/JobsPage-EB0PbXOk.js +1 -0
  16. package/client/dist/assets/LoopBuilderPage-DfWfhhJY.js +7 -0
  17. package/client/dist/assets/LoopsPage-DCVATTv5.js +1 -0
  18. package/client/dist/assets/{addspec-B9dY_F5T.js → addspec-BXV6sx5l.js} +1 -1
  19. package/client/dist/assets/{addspec-tbxr3sHa.js → addspec-CS895X6A.js} +1 -1
  20. package/client/dist/assets/{addspec-W0r16BOC2.js → addspec-CXfEOrD42.js} +1 -1
  21. package/client/dist/assets/{addspec-D43TlMVp2.js → addspec-D28kw9ow2.js} +1 -1
  22. package/client/dist/assets/{addspec-B9nhMikb.js → addspec-D39EEg02.js} +1 -1
  23. package/client/dist/assets/{addspec-DfgIZ5lO.js → addspec-DC1tgsFG.js} +1 -1
  24. package/client/dist/assets/{addspec-BtNaJHu2.js → addspec-DcHALPEp.js} +1 -1
  25. package/client/dist/assets/{addspec-BloGn_ey.js → addspec-DxW6oPsk.js} +1 -1
  26. package/client/dist/assets/{agent-Bm2tPrdr.js → agent-B5Ycau5M.js} +1 -1
  27. package/client/dist/assets/{agent-DMUrz9ZS2.js → agent-BEz08l4_2.js} +1 -1
  28. package/client/dist/assets/{agent-C4bO1l_v.js → agent-BIX51CEA.js} +1 -1
  29. package/client/dist/assets/{agent-9WdSxPU5.js → agent-Bc9Kwf65.js} +1 -1
  30. package/client/dist/assets/{agent-pO8x4jbR.js → agent-BiM7puyn.js} +1 -1
  31. package/client/dist/assets/{agent-CgKsh88Z2.js → agent-C0kYSv3m2.js} +1 -1
  32. package/client/dist/assets/agent-CCzWlfqs.js +1 -0
  33. package/client/dist/assets/{agent-ASIyVcg0.js → agent-DiCSo31C.js} +1 -1
  34. package/client/dist/assets/{agents-DfGvYtpq2.js → agents-BFrHy5d-2.js} +1 -1
  35. package/client/dist/assets/{agents-Dli56gr82.js → agents-BFy2Kq_k2.js} +1 -1
  36. package/client/dist/assets/{agents-C07al8rI.js → agents-BXDCFJQa.js} +1 -1
  37. package/client/dist/assets/{agents-BAxAwHy-.js → agents-BySH0Gvw.js} +1 -1
  38. package/client/dist/assets/{agents-Eqw_AQ6H.js → agents-CTdwacTO.js} +1 -1
  39. package/client/dist/assets/{agents-BjT_xLjv.js → agents-Cev2oFfX.js} +1 -1
  40. package/client/dist/assets/{agents-BUYBb825.js → agents-CsDEv4Fj.js} +1 -1
  41. package/client/dist/assets/{agents-52t8NVpS.js → agents-z0kA-y0Q.js} +1 -1
  42. package/client/dist/assets/dashboard-Bl2_Yjs6.js +1 -0
  43. package/client/dist/assets/dashboard-C_vS9RaM2.js +1 -0
  44. package/client/dist/assets/dashboard-CcEpALV_.js +1 -0
  45. package/client/dist/assets/dashboard-CfltY66K.js +1 -0
  46. package/client/dist/assets/dashboard-CoED_41r.js +1 -0
  47. package/client/dist/assets/dashboard-DLeC5ziO.js +1 -0
  48. package/client/dist/assets/dashboard-DxEPkALo2.js +1 -0
  49. package/client/dist/assets/dashboard-MgDVmaYS2.js +1 -0
  50. package/client/dist/assets/{dist-js-CUegfF6k.js → dist-js-ClEfL6Bo.js} +1 -1
  51. package/client/dist/assets/{dist-js-BHhtSerX.js → dist-js-b2_z7zAi.js} +1 -1
  52. package/client/dist/assets/index-9yNUBwEi.css +2 -0
  53. package/client/dist/assets/{index-B7vB20Jw.js → index-BeujshsU.js} +57 -57
  54. package/client/dist/assets/{lib-PQoHlR5u.js → lib-CfphudAm.js} +1 -1
  55. package/client/dist/assets/loops-BEUiCzEI.js +1 -0
  56. package/client/dist/assets/loops-BlrQiK122.js +1 -0
  57. package/client/dist/assets/loops-Bs0ectZ32.js +1 -0
  58. package/client/dist/assets/loops-CLZV8HHY2.js +1 -0
  59. package/client/dist/assets/loops-CQuuMlyZ.js +1 -0
  60. package/client/dist/assets/loops-DuuWQWTI.js +1 -0
  61. package/client/dist/assets/loops-KOTryzk5.js +1 -0
  62. package/client/dist/assets/loops-t1mUZtf0.js +1 -0
  63. package/client/dist/assets/nav--1ErXZrS.js +1 -0
  64. package/client/dist/assets/nav-18nqSJ8h.js +1 -0
  65. package/client/dist/assets/nav-BuonHb17.js +1 -0
  66. package/client/dist/assets/nav-C-sCoOLY2.js +1 -0
  67. package/client/dist/assets/nav-ClXz_3Ic2.js +1 -0
  68. package/client/dist/assets/nav-CtqgSQeE2.js +1 -0
  69. package/client/dist/assets/nav-S3YvCaVv.js +1 -0
  70. package/client/dist/assets/nav-czg8NkN-.js +1 -0
  71. package/client/dist/assets/settings-BOZBX-Vq.js +1 -0
  72. package/client/dist/assets/settings-CX29QcQW.js +1 -0
  73. package/client/dist/assets/settings-CfOWHPzc2.js +1 -0
  74. package/client/dist/assets/settings-DaXhxNug2.js +1 -0
  75. package/client/dist/assets/settings-DmyDpuzu.js +1 -0
  76. package/client/dist/assets/settings-DwPRLcxr2.js +1 -0
  77. package/client/dist/assets/settings-MjYVJvDE.js +1 -0
  78. package/client/dist/assets/settings-zJFdTzKE.js +1 -0
  79. package/client/dist/assets/{setup-BYoDYoPY2.js → setup-BmXfxlzA2.js} +1 -1
  80. package/client/dist/assets/{setup-faMApo0U2.js → setup-BxVydxbl2.js} +1 -1
  81. package/client/dist/assets/{setup-C5UbM0RP.js → setup-DIRZ1Lf-.js} +1 -1
  82. package/client/dist/assets/{setup-Bf9eLKxU.js → setup-DwbKSnKQ.js} +1 -1
  83. package/client/dist/assets/{setup-JFkWWZnR.js → setup-Dx13pESZ.js} +1 -1
  84. package/client/dist/assets/{setup-CqGrWb6G.js → setup-G4ZvDKxX.js} +1 -1
  85. package/client/dist/assets/{setup-tloaTobG2.js → setup-SLAi4xxQ2.js} +1 -1
  86. package/client/dist/assets/{setup-4us-Bz3H.js → setup-Z01j3st4.js} +1 -1
  87. package/client/dist/assets/{upload-PnJDPHZH.js → upload-Ox9jUq1X.js} +1 -1
  88. package/client/dist/assets/{value-BTDefcOV.js → value-BeQVX5gN.js} +1 -1
  89. package/client/dist/index.html +10 -10
  90. package/docs/codex.md +5 -5
  91. package/docs/customizing.md +4 -4
  92. package/docs/gemini.md +2 -2
  93. package/docs/getting-started.md +1 -1
  94. package/docs/guide/de/integrations/1-ai-providers.md +2 -2
  95. package/docs/guide/de/integrations/5-mcp-server.md +20 -1
  96. package/docs/guide/de/pipeline/1-rails-and-jobs.md +4 -4
  97. package/docs/guide/de/pipeline/2-the-job-detail-view.md +1 -1
  98. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
  99. package/docs/guide/de/pipeline/5-the-loop-builder.md +2 -2
  100. package/docs/guide/en/integrations/1-ai-providers.md +2 -2
  101. package/docs/guide/en/integrations/5-mcp-server.md +20 -1
  102. package/docs/guide/en/pipeline/1-rails-and-jobs.md +4 -4
  103. package/docs/guide/en/pipeline/2-the-job-detail-view.md +1 -1
  104. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
  105. package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
  106. package/docs/guide/es/integrations/1-ai-providers.md +2 -2
  107. package/docs/guide/es/integrations/5-mcp-server.md +20 -1
  108. package/docs/guide/es/pipeline/1-rails-and-jobs.md +4 -4
  109. package/docs/guide/es/pipeline/2-the-job-detail-view.md +1 -1
  110. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
  111. package/docs/guide/es/pipeline/5-the-loop-builder.md +2 -2
  112. package/docs/guide/fr/integrations/1-ai-providers.md +2 -2
  113. package/docs/guide/fr/integrations/5-mcp-server.md +20 -1
  114. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +4 -4
  115. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +1 -1
  116. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
  117. package/docs/guide/fr/pipeline/5-the-loop-builder.md +2 -2
  118. package/docs/guide/it/integrations/1-ai-providers.md +2 -2
  119. package/docs/guide/it/integrations/5-mcp-server.md +20 -1
  120. package/docs/guide/it/pipeline/1-rails-and-jobs.md +4 -4
  121. package/docs/guide/it/pipeline/2-the-job-detail-view.md +1 -1
  122. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
  123. package/docs/guide/it/pipeline/5-the-loop-builder.md +2 -2
  124. package/docs/guide/ja/integrations/1-ai-providers.md +2 -2
  125. package/docs/guide/ja/integrations/5-mcp-server.md +20 -1
  126. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +4 -4
  127. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +1 -1
  128. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
  129. package/docs/guide/ja/pipeline/5-the-loop-builder.md +2 -2
  130. package/docs/guide/pt/integrations/1-ai-providers.md +2 -2
  131. package/docs/guide/pt/integrations/5-mcp-server.md +20 -1
  132. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +4 -4
  133. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +1 -1
  134. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
  135. package/docs/guide/pt/pipeline/5-the-loop-builder.md +2 -2
  136. package/docs/guide/zh/integrations/1-ai-providers.md +2 -2
  137. package/docs/guide/zh/integrations/5-mcp-server.md +20 -1
  138. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +4 -4
  139. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +1 -1
  140. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
  141. package/docs/guide/zh/pipeline/5-the-loop-builder.md +2 -2
  142. package/docs/internals/switch-to-agent-mode-design.md +301 -0
  143. package/docs/internals/visual-design-audit.md +184 -0
  144. package/docs/mcp.md +26 -1
  145. package/docs/running-pipelines.md +10 -10
  146. package/docs/tracking-cost.md +1 -1
  147. package/package.json +1 -1
  148. package/server/dist/agent-chat-manager.js +107 -33
  149. package/server/dist/agent-chat-router.js +170 -8
  150. package/server/dist/agent-cwd-manager.js +2 -47
  151. package/server/dist/agent-operator-prompt.js +277 -0
  152. package/server/dist/agent-store.js +27 -5
  153. package/server/dist/attachment-manager.js +138 -0
  154. package/server/dist/desktop-db.js +15 -0
  155. package/server/dist/loop-factory.js +12 -2
  156. package/server/dist/mcp/guide.js +186 -51
  157. package/server/dist/mcp/tools/analytics.js +1 -1
  158. package/server/dist/mcp/tools/app-settings.js +45 -5
  159. package/server/dist/mcp/tools/chat.js +9 -2
  160. package/server/dist/mcp/tools/code.js +3 -2
  161. package/server/dist/mcp/tools/jobs.js +18 -6
  162. package/server/dist/mcp/tools/loops.js +57 -5
  163. package/server/dist/mcp/tools/meta.js +43 -3
  164. package/server/dist/mcp/tools/rails.js +6 -6
  165. package/server/dist/mcp/tools/setup.js +2 -1
  166. package/server/dist/mcp/tools/specs.js +60 -38
  167. package/server/dist/mcp/tools/types.js +17 -8
  168. package/server/dist/mcp/tools/watch.js +71 -8
  169. package/server/dist/project-router-helpers.js +1 -1
  170. package/server/dist/project-router-tickets.js +43 -4
  171. package/server/dist/providers/claude-adapter.js +6 -0
  172. package/server/dist/providers/codex-adapter.js +10 -0
  173. package/server/dist/providers/gemini-adapter.js +3 -0
  174. package/server/dist/rails-router.js +8 -17
  175. package/server/dist/spec-models.js +1 -0
  176. package/client/dist/assets/AgentsPage-BH1isg5j.js +0 -86
  177. package/client/dist/assets/AnalyticsPage-ByyshYRI.js +0 -1
  178. package/client/dist/assets/CodePage-CU7T_HYs.js +0 -2
  179. package/client/dist/assets/DocsDialog-CEmZp_8V.js +0 -11
  180. package/client/dist/assets/DocsPage-DYbAQ1AT.js +0 -11
  181. package/client/dist/assets/IntegrationsPage-C6fKdwVH.js +0 -3
  182. package/client/dist/assets/JobDetailPage-CKfIfBgE.js +0 -16
  183. package/client/dist/assets/JobsPage-nBng0riZ.js +0 -1
  184. package/client/dist/assets/LoopBuilderPage-Co_TYqYk.js +0 -7
  185. package/client/dist/assets/LoopsPage-a2hd37Ya.js +0 -1
  186. package/client/dist/assets/agent-Dwkz5mPS.js +0 -1
  187. package/client/dist/assets/dashboard-BTiH361F.js +0 -1
  188. package/client/dist/assets/dashboard-COSm_14E.js +0 -1
  189. package/client/dist/assets/dashboard-CfOs70FN2.js +0 -1
  190. package/client/dist/assets/dashboard-Cyzp4ox9.js +0 -1
  191. package/client/dist/assets/dashboard-CzHDp14_2.js +0 -1
  192. package/client/dist/assets/dashboard-D6Woy2B5.js +0 -1
  193. package/client/dist/assets/dashboard-DwbH4oVH.js +0 -1
  194. package/client/dist/assets/dashboard-cWhU3krA2.js +0 -1
  195. package/client/dist/assets/index-B0FxQALR.css +0 -2
  196. package/client/dist/assets/loops-BDhEfnx82.js +0 -1
  197. package/client/dist/assets/loops-BM5QggwH.js +0 -1
  198. package/client/dist/assets/loops-CPjLAAxj.js +0 -1
  199. package/client/dist/assets/loops-D8Iu6Jss.js +0 -1
  200. package/client/dist/assets/loops-DKnk79TB2.js +0 -1
  201. package/client/dist/assets/loops-DLW0aFMm.js +0 -1
  202. package/client/dist/assets/loops-Dcv3dFy_2.js +0 -1
  203. package/client/dist/assets/loops-y7wFRx6M.js +0 -1
  204. package/client/dist/assets/nav-1hj2izqB2.js +0 -1
  205. package/client/dist/assets/nav-BBUKMAu-2.js +0 -1
  206. package/client/dist/assets/nav-CLqkP-26.js +0 -1
  207. package/client/dist/assets/nav-Cv46L837.js +0 -1
  208. package/client/dist/assets/nav-DE3yWQw6.js +0 -1
  209. package/client/dist/assets/nav-DgA-rjLk2.js +0 -1
  210. package/client/dist/assets/nav-EG2pr6vN.js +0 -1
  211. package/client/dist/assets/nav-r3mIJVfU.js +0 -1
  212. package/client/dist/assets/settings-BKmORxlB2.js +0 -1
  213. package/client/dist/assets/settings-BVv2JgQ8.js +0 -1
  214. package/client/dist/assets/settings-Bghm3pAV.js +0 -1
  215. package/client/dist/assets/settings-BuC_aplX.js +0 -1
  216. package/client/dist/assets/settings-Bw_Qk8E32.js +0 -1
  217. package/client/dist/assets/settings-CAKgJv7p.js +0 -1
  218. package/client/dist/assets/settings-CEUgk1Ck.js +0 -1
  219. package/client/dist/assets/settings-C_PDE20s2.js +0 -1
  220. /package/client/dist/assets/{activity-Uj576ckT.js → activity-BlvN5rhP.js} +0 -0
  221. /package/client/dist/assets/{activity-w1qMFwxh.js → activity-C5SeKbom.js} +0 -0
  222. /package/client/dist/assets/{activity-BySXFT2J2.js → activity-DIJexk6v2.js} +0 -0
  223. /package/client/dist/assets/{activity-B82z3Pna.js → activity-DLdwUYv7.js} +0 -0
  224. /package/client/dist/assets/{activity-BVpZrs0J.js → activity-DOKV_Wyf.js} +0 -0
  225. /package/client/dist/assets/{activity-BId0pwuS2.js → activity-DVuiy8TI2.js} +0 -0
  226. /package/client/dist/assets/{activity-DIWnV0Pl.js → activity-Dsf3J7iW.js} +0 -0
  227. /package/client/dist/assets/{agentstudio-C7xxqVWn.js → agentstudio-B8H2H4Db2.js} +0 -0
  228. /package/client/dist/assets/{agentstudio-D-UoNAIA.js → agentstudio-B9zthaTJ.js} +0 -0
  229. /package/client/dist/assets/{agentstudio-0o3XKrcy.js → agentstudio-BDMpU01s.js} +0 -0
  230. /package/client/dist/assets/{agentstudio-Bu8m5jDw.js → agentstudio-CSZo7p8K.js} +0 -0
  231. /package/client/dist/assets/{agentstudio-ObTpVbBP.js → agentstudio-CdD6J23W.js} +0 -0
  232. /package/client/dist/assets/{agentstudio-PzFB3vfh2.js → agentstudio-D80fZu_M2.js} +0 -0
  233. /package/client/dist/assets/{agentstudio-OJjjz6Uf2.js → agentstudio-EuKglkaF2.js} +0 -0
  234. /package/client/dist/assets/{aiedit-DRrNiaB4.js → aiedit-B_VOTUo42.js} +0 -0
  235. /package/client/dist/assets/{aiedit-sP_iao2j.js → aiedit-Cxoe_0wv.js} +0 -0
  236. /package/client/dist/assets/{aiedit-DAM_WRAl2.js → aiedit-D59sPapq2.js} +0 -0
  237. /package/client/dist/assets/{aiedit-BaLZalLa.js → aiedit-DX3BBpXF.js} +0 -0
  238. /package/client/dist/assets/{aiedit-BIQqv2XM2.js → aiedit-GYOYWCHJ2.js} +0 -0
  239. /package/client/dist/assets/{aiedit-BjlUzasF.js → aiedit-TON-4N9S.js} +0 -0
  240. /package/client/dist/assets/{aiedit-BmDufyGU.js → aiedit-ybQmdsST.js} +0 -0
  241. /package/client/dist/assets/{analytics-MVJRjcY52.js → analytics-B2jjXLCP2.js} +0 -0
  242. /package/client/dist/assets/{analytics-C4z_NgJZ.js → analytics-BTkXLTfa.js} +0 -0
  243. /package/client/dist/assets/{analytics-DL2vJCbq.js → analytics-BotqRU_R.js} +0 -0
  244. /package/client/dist/assets/{analytics-e1mkNTgy2.js → analytics-Ck3vl2Qo2.js} +0 -0
  245. /package/client/dist/assets/{analytics-Ds_PNxtO2.js → analytics-CqMJQb7N.js} +0 -0
  246. /package/client/dist/assets/{analytics-B_rxNC9X.js → analytics-DGOoMkaZ.js} +0 -0
  247. /package/client/dist/assets/{analytics-BDqqCzN9.js → analytics-DL7uwNAI2.js} +0 -0
  248. /package/client/dist/assets/{attachments-BP0Ac1yt.js → attachments-7w-BR2V2.js} +0 -0
  249. /package/client/dist/assets/{attachments-CPBVeHX72.js → attachments-B5QX1Xfa2.js} +0 -0
  250. /package/client/dist/assets/{attachments-Db7JfA8a.js → attachments-BcE7kZG-2.js} +0 -0
  251. /package/client/dist/assets/{attachments-CJaO1vCH.js → attachments-BsJJXFzT.js} +0 -0
  252. /package/client/dist/assets/{attachments-8QCKHCEF2.js → attachments-Cbh4AwjP.js} +0 -0
  253. /package/client/dist/assets/{attachments-CV2uaTGE.js → attachments-D0fGlFve.js} +0 -0
  254. /package/client/dist/assets/{attachments-CaOjdN332.js → attachments-D3DJpd3e2.js} +0 -0
  255. /package/client/dist/assets/{browser-C9rUUxo4.js → browser-9GR11iTi.js} +0 -0
  256. /package/client/dist/assets/{browser-CEqx11iy.js → browser-BOxg0p3n.js} +0 -0
  257. /package/client/dist/assets/{browser-543jbxE4.js → browser-BSh8xUWV.js} +0 -0
  258. /package/client/dist/assets/{browser-CLC0etB_2.js → browser-CaV3BJNY2.js} +0 -0
  259. /package/client/dist/assets/{browser-0xeW8fUa2.js → browser-CmWGMRGf2.js} +0 -0
  260. /package/client/dist/assets/{browser-ExmELH702.js → browser-D6wbpBOL2.js} +0 -0
  261. /package/client/dist/assets/{browser-DyG2l9Wa.js → browser-dsgDU1HB.js} +0 -0
  262. /package/client/dist/assets/{chat-DagUyoVA.js → chat-B90iLDI4.js} +0 -0
  263. /package/client/dist/assets/{chat-Cu6F3d6g2.js → chat-CAo0jCnj2.js} +0 -0
  264. /package/client/dist/assets/{chat-CN8BMAMc.js → chat-CW54IP3u.js} +0 -0
  265. /package/client/dist/assets/{chat-NQPCBQo72.js → chat-CYHUUW0p2.js} +0 -0
  266. /package/client/dist/assets/{chat-CCytD3P8.js → chat-D1PXX_p2.js} +0 -0
  267. /package/client/dist/assets/{chat-IjutwlBg.js → chat-DhpcWjOf.js} +0 -0
  268. /package/client/dist/assets/{chat-vVpwkOp52.js → chat-cFG-UfRA2.js} +0 -0
  269. /package/client/dist/assets/{code-Dhb6jbAU.js → code--qUk_yn-.js} +0 -0
  270. /package/client/dist/assets/{code-Ce-nBIwj.js → code-B1aOMCVV.js} +0 -0
  271. /package/client/dist/assets/{code-BaG05zK62.js → code-B5UrmjaE2.js} +0 -0
  272. /package/client/dist/assets/{code-Dap54vOb.js → code-CjBHU0nw.js} +0 -0
  273. /package/client/dist/assets/{code-_NOCo-Ol2.js → code-Cjv4_HkK2.js} +0 -0
  274. /package/client/dist/assets/{code-32l6Naxu2.js → code-D7GLAjrz2.js} +0 -0
  275. /package/client/dist/assets/{code-C5cibF2F.js → code-DZKjfzBN.js} +0 -0
  276. /package/client/dist/assets/{commands-Cc2WpuXa.js → commands-B9XaopQC.js} +0 -0
  277. /package/client/dist/assets/{commands-k9wbNYoi.js → commands-BCx1uDIE.js} +0 -0
  278. /package/client/dist/assets/{commands-CM99Upsz2.js → commands-Bhw9Hqsa2.js} +0 -0
  279. /package/client/dist/assets/{commands-Bc8y9eNo2.js → commands-D0RnooQF2.js} +0 -0
  280. /package/client/dist/assets/{commands-Bl3-KVfj.js → commands-DuaQT-it.js} +0 -0
  281. /package/client/dist/assets/{commands-DASXJD-l.js → commands-MqNuGGO4.js} +0 -0
  282. /package/client/dist/assets/{commands-C5WQ9blx2.js → commands-oB9q2vy_2.js} +0 -0
  283. /package/client/dist/assets/{common-CHARW6MZ2.js → common-BXzqeuiC2.js} +0 -0
  284. /package/client/dist/assets/{common-0aY9HQBP.js → common-BaJ6MF7T.js} +0 -0
  285. /package/client/dist/assets/{common-CQCJzAQq2.js → common-C-jaOdxz2.js} +0 -0
  286. /package/client/dist/assets/{common-DNhhqjlJ.js → common-CKjy-R8-.js} +0 -0
  287. /package/client/dist/assets/{common-YdyZtmaI2.js → common-CRd-Ge5u2.js} +0 -0
  288. /package/client/dist/assets/{common-5jScBJqt.js → common-DPGR3Tfo.js} +0 -0
  289. /package/client/dist/assets/{common-BdaRciTu.js → common-wEB9RBdf.js} +0 -0
  290. /package/client/dist/assets/{explore-ChtxIiSM.js → explore-B_79NLR5.js} +0 -0
  291. /package/client/dist/assets/{explore-BzdMEpuf.js → explore-D-htKul_.js} +0 -0
  292. /package/client/dist/assets/{explore-B82VMUJ_.js → explore-D5b2jgvR.js} +0 -0
  293. /package/client/dist/assets/{explore-DfcUfiPw2.js → explore-Dvp-5qOw2.js} +0 -0
  294. /package/client/dist/assets/{explore-CbW0381i2.js → explore-FaKfWCr72.js} +0 -0
  295. /package/client/dist/assets/{explore-BGz1rvQE.js → explore-IS8VyaSZ.js} +0 -0
  296. /package/client/dist/assets/{explore-yRF7wFSp2.js → explore-OZhWV0Eb2.js} +0 -0
  297. /package/client/dist/assets/{format-command-D96da4fZ.js → format-command-CHImQv6W.js} +0 -0
  298. /package/client/dist/assets/{integrations-CnrX7vqw2.js → integrations-B97cGWfo2.js} +0 -0
  299. /package/client/dist/assets/{integrations-BJvrlcc7.js → integrations-Bp3leAh3.js} +0 -0
  300. /package/client/dist/assets/{integrations-CPKYkG36.js → integrations-C3Ma3GdM.js} +0 -0
  301. /package/client/dist/assets/{integrations-BA5pM05t.js → integrations-C5MUA-0-.js} +0 -0
  302. /package/client/dist/assets/{integrations-B0OBPU9_.js → integrations-CiQbCn_W.js} +0 -0
  303. /package/client/dist/assets/{integrations-DeJFRyXz2.js → integrations-Du_0rDfi2.js} +0 -0
  304. /package/client/dist/assets/{integrations-DBou159M2.js → integrations-t4X5UVcx2.js} +0 -0
  305. /package/client/dist/assets/{jira-mi37H4Kt.js → jira-B1XaR6fj.js} +0 -0
  306. /package/client/dist/assets/{jira-Srx2P5zS.js → jira-BCHx9zUF.js} +0 -0
  307. /package/client/dist/assets/{jira-DeotPx6P2.js → jira-BqXyykbt2.js} +0 -0
  308. /package/client/dist/assets/{jira-BwLBgmfI2.js → jira-BzFvFn7t2.js} +0 -0
  309. /package/client/dist/assets/{jira-BDgxAFTF2.js → jira-D6IDTIsc2.js} +0 -0
  310. /package/client/dist/assets/{jira-NwlUCcQD.js → jira-DSZ5xFRl.js} +0 -0
  311. /package/client/dist/assets/{jira-D3GGzXOI.js → jira-DdEKW9Pu.js} +0 -0
  312. /package/client/dist/assets/{jobs-D8adm2BX.js → jobs-BX9dP3Qn.js} +0 -0
  313. /package/client/dist/assets/{jobs-B56vQEkh2.js → jobs-BgHEgCWk2.js} +0 -0
  314. /package/client/dist/assets/{jobs-K_Y8KAZ2.js → jobs-CU-khJTt.js} +0 -0
  315. /package/client/dist/assets/{jobs-BYIk6Tg_.js → jobs-Ce0SE81t.js} +0 -0
  316. /package/client/dist/assets/{jobs-C-lM-iax2.js → jobs-CeOcGHd_2.js} +0 -0
  317. /package/client/dist/assets/{jobs-CYdevGgT.js → jobs-Ct5v2p6T.js} +0 -0
  318. /package/client/dist/assets/{jobs-OwM0ZWhI2.js → jobs-m7L0K9uC2.js} +0 -0
  319. /package/client/dist/assets/{mcp-D3E4_Mmk2.js → mcp-4QbfLPa4.js} +0 -0
  320. /package/client/dist/assets/{mcp-B6nwJJmR.js → mcp-CXy61khH.js} +0 -0
  321. /package/client/dist/assets/{mcp-CNgFiTEh.js → mcp-CmOBPDjE.js} +0 -0
  322. /package/client/dist/assets/{mcp-mupPuPDO2.js → mcp-NlLc9T8u2.js} +0 -0
  323. /package/client/dist/assets/{mcp-B4irfLJ2.js → mcp-_DUUXTHB2.js} +0 -0
  324. /package/client/dist/assets/{mcp-BP7PpbDr2.js → mcp-dlOyUQQy2.js} +0 -0
  325. /package/client/dist/assets/{mcp-BOoEGTSQ.js → mcp-zqSVP7nA.js} +0 -0
  326. /package/client/dist/assets/{specs-D4z5d8uq.js → specs-57pue7UQ.js} +0 -0
  327. /package/client/dist/assets/{specs-CWNKAScX2.js → specs-BWQ-0EXt2.js} +0 -0
  328. /package/client/dist/assets/{specs-B8mwScoM2.js → specs-BYSOlQRw2.js} +0 -0
  329. /package/client/dist/assets/{specs-B5XOoH-02.js → specs-CkP0B28v2.js} +0 -0
  330. /package/client/dist/assets/{specs-DgvIRZtM.js → specs-RSYuLgF4.js} +0 -0
  331. /package/client/dist/assets/{specs-DuRzE5wE.js → specs-d-zU7_3Q.js} +0 -0
  332. /package/client/dist/assets/{specs-Bj_3fDrQ.js → specs-nM5Cpcqe.js} +0 -0
  333. /package/client/dist/assets/{terminal-DoMTHedv2.js → terminal-Adi3W-GZ2.js} +0 -0
  334. /package/client/dist/assets/{terminal-DOwfkxqa2.js → terminal-BA6FCZna2.js} +0 -0
  335. /package/client/dist/assets/{terminal-CH0fdHvP.js → terminal-BCIUSkrg.js} +0 -0
  336. /package/client/dist/assets/{terminal-B2sExUis.js → terminal-C8KlD61D.js} +0 -0
  337. /package/client/dist/assets/{terminal-DjSSa5qP.js → terminal-D3RTuBwy.js} +0 -0
  338. /package/client/dist/assets/{terminal-w0i-OCp32.js → terminal-DCkOEjSj2.js} +0 -0
  339. /package/client/dist/assets/{terminal-CPMigUX7.js → terminal-DOuNm2BI.js} +0 -0
  340. /package/client/dist/assets/{tickets-D00mSt832.js → tickets-B2q36GlQ2.js} +0 -0
  341. /package/client/dist/assets/{tickets-CQTana1u.js → tickets-Bsyv_znj.js} +0 -0
  342. /package/client/dist/assets/{tickets-D7CSuWjO.js → tickets-C_UPra_1.js} +0 -0
  343. /package/client/dist/assets/{tickets-heDAaj8C2.js → tickets-D72LbUtU2.js} +0 -0
  344. /package/client/dist/assets/{tickets-DvbFg_-c2.js → tickets-DDjU7UfE2.js} +0 -0
  345. /package/client/dist/assets/{tickets-onKZz6Dd.js → tickets-DR4ZrPMf.js} +0 -0
  346. /package/client/dist/assets/{tickets-Dq7HDy8n.js → tickets-DiUA3rXq.js} +0 -0
@@ -31,6 +31,25 @@ In a client like Claude Desktop or Cursor, the config looks like:
31
31
 
32
32
  Clients that support remote HTTP MCP servers can instead point straight at `http://127.0.0.1:4200/api/mcp` with the token from the panel.
33
33
 
34
+ ### From the terminal: Claude Code, Gemini CLI, Codex CLI
35
+
36
+ Copy your token from **Settings ▸ MCP ▸ Copy token**, then:
37
+
38
+ ```bash
39
+ # Claude Code
40
+ claude mcp add --transport http specrails http://localhost:4200/api/mcp \
41
+ --header "X-Desktop-Token: <your token>"
42
+
43
+ # Gemini CLI
44
+ gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
45
+ --header "X-Desktop-Token: <your token>"
46
+
47
+ # Codex CLI (stdio — register the bridge command shown in Settings ▸ MCP)
48
+ codex mcp add specrails -- <bridge command from Settings ▸ MCP>
49
+ ```
50
+
51
+ The `Authorization: Bearer <token>` header works too. If you changed the app port, swap `4200` for yours.
52
+
34
53
  Once connected, your assistant sees about **18 tools** covering the whole app — projects, specs, rails and jobs, chat/Explore, agents, plugins, Jira, loops, the code explorer, analytics, settings — plus a built-in **guide** tool it reads first so it understands how Specrails works without you explaining anything.
35
54
 
36
55
  ## What you can do with it
@@ -51,7 +70,7 @@ Keep **Destructive** off and it can build all night without ever deleting anythi
51
70
  > *"Check all my projects. Tell me which have specs in the backlog and no rail running, and start the highest-priority one in each."*
52
71
 
53
72
  **Hands-free while you code.** Drive Specrails from your editor or by voice, without switching windows:
54
- > *"Launch rail 0 in ultracode mode with Opus for ticket #42 and tell me when it's done."*
73
+ > *"Launch rail 0 in Freestyle mode with Opus for ticket #42 and tell me when it's done."*
55
74
 
56
75
  **Ask about cost and history.** Your analytics, in plain language:
57
76
  > *"Where did I spend the most on AI this week, by project and by model? Show me the five most expensive tickets."*
@@ -23,7 +23,7 @@ You can have several rails to organise work into named lanes (one for the featur
23
23
  ## Launching a rail on a spec
24
24
 
25
25
  1. **Drag a spec card** from the SpecsBoard onto a rail. The spec's ID shows up in the rail's spec list. (Prefer not to drag? Use the **Move to rail** popover on the spec card — it shows a status dot per rail so you don't drop work onto a busy lane.)
26
- 2. **Pick a Loop** in the rail header. A rail runs a **Loop** — that's the work it performs. The default is the built-in `Implement` loop; you can also pick `Batch`, `Ultracode`, or a custom loop you built yourself. See [The Loop Builder](the-loop-builder).
26
+ 2. **Pick a Loop** in the rail header. A rail runs a **Loop** — that's the work it performs. The default is the built-in `Implement` loop; you can also pick `Batch`, `Freestyle`, or a custom loop you built yourself. See [The Loop Builder](the-loop-builder).
27
27
  3. **Press ▶ Play.**
28
28
 
29
29
  That's it. The rail spins up an AI CLI process in your project and starts the pipeline.
@@ -34,7 +34,7 @@ That's it. The rail spins up an AI CLI process in your project and starts the pi
34
34
  |---------|--------------|
35
35
  | **Status pill** | `idle`, `running`, or `failed`. There's no separate "completed" — a rail returns to `idle` when its job finishes cleanly. |
36
36
  | **Spec list** | The IDs assigned to this rail. Drag more in, drag them out to detach. |
37
- | **Loop picker** | The Loop this rail runs — a built-in (`Implement` / `Batch` / `Ultracode`) or a custom loop. See the table below. Persisted per rail. |
37
+ | **Loop picker** | The Loop this rail runs — a built-in (`Implement` / `Batch` / `Freestyle`) or a custom loop. See the table below. Persisted per rail. |
38
38
  | **Profile picker** | Which agent profile runs (Claude rails only). Only appears once the project has at least one profile. |
39
39
  | **Engine selector** | Which installed provider runs this rail — Claude, Codex, or Gemini. Only renders when the project has more than one provider. See [Picking an engine per rail](picking-an-engine-per-rail). |
40
40
  | **▶ Play / ■ Stop** | Start or cancel. |
@@ -47,9 +47,9 @@ A rail runs a **Loop** — the recipe for the work. Three loops are **built in**
47
47
  |------|---------|--------------|
48
48
  | **Implement** | `/specrails:implement` | One job covering all specs on the rail. Runs the full Architect → Developer → Reviewer → Ship pipeline. The everyday default. |
49
49
  | **Batch** | `/specrails:batch-implement` | One job that works through the rail's specs sequentially, in dependency-aware waves. Best for several related specs. |
50
- | **Ultracode** | Ultracode | Claude implements each spec autonomously, **bypassing** the pipeline. One independent job per spec. Claude only. |
50
+ | **Freestyle** | Freestyle | Claude implements each spec autonomously, **bypassing** the pipeline. One independent job per spec. Claude only. |
51
51
 
52
- Ultracode is the odd one out: it skips the agent chain and hands Claude the raw spec to work on with its native tools. It's open-ended, so pressing Play opens a confirmation first, and a per-rail model picker lets you choose Haiku / Sonnet / Opus. It only appears when the rail's engine is Claude.
52
+ Freestyle is the odd one out: it skips the agent chain and hands Claude the raw spec to work on with its native tools. It's open-ended, so pressing Play opens a confirmation first, and a per-rail model picker lets you choose Haiku / Sonnet / Opus. It only appears when the rail's engine is Claude.
53
53
 
54
54
  Beyond the built-ins, you can **build your own loops** — repeat a verify → fix → verify cycle until a goal is met, chain shell commands between AI steps, and more. Those custom loops appear in the same Loop picker. That's the next big idea: [The Loop Builder](the-loop-builder).
55
55
 
@@ -35,7 +35,7 @@ Each phase is a specialised agent the rail's engine invokes in your project dire
35
35
  | **Reviewer** | `sr-reviewer` | Reviews the output. |
36
36
  | **Ship** | (varies) | Final wrap-up: tests, commit, PR draft. |
37
37
 
38
- Which agent handles each phase is decided by the project's **agent profile**. The baseline trio (`sr-architect`, `sr-developer`, `sr-reviewer`) is always present; routing rules in a profile can add agents or swap which one runs a phase. The phase progress bar only appears when the command actually defines phases — Ultracode jobs (which bypass the pipeline) won't show one.
38
+ Which agent handles each phase is decided by the project's **agent profile**. The baseline trio (`sr-architect`, `sr-developer`, `sr-reviewer`) is always present; routing rules in a profile can add agents or swap which one runs a phase. The phase progress bar only appears when the command actually defines phases — Freestyle jobs (which bypass the pipeline) won't show one.
39
39
 
40
40
  ## Live metrics — honest by design
41
41
 
@@ -24,7 +24,7 @@ All three run the standard **Implement** and **Batch** pipelines. Here's a pract
24
24
 
25
25
  | Engine | Reach for it when… | Notes |
26
26
  |--------|--------------------|-------|
27
- | **Claude** | You want the full feature set: agent profiles, Ultracode, native cost reporting, the richest tool support. The default for most work. | The only engine that supports **agent profiles**, **Ultracode**, and a few Claude-only spec features (Contract Layer, SMASH). |
27
+ | **Claude** | You want the full feature set: agent profiles, Freestyle, native cost reporting, the richest tool support. The default for most work. | The only engine that supports **agent profiles**, **Freestyle**, and a few Claude-only spec features (Contract Layer, SMASH). |
28
28
  | **Codex** | You prefer the OpenAI Codex CLI or want to compare implementations across providers. | `codex` ≥ 0.128.0. No native cost reporting — the app fills in cost from its rate card. Profiles don't apply. |
29
29
  | **Gemini** | You want Google's Gemini CLI, native telemetry, or a cheaper run for routine specs. | `gemini` ≥ 0.11.0 (set `GEMINI_API_KEY`). Native OTLP telemetry. Profiles don't apply. |
30
30
 
@@ -33,7 +33,7 @@ All three run the standard **Implement** and **Batch** pipelines. Here's a pract
33
33
  A few things only work on Claude rails — pick Claude if you need them:
34
34
 
35
35
  - **Agent profiles** — per-agent model routing. On Codex or Gemini rails the run always uses legacy mode and any selected profile is **ignored**. The profile picker is hidden for non-Claude engines.
36
- - **Ultracode (`Ultra` mode)** — the autonomous, pipeline-bypassing mode. The `Ultra` segment and its Haiku/Sonnet/Opus model picker only appear when the rail's engine is Claude.
36
+ - **Freestyle** — the autonomous, pipeline-bypassing mode. The `Freestyle` segment and its Haiku/Sonnet/Opus model picker only appear when the rail's engine is Claude.
37
37
  - **Contract Layer & SMASH** — Claude-only spec-refinement features (these are Add-Spec options, not rail options, but the same constraint applies).
38
38
 
39
39
  If a project mixes engines, the right sidebar only shows sections **every** installed provider supports — so the **Agents** section disappears entirely on a project that includes any non-Claude provider, because profiles are Claude-specific.
@@ -1,6 +1,6 @@
1
1
  # The Loop Builder
2
2
 
3
- A **rail runs a Loop**. The built-in loops (`Implement`, `Batch`, `Ultracode`) cover the everyday cases, but the **Loop Builder** lets you design your own — a visual, n8n-style editor for automation that repeats until a goal is met. This page explains what a loop is, how to build one, and how to run it on a rail.
3
+ A **rail runs a Loop**. The built-in loops (`Implement`, `Batch`, `Freestyle`) cover the everyday cases, but the **Loop Builder** lets you design your own — a visual, n8n-style editor for automation that repeats until a goal is met. This page explains what a loop is, how to build one, and how to run it on a rail.
4
4
 
5
5
  ## Loops and rails — the relationship
6
6
 
@@ -11,7 +11,7 @@ A **loop** is the *recipe* for the work; a **rail** is the *lane* that runs it a
11
11
  ─────────────────────────── ─────────────
12
12
  Implement (built-in) Rail 1
13
13
  Batch (built-in) pick on ► Loop: Verify-until-green
14
- Ultracode (built-in) ▶ Play
14
+ Freestyle (built-in) ▶ Play
15
15
  Verify-until-green (yours)
16
16
  ```
17
17
 
@@ -6,7 +6,7 @@ Specrails no está atado a una única IA. Cada parte de la app que habla con una
6
6
 
7
7
  | Proveedor | CLI | Creado por | Notas |
8
8
  |---|---|---|---|
9
- | **Claude** | `claude` | Anthropic | El más completo. El único proveedor para Agents (perfiles) y los rails Ultracode, y para Contract Refine. |
9
+ | **Claude** | `claude` | Anthropic | El más completo. El único proveedor para Agents (perfiles) y los rails Freestyle, y para Contract Refine. |
10
10
  | **Codex** | `codex` | OpenAI | Necesita codex `0.128.0+`. Lee sus servidores MCP desde tu `~/.codex/config.toml` global. |
11
11
  | **Gemini** | `gemini` | Google | Necesita gemini `0.11.0+`. Usa telemetría nativa y un archivo de instrucciones `GEMINI.md`. |
12
12
 
@@ -43,7 +43,7 @@ Tu elección se recuerda por proyecto y toma el proveedor principal por defecto,
43
43
  Un puñado de funciones son específicas de Claude por naturaleza, así que se ocultan o se omiten cuando hay otro proveedor en juego:
44
44
 
45
45
  - **Agents (perfiles)** — el catálogo de agentes por proyecto y el enrutado de modelos. Se oculta en cualquier proyecto que incluya un proveedor que no sea Claude.
46
- - **Rails Ultracode** — siempre se ejecutan con Claude.
46
+ - **Rails Freestyle** — siempre se ejecutan con Claude.
47
47
  - **Contract Refine** — la pasada adicional de «Contract Layer» sobre una spec confirmada solo se ejecuta cuando el proveedor de la conversación es Claude.
48
48
  - **Modos avanzados de Añadir spec** (SMASH / Contract Layer) — se ocultan para los motores que no sean Claude.
49
49
 
@@ -31,6 +31,25 @@ En un cliente como Claude Desktop o Cursor, la configuración tiene este aspecto
31
31
 
32
32
  Los clientes que admiten servidores MCP remotos por HTTP pueden, en su lugar, apuntar directamente a `http://127.0.0.1:4200/api/mcp` con el token del panel.
33
33
 
34
+ ### Desde la terminal: Claude Code, Gemini CLI, Codex CLI
35
+
36
+ Copia tu token desde **Ajustes ▸ MCP ▸ Copiar token** y después:
37
+
38
+ ```bash
39
+ # Claude Code
40
+ claude mcp add --transport http specrails http://localhost:4200/api/mcp \
41
+ --header "X-Desktop-Token: <tu token>"
42
+
43
+ # Gemini CLI
44
+ gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
45
+ --header "X-Desktop-Token: <tu token>"
46
+
47
+ # Codex CLI (stdio — registra el comando del bridge que muestra Ajustes ▸ MCP)
48
+ codex mcp add specrails -- <comando del bridge de Ajustes ▸ MCP>
49
+ ```
50
+
51
+ La cabecera `Authorization: Bearer <token>` también funciona. Si cambiaste el puerto de la app, sustituye `4200` por el tuyo.
52
+
34
53
  Una vez conectado, tu asistente ve unas **18 herramientas** que cubren toda la app — proyectos, specs, rails y trabajos, chat/Explore, agentes, plugins, Jira, loops, el explorador de código, analíticas, configuración — más una herramienta de **guía** incorporada que lee primero para entender cómo funciona Specrails sin que tú tengas que explicar nada.
35
54
 
36
55
  ## Qué puedes hacer con él
@@ -51,7 +70,7 @@ Mantén **Destructivo** desactivado y podrá trabajar toda la noche sin borrar n
51
70
  > *"Revisa todos mis proyectos. Dime cuáles tienen specs en el backlog y ningún rail en marcha, y arranca el de mayor prioridad en cada uno."*
52
71
 
53
72
  **Sin manos mientras programas.** Maneja Specrails desde tu editor o por voz, sin cambiar de ventana:
54
- > *"Lanza el rail 0 en modo ultracode con Opus para el ticket #42 y avísame cuando termine."*
73
+ > *"Lanza el rail 0 en modo Freestyle con Opus para el ticket #42 y avísame cuando termine."*
55
74
 
56
75
  **Pregunta por el coste y el historial.** Tus analíticas, en lenguaje natural:
57
76
  > *"¿Dónde he gastado más en IA esta semana, por proyecto y por modelo? Enséñame los cinco tickets más caros."*
@@ -23,7 +23,7 @@ Puedes tener varios rails para organizar el trabajo en carriles con nombre (uno
23
23
  ## Lanzar un rail sobre una spec
24
24
 
25
25
  1. **Arrastra una tarjeta de spec** desde el SpecsBoard hasta un rail. El ID de la spec aparece en la lista de specs del rail. (¿Prefieres no arrastrar? Usa el popover **Mover a rail** en la tarjeta de la spec — muestra un punto de estado por cada rail para que no dejes trabajo en un carril ocupado.)
26
- 2. **Elige un Loop** en la cabecera del rail. Un rail ejecuta un **Loop** — eso es el trabajo que realiza. El predeterminado es el loop `Implement` integrado; también puedes elegir `Batch`, `Ultracode` o un loop personalizado que hayas construido tú mismo. Mira [El Loop Builder](the-loop-builder).
26
+ 2. **Elige un Loop** en la cabecera del rail. Un rail ejecuta un **Loop** — eso es el trabajo que realiza. El predeterminado es el loop `Implement` integrado; también puedes elegir `Batch`, `Freestyle` o un loop personalizado que hayas construido tú mismo. Mira [El Loop Builder](the-loop-builder).
27
27
  3. **Pulsa ▶ Play.**
28
28
 
29
29
  Eso es todo. El rail arranca un proceso de la CLI de IA en tu proyecto y empieza el pipeline.
@@ -34,7 +34,7 @@ Eso es todo. El rail arranca un proceso de la CLI de IA en tu proyecto y empieza
34
34
  |---------|--------------|
35
35
  | **Pastilla de estado** | `idle`, `running` o `failed`. No hay un estado "completed" aparte — un rail vuelve a `idle` cuando su job termina limpiamente. |
36
36
  | **Lista de specs** | Los IDs asignados a este rail. Arrastra más para añadirlas, o sácalas para desvincularlas. |
37
- | **Selector de Loop** | El Loop que ejecuta este rail — uno integrado (`Implement` / `Batch` / `Ultracode`) o un loop personalizado. Mira la tabla de más abajo. Se recuerda por rail. |
37
+ | **Selector de Loop** | El Loop que ejecuta este rail — uno integrado (`Implement` / `Batch` / `Freestyle`) o un loop personalizado. Mira la tabla de más abajo. Se recuerda por rail. |
38
38
  | **Selector de perfil** | Qué perfil de agentes se ejecuta (solo en rails de Claude). Solo aparece cuando el proyecto tiene al menos un perfil. |
39
39
  | **Selector de motor** | Qué proveedor instalado ejecuta este rail — Claude, Codex o Gemini. Solo se muestra cuando el proyecto tiene más de un proveedor. Mira [Elegir un motor por rail](picking-an-engine-per-rail). |
40
40
  | **▶ Play / ■ Stop** | Iniciar o cancelar. |
@@ -47,9 +47,9 @@ Un rail ejecuta un **Loop** — la receta del trabajo. Tres loops están **integ
47
47
  |------|---------|--------------|
48
48
  | **Implement** | `/specrails:implement` | Un job que cubre todas las specs del rail. Ejecuta el pipeline completo Architect → Developer → Reviewer → Ship. El predeterminado del día a día. |
49
49
  | **Batch** | `/specrails:batch-implement` | Un job que recorre las specs del rail de forma secuencial, en oleadas según sus dependencias. Lo mejor para varias specs relacionadas. |
50
- | **Ultracode** | Ultracode | Claude implementa cada spec de forma autónoma, **saltándose** el pipeline. Un job independiente por spec. Solo Claude. |
50
+ | **Freestyle** | Freestyle | Claude implementa cada spec de forma autónoma, **saltándose** el pipeline. Un job independiente por spec. Solo Claude. |
51
51
 
52
- Ultracode es el caso especial: se salta la cadena de agentes y le entrega a Claude la spec en bruto para que la trabaje con sus herramientas nativas. Es de final abierto, así que al pulsar Play primero se abre una confirmación, y un selector de modelo por rail te deja elegir Haiku / Sonnet / Opus. Solo aparece cuando el motor del rail es Claude.
52
+ Freestyle es el caso especial: se salta la cadena de agentes y le entrega a Claude la spec en bruto para que la trabaje con sus herramientas nativas. Es de final abierto, así que al pulsar Play primero se abre una confirmación, y un selector de modelo por rail te deja elegir Haiku / Sonnet / Opus. Solo aparece cuando el motor del rail es Claude.
53
53
 
54
54
  Más allá de los integrados, puedes **construir tus propios loops** — repetir un ciclo verify → fix → verify hasta cumplir un objetivo, encadenar comandos de shell entre pasos de IA y más. Esos loops personalizados aparecen en el mismo selector de Loop. Esa es la siguiente gran idea: [El Loop Builder](the-loop-builder).
55
55
 
@@ -35,7 +35,7 @@ Cada fase es un agente especializado que el motor del rail invoca en el director
35
35
  | **Reviewer** | `sr-reviewer` | Revisa el resultado. |
36
36
  | **Ship** | (varía) | Cierre final: tests, commit, borrador de PR. |
37
37
 
38
- Qué agente se encarga de cada fase lo decide el **perfil de agentes** del proyecto. El trío base (`sr-architect`, `sr-developer`, `sr-reviewer`) está siempre presente; las reglas de enrutamiento de un perfil pueden añadir agentes o cambiar cuál ejecuta una fase. La barra de progreso de fases solo aparece cuando el comando define realmente fases — los jobs de Ultracode (que se saltan el pipeline) no mostrarán ninguna.
38
+ Qué agente se encarga de cada fase lo decide el **perfil de agentes** del proyecto. El trío base (`sr-architect`, `sr-developer`, `sr-reviewer`) está siempre presente; las reglas de enrutamiento de un perfil pueden añadir agentes o cambiar cuál ejecuta una fase. La barra de progreso de fases solo aparece cuando el comando define realmente fases — los jobs de Freestyle (que se saltan el pipeline) no mostrarán ninguna.
39
39
 
40
40
  ## Métricas en vivo — honestas por diseño
41
41
 
@@ -24,7 +24,7 @@ Los tres ejecutan los pipelines estándar **Implement** y **Batch**. Aquí tiene
24
24
 
25
25
  | Motor | Recurre a él cuando… | Notas |
26
26
  |--------|--------------------|-------|
27
- | **Claude** | Quieres el conjunto completo de funciones: perfiles de agentes, Ultracode, reporte de coste nativo, el soporte de herramientas más rico. El predeterminado para la mayoría del trabajo. | El único motor que admite **perfiles de agentes**, **Ultracode** y algunas funciones de spec exclusivas de Claude (Contract Layer, SMASH). |
27
+ | **Claude** | Quieres el conjunto completo de funciones: perfiles de agentes, Freestyle, reporte de coste nativo, el soporte de herramientas más rico. El predeterminado para la mayoría del trabajo. | El único motor que admite **perfiles de agentes**, **Freestyle** y algunas funciones de spec exclusivas de Claude (Contract Layer, SMASH). |
28
28
  | **Codex** | Prefieres la CLI de OpenAI Codex o quieres comparar implementaciones entre proveedores. | `codex` ≥ 0.128.0. Sin reporte de coste nativo — la app rellena el coste desde su tarifario. Los perfiles no aplican. |
29
29
  | **Gemini** | Quieres la CLI de Gemini de Google, telemetría nativa o una ejecución más barata para specs rutinarias. | `gemini` ≥ 0.11.0 (define `GEMINI_API_KEY`). Telemetría OTLP nativa. Los perfiles no aplican. |
30
30
 
@@ -33,7 +33,7 @@ Los tres ejecutan los pipelines estándar **Implement** y **Batch**. Aquí tiene
33
33
  Algunas cosas solo funcionan en rails de Claude — elige Claude si las necesitas:
34
34
 
35
35
  - **Perfiles de agentes** — enrutamiento de modelo por agente. En rails de Codex o Gemini la ejecución siempre usa el modo legacy y cualquier perfil seleccionado se **ignora**. El selector de perfil se oculta para los motores que no son Claude.
36
- - **Ultracode (modo `Ultra`)** — el modo autónomo que se salta el pipeline. El segmento `Ultra` y su selector de modelo Haiku/Sonnet/Opus solo aparecen cuando el motor del rail es Claude.
36
+ - **Freestyle** — el modo autónomo que se salta el pipeline. El segmento `Freestyle` y su selector de modelo Haiku/Sonnet/Opus solo aparecen cuando el motor del rail es Claude.
37
37
  - **Contract Layer y SMASH** — funciones de refinamiento de spec exclusivas de Claude (son opciones de Add-Spec, no de rail, pero aplica la misma restricción).
38
38
 
39
39
  Si un proyecto mezcla motores, la barra lateral derecha solo muestra las secciones que **todos** los proveedores instalados admiten — así, la sección **Agents** desaparece por completo en un proyecto que incluya cualquier proveedor que no sea Claude, porque los perfiles son específicos de Claude.
@@ -1,6 +1,6 @@
1
1
  # El Loop Builder
2
2
 
3
- Un **rail ejecuta un Loop**. Los loops integrados (`Implement`, `Batch`, `Ultracode`) cubren los casos del día a día, pero el **Loop Builder** te permite diseñar el tuyo propio — un editor visual al estilo n8n para automatizaciones que se repiten hasta cumplir un objetivo. Esta página explica qué es un loop, cómo construir uno y cómo ejecutarlo en un rail.
3
+ Un **rail ejecuta un Loop**. Los loops integrados (`Implement`, `Batch`, `Freestyle`) cubren los casos del día a día, pero el **Loop Builder** te permite diseñar el tuyo propio — un editor visual al estilo n8n para automatizaciones que se repiten hasta cumplir un objetivo. Esta página explica qué es un loop, cómo construir uno y cómo ejecutarlo en un rail.
4
4
 
5
5
  ## Loops y rails — la relación
6
6
 
@@ -11,7 +11,7 @@ Un **loop** es la *receta* del trabajo; un **rail** es el *carril* que la ejecut
11
11
  ─────────────────────────── ─────────────
12
12
  Implement (integrado) Rail 1
13
13
  Batch (integrado) elige en ► Loop: Verify-until-green
14
- Ultracode (integrado) ▶ Play
14
+ Freestyle (integrado) ▶ Play
15
15
  Verify-until-green (tuyo)
16
16
  ```
17
17
 
@@ -6,7 +6,7 @@ Specrails n'est lié à aucune IA en particulier. Chaque endroit de l'app qui di
6
6
 
7
7
  | Fournisseur | CLI | Édité par | Notes |
8
8
  |---|---|---|---|
9
- | **Claude** | `claude` | Anthropic | Le plus complet. Seul fournisseur pour les Agents (profils), les rails Ultracode et le Contract Refine. |
9
+ | **Claude** | `claude` | Anthropic | Le plus complet. Seul fournisseur pour les Agents (profils), les rails Freestyle et le Contract Refine. |
10
10
  | **Codex** | `codex` | OpenAI | Nécessite codex `0.128.0+`. Lit ses serveurs MCP depuis votre fichier global `~/.codex/config.toml`. |
11
11
  | **Gemini** | `gemini` | Google | Nécessite gemini `0.11.0+`. Utilise une télémétrie native et un fichier d'instructions `GEMINI.md`. |
12
12
 
@@ -43,7 +43,7 @@ Votre choix est mémorisé par projet, avec le fournisseur principal comme valeu
43
43
  Une poignée de fonctionnalités sont par nature propres à Claude : elles sont donc soit masquées, soit ignorées lorsqu'un autre fournisseur est en jeu :
44
44
 
45
45
  - **Agents (profils)** — le catalogue d'agents par projet et le routage des modèles. Masqué sur tout projet incluant un fournisseur autre que Claude.
46
- - **Rails Ultracode** — toujours exécutés sur Claude.
46
+ - **Rails Freestyle** — toujours exécutés sur Claude.
47
47
  - **Contract Refine** — la passe supplémentaire « Contract Layer » sur une spec validée ne s'exécute que lorsque le fournisseur de la conversation est Claude.
48
48
  - **Modes avancés d'Ajouter une spec** (SMASH / Contract Layer) — masqués pour les moteurs autres que Claude.
49
49
 
@@ -31,6 +31,25 @@ Dans un client comme Claude Desktop ou Cursor, la configuration ressemble à cec
31
31
 
32
32
  Les clients qui prennent en charge les serveurs MCP HTTP distants peuvent à la place pointer directement vers `http://127.0.0.1:4200/api/mcp` avec le jeton du panneau.
33
33
 
34
+ ### Depuis le terminal : Claude Code, Gemini CLI, Codex CLI
35
+
36
+ Copiez votre jeton depuis **Réglages ▸ MCP ▸ Copier le jeton**, puis :
37
+
38
+ ```bash
39
+ # Claude Code
40
+ claude mcp add --transport http specrails http://localhost:4200/api/mcp \
41
+ --header "X-Desktop-Token: <votre jeton>"
42
+
43
+ # Gemini CLI
44
+ gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
45
+ --header "X-Desktop-Token: <votre jeton>"
46
+
47
+ # Codex CLI (stdio — enregistrez la commande du bridge affichée dans Réglages ▸ MCP)
48
+ codex mcp add specrails -- <commande du bridge depuis Réglages ▸ MCP>
49
+ ```
50
+
51
+ L'en-tête `Authorization: Bearer <token>` fonctionne aussi. Si vous avez changé le port de l'app, remplacez `4200`.
52
+
34
53
  Une fois connecté, votre assistant voit environ **18 outils** couvrant toute l'app — projets, specs, rails et jobs, chat/Explore, agents, plugins, Jira, loops, l'explorateur de code, les analyses, les paramètres — plus un outil **guide** intégré qu'il lit en premier afin de comprendre le fonctionnement de Specrails sans que vous ayez à expliquer quoi que ce soit.
35
54
 
36
55
  ## Ce que vous pouvez en faire
@@ -51,7 +70,7 @@ Gardez **Destructif** désactivé et il peut construire toute la nuit sans jamai
51
70
  > *« Vérifie tous mes projets. Dis-moi lesquels ont des specs dans le backlog sans aucun rail en cours, et démarre la plus prioritaire dans chacun. »*
52
71
 
53
72
  **Sans les mains pendant que vous codez.** Pilotez Specrails depuis votre éditeur ou à la voix, sans changer de fenêtre :
54
- > *« Lance le rail 0 en mode ultracode avec Opus pour le ticket #42 et préviens-moi quand c'est terminé. »*
73
+ > *« Lance le rail 0 en mode Freestyle avec Opus pour le ticket #42 et préviens-moi quand c'est terminé. »*
55
74
 
56
75
  **Interrogez les coûts et l'historique.** Vos analyses, en langage clair :
57
76
  > *« Où ai-je le plus dépensé en IA cette semaine, par projet et par modèle ? Montre-moi les cinq tickets les plus coûteux. »*
@@ -23,7 +23,7 @@ Vous pouvez avoir plusieurs rails pour organiser le travail en voies nommées (u
23
23
  ## Lancer un rail sur un spec
24
24
 
25
25
  1. **Glissez une carte de spec** depuis le SpecsBoard sur un rail. L'ID du spec apparaît dans la liste de specs du rail. (Vous préférez ne pas glisser ? Utilisez le popover **Move to rail** sur la carte de spec — il affiche un point de statut par rail pour que vous ne déposiez pas de travail sur une voie occupée.)
26
- 2. **Choisissez un Loop** dans l'en-tête du rail. Un rail exécute un **Loop** — c'est le travail qu'il effectue. Par défaut, c'est le Loop intégré `Implement` ; vous pouvez aussi choisir `Batch`, `Ultracode`, ou un loop personnalisé que vous avez construit vous-même. Voir [Le Loop Builder](the-loop-builder).
26
+ 2. **Choisissez un Loop** dans l'en-tête du rail. Un rail exécute un **Loop** — c'est le travail qu'il effectue. Par défaut, c'est le Loop intégré `Implement` ; vous pouvez aussi choisir `Batch`, `Freestyle`, ou un loop personnalisé que vous avez construit vous-même. Voir [Le Loop Builder](the-loop-builder).
27
27
  3. **Appuyez sur ▶ Play.**
28
28
 
29
29
  Voilà. Le rail démarre un processus AI CLI dans votre projet et lance le pipeline.
@@ -34,7 +34,7 @@ Voilà. Le rail démarre un processus AI CLI dans votre projet et lance le pipel
34
34
  |---------|--------------|
35
35
  | **Pastille de statut** | `idle`, `running`, ou `failed`. Il n'y a pas de « completed » séparé — un rail revient à `idle` quand son job se termine proprement. |
36
36
  | **Liste de specs** | Les IDs assignés à ce rail. Glissez-en d'autres, retirez-les pour les détacher. |
37
- | **Sélecteur de Loop** | Le Loop que ce rail exécute — un intégré (`Implement` / `Batch` / `Ultracode`) ou un loop personnalisé. Voir le tableau ci-dessous. Persisté par rail. |
37
+ | **Sélecteur de Loop** | Le Loop que ce rail exécute — un intégré (`Implement` / `Batch` / `Freestyle`) ou un loop personnalisé. Voir le tableau ci-dessous. Persisté par rail. |
38
38
  | **Sélecteur de profil** | Quel profil d'agent s'exécute (rails Claude uniquement). N'apparaît que lorsque le projet a au moins un profil. |
39
39
  | **Sélecteur de moteur** | Quel provider installé exécute ce rail — Claude, Codex, ou Gemini. Ne s'affiche que lorsque le projet a plus d'un provider. Voir [Choisir un moteur par rail](picking-an-engine-per-rail). |
40
40
  | **▶ Play / ■ Stop** | Démarrer ou annuler. |
@@ -47,9 +47,9 @@ Un rail exécute un **Loop** — la recette du travail. Trois loops sont **inté
47
47
  |------|---------|--------------|
48
48
  | **Implement** | `/specrails:implement` | Un seul job couvrant tous les specs du rail. Exécute tout le pipeline Architect → Developer → Reviewer → Ship. Le choix par défaut au quotidien. |
49
49
  | **Batch** | `/specrails:batch-implement` | Un seul job qui traite les specs du rail séquentiellement, en vagues tenant compte des dépendances. Idéal pour plusieurs specs liés. |
50
- | **Ultracode** | Ultracode | Claude implémente chaque spec de manière autonome, en **contournant** le pipeline. Un job indépendant par spec. Claude uniquement. |
50
+ | **Freestyle** | Freestyle | Claude implémente chaque spec de manière autonome, en **contournant** le pipeline. Un job indépendant par spec. Claude uniquement. |
51
51
 
52
- Ultracode est le cas à part : il saute la chaîne d'agents et confie le spec brut à Claude pour qu'il travaille avec ses outils natifs. C'est ouvert, donc appuyer sur Play ouvre d'abord une confirmation, et un sélecteur de modèle par rail vous laisse choisir Haiku / Sonnet / Opus. Il n'apparaît que lorsque le moteur du rail est Claude.
52
+ Freestyle est le cas à part : il saute la chaîne d'agents et confie le spec brut à Claude pour qu'il travaille avec ses outils natifs. C'est ouvert, donc appuyer sur Play ouvre d'abord une confirmation, et un sélecteur de modèle par rail vous laisse choisir Haiku / Sonnet / Opus. Il n'apparaît que lorsque le moteur du rail est Claude.
53
53
 
54
54
  Au-delà des intégrés, vous pouvez **construire vos propres loops** — répéter un cycle verify → fix → verify jusqu'à ce qu'un objectif soit atteint, enchaîner des commandes shell entre les étapes IA, et plus encore. Ces loops personnalisés apparaissent dans le même sélecteur de Loop. C'est la prochaine grande idée : [Le Loop Builder](the-loop-builder).
55
55
 
@@ -35,7 +35,7 @@ Chaque phase est un agent spécialisé que le moteur du rail invoque dans le ré
35
35
  | **Reviewer** | `sr-reviewer` | Relit le résultat. |
36
36
  | **Ship** | (variable) | Finalisation : tests, commit, brouillon de PR. |
37
37
 
38
- Quel agent gère chaque phase est décidé par le **profil d'agent** du projet. Le trio de base (`sr-architect`, `sr-developer`, `sr-reviewer`) est toujours présent ; les règles de routage d'un profil peuvent ajouter des agents ou changer celui qui exécute une phase. La barre de progression des phases n'apparaît que lorsque la commande définit réellement des phases — les jobs Ultracode (qui contournent le pipeline) n'en affichent pas.
38
+ Quel agent gère chaque phase est décidé par le **profil d'agent** du projet. Le trio de base (`sr-architect`, `sr-developer`, `sr-reviewer`) est toujours présent ; les règles de routage d'un profil peuvent ajouter des agents ou changer celui qui exécute une phase. La barre de progression des phases n'apparaît que lorsque la commande définit réellement des phases — les jobs Freestyle (qui contournent le pipeline) n'en affichent pas.
39
39
 
40
40
  ## Métriques en direct — honnêtes par conception
41
41
 
@@ -24,7 +24,7 @@ Les trois exécutent les pipelines standards **Implement** et **Batch**. Voici u
24
24
 
25
25
  | Moteur | À privilégier quand… | Notes |
26
26
  |--------|--------------------|-------|
27
- | **Claude** | Vous voulez l'ensemble complet des fonctionnalités : profils d'agents, Ultracode, rapport de coût natif, le support d'outils le plus riche. Le choix par défaut pour la plupart du travail. | Le seul moteur qui prend en charge les **profils d'agents**, **Ultracode**, et quelques fonctionnalités de spec réservées à Claude (Contract Layer, SMASH). |
27
+ | **Claude** | Vous voulez l'ensemble complet des fonctionnalités : profils d'agents, Freestyle, rapport de coût natif, le support d'outils le plus riche. Le choix par défaut pour la plupart du travail. | Le seul moteur qui prend en charge les **profils d'agents**, **Freestyle**, et quelques fonctionnalités de spec réservées à Claude (Contract Layer, SMASH). |
28
28
  | **Codex** | Vous préférez la CLI Codex d'OpenAI ou vous voulez comparer les implémentations entre fournisseurs. | `codex` ≥ 0.128.0. Pas de rapport de coût natif — l'application complète le coût à partir de sa table de tarifs. Les profils ne s'appliquent pas. |
29
29
  | **Gemini** | Vous voulez la CLI Gemini de Google, la télémétrie native, ou une exécution moins chère pour les specs de routine. | `gemini` ≥ 0.11.0 (définissez `GEMINI_API_KEY`). Télémétrie OTLP native. Les profils ne s'appliquent pas. |
30
30
 
@@ -33,7 +33,7 @@ Les trois exécutent les pipelines standards **Implement** et **Batch**. Voici u
33
33
  Quelques éléments ne fonctionnent que sur les rails Claude — choisissez Claude si vous en avez besoin :
34
34
 
35
35
  - **Profils d'agents** — routage de modèle par agent. Sur les rails Codex ou Gemini, l'exécution utilise toujours le mode legacy et tout profil sélectionné est **ignoré**. Le sélecteur de profil est masqué pour les moteurs non-Claude.
36
- - **Ultracode (mode `Ultra`)** — le mode autonome qui contourne le pipeline. Le segment `Ultra` et son sélecteur de modèle Haiku/Sonnet/Opus n'apparaissent que lorsque le moteur du rail est Claude.
36
+ - **Freestyle** — le mode autonome qui contourne le pipeline. Le segment `Freestyle` et son sélecteur de modèle Haiku/Sonnet/Opus n'apparaissent que lorsque le moteur du rail est Claude.
37
37
  - **Contract Layer et SMASH** — fonctionnalités de raffinement de spec réservées à Claude (ce sont des options d'Add Spec, pas des options de rail, mais la même contrainte s'applique).
38
38
 
39
39
  Si un projet mélange les moteurs, la barre latérale droite n'affiche que les sections prises en charge par **tous** les fournisseurs installés — la section **Agents** disparaît donc entièrement sur un projet qui inclut un fournisseur non-Claude, car les profils sont spécifiques à Claude.
@@ -1,6 +1,6 @@
1
1
  # Le Loop Builder
2
2
 
3
- Un **rail exécute un Loop**. Les loops intégrés (`Implement`, `Batch`, `Ultracode`) couvrent les cas du quotidien, mais le **Loop Builder** vous laisse concevoir les vôtres — un éditeur visuel, de style n8n, pour de l'automatisation qui se répète jusqu'à ce qu'un objectif soit atteint. Cette page explique ce qu'est un loop, comment en construire un, et comment l'exécuter sur un rail.
3
+ Un **rail exécute un Loop**. Les loops intégrés (`Implement`, `Batch`, `Freestyle`) couvrent les cas du quotidien, mais le **Loop Builder** vous laisse concevoir les vôtres — un éditeur visuel, de style n8n, pour de l'automatisation qui se répète jusqu'à ce qu'un objectif soit atteint. Cette page explique ce qu'est un loop, comment en construire un, et comment l'exécuter sur un rail.
4
4
 
5
5
  ## Loops et rails — la relation
6
6
 
@@ -11,7 +11,7 @@ Un **loop** est la *recette* du travail ; un **rail** est la *voie* qui l'exécu
11
11
  ─────────────────────────── ─────────────
12
12
  Implement (intégré) Rail 1
13
13
  Batch (intégré) choisir ► Loop: Verify-until-green
14
- Ultracode (intégré) ▶ Play
14
+ Freestyle (intégré) ▶ Play
15
15
  Verify-until-green (le vôtre)
16
16
  ```
17
17
 
@@ -6,7 +6,7 @@ Specrails non è legato a una sola AI. Ogni parte dell'app che dialoga con un'AI
6
6
 
7
7
  | Provider | CLI | Realizzato da | Note |
8
8
  |---|---|---|---|
9
- | **Claude** | `claude` | Anthropic | Il più completo. È l'unico provider per gli Agenti (profili), i rail Ultracode e il Contract Refine. |
9
+ | **Claude** | `claude` | Anthropic | Il più completo. È l'unico provider per gli Agenti (profili), i rail Freestyle e il Contract Refine. |
10
10
  | **Codex** | `codex` | OpenAI | Richiede codex `0.128.0+`. Legge i suoi server MCP dal file globale `~/.codex/config.toml`. |
11
11
  | **Gemini** | `gemini` | Google | Richiede gemini `0.11.0+`. Usa la telemetria nativa e un file di istruzioni `GEMINI.md`. |
12
12
 
@@ -43,7 +43,7 @@ La tua scelta viene ricordata per progetto, con il provider primario come defaul
43
43
  Alcune funzioni sono per natura specifiche di Claude, quindi vengono nascoste o saltate quando è in uso un altro provider:
44
44
 
45
45
  - **Agenti (profili)** — il catalogo degli agenti per progetto e il routing dei modelli. Nascosti in qualsiasi progetto che includa un provider diverso da Claude.
46
- - **Rail Ultracode** — vengono sempre eseguiti su Claude.
46
+ - **Rail Freestyle** — vengono sempre eseguiti su Claude.
47
47
  - **Contract Refine** — il passaggio aggiuntivo "Contract Layer" su una spec confermata viene eseguito solo quando il provider della conversazione è Claude.
48
48
  - **Modalità avanzate di Add Spec** (SMASH / Contract Layer) — nascoste per i motori diversi da Claude.
49
49
 
@@ -31,6 +31,25 @@ In un client come Claude Desktop o Cursor, la configurazione si presenta così:
31
31
 
32
32
  I client che supportano i server MCP HTTP remoti possono invece puntare direttamente a `http://127.0.0.1:4200/api/mcp` con il token preso dal pannello.
33
33
 
34
+ ### Dal terminale: Claude Code, Gemini CLI, Codex CLI
35
+
36
+ Copia il tuo token da **Impostazioni ▸ MCP ▸ Copia token**, poi:
37
+
38
+ ```bash
39
+ # Claude Code
40
+ claude mcp add --transport http specrails http://localhost:4200/api/mcp \
41
+ --header "X-Desktop-Token: <il tuo token>"
42
+
43
+ # Gemini CLI
44
+ gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
45
+ --header "X-Desktop-Token: <il tuo token>"
46
+
47
+ # Codex CLI (stdio — registra il comando bridge mostrato in Impostazioni ▸ MCP)
48
+ codex mcp add specrails -- <comando bridge da Impostazioni ▸ MCP>
49
+ ```
50
+
51
+ Funziona anche l'header `Authorization: Bearer <token>`. Se hai cambiato la porta dell'app, sostituisci `4200`.
52
+
34
53
  Una volta collegato, il tuo assistente vede circa **18 strumenti** che coprono l'intera app — progetti, spec, rail e job, chat/Explore, agenti, plugin, Jira, loop, l'esploratore del codice, le analisi, le impostazioni — più uno strumento **guida** integrato che legge per primo, così capisce come funziona Specrails senza che tu debba spiegargli nulla.
35
54
 
36
55
  ## Cosa puoi farci
@@ -51,7 +70,7 @@ Tieni **Distruttivo** disattivato e potrà lavorare tutta la notte senza mai eli
51
70
  > *"Controlla tutti i miei progetti. Dimmi quali hanno spec nel backlog e nessun rail in esecuzione, e avvia in ognuno quella a priorità più alta."*
52
71
 
53
72
  **Senza mani mentre programmi.** Pilota Specrails dal tuo editor o a voce, senza cambiare finestra:
54
- > *"Lancia il rail 0 in modalità ultracode con Opus per il ticket #42 e dimmi quando ha finito."*
73
+ > *"Lancia il rail 0 in modalità Freestyle con Opus per il ticket #42 e dimmi quando ha finito."*
55
74
 
56
75
  **Chiedi di costi e cronologia.** Le tue analisi, in linguaggio naturale:
57
76
  > *"Dove ho speso di più in AI questa settimana, per progetto e per modello? Mostrami i cinque ticket più costosi."*
@@ -23,7 +23,7 @@ Puoi avere diversi rail per organizzare il lavoro in corsie con un nome (una per
23
23
  ## Avviare un rail su una spec
24
24
 
25
25
  1. **Trascina una scheda spec** dalla SpecsBoard su un rail. L'ID della spec compare nell'elenco di spec del rail. (Preferisci non trascinare? Usa il popover **Sposta su un rail** sulla scheda spec — mostra un pallino di stato per ogni rail, così non scarichi del lavoro su una corsia già occupata.)
26
- 2. **Scegli un Loop** nell'intestazione del rail. Un rail esegue un **Loop** — è il lavoro che svolge. Quello predefinito è il Loop `Implement` integrato; puoi anche scegliere `Batch`, `Ultracode` o un loop personalizzato che hai costruito tu. Vedi [Il Loop Builder](the-loop-builder).
26
+ 2. **Scegli un Loop** nell'intestazione del rail. Un rail esegue un **Loop** — è il lavoro che svolge. Quello predefinito è il Loop `Implement` integrato; puoi anche scegliere `Batch`, `Freestyle` o un loop personalizzato che hai costruito tu. Vedi [Il Loop Builder](the-loop-builder).
27
27
  3. **Premi ▶ Play.**
28
28
 
29
29
  Tutto qui. Il rail avvia un processo CLI AI nel tuo progetto e dà il via alla pipeline.
@@ -34,7 +34,7 @@ Tutto qui. Il rail avvia un processo CLI AI nel tuo progetto e dà il via alla p
34
34
  |---------|--------------|
35
35
  | **Pillola di stato** | `idle`, `running` o `failed`. Non esiste uno stato "completed" separato — un rail torna a `idle` quando il suo job termina senza errori. |
36
36
  | **Elenco spec** | Gli ID assegnati a questo rail. Trascinane altri dentro, oppure fuori per staccarli. |
37
- | **Selettore Loop** | Il Loop che questo rail esegue — uno integrato (`Implement` / `Batch` / `Ultracode`) o un loop personalizzato. Vedi la tabella più sotto. Viene salvato per ogni rail. |
37
+ | **Selettore Loop** | Il Loop che questo rail esegue — uno integrato (`Implement` / `Batch` / `Freestyle`) o un loop personalizzato. Vedi la tabella più sotto. Viene salvato per ogni rail. |
38
38
  | **Selettore profilo** | Quale profilo agente viene eseguito (solo per i rail Claude). Compare solo quando il progetto ha almeno un profilo. |
39
39
  | **Selettore engine** | Quale provider installato esegue questo rail — Claude, Codex o Gemini. Viene mostrato solo quando il progetto ha più di un provider. Vedi [Scegliere un engine per ogni rail](picking-an-engine-per-rail). |
40
40
  | **▶ Play / ■ Stop** | Avvia o annulla. |
@@ -47,9 +47,9 @@ Un rail esegue un **Loop** — la ricetta del lavoro. Tre loop sono **integrati*
47
47
  |------|---------|--------------|
48
48
  | **Implement** | `/specrails:implement` | Un unico job che copre tutte le spec sul rail. Esegue l'intera pipeline Architect → Developer → Reviewer → Ship. L'impostazione predefinita di tutti i giorni. |
49
49
  | **Batch** | `/specrails:batch-implement` | Un unico job che lavora le spec del rail in sequenza, in ondate consapevoli delle dipendenze. Ideale per più spec correlate. |
50
- | **Ultracode** | Ultracode | Claude implementa ogni spec in autonomia, **bypassando** la pipeline. Un job indipendente per ogni spec. Solo Claude. |
50
+ | **Freestyle** | Freestyle | Claude implementa ogni spec in autonomia, **bypassando** la pipeline. Un job indipendente per ogni spec. Solo Claude. |
51
51
 
52
- Ultracode è il caso a sé stante: salta la catena di agenti e affida a Claude la spec grezza, lasciandolo lavorare con i suoi strumenti nativi. È a finalità aperta, quindi premendo Play si apre prima una conferma, e un selettore di modello per rail ti permette di scegliere tra Haiku / Sonnet / Opus. Compare solo quando l'engine del rail è Claude.
52
+ Freestyle è il caso a sé stante: salta la catena di agenti e affida a Claude la spec grezza, lasciandolo lavorare con i suoi strumenti nativi. È a finalità aperta, quindi premendo Play si apre prima una conferma, e un selettore di modello per rail ti permette di scegliere tra Haiku / Sonnet / Opus. Compare solo quando l'engine del rail è Claude.
53
53
 
54
54
  Oltre agli integrati, puoi **costruire i tuoi loop** — ripetere un ciclo verify → fix → verify finché un obiettivo non è raggiunto, concatenare comandi shell tra gli AI Step e altro ancora. Quei loop personalizzati compaiono nello stesso selettore Loop. È la prossima grande idea: [Il Loop Builder](the-loop-builder).
55
55
 
@@ -35,7 +35,7 @@ Ogni fase è un agente specializzato che l'engine del rail invoca nella cartella
35
35
  | **Reviewer** | `sr-reviewer` | Revisiona il risultato. |
36
36
  | **Ship** | (variabile) | Conclusione finale: test, commit, bozza di PR. |
37
37
 
38
- Quale agente gestisce ogni fase lo decide il **profilo agente** del progetto. Il trio di base (`sr-architect`, `sr-developer`, `sr-reviewer`) è sempre presente; le regole di routing in un profilo possono aggiungere agenti o cambiare quale di essi esegue una fase. La barra di avanzamento delle fasi compare solo quando il comando definisce effettivamente delle fasi — i job Ultracode (che bypassano la pipeline) non ne mostrano alcuna.
38
+ Quale agente gestisce ogni fase lo decide il **profilo agente** del progetto. Il trio di base (`sr-architect`, `sr-developer`, `sr-reviewer`) è sempre presente; le regole di routing in un profilo possono aggiungere agenti o cambiare quale di essi esegue una fase. La barra di avanzamento delle fasi compare solo quando il comando definisce effettivamente delle fasi — i job Freestyle (che bypassano la pipeline) non ne mostrano alcuna.
39
39
 
40
40
  ## Metriche live — oneste per scelta
41
41
 
@@ -24,7 +24,7 @@ Tutti e tre eseguono le pipeline standard **Implement** e **Batch**. Ecco una gu
24
24
 
25
25
  | Engine | Scegli questo quando… | Note |
26
26
  |--------|--------------------|-------|
27
- | **Claude** | Vuoi l'intero set di funzionalità: profili agente, Ultracode, reportistica nativa dei costi, il supporto agli strumenti più ricco. L'impostazione predefinita per la maggior parte del lavoro. | L'unico engine che supporta i **profili agente**, **Ultracode** e alcune funzionalità delle spec esclusive di Claude (Contract Layer, SMASH). |
27
+ | **Claude** | Vuoi l'intero set di funzionalità: profili agente, Freestyle, reportistica nativa dei costi, il supporto agli strumenti più ricco. L'impostazione predefinita per la maggior parte del lavoro. | L'unico engine che supporta i **profili agente**, **Freestyle** e alcune funzionalità delle spec esclusive di Claude (Contract Layer, SMASH). |
28
28
  | **Codex** | Preferisci la CLI Codex di OpenAI o vuoi confrontare le implementazioni tra provider diversi. | `codex` ≥ 0.128.0. Nessuna reportistica nativa dei costi — l'app ricava il costo dalla sua tabella prezzi. I profili non si applicano. |
29
29
  | **Gemini** | Vuoi la CLI Gemini di Google, telemetria nativa o un'esecuzione più economica per le spec di routine. | `gemini` ≥ 0.11.0 (imposta `GEMINI_API_KEY`). Telemetria OTLP nativa. I profili non si applicano. |
30
30
 
@@ -33,7 +33,7 @@ Tutti e tre eseguono le pipeline standard **Implement** e **Batch**. Ecco una gu
33
33
  Alcune cose funzionano solo sui rail Claude — scegli Claude se ne hai bisogno:
34
34
 
35
35
  - **Profili agente** — routing del modello per ogni agente. Sui rail Codex o Gemini l'esecuzione usa sempre la modalità legacy e qualsiasi profilo selezionato viene **ignorato**. Il selettore di profilo è nascosto per gli engine diversi da Claude.
36
- - **Ultracode (modalità `Ultra`)** — la modalità autonoma che bypassa la pipeline. Il segmento `Ultra` e il suo selettore di modello Haiku/Sonnet/Opus compaiono solo quando l'engine del rail è Claude.
36
+ - **Freestyle** — la modalità autonoma che bypassa la pipeline. Il segmento `Freestyle` e il suo selettore di modello Haiku/Sonnet/Opus compaiono solo quando l'engine del rail è Claude.
37
37
  - **Contract Layer e SMASH** — funzionalità di affinamento delle spec esclusive di Claude (sono opzioni di Add Spec, non opzioni del rail, ma vale lo stesso vincolo).
38
38
 
39
39
  Se un progetto mescola engine, la barra laterale destra mostra solo le sezioni supportate da **ogni** provider installato — quindi la sezione **Agenti** sparisce del tutto su un progetto che include un provider diverso da Claude, perché i profili sono specifici di Claude.
@@ -1,6 +1,6 @@
1
1
  # Il Loop Builder
2
2
 
3
- Un **rail esegue un Loop**. I loop integrati (`Implement`, `Batch`, `Ultracode`) coprono i casi di tutti i giorni, ma il **Loop Builder** ti permette di progettare i tuoi — un editor visuale in stile n8n per automazioni che si ripetono finché un obiettivo non è raggiunto. Questa pagina spiega cos'è un loop, come costruirne uno e come eseguirlo su un rail.
3
+ Un **rail esegue un Loop**. I loop integrati (`Implement`, `Batch`, `Freestyle`) coprono i casi di tutti i giorni, ma il **Loop Builder** ti permette di progettare i tuoi — un editor visuale in stile n8n per automazioni che si ripetono finché un obiettivo non è raggiunto. Questa pagina spiega cos'è un loop, come costruirne uno e come eseguirlo su un rail.
4
4
 
5
5
  ## Loop e rail — la relazione
6
6
 
@@ -11,7 +11,7 @@ Un **loop** è la *ricetta* del lavoro; un **rail** è la *corsia* che lo esegue
11
11
  ─────────────────────────── ─────────────
12
12
  Implement (integrato) Rail 1
13
13
  Batch (integrato) scegli su ► Loop: Verify-until-green
14
- Ultracode (integrato) ▶ Play
14
+ Freestyle (integrato) ▶ Play
15
15
  Verify-until-green (tuo)
16
16
  ```
17
17
 
@@ -6,7 +6,7 @@ Specrails は特定の AI に縛られません。アプリの中で AI とや
6
6
 
7
7
  | プロバイダー | CLI | 提供元 | 備考 |
8
8
  |---|---|---|---|
9
- | **Claude** | `claude` | Anthropic | 最も機能が充実しています。エージェント(プロファイル)と Ultracode レール、そして Contract Refine を使えるのは Claude だけです。 |
9
+ | **Claude** | `claude` | Anthropic | 最も機能が充実しています。エージェント(プロファイル)と Freestyle レール、そして Contract Refine を使えるのは Claude だけです。 |
10
10
  | **Codex** | `codex` | OpenAI | codex `0.128.0+` が必要です。MCP サーバーはグローバルな `~/.codex/config.toml` から読み込みます。 |
11
11
  | **Gemini** | `gemini` | Google | gemini `0.11.0+` が必要です。ネイティブのテレメトリと `GEMINI.md` 指示ファイルを使用します。 |
12
12
 
@@ -43,7 +43,7 @@ Specrails は特定の AI に縛られません。アプリの中で AI とや
43
43
  いくつかの機能はその性質上 Claude 専用なので、ほかのプロバイダーが使われているときは非表示になるかスキップされます。
44
44
 
45
45
  - **エージェント(プロファイル)** — プロジェクトごとのエージェントカタログとモデルルーティング。Claude 以外のプロバイダーを含むプロジェクトでは非表示になります。
46
- - **Ultracode レール** — 常に Claude で実行されます。
46
+ - **Freestyle レール** — 常に Claude で実行されます。
47
47
  - **Contract Refine** — コミット済みスペックに対する「Contract Layer」の追加パスは、会話のプロバイダーが Claude のときだけ実行されます。
48
48
  - **Add Spec の高度なモード**(SMASH / Contract Layer) — Claude 以外のエンジンでは非表示になります。
49
49
 
@@ -31,6 +31,25 @@ Claude Desktop や Cursor のようなクライアントでは、設定は次の
31
31
 
32
32
  リモートの HTTP MCP サーバーに対応しているクライアントなら、代わりにパネルのトークンを使って `http://127.0.0.1:4200/api/mcp` を直接指すこともできます。
33
33
 
34
+ ### ターミナルから: Claude Code、Gemini CLI、Codex CLI
35
+
36
+ **設定 ▸ MCP ▸ トークンをコピー** からトークンをコピーして、次を実行します:
37
+
38
+ ```bash
39
+ # Claude Code
40
+ claude mcp add --transport http specrails http://localhost:4200/api/mcp \
41
+ --header "X-Desktop-Token: <あなたのトークン>"
42
+
43
+ # Gemini CLI
44
+ gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
45
+ --header "X-Desktop-Token: <あなたのトークン>"
46
+
47
+ # Codex CLI (stdio — 設定 ▸ MCP に表示されるブリッジコマンドを登録)
48
+ codex mcp add specrails -- <設定 ▸ MCP のブリッジコマンド>
49
+ ```
50
+
51
+ `Authorization: Bearer <token>` ヘッダーも使えます。アプリのポートを変更している場合は `4200` を置き換えてください。
52
+
34
53
  接続が完了すると、アシスタントにはアプリ全体をカバーする約 **18 個のツール**が見えるようになります — プロジェクト、スペック、レールとジョブ、チャット/Explore、エージェント、プラグイン、Jira、ループ、コードエクスプローラー、アナリティクス、設定など。さらに、最初に読み込む組み込みの**ガイド**ツールも含まれているので、あなたが何も説明しなくても、アシスタントは Specrails の仕組みを理解できます。
35
54
 
36
55
  ## これで何ができるか
@@ -51,7 +70,7 @@ Claude Desktop や Cursor のようなクライアントでは、設定は次の
51
70
  > *「私のプロジェクトを全部チェックして。バックログにスペックがあるのにレールが 1 つも動いていないものを教えて、それぞれで最も優先度の高いものを 1 つ起動して。」*
52
71
 
53
72
  **コーディング中も手を止めずに。** エディタからでも音声でも、ウィンドウを切り替えずに Specrails を操作できます。
54
- > *「チケット #42 のためにレール 0 を Opus で ultracode モードで起動して、終わったら教えて。」*
73
+ > *「チケット #42 のためにレール 0 を Opus で Freestyle モードで起動して、終わったら教えて。」*
55
74
 
56
75
  **コストと履歴について尋ねる。** あなたのアナリティクスを、普通の言葉で。
57
76
  > *「今週、AI に一番お金を使ったのはどこ? プロジェクト別とモデル別で。最もコストのかかったチケットを 5 つ見せて。」*