specrails-desktop 2.7.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -19
- package/client/dist/assets/{ActivityFeedPage-LKqd18-G.js → ActivityFeedPage-DNqnf1fZ.js} +1 -1
- package/client/dist/assets/{AgentsPage-Cb-b-6Ot.js → AgentsPage-vmNIEbGM.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-HVxQQ1wy.js → AnalyticsPage-CdfN0ofZ.js} +1 -1
- package/client/dist/assets/{BarChart-BOyHB0dw.js → BarChart-CIkopHjl.js} +1 -1
- package/client/dist/assets/{CodePage-DnOnwKGB.js → CodePage-DDRNU5FN.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-D2auU39x.js → DesktopAnalyticsPage-Cl3sKKSG.js} +1 -1
- package/client/dist/assets/{DocsDialog-CTuDX3GK.js → DocsDialog-BGrBOfUr.js} +2 -2
- package/client/dist/assets/{DocsPage-DRyMmu0Z.js → DocsPage-CY-2SSzw.js} +2 -2
- package/client/dist/assets/{ExportDropdown-DO-GGiMh.js → ExportDropdown-BRHcvP0r.js} +1 -1
- package/client/dist/assets/{IntegrationsPage-BhbO4jFT.js → IntegrationsPage-nKdLB4Ub.js} +1 -1
- package/client/dist/assets/{JobDetailPage-DJooEg1s.js → JobDetailPage-Bf0A6WWQ.js} +1 -1
- package/client/dist/assets/{JobsPage-BbaC-YOg.js → JobsPage-Vg4nXPdL.js} +1 -1
- package/client/dist/assets/{dist-js-CiIVMsx3.js → dist-js-0i_klubI.js} +1 -1
- package/client/dist/assets/{dist-js-Xc2lRKp2.js → dist-js-CUs5GjwA.js} +1 -1
- package/client/dist/assets/{index-DK214dak.js → index-BXoHFtfG.js} +8 -8
- package/client/dist/assets/index-D6BaYRRU.css +2 -0
- package/client/dist/assets/{integrations-2C7MkGT0.js → integrations-7YyTBuU9.js} +1 -1
- package/client/dist/assets/{integrations-CX4p_bij.js → integrations-B9CEpNF0.js} +1 -1
- package/client/dist/assets/{integrations-C2jQtv-s.js → integrations-BlvAdewo.js} +1 -1
- package/client/dist/assets/{integrations-eQPHAYsE.js → integrations-Bw8UM9Xd.js} +1 -1
- package/client/dist/assets/{integrations-BDC670cg.js → integrations-C5SxNKnG.js} +1 -1
- package/client/dist/assets/{integrations-BqUmRUef.js → integrations-CJQKMmdW.js} +1 -1
- package/client/dist/assets/{integrations-CB98NeH5.js → integrations-DWz1eU_K.js} +1 -1
- package/client/dist/assets/{integrations-_SuVeQIG.js → integrations-DiPR8Fzp.js} +1 -1
- package/client/dist/assets/{lib-Bo5s6xpe.js → lib-D6M_MvoC.js} +1 -1
- package/client/dist/assets/setup-B6egeeTM.js +1 -0
- package/client/dist/assets/setup-BHroXlke.js +1 -0
- package/client/dist/assets/setup-BIXsWUp1.js +1 -0
- package/client/dist/assets/setup-BJRdg1iE.js +1 -0
- package/client/dist/assets/setup-C0rVGnCy.js +1 -0
- package/client/dist/assets/setup-Cpu17hJv.js +1 -0
- package/client/dist/assets/setup-D-1r0uSx.js +1 -0
- package/client/dist/assets/setup-Dn2-veYO.js +1 -0
- package/client/dist/assets/{useProjectCache-DVNypkmR.js → useProjectCache-BeyBSNpD.js} +1 -1
- package/client/dist/index.html +4 -4
- package/docs/README.md +5 -2
- package/docs/agy-cli-provider-study.md +78 -0
- package/docs/cli.md +23 -4
- package/docs/codex.md +116 -58
- package/docs/creating-specs.md +19 -5
- package/docs/customizing.md +27 -6
- package/docs/gemini.md +225 -73
- package/docs/getting-started.md +18 -9
- package/docs/guide/de/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/de/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/de/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/de/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/de/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/de/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/de/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/de/insights/3-code-explorer.md +50 -0
- package/docs/guide/de/integrations/1-ai-providers.md +64 -0
- package/docs/guide/de/integrations/2-plugins.md +44 -0
- package/docs/guide/de/integrations/3-jira-integration.md +71 -0
- package/docs/guide/de/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/de/settings/1-themes.md +37 -0
- package/docs/guide/de/settings/2-language.md +39 -0
- package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/de/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/de/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/de/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/en/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/en/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/en/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/en/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/en/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/en/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/en/insights/3-code-explorer.md +50 -0
- package/docs/guide/en/integrations/1-ai-providers.md +64 -0
- package/docs/guide/en/integrations/2-plugins.md +44 -0
- package/docs/guide/en/integrations/3-jira-integration.md +71 -0
- package/docs/guide/en/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/en/settings/1-themes.md +37 -0
- package/docs/guide/en/settings/2-language.md +39 -0
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/en/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/en/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/en/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/es/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/es/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/es/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/es/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/es/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/es/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/es/insights/3-code-explorer.md +50 -0
- package/docs/guide/es/integrations/1-ai-providers.md +64 -0
- package/docs/guide/es/integrations/2-plugins.md +44 -0
- package/docs/guide/es/integrations/3-jira-integration.md +71 -0
- package/docs/guide/es/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/es/settings/1-themes.md +37 -0
- package/docs/guide/es/settings/2-language.md +39 -0
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/es/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/es/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/es/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/fr/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/fr/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/fr/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/fr/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/fr/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/fr/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/fr/insights/3-code-explorer.md +50 -0
- package/docs/guide/fr/integrations/1-ai-providers.md +64 -0
- package/docs/guide/fr/integrations/2-plugins.md +44 -0
- package/docs/guide/fr/integrations/3-jira-integration.md +71 -0
- package/docs/guide/fr/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/fr/settings/1-themes.md +37 -0
- package/docs/guide/fr/settings/2-language.md +39 -0
- package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/fr/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/fr/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/fr/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/it/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/it/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/it/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/it/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/it/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/it/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/it/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/it/insights/3-code-explorer.md +50 -0
- package/docs/guide/it/integrations/1-ai-providers.md +64 -0
- package/docs/guide/it/integrations/2-plugins.md +44 -0
- package/docs/guide/it/integrations/3-jira-integration.md +71 -0
- package/docs/guide/it/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/it/settings/1-themes.md +37 -0
- package/docs/guide/it/settings/2-language.md +39 -0
- package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/it/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/it/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/it/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/ja/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/ja/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/ja/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/ja/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/ja/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/ja/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/ja/insights/3-code-explorer.md +50 -0
- package/docs/guide/ja/integrations/1-ai-providers.md +64 -0
- package/docs/guide/ja/integrations/2-plugins.md +44 -0
- package/docs/guide/ja/integrations/3-jira-integration.md +71 -0
- package/docs/guide/ja/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/ja/settings/1-themes.md +37 -0
- package/docs/guide/ja/settings/2-language.md +39 -0
- package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/ja/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/ja/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/ja/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/pt/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/pt/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/pt/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/pt/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/pt/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/pt/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/pt/insights/3-code-explorer.md +50 -0
- package/docs/guide/pt/integrations/1-ai-providers.md +64 -0
- package/docs/guide/pt/integrations/2-plugins.md +44 -0
- package/docs/guide/pt/integrations/3-jira-integration.md +71 -0
- package/docs/guide/pt/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/pt/settings/1-themes.md +37 -0
- package/docs/guide/pt/settings/2-language.md +39 -0
- package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/pt/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/pt/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/pt/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/zh/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/zh/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/zh/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/zh/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/zh/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/zh/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/zh/insights/3-code-explorer.md +50 -0
- package/docs/guide/zh/integrations/1-ai-providers.md +64 -0
- package/docs/guide/zh/integrations/2-plugins.md +44 -0
- package/docs/guide/zh/integrations/3-jira-integration.md +71 -0
- package/docs/guide/zh/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/zh/settings/1-themes.md +37 -0
- package/docs/guide/zh/settings/2-language.md +39 -0
- package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/zh/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/zh/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/zh/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/internals/README.md +1 -1
- package/docs/internals/adding-a-provider.md +192 -59
- package/docs/internals/api-reference.md +130 -21
- package/docs/internals/architecture.md +22 -9
- package/docs/internals/bundled-framework-build-plan.md +264 -0
- package/docs/internals/configuration.md +33 -8
- package/docs/internals/global-artifacts-alignment-contract.md +486 -0
- package/docs/internals/global-artifacts-relocation-evaluation.md +294 -0
- package/docs/internals/operations-runbook.md +16 -5
- package/docs/internals/profiles.md +42 -14
- package/docs/platforms/macos.md +27 -8
- package/docs/platforms/windows.md +20 -6
- package/docs/running-pipelines.md +17 -9
- package/docs/terminal.md +9 -3
- package/docs/tracking-cost.md +17 -11
- package/package.json +1 -1
- package/server/dist/agent-refine-manager.js +20 -5
- package/server/dist/artifact-registry.js +468 -0
- package/server/dist/attachment-manager.js +5 -8
- package/server/dist/browser-capture-manager.js +4 -4
- package/server/dist/bundled-core.js +72 -0
- package/server/dist/bundled-openspec.js +58 -0
- package/server/dist/chat-manager.js +42 -5
- package/server/dist/code-explorer-router.js +10 -7
- package/server/dist/config.js +7 -2
- package/server/dist/context-budget.js +17 -6
- package/server/dist/context-scope.js +6 -2
- package/server/dist/contract-refine-runner.js +31 -9
- package/server/dist/desktop-router.js +39 -14
- package/server/dist/docs-router.js +210 -132
- package/server/dist/file-summary-manager.js +41 -16
- package/server/dist/framework-manager.js +248 -0
- package/server/dist/framework-migration.js +308 -0
- package/server/dist/index.js +30 -0
- package/server/dist/install-config-path.js +73 -0
- package/server/dist/jira/jira-sync-manager.js +23 -11
- package/server/dist/openspec-shim.js +153 -0
- package/server/dist/plugins-router.js +19 -8
- package/server/dist/profiles-router.js +38 -16
- package/server/dist/project-registry.js +101 -3
- package/server/dist/project-router-chat.js +1 -1
- package/server/dist/project-router-helpers.js +25 -12
- package/server/dist/project-router-jobs.js +3 -3
- package/server/dist/project-router-settings.js +8 -6
- package/server/dist/project-router-setup.js +27 -10
- package/server/dist/project-router-spending.js +6 -1
- package/server/dist/project-router-tickets.js +30 -10
- package/server/dist/project-router.js +16 -1
- package/server/dist/providers/gemini-adapter.js +4 -0
- package/server/dist/providers/gemini-agent-ack.js +65 -0
- package/server/dist/queue-manager.js +156 -12
- package/server/dist/setup-manager.js +131 -29
- package/server/dist/smash-runner.js +21 -6
- package/server/dist/ticket-store.js +6 -2
- package/server/dist/ticket-watcher.js +5 -1
- package/server/dist/util/stream-display.js +18 -3
- package/server/dist/vitest-setup.js +25 -0
- package/server/dist/workspace-manager.js +199 -0
- package/server/dist/workspace-resolution.js +147 -0
- package/client/dist/assets/index-DgKfQFcf.css +0 -2
- package/client/dist/assets/setup-BIIkb-_K.js +0 -1
- package/client/dist/assets/setup-BeQxu9kD.js +0 -1
- package/client/dist/assets/setup-CPa6GnlI.js +0 -1
- package/client/dist/assets/setup-CZl4OEJx.js +0 -1
- package/client/dist/assets/setup-ChpodNfn.js +0 -1
- package/client/dist/assets/setup-D_fjJH6u.js +0 -1
- package/client/dist/assets/setup-YzD8DX4O.js +0 -1
- package/client/dist/assets/setup-fRpDozmq.js +0 -1
- package/docs/adding-a-provider.md +0 -107
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Picking an engine per rail
|
|
2
|
+
|
|
3
|
+
Specrails desktop treats **Claude Code**, **Codex CLI**, and **Gemini CLI** as first-class engines. A project can have one, two, or all three installed — and when more than one is present, you choose which engine runs each rail. This page covers the per-rail engine selector and when to reach for each.
|
|
4
|
+
|
|
5
|
+
## When the selector appears
|
|
6
|
+
|
|
7
|
+
The **engine selector** lives in the rail header, right alongside the mode control. It only renders when the project has **more than one** provider installed.
|
|
8
|
+
|
|
9
|
+
> **Single-provider projects behave byte-identically.** If a project has just one engine, no selector shows and nothing about provider selection changes — it just runs on that engine. The selector is purely for multi-provider projects.
|
|
10
|
+
|
|
11
|
+
When it does appear, your choice is **per rail and per launch** — different rails can run different engines, and your pick is remembered per project (defaulting to the project's primary engine).
|
|
12
|
+
|
|
13
|
+
## How to pick an engine
|
|
14
|
+
|
|
15
|
+
1. Make sure the rail's engine selector is showing (project has 2+ providers).
|
|
16
|
+
2. Click it and choose **Claude**, **Codex**, or **Gemini**.
|
|
17
|
+
3. Launch the rail with **▶ Play**.
|
|
18
|
+
|
|
19
|
+
The selected engine runs every phase of that rail's pipeline. If the chosen engine's CLI isn't installed, the launch fails fast — nothing spawns. Install the missing CLI and try again.
|
|
20
|
+
|
|
21
|
+
## What each engine is good at
|
|
22
|
+
|
|
23
|
+
All three run the standard **Implement** and **Batch** pipelines. Here's a practical guide to choosing:
|
|
24
|
+
|
|
25
|
+
| Engine | Reach for it when… | Notes |
|
|
26
|
+
|--------|--------------------|-------|
|
|
27
|
+
| **Claude** | You want the full feature set: agent profiles, Ultracode, native cost reporting, the richest tool support. The default for most work. | The only engine that supports **agent profiles**, **Ultracode**, and a few Claude-only spec features (Contract Layer, SMASH). |
|
|
28
|
+
| **Codex** | You prefer the OpenAI Codex CLI or want to compare implementations across providers. | `codex` ≥ 0.128.0. No native cost reporting — the app fills in cost from its rate card. Profiles don't apply. |
|
|
29
|
+
| **Gemini** | You want Google's Gemini CLI, native telemetry, or a cheaper run for routine specs. | `gemini` ≥ 0.11.0 (set `GEMINI_API_KEY`). Native OTLP telemetry. Profiles don't apply. |
|
|
30
|
+
|
|
31
|
+
### The Claude-only features
|
|
32
|
+
|
|
33
|
+
A few things only work on Claude rails — pick Claude if you need them:
|
|
34
|
+
|
|
35
|
+
- **Agent profiles** — per-agent model routing. On Codex or Gemini rails the run always uses legacy mode and any selected profile is **ignored**. The profile picker is hidden for non-Claude engines.
|
|
36
|
+
- **Ultracode (`Ultra` mode)** — the autonomous, pipeline-bypassing mode. The `Ultra` segment and its Haiku/Sonnet/Opus model picker only appear when the rail's engine is Claude.
|
|
37
|
+
- **Contract Layer & SMASH** — Claude-only spec-refinement features (these are Add-Spec options, not rail options, but the same constraint applies).
|
|
38
|
+
|
|
39
|
+
If a project mixes engines, the right sidebar only shows sections **every** installed provider supports — so the **Agents** section disappears entirely on a project that includes any non-Claude provider, because profiles are Claude-specific.
|
|
40
|
+
|
|
41
|
+
## A practical workflow
|
|
42
|
+
|
|
43
|
+
Multi-provider projects shine when you want to **compare** or **cost-tune**:
|
|
44
|
+
|
|
45
|
+
- **Compare implementations.** Put the same spec on two rails, set one to Claude and one to Codex, launch both (across projects, or one after the other in the same project's queue), then use the **Compare** button on the Jobs page to diff the results.
|
|
46
|
+
- **Cost-tune by spec.** Run high-stakes specs on Claude with a `max` profile; run routine cleanup specs on Gemini to save on spend. Filter `/analytics` by engine to see the breakdown.
|
|
47
|
+
- **Default sensibly.** Set your most-used engine as the project's primary so rails default to it, and only switch per-rail when a specific spec wants a different engine.
|
|
48
|
+
|
|
49
|
+
## Things to keep in mind
|
|
50
|
+
|
|
51
|
+
- **Provider selection is immutable after project creation** (v1). You choose installed providers when you add the project; there's no Settings toggle to add or remove one later.
|
|
52
|
+
- **Cost is always tracked**, even for engines without native cost reporting — the app falls back to a rate card so Codex and Gemini runs still show up in [analytics](../analytics/tracking-cost).
|
|
53
|
+
- **The terminal's "Open AI CLI" button** also offers a provider picker on multi-provider projects, if you'd rather drive a CLI by hand.
|
|
54
|
+
|
|
55
|
+
## Where to go next
|
|
56
|
+
|
|
57
|
+
- [Using Codex](../integrations/using-codex) — install and sign in.
|
|
58
|
+
- [Using Gemini](../integrations/using-gemini) — install, `GEMINI_API_KEY`, telemetry.
|
|
59
|
+
- [Rails & jobs](rails-and-jobs) — the queue and launch flow.
|
|
60
|
+
- [Tracking cost](../analytics/tracking-cost) — per-engine cost breakdown.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Themes
|
|
2
|
+
|
|
3
|
+
Make Specrails look the way you like. The app ships with five hand-tuned themes you can switch between instantly — no restart, no rebuild, nothing to configure.
|
|
4
|
+
|
|
5
|
+
## The five built-in themes
|
|
6
|
+
|
|
7
|
+
| Theme | Feel |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| **Specrails** | The default. Balanced, calm, brand-aligned. |
|
|
10
|
+
| **Dracula** | Classic dark purple. Easy on the eyes at night. |
|
|
11
|
+
| **Aurora Light** | A bright, airy light theme for daytime work. |
|
|
12
|
+
| **Obsidian Dark** | Deep, high-contrast dark mode. |
|
|
13
|
+
| **Matrix** | Green-on-black, for when you want to feel like you're in the mainframe. |
|
|
14
|
+
|
|
15
|
+
## How to switch
|
|
16
|
+
|
|
17
|
+
1. Open **Settings** (the app-wide settings modal).
|
|
18
|
+
2. Go to the **Appearance** section.
|
|
19
|
+
3. Pick a theme. It applies immediately across the whole app.
|
|
20
|
+
|
|
21
|
+
That's it. The change takes effect the moment you click — the interface re-skins live.
|
|
22
|
+
|
|
23
|
+
## Where it applies
|
|
24
|
+
|
|
25
|
+
Your theme choice is **app-wide**, not per-project. Every project, every page, every panel follows the same theme. It also reaches the places you might not expect:
|
|
26
|
+
|
|
27
|
+
- **The terminal panel** re-colours live, keeping your scrollback and any running shell session intact.
|
|
28
|
+
- **Charts** on the Analytics page re-tint to match.
|
|
29
|
+
- **Code syntax highlighting** in the Code viewer follows the theme too.
|
|
30
|
+
|
|
31
|
+
## It remembers your choice
|
|
32
|
+
|
|
33
|
+
Your selection is saved with the app, so it sticks across restarts. To avoid that brief flash of the wrong colours when the app first opens, Specrails applies your saved theme before the interface even finishes loading — so what you see is right from the very first frame.
|
|
34
|
+
|
|
35
|
+
## A note for the curious
|
|
36
|
+
|
|
37
|
+
Themes are built on a small set of semantic colour roles (an "accent" colour, a "surface" colour, and so on) rather than hard-coded shades. That's why adding the next theme is easy and why every theme stays internally consistent — each one just remaps those roles. You don't need to think about any of this to use it; it's simply why theming feels so seamless.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Language
|
|
2
|
+
|
|
3
|
+
Specrails speaks your language. The interface is fully translated into eight languages, and by default it follows whatever language your computer is set to — so for most people, it just shows up in the right language on first launch.
|
|
4
|
+
|
|
5
|
+
## Supported languages
|
|
6
|
+
|
|
7
|
+
- English
|
|
8
|
+
- Español (Spanish)
|
|
9
|
+
- Français (French)
|
|
10
|
+
- Deutsch (German)
|
|
11
|
+
- Português (Portuguese)
|
|
12
|
+
- Italiano (Italian)
|
|
13
|
+
- 中文 (Chinese)
|
|
14
|
+
- 日本語 (Japanese)
|
|
15
|
+
|
|
16
|
+
## It starts in your OS language
|
|
17
|
+
|
|
18
|
+
The first time you open Specrails, it looks at your operating system's language preferences and matches them to the closest supported language. If your Mac or PC is set to Spanish, you'll see Spanish. If it's set to a regional variant (like `es-ES` or `zh-Hans-CN`), Specrails maps it to the right base language automatically.
|
|
19
|
+
|
|
20
|
+
You don't have to do anything — and if you never touch the language setting, Specrails keeps following your OS. Change your computer's language later, and Specrails follows along.
|
|
21
|
+
|
|
22
|
+
## Choosing a language yourself
|
|
23
|
+
|
|
24
|
+
Want something different from your OS default? Pick it explicitly:
|
|
25
|
+
|
|
26
|
+
1. Open **Settings**.
|
|
27
|
+
2. Go to the **Language** section.
|
|
28
|
+
3. Choose your language.
|
|
29
|
+
|
|
30
|
+
The switch is **instant** — the whole interface re-renders in the new language with no restart. Once you make an explicit choice, Specrails remembers it and stops following the OS, so your pick is honoured every time you open the app.
|
|
31
|
+
|
|
32
|
+
## What gets translated
|
|
33
|
+
|
|
34
|
+
Everything you read in the interface — buttons, labels, status messages, page titles, dialogs. Dates also adapt to your chosen language, so they're formatted the way that language expects.
|
|
35
|
+
|
|
36
|
+
## Good to know
|
|
37
|
+
|
|
38
|
+
- **English is the source language.** If a brand-new feature ships before its translation is finished, you may briefly see an English label here or there — it will be translated in a following update.
|
|
39
|
+
- Your language choice is **app-wide**, the same across all your projects.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Pipeline telemetry & diagnostics
|
|
2
|
+
|
|
3
|
+
When a pipeline job doesn't go the way you expected, telemetry gives you a detailed, behind-the-scenes record of what the AI CLI actually did. It's **off by default** and entirely opt-in, per project — turn it on only when you want it.
|
|
4
|
+
|
|
5
|
+
## What it is
|
|
6
|
+
|
|
7
|
+
Telemetry captures structured diagnostic signals (traces, metrics, and logs) emitted by the AI CLI while it runs a pipeline job. Think of it as a flight recorder for your pipeline runs: timings, token usage, and step-by-step activity, captured locally so you can inspect a job after the fact.
|
|
8
|
+
|
|
9
|
+
It's built on **OpenTelemetry**, an open, standard format — so the data isn't locked into a proprietary box.
|
|
10
|
+
|
|
11
|
+
## Turning it on
|
|
12
|
+
|
|
13
|
+
Telemetry is configured **per project**:
|
|
14
|
+
|
|
15
|
+
1. Open the project's **Settings** page (the per-project settings route).
|
|
16
|
+
2. Find the **Pipeline telemetry** toggle.
|
|
17
|
+
3. Switch it on.
|
|
18
|
+
|
|
19
|
+
From that point forward, pipeline jobs in that project record telemetry. Other projects are unaffected — each project decides for itself.
|
|
20
|
+
|
|
21
|
+
### What's covered
|
|
22
|
+
|
|
23
|
+
Telemetry applies to **pipeline jobs** (the queued Architect → Developer → Reviewer → Ship rail runs). Interactive sessions like chat and the setup wizard are intentionally left out — telemetry is meant for the repeatable, inspectable pipeline runs, not one-off conversations.
|
|
24
|
+
|
|
25
|
+
## Where the data lives
|
|
26
|
+
|
|
27
|
+
Everything stays on your machine, under your home directory (`~/.specrails/`) — never in your repo. Raw recordings are stored compressed alongside their job, and older recordings are automatically condensed into compact summaries after a week to keep things tidy. You never have to manage any of this by hand.
|
|
28
|
+
|
|
29
|
+
## Exporting a diagnostic bundle
|
|
30
|
+
|
|
31
|
+
The most useful thing telemetry unlocks is the **diagnostic export** — a single ZIP that packages up everything about a job for troubleshooting or sharing.
|
|
32
|
+
|
|
33
|
+
When a job has telemetry recorded, an **export button** appears on its job card. Click it to download a ZIP containing:
|
|
34
|
+
|
|
35
|
+
- **`job-metadata.json`** — the job's identity and parameters
|
|
36
|
+
- **`telemetry.ndjson`** — the raw recorded signals
|
|
37
|
+
- **`logs.txt`** — the captured log output
|
|
38
|
+
- **`summary.md`** — a human-readable summary of the run
|
|
39
|
+
|
|
40
|
+
If the project uses plugins, the bundle also includes a snapshot of which plugins were active for that job.
|
|
41
|
+
|
|
42
|
+
This is the bundle to grab when you want to understand a tricky run, keep a record, or hand details to someone helping you debug.
|
|
43
|
+
|
|
44
|
+
## Turning it off
|
|
45
|
+
|
|
46
|
+
Flip the toggle back off any time. New jobs stop recording immediately. Anything already captured stays on disk until it's compacted or you remove the project — nothing is sent anywhere or lost behind your back.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Where your data lives
|
|
2
|
+
|
|
3
|
+
Short version: **Specrails keeps your repositories pristine.** When you point the app at one of your projects, it does not move in, scatter config files around, or rewrite anything you didn't ask it to. Your code stays yours, and clean.
|
|
4
|
+
|
|
5
|
+
## Your repo stays clean
|
|
6
|
+
|
|
7
|
+
Specrails's own files — its databases, per-project state, agent definitions, settings, telemetry, summaries, and everything else it needs to run — live in a single tidy home under your home directory:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
~/.specrails/
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
That folder is the app's private workspace. It's where the project registry, per-project databases, bundled tooling, and all the operational bits live. Your actual code repositories are never used as a dumping ground for any of it.
|
|
14
|
+
|
|
15
|
+
This means:
|
|
16
|
+
|
|
17
|
+
- Your repo's `.gitignore` is **not** rewritten by the app.
|
|
18
|
+
- Your repo isn't littered with tool config or hidden state directories.
|
|
19
|
+
- Removing a project from Specrails doesn't leave a mess behind in your code.
|
|
20
|
+
|
|
21
|
+
If you've used tools before that quietly added folders and files all over your project, this is a deliberate departure. Specrails is built so that pointing it at a repo is a **non-event** for that repo's git history.
|
|
22
|
+
|
|
23
|
+
## The one thing that *is* committed — by design
|
|
24
|
+
|
|
25
|
+
There's exactly one intentional exception, and it's the whole point of the tool: **your OpenSpec specs.**
|
|
26
|
+
|
|
27
|
+
Specs live in your repository, under:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
openspec/
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This is on purpose. Your specs are a **deliverable** — a versioned, reviewable record of what you decided to build and why. They belong next to your code, tracked in git, visible in pull requests, shared with your team. That's the value: specs aren't disposable scratch state, they're part of your project's history.
|
|
34
|
+
|
|
35
|
+
So the rule is simple and honest:
|
|
36
|
+
|
|
37
|
+
- **`openspec/`** → lives in your repo, committed, by design.
|
|
38
|
+
- **Everything else Specrails needs** → lives under `~/.specrails/`, out of your way.
|
|
39
|
+
|
|
40
|
+
## Why it works this way
|
|
41
|
+
|
|
42
|
+
Specrails runs the AI tooling from its own private workspace (under `~/.specrails/`) and reaches back into your real repository only for the things that genuinely need to touch it — reading your code, and writing the specs you asked for. The tooling, the framework definitions, and the bookkeeping all stay in the app's home folder.
|
|
43
|
+
|
|
44
|
+
The upshot for you: you can add a project, run pipelines, explore specs, and try things out with confidence that your repository's working tree and git history only ever change in ways you'd expect — your committed specs, and the code your pipelines write. Nothing else sneaks in.
|
|
45
|
+
|
|
46
|
+
## Removing a project
|
|
47
|
+
|
|
48
|
+
When you remove a project from Specrails, the app cleans up its own per-project state under `~/.specrails/`. The specs already committed to your repo stay where they belong — in your repo — because they're yours.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Specs & the backlog
|
|
2
|
+
|
|
3
|
+
A **spec** is the unit of work the AI pipeline implements. Think of it as a ticket: a title, a description of what you want done, a priority, and optional labels. When you launch the pipeline, the AI agents read the spec and act on it — so a clear spec is the single most important input to a good result.
|
|
4
|
+
|
|
5
|
+
Specs are sometimes called **tickets** in the app — the two words mean the same thing.
|
|
6
|
+
|
|
7
|
+
## The board
|
|
8
|
+
|
|
9
|
+
Every project opens on its **Dashboard**, which shows the **SpecsBoard** — the list of all the project's specs. This is your backlog. From here you create new specs, set their priority, drag them onto a rail to implement them, and watch their status change as work happens.
|
|
10
|
+
|
|
11
|
+
The board has two view modes, switched from a toolbar toggle and remembered per project:
|
|
12
|
+
|
|
13
|
+
- **Post-it view** (the default) — card-style tiles with short summaries.
|
|
14
|
+
- **List view** — compact one-line rows.
|
|
15
|
+
|
|
16
|
+
You can also filter by **status** (All / ToDo / Done) and by **label**, and sort by **Default**, **Ticket #**, or **Priority** (each with an ascending/descending toggle).
|
|
17
|
+
|
|
18
|
+
## Statuses
|
|
19
|
+
|
|
20
|
+
A spec moves through a small set of statuses. The board gives each one a consistent visual cue so you can read the state of your backlog at a glance:
|
|
21
|
+
|
|
22
|
+
| Status | What it means |
|
|
23
|
+
|--------|---------------|
|
|
24
|
+
| **Draft** | An in-progress idea saved from an Explore conversation. Not ready to implement yet — you can come back and keep shaping it. Shows a `Draft` pill. |
|
|
25
|
+
| **Todo** | Ready to be picked up. This is where a finished spec lands when you create it. |
|
|
26
|
+
| **In progress** | The pipeline is currently working on it (a pulsing blue dot). |
|
|
27
|
+
| **Done** | Completed by the pipeline (a green checkmark). |
|
|
28
|
+
| **Cancelled** | Abandoned (a red X). |
|
|
29
|
+
|
|
30
|
+
Drafts live in the same active bucket as Todo specs — there's no separate column for them — but they carry a subtly tinted border and a `Draft` pill so they're easy to spot. See [Drafts & the Contract Layer](drafts-and-contract-layer.md) for the full story on drafts.
|
|
31
|
+
|
|
32
|
+
## Priorities
|
|
33
|
+
|
|
34
|
+
Every non-draft spec has a priority: **Critical**, **High**, **Medium**, or **Low**. Priority is purely an organising tool — it helps you decide what to implement next and lets you sort the board. You set it when you create a spec, and you can change it any time by right-clicking the spec card and choosing **Set priority**.
|
|
35
|
+
|
|
36
|
+
Drafts are the one exception: a draft can have *no* priority at all, because it's still an idea in progress. The priority gets locked in when you commit the draft to a real spec.
|
|
37
|
+
|
|
38
|
+
## Creating a spec
|
|
39
|
+
|
|
40
|
+
To create a spec, click **Add** (the Plus button on the SpecsBoard toolbar). The **Add Spec** dialog opens with a few ways to work:
|
|
41
|
+
|
|
42
|
+
- **Quick mode** — you describe what you want and the AI writes the full spec in one shot. See [Add Spec — Quick mode](add-spec-quick-mode.md).
|
|
43
|
+
- **Explore mode** — you converse with the AI, and it helps you shape the spec turn by turn. See [Add Spec — Explore mode](add-spec-explore-mode.md).
|
|
44
|
+
- **Raw mode** — whatever you type is saved verbatim as a spec, with no AI involved. Use it when you already have the spec text written.
|
|
45
|
+
|
|
46
|
+
Which one you reach for depends on how clear the idea already is. Know exactly what you want? Quick. Still figuring it out? Explore. Already have the text? Raw.
|
|
47
|
+
|
|
48
|
+
## Where to go next
|
|
49
|
+
|
|
50
|
+
- [Add Spec — Quick mode](add-spec-quick-mode.md) — the fastest way to turn an idea into a spec.
|
|
51
|
+
- [Add Spec — Explore mode](add-spec-explore-mode.md) — shape a spec in conversation.
|
|
52
|
+
- [Drafts & the Contract Layer](drafts-and-contract-layer.md) — save work in progress and enrich specs for the pipeline.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Add Spec — Quick mode
|
|
2
|
+
|
|
3
|
+
Quick mode is for when you already know what you want. You type your idea, the AI writes the full spec, and it lands on your board as a **Todo**. No back-and-forth — just describe it and go.
|
|
4
|
+
|
|
5
|
+
## Create a spec in Quick mode
|
|
6
|
+
|
|
7
|
+
To create a spec quickly:
|
|
8
|
+
|
|
9
|
+
1. On the Dashboard, click **Add** (the Plus button on the SpecsBoard toolbar).
|
|
10
|
+
2. Choose **Quick** mode.
|
|
11
|
+
3. Type your idea in the text field — a sentence or a paragraph, whatever captures it.
|
|
12
|
+
4. Click to generate.
|
|
13
|
+
|
|
14
|
+
While the spec is being written, a small toast in the corner shows the project name, a snippet of your idea, and the **elapsed time** ("Generating… 0:12"). When it finishes, the toast switches to "Generated in <time>" with a **View** action that jumps straight to your new spec.
|
|
15
|
+
|
|
16
|
+
That's the whole flow. Everything below is optional fine-tuning.
|
|
17
|
+
|
|
18
|
+
## What you can tune
|
|
19
|
+
|
|
20
|
+
**Model** — by default the AI picks a sensible model. You can override it per spec from the model picker if you want a faster or more capable one.
|
|
21
|
+
|
|
22
|
+
**Engine** — if your project has more than one AI provider installed (any mix of Claude, Codex, and Gemini), an engine selector sits at the top of the dialog so you can choose which one generates this spec. Your choice is remembered per project. Single-provider projects don't show this — there's nothing to choose between.
|
|
23
|
+
|
|
24
|
+
**Context** — Quick mode usually runs as a single turn, because it doesn't need to read your codebase to write a spec from your description. But a context slider lets you give it more to work with:
|
|
25
|
+
|
|
26
|
+
- At the lowest setting it just reads your description.
|
|
27
|
+
- At higher settings it can read your existing specs, your project's OpenSpec specs, and even your full codebase before writing.
|
|
28
|
+
|
|
29
|
+
The more context you give it, the longer generation takes (it switches to multi-turn so it can read first), but the spec comes back grounded in your actual project. Reach for higher context when the spec needs to reference real code, file names, or existing behaviour.
|
|
30
|
+
|
|
31
|
+
**Attachments** — drop mockups, briefs, or data files into the idea field. The AI reads them as part of writing the spec. (Attachments also switch generation to multi-turn.)
|
|
32
|
+
|
|
33
|
+
**Enrich with Contract Layer** — a toggle that appends a structured block to the generated spec so the downstream pipeline doesn't have to guess names or data shapes. It's optional and off by default; your last choice is remembered per project. See [Drafts & the Contract Layer](drafts-and-contract-layer.md) for what it adds and when it's worth it.
|
|
34
|
+
|
|
35
|
+
## When to use Quick mode vs Explore
|
|
36
|
+
|
|
37
|
+
Use **Quick** when the idea is already clear in your head — you could write the spec yourself, you'd just rather the AI do it. Use [**Explore**](add-spec-explore-mode.md) when you're still thinking it through and want a partner to help you shape it.
|
|
38
|
+
|
|
39
|
+
A spec created in Quick mode is a fully normal spec: you can later open it and **Continue Editing** in an Explore session if it needs refining.
|
|
40
|
+
|
|
41
|
+
## Where to go next
|
|
42
|
+
|
|
43
|
+
- [Add Spec — Explore mode](add-spec-explore-mode.md) — for specs that need shaping.
|
|
44
|
+
- [Drafts & the Contract Layer](drafts-and-contract-layer.md) — the Contract Layer enrichment explained.
|
|
45
|
+
- [Running pipelines](running-pipelines.md) — drag your new spec onto a rail and implement it.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Add Spec — Explore mode
|
|
2
|
+
|
|
3
|
+
Explore mode is a conversation. Instead of writing the spec yourself, you talk through the idea with the AI — it acts as a thinking partner, asks questions, proposes structure, and builds a **live draft** of the spec as you go. When you're happy, you commit the draft to a real spec.
|
|
4
|
+
|
|
5
|
+
Reach for Explore when the idea isn't fully formed yet, when there are trade-offs to talk through, or when you want the AI to look at your actual code before pinning down the spec.
|
|
6
|
+
|
|
7
|
+
## Create a spec in Explore mode
|
|
8
|
+
|
|
9
|
+
To shape a spec in Explore mode:
|
|
10
|
+
|
|
11
|
+
1. On the Dashboard, click **Add**, then choose **Explore**.
|
|
12
|
+
2. Type your first message — the idea, a question, or a half-formed thought.
|
|
13
|
+
3. Read the AI's response and keep replying. Each turn, it refines its understanding.
|
|
14
|
+
4. Watch the **live draft** update alongside the chat — this is the spec taking shape.
|
|
15
|
+
5. When the draft looks right, click **Create Spec**.
|
|
16
|
+
|
|
17
|
+
The conversation stays in your history, so you can always come back to see how the spec was shaped.
|
|
18
|
+
|
|
19
|
+
## The live draft
|
|
20
|
+
|
|
21
|
+
As you converse, a draft pane shows the spec as it currently stands — title, description, priority, labels, acceptance criteria. It rewrites itself each turn based on what you've discussed. You don't edit it directly; you steer it through the conversation ("actually, make the priority high", "add a criterion about error handling", and so on).
|
|
22
|
+
|
|
23
|
+
This is the heart of Explore mode: you're never staring at a blank form. You're always looking at a real, evolving spec.
|
|
24
|
+
|
|
25
|
+
## How much the AI sees: the context slider
|
|
26
|
+
|
|
27
|
+
Before the AI answers, you decide how much of your project it can see. A context preset slider lets you trade speed for depth:
|
|
28
|
+
|
|
29
|
+
| Preset | What the AI sees |
|
|
30
|
+
|--------|------------------|
|
|
31
|
+
| **Minimal** | Just your message. Fastest and cheapest. |
|
|
32
|
+
| **Light** | + your existing specs. |
|
|
33
|
+
| **Standard** | + your specs and your project's OpenSpec specs. |
|
|
34
|
+
| **Rich** | + read access to your full codebase, so it can ground answers in real code. |
|
|
35
|
+
| **Max** | Rich, plus a Contract Layer enrichment pass on commit. |
|
|
36
|
+
| **Desktop** | Max, plus your project's MCP servers and your own approved MCP servers. |
|
|
37
|
+
|
|
38
|
+
Start low for fast brainstorming; move up when you want the AI to verify its suggestions against your actual code. The choice is saved on the conversation, so it doesn't leak into other Explore sessions.
|
|
39
|
+
|
|
40
|
+
If you want finer control, click **Fine-tune** to flip the underlying options by hand — including **My approved MCPs**, which loads the MCP servers you've already approved locally without slowing the session down.
|
|
41
|
+
|
|
42
|
+
## Buttons in the Explore shell
|
|
43
|
+
|
|
44
|
+
- **Create Spec** — promotes the live draft to a real spec with status **Todo**. (When you're editing an existing spec, this button reads **Update Spec** instead and patches that spec in place.)
|
|
45
|
+
- **Review →** — opens a Review overlay that shows the proposed spec diffed against the baseline before you commit, so there are no surprises.
|
|
46
|
+
- **Save as Draft** — persists the conversation as a draft ticket so you can pick it up later. Available as soon as you've sent at least one message. See below.
|
|
47
|
+
- **Minimize** — parks the conversation as a chip in the minimized-chats dock at the bottom-left. Click the chip any time to drop right back into the conversation — nothing is lost.
|
|
48
|
+
- **Discard** — throws the conversation away (asks for confirmation first).
|
|
49
|
+
|
|
50
|
+
## Saving as a draft
|
|
51
|
+
|
|
52
|
+
Not ready to commit, but don't want to lose the thinking? Click **Save as Draft**. The conversation becomes a **draft spec** on your board, and the draft stays linked to the conversation behind it.
|
|
53
|
+
|
|
54
|
+
Later, open the draft from the board and click **Continue Editing** — the original conversation re-opens with its full chat history intact, and you carry on exactly where you left off. Drafts are never auto-deleted; they wait for you.
|
|
55
|
+
|
|
56
|
+
This makes Explore safe to use for half-baked ideas: start a conversation, get somewhere, save it as a draft, and come back tomorrow.
|
|
57
|
+
|
|
58
|
+
For everything about drafts — including the Contract Layer enrichment — see [Drafts & the Contract Layer](drafts-and-contract-layer.md).
|
|
59
|
+
|
|
60
|
+
## Multi-provider note
|
|
61
|
+
|
|
62
|
+
If your project has more than one AI provider installed, an engine selector lets you pick which one drives the Explore conversation. Single-provider projects don't show it.
|
|
63
|
+
|
|
64
|
+
## Where to go next
|
|
65
|
+
|
|
66
|
+
- [Drafts & the Contract Layer](drafts-and-contract-layer.md) — saving work in progress and enriching specs for the pipeline.
|
|
67
|
+
- [Add Spec — Quick mode](add-spec-quick-mode.md) — when the idea is already clear.
|
|
68
|
+
- [Running pipelines](running-pipelines.md) — implement your spec once it's ready.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Drafts & the Contract Layer
|
|
2
|
+
|
|
3
|
+
This page covers two ways to get more out of your specs: **drafts** (saving an in-progress idea so you can resume it later) and the **Contract Layer** (an optional enrichment that makes specs more precise for the AI pipeline).
|
|
4
|
+
|
|
5
|
+
## Drafts: save an idea in progress
|
|
6
|
+
|
|
7
|
+
A **draft** is an in-progress [Explore](add-spec-explore-mode.md) conversation saved as a spec. It lets you stop mid-thought without losing anything and come back when you're ready.
|
|
8
|
+
|
|
9
|
+
### Saving a draft
|
|
10
|
+
|
|
11
|
+
While you're in an Explore conversation, click **Save as Draft** (available once you've sent at least one message). The app:
|
|
12
|
+
|
|
13
|
+
- Creates a spec with status **Draft** on your board.
|
|
14
|
+
- Gives it a title automatically if you didn't set one (a short summary of the conversation).
|
|
15
|
+
- Links it back to the conversation, so the full chat history is preserved.
|
|
16
|
+
|
|
17
|
+
Saving is idempotent — if you save the same conversation twice, it updates the existing draft instead of creating a duplicate.
|
|
18
|
+
|
|
19
|
+
### How drafts look on the board
|
|
20
|
+
|
|
21
|
+
Drafts live in the same active bucket as your Todo specs — there's no separate column. You'll spot them by:
|
|
22
|
+
|
|
23
|
+
- A `Draft` pill where the priority pill normally sits.
|
|
24
|
+
- A subtly tinted border on the card.
|
|
25
|
+
|
|
26
|
+
A draft is allowed to have *no priority* — you set the priority when you commit it to a real spec.
|
|
27
|
+
|
|
28
|
+
### Resuming a draft
|
|
29
|
+
|
|
30
|
+
To pick up where you left off:
|
|
31
|
+
|
|
32
|
+
1. Open the draft from the board.
|
|
33
|
+
2. Click **Continue Editing** in the detail modal.
|
|
34
|
+
3. The original Explore conversation re-opens with its full chat history, and the live draft pane pre-filled with everything you'd shaped so far.
|
|
35
|
+
4. Keep talking. When you're done, **Create Spec** promotes the draft to a real spec (status **Todo**, with the priority you choose).
|
|
36
|
+
|
|
37
|
+
### Discarding a draft
|
|
38
|
+
|
|
39
|
+
Drafts are **never auto-deleted**. They disappear only when you explicitly discard them, or when you commit them to a real status. Discarding a draft also cleans up its linked conversation when nothing else references it.
|
|
40
|
+
|
|
41
|
+
> Tip: when you're not sure a spec is worth doing, save it as a draft and let it sit. Open it the next morning, glance at the description, and decide with fresh eyes.
|
|
42
|
+
|
|
43
|
+
## The Contract Layer: precision for the pipeline
|
|
44
|
+
|
|
45
|
+
The **Contract Layer** is an optional enrichment that appends a structured block to a spec's description. Its job is to remove guesswork for the AI agents that implement the spec — so they reuse the right names, match the expected data shapes, and touch the right files instead of inventing their own.
|
|
46
|
+
|
|
47
|
+
### What it adds
|
|
48
|
+
|
|
49
|
+
The Contract Layer is five short sections appended to the spec:
|
|
50
|
+
|
|
51
|
+
- **Naming Contract** — the exact identifiers (functions, fields, routes) the implementation should reuse.
|
|
52
|
+
- **Data Shapes** — the JSON-ish payloads involved.
|
|
53
|
+
- **State Machine** — the transitions or states the feature moves through.
|
|
54
|
+
- **Invariants** — properties that must always hold true.
|
|
55
|
+
- **File Touch List** — the files the implementation is expected to edit.
|
|
56
|
+
|
|
57
|
+
Think of it as handing the pipeline a precise blueprint instead of a sketch. It's especially valuable for specs that plug into existing code, where the AI guessing a name or a shape would cause rework.
|
|
58
|
+
|
|
59
|
+
### How to add it
|
|
60
|
+
|
|
61
|
+
There are three ways the Contract Layer gets applied:
|
|
62
|
+
|
|
63
|
+
- **Quick mode** — flip the **Enrich with Contract Layer** toggle before generating. Your last choice is remembered per project. (See [Add Spec — Quick mode](add-spec-quick-mode.md).)
|
|
64
|
+
- **Explore mode** — choose the **Max** or **Desktop** context preset (which run the enrichment automatically on commit), or open **Fine-tune** and toggle it by hand. (See [Add Spec — Explore mode](add-spec-explore-mode.md).)
|
|
65
|
+
- **On an existing spec** — open the spec's detail modal and re-run the enrichment from there.
|
|
66
|
+
|
|
67
|
+
### Where it shows up
|
|
68
|
+
|
|
69
|
+
Once a spec has a Contract Layer, the detail modal shows it as a collapsible disclosure with a badge like `3/5 populated` — telling you how many of the five sections actually got filled in (some features simply don't have, say, a state machine, and those sections are marked as not applicable). Expand it to read the full contract; collapse it to keep the description tidy.
|
|
70
|
+
|
|
71
|
+
If the enrichment ever fails to run, the app surfaces a notification with a **Retry** action so you can fire it again.
|
|
72
|
+
|
|
73
|
+
### Is it always worth it?
|
|
74
|
+
|
|
75
|
+
Not always. For a small, self-contained spec the AI can implement fine without it. The Contract Layer earns its keep on specs that integrate tightly with existing code, where exact names and shapes matter — that's when pinning down the contract up front saves you a round of corrections later.
|
|
76
|
+
|
|
77
|
+
## Where to go next
|
|
78
|
+
|
|
79
|
+
- [Add Spec — Explore mode](add-spec-explore-mode.md) — where drafts come from.
|
|
80
|
+
- [Add Spec — Quick mode](add-spec-quick-mode.md) — the Contract Layer toggle in Quick mode.
|
|
81
|
+
- [Running pipelines](running-pipelines.md) — implement a spec once it's ready.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Conoce a los agentes
|
|
2
|
+
|
|
3
|
+
Cuando lanzas un rail de **Implement**, Specrails no le entrega tu spec a una sola IA con la esperanza de que salga bien. En su lugar, pone a trabajar a un pequeño equipo de *agentes* especializados, cada uno con una única tarea, en un orden deliberado. Esta página te presenta a quiénes forman ese equipo y qué hace cada uno.
|
|
4
|
+
|
|
5
|
+
## El trío base
|
|
6
|
+
|
|
7
|
+
Cada ejecución del pipeline usa estos tres agentes — son la columna vertebral, y un proyecto no puede lanzar un rail sin ellos.
|
|
8
|
+
|
|
9
|
+
| Agente | Rol | Qué hace |
|
|
10
|
+
|-------|------|--------------|
|
|
11
|
+
| **sr-architect** | El que planifica | Lee tu spec, inspecciona el código y produce un plan de implementación concreto: qué archivos tocar, qué forma tendrá el cambio y a qué prestar atención. Piensa antes de que nadie escriba código. |
|
|
12
|
+
| **sr-developer** | El que construye | Toma el plan del architect y escribe el código de verdad: archivos nuevos, ediciones, tests. Aquí es donde tu spec se convierte en un diff real. |
|
|
13
|
+
| **sr-reviewer** | El crítico | Valida el trabajo del developer contra la spec y el plan, detecta regresiones y pone reparos cuando algo no encaja. Es el control de calidad antes de dar el cambio por terminado. |
|
|
14
|
+
|
|
15
|
+
Piénsalo como **diseñar → construir → revisar**, el mismo ciclo que seguiría un equipo humano cuidadoso. Cada agente le pasa su resultado al siguiente, así que el developer nunca trabaja a ciegas y el reviewer siempre tiene la intención original con la que contrastar.
|
|
16
|
+
|
|
17
|
+
## Agentes especialistas
|
|
18
|
+
|
|
19
|
+
Más allá del trío, un proyecto puede incluir **agentes especialistas** opcionales que se encargan de tipos de trabajo específicos. El más común que verás es:
|
|
20
|
+
|
|
21
|
+
- **sr-merge-resolver** — un agente de utilidad que ayuda a desenredar conflictos de merge y a reconciliar cambios que se solapan. Es opcional: los perfiles lo incluyen solo cuando lo quieres, y nunca bloquea el pipeline si no está presente.
|
|
22
|
+
|
|
23
|
+
Los especialistas son opcionales y de adhesión voluntaria. Un proyecto recién creado funciona solo con el trío; añades especialistas (y tus propios **agentes personalizados** — consulta [Agentes personalizados y el catálogo](custom-agents-catalog)) cuando el flujo de trabajo del proyecto lo pide.
|
|
24
|
+
|
|
25
|
+
## Cómo llega cada tarea al agente adecuado
|
|
26
|
+
|
|
27
|
+
Dentro de una ejecución, el trabajo se *enruta*. Cada tarea lleva etiquetas, y las reglas de enrutado de un perfil envían las tareas etiquetadas al agente que mejor encaja con ellas — con una regla final que sirve de comodín y manda todo lo demás al developer. No tienes que pensar en esto para el uso normal; la configuración por defecto enruta todo con sentido desde el primer momento. Cuando estés listo para dirigir ciertos tipos de trabajo a ciertos agentes, consulta [Personalizar los modelos por agente](customizing-models-per-agent).
|
|
28
|
+
|
|
29
|
+
## Una idea importante, de entrada
|
|
30
|
+
|
|
31
|
+
La *definición* de cada agente — sus instrucciones, su personalidad, lo que tiene permitido hacer — es **compartida**. Vive en archivos (`.claude/agents/<id>.md`) que viajan con tu repositorio, así que todo tu equipo ejecuta el mismo architect, el mismo reviewer.
|
|
32
|
+
|
|
33
|
+
Lo que es **por proyecto** es la *configuración* que se monta encima: con qué modelo corre cada agente y qué combinación de agentes eliges para un rail concreto. Para eso están los perfiles — y de eso trata la siguiente página.
|
|
34
|
+
|
|
35
|
+
## A dónde ir después
|
|
36
|
+
|
|
37
|
+
- [Perfiles y el equilibrado por defecto](profiles-and-the-balanced-default) — cómo se empaqueta y se selecciona la configuración del equipo.
|
|
38
|
+
- [Personalizar los modelos por agente](customizing-models-per-agent) — ajusta coste y calidad.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Perfiles y el equilibrado por defecto
|
|
2
|
+
|
|
3
|
+
Un **perfil** es una receta guardada para una ejecución del pipeline. Responde a tres preguntas en un solo sitio:
|
|
4
|
+
|
|
5
|
+
1. **Qué agentes** participan (el trío base, más cualquier especialista o agente personalizado).
|
|
6
|
+
2. **Con qué modelo** corre cada agente.
|
|
7
|
+
3. **Cómo se enrutan las tareas** hacia esos agentes.
|
|
8
|
+
|
|
9
|
+
Encontrarás los perfiles en la sección **Agentes** de cualquier proyecto (barra lateral derecha → **Agentes** → la pestaña **Perfiles**).
|
|
10
|
+
|
|
11
|
+
## El equilibrado por defecto
|
|
12
|
+
|
|
13
|
+
Desde el primer momento, un proyecto resuelve hacia un perfil **default** sensato. Incluye el trío base — `sr-architect`, `sr-developer`, `sr-reviewer` — y enruta cada tarea al developer mediante una única regla comodín. Los modelos están equilibrados para el trabajo del día a día: un modelo capaz donde importa, sin tirar de la opción más cara en cada paso.
|
|
14
|
+
|
|
15
|
+
Si tu proyecto ya tenía los modelos de los agentes configurados a la antigua usanza (en el frontmatter de los archivos de agente), el botón **Migrar** los lee y construye un perfil `default` que replica el comportamiento actual exactamente — sin pérdidas, nada cambia hasta que tú decidas ajustarlo.
|
|
16
|
+
|
|
17
|
+
El titular: **no necesitas crear un perfil para usar Specrails.** El default simplemente funciona. Los perfiles son la forma de llegar más lejos.
|
|
18
|
+
|
|
19
|
+
## Cómo se elige un perfil para una ejecución
|
|
20
|
+
|
|
21
|
+
Cuando lanzas un rail, Specrails elige un perfil en este orden:
|
|
22
|
+
|
|
23
|
+
1. **Tu elección explícita** en la cabecera del rail (ver abajo).
|
|
24
|
+
2. Tu **preferencia por desarrollador** — un perfil que has marcado como tu default personal para este proyecto (es local a ti y no se commitea).
|
|
25
|
+
3. El perfil **`default`** del proyecto.
|
|
26
|
+
|
|
27
|
+
El perfil se *toma como snapshot en el lanzamiento*, así que cada rail de un lote puede correr un perfil distinto, y cambiar un perfil más tarde nunca reescribe los jobs que ya empezaron.
|
|
28
|
+
|
|
29
|
+
## Seleccionar un perfil por rail
|
|
30
|
+
|
|
31
|
+
La selección de perfil ocurre justo donde lanzas — en la **cabecera del rail**, mediante el selector de perfil.
|
|
32
|
+
|
|
33
|
+
- Elige un perfil del desplegable para usarlo en **este lanzamiento solamente**.
|
|
34
|
+
- Usa la opción de persistir para convertir un perfil en la elección permanente del rail de ahí en adelante.
|
|
35
|
+
|
|
36
|
+
Ese es todo el flujo: elige un perfil, lanza, listo. Los rails concurrentes de un mismo lote pueden llevar cada uno su propio perfil, así que un arreglo rápido y una feature pesada pueden correr en paralelo con configuraciones distintas.
|
|
37
|
+
|
|
38
|
+
## Cuando la sección Agentes está en silencio
|
|
39
|
+
|
|
40
|
+
Los perfiles son una capacidad de Claude. En un proyecto que incluye un proveedor que no es Claude (Codex o Gemini), la sección Agentes se oculta y los rails corren sin perfiles — eso es lo esperado, no un fallo. Los perfiles también requieren un `specrails-core` lo bastante reciente en el proyecto; si es más antiguo, verás un banner amarillo. Los perfiles que crees igualmente se **guardan** — simplemente no afectan al pipeline hasta que se actualice core. Actualiza con el comando que muestra el banner para desbloquearlos.
|
|
41
|
+
|
|
42
|
+
## A dónde ir después
|
|
43
|
+
|
|
44
|
+
- [Personalizar los modelos por agente](customizing-models-per-agent) — crea perfiles `fast` y `max`.
|
|
45
|
+
- [Agentes personalizados y el catálogo](custom-agents-catalog) — conoce y amplía el equipo.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Personalizar los modelos por agente
|
|
2
|
+
|
|
3
|
+
Lo más útil que te permiten hacer los perfiles es **elegir el modelo adecuado para cada paso**. Un paso de planificación quizá merezca tu modelo más potente; un paso de construcción rutinario seguramente esté la mar de contento con algo más rápido y barato. Los perfiles te dejan expresar exactamente eso.
|
|
4
|
+
|
|
5
|
+
Aquí es donde la separación entre lo compartido y lo que es por proyecto da sus frutos:
|
|
6
|
+
|
|
7
|
+
- Las *definiciones* de los agentes siguen siendo compartidas en todo tu equipo.
|
|
8
|
+
- El *modelo con el que corre cada agente* se configura **por proyecto**, dentro de un perfil, y solo afecta a tu proyecto.
|
|
9
|
+
|
|
10
|
+
Cambia un modelo y cambias el coste y el comportamiento para ese proyecto — sin tocar la configuración de nadie más ni las instrucciones subyacentes del agente.
|
|
11
|
+
|
|
12
|
+
## Cambiar qué modelo usa un agente
|
|
13
|
+
|
|
14
|
+
En **Agentes → Perfiles**, selecciona un perfil y abre su editor de cadena de agentes. Cada agente de la cadena tiene un campo de modelo. También hay un modelo **orquestador** que se encarga de la coordinación de alto nivel del pipeline.
|
|
15
|
+
|
|
16
|
+
Los valores de modelo son alias — para Claude son `opus`, `sonnet` y `haiku` (de más capaz → más rápido). Asigna el alias que quieras por agente:
|
|
17
|
+
|
|
18
|
+
- Deja el modelo de un agente **en blanco** para que recurra al default propio del archivo del agente.
|
|
19
|
+
- Asígnalo explícitamente para sobrescribirlo solo en este perfil.
|
|
20
|
+
|
|
21
|
+
Guarda, y el próximo rail lanzado con ese perfil usará los nuevos modelos. Los jobs que ya están en marcha conservan su snapshot.
|
|
22
|
+
|
|
23
|
+
## Crear perfiles como `fast` y `max`
|
|
24
|
+
|
|
25
|
+
El patrón natural es tener un par de perfiles con nombre a los que recurres según el trabajo:
|
|
26
|
+
|
|
27
|
+
**Un perfil `fast`** — para cambios pequeños y de bajo riesgo donde quieres velocidad y una factura más reducida:
|
|
28
|
+
|
|
29
|
+
- Architect: un modelo intermedio o rápido — el plan es simple.
|
|
30
|
+
- Developer: un modelo rápido — el cambio es mecánico.
|
|
31
|
+
- Reviewer: mantenlo sólido, aunque también puedes recortar aquí.
|
|
32
|
+
|
|
33
|
+
**Un perfil `max`** — para features espinosas y de mucho en juego donde quieres que cada paso sea lo más afilado posible:
|
|
34
|
+
|
|
35
|
+
- Architect, developer y reviewer: tu modelo más potente en todos los frentes.
|
|
36
|
+
|
|
37
|
+
### Dos formas de construir uno
|
|
38
|
+
|
|
39
|
+
1. **Duplicar y ajustar** *(recomendado).* Selecciona tu perfil `default`, **Duplícalo**, dale a la copia un nombre en kebab-case como `fast` o `max`, y luego ajusta el modelo de cada agente. Heredas una cadena y un enrutado que sabes que funcionan y solo cambias lo que pretendes cambiar.
|
|
40
|
+
2. **Empezar en blanco.** Crea un **Perfil en blanco** y monta la cadena tú mismo. Sigues teniendo que incluir el trío base (`sr-architect`, `sr-developer`, `sr-reviewer`) — el pipeline depende de los tres — y exactamente una regla de enrutado comodín terminal, que debe ir la última.
|
|
41
|
+
|
|
42
|
+
Los nombres de perfil van en minúsculas y kebab-case (p. ej. `fast`, `max`, `cheap-and-cheerful`).
|
|
43
|
+
|
|
44
|
+
## Enrutar tareas a agentes concretos
|
|
45
|
+
|
|
46
|
+
Las **reglas de enrutado** de un perfil deciden qué agente se encarga de una tarea etiquetada. Cada regla lista etiquetas de tarea y un agente de destino; gana la primera regla cuyas etiquetas coincidan, y una única regla `default: true` al final captura todo lo demás. Solo los agentes que están realmente en la cadena del perfil pueden ser destinos de enrutado — el editor lo obliga.
|
|
47
|
+
|
|
48
|
+
Para el uso del día a día no tocarás el enrutado: la regla comodín manda el trabajo al developer y eso es correcto. Echa mano de las reglas por etiquetas cuando quieras, por ejemplo, que el trabajo etiquetado como `migration` vaya a un especialista en lugar del developer.
|
|
49
|
+
|
|
50
|
+
## Elegir el perfil cuando lanzas
|
|
51
|
+
|
|
52
|
+
Todo esto se junta en el lanzamiento: en la cabecera del rail, elige `fast`, `max` o `default` por rail. Un lote puede mezclarlos — un arreglo diminuto en `fast`, una feature grande en `max`, ambos corriendo a la vez. Consulta [Perfiles y el equilibrado por defecto](profiles-and-the-balanced-default) para el flujo de selección.
|
|
53
|
+
|
|
54
|
+
## Una nota sobre seguridad
|
|
55
|
+
|
|
56
|
+
Eliminar un perfil es seguro para el trabajo en marcha: los jobs que ya se lanzaron con él conservan su snapshot, y los lanzamientos futuros simplemente recurren al orden de resolución. Experimenta sin miedo.
|
|
57
|
+
|
|
58
|
+
## A dónde ir después
|
|
59
|
+
|
|
60
|
+
- [Agentes personalizados y el catálogo](custom-agents-catalog) — añade agentes para meter en tus cadenas.
|