specrails-desktop 2.18.2 → 2.19.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 +1 -1
- package/client/dist/assets/{ActivityFeedPage-mGnv5SOe.js → ActivityFeedPage-C0_k6n5T.js} +1 -1
- package/client/dist/assets/AgentBrowserCapture-NHUCEnTh.js +1 -0
- package/client/dist/assets/AgentModeCodePane-jddXrhPY.js +2 -0
- package/client/dist/assets/AgentsPage-BPjf6bId.js +86 -0
- package/client/dist/assets/AnalyticsPage-BaJjj5mO.js +1 -0
- package/client/dist/assets/{BarChart-BqHUOnl9.js → BarChart-HPiao--v.js} +1 -1
- package/client/dist/assets/CodePage-CAD4KfkC.js +2 -0
- package/client/dist/assets/{DesktopAnalyticsPage-CR-m97Ui.js → DesktopAnalyticsPage-B2RBxIvj.js} +1 -1
- package/client/dist/assets/DocsDialog-BJDvUEGj.js +11 -0
- package/client/dist/assets/DocsPage-B6H-DBs8.js +11 -0
- package/client/dist/assets/{ExportDropdown-C-o1Q4ef.js → ExportDropdown-CYMcbLTD.js} +1 -1
- package/client/dist/assets/IntegrationsPage-Dx_UpQVk.js +3 -0
- package/client/dist/assets/JobDetailPage-BlTnsRAN.js +16 -0
- package/client/dist/assets/JobsPage-EB0PbXOk.js +1 -0
- package/client/dist/assets/LoopBuilderPage-DfWfhhJY.js +7 -0
- package/client/dist/assets/LoopsPage-DCVATTv5.js +1 -0
- package/client/dist/assets/{addspec-B9dY_F5T.js → addspec-BXV6sx5l.js} +1 -1
- package/client/dist/assets/{addspec-tbxr3sHa.js → addspec-CS895X6A.js} +1 -1
- package/client/dist/assets/{addspec-W0r16BOC2.js → addspec-CXfEOrD42.js} +1 -1
- package/client/dist/assets/{addspec-D43TlMVp2.js → addspec-D28kw9ow2.js} +1 -1
- package/client/dist/assets/{addspec-B9nhMikb.js → addspec-D39EEg02.js} +1 -1
- package/client/dist/assets/{addspec-DfgIZ5lO.js → addspec-DC1tgsFG.js} +1 -1
- package/client/dist/assets/{addspec-BtNaJHu2.js → addspec-DcHALPEp.js} +1 -1
- package/client/dist/assets/{addspec-BloGn_ey.js → addspec-DxW6oPsk.js} +1 -1
- package/client/dist/assets/{agent-Bm2tPrdr.js → agent-B5Ycau5M.js} +1 -1
- package/client/dist/assets/{agent-DMUrz9ZS2.js → agent-BEz08l4_2.js} +1 -1
- package/client/dist/assets/{agent-C4bO1l_v.js → agent-BIX51CEA.js} +1 -1
- package/client/dist/assets/{agent-9WdSxPU5.js → agent-Bc9Kwf65.js} +1 -1
- package/client/dist/assets/{agent-pO8x4jbR.js → agent-BiM7puyn.js} +1 -1
- package/client/dist/assets/{agent-CgKsh88Z2.js → agent-C0kYSv3m2.js} +1 -1
- package/client/dist/assets/agent-CCzWlfqs.js +1 -0
- package/client/dist/assets/{agent-ASIyVcg0.js → agent-DiCSo31C.js} +1 -1
- package/client/dist/assets/{agents-DfGvYtpq2.js → agents-BFrHy5d-2.js} +1 -1
- package/client/dist/assets/{agents-Dli56gr82.js → agents-BFy2Kq_k2.js} +1 -1
- package/client/dist/assets/{agents-C07al8rI.js → agents-BXDCFJQa.js} +1 -1
- package/client/dist/assets/{agents-BAxAwHy-.js → agents-BySH0Gvw.js} +1 -1
- package/client/dist/assets/{agents-Eqw_AQ6H.js → agents-CTdwacTO.js} +1 -1
- package/client/dist/assets/{agents-BjT_xLjv.js → agents-Cev2oFfX.js} +1 -1
- package/client/dist/assets/{agents-BUYBb825.js → agents-CsDEv4Fj.js} +1 -1
- package/client/dist/assets/{agents-52t8NVpS.js → agents-z0kA-y0Q.js} +1 -1
- package/client/dist/assets/dashboard-Bl2_Yjs6.js +1 -0
- package/client/dist/assets/dashboard-C_vS9RaM2.js +1 -0
- package/client/dist/assets/dashboard-CcEpALV_.js +1 -0
- package/client/dist/assets/dashboard-CfltY66K.js +1 -0
- package/client/dist/assets/dashboard-CoED_41r.js +1 -0
- package/client/dist/assets/dashboard-DLeC5ziO.js +1 -0
- package/client/dist/assets/dashboard-DxEPkALo2.js +1 -0
- package/client/dist/assets/dashboard-MgDVmaYS2.js +1 -0
- package/client/dist/assets/{dist-js-CUegfF6k.js → dist-js-ClEfL6Bo.js} +1 -1
- package/client/dist/assets/{dist-js-BHhtSerX.js → dist-js-b2_z7zAi.js} +1 -1
- package/client/dist/assets/index-9yNUBwEi.css +2 -0
- package/client/dist/assets/{index-B7vB20Jw.js → index-BeujshsU.js} +57 -57
- package/client/dist/assets/{lib-PQoHlR5u.js → lib-CfphudAm.js} +1 -1
- package/client/dist/assets/loops-BEUiCzEI.js +1 -0
- package/client/dist/assets/loops-BlrQiK122.js +1 -0
- package/client/dist/assets/loops-Bs0ectZ32.js +1 -0
- package/client/dist/assets/loops-CLZV8HHY2.js +1 -0
- package/client/dist/assets/loops-CQuuMlyZ.js +1 -0
- package/client/dist/assets/loops-DuuWQWTI.js +1 -0
- package/client/dist/assets/loops-KOTryzk5.js +1 -0
- package/client/dist/assets/loops-t1mUZtf0.js +1 -0
- package/client/dist/assets/nav--1ErXZrS.js +1 -0
- package/client/dist/assets/nav-18nqSJ8h.js +1 -0
- package/client/dist/assets/nav-BuonHb17.js +1 -0
- package/client/dist/assets/nav-C-sCoOLY2.js +1 -0
- package/client/dist/assets/nav-ClXz_3Ic2.js +1 -0
- package/client/dist/assets/nav-CtqgSQeE2.js +1 -0
- package/client/dist/assets/nav-S3YvCaVv.js +1 -0
- package/client/dist/assets/nav-czg8NkN-.js +1 -0
- package/client/dist/assets/settings-BOZBX-Vq.js +1 -0
- package/client/dist/assets/settings-CX29QcQW.js +1 -0
- package/client/dist/assets/settings-CfOWHPzc2.js +1 -0
- package/client/dist/assets/settings-DaXhxNug2.js +1 -0
- package/client/dist/assets/settings-DmyDpuzu.js +1 -0
- package/client/dist/assets/settings-DwPRLcxr2.js +1 -0
- package/client/dist/assets/settings-MjYVJvDE.js +1 -0
- package/client/dist/assets/settings-zJFdTzKE.js +1 -0
- package/client/dist/assets/{setup-BYoDYoPY2.js → setup-BmXfxlzA2.js} +1 -1
- package/client/dist/assets/{setup-faMApo0U2.js → setup-BxVydxbl2.js} +1 -1
- package/client/dist/assets/{setup-C5UbM0RP.js → setup-DIRZ1Lf-.js} +1 -1
- package/client/dist/assets/{setup-Bf9eLKxU.js → setup-DwbKSnKQ.js} +1 -1
- package/client/dist/assets/{setup-JFkWWZnR.js → setup-Dx13pESZ.js} +1 -1
- package/client/dist/assets/{setup-CqGrWb6G.js → setup-G4ZvDKxX.js} +1 -1
- package/client/dist/assets/{setup-tloaTobG2.js → setup-SLAi4xxQ2.js} +1 -1
- package/client/dist/assets/{setup-4us-Bz3H.js → setup-Z01j3st4.js} +1 -1
- package/client/dist/assets/{upload-PnJDPHZH.js → upload-Ox9jUq1X.js} +1 -1
- package/client/dist/assets/{value-BTDefcOV.js → value-BeQVX5gN.js} +1 -1
- package/client/dist/index.html +10 -10
- package/docs/codex.md +5 -5
- package/docs/customizing.md +4 -4
- package/docs/gemini.md +2 -2
- package/docs/getting-started.md +1 -1
- package/docs/guide/de/integrations/1-ai-providers.md +2 -2
- package/docs/guide/de/integrations/5-mcp-server.md +20 -1
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/de/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/en/integrations/1-ai-providers.md +2 -2
- package/docs/guide/en/integrations/5-mcp-server.md +20 -1
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/en/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/es/integrations/1-ai-providers.md +2 -2
- package/docs/guide/es/integrations/5-mcp-server.md +20 -1
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/es/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/fr/integrations/1-ai-providers.md +2 -2
- package/docs/guide/fr/integrations/5-mcp-server.md +20 -1
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/fr/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/it/integrations/1-ai-providers.md +2 -2
- package/docs/guide/it/integrations/5-mcp-server.md +20 -1
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/it/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/ja/integrations/1-ai-providers.md +2 -2
- package/docs/guide/ja/integrations/5-mcp-server.md +20 -1
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/ja/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/pt/integrations/1-ai-providers.md +2 -2
- package/docs/guide/pt/integrations/5-mcp-server.md +20 -1
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/pt/pipeline/5-the-loop-builder.md +2 -2
- package/docs/guide/zh/integrations/1-ai-providers.md +2 -2
- package/docs/guide/zh/integrations/5-mcp-server.md +20 -1
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +4 -4
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +1 -1
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +2 -2
- package/docs/guide/zh/pipeline/5-the-loop-builder.md +2 -2
- package/docs/internals/switch-to-agent-mode-design.md +301 -0
- package/docs/internals/visual-design-audit.md +184 -0
- package/docs/mcp.md +26 -1
- package/docs/running-pipelines.md +10 -10
- package/docs/tracking-cost.md +1 -1
- package/package.json +1 -1
- package/server/dist/agent-chat-manager.js +107 -33
- package/server/dist/agent-chat-router.js +170 -8
- package/server/dist/agent-cwd-manager.js +2 -47
- package/server/dist/agent-operator-prompt.js +277 -0
- package/server/dist/agent-store.js +27 -5
- package/server/dist/attachment-manager.js +138 -0
- package/server/dist/desktop-db.js +15 -0
- package/server/dist/loop-factory.js +12 -2
- package/server/dist/mcp/guide.js +186 -51
- package/server/dist/mcp/tools/analytics.js +1 -1
- package/server/dist/mcp/tools/app-settings.js +45 -5
- package/server/dist/mcp/tools/chat.js +9 -2
- package/server/dist/mcp/tools/code.js +3 -2
- package/server/dist/mcp/tools/jobs.js +18 -6
- package/server/dist/mcp/tools/loops.js +57 -5
- package/server/dist/mcp/tools/meta.js +43 -3
- package/server/dist/mcp/tools/rails.js +6 -6
- package/server/dist/mcp/tools/setup.js +2 -1
- package/server/dist/mcp/tools/specs.js +60 -38
- package/server/dist/mcp/tools/types.js +17 -8
- package/server/dist/mcp/tools/watch.js +71 -8
- package/server/dist/project-router-helpers.js +1 -1
- package/server/dist/project-router-tickets.js +43 -4
- package/server/dist/providers/claude-adapter.js +6 -0
- package/server/dist/providers/codex-adapter.js +10 -0
- package/server/dist/providers/gemini-adapter.js +3 -0
- package/server/dist/rails-router.js +8 -17
- package/server/dist/spec-models.js +1 -0
- package/client/dist/assets/AgentsPage-BH1isg5j.js +0 -86
- package/client/dist/assets/AnalyticsPage-ByyshYRI.js +0 -1
- package/client/dist/assets/CodePage-CU7T_HYs.js +0 -2
- package/client/dist/assets/DocsDialog-CEmZp_8V.js +0 -11
- package/client/dist/assets/DocsPage-DYbAQ1AT.js +0 -11
- package/client/dist/assets/IntegrationsPage-C6fKdwVH.js +0 -3
- package/client/dist/assets/JobDetailPage-CKfIfBgE.js +0 -16
- package/client/dist/assets/JobsPage-nBng0riZ.js +0 -1
- package/client/dist/assets/LoopBuilderPage-Co_TYqYk.js +0 -7
- package/client/dist/assets/LoopsPage-a2hd37Ya.js +0 -1
- package/client/dist/assets/agent-Dwkz5mPS.js +0 -1
- package/client/dist/assets/dashboard-BTiH361F.js +0 -1
- package/client/dist/assets/dashboard-COSm_14E.js +0 -1
- package/client/dist/assets/dashboard-CfOs70FN2.js +0 -1
- package/client/dist/assets/dashboard-Cyzp4ox9.js +0 -1
- package/client/dist/assets/dashboard-CzHDp14_2.js +0 -1
- package/client/dist/assets/dashboard-D6Woy2B5.js +0 -1
- package/client/dist/assets/dashboard-DwbH4oVH.js +0 -1
- package/client/dist/assets/dashboard-cWhU3krA2.js +0 -1
- package/client/dist/assets/index-B0FxQALR.css +0 -2
- package/client/dist/assets/loops-BDhEfnx82.js +0 -1
- package/client/dist/assets/loops-BM5QggwH.js +0 -1
- package/client/dist/assets/loops-CPjLAAxj.js +0 -1
- package/client/dist/assets/loops-D8Iu6Jss.js +0 -1
- package/client/dist/assets/loops-DKnk79TB2.js +0 -1
- package/client/dist/assets/loops-DLW0aFMm.js +0 -1
- package/client/dist/assets/loops-Dcv3dFy_2.js +0 -1
- package/client/dist/assets/loops-y7wFRx6M.js +0 -1
- package/client/dist/assets/nav-1hj2izqB2.js +0 -1
- package/client/dist/assets/nav-BBUKMAu-2.js +0 -1
- package/client/dist/assets/nav-CLqkP-26.js +0 -1
- package/client/dist/assets/nav-Cv46L837.js +0 -1
- package/client/dist/assets/nav-DE3yWQw6.js +0 -1
- package/client/dist/assets/nav-DgA-rjLk2.js +0 -1
- package/client/dist/assets/nav-EG2pr6vN.js +0 -1
- package/client/dist/assets/nav-r3mIJVfU.js +0 -1
- package/client/dist/assets/settings-BKmORxlB2.js +0 -1
- package/client/dist/assets/settings-BVv2JgQ8.js +0 -1
- package/client/dist/assets/settings-Bghm3pAV.js +0 -1
- package/client/dist/assets/settings-BuC_aplX.js +0 -1
- package/client/dist/assets/settings-Bw_Qk8E32.js +0 -1
- package/client/dist/assets/settings-CAKgJv7p.js +0 -1
- package/client/dist/assets/settings-CEUgk1Ck.js +0 -1
- package/client/dist/assets/settings-C_PDE20s2.js +0 -1
- /package/client/dist/assets/{activity-Uj576ckT.js → activity-BlvN5rhP.js} +0 -0
- /package/client/dist/assets/{activity-w1qMFwxh.js → activity-C5SeKbom.js} +0 -0
- /package/client/dist/assets/{activity-BySXFT2J2.js → activity-DIJexk6v2.js} +0 -0
- /package/client/dist/assets/{activity-B82z3Pna.js → activity-DLdwUYv7.js} +0 -0
- /package/client/dist/assets/{activity-BVpZrs0J.js → activity-DOKV_Wyf.js} +0 -0
- /package/client/dist/assets/{activity-BId0pwuS2.js → activity-DVuiy8TI2.js} +0 -0
- /package/client/dist/assets/{activity-DIWnV0Pl.js → activity-Dsf3J7iW.js} +0 -0
- /package/client/dist/assets/{agentstudio-C7xxqVWn.js → agentstudio-B8H2H4Db2.js} +0 -0
- /package/client/dist/assets/{agentstudio-D-UoNAIA.js → agentstudio-B9zthaTJ.js} +0 -0
- /package/client/dist/assets/{agentstudio-0o3XKrcy.js → agentstudio-BDMpU01s.js} +0 -0
- /package/client/dist/assets/{agentstudio-Bu8m5jDw.js → agentstudio-CSZo7p8K.js} +0 -0
- /package/client/dist/assets/{agentstudio-ObTpVbBP.js → agentstudio-CdD6J23W.js} +0 -0
- /package/client/dist/assets/{agentstudio-PzFB3vfh2.js → agentstudio-D80fZu_M2.js} +0 -0
- /package/client/dist/assets/{agentstudio-OJjjz6Uf2.js → agentstudio-EuKglkaF2.js} +0 -0
- /package/client/dist/assets/{aiedit-DRrNiaB4.js → aiedit-B_VOTUo42.js} +0 -0
- /package/client/dist/assets/{aiedit-sP_iao2j.js → aiedit-Cxoe_0wv.js} +0 -0
- /package/client/dist/assets/{aiedit-DAM_WRAl2.js → aiedit-D59sPapq2.js} +0 -0
- /package/client/dist/assets/{aiedit-BaLZalLa.js → aiedit-DX3BBpXF.js} +0 -0
- /package/client/dist/assets/{aiedit-BIQqv2XM2.js → aiedit-GYOYWCHJ2.js} +0 -0
- /package/client/dist/assets/{aiedit-BjlUzasF.js → aiedit-TON-4N9S.js} +0 -0
- /package/client/dist/assets/{aiedit-BmDufyGU.js → aiedit-ybQmdsST.js} +0 -0
- /package/client/dist/assets/{analytics-MVJRjcY52.js → analytics-B2jjXLCP2.js} +0 -0
- /package/client/dist/assets/{analytics-C4z_NgJZ.js → analytics-BTkXLTfa.js} +0 -0
- /package/client/dist/assets/{analytics-DL2vJCbq.js → analytics-BotqRU_R.js} +0 -0
- /package/client/dist/assets/{analytics-e1mkNTgy2.js → analytics-Ck3vl2Qo2.js} +0 -0
- /package/client/dist/assets/{analytics-Ds_PNxtO2.js → analytics-CqMJQb7N.js} +0 -0
- /package/client/dist/assets/{analytics-B_rxNC9X.js → analytics-DGOoMkaZ.js} +0 -0
- /package/client/dist/assets/{analytics-BDqqCzN9.js → analytics-DL7uwNAI2.js} +0 -0
- /package/client/dist/assets/{attachments-BP0Ac1yt.js → attachments-7w-BR2V2.js} +0 -0
- /package/client/dist/assets/{attachments-CPBVeHX72.js → attachments-B5QX1Xfa2.js} +0 -0
- /package/client/dist/assets/{attachments-Db7JfA8a.js → attachments-BcE7kZG-2.js} +0 -0
- /package/client/dist/assets/{attachments-CJaO1vCH.js → attachments-BsJJXFzT.js} +0 -0
- /package/client/dist/assets/{attachments-8QCKHCEF2.js → attachments-Cbh4AwjP.js} +0 -0
- /package/client/dist/assets/{attachments-CV2uaTGE.js → attachments-D0fGlFve.js} +0 -0
- /package/client/dist/assets/{attachments-CaOjdN332.js → attachments-D3DJpd3e2.js} +0 -0
- /package/client/dist/assets/{browser-C9rUUxo4.js → browser-9GR11iTi.js} +0 -0
- /package/client/dist/assets/{browser-CEqx11iy.js → browser-BOxg0p3n.js} +0 -0
- /package/client/dist/assets/{browser-543jbxE4.js → browser-BSh8xUWV.js} +0 -0
- /package/client/dist/assets/{browser-CLC0etB_2.js → browser-CaV3BJNY2.js} +0 -0
- /package/client/dist/assets/{browser-0xeW8fUa2.js → browser-CmWGMRGf2.js} +0 -0
- /package/client/dist/assets/{browser-ExmELH702.js → browser-D6wbpBOL2.js} +0 -0
- /package/client/dist/assets/{browser-DyG2l9Wa.js → browser-dsgDU1HB.js} +0 -0
- /package/client/dist/assets/{chat-DagUyoVA.js → chat-B90iLDI4.js} +0 -0
- /package/client/dist/assets/{chat-Cu6F3d6g2.js → chat-CAo0jCnj2.js} +0 -0
- /package/client/dist/assets/{chat-CN8BMAMc.js → chat-CW54IP3u.js} +0 -0
- /package/client/dist/assets/{chat-NQPCBQo72.js → chat-CYHUUW0p2.js} +0 -0
- /package/client/dist/assets/{chat-CCytD3P8.js → chat-D1PXX_p2.js} +0 -0
- /package/client/dist/assets/{chat-IjutwlBg.js → chat-DhpcWjOf.js} +0 -0
- /package/client/dist/assets/{chat-vVpwkOp52.js → chat-cFG-UfRA2.js} +0 -0
- /package/client/dist/assets/{code-Dhb6jbAU.js → code--qUk_yn-.js} +0 -0
- /package/client/dist/assets/{code-Ce-nBIwj.js → code-B1aOMCVV.js} +0 -0
- /package/client/dist/assets/{code-BaG05zK62.js → code-B5UrmjaE2.js} +0 -0
- /package/client/dist/assets/{code-Dap54vOb.js → code-CjBHU0nw.js} +0 -0
- /package/client/dist/assets/{code-_NOCo-Ol2.js → code-Cjv4_HkK2.js} +0 -0
- /package/client/dist/assets/{code-32l6Naxu2.js → code-D7GLAjrz2.js} +0 -0
- /package/client/dist/assets/{code-C5cibF2F.js → code-DZKjfzBN.js} +0 -0
- /package/client/dist/assets/{commands-Cc2WpuXa.js → commands-B9XaopQC.js} +0 -0
- /package/client/dist/assets/{commands-k9wbNYoi.js → commands-BCx1uDIE.js} +0 -0
- /package/client/dist/assets/{commands-CM99Upsz2.js → commands-Bhw9Hqsa2.js} +0 -0
- /package/client/dist/assets/{commands-Bc8y9eNo2.js → commands-D0RnooQF2.js} +0 -0
- /package/client/dist/assets/{commands-Bl3-KVfj.js → commands-DuaQT-it.js} +0 -0
- /package/client/dist/assets/{commands-DASXJD-l.js → commands-MqNuGGO4.js} +0 -0
- /package/client/dist/assets/{commands-C5WQ9blx2.js → commands-oB9q2vy_2.js} +0 -0
- /package/client/dist/assets/{common-CHARW6MZ2.js → common-BXzqeuiC2.js} +0 -0
- /package/client/dist/assets/{common-0aY9HQBP.js → common-BaJ6MF7T.js} +0 -0
- /package/client/dist/assets/{common-CQCJzAQq2.js → common-C-jaOdxz2.js} +0 -0
- /package/client/dist/assets/{common-DNhhqjlJ.js → common-CKjy-R8-.js} +0 -0
- /package/client/dist/assets/{common-YdyZtmaI2.js → common-CRd-Ge5u2.js} +0 -0
- /package/client/dist/assets/{common-5jScBJqt.js → common-DPGR3Tfo.js} +0 -0
- /package/client/dist/assets/{common-BdaRciTu.js → common-wEB9RBdf.js} +0 -0
- /package/client/dist/assets/{explore-ChtxIiSM.js → explore-B_79NLR5.js} +0 -0
- /package/client/dist/assets/{explore-BzdMEpuf.js → explore-D-htKul_.js} +0 -0
- /package/client/dist/assets/{explore-B82VMUJ_.js → explore-D5b2jgvR.js} +0 -0
- /package/client/dist/assets/{explore-DfcUfiPw2.js → explore-Dvp-5qOw2.js} +0 -0
- /package/client/dist/assets/{explore-CbW0381i2.js → explore-FaKfWCr72.js} +0 -0
- /package/client/dist/assets/{explore-BGz1rvQE.js → explore-IS8VyaSZ.js} +0 -0
- /package/client/dist/assets/{explore-yRF7wFSp2.js → explore-OZhWV0Eb2.js} +0 -0
- /package/client/dist/assets/{format-command-D96da4fZ.js → format-command-CHImQv6W.js} +0 -0
- /package/client/dist/assets/{integrations-CnrX7vqw2.js → integrations-B97cGWfo2.js} +0 -0
- /package/client/dist/assets/{integrations-BJvrlcc7.js → integrations-Bp3leAh3.js} +0 -0
- /package/client/dist/assets/{integrations-CPKYkG36.js → integrations-C3Ma3GdM.js} +0 -0
- /package/client/dist/assets/{integrations-BA5pM05t.js → integrations-C5MUA-0-.js} +0 -0
- /package/client/dist/assets/{integrations-B0OBPU9_.js → integrations-CiQbCn_W.js} +0 -0
- /package/client/dist/assets/{integrations-DeJFRyXz2.js → integrations-Du_0rDfi2.js} +0 -0
- /package/client/dist/assets/{integrations-DBou159M2.js → integrations-t4X5UVcx2.js} +0 -0
- /package/client/dist/assets/{jira-mi37H4Kt.js → jira-B1XaR6fj.js} +0 -0
- /package/client/dist/assets/{jira-Srx2P5zS.js → jira-BCHx9zUF.js} +0 -0
- /package/client/dist/assets/{jira-DeotPx6P2.js → jira-BqXyykbt2.js} +0 -0
- /package/client/dist/assets/{jira-BwLBgmfI2.js → jira-BzFvFn7t2.js} +0 -0
- /package/client/dist/assets/{jira-BDgxAFTF2.js → jira-D6IDTIsc2.js} +0 -0
- /package/client/dist/assets/{jira-NwlUCcQD.js → jira-DSZ5xFRl.js} +0 -0
- /package/client/dist/assets/{jira-D3GGzXOI.js → jira-DdEKW9Pu.js} +0 -0
- /package/client/dist/assets/{jobs-D8adm2BX.js → jobs-BX9dP3Qn.js} +0 -0
- /package/client/dist/assets/{jobs-B56vQEkh2.js → jobs-BgHEgCWk2.js} +0 -0
- /package/client/dist/assets/{jobs-K_Y8KAZ2.js → jobs-CU-khJTt.js} +0 -0
- /package/client/dist/assets/{jobs-BYIk6Tg_.js → jobs-Ce0SE81t.js} +0 -0
- /package/client/dist/assets/{jobs-C-lM-iax2.js → jobs-CeOcGHd_2.js} +0 -0
- /package/client/dist/assets/{jobs-CYdevGgT.js → jobs-Ct5v2p6T.js} +0 -0
- /package/client/dist/assets/{jobs-OwM0ZWhI2.js → jobs-m7L0K9uC2.js} +0 -0
- /package/client/dist/assets/{mcp-D3E4_Mmk2.js → mcp-4QbfLPa4.js} +0 -0
- /package/client/dist/assets/{mcp-B6nwJJmR.js → mcp-CXy61khH.js} +0 -0
- /package/client/dist/assets/{mcp-CNgFiTEh.js → mcp-CmOBPDjE.js} +0 -0
- /package/client/dist/assets/{mcp-mupPuPDO2.js → mcp-NlLc9T8u2.js} +0 -0
- /package/client/dist/assets/{mcp-B4irfLJ2.js → mcp-_DUUXTHB2.js} +0 -0
- /package/client/dist/assets/{mcp-BP7PpbDr2.js → mcp-dlOyUQQy2.js} +0 -0
- /package/client/dist/assets/{mcp-BOoEGTSQ.js → mcp-zqSVP7nA.js} +0 -0
- /package/client/dist/assets/{specs-D4z5d8uq.js → specs-57pue7UQ.js} +0 -0
- /package/client/dist/assets/{specs-CWNKAScX2.js → specs-BWQ-0EXt2.js} +0 -0
- /package/client/dist/assets/{specs-B8mwScoM2.js → specs-BYSOlQRw2.js} +0 -0
- /package/client/dist/assets/{specs-B5XOoH-02.js → specs-CkP0B28v2.js} +0 -0
- /package/client/dist/assets/{specs-DgvIRZtM.js → specs-RSYuLgF4.js} +0 -0
- /package/client/dist/assets/{specs-DuRzE5wE.js → specs-d-zU7_3Q.js} +0 -0
- /package/client/dist/assets/{specs-Bj_3fDrQ.js → specs-nM5Cpcqe.js} +0 -0
- /package/client/dist/assets/{terminal-DoMTHedv2.js → terminal-Adi3W-GZ2.js} +0 -0
- /package/client/dist/assets/{terminal-DOwfkxqa2.js → terminal-BA6FCZna2.js} +0 -0
- /package/client/dist/assets/{terminal-CH0fdHvP.js → terminal-BCIUSkrg.js} +0 -0
- /package/client/dist/assets/{terminal-B2sExUis.js → terminal-C8KlD61D.js} +0 -0
- /package/client/dist/assets/{terminal-DjSSa5qP.js → terminal-D3RTuBwy.js} +0 -0
- /package/client/dist/assets/{terminal-w0i-OCp32.js → terminal-DCkOEjSj2.js} +0 -0
- /package/client/dist/assets/{terminal-CPMigUX7.js → terminal-DOuNm2BI.js} +0 -0
- /package/client/dist/assets/{tickets-D00mSt832.js → tickets-B2q36GlQ2.js} +0 -0
- /package/client/dist/assets/{tickets-CQTana1u.js → tickets-Bsyv_znj.js} +0 -0
- /package/client/dist/assets/{tickets-D7CSuWjO.js → tickets-C_UPra_1.js} +0 -0
- /package/client/dist/assets/{tickets-heDAaj8C2.js → tickets-D72LbUtU2.js} +0 -0
- /package/client/dist/assets/{tickets-DvbFg_-c2.js → tickets-DDjU7UfE2.js} +0 -0
- /package/client/dist/assets/{tickets-onKZz6Dd.js → tickets-DR4ZrPMf.js} +0 -0
- /package/client/dist/assets/{tickets-Dq7HDy8n.js → tickets-DiUA3rXq.js} +0 -0
|
@@ -23,7 +23,7 @@ SpecsBoard(左) レール(右)
|
|
|
23
23
|
## スペックでレールを起動する
|
|
24
24
|
|
|
25
25
|
1. **スペックカードをドラッグ**して、SpecsBoard からレールへ移します。スペックの ID がそのレールのスペック一覧に表示されます。(ドラッグが苦手ですか? スペックカードの **レールに移動** ポップオーバーを使えば、レールごとにステータスのドットが表示されるので、ふさがっているレーンに作業を落としてしまう心配がありません。)
|
|
26
|
-
2. レールヘッダーで **Loop を選びます**。レールは **Loop** を実行します — それがレールの行う作業そのものです。デフォルトは組み込みの `Implement` Loop ですが、`Batch`、`
|
|
26
|
+
2. レールヘッダーで **Loop を選びます**。レールは **Loop** を実行します — それがレールの行う作業そのものです。デフォルトは組み込みの `Implement` Loop ですが、`Batch`、`Freestyle`、あるいは自分で作ったカスタム Loop を選ぶこともできます。[Loop Builder](the-loop-builder) を参照してください。
|
|
27
27
|
3. **▶ Play を押します。**
|
|
28
28
|
|
|
29
29
|
これだけです。レールがあなたのプロジェクト内で AI CLI プロセスを立ち上げ、パイプラインを開始します。
|
|
@@ -34,7 +34,7 @@ SpecsBoard(左) レール(右)
|
|
|
34
34
|
|---------|--------------|
|
|
35
35
|
| **ステータスピル** | `idle`、`running`、`failed` のいずれか。「completed」という別ステータスはありません — ジョブがきれいに完了すると、レールは `idle` に戻ります。 |
|
|
36
36
|
| **スペック一覧** | このレールに割り当てられた ID。さらにドラッグして追加したり、ドラッグして外したりできます。 |
|
|
37
|
-
| **Loop ピッカー** | このレールが実行する Loop — 組み込み(`Implement` / `Batch` / `
|
|
37
|
+
| **Loop ピッカー** | このレールが実行する Loop — 組み込み(`Implement` / `Batch` / `Freestyle`)かカスタム Loop。下の表を参照してください。レールごとに保持されます。 |
|
|
38
38
|
| **プロファイルピッカー** | どのエージェントプロファイルを実行するか(Claude レール限定)。プロジェクトにプロファイルが 1 つ以上あるときだけ表示されます。 |
|
|
39
39
|
| **エンジンセレクター** | このレールをどのインストール済みプロバイダーで実行するか — Claude、Codex、Gemini。プロジェクトに複数のプロバイダーがある場合だけ表示されます。[レールごとのエンジン選択](picking-an-engine-per-rail) を参照してください。 |
|
|
40
40
|
| **▶ Play / ■ Stop** | 開始またはキャンセル。 |
|
|
@@ -47,9 +47,9 @@ SpecsBoard(左) レール(右)
|
|
|
47
47
|
|------|---------|--------------|
|
|
48
48
|
| **Implement** | `/specrails:implement` | レール上のすべてのスペックをまとめた 1 つのジョブ。Architect → Developer → Reviewer → Ship のフルパイプラインを実行します。日常的に使うデフォルトです。 |
|
|
49
49
|
| **Batch** | `/specrails:batch-implement` | レール上のスペックを、依存関係を考慮したウェーブで順番に処理する 1 つのジョブ。関連する複数のスペックに最適です。 |
|
|
50
|
-
| **
|
|
50
|
+
| **Freestyle** | Freestyle | Claude が各スペックをパイプラインを**バイパス**して自律的に実装します。スペックごとに独立したジョブが 1 つずつ作られます。Claude 専用。 |
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
Freestyle は少し毛色が違います。エージェントチェーンを飛ばし、生のスペックを Claude に渡してネイティブツールで作業させます。自由度が高いぶん、Play を押すとまず確認ダイアログが開き、レールごとのモデルピッカーで Haiku / Sonnet / Opus を選べます。Freestyle はレールのエンジンが Claude のときだけ表示されます。
|
|
53
53
|
|
|
54
54
|
組み込みのほかにも、**自分だけの Loop を作る** ことができます — verify → fix → verify のサイクルを目標が達成されるまで繰り返したり、AI ステップの間にシェルコマンドを連ねたり、さらにいろいろなことができます。そうしたカスタム Loop は同じ Loop ピッカーに表示されます。それが次の大きなアイデア、[Loop Builder](the-loop-builder) です。
|
|
55
55
|
|
|
@@ -35,7 +35,7 @@ Architect ──► Developer ──► Reviewer ──► Ship
|
|
|
35
35
|
| **Reviewer** | `sr-reviewer` | 出力をレビューします。 |
|
|
36
36
|
| **Ship** | (状況による) | 最終仕上げ: テスト、コミット、PR ドラフト。 |
|
|
37
37
|
|
|
38
|
-
どのフェーズをどのエージェントが担当するかは、プロジェクトの **エージェントプロファイル** で決まります。基本の 3 つ(`sr-architect`、`sr-developer`、`sr-reviewer`)は常に存在し、プロファイル内のルーティングルールでエージェントを追加したり、あるフェーズを担当するエージェントを差し替えたりできます。フェーズの進捗バーは、コマンドが実際にフェーズを定義しているときだけ表示されます — パイプラインをバイパスする
|
|
38
|
+
どのフェーズをどのエージェントが担当するかは、プロジェクトの **エージェントプロファイル** で決まります。基本の 3 つ(`sr-architect`、`sr-developer`、`sr-reviewer`)は常に存在し、プロファイル内のルーティングルールでエージェントを追加したり、あるフェーズを担当するエージェントを差し替えたりできます。フェーズの進捗バーは、コマンドが実際にフェーズを定義しているときだけ表示されます — パイプラインをバイパスする Freestyle ジョブでは表示されません。
|
|
39
39
|
|
|
40
40
|
## ライブメトリクス — 設計からして誠実
|
|
41
41
|
|
|
@@ -24,7 +24,7 @@ Specrails desktop は **Claude Code**、**Codex CLI**、**Gemini CLI** をいず
|
|
|
24
24
|
|
|
25
25
|
| エンジン | こんなときに | 補足 |
|
|
26
26
|
|--------|--------------------|-------|
|
|
27
|
-
| **Claude** | フルの機能セットがほしいとき: エージェントプロファイル、
|
|
27
|
+
| **Claude** | フルの機能セットがほしいとき: エージェントプロファイル、Freestyle、ネイティブのコスト報告、最も充実したツールサポート。たいていの作業のデフォルト。 | **エージェントプロファイル**、**Freestyle**、いくつかの Claude 専用スペック機能(Contract Layer、SMASH)をサポートする唯一のエンジン。 |
|
|
28
28
|
| **Codex** | OpenAI Codex CLI を好むとき、あるいはプロバイダー間で実装を比べたいとき。 | `codex` ≥ 0.128.0。ネイティブのコスト報告なし — アプリが料金表からコストを補います。プロファイルは適用されません。 |
|
|
29
29
|
| **Gemini** | Google の Gemini CLI を使いたいとき、ネイティブのテレメトリがほしいとき、あるいは日常的なスペックを安く実行したいとき。 | `gemini` ≥ 0.11.0(`GEMINI_API_KEY` を設定)。ネイティブの OTLP テレメトリ。プロファイルは適用されません。 |
|
|
30
30
|
|
|
@@ -33,7 +33,7 @@ Specrails desktop は **Claude Code**、**Codex CLI**、**Gemini CLI** をいず
|
|
|
33
33
|
いくつかの機能は Claude レールでしか動きません — 必要なら Claude を選んでください。
|
|
34
34
|
|
|
35
35
|
- **エージェントプロファイル** — エージェントごとのモデルルーティング。Codex や Gemini のレールでは、実行は常にレガシーモードになり、選んだプロファイルは **無視されます**。プロファイルピッカーは Claude 以外のエンジンでは非表示になります。
|
|
36
|
-
- **
|
|
36
|
+
- **Freestyle** — 自律的でパイプラインをバイパスするモード。`Freestyle` セグメントと、その Haiku/Sonnet/Opus のモデルピッカーは、レールのエンジンが Claude のときだけ表示されます。
|
|
37
37
|
- **Contract Layer と SMASH** — Claude 専用のスペック改良機能(これらはレールのオプションではなく Add-Spec のオプションですが、同じ制約が当てはまります)。
|
|
38
38
|
|
|
39
39
|
プロジェクトが複数のエンジンを混在させると、右サイドバーにはインストール済みの **すべての** プロバイダーがサポートするセクションだけが表示されます — つまり、Claude 以外のプロバイダーを含むプロジェクトでは **エージェント** セクションがまるごと消えます。プロファイルは Claude 固有のものだからです。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Loop Builder
|
|
2
2
|
|
|
3
|
-
**レールは Loop を実行します。** 組み込みの Loop(`Implement`、`Batch`、`
|
|
3
|
+
**レールは Loop を実行します。** 組み込みの Loop(`Implement`、`Batch`、`Freestyle`)は日常的なケースをカバーしますが、**Loop Builder** を使えば自分だけの Loop を設計できます — 目標が達成されるまで繰り返す自動化のための、n8n スタイルのビジュアルエディターです。このページでは、Loop とは何か、どう作るのか、そしてレールでどう実行するのかを説明します。
|
|
4
4
|
|
|
5
5
|
## Loop とレール — その関係
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
─────────────────────────── ─────────────
|
|
12
12
|
Implement (組み込み) レール 1
|
|
13
13
|
Batch (組み込み) ► で選ぶ Loop: Verify-until-green
|
|
14
|
-
|
|
14
|
+
Freestyle (組み込み) ▶ Play
|
|
15
15
|
Verify-until-green (あなたの作ったもの)
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -6,7 +6,7 @@ O Specrails não está preso a uma única IA. Todas as partes da app que falam c
|
|
|
6
6
|
|
|
7
7
|
| Provider | CLI | Feito por | Notas |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| **Claude** | `claude` | Anthropic | O mais completo. O único provider para Agentes (perfis) e rails
|
|
9
|
+
| **Claude** | `claude` | Anthropic | O mais completo. O único provider para Agentes (perfis) e rails Freestyle, e para o Contract Refine. |
|
|
10
10
|
| **Codex** | `codex` | OpenAI | Requer codex `0.128.0+`. Lê os seus servidores MCP a partir do `~/.codex/config.toml` global. |
|
|
11
11
|
| **Gemini** | `gemini` | Google | Requer gemini `0.11.0+`. Usa telemetria nativa e um ficheiro de instruções `GEMINI.md`. |
|
|
12
12
|
|
|
@@ -43,7 +43,7 @@ A sua escolha é guardada por projeto, predefinida para o provider primário, pa
|
|
|
43
43
|
Algumas funcionalidades são, por natureza, específicas do Claude, por isso ficam escondidas ou são ignoradas quando outro provider está em jogo:
|
|
44
44
|
|
|
45
45
|
- **Agentes (perfis)** — o catálogo de agentes por projeto e o roteamento de modelos. Escondido em qualquer projeto que inclua um provider que não seja Claude.
|
|
46
|
-
- **Rails
|
|
46
|
+
- **Rails Freestyle** — correm sempre no Claude.
|
|
47
47
|
- **Contract Refine** — a passagem extra de "Contract Layer" sobre uma spec confirmada só corre quando o provider da conversa é o Claude.
|
|
48
48
|
- **Modos avançados de Adicionar Spec** (SMASH / Contract Layer) — escondidos para motores que não sejam Claude.
|
|
49
49
|
|
|
@@ -31,6 +31,25 @@ Num cliente como o Claude Desktop ou o Cursor, a configuração tem este aspeto:
|
|
|
31
31
|
|
|
32
32
|
Os clientes que suportam servidores MCP HTTP remotos podem, em alternativa, apontar diretamente para `http://127.0.0.1:4200/api/mcp` com o token do painel.
|
|
33
33
|
|
|
34
|
+
### Pelo terminal: Claude Code, Gemini CLI, Codex CLI
|
|
35
|
+
|
|
36
|
+
Copie seu token em **Configurações ▸ MCP ▸ Copiar token** e depois:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Claude Code
|
|
40
|
+
claude mcp add --transport http specrails http://localhost:4200/api/mcp \
|
|
41
|
+
--header "X-Desktop-Token: <seu token>"
|
|
42
|
+
|
|
43
|
+
# Gemini CLI
|
|
44
|
+
gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
|
|
45
|
+
--header "X-Desktop-Token: <seu token>"
|
|
46
|
+
|
|
47
|
+
# Codex CLI (stdio — registre o comando do bridge mostrado em Configurações ▸ MCP)
|
|
48
|
+
codex mcp add specrails -- <comando do bridge de Configurações ▸ MCP>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
O cabeçalho `Authorization: Bearer <token>` também funciona. Se você mudou a porta do app, troque `4200`.
|
|
52
|
+
|
|
34
53
|
Uma vez ligado, o seu assistente vê cerca de **18 ferramentas** que cobrem a app inteira — projetos, specs, rails e trabalhos, chat/Explore, agentes, plugins, Jira, loops, o explorador de código, análises, definições — mais uma ferramenta de **guia** incorporada que lê primeiro, para que perceba como o Specrails funciona sem que lhe explique seja o que for.
|
|
35
54
|
|
|
36
55
|
## O que pode fazer com ele
|
|
@@ -51,7 +70,7 @@ Mantenha o **Destrutivo** desativado e ele pode trabalhar a noite toda sem nunca
|
|
|
51
70
|
> *"Verifica todos os meus projetos. Diz-me quais têm specs no backlog e nenhum rail a correr, e arranca o de prioridade mais alta em cada um."*
|
|
52
71
|
|
|
53
72
|
**Sem usar as mãos enquanto programa.** Conduza o Specrails a partir do seu editor ou por voz, sem trocar de janela:
|
|
54
|
-
> *"Lança o rail 0 em modo
|
|
73
|
+
> *"Lança o rail 0 em modo Freestyle com o Opus para o ticket #42 e avisa-me quando estiver pronto."*
|
|
55
74
|
|
|
56
75
|
**Pergunte sobre custos e histórico.** As suas análises, em linguagem simples:
|
|
57
76
|
> *"Onde gastei mais em IA esta semana, por projeto e por modelo? Mostra-me os cinco tickets mais caros."*
|
|
@@ -23,7 +23,7 @@ Você pode ter vários rails para organizar o trabalho em pistas nomeadas (uma p
|
|
|
23
23
|
## Lançando um rail sobre uma spec
|
|
24
24
|
|
|
25
25
|
1. **Arraste um cartão de spec** do SpecsBoard para um rail. O ID da spec aparece na lista de specs do rail. (Prefere não arrastar? Use o popover **Mover para o rail** no cartão da spec — ele mostra um indicador de status por rail, para você não soltar trabalho numa pista ocupada.)
|
|
26
|
-
2. **Escolha um Loop** no cabeçalho do rail. Um rail roda um **Loop** — é o trabalho que ele realiza. O padrão é o Loop `Implement` embutido; você também pode escolher `Batch`, `
|
|
26
|
+
2. **Escolha um Loop** no cabeçalho do rail. Um rail roda um **Loop** — é o trabalho que ele realiza. O padrão é o Loop `Implement` embutido; você também pode escolher `Batch`, `Freestyle` ou um loop personalizado que você mesmo construiu. Veja [O Loop Builder](the-loop-builder).
|
|
27
27
|
3. **Aperte ▶ Play.**
|
|
28
28
|
|
|
29
29
|
É isso. O rail sobe um processo de CLI de IA no seu projeto e começa o pipeline.
|
|
@@ -34,7 +34,7 @@ Você pode ter vários rails para organizar o trabalho em pistas nomeadas (uma p
|
|
|
34
34
|
|---------|--------------|
|
|
35
35
|
| **Pílula de status** | `idle`, `running` ou `failed`. Não há um "completed" separado — um rail volta para `idle` quando seu job termina sem erros. |
|
|
36
36
|
| **Lista de specs** | Os IDs atribuídos a este rail. Arraste mais para dentro, arraste para fora para desanexar. |
|
|
37
|
-
| **Seletor de Loop** | O Loop que este rail roda — um embutido (`Implement` / `Batch` / `
|
|
37
|
+
| **Seletor de Loop** | O Loop que este rail roda — um embutido (`Implement` / `Batch` / `Freestyle`) ou um loop personalizado. Veja a tabela abaixo. Persistido por rail. |
|
|
38
38
|
| **Seletor de perfil** | Qual perfil de agente roda (apenas rails Claude). Só aparece quando o projeto tem ao menos um perfil. |
|
|
39
39
|
| **Seletor de motor** | Qual provedor instalado roda este rail — Claude, Codex ou Gemini. Só é renderizado quando o projeto tem mais de um provedor. Veja [Escolhendo um motor por rail](picking-an-engine-per-rail). |
|
|
40
40
|
| **▶ Play / ■ Stop** | Iniciar ou cancelar. |
|
|
@@ -47,9 +47,9 @@ Um rail roda um **Loop** — a receita do trabalho. Três loops são **embutidos
|
|
|
47
47
|
|------|---------|--------------|
|
|
48
48
|
| **Implement** | `/specrails:implement` | Um job cobrindo todas as specs do rail. Roda o pipeline completo Architect → Developer → Reviewer → Ship. O padrão do dia a dia. |
|
|
49
49
|
| **Batch** | `/specrails:batch-implement` | Um job que percorre as specs do rail sequencialmente, em ondas que respeitam as dependências. Melhor para várias specs relacionadas. |
|
|
50
|
-
| **
|
|
50
|
+
| **Freestyle** | Freestyle | O Claude implementa cada spec de forma autônoma, **ignorando** o pipeline. Um job independente por spec. Apenas Claude. |
|
|
51
51
|
|
|
52
|
-
O
|
|
52
|
+
O Freestyle é o caso atípico: ele pula a cadeia de agentes e entrega a spec crua ao Claude para trabalhar com suas ferramentas nativas. É aberto, então apertar Play abre primeiro uma confirmação, e um seletor de modelo por rail deixa você escolher Haiku / Sonnet / Opus. Ele só aparece quando o motor do rail é o Claude.
|
|
53
53
|
|
|
54
54
|
Além dos embutidos, você pode **construir seus próprios loops** — repetir um ciclo verify → fix → verify até atingir uma meta, encadear comandos de shell entre AI Steps e muito mais. Esses loops personalizados aparecem no mesmo seletor de Loop. Essa é a próxima grande ideia: [O Loop Builder](the-loop-builder).
|
|
55
55
|
|
|
@@ -35,7 +35,7 @@ Cada fase é um agente especializado que o motor do rail invoca na diretoria do
|
|
|
35
35
|
| **Reviewer** | `sr-reviewer` | Revê o resultado. |
|
|
36
36
|
| **Ship** | (varia) | Finalização: testes, commit, rascunho de PR. |
|
|
37
37
|
|
|
38
|
-
Que agente trata de cada fase é decidido pelo **perfil de agentes** do projeto. O trio base (`sr-architect`, `sr-developer`, `sr-reviewer`) está sempre presente; as regras de encaminhamento de um perfil podem acrescentar agentes ou trocar qual deles corre uma fase. A barra de progresso das fases só aparece quando o comando define mesmo fases — os jobs
|
|
38
|
+
Que agente trata de cada fase é decidido pelo **perfil de agentes** do projeto. O trio base (`sr-architect`, `sr-developer`, `sr-reviewer`) está sempre presente; as regras de encaminhamento de um perfil podem acrescentar agentes ou trocar qual deles corre uma fase. A barra de progresso das fases só aparece quando o comando define mesmo fases — os jobs Freestyle (que ignoram o pipeline) não mostram nenhuma.
|
|
39
39
|
|
|
40
40
|
## Métricas ao vivo — honestas por princípio
|
|
41
41
|
|
|
@@ -24,7 +24,7 @@ Os três correm os pipelines standard **Implement** e **Batch**. Aqui fica um gu
|
|
|
24
24
|
|
|
25
25
|
| Motor | Recorra a ele quando… | Notas |
|
|
26
26
|
|--------|--------------------|-------|
|
|
27
|
-
| **Claude** | Quer o conjunto completo de funcionalidades: perfis de agentes,
|
|
27
|
+
| **Claude** | Quer o conjunto completo de funcionalidades: perfis de agentes, Freestyle, reporte de custo nativo, o suporte de ferramentas mais rico. O default para a maioria do trabalho. | O único motor que suporta **perfis de agentes**, **Freestyle** e algumas funcionalidades de spec exclusivas do Claude (Contract Layer, SMASH). |
|
|
28
28
|
| **Codex** | Prefere o Codex CLI da OpenAI ou quer comparar implementações entre fornecedores. | `codex` ≥ 0.128.0. Sem reporte de custo nativo — a app preenche o custo a partir da sua tabela de preços. Os perfis não se aplicam. |
|
|
29
29
|
| **Gemini** | Quer o Gemini CLI da Google, telemetria nativa ou uma execução mais barata para specs de rotina. | `gemini` ≥ 0.11.0 (defina `GEMINI_API_KEY`). Telemetria OTLP nativa. Os perfis não se aplicam. |
|
|
30
30
|
|
|
@@ -33,7 +33,7 @@ Os três correm os pipelines standard **Implement** e **Batch**. Aqui fica um gu
|
|
|
33
33
|
Algumas coisas só funcionam em rails Claude — escolha o Claude se precisar delas:
|
|
34
34
|
|
|
35
35
|
- **Perfis de agentes** — encaminhamento de modelo por agente. Em rails Codex ou Gemini a execução usa sempre o modo legado e qualquer perfil selecionado é **ignorado**. O seletor de perfil fica escondido nos motores que não são Claude.
|
|
36
|
-
- **
|
|
36
|
+
- **Freestyle** — o modo autónomo que ignora o pipeline. O segmento `Freestyle` e o seu seletor de modelo Haiku/Sonnet/Opus só aparecem quando o motor do rail é o Claude.
|
|
37
37
|
- **Contract Layer e SMASH** — funcionalidades de refinamento de spec exclusivas do Claude (são opções de Add Spec, não opções de rail, mas aplica-se a mesma restrição).
|
|
38
38
|
|
|
39
39
|
Se um projeto mistura motores, a barra lateral direita só mostra as secções que **todos** os fornecedores instalados suportam — por isso a secção **Agentes** desaparece por completo num projeto que inclua qualquer fornecedor que não seja Claude, porque os perfis são específicos do Claude.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# O Loop Builder
|
|
2
2
|
|
|
3
|
-
Um **rail roda um Loop**. Os loops embutidos (`Implement`, `Batch`, `
|
|
3
|
+
Um **rail roda um Loop**. Os loops embutidos (`Implement`, `Batch`, `Freestyle`) cobrem os casos do dia a dia, mas o **Loop Builder** deixa você desenhar os seus próprios — um editor visual, no estilo n8n, para automação que se repete até atingir uma meta. Esta página explica o que é um loop, como construir um e como rodá-lo em um rail.
|
|
4
4
|
|
|
5
5
|
## Loops e rails — a relação
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ Um **loop** é a *receita* do trabalho; um **rail** é a *pista* que o roda cont
|
|
|
11
11
|
─────────────────────────── ─────────────
|
|
12
12
|
Implement (embutido) Rail 1
|
|
13
13
|
Batch (embutido) escolha ► Loop: Verify-until-green
|
|
14
|
-
|
|
14
|
+
Freestyle (embutido) ▶ Play
|
|
15
15
|
Verify-until-green (seu)
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -6,7 +6,7 @@ Specrails 并不绑定在某一个 AI 上。应用里所有会调用 AI 的环
|
|
|
6
6
|
|
|
7
7
|
| 提供方 | CLI | 出品方 | 说明 |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| **Claude** | `claude` | Anthropic | 功能最完整。Agents(profile)、
|
|
9
|
+
| **Claude** | `claude` | Anthropic | 功能最完整。Agents(profile)、Freestyle rail 以及 Contract Refine 都只有它支持。 |
|
|
10
10
|
| **Codex** | `codex` | OpenAI | 需要 codex `0.128.0+`。从你的全局 `~/.codex/config.toml` 读取 MCP 服务器。 |
|
|
11
11
|
| **Gemini** | `gemini` | Google | 需要 gemini `0.11.0+`。使用原生遥测,以及 `GEMINI.md` 指令文件。 |
|
|
12
12
|
|
|
@@ -43,7 +43,7 @@ Specrails 并不绑定在某一个 AI 上。应用里所有会调用 AI 的环
|
|
|
43
43
|
有少数功能天生就是 Claude 专属的,因此当其他提供方参与时,它们要么被隐藏、要么被跳过:
|
|
44
44
|
|
|
45
45
|
- **Agents(profile)**——按项目的 agent 目录与模型路由。在任何包含非 Claude 提供方的项目上都会隐藏。
|
|
46
|
-
- **
|
|
46
|
+
- **Freestyle rail**——始终在 Claude 上运行。
|
|
47
47
|
- **Contract Refine**——对已提交规格追加的「Contract Layer」环节,只有当对话的提供方是 Claude 时才会运行。
|
|
48
48
|
- **Add Spec 高级模式**(SMASH / Contract Layer)——对非 Claude 引擎隐藏。
|
|
49
49
|
|
|
@@ -31,6 +31,25 @@ Specrails 可以把**自己**暴露给任何会说 [Model Context Protocol](http
|
|
|
31
31
|
|
|
32
32
|
支持远程 HTTP MCP 服务器的客户端,则可以直接指向 `http://127.0.0.1:4200/api/mcp`,并配上面板里的令牌。
|
|
33
33
|
|
|
34
|
+
### 从终端连接: Claude Code、Gemini CLI、Codex CLI
|
|
35
|
+
|
|
36
|
+
先在 **设置 ▸ MCP ▸ 复制令牌** 复制令牌, 然后:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Claude Code
|
|
40
|
+
claude mcp add --transport http specrails http://localhost:4200/api/mcp \
|
|
41
|
+
--header "X-Desktop-Token: <你的令牌>"
|
|
42
|
+
|
|
43
|
+
# Gemini CLI
|
|
44
|
+
gemini mcp add --transport http specrails http://localhost:4200/api/mcp \
|
|
45
|
+
--header "X-Desktop-Token: <你的令牌>"
|
|
46
|
+
|
|
47
|
+
# Codex CLI (stdio — 注册 设置 ▸ MCP 中显示的 bridge 命令)
|
|
48
|
+
codex mcp add specrails -- <设置 ▸ MCP 中的 bridge 命令>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
也可以使用 `Authorization: Bearer <token>` 请求头。如果修改过应用端口, 请替换 `4200`。
|
|
52
|
+
|
|
34
53
|
一旦连上,你的助手会看到大约 **18 个工具**,覆盖整个应用——项目、规格、rail 和任务、聊天 / Explore、agent、插件、Jira、loop、代码浏览器、分析、设置——外加一个内置的**指南(guide)**工具,它会先读这个工具,从而无需你解释任何东西就能理解 Specrails 是怎么运作的。
|
|
35
54
|
|
|
36
55
|
## 你能用它做些什么
|
|
@@ -51,7 +70,7 @@ Specrails 可以把**自己**暴露给任何会说 [Model Context Protocol](http
|
|
|
51
70
|
> *「检查我所有的项目。告诉我哪些在 backlog 里有规格却没有 rail 在跑,并在每个项目里启动优先级最高的那一个。」*
|
|
52
71
|
|
|
53
72
|
**写代码时不用动手。** 从你的编辑器里或用语音来驱动 Specrails,无需切换窗口:
|
|
54
|
-
> *「用 Opus、以
|
|
73
|
+
> *「用 Opus、以 Freestyle 模式在 rail 0 上为任务 #42 启动一条 rail,跑完了告诉我。」*
|
|
55
74
|
|
|
56
75
|
**询问费用和历史。** 用大白话查你的分析数据:
|
|
57
76
|
> *「我这周在 AI 上花得最多的是哪里,按项目、按模型分别列出来?给我看最贵的五个任务。」*
|
|
@@ -23,7 +23,7 @@ rail 是一条**执行通道**。你从 SpecsBoard 上拖一张 spec 卡片放
|
|
|
23
23
|
## 在某个 spec 上启动一条 rail
|
|
24
24
|
|
|
25
25
|
1. **把一张 spec 卡片拖**到某条 rail 上。该 spec 的 ID 会出现在这条 rail 的 spec 列表里。(不想拖?用 spec 卡片上的 **放入 Rail** 弹窗——它会为每条 rail 显示一个状态圆点,避免你把活儿丢进一条正忙的通道。)
|
|
26
|
-
2. **在 rail 头部挑一个 Loop。** 一条 rail 运行的是一个 **Loop**——也就是它要做的活儿。默认是内置的 `Implement` loop;你也可以挑 `Batch`、`
|
|
26
|
+
2. **在 rail 头部挑一个 Loop。** 一条 rail 运行的是一个 **Loop**——也就是它要做的活儿。默认是内置的 `Implement` loop;你也可以挑 `Batch`、`Freestyle`,或者你自己搭的某个自定义 loop。见 [Loop Builder](the-loop-builder)。
|
|
27
27
|
3. **按下 ▶ Play。**
|
|
28
28
|
|
|
29
29
|
就这么简单。rail 会在你的项目里启动一个 AI CLI 进程,开始跑流水线。
|
|
@@ -34,7 +34,7 @@ rail 是一条**执行通道**。你从 SpecsBoard 上拖一张 spec 卡片放
|
|
|
34
34
|
|---------|--------------|
|
|
35
35
|
| **状态标签** | `idle`、`running` 或 `failed`。这里没有单独的"completed"——任务干净地跑完后,rail 会回到 `idle`。 |
|
|
36
36
|
| **spec 列表** | 分配给这条 rail 的 ID。可以再拖进来,也可以拖出去解除关联。 |
|
|
37
|
-
| **Loop 选择器** | 这条 rail 运行的 Loop——内置的(`Implement` / `Batch` / `
|
|
37
|
+
| **Loop 选择器** | 这条 rail 运行的 Loop——内置的(`Implement` / `Batch` / `Freestyle`)或某个自定义 loop。见下表。按 rail 单独记忆。 |
|
|
38
38
|
| **Profile 选择器** | 运行哪个 Agent Profile(仅限 Claude rail)。只有当项目至少有一个 Profile 时才会出现。 |
|
|
39
39
|
| **引擎选择器** | 这条 rail 用哪个已安装的提供方来跑——Claude、Codex 或 Gemini。仅当项目装有不止一个提供方时才显示。见 [为每条 rail 选择引擎](picking-an-engine-per-rail)。 |
|
|
40
40
|
| **▶ Play / ■ Stop** | 启动或取消。 |
|
|
@@ -47,9 +47,9 @@ rail 是一条**执行通道**。你从 SpecsBoard 上拖一张 spec 卡片放
|
|
|
47
47
|
|------|---------|--------------|
|
|
48
48
|
| **Implement** | `/specrails:implement` | 一个任务覆盖这条 rail 上的所有 spec。跑完整的 Architect → Developer → Reviewer → Ship 流水线。日常默认选项。 |
|
|
49
49
|
| **Batch** | `/specrails:batch-implement` | 一个任务,按依赖感知的批次(wave)依次处理 rail 上的各个 spec。最适合一组相关的 spec。 |
|
|
50
|
-
| **
|
|
50
|
+
| **Freestyle** | Freestyle | Claude 自主实现每个 spec,**绕过**流水线。每个 spec 一个独立任务。仅限 Claude。 |
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
Freestyle 是个特例:它跳过 Agent 链条,把原始 spec 直接交给 Claude,让它用自己的原生工具去做。因为它比较"放飞",所以按下 Play 会先弹出一个确认框,而且有一个按 rail 单独的模型选择器,让你在 Haiku / Sonnet / Opus 之间挑选。只有当 rail 的引擎是 Claude 时它才会出现。
|
|
53
53
|
|
|
54
54
|
除了这些内置 loop,你还可以**搭建自己的 loop**——重复一个 verify → fix → verify 的循环直到目标达成、在 AI 步骤之间串联 shell 命令,等等。这些自定义 loop 会出现在同一个 Loop 选择器里。这就是下一个大点子:[Loop Builder](the-loop-builder)。
|
|
55
55
|
|
|
@@ -35,7 +35,7 @@ Architect ──► Developer ──► Reviewer ──► Ship
|
|
|
35
35
|
| **Reviewer** | `sr-reviewer` | 审查产出。 |
|
|
36
36
|
| **Ship** | (视情况而定) | 收尾:测试、提交、起草 PR。 |
|
|
37
37
|
|
|
38
|
-
每个阶段由哪个 Agent 来处理,是由项目的 **Agent Profile** 决定的。基线三人组(`sr-architect`、`sr-developer`、`sr-reviewer`)始终在场;Profile 里的路由规则可以添加 Agent,或替换某个阶段由谁来跑。只有当命令确实定义了阶段时,阶段进度条才会出现——
|
|
38
|
+
每个阶段由哪个 Agent 来处理,是由项目的 **Agent Profile** 决定的。基线三人组(`sr-architect`、`sr-developer`、`sr-reviewer`)始终在场;Profile 里的路由规则可以添加 Agent,或替换某个阶段由谁来跑。只有当命令确实定义了阶段时,阶段进度条才会出现——Freestyle 任务(绕过了流水线)不会显示进度条。
|
|
39
39
|
|
|
40
40
|
## 实时指标——为诚实而设计
|
|
41
41
|
|
|
@@ -24,7 +24,7 @@ Specrails desktop 把 **Claude Code**、**Codex CLI** 和 **Gemini CLI** 都当
|
|
|
24
24
|
|
|
25
25
|
| 引擎 | 在什么情况下选它…… | 说明 |
|
|
26
26
|
|--------|--------------------|-------|
|
|
27
|
-
| **Claude** | 你想要全套功能:Agent Profile、
|
|
27
|
+
| **Claude** | 你想要全套功能:Agent Profile、Freestyle、原生成本上报、最丰富的工具支持。大多数工作的默认之选。 | 唯一支持 **Agent Profile**、**Freestyle** 以及几个 Claude 专属 spec 功能(Contract Layer、SMASH)的引擎。 |
|
|
28
28
|
| **Codex** | 你更喜欢 OpenAI Codex CLI,或想跨提供方对比实现。 | `codex` ≥ 0.128.0。无原生成本上报——应用会用自己的价格表来补上成本。Profile 不适用。 |
|
|
29
29
|
| **Gemini** | 你想用 Google 的 Gemini CLI、原生遥测,或为常规 spec 跑得更省钱。 | `gemini` ≥ 0.11.0(需设置 `GEMINI_API_KEY`)。原生 OTLP 遥测。Profile 不适用。 |
|
|
30
30
|
|
|
@@ -33,7 +33,7 @@ Specrails desktop 把 **Claude Code**、**Codex CLI** 和 **Gemini CLI** 都当
|
|
|
33
33
|
有几样东西只在 Claude rail 上能用——如果你需要它们,就选 Claude:
|
|
34
34
|
|
|
35
35
|
- **Agent Profile**——按 Agent 的模型路由。在 Codex 或 Gemini rail 上,运行始终走传统模式,所选的任何 Profile 都会被**忽略**。非 Claude 引擎下 Profile 选择器会被隐藏。
|
|
36
|
-
- **
|
|
36
|
+
- **Freestyle**——那个自主的、绕过流水线的模式。`Freestyle` 分段及其 Haiku/Sonnet/Opus 模型选择器,只有当 rail 的引擎是 Claude 时才会出现。
|
|
37
37
|
- **Contract Layer 与 SMASH**——Claude 专属的 spec 优化功能(这些是 Add Spec 的选项,不是 rail 的选项,但同样的限制适用)。
|
|
38
38
|
|
|
39
39
|
如果一个项目混用了引擎,右侧栏只会显示**每一个**已安装提供方都支持的区块——所以在一个含有任何非 Claude 提供方的项目上,**Agents** 区会彻底消失,因为 Profile 是 Claude 特有的。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Loop Builder
|
|
2
2
|
|
|
3
|
-
**一条 rail 运行的是一个 Loop。** 内置的那些 loop(`Implement`、`Batch`、`
|
|
3
|
+
**一条 rail 运行的是一个 Loop。** 内置的那些 loop(`Implement`、`Batch`、`Freestyle`)覆盖了日常场景,但 **Loop Builder** 让你能设计自己的——一个可视化的、n8n 风格的编辑器,用来做那种"重复执行直到目标达成"的自动化。本页会讲清楚什么是 loop、怎么搭一个,以及怎么在 rail 上运行它。
|
|
4
4
|
|
|
5
5
|
## Loop 与 rail——它们的关系
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
─────────────────────────── ─────────────
|
|
12
12
|
Implement (内置) Rail 1
|
|
13
13
|
Batch (内置) 在此挑选 ► Loop: Verify-until-green
|
|
14
|
-
|
|
14
|
+
Freestyle (内置) ▶ Play
|
|
15
15
|
Verify-until-green (你的)
|
|
16
16
|
```
|
|
17
17
|
|