specrails-desktop 2.58.1 → 2.59.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.
- package/README.md +2 -5
- package/client/dist/assets/{ActivityFeedPage-BQGppIR0.js → ActivityFeedPage-DBFt8ZHP.js} +1 -1
- package/client/dist/assets/AgentBrowserCapture-DiQx0W67.js +1 -0
- package/client/dist/assets/AgentModeAnalyticsPane-BmDSXp_J.js +2 -0
- package/client/dist/assets/AgentModeCodePane-BLQLPSwr.js +2 -0
- package/client/dist/assets/{AgentModeJobsPane-DR_06oqH.js → AgentModeJobsPane-BbTXdKUa.js} +1 -1
- package/client/dist/assets/{AgentsPage-BKIKjm_1.js → AgentsPage-Dei1jGR8.js} +3 -3
- package/client/dist/assets/{AnalyticsPage-069npRVo.js → AnalyticsPage-BhkeGIGn.js} +1 -1
- package/client/dist/assets/CodePage-B_9yYWUx.js +3 -0
- package/client/dist/assets/{DesktopAnalyticsPage-qtWAPM47.js → DesktopAnalyticsPage-DAcfEJac.js} +1 -1
- package/client/dist/assets/DocsDialog-WCuiYgsc.js +11 -0
- package/client/dist/assets/DocsPage-bGVYTMTU.js +11 -0
- package/client/dist/assets/{ExportDropdown-BcMpvV89.js → ExportDropdown-CsodZ-yb.js} +1 -1
- package/client/dist/assets/InteractiveJobComposer-D5fh_eVL.js +19 -0
- package/client/dist/assets/JobDetailModal-DlpXF61O.js +1 -0
- package/client/dist/assets/JobDetailPage-2yR19_Lb.js +1 -0
- package/client/dist/assets/JobsPage-CS9IR6Dq.js +1 -0
- package/client/dist/assets/LoopBuilderPage-BwiAtmOr.js +1 -0
- package/client/dist/assets/{LoopPreviewModal-je5pSCf-.js → LoopPreviewModal--upwvgTv.js} +1 -1
- package/client/dist/assets/LoopWindowSurface-DRnUixtl.js +1 -0
- package/client/dist/assets/LoopsPage-Xm3nRToQ.js +2 -0
- package/client/dist/assets/MinimizedChatsContext-D_8L4EWZ.js +1 -0
- package/client/dist/assets/PluginsPage-CAFQ1B4Q.js +2 -0
- package/client/dist/assets/ProjectSettingsDialog-DYSO4v90.js +1 -0
- package/client/dist/assets/{RepositoryDeliveries-BiwJuS8r.js → RepositoryDeliveries-CbQmW7Qx.js} +1 -1
- package/client/dist/assets/RepositoryScopeSelector-DKzvIGSZ.js +2 -0
- package/client/dist/assets/ReviewPacketPage-SDBhYdQB.js +4 -0
- package/client/dist/assets/TemplatePreviewModal-DHBUds51.js +1 -0
- package/client/dist/assets/TicketDetailModalContext-UAeNm7BB.js +16 -0
- package/client/dist/assets/{Trans-D3AfDylf.js → Trans-DExd3Z00.js} +1 -1
- package/client/dist/assets/agent-BElLtdKP.js +1 -0
- package/client/dist/assets/agent-C-m9VugX.js +1 -0
- package/client/dist/assets/agent-CGSKxfZk.js +1 -0
- package/client/dist/assets/agent-CW74ODDP.js +1 -0
- package/client/dist/assets/agent-DeCAZDhL.js +1 -0
- package/client/dist/assets/agent-DrM4qned.js +1 -0
- package/client/dist/assets/agent-KdIXq3w5.js +1 -0
- package/client/dist/assets/agent-jK8mCisM.js +1 -0
- package/client/dist/assets/{agentRuntime-DGz_IqKW.js → agentRuntime-15Pkk6we.js} +1 -1
- package/client/dist/assets/agentRuntime-Bpx3yWHK.js +1 -0
- package/client/dist/assets/{agentRuntime-Bg9tbmqm.js → agentRuntime-C78n13To.js} +1 -1
- package/client/dist/assets/{agentRuntime-D-GJVGkj.js → agentRuntime-CCI7XF4c.js} +1 -1
- package/client/dist/assets/{agentRuntime-D2__CVI_.js → agentRuntime-CKDHe2-a.js} +1 -1
- package/client/dist/assets/{agentRuntime-D35dGVOP.js → agentRuntime-Ddqvp2bP.js} +1 -1
- package/client/dist/assets/{agentRuntime-hInH9Fzj.js → agentRuntime-TXPQowKJ.js} +1 -1
- package/client/dist/assets/{agentRuntime-O1liDt6G.js → agentRuntime-hqZRy08E.js} +1 -1
- package/client/dist/assets/{builder-DGETbtZj.js → builder-B9gorTnT.js} +1 -1
- package/client/dist/assets/{builder-DyQperXU.js → builder-Bvw5s3Mi.js} +1 -1
- package/client/dist/assets/{builder-C1neIYGR.js → builder-CL5l4dU3.js} +1 -1
- package/client/dist/assets/{builder-DXEJUlC0.js → builder-CVDTVrQX.js} +1 -1
- package/client/dist/assets/{builder-CzW5ovyI.js → builder-CpS9liE9.js} +1 -1
- package/client/dist/assets/{builder-CvnFm0im.js → builder-DNctIL9Q.js} +1 -1
- package/client/dist/assets/{builder-D06L7iPy.js → builder-De2NxX6o.js} +1 -1
- package/client/dist/assets/{builder-C0FyvM83.js → builder-DeYT7Y-m.js} +1 -1
- package/client/dist/assets/{button-Ccc9Dc-D.js → button-D1xExSTF.js} +1 -1
- package/client/dist/assets/{common-DmsclwjP.js → common-Bdi0qN4S.js} +1 -1
- package/client/dist/assets/{common-C4Yvvhp6.js → common-Bhb9zN1P.js} +1 -1
- package/client/dist/assets/{common-od8WThlf.js → common-BykKlZg1.js} +1 -1
- package/client/dist/assets/{common-C0BOdeNi.js → common-CvnNNSJA.js} +1 -1
- package/client/dist/assets/{common-BCK7c9Pv.js → common-D5zk_mqq.js} +1 -1
- package/client/dist/assets/{common-DpLWwgI1.js → common-DQNO_al5.js} +1 -1
- package/client/dist/assets/{common-OCvl3c8t.js → common-Dax30Vmp.js} +1 -1
- package/client/dist/assets/{common-c0aujEZC.js → common-DkllpVSb.js} +1 -1
- package/client/dist/assets/{dialog-xXB2q5HJ.js → dialog-CMgps2MY.js} +1 -1
- package/client/dist/assets/external-link-D6XxC_Cu.js +1 -0
- package/client/dist/assets/file-text-BcLCfcWZ.js +1 -0
- package/client/dist/assets/{formatDistanceToNow-aBss1Nai.js → formatDistanceToNow-aw7H5ORC.js} +1 -1
- package/client/dist/assets/{getTimezoneOffsetInMilliseconds-DOGj1Mfz.js → getTimezoneOffsetInMilliseconds-NyC7gZJX.js} +1 -1
- package/client/dist/assets/index-CahchzS5.css +2 -0
- package/client/dist/assets/index-JSTZVJfe.js +83 -0
- package/client/dist/assets/integrations-BkpRUbvp.js +1 -0
- package/client/dist/assets/integrations-Bo8qbJf4.js +1 -0
- package/client/dist/assets/integrations-CmSrKzZb.js +1 -0
- package/client/dist/assets/integrations-DGtq26Rr.js +1 -0
- package/client/dist/assets/integrations-De38GFnQ.js +1 -0
- package/client/dist/assets/integrations-Dw6zdtb-.js +1 -0
- package/client/dist/assets/integrations-Dwl9KQp0.js +1 -0
- package/client/dist/assets/integrations-Refg_d2I.js +1 -0
- package/client/dist/assets/jira-api-DlXaRwA3.js +1 -0
- package/client/dist/assets/{jobs-KG4Sn12X.js → jobs-1G3wodhl.js} +1 -1
- package/client/dist/assets/{jobs-6_-r75yC.js → jobs-B4pu8TdF.js} +1 -1
- package/client/dist/assets/{jobs-pPv4KWjb.js → jobs-BD47Ov11.js} +1 -1
- package/client/dist/assets/{jobs-B1yqyId5.js → jobs-BLOoVRRl.js} +1 -1
- package/client/dist/assets/{jobs-BKiK-ZWh.js → jobs-CSrRx5lD.js} +1 -1
- package/client/dist/assets/{jobs-BFuV7ttH.js → jobs-DZAbh1m2.js} +1 -1
- package/client/dist/assets/{jobs-DmKV7b7d.js → jobs-epP7gt8W.js} +1 -1
- package/client/dist/assets/{jobs-BKa8LuwA.js → jobs-tWjcDF_6.js} +1 -1
- package/client/dist/assets/loops--KWr0X-w.js +1 -0
- package/client/dist/assets/{loops-BO3V8244.js → loops-3IutojWt.js} +1 -1
- package/client/dist/assets/{loops-C-hZK8pf.js → loops-BAosWtXE.js} +1 -1
- package/client/dist/assets/{loops-eUnCfLjC.js → loops-BISDssL5.js} +1 -1
- package/client/dist/assets/{loops-Dv849ckF.js → loops-Cm55CXJ4.js} +1 -1
- package/client/dist/assets/{loops-CDOWZ0ci.js → loops-D7tL_Saw.js} +1 -1
- package/client/dist/assets/{loops-BJDY9FTh.js → loops-DHQtnfze.js} +1 -1
- package/client/dist/assets/{loops-Q9LIgGkq.js → loops-kIJJkaxf.js} +1 -1
- package/client/dist/assets/nav--u7iPYlS.js +1 -0
- package/client/dist/assets/nav-C5Jgfaby.js +1 -0
- package/client/dist/assets/nav-CAna_Wpt.js +1 -0
- package/client/dist/assets/nav-CCLqeyHo.js +1 -0
- package/client/dist/assets/nav-Cf3c90Jk.js +1 -0
- package/client/dist/assets/nav-DMYQaQjR.js +1 -0
- package/client/dist/assets/nav-Df_PkZ9F.js +1 -0
- package/client/dist/assets/nav-VyNGBJwj.js +1 -0
- package/client/dist/assets/{project-repositories-CSnfzUpg.js → project-repositories-DXhb9FP4.js} +1 -1
- package/client/dist/assets/provider-capabilities-lePfeT_Y.js +1 -0
- package/client/dist/assets/save-OsUqVn99.js +1 -0
- package/client/dist/assets/settings-B5Hy_Kol.js +1 -0
- package/client/dist/assets/settings-BBj_kZaD.js +1 -0
- package/client/dist/assets/settings-ByVE7jdZ.js +1 -0
- package/client/dist/assets/settings-COlH_P33.js +1 -0
- package/client/dist/assets/settings-D77mC_Lb.js +1 -0
- package/client/dist/assets/settings-DZKy7MqN.js +1 -0
- package/client/dist/assets/settings-Dbyd6gmj.js +1 -0
- package/client/dist/assets/settings-Dn-pXukr.js +1 -0
- package/client/dist/assets/setup-Be485n2u.js +1 -0
- package/client/dist/assets/setup-CKGUxKr-.js +1 -0
- package/client/dist/assets/setup-Ck1Uwd7_.js +1 -0
- package/client/dist/assets/setup-Cm774a6v.js +1 -0
- package/client/dist/assets/setup-DIqMQpxt.js +1 -0
- package/client/dist/assets/setup-DfCsoNFL.js +1 -0
- package/client/dist/assets/setup-DkeE8mP0.js +1 -0
- package/client/dist/assets/setup-xVntVaz1.js +1 -0
- package/client/dist/assets/{spending-HBSk-6jv.js → spending-BdcyVkcd.js} +1 -1
- package/client/dist/assets/subscriptionUsage-Cf87DeS_.js +1 -0
- package/client/dist/assets/subscriptionUsage-D6u7VBdz.js +1 -0
- package/client/dist/assets/subscriptionUsage-DQ02J25O.js +1 -0
- package/client/dist/assets/subscriptionUsage-DWF3zKp4.js +1 -0
- package/client/dist/assets/subscriptionUsage-DkIf6Zuh.js +1 -0
- package/client/dist/assets/subscriptionUsage-DoWQv7l1.js +1 -0
- package/client/dist/assets/subscriptionUsage-N9hB-ARf.js +1 -0
- package/client/dist/assets/subscriptionUsage-zRcRPHkP.js +1 -0
- package/client/dist/assets/tauri-shell-DE6LfGPw.js +2 -0
- package/client/dist/assets/{useDesktop-0unHDBJJ.js → useDesktop-D07TvesS.js} +1 -1
- package/client/dist/assets/{useRuntimeRuns-BN1rhyEm.js → useRuntimeRuns-pGLmtAC6.js} +1 -1
- package/client/dist/assets/useSharedWebSocket-TzKtPRp9.js +2 -0
- package/client/dist/index.html +33 -32
- package/docs/README.md +1 -9
- package/docs/agent-live-steering.md +0 -6
- package/docs/agents/README.md +0 -2
- package/docs/agents/mcp.md +1 -14
- package/docs/cli.md +0 -13
- package/docs/codex.md +2 -75
- package/docs/creating-specs.md +0 -39
- package/docs/customizing.md +1 -15
- package/docs/getting-started.md +0 -23
- package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +0 -8
- package/docs/guide/de/agents/4-custom-agents-catalog.md +0 -15
- package/docs/guide/de/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/de/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/de/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/de/integrations/1-ai-providers.md +2 -50
- package/docs/guide/de/integrations/2-plugins.md +0 -8
- package/docs/guide/de/integrations/5-mcp-server.md +1 -14
- package/docs/guide/de/integrations/6-agent-chat.md +0 -11
- package/docs/guide/de/integrations/7-local-engines.md +0 -4
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +0 -13
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +0 -3
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +0 -20
- package/docs/guide/de/pipeline/5-the-loop-builder.md +0 -6
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +0 -7
- package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +0 -10
- package/docs/guide/en/agents/4-custom-agents-catalog.md +0 -25
- package/docs/guide/en/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/en/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/en/insights/3-code-explorer.md +0 -5
- package/docs/guide/en/integrations/1-ai-providers.md +10 -99
- package/docs/guide/en/integrations/2-plugins.md +0 -8
- package/docs/guide/en/integrations/5-mcp-server.md +1 -1
- package/docs/guide/en/integrations/6-agent-chat.md +0 -17
- package/docs/guide/en/integrations/7-local-engines.md +0 -4
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +2 -24
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +0 -3
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +10 -65
- package/docs/guide/en/pipeline/5-the-loop-builder.md +0 -7
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +0 -11
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +0 -8
- package/docs/guide/es/agents/4-custom-agents-catalog.md +0 -15
- package/docs/guide/es/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/es/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/es/integrations/1-ai-providers.md +10 -75
- package/docs/guide/es/integrations/2-plugins.md +0 -8
- package/docs/guide/es/integrations/5-mcp-server.md +1 -1
- package/docs/guide/es/integrations/6-agent-chat.md +0 -11
- package/docs/guide/es/integrations/7-local-engines.md +0 -4
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +3 -13
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +0 -3
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +10 -53
- package/docs/guide/es/pipeline/5-the-loop-builder.md +1 -6
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +0 -7
- package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +0 -8
- package/docs/guide/fr/agents/4-custom-agents-catalog.md +0 -15
- package/docs/guide/fr/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/fr/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/fr/integrations/1-ai-providers.md +2 -50
- package/docs/guide/fr/integrations/2-plugins.md +0 -8
- package/docs/guide/fr/integrations/5-mcp-server.md +1 -14
- package/docs/guide/fr/integrations/6-agent-chat.md +0 -11
- package/docs/guide/fr/integrations/7-local-engines.md +0 -4
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +0 -13
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +0 -3
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +0 -22
- package/docs/guide/fr/pipeline/5-the-loop-builder.md +0 -6
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +0 -7
- package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +0 -8
- package/docs/guide/it/agents/4-custom-agents-catalog.md +0 -15
- package/docs/guide/it/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/it/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/it/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/it/integrations/1-ai-providers.md +2 -48
- package/docs/guide/it/integrations/2-plugins.md +0 -8
- package/docs/guide/it/integrations/5-mcp-server.md +1 -14
- package/docs/guide/it/integrations/6-agent-chat.md +0 -11
- package/docs/guide/it/integrations/7-local-engines.md +0 -4
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +2 -13
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +0 -3
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +0 -20
- package/docs/guide/it/pipeline/5-the-loop-builder.md +1 -6
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +0 -7
- package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +0 -9
- package/docs/guide/ja/agents/4-custom-agents-catalog.md +0 -15
- package/docs/guide/ja/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/ja/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/ja/integrations/1-ai-providers.md +1 -69
- package/docs/guide/ja/integrations/2-plugins.md +0 -8
- package/docs/guide/ja/integrations/5-mcp-server.md +1 -14
- package/docs/guide/ja/integrations/6-agent-chat.md +0 -10
- package/docs/guide/ja/integrations/7-local-engines.md +0 -4
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +0 -13
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +0 -3
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +0 -21
- package/docs/guide/ja/pipeline/5-the-loop-builder.md +0 -6
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +0 -7
- package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +0 -8
- package/docs/guide/pt/agents/4-custom-agents-catalog.md +0 -15
- package/docs/guide/pt/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/pt/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/pt/integrations/1-ai-providers.md +2 -48
- package/docs/guide/pt/integrations/2-plugins.md +0 -8
- package/docs/guide/pt/integrations/5-mcp-server.md +1 -14
- package/docs/guide/pt/integrations/6-agent-chat.md +0 -10
- package/docs/guide/pt/integrations/7-local-engines.md +0 -4
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +0 -13
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +0 -2
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +0 -21
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +0 -6
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +0 -7
- package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +0 -7
- package/docs/guide/zh/agents/4-custom-agents-catalog.md +0 -15
- package/docs/guide/zh/getting-started/1-what-is-specrails.md +0 -2
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +0 -2
- package/docs/guide/zh/getting-started/3-adding-your-first-project.md +0 -4
- package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +0 -5
- package/docs/guide/zh/integrations/1-ai-providers.md +1 -67
- package/docs/guide/zh/integrations/2-plugins.md +0 -8
- package/docs/guide/zh/integrations/5-mcp-server.md +1 -14
- package/docs/guide/zh/integrations/6-agent-chat.md +0 -9
- package/docs/guide/zh/integrations/7-local-engines.md +0 -4
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +0 -13
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +0 -2
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +0 -20
- package/docs/guide/zh/pipeline/5-the-loop-builder.md +0 -6
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +0 -7
- package/docs/internals/adding-a-provider.md +7 -0
- package/docs/internals/desktop-owned-workflows.md +121 -0
- package/docs/internals/operations-runbook.md +20 -0
- package/docs/internals/programmatic-agent-runtime.md +34 -28
- package/docs/internals/project-builder.md +34 -11
- package/docs/internals/source-map.md +51 -3
- package/docs/internals/spec-addenda.md +11 -5
- package/docs/local-providers.md +8 -13
- package/docs/mcp.md +1 -17
- package/docs/platforms/macos.md +0 -40
- package/docs/platforms/windows-parity.md +1 -1
- package/docs/platforms/windows.md +0 -8
- package/docs/running-pipelines.md +1 -46
- package/docs/subscription-usage.md +19 -0
- package/docs/terminal.md +0 -2
- package/docs/tracking-cost.md +2 -33
- package/package.json +1 -1
- package/server/dist/core-execution.js +24 -15
- package/server/dist/desktop-db.js +23 -10
- package/server/dist/desktop-router.js +8 -4
- package/server/dist/index.js +10 -5
- package/server/dist/mcp/guide.js +1 -0
- package/server/dist/mcp/tools/jobs.js +1 -1
- package/server/dist/mcp/tools/loops.js +2 -0
- package/server/dist/mcp/tools/meta.js +6 -7
- package/server/dist/mcp/tools/projects.js +31 -6
- package/server/dist/mcp/tools/rails.js +6 -3
- package/server/dist/mcp/tools/setup.js +10 -0
- package/server/dist/mcp/tools/specs.js +1 -1
- package/server/dist/modules/accounting/runtime/pricing.js +6 -1
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-bridge.js +55 -12
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-metrics.js +1 -1
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings-router.js +1 -1
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-settings.js +42 -0
- package/server/dist/modules/agent-runtime/runtime/agent-runtime-verification-suggestions.js +10 -4
- package/server/dist/modules/builder/runtime/milestone-chain.js +76 -10
- package/server/dist/modules/delivery/runtime/delivery-evidence.js +3 -2
- package/server/dist/modules/delivery/runtime/multi-repo-execution.js +3 -0
- package/server/dist/modules/delivery/runtime/rail-isolated-launch.js +1 -0
- package/server/dist/modules/delivery/runtime/rail-launch-parser.js +8 -0
- package/server/dist/modules/delivery/runtime/rails-router.js +48 -26
- package/server/dist/modules/delivery/runtime/review-packet.js +1 -1
- package/server/dist/modules/loops/runtime/loop-agent-defaults.json +6 -0
- package/server/dist/modules/loops/runtime/loop-agents.js +21 -0
- package/server/dist/modules/loops/runtime/loop-command-catalog.js +1 -1
- package/server/dist/modules/loops/runtime/loop-core-factory.js +19 -3
- package/server/dist/modules/loops/runtime/loop-definition.js +79 -12
- package/server/dist/modules/loops/runtime/loop-effect.js +1 -1
- package/server/dist/modules/loops/runtime/loop-executors.js +24 -9
- package/server/dist/modules/loops/runtime/loop-factory.js +1 -1
- package/server/dist/modules/loops/runtime/loop-graph.js +5 -14
- package/server/dist/modules/loops/runtime/loop-implement-recipe.js +49 -0
- package/server/dist/modules/loops/runtime/loop-run-manager.js +3 -3
- package/server/dist/modules/loops/runtime/loop-templates.js +29 -5
- package/server/dist/modules/loops/runtime/loops-router.js +17 -0
- package/server/dist/modules/missions/runtime/agent-context-resolver.js +1 -1
- package/server/dist/modules/missions/runtime/agent-operator-prompt.js +17 -8
- package/server/dist/modules/specs/runtime/spec-models.js +4 -7
- package/server/dist/modules/subscription-usage/adapters/claude.js +113 -0
- package/server/dist/modules/subscription-usage/adapters/codex.js +164 -0
- package/server/dist/modules/subscription-usage/adapters/errors.js +15 -0
- package/server/dist/modules/subscription-usage/adapters/http.js +20 -0
- package/server/dist/modules/subscription-usage/adapters/local-auth.js +61 -0
- package/server/dist/modules/subscription-usage/application.js +11 -0
- package/server/dist/modules/subscription-usage/domain.js +70 -0
- package/server/dist/modules/subscription-usage/index.js +2 -0
- package/server/dist/modules/subscription-usage/ports.js +2 -0
- package/server/dist/modules/subscription-usage/runtime/composition.js +20 -0
- package/server/dist/modules/subscription-usage/runtime/usage-service.js +111 -0
- package/server/dist/project-registry.js +16 -1
- package/server/dist/project-repositories.js +51 -2
- package/server/dist/project-router-helpers.js +1 -1
- package/server/dist/project-router-loop-runs.js +4 -1
- package/server/dist/providers/claude-adapter.js +6 -4
- package/server/dist/providers/codex-adapter.js +4 -5
- package/server/dist/schemas/workflow-definition.schema.json +2 -0
- package/client/dist/assets/AgentBrowserCapture-PI-cxyxi.js +0 -1
- package/client/dist/assets/AgentModeAnalyticsPane-mQsOqdXx.js +0 -2
- package/client/dist/assets/AgentModeCodePane-BL-vpmlY.js +0 -2
- package/client/dist/assets/CodePage-Alitorrv.js +0 -3
- package/client/dist/assets/DocsDialog-DwL6rgcT.js +0 -11
- package/client/dist/assets/DocsPage-BA1hiJZ-.js +0 -11
- package/client/dist/assets/InteractiveJobComposer-B3H1YHr6.js +0 -19
- package/client/dist/assets/JobDetailModal-XZQ9eAAy.js +0 -1
- package/client/dist/assets/JobDetailPage-B-SIaq_q.js +0 -1
- package/client/dist/assets/JobsPage-iQXAv2mx.js +0 -1
- package/client/dist/assets/LoopBuilderPage-B_gbFAHn.js +0 -1
- package/client/dist/assets/LoopsPage-BZwcY5cu.js +0 -2
- package/client/dist/assets/MinimizedChatsContext-CNx_0bZu.js +0 -1
- package/client/dist/assets/PluginsPage-DFocnoHX.js +0 -2
- package/client/dist/assets/ProjectSettingsDialog-Bh3S6EBB.js +0 -1
- package/client/dist/assets/RepositoryScopeSelector-C2mvWBQ6.js +0 -1
- package/client/dist/assets/ReviewPacketPage-CrAf-WDy.js +0 -4
- package/client/dist/assets/TemplatePreviewModal-C7DordpN.js +0 -1
- package/client/dist/assets/TicketDetailModalContext-B-DySpKL.js +0 -16
- package/client/dist/assets/agent-BaG10AN6.js +0 -1
- package/client/dist/assets/agent-CH4aJ884.js +0 -1
- package/client/dist/assets/agent-CLc9fA7v.js +0 -1
- package/client/dist/assets/agent-DHh9-AdL.js +0 -1
- package/client/dist/assets/agent-DkKnd6Wv.js +0 -1
- package/client/dist/assets/agent-aiVhqFW1.js +0 -1
- package/client/dist/assets/agent-dbznD3eO.js +0 -1
- package/client/dist/assets/agent-sMVFcPwL.js +0 -1
- package/client/dist/assets/agentRuntime-BeUb3g9g.js +0 -1
- package/client/dist/assets/file-text-CFT-xXKN.js +0 -1
- package/client/dist/assets/index-BS7KCWkV.css +0 -2
- package/client/dist/assets/index-C4Mv6tV6.js +0 -80
- package/client/dist/assets/integrations-CH0zy1Mw.js +0 -1
- package/client/dist/assets/integrations-CIAjhd7L.js +0 -1
- package/client/dist/assets/integrations-CZdwOe8A.js +0 -1
- package/client/dist/assets/integrations-Ct7omMld.js +0 -1
- package/client/dist/assets/integrations-D6MSxy3-.js +0 -1
- package/client/dist/assets/integrations-DbZa-Zyc.js +0 -1
- package/client/dist/assets/integrations-b8pH-vfl.js +0 -1
- package/client/dist/assets/integrations-mB-7zoyT.js +0 -1
- package/client/dist/assets/jira-api-BYbEPlkr.js +0 -1
- package/client/dist/assets/layers-eDMjG41I.js +0 -1
- package/client/dist/assets/loops-B4_D-nbg.js +0 -1
- package/client/dist/assets/nav-B-tpjyc2.js +0 -1
- package/client/dist/assets/nav-BJNXGg29.js +0 -1
- package/client/dist/assets/nav-BdhtRLP7.js +0 -1
- package/client/dist/assets/nav-ByYgyN5T.js +0 -1
- package/client/dist/assets/nav-DA0Mva2c.js +0 -1
- package/client/dist/assets/nav-DcJm_Jg_.js +0 -1
- package/client/dist/assets/nav-DhMPtAXc.js +0 -1
- package/client/dist/assets/nav-DhPb-Isc.js +0 -1
- package/client/dist/assets/provider-capabilities-Vi1ZGvAK.js +0 -1
- package/client/dist/assets/save-B6wGWwBR.js +0 -1
- package/client/dist/assets/settings-3o4Ntzi5.js +0 -1
- package/client/dist/assets/settings-B97jlkwD.js +0 -1
- package/client/dist/assets/settings-BTaT_bsS.js +0 -1
- package/client/dist/assets/settings-CT8w7WiC.js +0 -1
- package/client/dist/assets/settings-Cvr8_tvh.js +0 -1
- package/client/dist/assets/settings-Dn1qgAC8.js +0 -1
- package/client/dist/assets/settings-EShDdg4J.js +0 -1
- package/client/dist/assets/settings-tfLhQZRN.js +0 -1
- package/client/dist/assets/setup-CBMu3tqH.js +0 -1
- package/client/dist/assets/setup-CPh-e6J2.js +0 -1
- package/client/dist/assets/setup-CRKLp_ke.js +0 -1
- package/client/dist/assets/setup-Cy302v4J.js +0 -1
- package/client/dist/assets/setup-D681vTPf.js +0 -1
- package/client/dist/assets/setup-DYK0VBkE.js +0 -1
- package/client/dist/assets/setup-KAuiIiVs.js +0 -1
- package/client/dist/assets/setup-OGX-oCfI.js +0 -1
- package/client/dist/assets/useSharedWebSocket-BZMrX4jr.js +0 -2
- package/client/dist/assets/wrench-BfmNO9Vw.js +0 -1
- package/docs/agy-cli-provider-study.md +0 -257
- package/docs/gemini-cli-provider-study.md +0 -301
- package/docs/gemini-core-support-evaluation.md +0 -160
- package/docs/gemini.md +0 -257
- package/docs/kimi.md +0 -291
package/client/dist/index.html
CHANGED
|
@@ -204,58 +204,60 @@
|
|
|
204
204
|
.specrails-splash__mark .pill { opacity: 1; }
|
|
205
205
|
}
|
|
206
206
|
</style>
|
|
207
|
-
<script type="module" crossorigin src="/assets/index-
|
|
207
|
+
<script type="module" crossorigin src="/assets/index-JSTZVJfe.js"></script>
|
|
208
208
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-CNC7AqOf.js">
|
|
209
209
|
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-zu2_FqZY.js">
|
|
210
210
|
<link rel="modulepreload" crossorigin href="/assets/react-dom-DiWzBDP9.js">
|
|
211
211
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
212
212
|
<link rel="modulepreload" crossorigin href="/assets/chunk-KS7C4IRE-DEKu087k.js">
|
|
213
|
+
<link rel="modulepreload" crossorigin href="/assets/tauri-shell-DE6LfGPw.js">
|
|
213
214
|
<link rel="modulepreload" crossorigin href="/assets/activity-DiyjsgQV.js">
|
|
214
215
|
<link rel="modulepreload" crossorigin href="/assets/addspec-BOvgmcgk.js">
|
|
215
|
-
<link rel="modulepreload" crossorigin href="/assets/agent-
|
|
216
|
-
<link rel="modulepreload" crossorigin href="/assets/agentRuntime-
|
|
216
|
+
<link rel="modulepreload" crossorigin href="/assets/agent-CGSKxfZk.js">
|
|
217
|
+
<link rel="modulepreload" crossorigin href="/assets/agentRuntime-Bpx3yWHK.js">
|
|
217
218
|
<link rel="modulepreload" crossorigin href="/assets/agents-CTwbx-fb.js">
|
|
218
219
|
<link rel="modulepreload" crossorigin href="/assets/agentstudio-BWAKeGgB.js">
|
|
219
220
|
<link rel="modulepreload" crossorigin href="/assets/aiedit-iIjz2_Qk.js">
|
|
220
221
|
<link rel="modulepreload" crossorigin href="/assets/analytics-BWynXPEm.js">
|
|
221
222
|
<link rel="modulepreload" crossorigin href="/assets/attachments-B53PG733.js">
|
|
222
223
|
<link rel="modulepreload" crossorigin href="/assets/browser-CG0PE1j_.js">
|
|
223
|
-
<link rel="modulepreload" crossorigin href="/assets/builder-
|
|
224
|
+
<link rel="modulepreload" crossorigin href="/assets/builder-CpS9liE9.js">
|
|
224
225
|
<link rel="modulepreload" crossorigin href="/assets/chat-BGD7MXAy.js">
|
|
225
226
|
<link rel="modulepreload" crossorigin href="/assets/code-DaZ-ZwCT.js">
|
|
226
227
|
<link rel="modulepreload" crossorigin href="/assets/commands-BAWSYHjQ.js">
|
|
227
|
-
<link rel="modulepreload" crossorigin href="/assets/common-
|
|
228
|
+
<link rel="modulepreload" crossorigin href="/assets/common-Bdi0qN4S.js">
|
|
228
229
|
<link rel="modulepreload" crossorigin href="/assets/dashboard-XGdQ5mjw.js">
|
|
229
230
|
<link rel="modulepreload" crossorigin href="/assets/explore-DgBACn39.js">
|
|
230
|
-
<link rel="modulepreload" crossorigin href="/assets/integrations-
|
|
231
|
+
<link rel="modulepreload" crossorigin href="/assets/integrations-Dwl9KQp0.js">
|
|
231
232
|
<link rel="modulepreload" crossorigin href="/assets/jira-CKJg3HZd.js">
|
|
232
|
-
<link rel="modulepreload" crossorigin href="/assets/jobs-
|
|
233
|
-
<link rel="modulepreload" crossorigin href="/assets/loops-
|
|
233
|
+
<link rel="modulepreload" crossorigin href="/assets/jobs-1G3wodhl.js">
|
|
234
|
+
<link rel="modulepreload" crossorigin href="/assets/loops--KWr0X-w.js">
|
|
234
235
|
<link rel="modulepreload" crossorigin href="/assets/mcp-CUAN6ORK.js">
|
|
235
236
|
<link rel="modulepreload" crossorigin href="/assets/narration-n3hOA7LY.js">
|
|
236
|
-
<link rel="modulepreload" crossorigin href="/assets/nav
|
|
237
|
+
<link rel="modulepreload" crossorigin href="/assets/nav--u7iPYlS.js">
|
|
237
238
|
<link rel="modulepreload" crossorigin href="/assets/packet-B0H15elv.js">
|
|
238
|
-
<link rel="modulepreload" crossorigin href="/assets/settings-
|
|
239
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-
|
|
239
|
+
<link rel="modulepreload" crossorigin href="/assets/settings-Dbyd6gmj.js">
|
|
240
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-CKGUxKr-.js">
|
|
240
241
|
<link rel="modulepreload" crossorigin href="/assets/specs-DfIdoU5L.js">
|
|
242
|
+
<link rel="modulepreload" crossorigin href="/assets/subscriptionUsage-zRcRPHkP.js">
|
|
241
243
|
<link rel="modulepreload" crossorigin href="/assets/terminal-BAzpHtpY.js">
|
|
242
244
|
<link rel="modulepreload" crossorigin href="/assets/tickets-D41ZMQpf.js">
|
|
243
245
|
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-Bjbbp_KS.js">
|
|
244
|
-
<link rel="modulepreload" crossorigin href="/assets/useSharedWebSocket-
|
|
245
|
-
<link rel="modulepreload" crossorigin href="/assets/Trans-
|
|
246
|
-
<link rel="modulepreload" crossorigin href="/assets/useDesktop-
|
|
247
|
-
<link rel="modulepreload" crossorigin href="/assets/provider-capabilities-
|
|
248
|
-
<link rel="modulepreload" crossorigin href="/assets/save-
|
|
249
|
-
<link rel="modulepreload" crossorigin href="/assets/spending-
|
|
246
|
+
<link rel="modulepreload" crossorigin href="/assets/useSharedWebSocket-TzKtPRp9.js">
|
|
247
|
+
<link rel="modulepreload" crossorigin href="/assets/Trans-DExd3Z00.js">
|
|
248
|
+
<link rel="modulepreload" crossorigin href="/assets/useDesktop-D07TvesS.js">
|
|
249
|
+
<link rel="modulepreload" crossorigin href="/assets/provider-capabilities-lePfeT_Y.js">
|
|
250
|
+
<link rel="modulepreload" crossorigin href="/assets/save-OsUqVn99.js">
|
|
251
|
+
<link rel="modulepreload" crossorigin href="/assets/spending-BdcyVkcd.js">
|
|
250
252
|
<link rel="modulepreload" crossorigin href="/assets/sparkles-DrY8hb0X.js">
|
|
251
253
|
<link rel="modulepreload" crossorigin href="/assets/x-CBMI9ejn.js">
|
|
252
|
-
<link rel="modulepreload" crossorigin href="/assets/MinimizedChatsContext-
|
|
254
|
+
<link rel="modulepreload" crossorigin href="/assets/MinimizedChatsContext-D_8L4EWZ.js">
|
|
253
255
|
<link rel="modulepreload" crossorigin href="/assets/zap-CUOlvtT1.js">
|
|
256
|
+
<link rel="modulepreload" crossorigin href="/assets/file-text-BcLCfcWZ.js">
|
|
254
257
|
<link rel="modulepreload" crossorigin href="/assets/circle-x-CMYsN4ZH.js">
|
|
255
258
|
<link rel="modulepreload" crossorigin href="/assets/download-CFHyyHcw.js">
|
|
256
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
259
|
+
<link rel="modulepreload" crossorigin href="/assets/external-link-D6XxC_Cu.js">
|
|
257
260
|
<link rel="modulepreload" crossorigin href="/assets/git-branch-BRM0F5GN.js">
|
|
258
|
-
<link rel="modulepreload" crossorigin href="/assets/layers-eDMjG41I.js">
|
|
259
261
|
<link rel="modulepreload" crossorigin href="/assets/loader-circle-DcygOQpC.js">
|
|
260
262
|
<link rel="modulepreload" crossorigin href="/assets/pencil-C9RkrIPZ.js">
|
|
261
263
|
<link rel="modulepreload" crossorigin href="/assets/square-Ci-PFcFe.js">
|
|
@@ -264,23 +266,22 @@
|
|
|
264
266
|
<link rel="modulepreload" crossorigin href="/assets/search-Cq_gE3Ik.js">
|
|
265
267
|
<link rel="modulepreload" crossorigin href="/assets/trash-2-BOU3WdZZ.js">
|
|
266
268
|
<link rel="modulepreload" crossorigin href="/assets/triangle-alert-H9T4jAmh.js">
|
|
267
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
269
|
+
<link rel="modulepreload" crossorigin href="/assets/jira-api-DlXaRwA3.js">
|
|
268
270
|
<link rel="modulepreload" crossorigin href="/assets/clsx-CjueKrWZ.js">
|
|
269
271
|
<link rel="modulepreload" crossorigin href="/assets/utils-BC4DHlz2.js">
|
|
270
|
-
<link rel="modulepreload" crossorigin href="/assets/dialog-
|
|
272
|
+
<link rel="modulepreload" crossorigin href="/assets/dialog-CMgps2MY.js">
|
|
271
273
|
<link rel="modulepreload" crossorigin href="/assets/lib-CGdyxIWg.js">
|
|
272
|
-
<link rel="modulepreload" crossorigin href="/assets/getTimezoneOffsetInMilliseconds-
|
|
273
|
-
<link rel="modulepreload" crossorigin href="/assets/formatDistanceToNow-
|
|
274
|
-
<link rel="modulepreload" crossorigin href="/assets/button-
|
|
275
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
276
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
277
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
278
|
-
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModalContext-B-DySpKL.js">
|
|
274
|
+
<link rel="modulepreload" crossorigin href="/assets/getTimezoneOffsetInMilliseconds-NyC7gZJX.js">
|
|
275
|
+
<link rel="modulepreload" crossorigin href="/assets/formatDistanceToNow-aw7H5ORC.js">
|
|
276
|
+
<link rel="modulepreload" crossorigin href="/assets/button-D1xExSTF.js">
|
|
277
|
+
<link rel="modulepreload" crossorigin href="/assets/project-repositories-DXhb9FP4.js">
|
|
278
|
+
<link rel="modulepreload" crossorigin href="/assets/RepositoryScopeSelector-DKzvIGSZ.js">
|
|
279
|
+
<link rel="modulepreload" crossorigin href="/assets/TicketDetailModalContext-UAeNm7BB.js">
|
|
279
280
|
<link rel="modulepreload" crossorigin href="/assets/core-B3mKBIh5.js">
|
|
280
|
-
<link rel="modulepreload" crossorigin href="/assets/RepositoryDeliveries-
|
|
281
|
-
<link rel="modulepreload" crossorigin href="/assets/useRuntimeRuns-
|
|
281
|
+
<link rel="modulepreload" crossorigin href="/assets/RepositoryDeliveries-CbQmW7Qx.js">
|
|
282
|
+
<link rel="modulepreload" crossorigin href="/assets/useRuntimeRuns-pGLmtAC6.js">
|
|
282
283
|
<link rel="modulepreload" crossorigin href="/assets/event-Bt7f3wXe.js">
|
|
283
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
284
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CahchzS5.css">
|
|
284
285
|
</head>
|
|
285
286
|
<body>
|
|
286
287
|
<div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
|
package/docs/README.md
CHANGED
|
@@ -2,15 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Welcome. These guides are written for **you, the user**: how to get specrails-desktop running, how to use each feature, and what to do when something looks off.
|
|
4
4
|
|
|
5
|
-
Specrails works with four AI CLIs — **Claude Code**, **OpenAI Codex**,
|
|
6
|
-
**Google Gemini**, and **Kimi Code**. Install any compatible combination per
|
|
7
|
-
project and choose which engine runs each task.
|
|
8
|
-
|
|
9
5
|
If you're contributing to the app itself or building on its API, head over to [`internals/`](internals/) for the technical deep dive.
|
|
10
6
|
|
|
11
7
|
## Exclusively for agents
|
|
12
8
|
|
|
13
|
-
When asked to connect to Specrails MCP, read [the agent runbook](agents/mcp.md). It covers Claude
|
|
9
|
+
When asked to connect to Specrails MCP, read [the agent runbook](agents/mcp.md). It covers Claude and Codex, preserves existing servers and requires a real read-only verification.
|
|
14
10
|
|
|
15
11
|
## Start here
|
|
16
12
|
|
|
@@ -27,8 +23,6 @@ When asked to connect to Specrails MCP, read [the agent runbook](agents/mcp.md).
|
|
|
27
23
|
| [Running pipelines](running-pipelines.md) | …you want to launch the AI pipeline against a spec, manage rails, pick agent profiles, or install plugins |
|
|
28
24
|
| [Programmatic agent runtime](internals/programmatic-agent-runtime.md) | …you want separate phases, a provider per role, a local model, or explicit workflow recovery |
|
|
29
25
|
| [Using Codex](codex.md) | …you added a project with OpenAI's Codex CLI instead of (or alongside) Claude |
|
|
30
|
-
| [Using Gemini](gemini.md) | …you added a project with Google's Gemini CLI instead of (or alongside) Claude, Codex, or Kimi |
|
|
31
|
-
| [Using Kimi](kimi.md) | …you want Kimi Code setup, models/effort, session behavior, MCP, and native limitations |
|
|
32
26
|
| [Tracking cost](tracking-cost.md) | …you want to see what AI is costing you and which specs are the most expensive |
|
|
33
27
|
| [Customising the app](customizing.md) | …you want to change theme, configure settings, set a budget, or turn on telemetry |
|
|
34
28
|
| [Terminal panel](terminal.md) | …you want to use the built-in terminal: shortcuts, shell integration, drag-and-drop |
|
|
@@ -45,8 +39,6 @@ When asked to connect to Specrails MCP, read [the agent runbook](agents/mcp.md).
|
|
|
45
39
|
- **"How do I install it?"** → [Getting started](getting-started.md#install)
|
|
46
40
|
- **"How do I add a project?"** → [Getting started](getting-started.md#add-a-project)
|
|
47
41
|
- **"Quick vs Explore mode?"** → [Creating specs › Creating a spec](creating-specs.md#creating-a-spec)
|
|
48
|
-
- **"How do I use a different provider?"** → [Using Codex](codex.md) ·
|
|
49
|
-
[Using Gemini](gemini.md) · [Using Kimi](kimi.md)
|
|
50
42
|
- **"How do I compare two specs?"** → [Creating specs › Compare two specs side by side](creating-specs.md#compare-two-specs-side-by-side)
|
|
51
43
|
- **"What's a draft?"** → [Creating specs › Drafts](creating-specs.md#drafts)
|
|
52
44
|
- **"What's SMASH?"** → [Creating specs › SMASH a big spec](creating-specs.md#smash-a-big-spec)
|
|
@@ -10,8 +10,6 @@ Enviar y Detener permanecen disponibles por separado. Una vez solicitada la entr
|
|
|
10
10
|
|
|
11
11
|
Con **Claude y Codex**, las indicaciones entran por el canal nativo del proveedor durante la ejecución. No hace falta esperar a una llamada al MCP de Specrails. Claude las incorpora al contexto después de su lote de herramientas en curso; Codex acepta la actualización del turno activo mediante `turn/steer`. No se mata una herramienta para introducir el mensaje. La conversación mantiene el orden: respuesta anterior, nueva indicación y continuación del agente.
|
|
12
12
|
|
|
13
|
-
Con **Gemini y Kimi**, los transportes actuales siguen entregando las indicaciones en el siguiente punto seguro de las herramientas de Specrails. Si una acción ya está ejecutándose, se conserva su resultado. Las acciones todavía no iniciadas se suspenden para que el agente lea la corrección y revise su plan. Si no aparece otro punto de entrega, Specrails continúa con el mensaje pendiente al terminar la invocación.
|
|
14
|
-
|
|
15
13
|
Si el agente está esperando novedades de un rail o job mediante `specrails_watch`, tu mensaje termina inmediatamente esa espera para darle paso. El rail o job observado sigue ejecutándose; no se cancela como efecto de enviar el mensaje.
|
|
16
14
|
|
|
17
15
|
## Estados y recuperación
|
|
@@ -31,8 +29,6 @@ Los estados de envío se muestran como iconos, con su explicación al pasar el r
|
|
|
31
29
|
|
|
32
30
|
Enviar durante una ejecución no garantiza que el modelo cambie una acción que ya ha comenzado ni que interrumpa su razonamiento inmediatamente. El eco de usuario con UUID en Claude y la respuesta de `turn/steer` en Codex confirman recepción; por sí solos no demuestran lectura. En ambos, el verde requiere que el agente confirme esos mensajes con `specrails_mission(action:'acknowledge_inputs', inputIds:[queueId, ...])`. Una salida posterior del modelo no marca automáticamente leída una corrección nativa. En la vía MCP, confirmar la revisión entregada con `acknowledge_updates` registra la lectura. El mensaje inicial incluye un identificador de entrada y también requiere un acuse explícito de lectura. Los avisos sintéticos del proveedor no ponen checks verdes. Si el turno ya terminó antes del envío, el mensaje continúa por la vía normal. Una escritura sin confirmación nunca se reintenta automáticamente.
|
|
33
31
|
|
|
34
|
-
Claude usa un proceso `stream-json` con entrada abierta; una indicación que llega después de su última frontera interna puede ejecutarse como siguiente turno nativo del mismo proceso. Gemini ACP actualmente cancela el prompt anterior al enviar otro, y Kimi requiere un transporte Server API diferente: no se usan esas rutas como sustituto de la entrega actual.
|
|
35
|
-
|
|
36
32
|
Una indicación a la misión no cambia por sí sola un job de los rails que ya se haya lanzado. El agente debe revisar su estado y realizar las acciones de gestión apropiadas con los permisos existentes. El proveedor, el proyecto fijado y los permisos del proceso activo tampoco cambian mediante una indicación.
|
|
37
33
|
|
|
38
34
|
Las referencias a specs, archivos y repositorios conservan su identidad. Los adjuntos de texto se resuelven como contexto. Codex recibe las imágenes por su entrada nativa de archivo; Claude recibe bloques de imagen y los otros transportes usan imágenes MCP, con un presupuesto de 8 MiB por lote. Los archivos originales y sus referencias se conservan; las imágenes no disponibles o que superan el presupuesto se indican explícitamente sin inventar su contenido.
|
|
@@ -53,8 +49,6 @@ Cada invocación, incluido un reintento por sesión caducada, recibe una capabil
|
|
|
53
49
|
|
|
54
50
|
- [Claude CLI: stream-json y replay-user-messages](https://code.claude.com/docs/en/cli-reference), contrastado con el bucle nativo de Claude Code 2.1.261.
|
|
55
51
|
- [Codex app-server](https://learn.chatgpt.com/docs/app-server), contrastado con el esquema generado por Codex 0.153.4.
|
|
56
|
-
- [Gemini model steering](https://geminicli.com/docs/cli/model-steering/) y ACP instalado 0.49.0: la capacidad interactiva no equivale a entrada sin interrupción en su transporte ACP.
|
|
57
|
-
- [Kimi Server API](https://www.kimi.com/code/docs/en/kimi-code-cli/reference/server-api.html): transporte distinto del modo print utilizado actualmente.
|
|
58
52
|
|
|
59
53
|
## Definition engine runs
|
|
60
54
|
|
package/docs/agents/README.md
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# Documentation exclusively for agents
|
|
2
2
|
|
|
3
|
-
When a person says “connect to the Specrails MCP”, use the [connection runbook](mcp.md). These instructions cover Claude Code, Codex CLI/desktop, Kimi Code and Gemini CLI. They require local discovery, a configuration-preserving registration and a real read-only verification.
|
|
4
|
-
|
|
5
3
|
## Maintaining the public copy
|
|
6
4
|
|
|
7
5
|
The canonical connection runbook is `docs/agents/mcp.md` in Specrails Desktop. Specrails Web keeps a reviewed copy in `src/content/for-agents/`. Its `docs:sync` command generates `/llms.txt`, `/for-agents/index.html` and the static Markdown runbook. These resources are usable without executing the documentation SPA.
|
package/docs/agents/mcp.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# For agents only: connect to Specrails MCP
|
|
2
2
|
|
|
3
|
-
Use this runbook when a person asks Claude
|
|
3
|
+
Use this runbook when a person asks Claude or Codex to connect to Specrails. Complete discovery, registration and a read-only verification for the requested client. Do not configure both clients unless asked. If the tools are already loaded, test the existing connection before changing anything.
|
|
4
4
|
|
|
5
5
|
This is an external agent connecting to Specrails Desktop. It is separate from choosing an AI provider inside Specrails. Connection authorization does not authorize starting missions, creating specs or changing permission tiers. If local files or the client configuration are inaccessible, complete the available checks and report the exact remaining step.
|
|
6
6
|
|
|
@@ -42,8 +42,6 @@ Check the installed client's version and help before editing. Prefer user scope
|
|
|
42
42
|
|---|---|---|
|
|
43
43
|
| Claude Code | `claude mcp add --scope user --transport stdio specrails --` followed by the verified executable and arguments. User and local entries live in `~/.claude.json`; project entries use `.mcp.json`. The default CLI scope is local, so select scope explicitly. | `claude mcp get specrails`; `/mcp` in the client. Project approvals can block loading. |
|
|
44
44
|
| Codex CLI / desktop | `codex mcp add specrails --` followed by the verified executable and arguments. TOML user configuration, normally `~/.codex/config.toml`, is shared by local Codex clients using that home. | `codex mcp get specrails`; inspect the actual conversation tool catalog. |
|
|
45
|
-
| Gemini CLI | `gemini mcp add --scope user --transport stdio specrails` followed by the verified executable and arguments. Uses `mcpServers` in `~/.gemini/settings.json`; project scope uses `.gemini/settings.json` and is the CLI default. | `gemini mcp list`; `/mcp` in the client. Check allowed/excluded servers and tools. Do not add `--trust` merely to connect. |
|
|
46
|
-
| Kimi Code | Merge the stdio entry into `~/.kimi-code/mcp.json` (or the configured `KIMI_CODE_HOME`), or project `.kimi-code/mcp.json`. Project entries override user entries. Kimi Code 0.27.0 does **not** expose `kimi mcp add`; do not confuse it with the older Python Kimi CLI. | `/mcp` shows connection status; `/mcp-config` edits entries interactively. A newly added file entry requires a new session. |
|
|
47
45
|
|
|
48
46
|
The following commands are **alternatives**, not a script to install all clients. These macOS examples require the same two file checks shown above and no conflicting existing entry:
|
|
49
47
|
|
|
@@ -54,15 +52,6 @@ claude mcp add --scope user --transport stdio specrails -- \
|
|
|
54
52
|
/Applications/Specrails.app/Contents/Resources/binaries/specrails-mcp.js
|
|
55
53
|
```
|
|
56
54
|
|
|
57
|
-
```bash
|
|
58
|
-
# Gemini CLI only
|
|
59
|
-
gemini mcp add --scope user --transport stdio specrails \
|
|
60
|
-
/Applications/Specrails.app/Contents/Resources/runtimes/node/bin/node \
|
|
61
|
-
/Applications/Specrails.app/Contents/Resources/binaries/specrails-mcp.js
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
For Kimi Code, merge this macOS example into the chosen `mcp.json`, retaining the existing root object and other servers. Use the verified paths for other installations:
|
|
65
|
-
|
|
66
55
|
```json
|
|
67
56
|
{
|
|
68
57
|
"mcpServers": {
|
|
@@ -76,8 +65,6 @@ For Kimi Code, merge this macOS example into the chosen `mcp.json`, retaining th
|
|
|
76
65
|
|
|
77
66
|
Claude Desktop is a separate client from Claude Code. If that is the requested host, merge this same `mcpServers` structure in its local MCP configuration through its settings; registering Claude Code alone is not proof that Claude Desktop is configured.
|
|
78
67
|
|
|
79
|
-
Sources: [Claude Code MCP](https://code.claude.com/docs/en/mcp), [Gemini CLI MCP](https://geminicli.com/docs/tools/mcp-server/), [Kimi Code MCP](https://moonshotai.github.io/kimi-code/en/customization/mcp). Command shapes were also checked against installed help for Claude Code 2.1.265, Gemini CLI 0.49.0 and Kimi Code 0.27.0. Client configuration and live connection are separate checks.
|
|
80
|
-
|
|
81
68
|
## Verify all three stages
|
|
82
69
|
|
|
83
70
|
- **Registered:** the requested client's configuration check (for Codex, `codex mcp get specrails`) shows the expected stdio command and arguments. This only proves configuration was saved.
|
package/docs/cli.md
CHANGED
|
@@ -8,8 +8,6 @@ The `specrails-desktop` CLI does three things:
|
|
|
8
8
|
|
|
9
9
|
Everything here is grouped by what you're trying to do, not by alphabetical order of flags.
|
|
10
10
|
|
|
11
|
-
## Manage the app
|
|
12
|
-
|
|
13
11
|
### Start it
|
|
14
12
|
|
|
15
13
|
```bash
|
|
@@ -49,8 +47,6 @@ specrails-desktop --jobs # see the note below
|
|
|
49
47
|
|
|
50
48
|
> **Note on `--jobs`:** there is no app-level `/api/jobs` route, so the server returns 404 and `--jobs` prints `jobs history requires manager with SQLite persistence (#57)` and exits non-zero against a running server. Job history lives **per project** — view it on the project's **Jobs** page (right sidebar) in the dashboard instead.
|
|
51
49
|
|
|
52
|
-
## Manage projects
|
|
53
|
-
|
|
54
50
|
### List
|
|
55
51
|
|
|
56
52
|
```bash
|
|
@@ -160,14 +156,6 @@ specrails-desktop --project ~/repos/api-srv implement "#5" "#6"
|
|
|
160
156
|
|
|
161
157
|
`--project` accepts a project **name** or a **path** (absolute, or relative starting with `.` / `..`). Use it when you want to launch work in a project from outside its directory (e.g. from a CI runner or your home directory). Both `--project` and `--port` may appear **anywhere** in the command, not just at the front.
|
|
162
158
|
|
|
163
|
-
## Providers
|
|
164
|
-
|
|
165
|
-
The app supports four AI providers — **Claude, Codex, Gemini, and Kimi** — and all four are registered by default. Each project is configured with one or more of them when you add it.
|
|
166
|
-
|
|
167
|
-
The CLI itself has **no provider flag**: a CLI-routed job always launches the project's **primary provider** (the first one you selected when you added the project). To pick a different engine for a single spec or rail on a multi-provider project, use the **dashboard** — the Add Spec engine selector or the rail-header engine selector. Provider guides: [Codex](codex.md), [Gemini](gemini.md), and [Kimi](kimi.md).
|
|
168
|
-
|
|
169
|
-
> **Ops note:** to constrain which providers the dashboard offers, set `SPECRAILS_CODEX_BETA=0` or `SPECRAILS_GEMINI_BETA=0` in the server's environment (only the exact string `0` disables a provider; unset, `1`, or `true` all leave it enabled). This affects the dashboard's provider picker, not the CLI, which has no engine flag.
|
|
170
|
-
|
|
171
159
|
## OpenSpec workflow
|
|
172
160
|
|
|
173
161
|
Bundled `opsx:*` commands for structured change management of the app itself. Run them from the project directory:
|
|
@@ -205,7 +193,6 @@ If you invoke a command that routes work (`implement`, a raw prompt, …) while
|
|
|
205
193
|
|
|
206
194
|
This fallback has two important limitations:
|
|
207
195
|
|
|
208
|
-
- **It always spawns `claude`** — even on a project whose primary provider is Codex, Gemini, or Kimi. The offline path does not honour the project's configured provider, so an offline run can behave differently from the same command run through the app.
|
|
209
196
|
- **Nothing is recorded.** There's no queue, no job in the Dashboard, and nothing written to Analytics.
|
|
210
197
|
|
|
211
198
|
Start the app first (`specrails-desktop start`) if you want the job to use the right provider and show up in the dashboard.
|
package/docs/codex.md
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
# Using Specrails with the Codex CLI
|
|
2
2
|
|
|
3
|
-
Specrails supports **four AI providers** — Claude, Codex, Gemini, and Kimi.
|
|
4
|
-
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) or [Kimi guide](kimi.md).
|
|
8
|
-
|
|
9
3
|
> **Just want to get going?** Install the `codex` CLI, log in, then in
|
|
10
4
|
> the app click **Add Project → check Codex → Submit**. The rest of the
|
|
11
5
|
> app (specs, rails, chat, analytics) works the same as it does for
|
|
@@ -14,7 +8,7 @@ This guide covers OpenAI's
|
|
|
14
8
|
You pick any subset of the four providers when you add a project — and
|
|
15
9
|
you can mix them in a single project too (see [Running more than one
|
|
16
10
|
provider in one project](#running-more-than-one-provider-in-one-project)
|
|
17
|
-
below).
|
|
11
|
+
below). Both are registered by default.
|
|
18
12
|
|
|
19
13
|
> The codex path is enabled by default. To temporarily disable it
|
|
20
14
|
> (e.g. as an emergency rollback), set `SPECRAILS_CODEX_BETA=0` in the
|
|
@@ -38,28 +32,6 @@ binary isn't on `PATH`; it shows install commands if you click "More info".
|
|
|
38
32
|
|
|
39
33
|
## Adding a codex project
|
|
40
34
|
|
|
41
|
-
1. Open the app UI and click **Add Project**.
|
|
42
|
-
2. Pick the project's path.
|
|
43
|
-
3. In the **AI providers** row, check **Codex** (you can check
|
|
44
|
-
**Claude**, **Gemini**, and/or **Kimi** 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.
|
|
47
|
-
4. Submit. The app writes `.specrails/install-config.yaml` (with
|
|
48
|
-
`provider: codex` and `tier: quick` as YAML keys) and spawns
|
|
49
|
-
`npx --yes --prefer-online specrails-core@^5.1.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@^5.1.0`; that floor is the version that ships the
|
|
52
|
-
current provider targets, including Kimi and the Codex skill set.) The install
|
|
53
|
-
produces:
|
|
54
|
-
- `.codex/config.toml` — model, reasoning effort, sandbox mode, and
|
|
55
|
-
approval policy (all top-level keys per the codex 0.128.0+ schema).
|
|
56
|
-
- `.codex/skills/sr-*/SKILL.md` — general specrails skills
|
|
57
|
-
(implement, why, compat-check, …).
|
|
58
|
-
- `.codex/skills/rails/sr-*/SKILL.md` — the pipeline rails.
|
|
59
|
-
- `AGENTS.md` — top-level instructions file with a sentinel-protected
|
|
60
|
-
managed block. Anything outside the sentinels is preserved on
|
|
61
|
-
updates.
|
|
62
|
-
|
|
63
35
|
The exact rail and lifecycle skill set is produced by
|
|
64
36
|
`specrails-core`, not the app, so the precise file list can vary by
|
|
65
37
|
core version.
|
|
@@ -72,14 +44,6 @@ the choice later.
|
|
|
72
44
|
|
|
73
45
|
## Running more than one provider in one project
|
|
74
46
|
|
|
75
|
-
A single project can install **any combination** of Claude, Codex, Gemini, and
|
|
76
|
-
Kimi. 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."*
|
|
82
|
-
|
|
83
47
|
Once more than one is installed:
|
|
84
48
|
|
|
85
49
|
- **Per-invocation engine pickers** let you choose which engine runs each
|
|
@@ -90,11 +54,6 @@ Once more than one is installed:
|
|
|
90
54
|
to choose.
|
|
91
55
|
- The **selected engine is remembered per project** (it defaults to the
|
|
92
56
|
primary), so you don't have to re-pick on every spawn.
|
|
93
|
-
- **Provider-scoped capabilities.** Claude and Kimi expose independent
|
|
94
|
-
profile catalogs; Codex and Gemini run rails in legacy/no-profile mode.
|
|
95
|
-
Integration entries and health are resolved for the effective provider:
|
|
96
|
-
Serena supports Claude, Codex, and Kimi through each provider's native MCP
|
|
97
|
-
registration, while Jira is provider-agnostic.
|
|
98
57
|
|
|
99
58
|
When only one provider is installed the app behaves byte-identically to
|
|
100
59
|
a single-provider project — no engine pickers, no provider persisted on
|
|
@@ -113,23 +72,13 @@ These models do not offer `minimal`. Mission-originated launches inherit the
|
|
|
113
72
|
mission's model and effort when the engine matches; an explicit launch model
|
|
114
73
|
still takes precedence.
|
|
115
74
|
|
|
116
|
-
The table below includes all four registered providers. See the
|
|
117
|
-
[Kimi guide](kimi.md) for its full safety matrix.
|
|
118
|
-
|
|
119
|
-
| Surface | Claude | Codex | Gemini | Kimi |
|
|
120
75
|
|---|---|---|---|---|
|
|
121
|
-
| **CLI** | `claude` | `codex` | `gemini` | `kimi` |
|
|
122
76
|
| **Min CLI version** | none pinned | `0.128.0` | `0.11.0` | `0.27.0` |
|
|
123
|
-
| **Project dir** | `.claude/` | `.codex/` | `.gemini/` | `.kimi-code/` |
|
|
124
|
-
| **Instructions file** | `CLAUDE.md` | `AGENTS.md` | `GEMINI.md` | `AGENTS.md` |
|
|
125
|
-
| **Default model** | `sonnet` | `gpt-5.5` (catalog also lists `gpt-6-astra` — the `max` preset model, no rate card yet so its cost shows as unavailable — and the GPT-5.6 family `gpt-5.6-sol` / `gpt-5.6-terra` / `gpt-5.6-luna`) | `gemini-3.5-flash` | `k3` |
|
|
126
77
|
| **Reasoning efforts** | `low`–`xhigh` | model-dependent | none | `low`/`high`/`max`, K3 only |
|
|
127
|
-
| **Agent format** | `.claude/agents/<id>.md` | `.codex/skills/<id>/SKILL.md` | `.gemini/` target | `.kimi-code/skills/<id>/SKILL.md` |
|
|
128
78
|
| **Agent profiles** | ✅ | legacy | legacy | ✅ provider-scoped |
|
|
129
79
|
| **Implement** | ✅ | ✅ | ✅ | ✅ |
|
|
130
80
|
| **Freestyle** | ✅ | ❌ | ❌ | ✅ |
|
|
131
81
|
| **Pure-output transforms** | capability-dependent | capability-dependent | capability-dependent | ❌ fail closed |
|
|
132
|
-
| **MCP registration** | `.mcp.json` | isolated `CODEX_HOME` | `.gemini/settings.json` | `.kimi-code/mcp.json` |
|
|
133
82
|
| **Session resume** | `--resume` | `exec resume` | `--resume` | bound `--session=<id>` after resume hint |
|
|
134
83
|
| **Native cost report** | exact | estimated | estimated | unavailable |
|
|
135
84
|
| **Telemetry** | native | synthesized | native | unavailable |
|
|
@@ -141,9 +90,6 @@ A few Codex-specific behaviours worth calling out:
|
|
|
141
90
|
a rail can read and write anywhere in the project. This is intentional —
|
|
142
91
|
rails need to apply edits across the repo — but it's worth knowing if
|
|
143
92
|
you're surprised by a rail touching files outside the working tree.
|
|
144
|
-
- **Freestyle rails require a capable provider.** Launching a Freestyle rail
|
|
145
|
-
(`mode: freestyle`) on Codex or Gemini is rejected before spawn. Pick Claude
|
|
146
|
-
or Kimi for that autonomous rail mode.
|
|
147
93
|
|
|
148
94
|
## Estimated cost
|
|
149
95
|
|
|
@@ -163,7 +109,7 @@ The Analytics page surfaces this in two places:
|
|
|
163
109
|
- **A "By provider" card** between the Hero and the Timeline splits
|
|
164
110
|
cost per provider into authoritative vs estimated whenever the project
|
|
165
111
|
has invoked more than one. Claude rows are authoritative (the CLI
|
|
166
|
-
reports cost); Codex
|
|
112
|
+
reports cost); Codex rows are estimated from token counts
|
|
167
113
|
and the local rate-card.
|
|
168
114
|
|
|
169
115
|
The pricing table is reviewed quarterly. The reference date sits on
|
|
@@ -172,13 +118,6 @@ ship an out-of-band update to `server/modules/accounting/runtime/pricing.ts`.
|
|
|
172
118
|
|
|
173
119
|
## Plugins and MCP on codex projects
|
|
174
120
|
|
|
175
|
-
The **Integrations** section stays visible on Codex projects. Serena is
|
|
176
|
-
provider-aware and registers its server with `codex mcp add` in Specrails'
|
|
177
|
-
isolated per-project `CODEX_HOME`; Claude uses `.mcp.json`, and Kimi uses
|
|
178
|
-
`.kimi-code/mcp.json`. Install state and health are scoped to the selected
|
|
179
|
-
provider, so one provider's entry never masquerades as another's. Jira remains
|
|
180
|
-
provider-agnostic.
|
|
181
|
-
|
|
182
121
|
For MCP servers outside the managed plugin catalog, use Codex's native
|
|
183
122
|
configuration flow. Codex chat and Explore turns inherit the appropriate Codex
|
|
184
123
|
environment and read that MCP configuration.
|
|
@@ -228,9 +167,6 @@ SPECRAILS_CODEX_BETA=0 npm run dev
|
|
|
228
167
|
For the packaged desktop app, set the variable in the environment the app
|
|
229
168
|
process inherits (the `npm run dev` form is for source runs only).
|
|
230
169
|
|
|
231
|
-
(Gemini has the same kill switch, `SPECRAILS_GEMINI_BETA=0`, but **no**
|
|
232
|
-
legacy `SPECRAILS_HUB_*` fallback name.)
|
|
233
|
-
|
|
234
170
|
`GET /api/available-providers` will report `codex: false` and
|
|
235
171
|
`POST /api/projects` will refuse new codex projects. Existing
|
|
236
172
|
codex projects keep functioning — the env var only gates creating
|
|
@@ -249,17 +185,8 @@ The codex integration lives in:
|
|
|
249
185
|
- `server/plugins/codex-mcp.ts` — `codex mcp add/remove/list` wrapper
|
|
250
186
|
with per-project `CODEX_HOME`.
|
|
251
187
|
|
|
252
|
-
The contract every provider implements is at
|
|
253
|
-
`server/providers/types.ts`. Adding a provider is essentially one new
|
|
254
|
-
adapter file + one `register(...)` entry in `server/providers/index.ts`
|
|
255
|
-
(the rest of the codebase is registry-driven and provider-id-agnostic).
|
|
256
|
-
`server/providers/gemini-adapter.ts` is the freshest worked example —
|
|
257
|
-
see [Adding a provider](internals/adding-a-provider.md).
|
|
258
|
-
|
|
259
188
|
## See also
|
|
260
189
|
|
|
261
|
-
- [Using Gemini](gemini.md) — the Gemini CLI provider (the other
|
|
262
|
-
provider with estimated cost).
|
|
263
190
|
- [Adding a provider](internals/adding-a-provider.md) — the developer
|
|
264
191
|
guide to wiring an AI CLI adapter.
|
|
265
192
|
- [Tracking cost](tracking-cost.md) — how the Analytics page surfaces
|
package/docs/creating-specs.md
CHANGED
|
@@ -2,13 +2,6 @@
|
|
|
2
2
|
|
|
3
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
4
|
|
|
5
|
-
Specs are engine-agnostic: depending on how the project was set up, they can
|
|
6
|
-
be shaped by **Claude, Codex, Gemini, or Kimi**. Engine selectors show only
|
|
7
|
-
providers that advertise the surface's required capability. Kimi is available
|
|
8
|
-
for agentic Explore/proposal work, but its `-p` mode cannot enforce the
|
|
9
|
-
no-tools/read-only boundary required by Quick Spec and the structured
|
|
10
|
-
transforms listed below.
|
|
11
|
-
|
|
12
5
|
## Creating a spec
|
|
13
6
|
|
|
14
7
|
Open the Dashboard and click **Add** (the Plus button on the SpecsBoard toolbar). The **Add Spec** dialog opens with three modes:
|
|
@@ -17,20 +10,10 @@ Open the Dashboard and click **Add** (the Plus button on the SpecsBoard toolbar)
|
|
|
17
10
|
- **Explore** — you converse with the AI and shape the spec turn by turn.
|
|
18
11
|
- **Raw** — your prompt is saved verbatim as a spec, with **no AI** involved.
|
|
19
12
|
|
|
20
|
-
If the project has **more than one compatible provider installed**, an **AI
|
|
21
|
-
engine** selector sits at the top of the dialog. The choice is remembered per
|
|
22
|
-
project. Projects with a single compatible provider don't show the selector;
|
|
23
|
-
Kimi is not offered for Quick Spec even when it is installed.
|
|
24
|
-
|
|
25
13
|
### Quick mode
|
|
26
14
|
|
|
27
15
|
For when you already know what you want. Type your idea; the AI generates the full spec. This is usually a single turn — but it runs multi-turn when you give it the full codebase (the context slider's higher presets) or attach files, so it can read what it needs first.
|
|
28
16
|
|
|
29
|
-
> **Kimi:** Quick Spec is unavailable. The server rejects a direct Kimi
|
|
30
|
-
> request before spawning because this form is a pure-output action. This is
|
|
31
|
-
> separate from the agentic **Quick Launcher**, where commands such as
|
|
32
|
-
> `/opsx:ff` can run with Kimi. Use Explore, Raw, or that launcher instead.
|
|
33
|
-
|
|
34
17
|
**Controls:**
|
|
35
18
|
|
|
36
19
|
- **Engine + model** — the engine selector (multi-provider only) and a model picker. The model defaults to a sensible choice for the engine and can be overridden per spec.
|
|
@@ -49,11 +32,6 @@ For when you already know what you want. Type your idea; the AI generates the fu
|
|
|
49
32
|
|
|
50
33
|
Your last choice for this toggle is remembered per project.
|
|
51
34
|
|
|
52
|
-
Contract Layer enrichment requires a provider that can enforce the structured
|
|
53
|
-
action's safe tool policy. It is hidden for Kimi because Kimi 0.27 prompt mode
|
|
54
|
-
auto-approves tools and has no per-spawn no-tools boundary. A direct request
|
|
55
|
-
fails before spawn.
|
|
56
|
-
|
|
57
35
|
While the spec is being generated, a toast in the corner shows the project name, a truncated copy of your idea, and the **elapsed time** ("Generating… 0:12"). When it finishes it switches to "Generated in <time>" with a **View** action that jumps straight to the new spec.
|
|
58
36
|
|
|
59
37
|
### Explore mode
|
|
@@ -73,16 +51,10 @@ For when the spec needs shaping. You converse with the AI; a live draft updates
|
|
|
73
51
|
|
|
74
52
|
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.
|
|
75
53
|
|
|
76
|
-
Kimi supports the agentic Explore conversation and proposal flow. It does not
|
|
77
|
-
offer the Max Contract Layer pass. Its prompt mode may use tools
|
|
78
|
-
autonomously—Explore is not a read-only sandbox.
|
|
79
|
-
|
|
80
54
|
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.
|
|
81
55
|
|
|
82
56
|
Click **Fine-tune** to set the flags individually. One toggle only appears here:
|
|
83
57
|
|
|
84
|
-
- **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. Kimi's user-global MCP source cannot be isolated per spawn, so this opt-in is unavailable for Kimi; project `.kimi-code/mcp.json` remains supported.
|
|
85
|
-
|
|
86
58
|
**Buttons in the shell:**
|
|
87
59
|
|
|
88
60
|
- **Save as Draft** — persists the conversation as a draft ticket so you can come back later. Available once you've sent at least one user message. The draft carries `origin_conversation_id` pointing back at this conversation so you can resume it from the dashboard.
|
|
@@ -150,11 +122,6 @@ Got an epic that's clearly too big? Open it and click **SMASH Spec into Sub-Spec
|
|
|
150
122
|
|
|
151
123
|
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).
|
|
152
124
|
|
|
153
|
-
SMASH and Re-SMASH are unavailable for Kimi: both require a constrained
|
|
154
|
-
structured transform, and Re-SMASH can delete existing children. Desktop
|
|
155
|
-
checks the capability before any spawn or deletion, so a direct Kimi request
|
|
156
|
-
leaves the existing family untouched.
|
|
157
|
-
|
|
158
125
|
## Continue Editing — refine an existing spec
|
|
159
126
|
|
|
160
127
|
For any spec with status `draft`, `todo`, or `backlog`, the detail modal shows a **Continue Editing** button. Click it and:
|
|
@@ -167,10 +134,6 @@ For any spec with status `draft`, `todo`, or `backlog`, the detail modal shows a
|
|
|
167
134
|
|
|
168
135
|
Continue Editing works from the dashboard or from inside a split-view comparison — triggering it from a split-view panel collapses the comparison automatically because the shell needs the full screen.
|
|
169
136
|
|
|
170
|
-
The AI Edit/refine operation is unavailable for Kimi because its output-only
|
|
171
|
-
rewrite contract must not be able to mutate the workspace through tools.
|
|
172
|
-
Manual edits and a separate Kimi Explore proposal remain available.
|
|
173
|
-
|
|
174
137
|
The Contract Layer (if a spec has one) is shown inside the detail modal as a collapsible disclosure with an `N/5 populated` badge. You can re-run the enrichment for a single ticket from there.
|
|
175
138
|
|
|
176
139
|
## Addenda — iterate on a spec without rewriting it
|
|
@@ -270,5 +233,3 @@ You don't need this to use the feature, but it's nice to know:
|
|
|
270
233
|
- [Running pipelines](running-pipelines.md) — drag those specs onto rails and launch the implementation pipeline.
|
|
271
234
|
- [Tracking cost](tracking-cost.md) — see what each spec is costing you.
|
|
272
235
|
- [Customising the app](customizing.md) — set a daily budget so you can stop worrying.
|
|
273
|
-
- [Using Codex](codex.md) / [Using Gemini](gemini.md) — provider-specific notes if you generate specs with Codex or Gemini.
|
|
274
|
-
- [Using Kimi](kimi.md) — agentic spec surfaces and the structured actions that fail closed.
|
package/docs/customizing.md
CHANGED
|
@@ -67,7 +67,7 @@ A custom instruction appended to every **Implement** rail job, after the ticket
|
|
|
67
67
|
|
|
68
68
|
### Freestyle pre-prompt
|
|
69
69
|
|
|
70
|
-
The instruction sent to the selected provider for **Freestyle** rails. Freestyle skips the OpenSpec pipeline — it hands that provider this pre-prompt plus the spec text and lets it implement autonomously. Claude
|
|
70
|
+
The instruction sent to the selected provider for **Freestyle** rails. Freestyle skips the OpenSpec pipeline — it hands that provider this pre-prompt plus the spec text and lets it implement autonomously. Claude currently advertise Freestyle support. The spec text is appended automatically after the pre-prompt. Leave it blank to use the built-in default.
|
|
71
71
|
|
|
72
72
|
### Telemetry
|
|
73
73
|
|
|
@@ -128,22 +128,10 @@ On first run the app generates a token and persists it to `~/.specrails/desktop.
|
|
|
128
128
|
|
|
129
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.
|
|
130
130
|
|
|
131
|
-
## Providers
|
|
132
|
-
|
|
133
|
-
The app works with **four AI providers — Claude, Codex, Gemini, and Kimi — 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. Codex and Gemini have the emergency rollback env vars below; Kimi availability follows executable/version detection and Core compatibility. See [codex.md](codex.md), [gemini.md](gemini.md), and [kimi.md](kimi.md) for setup, authentication, and limitations.
|
|
136
|
-
|
|
137
131
|
## Environment variables
|
|
138
132
|
|
|
139
133
|
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.
|
|
140
134
|
|
|
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
|
-
|
|
147
135
|
### Server-side (read at app startup or by spawned children)
|
|
148
136
|
|
|
149
137
|
| Variable | Effect |
|
|
@@ -158,11 +146,9 @@ Most settings live in the UI. A few app-level switches are env-only because they
|
|
|
158
146
|
| `SPECRAILS_INTERACTIVE_JOBS=false` | Disable interactive jobs everywhere (every Claude job — and every Claude loop step — is interactive by default): jobs fall back to the legacy one-shot spawn and the per-job message/finalize routes return 403 |
|
|
159
147
|
| `SPECRAILS_BROWSER_CAPTURE=false` | Disable Add-Spec-from-browser capture |
|
|
160
148
|
| `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**) |
|
|
162
149
|
| `SPECRAILS_SMASH=0` | Kill switch for SMASH spec decomposition (`0` / `false` / `off`; endpoints return 409) |
|
|
163
150
|
| `SPECRAILS_EXPLORE_CONTRACT_REFINE=0` | App-wide kill switch for Contract Refine (auto-fire + retry endpoint; accepts `0` / `false` / `off`) |
|
|
164
151
|
| `SPECRAILS_EXPLORE_LEGACY_CWD=1` | Force every Explore spawn to use the project root instead of the app-managed `explore-cwd/` or a relocated workspace |
|
|
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. Kimi file summaries and construction-story AI are capability-gated off, so this variable never enables them for Kimi. |
|
|
166
152
|
| `SPECRAILS_ALLOW_LOCAL_WEBHOOKS=1` | Allow outbound webhooks to target loopback / private-network addresses |
|
|
167
153
|
|
|
168
154
|
### Client-side (Vite — set at build time)
|