specrails-desktop 2.8.0 → 2.9.0

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 (326) hide show
  1. package/README.md +23 -19
  2. package/client/dist/assets/{ActivityFeedPage-LKqd18-G.js → ActivityFeedPage-DNqnf1fZ.js} +1 -1
  3. package/client/dist/assets/{AgentsPage-Cb-b-6Ot.js → AgentsPage-vmNIEbGM.js} +1 -1
  4. package/client/dist/assets/{AnalyticsPage-HVxQQ1wy.js → AnalyticsPage-CdfN0ofZ.js} +1 -1
  5. package/client/dist/assets/{BarChart-BOyHB0dw.js → BarChart-CIkopHjl.js} +1 -1
  6. package/client/dist/assets/{CodePage-DnOnwKGB.js → CodePage-DDRNU5FN.js} +1 -1
  7. package/client/dist/assets/{DesktopAnalyticsPage-D2auU39x.js → DesktopAnalyticsPage-Cl3sKKSG.js} +1 -1
  8. package/client/dist/assets/{DocsDialog-CTuDX3GK.js → DocsDialog-BGrBOfUr.js} +2 -2
  9. package/client/dist/assets/{DocsPage-DRyMmu0Z.js → DocsPage-CY-2SSzw.js} +2 -2
  10. package/client/dist/assets/{ExportDropdown-DO-GGiMh.js → ExportDropdown-BRHcvP0r.js} +1 -1
  11. package/client/dist/assets/{IntegrationsPage-BhbO4jFT.js → IntegrationsPage-nKdLB4Ub.js} +1 -1
  12. package/client/dist/assets/{JobDetailPage-DJooEg1s.js → JobDetailPage-Bf0A6WWQ.js} +1 -1
  13. package/client/dist/assets/{JobsPage-BbaC-YOg.js → JobsPage-Vg4nXPdL.js} +1 -1
  14. package/client/dist/assets/{dist-js-CiIVMsx3.js → dist-js-0i_klubI.js} +1 -1
  15. package/client/dist/assets/{dist-js-Xc2lRKp2.js → dist-js-CUs5GjwA.js} +1 -1
  16. package/client/dist/assets/{index-DK214dak.js → index-BXoHFtfG.js} +8 -8
  17. package/client/dist/assets/index-D6BaYRRU.css +2 -0
  18. package/client/dist/assets/{integrations-2C7MkGT0.js → integrations-7YyTBuU9.js} +1 -1
  19. package/client/dist/assets/{integrations-CX4p_bij.js → integrations-B9CEpNF0.js} +1 -1
  20. package/client/dist/assets/{integrations-C2jQtv-s.js → integrations-BlvAdewo.js} +1 -1
  21. package/client/dist/assets/{integrations-eQPHAYsE.js → integrations-Bw8UM9Xd.js} +1 -1
  22. package/client/dist/assets/{integrations-BDC670cg.js → integrations-C5SxNKnG.js} +1 -1
  23. package/client/dist/assets/{integrations-BqUmRUef.js → integrations-CJQKMmdW.js} +1 -1
  24. package/client/dist/assets/{integrations-CB98NeH5.js → integrations-DWz1eU_K.js} +1 -1
  25. package/client/dist/assets/{integrations-_SuVeQIG.js → integrations-DiPR8Fzp.js} +1 -1
  26. package/client/dist/assets/{lib-Bo5s6xpe.js → lib-D6M_MvoC.js} +1 -1
  27. package/client/dist/assets/setup-B6egeeTM.js +1 -0
  28. package/client/dist/assets/setup-BHroXlke.js +1 -0
  29. package/client/dist/assets/setup-BIXsWUp1.js +1 -0
  30. package/client/dist/assets/setup-BJRdg1iE.js +1 -0
  31. package/client/dist/assets/setup-C0rVGnCy.js +1 -0
  32. package/client/dist/assets/setup-Cpu17hJv.js +1 -0
  33. package/client/dist/assets/setup-D-1r0uSx.js +1 -0
  34. package/client/dist/assets/setup-Dn2-veYO.js +1 -0
  35. package/client/dist/assets/{useProjectCache-DVNypkmR.js → useProjectCache-BeyBSNpD.js} +1 -1
  36. package/client/dist/index.html +4 -4
  37. package/docs/README.md +5 -2
  38. package/docs/agy-cli-provider-study.md +78 -0
  39. package/docs/cli.md +23 -4
  40. package/docs/codex.md +116 -58
  41. package/docs/creating-specs.md +19 -5
  42. package/docs/customizing.md +27 -6
  43. package/docs/gemini.md +225 -73
  44. package/docs/getting-started.md +18 -9
  45. package/docs/guide/de/agents/1-meet-the-agents.md +38 -0
  46. package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +45 -0
  47. package/docs/guide/de/agents/3-customizing-models-per-agent.md +60 -0
  48. package/docs/guide/de/agents/4-custom-agents-catalog.md +43 -0
  49. package/docs/guide/de/getting-started/1-what-is-specrails.md +49 -0
  50. package/docs/guide/de/getting-started/2-installing-and-first-run.md +42 -0
  51. package/docs/guide/de/getting-started/3-adding-your-first-project.md +58 -0
  52. package/docs/guide/de/getting-started/4-the-dashboard-tour.md +53 -0
  53. package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +78 -0
  54. package/docs/guide/de/insights/2-the-integrated-terminal.md +46 -0
  55. package/docs/guide/de/insights/3-code-explorer.md +50 -0
  56. package/docs/guide/de/integrations/1-ai-providers.md +64 -0
  57. package/docs/guide/de/integrations/2-plugins.md +44 -0
  58. package/docs/guide/de/integrations/3-jira-integration.md +71 -0
  59. package/docs/guide/de/integrations/4-mobile-companion.md +38 -0
  60. package/docs/guide/de/pipeline/1-rails-and-jobs.md +94 -0
  61. package/docs/guide/de/pipeline/2-the-job-detail-view.md +90 -0
  62. package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  63. package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +60 -0
  64. package/docs/guide/de/settings/1-themes.md +37 -0
  65. package/docs/guide/de/settings/2-language.md +39 -0
  66. package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  67. package/docs/guide/de/settings/4-where-your-data-lives.md +48 -0
  68. package/docs/guide/de/specs/1-specs-and-the-backlog.md +52 -0
  69. package/docs/guide/de/specs/2-add-spec-quick-mode.md +45 -0
  70. package/docs/guide/de/specs/3-add-spec-explore-mode.md +68 -0
  71. package/docs/guide/de/specs/4-drafts-and-contract-layer.md +81 -0
  72. package/docs/guide/en/agents/1-meet-the-agents.md +38 -0
  73. package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +45 -0
  74. package/docs/guide/en/agents/3-customizing-models-per-agent.md +60 -0
  75. package/docs/guide/en/agents/4-custom-agents-catalog.md +43 -0
  76. package/docs/guide/en/getting-started/1-what-is-specrails.md +49 -0
  77. package/docs/guide/en/getting-started/2-installing-and-first-run.md +42 -0
  78. package/docs/guide/en/getting-started/3-adding-your-first-project.md +58 -0
  79. package/docs/guide/en/getting-started/4-the-dashboard-tour.md +53 -0
  80. package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +78 -0
  81. package/docs/guide/en/insights/2-the-integrated-terminal.md +46 -0
  82. package/docs/guide/en/insights/3-code-explorer.md +50 -0
  83. package/docs/guide/en/integrations/1-ai-providers.md +64 -0
  84. package/docs/guide/en/integrations/2-plugins.md +44 -0
  85. package/docs/guide/en/integrations/3-jira-integration.md +71 -0
  86. package/docs/guide/en/integrations/4-mobile-companion.md +38 -0
  87. package/docs/guide/en/pipeline/1-rails-and-jobs.md +94 -0
  88. package/docs/guide/en/pipeline/2-the-job-detail-view.md +90 -0
  89. package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  90. package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +60 -0
  91. package/docs/guide/en/settings/1-themes.md +37 -0
  92. package/docs/guide/en/settings/2-language.md +39 -0
  93. package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  94. package/docs/guide/en/settings/4-where-your-data-lives.md +48 -0
  95. package/docs/guide/en/specs/1-specs-and-the-backlog.md +52 -0
  96. package/docs/guide/en/specs/2-add-spec-quick-mode.md +45 -0
  97. package/docs/guide/en/specs/3-add-spec-explore-mode.md +68 -0
  98. package/docs/guide/en/specs/4-drafts-and-contract-layer.md +81 -0
  99. package/docs/guide/es/agents/1-meet-the-agents.md +38 -0
  100. package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +45 -0
  101. package/docs/guide/es/agents/3-customizing-models-per-agent.md +60 -0
  102. package/docs/guide/es/agents/4-custom-agents-catalog.md +43 -0
  103. package/docs/guide/es/getting-started/1-what-is-specrails.md +49 -0
  104. package/docs/guide/es/getting-started/2-installing-and-first-run.md +42 -0
  105. package/docs/guide/es/getting-started/3-adding-your-first-project.md +58 -0
  106. package/docs/guide/es/getting-started/4-the-dashboard-tour.md +53 -0
  107. package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +78 -0
  108. package/docs/guide/es/insights/2-the-integrated-terminal.md +46 -0
  109. package/docs/guide/es/insights/3-code-explorer.md +50 -0
  110. package/docs/guide/es/integrations/1-ai-providers.md +64 -0
  111. package/docs/guide/es/integrations/2-plugins.md +44 -0
  112. package/docs/guide/es/integrations/3-jira-integration.md +71 -0
  113. package/docs/guide/es/integrations/4-mobile-companion.md +38 -0
  114. package/docs/guide/es/pipeline/1-rails-and-jobs.md +94 -0
  115. package/docs/guide/es/pipeline/2-the-job-detail-view.md +90 -0
  116. package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  117. package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +60 -0
  118. package/docs/guide/es/settings/1-themes.md +37 -0
  119. package/docs/guide/es/settings/2-language.md +39 -0
  120. package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  121. package/docs/guide/es/settings/4-where-your-data-lives.md +48 -0
  122. package/docs/guide/es/specs/1-specs-and-the-backlog.md +52 -0
  123. package/docs/guide/es/specs/2-add-spec-quick-mode.md +45 -0
  124. package/docs/guide/es/specs/3-add-spec-explore-mode.md +68 -0
  125. package/docs/guide/es/specs/4-drafts-and-contract-layer.md +81 -0
  126. package/docs/guide/fr/agents/1-meet-the-agents.md +38 -0
  127. package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +45 -0
  128. package/docs/guide/fr/agents/3-customizing-models-per-agent.md +60 -0
  129. package/docs/guide/fr/agents/4-custom-agents-catalog.md +43 -0
  130. package/docs/guide/fr/getting-started/1-what-is-specrails.md +49 -0
  131. package/docs/guide/fr/getting-started/2-installing-and-first-run.md +42 -0
  132. package/docs/guide/fr/getting-started/3-adding-your-first-project.md +58 -0
  133. package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +53 -0
  134. package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +78 -0
  135. package/docs/guide/fr/insights/2-the-integrated-terminal.md +46 -0
  136. package/docs/guide/fr/insights/3-code-explorer.md +50 -0
  137. package/docs/guide/fr/integrations/1-ai-providers.md +64 -0
  138. package/docs/guide/fr/integrations/2-plugins.md +44 -0
  139. package/docs/guide/fr/integrations/3-jira-integration.md +71 -0
  140. package/docs/guide/fr/integrations/4-mobile-companion.md +38 -0
  141. package/docs/guide/fr/pipeline/1-rails-and-jobs.md +94 -0
  142. package/docs/guide/fr/pipeline/2-the-job-detail-view.md +90 -0
  143. package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  144. package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +60 -0
  145. package/docs/guide/fr/settings/1-themes.md +37 -0
  146. package/docs/guide/fr/settings/2-language.md +39 -0
  147. package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  148. package/docs/guide/fr/settings/4-where-your-data-lives.md +48 -0
  149. package/docs/guide/fr/specs/1-specs-and-the-backlog.md +52 -0
  150. package/docs/guide/fr/specs/2-add-spec-quick-mode.md +45 -0
  151. package/docs/guide/fr/specs/3-add-spec-explore-mode.md +68 -0
  152. package/docs/guide/fr/specs/4-drafts-and-contract-layer.md +81 -0
  153. package/docs/guide/it/agents/1-meet-the-agents.md +38 -0
  154. package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +45 -0
  155. package/docs/guide/it/agents/3-customizing-models-per-agent.md +60 -0
  156. package/docs/guide/it/agents/4-custom-agents-catalog.md +43 -0
  157. package/docs/guide/it/getting-started/1-what-is-specrails.md +49 -0
  158. package/docs/guide/it/getting-started/2-installing-and-first-run.md +42 -0
  159. package/docs/guide/it/getting-started/3-adding-your-first-project.md +58 -0
  160. package/docs/guide/it/getting-started/4-the-dashboard-tour.md +53 -0
  161. package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +78 -0
  162. package/docs/guide/it/insights/2-the-integrated-terminal.md +46 -0
  163. package/docs/guide/it/insights/3-code-explorer.md +50 -0
  164. package/docs/guide/it/integrations/1-ai-providers.md +64 -0
  165. package/docs/guide/it/integrations/2-plugins.md +44 -0
  166. package/docs/guide/it/integrations/3-jira-integration.md +71 -0
  167. package/docs/guide/it/integrations/4-mobile-companion.md +38 -0
  168. package/docs/guide/it/pipeline/1-rails-and-jobs.md +94 -0
  169. package/docs/guide/it/pipeline/2-the-job-detail-view.md +90 -0
  170. package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  171. package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +60 -0
  172. package/docs/guide/it/settings/1-themes.md +37 -0
  173. package/docs/guide/it/settings/2-language.md +39 -0
  174. package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  175. package/docs/guide/it/settings/4-where-your-data-lives.md +48 -0
  176. package/docs/guide/it/specs/1-specs-and-the-backlog.md +52 -0
  177. package/docs/guide/it/specs/2-add-spec-quick-mode.md +45 -0
  178. package/docs/guide/it/specs/3-add-spec-explore-mode.md +68 -0
  179. package/docs/guide/it/specs/4-drafts-and-contract-layer.md +81 -0
  180. package/docs/guide/ja/agents/1-meet-the-agents.md +38 -0
  181. package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +45 -0
  182. package/docs/guide/ja/agents/3-customizing-models-per-agent.md +60 -0
  183. package/docs/guide/ja/agents/4-custom-agents-catalog.md +43 -0
  184. package/docs/guide/ja/getting-started/1-what-is-specrails.md +49 -0
  185. package/docs/guide/ja/getting-started/2-installing-and-first-run.md +42 -0
  186. package/docs/guide/ja/getting-started/3-adding-your-first-project.md +58 -0
  187. package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +53 -0
  188. package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +78 -0
  189. package/docs/guide/ja/insights/2-the-integrated-terminal.md +46 -0
  190. package/docs/guide/ja/insights/3-code-explorer.md +50 -0
  191. package/docs/guide/ja/integrations/1-ai-providers.md +64 -0
  192. package/docs/guide/ja/integrations/2-plugins.md +44 -0
  193. package/docs/guide/ja/integrations/3-jira-integration.md +71 -0
  194. package/docs/guide/ja/integrations/4-mobile-companion.md +38 -0
  195. package/docs/guide/ja/pipeline/1-rails-and-jobs.md +94 -0
  196. package/docs/guide/ja/pipeline/2-the-job-detail-view.md +90 -0
  197. package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  198. package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +60 -0
  199. package/docs/guide/ja/settings/1-themes.md +37 -0
  200. package/docs/guide/ja/settings/2-language.md +39 -0
  201. package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  202. package/docs/guide/ja/settings/4-where-your-data-lives.md +48 -0
  203. package/docs/guide/ja/specs/1-specs-and-the-backlog.md +52 -0
  204. package/docs/guide/ja/specs/2-add-spec-quick-mode.md +45 -0
  205. package/docs/guide/ja/specs/3-add-spec-explore-mode.md +68 -0
  206. package/docs/guide/ja/specs/4-drafts-and-contract-layer.md +81 -0
  207. package/docs/guide/pt/agents/1-meet-the-agents.md +38 -0
  208. package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +45 -0
  209. package/docs/guide/pt/agents/3-customizing-models-per-agent.md +60 -0
  210. package/docs/guide/pt/agents/4-custom-agents-catalog.md +43 -0
  211. package/docs/guide/pt/getting-started/1-what-is-specrails.md +49 -0
  212. package/docs/guide/pt/getting-started/2-installing-and-first-run.md +42 -0
  213. package/docs/guide/pt/getting-started/3-adding-your-first-project.md +58 -0
  214. package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +53 -0
  215. package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +78 -0
  216. package/docs/guide/pt/insights/2-the-integrated-terminal.md +46 -0
  217. package/docs/guide/pt/insights/3-code-explorer.md +50 -0
  218. package/docs/guide/pt/integrations/1-ai-providers.md +64 -0
  219. package/docs/guide/pt/integrations/2-plugins.md +44 -0
  220. package/docs/guide/pt/integrations/3-jira-integration.md +71 -0
  221. package/docs/guide/pt/integrations/4-mobile-companion.md +38 -0
  222. package/docs/guide/pt/pipeline/1-rails-and-jobs.md +94 -0
  223. package/docs/guide/pt/pipeline/2-the-job-detail-view.md +90 -0
  224. package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  225. package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +60 -0
  226. package/docs/guide/pt/settings/1-themes.md +37 -0
  227. package/docs/guide/pt/settings/2-language.md +39 -0
  228. package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  229. package/docs/guide/pt/settings/4-where-your-data-lives.md +48 -0
  230. package/docs/guide/pt/specs/1-specs-and-the-backlog.md +52 -0
  231. package/docs/guide/pt/specs/2-add-spec-quick-mode.md +45 -0
  232. package/docs/guide/pt/specs/3-add-spec-explore-mode.md +68 -0
  233. package/docs/guide/pt/specs/4-drafts-and-contract-layer.md +81 -0
  234. package/docs/guide/zh/agents/1-meet-the-agents.md +38 -0
  235. package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +45 -0
  236. package/docs/guide/zh/agents/3-customizing-models-per-agent.md +60 -0
  237. package/docs/guide/zh/agents/4-custom-agents-catalog.md +43 -0
  238. package/docs/guide/zh/getting-started/1-what-is-specrails.md +49 -0
  239. package/docs/guide/zh/getting-started/2-installing-and-first-run.md +42 -0
  240. package/docs/guide/zh/getting-started/3-adding-your-first-project.md +58 -0
  241. package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +53 -0
  242. package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +78 -0
  243. package/docs/guide/zh/insights/2-the-integrated-terminal.md +46 -0
  244. package/docs/guide/zh/insights/3-code-explorer.md +50 -0
  245. package/docs/guide/zh/integrations/1-ai-providers.md +64 -0
  246. package/docs/guide/zh/integrations/2-plugins.md +44 -0
  247. package/docs/guide/zh/integrations/3-jira-integration.md +71 -0
  248. package/docs/guide/zh/integrations/4-mobile-companion.md +38 -0
  249. package/docs/guide/zh/pipeline/1-rails-and-jobs.md +94 -0
  250. package/docs/guide/zh/pipeline/2-the-job-detail-view.md +90 -0
  251. package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +78 -0
  252. package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +60 -0
  253. package/docs/guide/zh/settings/1-themes.md +37 -0
  254. package/docs/guide/zh/settings/2-language.md +39 -0
  255. package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
  256. package/docs/guide/zh/settings/4-where-your-data-lives.md +48 -0
  257. package/docs/guide/zh/specs/1-specs-and-the-backlog.md +52 -0
  258. package/docs/guide/zh/specs/2-add-spec-quick-mode.md +45 -0
  259. package/docs/guide/zh/specs/3-add-spec-explore-mode.md +68 -0
  260. package/docs/guide/zh/specs/4-drafts-and-contract-layer.md +81 -0
  261. package/docs/internals/README.md +1 -1
  262. package/docs/internals/adding-a-provider.md +192 -59
  263. package/docs/internals/api-reference.md +130 -21
  264. package/docs/internals/architecture.md +22 -9
  265. package/docs/internals/bundled-framework-build-plan.md +264 -0
  266. package/docs/internals/configuration.md +33 -8
  267. package/docs/internals/global-artifacts-alignment-contract.md +486 -0
  268. package/docs/internals/global-artifacts-relocation-evaluation.md +294 -0
  269. package/docs/internals/operations-runbook.md +16 -5
  270. package/docs/internals/profiles.md +42 -14
  271. package/docs/platforms/macos.md +27 -8
  272. package/docs/platforms/windows.md +20 -6
  273. package/docs/running-pipelines.md +17 -9
  274. package/docs/terminal.md +9 -3
  275. package/docs/tracking-cost.md +17 -11
  276. package/package.json +1 -1
  277. package/server/dist/agent-refine-manager.js +20 -5
  278. package/server/dist/artifact-registry.js +468 -0
  279. package/server/dist/attachment-manager.js +5 -8
  280. package/server/dist/browser-capture-manager.js +4 -4
  281. package/server/dist/bundled-core.js +72 -0
  282. package/server/dist/bundled-openspec.js +58 -0
  283. package/server/dist/chat-manager.js +42 -5
  284. package/server/dist/code-explorer-router.js +10 -7
  285. package/server/dist/config.js +7 -2
  286. package/server/dist/context-budget.js +17 -6
  287. package/server/dist/context-scope.js +6 -2
  288. package/server/dist/contract-refine-runner.js +31 -9
  289. package/server/dist/desktop-router.js +24 -1
  290. package/server/dist/docs-router.js +210 -132
  291. package/server/dist/file-summary-manager.js +41 -16
  292. package/server/dist/framework-manager.js +248 -0
  293. package/server/dist/framework-migration.js +308 -0
  294. package/server/dist/index.js +30 -0
  295. package/server/dist/install-config-path.js +73 -0
  296. package/server/dist/jira/jira-sync-manager.js +23 -11
  297. package/server/dist/openspec-shim.js +153 -0
  298. package/server/dist/plugins-router.js +19 -8
  299. package/server/dist/profiles-router.js +38 -16
  300. package/server/dist/project-registry.js +101 -3
  301. package/server/dist/project-router-chat.js +1 -1
  302. package/server/dist/project-router-helpers.js +25 -12
  303. package/server/dist/project-router-jobs.js +3 -3
  304. package/server/dist/project-router-settings.js +8 -6
  305. package/server/dist/project-router-setup.js +27 -10
  306. package/server/dist/project-router-spending.js +6 -1
  307. package/server/dist/project-router-tickets.js +30 -10
  308. package/server/dist/project-router.js +16 -1
  309. package/server/dist/queue-manager.js +149 -18
  310. package/server/dist/setup-manager.js +131 -29
  311. package/server/dist/smash-runner.js +21 -6
  312. package/server/dist/ticket-store.js +6 -2
  313. package/server/dist/ticket-watcher.js +5 -1
  314. package/server/dist/vitest-setup.js +25 -0
  315. package/server/dist/workspace-manager.js +199 -0
  316. package/server/dist/workspace-resolution.js +147 -0
  317. package/client/dist/assets/index-DgKfQFcf.css +0 -2
  318. package/client/dist/assets/setup-BIIkb-_K.js +0 -1
  319. package/client/dist/assets/setup-BeQxu9kD.js +0 -1
  320. package/client/dist/assets/setup-CPa6GnlI.js +0 -1
  321. package/client/dist/assets/setup-CZl4OEJx.js +0 -1
  322. package/client/dist/assets/setup-ChpodNfn.js +0 -1
  323. package/client/dist/assets/setup-D_fjJH6u.js +0 -1
  324. package/client/dist/assets/setup-YzD8DX4O.js +0 -1
  325. package/client/dist/assets/setup-fRpDozmq.js +0 -1
  326. package/docs/adding-a-provider.md +0 -107
package/docs/codex.md CHANGED
@@ -1,23 +1,33 @@
1
1
  # Using Specrails with the Codex CLI
2
2
 
3
- Specrails supports **two AI providers**: Anthropic's
4
- [Claude Code](https://claude.com/claude-code) and OpenAI's
5
- [Codex CLI](https://developers.openai.com/codex). You pick one or
6
- both when you add a project; the rest of the app behaves identically
7
- across them. (See [Running both providers in one
8
- project](#running-both-providers-in-one-project) below.)
3
+ Specrails supports **three AI providers** — Claude, Codex, and Gemini —
4
+ and they are interchangeable. This guide covers OpenAI's
5
+ [Codex CLI](https://developers.openai.com/codex). For the others, see
6
+ [Claude Code](https://claude.com/claude-code) and the
7
+ [Gemini guide](gemini.md).
8
+
9
+ > **Just want to get going?** Install the `codex` CLI, log in, then in
10
+ > the app click **Add Project → check Codex → Submit**. The rest of the
11
+ > app (specs, rails, chat, analytics) works the same as it does for
12
+ > Claude. Everything below is detail for when you need it.
13
+
14
+ You pick one, two, or all three providers when you add a project — and
15
+ you can mix them in a single project too (see [Running more than one
16
+ provider in one project](#running-more-than-one-provider-in-one-project)
17
+ below). All three are enabled by default.
9
18
 
10
19
  > The codex path is enabled by default. To temporarily disable it
11
- > (e.g. as an emergency rollback during a beta window), set
12
- > `SPECRAILS_CODEX_BETA=0` in the app's environment (the legacy
20
+ > (e.g. as an emergency rollback), set `SPECRAILS_CODEX_BETA=0` in the
21
+ > app's environment. **Only the exact string `0` disables it** — `false`,
22
+ > `off`, `1`, or leaving it unset all mean "enabled". The legacy
13
23
  > `SPECRAILS_HUB_CODEX_BETA` name is still read as a fallback when the
14
- > new variable is unset). Unset or set to `1` to re-enable.
24
+ > new variable is unset.
15
25
 
16
26
  ## Prerequisites
17
27
 
18
28
  | What | Why | How |
19
29
  |---|---|---|
20
- | `codex` CLI ≥ 0.128.0 | Earlier versions don't support `exec --json` + `exec resume` semantics the app relies on | `brew install codex` (macOS) · winget / download from https://developers.openai.com/codex (Windows / Linux) |
30
+ | `codex` CLI ≥ 0.128.0 | Earlier versions don't support `exec --json` + `exec resume` semantics the app relies on | `npm i -g @openai/codex` · or download from https://developers.openai.com/codex |
21
31
  | Authentication | Codex needs OAuth or an API key | `codex login` (ChatGPT OAuth) or set `OPENAI_API_KEY` |
22
32
  | `uv` ≥ 0.1.0 (optional) | Required if you want to install the Serena plugin | `brew install uv` · `pipx install uv` · or the curl installer at https://docs.astral.sh/uv |
23
33
  | `git`, `node`, `npm`, `npx` | Same as Claude — needed for `specrails-core init` | Use your usual installer |
@@ -31,13 +41,16 @@ binary isn't on `PATH`; it shows install commands if you click "More info".
31
41
  1. Open the app UI and click **Add Project**.
32
42
  2. Pick the project's path.
33
43
  3. In the **AI providers** row, check **Codex** (you can check
34
- **Claude** too — see [Running both providers in one
35
- project](#running-both-providers-in-one-project)). The first
36
- provider you select becomes the project default.
44
+ **Claude** and/or **Gemini** too — see [Running more than one
45
+ provider in one project](#running-more-than-one-provider-in-one-project)).
46
+ The first provider you select becomes the project default.
37
47
  4. Submit. The app writes `.specrails/install-config.yaml` (with
38
48
  `provider: codex` and `tier: quick` as YAML keys) and spawns
39
- `npx specrails-core@latest init --from-config <file>` — the provider
40
- and tier live in the YAML, not as CLI flags. The install produces:
49
+ `npx --yes --prefer-online specrails-core@^4.8.0 init --yes --from-config <file>`
50
+ — the provider and tier live in the YAML, not as CLI flags. (The app
51
+ pins `specrails-core@^4.8.0`; that floor is the version that ships the
52
+ per-provider targets, including the Codex skill set.) The install
53
+ produces:
41
54
  - `.codex/config.toml` — model, reasoning effort, sandbox mode, and
42
55
  approval policy (all top-level keys per the codex 0.128.0+ schema).
43
56
  - `.codex/skills/sr-*/SKILL.md` — general specrails skills
@@ -53,21 +66,23 @@ binary isn't on `PATH`; it shows install commands if you click "More info".
53
66
 
54
67
  The provider **set** you choose is immutable after creation — you
55
68
  can't add or remove a provider on an existing project (the on-disk
56
- layouts are disjoint and we don't want to ask you to migrate two trees
57
- in place). Install both up front if you want the choice later.
69
+ layouts are disjoint and we don't want to ask you to migrate the trees
70
+ in place). Install every provider you might want up front if you want
71
+ the choice later.
58
72
 
59
- ## Running both providers in one project
73
+ ## Running more than one provider in one project
60
74
 
61
- A single project can install **both** Claude and Codex. In the
62
- **Add Project** dialog the **AI providers** control is a multi-select —
63
- check both and the app runs each provider's install sequentially. The
64
- first provider you select is the **primary/default**; the helper text
65
- spells this out: *"Both engines will be set up. The first is the
66
- project default. Cannot be changed after creation."*
75
+ A single project can install **any combination** of Claude, Codex, and
76
+ Gemini. In the **Add Project** dialog the **AI providers** control is a
77
+ multi-select — check the ones you want and the app runs each provider's
78
+ install sequentially. The first provider you select is the
79
+ **primary/default**; the helper text spells this out: *"The engines will
80
+ be set up. The first is the project default. Cannot be changed after
81
+ creation."*
67
82
 
68
- Once both are installed:
83
+ Once more than one is installed:
69
84
 
70
- - **Per-invocation engine pickers** let you choose Claude vs Codex each
85
+ - **Per-invocation engine pickers** let you choose which engine runs each
71
86
  time you spawn work. The picker appears in the **Add Spec** dialog
72
87
  (`AiEngineSelector`), in the **rail header** (`RailEngineSelector`),
73
88
  and in the terminal's **Open AI CLI** menu (`CliLaunchMenu`). On
@@ -77,28 +92,51 @@ Once both are installed:
77
92
  primary), so you don't have to re-pick on every spawn.
78
93
  - **Capability intersection.** The right sidebar only shows sections
79
94
  that *every* installed provider supports. Because Codex has no agent
80
- profiles and no plugins, the **Agents** and **Integrations** sections
81
- are **hidden** while both providers are installed. Single-provider
82
- projects are unaffected.
95
+ profiles, the **Agents** section is **hidden** whenever a non-Claude
96
+ provider is installed. The **Integrations** section stays **visible**
97
+ it hosts the provider-agnostic Jira card. What gets filtered there is
98
+ the **Serena plugin** entry, which needs a Claude-style project MCP
99
+ registration (so it shows for Claude and Gemini, but not for Codex).
100
+ See [Plugins and MCP on codex projects](#plugins-and-mcp-on-codex-projects).
101
+ Single-provider projects are unaffected.
83
102
 
84
103
  When only one provider is installed the app behaves byte-identically to
85
104
  a single-provider project — no engine pickers, no provider persisted on
86
105
  spawns, no overrides.
87
106
 
88
- ## What's different vs Claude
89
-
90
- | Surface | Claude | Codex |
91
- |---|---|---|
92
- | **CLI** | `claude` | `codex` |
93
- | **Project dir** | `.claude/` | `.codex/` |
94
- | **Instructions file** | `CLAUDE.md` | `AGENTS.md` |
95
- | **Agent format** | `.claude/agents/<id>.md` with `model:` frontmatter | `.codex/skills/<id>/SKILL.md` Skill format |
96
- | **Agent profiles** | Full support (rail `RailProfileSelector`) | **None** — codex rails force the profile to `null`; the Agents section is Claude-only |
97
- | **Contract Refine** | Claude-only (it `--resume`s the Explore session and runs `/specrails:contract-refine`) | **Skipped** — toggling "Enrich with Contract Layer" on a codex spec is a no-op |
98
- | **MCP registration** | Surgical merge of `<project>/.mcp.json` | `codex mcp add` against per-project `CODEX_HOME=~/.specrails/projects/<slug>/codex-home/` (isolated) |
99
- | **Session resume** | `--resume <session_id>` | `exec resume <thread_id>` |
100
- | **Native cost report** | `result.total_cost_usd` from `--output-format stream-json` | None — cost is **estimated** by the app from `turn.completed.usage` and the local pricing table at `server/pricing.ts` |
101
- | **Telemetry** | `OTEL_EXPORTER_OTLP_*` env vars consumed by claude itself | Synthesised by the app from `codex exec --json` events and POSTed to the same in-process OTLP receiver — telemetry export ZIP works identically |
107
+ ## What's different vs Claude (and Gemini)
108
+
109
+ The table below puts Codex side by side with Claude, plus a Gemini column
110
+ so you can see where each provider lands. (For the full Gemini picture see
111
+ the [Gemini guide](gemini.md).)
112
+
113
+ | Surface | Claude | Codex | Gemini |
114
+ |---|---|---|---|
115
+ | **CLI** | `claude` | `codex` | `gemini` |
116
+ | **Min CLI version** | none pinned | `0.128.0` | `0.11.0` |
117
+ | **Project dir** | `.claude/` | `.codex/` | `.gemini/` |
118
+ | **Instructions file** | `CLAUDE.md` | `AGENTS.md` | `GEMINI.md` |
119
+ | **Default model** | `sonnet` | `gpt-5.5` | `gemini-3.5-flash` |
120
+ | **Agent format** | `.claude/agents/<id>.md` with `model:` frontmatter | `.codex/skills/<id>/SKILL.md` Skill format | `.gemini/` command + agent target |
121
+ | **Agent profiles** | Full support (rail `RailProfileSelector`) | **None** — rails force the profile to `null` | **None** — rails force the profile to `null` |
122
+ | **Pipeline rails** | ✅ all rail types | ✅ (except Ultracode) | ✅ (except Ultracode) |
123
+ | **Ultracode rails** | ✅ Claude-only | ❌ rejected (`Ultracode requires the Claude provider`) | ❌ rejected |
124
+ | **Contract Refine** | Claude-only (it `--resume`s the Explore session and runs `/specrails:contract-refine`) | **Skipped** — toggling "Enrich with Contract Layer" is a no-op | **Skipped** |
125
+ | **MCP registration** | Surgical merge of `<project>/.mcp.json` | `codex mcp add` against per-project `CODEX_HOME=~/.specrails/projects/<slug>/codex-home/` (isolated) | Project `.mcp.json` (so Serena-style plugins **do** resolve) |
126
+ | **Session resume** | `--resume <session_id>` | `exec resume <thread_id>` | `--resume` |
127
+ | **Native cost report** | `result.total_cost_usd` from `--output-format stream-json` | None — cost is **estimated** by the app from `turn.completed.usage` and the local pricing table at `server/pricing.ts` | None — **estimated** the same way as Codex |
128
+ | **Telemetry** | `OTEL_EXPORTER_OTLP_*` env vars consumed by claude itself | **Synthesised** by the app from `codex exec --json` events and POSTed to the same in-process OTLP receiver | **Native** OTLP — Gemini honours the same `OTEL_*` env vars Claude does (no synthetic bridge) |
129
+
130
+ A few Codex-specific behaviours worth calling out:
131
+
132
+ - **Rail sandbox.** Codex rail jobs spawn with `--sandbox danger-full-access`
133
+ (not the `workspace-write` sandbox used for one-off `codex exec` runs), so
134
+ a rail can read and write anywhere in the project. This is intentional —
135
+ rails need to apply edits across the repo — but it's worth knowing if
136
+ you're surprised by a rail touching files outside the working tree.
137
+ - **Ultracode rails are Claude-only.** Launching an Ultracode rail on a
138
+ Codex (or Gemini) engine is rejected with a 400 (`Ultracode requires the
139
+ Claude provider`). Pick Claude for that rail.
102
140
 
103
141
  ## Estimated cost
104
142
 
@@ -115,9 +153,11 @@ The Analytics page surfaces this in two places:
115
153
  - **The Hero** shows a small italic suffix next to the invocation
116
154
  count (`· includes ~$X.XX estimated`) when any row in the active
117
155
  window came from the fallback.
118
- - **A new "By provider" card** between the Hero and the Timeline
119
- splits per-provider cost into authoritative vs estimated columns
120
- whenever the project has invoked both providers.
156
+ - **A "By provider" card** between the Hero and the Timeline splits
157
+ cost per provider into authoritative vs estimated whenever the project
158
+ has invoked more than one. Claude rows are authoritative (the CLI
159
+ reports cost); Codex and Gemini rows are estimated from token counts
160
+ and the local rate-card.
121
161
 
122
162
  The pricing table is reviewed quarterly. The reference date sits on
123
163
  each entry as `lastReviewedAt`. If OpenAI raises prices mid-quarter,
@@ -125,12 +165,20 @@ ship an out-of-band update to `server/pricing.ts`.
125
165
 
126
166
  ## Plugins and MCP on codex projects
127
167
 
128
- The **Integrations** (plugins) marketplace is a **Claude-only** capability. The app
129
- hides the Integrations tab for any project that includes codex — both codex-only and
130
- dual-provider (Claude + Codex) projects because the sidebar only shows sections that
131
- *every* installed provider supports (the capability intersection in
132
- `provider-capabilities.ts`). So there is no in-app plugins page to install Serena on a
133
- codex project.
168
+ The **Integrations** section stays **visible** on codex projects — it hosts
169
+ the provider-agnostic **Jira** integration, which works for any provider.
170
+ What's filtered out is the **Serena plugin**: it requires a project-level
171
+ `.mcp.json` registration that Codex doesn't use (Codex registers MCP servers
172
+ via `codex mcp add`, Claude and Gemini use the project `.mcp.json`). So a
173
+ codex-only project still has the Integrations tab and the Jira card, but no
174
+ Serena plugin entry.
175
+
176
+ > Why: the right sidebar shows the capability intersection (sections every
177
+ > installed provider supports). Only **Agents** is Claude-only; **Integrations**
178
+ > is not. The per-provider filter lives inside the Integrations page
179
+ > (`client/src/pages/IntegrationsPage.tsx`, `showPlugins` requires a
180
+ > Claude-style provider), not in the section-level intersection
181
+ > (`provider-capabilities.ts`).
134
182
 
135
183
  To give a codex project MCP servers, register them with `codex mcp add` from your
136
184
  terminal: codex chat / Explore turns spawn with your own environment and read your global
@@ -170,7 +218,9 @@ spec just commits without a Contract Layer block.
170
218
  ## Emergency rollback
171
219
 
172
220
  If you need to disable the codex path, set `SPECRAILS_CODEX_BETA=0`
173
- in the app's environment. For a source checkout that's:
221
+ in the app's environment. **Only the exact string `0` disables Codex** —
222
+ `false`, `off`, `1`, or unset all leave it enabled. For a source checkout
223
+ that's:
174
224
 
175
225
  ```bash
176
226
  SPECRAILS_CODEX_BETA=0 npm run dev
@@ -179,10 +229,13 @@ SPECRAILS_CODEX_BETA=0 npm run dev
179
229
  For the packaged desktop app, set the variable in the environment the app
180
230
  process inherits (the `npm run dev` form is for source runs only).
181
231
 
232
+ (Gemini has the same kill switch, `SPECRAILS_GEMINI_BETA=0`, but **no**
233
+ legacy `SPECRAILS_HUB_*` fallback name.)
234
+
182
235
  `GET /api/available-providers` will report `codex: false` and
183
236
  `POST /api/projects` will refuse new codex projects. Existing
184
- codex projects keep functioning — only new-project gating is gated by
185
- the env var.
237
+ codex projects keep functioning — the env var only gates creating
238
+ *new* codex projects.
186
239
 
187
240
  ## Architecture pointers (for specrails-desktop developers)
188
241
 
@@ -198,13 +251,18 @@ The codex integration lives in:
198
251
  with per-project `CODEX_HOME`.
199
252
 
200
253
  The contract every provider implements is at
201
- `server/providers/types.ts`. Adding a new provider in the future is
202
- one new adapter file + one entry in `server/providers/index.ts`.
254
+ `server/providers/types.ts`. Adding a provider is essentially one new
255
+ adapter file + one `register(...)` entry in `server/providers/index.ts`
256
+ (the rest of the codebase is registry-driven and provider-id-agnostic).
257
+ `server/providers/gemini-adapter.ts` is the freshest worked example —
258
+ see [Adding a provider](internals/adding-a-provider.md).
203
259
 
204
260
  ## See also
205
261
 
262
+ - [Using Gemini](gemini.md) — the Gemini CLI provider (the other
263
+ provider with estimated cost).
206
264
  - [Adding a provider](internals/adding-a-provider.md) — the developer
207
- guide to wiring a third AI CLI adapter.
265
+ guide to wiring an AI CLI adapter.
208
266
  - [Tracking cost](tracking-cost.md) — how the Analytics page surfaces
209
267
  per-invocation cost across every surface (including the estimated
210
268
  codex rows described above).
@@ -1,6 +1,8 @@
1
1
  # Creating specs
2
2
 
3
- A **spec** in specrails-desktop is a description of work you want done — what the AI agents will read and act on. This guide walks through every way you can create, refine, compare, and organise them. Specs are engine-agnostic: depending on how the project was set up, they can be generated by Claude or by Codex.
3
+ A **spec** in specrails-desktop is a description of work you want done — what the AI agents will read and act on. This guide walks through every way you can create, refine, compare, and organise them.
4
+
5
+ Specs are engine-agnostic: depending on how the project was set up, they can be generated by **Claude, Codex, or Gemini** — whichever providers you installed for the project. The flows below are identical no matter which one you use; only the engine picker and the default model differ.
4
6
 
5
7
  ## Creating a spec
6
8
 
@@ -10,7 +12,7 @@ Open the Dashboard and click **Add** (the Plus button on the SpecsBoard toolbar)
10
12
  - **Explore** — you converse with the AI and shape the spec turn by turn.
11
13
  - **Raw** — your prompt is saved verbatim as a spec, with **no AI** involved.
12
14
 
13
- On a multi-provider project (one set up with both Claude and Codex), an **AI engine** selector sits at the top of the dialog so you can pick which engine generates this spec. The choice is remembered per project. Single-provider projects don't show the selector.
15
+ If the project has **more than one provider installed** any combination of Claude, Codex, and Gemini — an **AI engine** selector sits at the top of the dialog so you can pick which engine generates this spec. The choice is remembered per project. Projects with a single provider don't show the selector; it would have nothing to choose between.
14
16
 
15
17
  ### Quick mode
16
18
 
@@ -53,9 +55,11 @@ For when the spec needs shaping. You converse with the AI; a live draft updates
53
55
 
54
56
  Rich and Max both load the full codebase — they differ only in whether the Contract Layer pass runs. The decision is per-conversation (saved on `chat_conversations.context_scope`) so it doesn't bleed into other Explore sessions.
55
57
 
58
+ The **Desktop** preset is Explore-only — Quick mode caps the slider at **Max** (no project/approved MCPs), as noted under [Quick mode](#quick-mode) above.
59
+
56
60
  Click **Fine-tune** to set the flags individually. One toggle only appears here:
57
61
 
58
- - **My approved MCPs** — loads the MCP servers you've already approved locally (`claude mcp add` / `codex mcp add`) without changing where the spawn runs. Explore-only; disabled in Quick mode.
62
+ - **My approved MCPs** — loads the MCP servers you've already approved locally (`claude mcp add` / `codex mcp add`) without changing where the spawn runs. Explore-only; disabled in Quick mode. On a **Gemini** project, Gemini reads your own approved MCP servers from its native config (`~/.gemini`) automatically, so this toggle isn't needed there.
59
63
 
60
64
  **Buttons in the shell:**
61
65
 
@@ -120,7 +124,7 @@ Got an epic that's clearly too big? Open it and click **SMASH Spec into Sub-Spec
120
124
 
121
125
  - Gets `parent_epic_id` pointing back at the epic.
122
126
  - Carries an execution order (the SMASH agent decides the right order).
123
- - Carries a short summary (the agent aims for roughly 120 characters) surfaced on its postit card.
127
+ - Carries a short summary surfaced on its postit card. The agent is asked to keep it to ~120 characters; the server hard-caps it at 240 characters as a safety net.
124
128
 
125
129
  Inside the epic's modal you'll see an **Epic Family Sidebar** listing all children. Inside each child's modal, an **Epic Breadcrumb** lets you jump back to the parent. If the epic already has children, the button reads **Re-SMASH** and regenerates the family (after a confirmation).
126
130
 
@@ -152,13 +156,20 @@ Every spec card shows a status indicator that stays consistent across view modes
152
156
 
153
157
  ## Filtering and sorting
154
158
 
155
- The SpecsBoard toolbar has four controls plus the Add button:
159
+ The SpecsBoard toolbar always shows these four controls plus the Add button:
156
160
 
157
161
  - **Status filter** — a single-select dropdown with three values: **All**, **ToDo**, **Done**. Defaults to **All**, which shows everything (including drafts and done specs).
158
162
  - **Label dropdown** — multi-select across every label used in the project.
159
163
  - **Sort** — **Default**, **Ticket #**, or **Priority**, each with an ascending/descending toggle.
160
164
  - **View toggle** — switch between List view and Post-it view (see below).
161
165
 
166
+ Two more filters appear **only once your board has the data for them**, so don't be surprised if you see five or six controls. Both are surfaced only on **Jira-linked** projects:
167
+
168
+ - **Epic filter** — appears once at least one spec carries a Jira epic, letting you narrow the board to one epic's children.
169
+ - **Sprint filter** — appears when specs carry Jira sprint data.
170
+
171
+ On a **Jira-linked** project the Sort dropdown also gains a fourth mode, **Jira key**, so you can order the board by Jira ticket number.
172
+
162
173
  Priority itself is set per spec from the right-click menu (below), not from a toolbar filter — there is no priority filter and no search box on the board.
163
174
 
164
175
  ## Right-click context menu
@@ -169,6 +180,8 @@ Right-click any spec card (in any view mode):
169
180
  - **Change status → Todo / Done**
170
181
  - **Set priority → Critical / High / Medium / Low**
171
182
 
183
+ On a **Jira-backed** spec the first item changes from **Delete ticket** to **Move to `<status>`** (which transitions the linked Jira issue) with a separate **Discard** flow, since a Jira-backed spec can't simply be deleted locally.
184
+
172
185
  ## View modes
173
186
 
174
187
  The SpecsBoard has **two** view modes, switched from a toolbar toggle and remembered per project:
@@ -195,3 +208,4 @@ You don't need this to use the feature, but it's nice to know:
195
208
  - [Running pipelines](running-pipelines.md) — drag those specs onto rails and launch the implementation pipeline.
196
209
  - [Tracking cost](tracking-cost.md) — see what each spec is costing you.
197
210
  - [Customising the app](customizing.md) — set a daily budget so you can stop worrying.
211
+ - [Using Codex](codex.md) / [Using Gemini](gemini.md) — provider-specific notes if you generate specs with Codex or Gemini.
@@ -59,7 +59,7 @@ Open **Settings** from the project navbar (top right of any project page).
59
59
  | **Daily budget (USD)** | The queue auto-pauses when this project's spend for the current calendar day exceeds the cap. Blank = no cap. |
60
60
  | **Per-job cost alert (USD)** | OS notification when a single job in this project exceeds this amount. Blank = disabled. |
61
61
 
62
- The daily counter is the sum of completed-job cost since midnight, so it resets at the start of each calendar day. When the cap is hit you see a "Daily budget exceeded — Queue is paused" banner on the project (plus a toast). Resume by raising or clearing the budget (and waiting for the next day if you've genuinely spent it).
62
+ The daily counter is the sum of completed-job cost since midnight, so it resets at the start of each calendar day. When the cap is hit you see a "Daily budget exceeded — spent $X of $Y. Queue is paused." banner on the project (plus a toast). Resume by raising or clearing the budget (and waiting for the next day if you've genuinely spent it).
63
63
 
64
64
  ### Rail pre-prompt
65
65
 
@@ -109,6 +109,8 @@ Open **Desktop Settings** from the Arc sidebar. These apply across every project
109
109
  | Section | What it does |
110
110
  |---------|--------------|
111
111
  | **Appearance** | Theme picker — see above. |
112
+ | **Language** | UI language picker. Eight locales (English, Spanish, French, German, Portuguese, Italian, Chinese, Japanese). Hot-switches the whole app — no restart. First run follows your OS language until you pick one explicitly. |
113
+ | **Code section** | Defaults for the Code section: the plain-language file-summary language (English or Spanish) and a monthly summary budget cap in USD. Hidden when the Code section is disabled. |
112
114
  | **Registered Projects** | The project registry. Re-resolve, rename, or remove projects. |
113
115
  | **specrails-tech** | Base URL for the external specrails-tech agents service (default `http://localhost:3000`). |
114
116
  | **Budget & Alerts** | App-wide daily budget (a global spend cap across all projects — queues auto-pause when exceeded) plus a per-job cost alert threshold. Distinct from the per-project budget. |
@@ -126,26 +128,41 @@ On first run the app generates a token and persists it to `~/.specrails/desktop.
126
128
 
127
129
  The app binds to `127.0.0.1` only, so it's never exposed to your network. To rotate the token, stop the app, delete `~/.specrails/desktop.token`, and start it again — a fresh token is generated on the next boot.
128
130
 
131
+ ## Providers
132
+
133
+ The app works with **three interchangeable AI providers — Claude, Codex, and Gemini — all enabled by default.** When you add a project you pick which provider(s) to install (you can install any subset; the first one becomes the project's default). The engine pickers on Add Spec, the rail header, and the terminal's "Open AI CLI" button appear automatically whenever more than one provider is installed.
134
+
135
+ You normally don't configure anything here — providers are selected per project in the UI. The only knobs are the **emergency rollback** env vars below (one per provider), which force a provider back to "unavailable" without redeploying. See [codex.md](codex.md) and [gemini.md](gemini.md) for each provider's setup, auth, and limitations.
136
+
129
137
  ## Environment variables
130
138
 
131
139
  Most settings live in the UI. A few app-level switches are env-only because they're guardrails ops people want to flip without opening the dashboard.
132
140
 
141
+ > **How values are read** (the rules differ by flag type):
142
+ > - **Section gates** (`SPECRAILS_*_SECTION`, `SPECRAILS_TERMINAL_PANEL`, `SPECRAILS_CODE_EXPLORER`, …) are ON unless set to the **exact string `false`**.
143
+ > - **Provider rollbacks** (`SPECRAILS_CODEX_BETA`, `SPECRAILS_GEMINI_BETA`) disable on the **exact string `0`** only — `false`/`off` do *not* disable them.
144
+ > - **Kill switches** (`SPECRAILS_SMASH`, `SPECRAILS_EXPLORE_CONTRACT_REFINE`) accept `0` / `false` / `off`.
145
+ > - **Opt-in hatches** (`SPECRAILS_EXPLORE_LEGACY_CWD`, `SPECRAILS_ALLOW_LOCAL_WEBHOOKS`) enable on the **exact string `1`**.
146
+
133
147
  ### Server-side (read at app startup or by spawned children)
134
148
 
135
149
  | Variable | Effect |
136
150
  |----------|--------|
137
- | `SPECRAILS_CORE_BIN` | Override the `specrails-core` binary (default: `npx --yes --prefer-online specrails-core@latest`) |
151
+ | `SPECRAILS_CORE_BIN` | Override the `specrails-core` binary (default: `npx --yes --prefer-online specrails-core@^4.8.0` — the 4.8.0 floor is the release that ships the Gemini provider target) |
138
152
  | `SPECRAILS_TECH_URL` | Override the specrails-tech proxy base URL |
139
153
  | `SPECRAILS_AGENTS_SECTION=false` | Hide the Agents section from every project |
140
154
  | `SPECRAILS_PLUGINS_SECTION=false` | Hide the Integrations section from every project |
155
+ | `SPECRAILS_JIRA_SECTION=false` | Hide the Jira integration and 404 its routes |
141
156
  | `SPECRAILS_TERMINAL_PANEL=false` | Disable the bottom terminal panel everywhere |
142
- | `SPECRAILS_CODE_EXPLORER=false` | Disable the read-only Code section server-side |
157
+ | `SPECRAILS_CODE_EXPLORER=false` | Disable the Code section server-side |
158
+ | `SPECRAILS_INTERACTIVE_JOBS=false` | Reject the interactive-ultracode toggle and the per-job message/finalize routes |
143
159
  | `SPECRAILS_BROWSER_CAPTURE=false` | Disable Add-Spec-from-browser capture |
144
- | `SPECRAILS_CODEX_BETA=0` | Emergency rollback — disable the Codex provider (legacy `SPECRAILS_HUB_CODEX_BETA` still honoured as a fallback) |
160
+ | `SPECRAILS_CODEX_BETA=0` | Emergency rollback — disable the Codex provider (only the exact string `0`; the legacy `SPECRAILS_HUB_CODEX_BETA` is read as a fallback **only when `SPECRAILS_CODEX_BETA` is unset**) |
161
+ | `SPECRAILS_GEMINI_BETA=0` | Emergency rollback — disable the Gemini provider (default unset = enabled; only the exact string `0` disables; **no legacy fallback name**) |
145
162
  | `SPECRAILS_SMASH=0` | Kill switch for SMASH spec decomposition (`0` / `false` / `off`; endpoints return 409) |
146
163
  | `SPECRAILS_EXPLORE_CONTRACT_REFINE=0` | App-wide kill switch for Contract Refine (auto-fire + retry endpoint; accepts `0` / `false` / `off`) |
147
164
  | `SPECRAILS_EXPLORE_LEGACY_CWD=1` | Force Explore spawns to use the project root instead of the app-managed `explore-cwd/` |
148
- | `SPECRAILS_FILE_SUMMARY_MODEL` | Override the model used for Code-section file summaries |
165
+ | `SPECRAILS_FILE_SUMMARY_MODEL` | Override the model used for Code-section file summaries. Per-provider overrides take precedence: `SPECRAILS_FILE_SUMMARY_MODEL_CLAUDE` (Claude) and `SPECRAILS_FILE_SUMMARY_MODEL_CODEX` (Codex); the generic var is the fallback |
149
166
  | `SPECRAILS_ALLOW_LOCAL_WEBHOOKS=1` | Allow outbound webhooks to target loopback / private-network addresses |
150
167
 
151
168
  ### Client-side (Vite — set at build time)
@@ -156,7 +173,9 @@ These feature flags are **default ON**. Set the flag to `false` to hide the feat
156
173
  |----------|--------|
157
174
  | `VITE_FEATURE_TERMINAL_PANEL=false` | Hide the bottom terminal panel |
158
175
  | `VITE_FEATURE_AGENTS_SECTION=false` | Hide the Agents section |
159
- | `VITE_FEATURE_CODE_EXPLORER=false` | Hide the read-only Code section |
176
+ | `VITE_FEATURE_CODE_EXPLORER=false` | Hide the Code section |
177
+ | `VITE_FEATURE_JIRA=false` | Hide the Jira integration UI (settings section + spec badges) |
178
+ | `VITE_FEATURE_INTERACTIVE_JOBS=false` | Hide the interactive-ultracode UI (rail "Interactive" toggle + in-job chat + Finalize) |
160
179
  | `VITE_FEATURE_EXPLORE_REVIEW=false` | Disable the Review step in the Explore shell |
161
180
  | `VITE_FEATURE_EXPLORE_PREMIUM_UX=false` | Disable the "Conectando…/Pensando…/Consultando código…" pills above the Explore streaming bubble |
162
181
 
@@ -164,6 +183,8 @@ These feature flags are **default ON**. Set the flag to `false` to hide the feat
164
183
 
165
184
  Set them in the shell that launches the app. Desktop app users can set them in their shell rc files since the desktop app inherits the launchd PATH and env.
166
185
 
186
+ > **Not env vars:** a few `SPECRAILS_*` names you might spot in the source are *not* settings you can flip. `SPECRAILS_DIR` is a code constant; `SPECRAILS_PROFILE_PATH`, `SPECRAILS_PLUGINS_ACTIVE`, and `SPECRAILS_PLUGINS_SNAPSHOT` are values the app injects *into* the AI CLI it spawns. Setting them yourself has no effect. The desktop-only `SPECRAILS_IS_DESKTOP` / `SPECRAILS_BUNDLED_RUNTIMES_PATH` are set by the packaged app, never by you.
187
+
167
188
  ## Resetting the app
168
189
 
169
190
  To wipe all app state (project registry, settings, theme) but keep your project source code intact: