setup-defaults.ts
1 /** 2 * Shared setup defaults used by both the web wizard and CLI. 3 * Isomorphic — no 'use client', no server imports. 4 */ 5 6 export type SetupProvider = 7 | 'claude-cli' 8 | 'codex-cli' 9 | 'opencode-cli' 10 | 'opencode-web' 11 | 'gemini-cli' 12 | 'copilot-cli' 13 | 'droid-cli' 14 | 'cursor-cli' 15 | 'qwen-code-cli' 16 | 'goose' 17 | 'anthropic' 18 | 'openai' 19 | 'openrouter' 20 | 'google' 21 | 'deepseek' 22 | 'groq' 23 | 'together' 24 | 'mistral' 25 | 'xai' 26 | 'fireworks' 27 | 'nebius' 28 | 'deepinfra' 29 | 'ollama' 30 | 'openclaw' 31 | 'hermes' 32 | 'custom' 33 34 export interface SetupProviderOption { 35 id: SetupProvider 36 name: string 37 description: string 38 requiresKey: boolean 39 supportsEndpoint: boolean 40 /** @deprecated No longer used — each provider type can only be configured once */ 41 allowMultiple?: boolean 42 defaultEndpoint?: string 43 keyUrl?: string 44 keyLabel?: string 45 keyPlaceholder?: string 46 optionalKey?: boolean 47 badge?: string 48 icon: string 49 modelLibraryUrl?: string 50 cloudEndpoint?: string 51 } 52 53 export const SETUP_PROVIDERS: SetupProviderOption[] = [ 54 { 55 id: 'claude-cli', 56 name: 'Claude Code CLI', 57 description: 'Anthropic’s coding agent with native tools, strong edits, and first-class CLI workflows.', 58 requiresKey: false, 59 supportsEndpoint: false, 60 badge: 'CLI', 61 icon: 'C', 62 modelLibraryUrl: 'https://docs.anthropic.com/en/docs/about-claude/models', 63 }, 64 { 65 id: 'codex-cli', 66 name: 'OpenAI Codex CLI', 67 description: 'OpenAI’s terminal coding agent with resume support and structured headless output.', 68 requiresKey: false, 69 supportsEndpoint: false, 70 badge: 'CLI', 71 icon: 'O', 72 modelLibraryUrl: 'https://platform.openai.com/docs/models', 73 }, 74 { 75 id: 'opencode-cli', 76 name: 'OpenCode CLI', 77 description: 'A flexible coding CLI that can route across multiple model backends.', 78 requiresKey: false, 79 supportsEndpoint: false, 80 badge: 'CLI', 81 icon: 'O', 82 }, 83 { 84 id: 'opencode-web', 85 name: 'OpenCode Web', 86 description: 'Connect to a remote OpenCode HTTP server (`opencode serve` or `opencode web`). Supports HTTPS and HTTP Basic Auth.', 87 requiresKey: false, 88 optionalKey: true, 89 supportsEndpoint: true, 90 defaultEndpoint: 'http://localhost:4096', 91 keyLabel: 'username:password (Basic Auth)', 92 keyPlaceholder: 'opencode:••••••• (or just the password)', 93 badge: 'HTTP', 94 icon: 'O', 95 }, 96 { 97 id: 'gemini-cli', 98 name: 'Gemini CLI', 99 description: 'Google’s terminal coding agent with project-aware headless mode and resume support.', 100 requiresKey: false, 101 supportsEndpoint: false, 102 badge: 'CLI', 103 icon: 'G', 104 modelLibraryUrl: 'https://ai.google.dev/gemini-api/docs/models', 105 }, 106 { 107 id: 'copilot-cli', 108 name: 'GitHub Copilot CLI', 109 description: 'GitHub’s multi-model terminal agent for coding and automation.', 110 requiresKey: false, 111 supportsEndpoint: false, 112 badge: 'CLI', 113 icon: 'P', 114 }, 115 { 116 id: 'droid-cli', 117 name: 'Factory Droid CLI', 118 description: 'Factory.ai’s terminal coding agent with headless exec mode, session resume, and autonomy controls.', 119 requiresKey: false, 120 supportsEndpoint: false, 121 optionalKey: true, 122 keyUrl: 'https://app.factory.ai/settings/api-keys', 123 keyLabel: 'app.factory.ai', 124 keyPlaceholder: 'FACTORY_API_KEY (optional if signed in via `droid`)', 125 badge: 'CLI', 126 icon: 'F', 127 }, 128 { 129 id: 'cursor-cli', 130 name: 'Cursor Agent CLI', 131 description: 'Cursor’s terminal agent with resume support, JSON output, and Cursor-native coding workflows.', 132 requiresKey: false, 133 supportsEndpoint: false, 134 badge: 'CLI', 135 icon: 'U', 136 }, 137 { 138 id: 'qwen-code-cli', 139 name: 'Qwen Code CLI', 140 description: 'Qwen’s terminal coding agent with structured headless mode and multi-provider model config.', 141 requiresKey: false, 142 supportsEndpoint: false, 143 badge: 'CLI', 144 icon: 'Q', 145 }, 146 { 147 id: 'goose', 148 name: 'Goose', 149 description: 'A runtime-managed terminal agent with extensions, session history, and ACP support.', 150 requiresKey: false, 151 supportsEndpoint: false, 152 optionalKey: true, 153 badge: 'Runtime', 154 icon: 'G', 155 }, 156 { 157 id: 'openai', 158 name: 'OpenAI', 159 description: 'Great default for most users. Fast, reliable GPT models.', 160 requiresKey: true, 161 supportsEndpoint: true, 162 defaultEndpoint: 'https://api.openai.com/v1', 163 keyUrl: 'https://platform.openai.com/api-keys', 164 keyLabel: 'platform.openai.com', 165 badge: 'Recommended', 166 icon: 'O', 167 modelLibraryUrl: 'https://platform.openai.com/docs/models', 168 }, 169 { 170 id: 'openrouter', 171 name: 'OpenRouter', 172 description: 'One API key for a broad multi-provider model catalog through an OpenAI-compatible API.', 173 requiresKey: true, 174 supportsEndpoint: false, 175 defaultEndpoint: 'https://openrouter.ai/api/v1', 176 keyUrl: 'https://openrouter.ai/keys', 177 keyLabel: 'openrouter.ai', 178 badge: 'Catalog', 179 icon: 'R', 180 modelLibraryUrl: 'https://openrouter.ai/models', 181 }, 182 { 183 id: 'openclaw', 184 name: 'OpenClaw', 185 description: 'Deploy or connect official-only local and remote OpenClaw gateways, then map starter agents across your swarm by role, tag, or use case.', 186 requiresKey: false, 187 supportsEndpoint: true, 188 allowMultiple: true, 189 defaultEndpoint: 'http://localhost:18789/v1', 190 optionalKey: true, 191 badge: 'First-Tier', 192 icon: 'C', 193 }, 194 { 195 id: 'hermes', 196 name: 'Hermes Agent', 197 description: 'Connect Hermes Agent through its local or remote OpenAI-compatible API server runtime.', 198 requiresKey: false, 199 supportsEndpoint: true, 200 allowMultiple: true, 201 defaultEndpoint: 'http://127.0.0.1:8642/v1', 202 optionalKey: true, 203 badge: 'API Server', 204 icon: 'H', 205 }, 206 { 207 id: 'anthropic', 208 name: 'Anthropic', 209 description: 'Claude models — strong for coding, analysis, and long-form reasoning.', 210 requiresKey: true, 211 supportsEndpoint: false, 212 keyUrl: 'https://console.anthropic.com/settings/keys', 213 keyLabel: 'console.anthropic.com', 214 icon: 'A', 215 modelLibraryUrl: 'https://docs.anthropic.com/en/docs/about-claude/models', 216 }, 217 { 218 id: 'google', 219 name: 'Google Gemini', 220 description: 'Gemini models with strong multimodal and coding support.', 221 requiresKey: true, 222 supportsEndpoint: false, 223 keyUrl: 'https://aistudio.google.com/app/apikey', 224 keyLabel: 'aistudio.google.com', 225 keyPlaceholder: 'AIza...', 226 icon: 'G', 227 modelLibraryUrl: 'https://ai.google.dev/gemini-api/docs/models', 228 }, 229 { 230 id: 'deepseek', 231 name: 'DeepSeek', 232 description: 'High-value reasoning and coding models from DeepSeek.', 233 requiresKey: true, 234 supportsEndpoint: false, 235 keyUrl: 'https://platform.deepseek.com/api_keys', 236 keyLabel: 'platform.deepseek.com', 237 icon: 'D', 238 modelLibraryUrl: 'https://api-docs.deepseek.com/quick_start/pricing', 239 }, 240 { 241 id: 'groq', 242 name: 'Groq', 243 description: 'Very fast inference with open and reasoning model options.', 244 requiresKey: true, 245 supportsEndpoint: false, 246 keyUrl: 'https://console.groq.com/keys', 247 keyLabel: 'console.groq.com', 248 icon: 'G', 249 modelLibraryUrl: 'https://console.groq.com/docs/models', 250 }, 251 { 252 id: 'together', 253 name: 'Together AI', 254 description: 'Broad catalog of open models with OpenAI-compatible APIs.', 255 requiresKey: true, 256 supportsEndpoint: false, 257 keyUrl: 'https://api.together.xyz/settings/api-keys', 258 keyLabel: 'api.together.xyz', 259 icon: 'T', 260 modelLibraryUrl: 'https://docs.together.ai/docs/chat-models', 261 }, 262 { 263 id: 'mistral', 264 name: 'Mistral AI', 265 description: 'Efficient frontier models with strong latency and quality.', 266 requiresKey: true, 267 supportsEndpoint: false, 268 keyUrl: 'https://console.mistral.ai/api-keys/', 269 keyLabel: 'console.mistral.ai', 270 icon: 'M', 271 modelLibraryUrl: 'https://docs.mistral.ai/getting-started/models/models_overview/', 272 }, 273 { 274 id: 'xai', 275 name: 'xAI (Grok)', 276 description: 'Grok models for fast answers, coding, and analysis.', 277 requiresKey: true, 278 supportsEndpoint: false, 279 keyUrl: 'https://console.x.ai', 280 keyLabel: 'console.x.ai', 281 icon: 'X', 282 modelLibraryUrl: 'https://docs.x.ai/docs/models', 283 }, 284 { 285 id: 'fireworks', 286 name: 'Fireworks AI', 287 description: 'Serverless and optimized open-model inference endpoints.', 288 requiresKey: true, 289 supportsEndpoint: false, 290 keyUrl: 'https://fireworks.ai/account/api-keys', 291 keyLabel: 'fireworks.ai', 292 icon: 'F', 293 modelLibraryUrl: 'https://fireworks.ai/models', 294 }, 295 { 296 id: 'nebius', 297 name: 'Nebius', 298 description: 'Wide catalog of 60+ open-source models via Nebius Token Factory.', 299 requiresKey: true, 300 supportsEndpoint: false, 301 keyUrl: 'https://studio.nebius.com/settings/api-keys', 302 keyLabel: 'studio.nebius.com', 303 icon: 'N', 304 modelLibraryUrl: 'https://nebius.com/services/token-factory', 305 }, 306 { 307 id: 'deepinfra', 308 name: 'DeepInfra', 309 description: 'Fast serverless inference for popular open-source models.', 310 requiresKey: true, 311 supportsEndpoint: false, 312 keyUrl: 'https://deepinfra.com/dash/api_keys', 313 keyLabel: 'deepinfra.com', 314 icon: 'D', 315 modelLibraryUrl: 'https://deepinfra.com/models', 316 }, 317 { 318 id: 'ollama', 319 name: 'Ollama', 320 description: 'Run local open-source models or connect to Ollama Cloud.', 321 requiresKey: false, 322 supportsEndpoint: true, 323 allowMultiple: true, 324 defaultEndpoint: 'http://localhost:11434', 325 optionalKey: true, 326 badge: 'Local + Cloud', 327 icon: 'L', 328 modelLibraryUrl: 'https://ollama.com/library', 329 cloudEndpoint: 'https://api.ollama.com', 330 }, 331 { 332 id: 'custom', 333 name: 'Custom Provider', 334 description: 'Any OpenAI-compatible API endpoint (LM Studio, vLLM, local gateways, etc.).', 335 requiresKey: false, 336 supportsEndpoint: true, 337 allowMultiple: true, 338 optionalKey: true, 339 icon: '+', 340 }, 341 ] 342 343 export const STARTER_AGENT_TOOLS = [ 344 'memory', 345 'files', 346 'execute', 347 'web_search', 348 'web_fetch', 349 'browser', 350 'manage_agents', 351 'manage_tasks', 352 'manage_schedules', 353 'schedule_wake', 354 'manage_skills', 355 'manage_connectors', 356 'manage_sessions', 357 'manage_secrets', 358 'manage_documents', 359 'manage_webhooks', 360 'claude_code', 361 'codex_cli', 362 'opencode_cli', 363 'gemini_cli', 364 'copilot_cli', 365 'droid_cli', 366 'cursor_cli', 367 'qwen_code_cli', 368 'openclaw_workspace', 369 ] 370 371 export const SWARMCLAW_ASSISTANT_PROMPT = `You are the default SwarmClaw assistant inside the SwarmClaw dashboard. 372 373 Primary objective: 374 - Help the user operate SwarmClaw itself before anything else. 375 376 When the user asks about SwarmClaw, prioritize concrete guidance with exact UI paths and commands: 377 - Sessions: create, configure provider/model, and run chats. 378 - Agents: create specialist agents, set provider/model, tools, prompts, and delegation. 379 - Providers: connect API keys/endpoints, troubleshoot auth/model issues. 380 - Tasks + Schedules: queue work and automate recurring runs. 381 - Skills + Connectors + Webhooks + Secrets + Memory: explain when to use each and how to configure safely. 382 383 Behavior: 384 - Be concise, direct, and action-oriented. 385 - If the request is ambiguous, ask one focused clarifying question. 386 - Prefer step-by-step instructions that can be executed immediately. 387 - When the user asks for direct execution (for example browsing, screenshots, research, or file edits), use available tools and return real results instead of only describing what to do. 388 - If a capability depends on provider/tool configuration, call that out explicitly.` 389 390 const PERSONAL_ASSISTANT_PROMPT = `You are a personal AI copilot inside SwarmClaw. 391 392 Primary objective: 393 - Help the user make progress on whatever matters to them, whether that is research, planning, writing, building, organizing life admin, or running a business. 394 395 Behavior: 396 - Start from the user's intent, not from the tooling. 397 - Turn vague goals into concrete next steps. 398 - When useful, suggest tasks, schedules, or specialist agents, but do not force control-plane workflow on the user. 399 - Stay concise, practical, and execution-oriented.` 400 401 const RESEARCH_PROMPT = `You are a research copilot inside SwarmClaw. 402 403 Primary objective: 404 - Gather facts, compare options, summarize findings, and keep the user's work organized. 405 406 Behavior: 407 - Clarify the research question when needed. 408 - Prefer structured findings, tradeoffs, and source-backed summaries. 409 - Capture useful outputs in files or tasks when that helps the user continue.` 410 411 const BUILDER_PROMPT = `You are a builder agent inside SwarmClaw. 412 413 Primary objective: 414 - Help the user design, implement, debug, and ship software or technical projects. 415 416 Behavior: 417 - Move from goal to concrete implementation steps quickly. 418 - Use code, files, browser, and task tooling when helpful. 419 - Surface blockers, assumptions, and verification clearly.` 420 421 const REVIEWER_PROMPT = `You are a reviewer agent inside SwarmClaw. 422 423 Primary objective: 424 - Review plans, code, documents, and outputs for quality, correctness, and risk. 425 426 Behavior: 427 - Focus first on bugs, regressions, gaps, and unclear assumptions. 428 - Be direct and specific. 429 - Offer concrete follow-up actions when you find issues.` 430 431 const WRITER_PROMPT = `You are a writing copilot inside SwarmClaw. 432 433 Primary objective: 434 - Help the user draft, refine, and structure written work for clarity and impact. 435 436 Behavior: 437 - Adapt tone, format, and level of detail to the user's context. 438 - Suggest outlines, drafts, revisions, and packaging for different channels. 439 - Keep momentum high and avoid generic filler.` 440 441 const EDITOR_PROMPT = `You are an editor inside SwarmClaw. 442 443 Primary objective: 444 - Improve drafts for clarity, structure, tone, and quality. 445 446 Behavior: 447 - Tighten weak writing, call out inconsistencies, and preserve the intended voice. 448 - Give concise, high-signal edits and rationale. 449 - Flag missing evidence or unclear claims when relevant.` 450 451 const OPERATOR_PROMPT = `You are an operations-focused SwarmClaw operator. 452 453 Primary objective: 454 - Keep work moving across agents, tasks, schedules, and approvals without losing sight of the user's real goals. 455 456 Behavior: 457 - Monitor progress, surface bottlenecks, and delegate when appropriate. 458 - Be explicit about what is blocked, what is running, and what should happen next. 459 - Treat the control plane as a means to an end, not the end itself.` 460 461 export type OnboardingPath = 'quick' | 'intent' | 'manual' 462 463 export interface OnboardingPathOption { 464 id: OnboardingPath 465 title: string 466 description: string 467 detail: string 468 badge?: string 469 } 470 471 export const ONBOARDING_PATHS: OnboardingPathOption[] = [ 472 { 473 id: 'quick', 474 title: 'Quick Start', 475 description: 'Provider first, one starter kit, fastest path into chat.', 476 detail: 'Best when you already know which provider you want and want to get moving quickly.', 477 badge: 'Fastest', 478 }, 479 { 480 id: 'intent', 481 title: 'Goal-Driven Setup', 482 description: 'Choose a starter team around what you want to accomplish.', 483 detail: 'Best when you know the outcome you want but want SwarmClaw to start from a stronger template.', 484 badge: 'Guided', 485 }, 486 { 487 id: 'manual', 488 title: 'Custom Setup', 489 description: 'Configure providers first and choose whether to start blank or from a template.', 490 detail: 'Best for advanced users who want control over the initial setup and agent mix.', 491 }, 492 ] 493 494 export interface StarterKitAgentTemplate { 495 id: string 496 name: string 497 description: string 498 systemPrompt: string 499 tools: string[] 500 capabilities?: string[] 501 recommendedProviders?: SetupProvider[] 502 delegationEnabled?: boolean 503 } 504 505 export interface StarterKit { 506 id: string 507 name: string 508 description: string 509 detail: string 510 badge?: string 511 recommendedFor?: OnboardingPath[] 512 agents: StarterKitAgentTemplate[] 513 } 514 515 const PERSONAL_AGENT_TOOLS = [ 516 'memory', 517 'files', 518 'execute', 519 'web_search', 520 'web_fetch', 521 'browser', 522 'manage_tasks', 523 'manage_schedules', 524 'manage_documents', 525 ] 526 527 const RESEARCH_AGENT_TOOLS = [ 528 'memory', 529 'files', 530 'execute', 531 'web_search', 532 'web_fetch', 533 'browser', 534 'manage_tasks', 535 'manage_documents', 536 ] 537 538 const BUILDER_AGENT_TOOLS = [ 539 'memory', 540 'files', 541 'execute', 542 'web_search', 543 'web_fetch', 544 'browser', 545 'manage_tasks', 546 'claude_code', 547 'codex_cli', 548 'opencode_cli', 549 'gemini_cli', 550 'copilot_cli', 551 'droid_cli', 552 'cursor_cli', 553 'qwen_code_cli', 554 ] 555 556 const INBOX_TRIAGE_PROMPT = `You are an inbox triage copilot inside SwarmClaw. 557 558 Primary objective: 559 - Sort incoming email, messages, and notifications so the user only sees what needs their attention. 560 561 Behavior: 562 - Classify items by urgency, topic, and whether they need a reply. 563 - Draft short reply candidates for the user to approve when appropriate. 564 - Surface clear summaries and action lists instead of raw firehose. 565 - Stop and ask the user before sending on their behalf.` 566 567 const DATA_ANALYST_PROMPT = `You are a data analyst inside SwarmClaw. 568 569 Primary objective: 570 - Help the user explore, clean, and summarize data, producing concise findings and charts when useful. 571 572 Behavior: 573 - Prefer working in a shell (python/pandas) or via files, showing intermediate results. 574 - State the question before computing, and flag limitations or assumptions. 575 - Summarize insights with simple prose plus key numbers. 576 - When useful, save artifacts (CSV, markdown, PNG) to the working directory.` 577 578 const INBOX_AGENT_TOOLS = [ 579 'memory', 580 'files', 581 'web_search', 582 'web_fetch', 583 'email', 584 'manage_tasks', 585 'manage_documents', 586 ] 587 588 const DATA_ANALYST_TOOLS = [ 589 'memory', 590 'files', 591 'execute', 592 'web_search', 593 'web_fetch', 594 'manage_tasks', 595 'manage_documents', 596 ] 597 598 const OPERATOR_AGENT_TOOLS = STARTER_AGENT_TOOLS 599 const OPENCLAW_AGENT_TOOLS = [ 600 'memory', 601 'files', 602 'execute', 603 'web_search', 604 'web_fetch', 605 'browser', 606 'manage_tasks', 607 'manage_schedules', 608 'manage_sessions', 609 'openclaw_workspace', 610 ] 611 612 export const STARTER_KITS: StarterKit[] = [ 613 { 614 id: 'personal_assistant', 615 name: 'Personal Assistant', 616 description: 'One flexible agent for open-ended work.', 617 detail: 'A strong default for general planning, research, writing, and day-to-day execution.', 618 badge: 'Recommended', 619 recommendedFor: ['quick', 'intent'], 620 agents: [ 621 { 622 id: 'sidekick', 623 name: 'Sidekick', 624 description: 'A versatile assistant for everyday work, planning, and follow-through.', 625 systemPrompt: PERSONAL_ASSISTANT_PROMPT, 626 tools: PERSONAL_AGENT_TOOLS, 627 capabilities: ['planning', 'research', 'writing', 'coordination'], 628 }, 629 ], 630 }, 631 { 632 id: 'research_copilot', 633 name: 'Research Copilot', 634 description: 'A focused setup for investigation and synthesis.', 635 detail: 'Useful for market scans, comparisons, technical investigation, and source-backed summaries.', 636 recommendedFor: ['quick', 'intent', 'manual'], 637 agents: [ 638 { 639 id: 'researcher', 640 name: 'Researcher', 641 description: 'Collects facts, compares options, and produces structured findings.', 642 systemPrompt: RESEARCH_PROMPT, 643 tools: RESEARCH_AGENT_TOOLS, 644 capabilities: ['research', 'analysis', 'summarization'], 645 }, 646 ], 647 }, 648 { 649 id: 'builder_studio', 650 name: 'Builder Studio', 651 description: 'Start with a builder and a reviewer.', 652 detail: 'Good for coding, prototyping, product work, and technical iteration.', 653 recommendedFor: ['quick', 'intent', 'manual'], 654 agents: [ 655 { 656 id: 'builder', 657 name: 'Builder', 658 description: 'Implements ideas, ships changes, and drives technical execution.', 659 systemPrompt: BUILDER_PROMPT, 660 tools: BUILDER_AGENT_TOOLS, 661 capabilities: ['coding', 'debugging', 'implementation'], 662 recommendedProviders: ['anthropic', 'openai', 'google', 'openclaw', 'ollama'], 663 }, 664 { 665 id: 'reviewer', 666 name: 'Reviewer', 667 description: 'Reviews plans and outputs for bugs, regressions, and quality gaps.', 668 systemPrompt: REVIEWER_PROMPT, 669 tools: RESEARCH_AGENT_TOOLS, 670 capabilities: ['review', 'testing', 'risk assessment'], 671 recommendedProviders: ['anthropic', 'openai', 'google', 'openclaw'], 672 }, 673 ], 674 }, 675 { 676 id: 'content_studio', 677 name: 'Content Studio', 678 description: 'A writer and editor working together.', 679 detail: 'Useful for blogs, marketing copy, docs, newsletters, and publishing workflows.', 680 recommendedFor: ['intent', 'manual'], 681 agents: [ 682 { 683 id: 'writer', 684 name: 'Writer', 685 description: 'Drafts content, outlines, and messaging in the user’s preferred style.', 686 systemPrompt: WRITER_PROMPT, 687 tools: PERSONAL_AGENT_TOOLS, 688 capabilities: ['writing', 'messaging', 'structuring'], 689 }, 690 { 691 id: 'editor', 692 name: 'Editor', 693 description: 'Improves structure, tone, and quality before publishing.', 694 systemPrompt: EDITOR_PROMPT, 695 tools: RESEARCH_AGENT_TOOLS, 696 capabilities: ['editing', 'quality control', 'review'], 697 }, 698 ], 699 }, 700 { 701 id: 'operator_swarm', 702 name: 'Delegate Team', 703 description: 'A coordinator plus an execution agent for multi-agent work.', 704 detail: 'Use this when you want one agent to plan and delegate while another handles focused execution.', 705 recommendedFor: ['intent', 'manual'], 706 agents: [ 707 { 708 id: 'operator', 709 name: 'Operator', 710 description: 'Coordinates tasks, delegates work, and keeps the workspace moving.', 711 systemPrompt: OPERATOR_PROMPT, 712 tools: OPERATOR_AGENT_TOOLS, 713 capabilities: ['coordination', 'delegation', 'operations'], 714 delegationEnabled: true, 715 recommendedProviders: ['openclaw', 'anthropic', 'openai'], 716 }, 717 { 718 id: 'maker', 719 name: 'Maker', 720 description: 'Executes focused work items assigned by the user or other agents.', 721 systemPrompt: BUILDER_PROMPT, 722 tools: BUILDER_AGENT_TOOLS, 723 capabilities: ['execution', 'implementation', 'research'], 724 }, 725 ], 726 }, 727 { 728 id: 'openclaw_fleet', 729 name: 'OpenClaw Fleet', 730 description: 'An OpenClaw-first starter setup for local or remote gateways.', 731 detail: 'Designed for users who want multiple OpenClaw-backed agents right away, with official-only local deploy, single-VPS, and private-tailnet defaults built into setup.', 732 recommendedFor: ['manual'], 733 badge: 'OpenClaw', 734 agents: [ 735 { 736 id: 'openclaw_operator', 737 name: 'OpenClaw Operator', 738 description: 'Coordinates OpenClaw-backed execution and keeps distributed agents aligned.', 739 systemPrompt: OPERATOR_PROMPT, 740 tools: OPERATOR_AGENT_TOOLS, 741 capabilities: ['coordination', 'delegation', 'openclaw'], 742 delegationEnabled: true, 743 recommendedProviders: ['openclaw'], 744 }, 745 { 746 id: 'openclaw_builder', 747 name: 'Remote Builder', 748 description: 'A build-focused OpenClaw agent for implementation work on a chosen gateway.', 749 systemPrompt: BUILDER_PROMPT, 750 tools: OPENCLAW_AGENT_TOOLS, 751 capabilities: ['coding', 'implementation', 'openclaw'], 752 recommendedProviders: ['openclaw'], 753 }, 754 { 755 id: 'openclaw_researcher', 756 name: 'Remote Researcher', 757 description: 'A research-focused OpenClaw agent for browser and knowledge work on a chosen gateway.', 758 systemPrompt: RESEARCH_PROMPT, 759 tools: OPENCLAW_AGENT_TOOLS, 760 capabilities: ['research', 'analysis', 'openclaw'], 761 recommendedProviders: ['openclaw'], 762 }, 763 ], 764 }, 765 { 766 id: 'inbox_triage', 767 name: 'Inbox Triager', 768 description: 'A single agent that sorts and summarizes your inbox.', 769 detail: 'Good when messages pile up faster than you can read them. Pairs well with the email connector.', 770 recommendedFor: ['intent', 'manual'], 771 agents: [ 772 { 773 id: 'triager', 774 name: 'Triager', 775 description: 'Triages inbound messages into urgent, reply-needed, and informational buckets.', 776 systemPrompt: INBOX_TRIAGE_PROMPT, 777 tools: INBOX_AGENT_TOOLS, 778 capabilities: ['triage', 'summarization', 'drafting'], 779 }, 780 ], 781 }, 782 { 783 id: 'data_analyst', 784 name: 'Data Analyst', 785 description: 'A single agent focused on exploring and summarizing data.', 786 detail: 'Useful for ad-hoc analysis, CSV crunching, and producing concise findings with charts.', 787 recommendedFor: ['intent', 'manual'], 788 agents: [ 789 { 790 id: 'analyst', 791 name: 'Analyst', 792 description: 'Runs exploratory analyses, cleans datasets, and writes short summaries with key numbers.', 793 systemPrompt: DATA_ANALYST_PROMPT, 794 tools: DATA_ANALYST_TOOLS, 795 capabilities: ['analysis', 'summarization', 'visualization'], 796 }, 797 ], 798 }, 799 { 800 id: 'blank_workspace', 801 name: 'Blank Workspace', 802 description: 'Finish setup without starter agents.', 803 detail: 'Use this if you want to land in the app first and create providers, agents, and workflows yourself.', 804 recommendedFor: ['manual'], 805 badge: 'Blank', 806 agents: [], 807 }, 808 ] 809 810 export interface DefaultAgentConfig { 811 name: string 812 description: string 813 systemPrompt: string 814 model: string 815 tools: string[] 816 } 817 818 export const DEFAULT_AGENTS: Record<SetupProvider, DefaultAgentConfig> = { 819 'claude-cli': { 820 name: 'Claude CLI', 821 description: 'A helpful assistant powered by Claude Code CLI.', 822 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 823 model: 'claude-sonnet-4-6', 824 tools: STARTER_AGENT_TOOLS, 825 }, 826 'codex-cli': { 827 name: 'Codex CLI', 828 description: 'A helpful assistant powered by OpenAI Codex CLI.', 829 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 830 model: 'gpt-5.3-codex', 831 tools: STARTER_AGENT_TOOLS, 832 }, 833 'opencode-cli': { 834 name: 'OpenCode', 835 description: 'A helpful assistant powered by OpenCode CLI.', 836 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 837 model: 'claude-sonnet-4-6', 838 tools: STARTER_AGENT_TOOLS, 839 }, 840 'opencode-web': { 841 name: 'OpenCode Web', 842 description: 'A helpful assistant powered by a remote OpenCode HTTP server.', 843 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 844 model: 'anthropic/claude-sonnet-4-6', 845 tools: STARTER_AGENT_TOOLS, 846 }, 847 'gemini-cli': { 848 name: 'Gemini CLI', 849 description: 'A helpful assistant powered by Gemini CLI.', 850 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 851 model: 'gemini-3.1-pro', 852 tools: STARTER_AGENT_TOOLS, 853 }, 854 'copilot-cli': { 855 name: 'Copilot CLI', 856 description: 'A helpful assistant powered by GitHub Copilot CLI.', 857 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 858 model: 'claude-sonnet-4-6', 859 tools: STARTER_AGENT_TOOLS, 860 }, 861 'droid-cli': { 862 name: 'Factory Droid', 863 description: 'A helpful assistant powered by Factory Droid CLI.', 864 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 865 model: 'default', 866 tools: STARTER_AGENT_TOOLS, 867 }, 868 'cursor-cli': { 869 name: 'Cursor CLI', 870 description: 'A helpful assistant powered by Cursor Agent CLI.', 871 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 872 model: 'auto', 873 tools: STARTER_AGENT_TOOLS, 874 }, 875 'qwen-code-cli': { 876 name: 'Qwen Code', 877 description: 'A helpful assistant powered by Qwen Code CLI.', 878 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 879 model: 'default', 880 tools: STARTER_AGENT_TOOLS, 881 }, 882 goose: { 883 name: 'Goose', 884 description: 'A helpful assistant powered by Goose.', 885 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 886 model: 'default', 887 tools: STARTER_AGENT_TOOLS, 888 }, 889 anthropic: { 890 name: 'Claude', 891 description: 'A helpful Claude-powered assistant.', 892 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 893 model: 'claude-sonnet-4-6', 894 tools: STARTER_AGENT_TOOLS, 895 }, 896 openai: { 897 name: 'Atlas', 898 description: 'A helpful GPT-powered assistant.', 899 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 900 model: 'gpt-5.4', 901 tools: STARTER_AGENT_TOOLS, 902 }, 903 openrouter: { 904 name: 'Router', 905 description: 'A helpful assistant powered through OpenRouter.', 906 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 907 model: 'anthropic/claude-sonnet-4.6', 908 tools: STARTER_AGENT_TOOLS, 909 }, 910 google: { 911 name: 'Gemini', 912 description: 'A helpful Gemini-powered assistant.', 913 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 914 model: 'gemini-3.1-pro', 915 tools: STARTER_AGENT_TOOLS, 916 }, 917 deepseek: { 918 name: 'DeepSeek', 919 description: 'A helpful DeepSeek-powered assistant.', 920 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 921 model: 'deepseek-chat', 922 tools: STARTER_AGENT_TOOLS, 923 }, 924 groq: { 925 name: 'Bolt', 926 description: 'A low-latency assistant powered by Groq.', 927 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 928 model: 'meta-llama/llama-4-maverick-17b-128e-instruct', 929 tools: STARTER_AGENT_TOOLS, 930 }, 931 together: { 932 name: 'Mosaic', 933 description: 'A helpful assistant powered by Together AI.', 934 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 935 model: 'meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8', 936 tools: STARTER_AGENT_TOOLS, 937 }, 938 mistral: { 939 name: 'Mistral', 940 description: 'A helpful assistant powered by Mistral.', 941 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 942 model: 'mistral-large-latest', 943 tools: STARTER_AGENT_TOOLS, 944 }, 945 xai: { 946 name: 'Grok', 947 description: 'A helpful assistant powered by xAI Grok.', 948 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 949 model: 'grok-4', 950 tools: STARTER_AGENT_TOOLS, 951 }, 952 fireworks: { 953 name: 'Spark', 954 description: 'A helpful assistant powered by Fireworks AI.', 955 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 956 model: 'accounts/fireworks/models/deepseek-v3p2', 957 tools: STARTER_AGENT_TOOLS, 958 }, 959 nebius: { 960 name: 'Nebius Agent', 961 description: 'A helpful assistant powered by Nebius.', 962 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 963 model: 'deepseek-ai/DeepSeek-V3.2', 964 tools: STARTER_AGENT_TOOLS, 965 }, 966 deepinfra: { 967 name: 'DeepInfra Agent', 968 description: 'A helpful assistant powered by DeepInfra.', 969 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 970 model: 'deepseek-ai/DeepSeek-V3.2', 971 tools: STARTER_AGENT_TOOLS, 972 }, 973 ollama: { 974 name: 'Local', 975 description: 'A local assistant running through Ollama.', 976 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 977 model: 'llama3', 978 tools: STARTER_AGENT_TOOLS, 979 }, 980 openclaw: { 981 name: 'OpenClaw Operator', 982 description: 'A manager agent for talking to and coordinating OpenClaw instances.', 983 systemPrompt: 'You are an operator focused on reliable execution, clear status updates, and task completion.', 984 model: '', 985 tools: STARTER_AGENT_TOOLS, 986 }, 987 hermes: { 988 name: 'Hermes', 989 description: 'A runtime-backed assistant powered by Hermes Agent.', 990 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 991 model: 'hermes-agent', 992 tools: STARTER_AGENT_TOOLS, 993 }, 994 custom: { 995 name: 'Custom Agent', 996 description: 'An assistant powered by a custom OpenAI-compatible provider.', 997 systemPrompt: SWARMCLAW_ASSISTANT_PROMPT, 998 model: '', 999 tools: STARTER_AGENT_TOOLS, 1000 }, 1001 } 1002 1003 export function getDefaultModelForProvider(provider: SetupProvider): string { 1004 return DEFAULT_AGENTS[provider].model 1005 }