$npx -y skills add parallel-web/parallel-agent-skills --skill migrate-to-parallelMigrate Exa, Tavily, Perplexity, or Firecrawl web-data integrations completely to the appropriate Parallel products while preserving application behavior. Use when replacing these providers' SDKs or REST calls, dependencies, environment variables, request parameters, response par
| 1 | # Migrate to Parallel |
| 2 | |
| 3 | Replace the provider boundary end to end. Treat a successful HTTP response as the midpoint, not completion: migrate request construction, response consumers, dependencies, configuration, tests, and operational behavior. |
| 4 | |
| 5 | Resolve `<skill-root>` to the directory containing this `SKILL.md`. Resolve every bundled reference and script from that directory, regardless of the current working directory. The scanner uses only the Python standard library. If Python 3.9 or newer is unavailable, perform equivalent repository searches with the harness's file-search tools and state that the bundled scan was not run. |
| 6 | |
| 7 | ## Load the right references |
| 8 | |
| 9 | 1. Read [references/exa.md](references/exa.md) when the repository contains Exa. |
| 10 | 2. Read [references/tavily.md](references/tavily.md) when the repository contains Tavily. |
| 11 | 3. Read [references/perplexity.md](references/perplexity.md) when the repository contains Perplexity Search, Sonar, Agent API web tools, or a Perplexity search wrapper. |
| 12 | 4. Read [references/firecrawl.md](references/firecrawl.md) when the repository contains Firecrawl Search, Scrape, Batch Scrape, Extract, Agent, Research Index, Crawl, Map, Parse, Browser, Interact, Monitor, or MCP usage. |
| 13 | 5. Read [references/parallel-search.md](references/parallel-search.md) when any call may route to Search or needs query, filter, freshness, mode, or result-list migration. |
| 14 | 6. Read [references/parallel-products.md](references/parallel-products.md) when any call may route to Extract, Chat, Task, or entity discovery, or needs streaming, structured output, or citations. |
| 15 | 7. Read [references/integration-patterns.md](references/integration-patterns.md) when queries are generated dynamically, the provider is exposed as a model tool, provider response types escape into multiple modules, or the application needs full content or synthesized answers. |
| 16 | 8. Open current official documentation for any detected SDK, wrapper, parameter, or response field not covered by those references. Do not guess at provider behavior. |
| 17 | |
| 18 | ## Preserve these invariants |
| 19 | |
| 20 | - Preserve caller-visible behavior unless the user explicitly authorizes a change. |
| 21 | - Never silently drop a filter, content field, synthesized answer, image, safety control, or score-based decision. |
| 22 | - Never print API keys or secret values. Check only whether a key is present. |
| 23 | - Do not add a hidden LLM call merely to manufacture `search_queries`. |
| 24 | - Do not treat an arbitrary user prompt as a keyword query merely because it fits an API length limit. |
| 25 | - Keep web-research intent, hard filters, handler policy, and answer-synthesis instructions in their separate contracts. |
| 26 | - Treat omitted provider parameters as behavior too: inspect their defaults before omitting a Parallel setting. |
| 27 | - Do not recreate the entire legacy provider SDK behind a compatibility shim. Normalize only the contract the application actually uses. |
| 28 | - Do not remove credentials from external secret managers or provider dashboards unless the user explicitly asks. Remove obsolete code references and update checked-in templates. |
| 29 | - Treat mode mappings as starting points. Verify latency, quality, and output behavior with the application's real queries. |
| 30 | - Stop before destructive edits when a required behavior has no supported Parallel equivalent and no in-scope substitute. Report the exact gap and the smallest decision needed. |
| 31 | - Stop when the Perplexity boundary requires embeddings; they are not a Parallel Search replacement. Route `finance_search` through Parallel's general index using Search, Chat, or Task according to the consumed contract, and stop only when a hard market-data coverage, freshness, or raw-result requirement remains unpreserved. Keep Agent API model routing, sandbox, MCP, and existing custom-function capabilities separate unless the user explicitly expands the migration scope. |
| 32 | - Stop when the Firecrawl boundary requires complete crawling or URL mapping, local/private file parsing, browser actions or sessions, screenshots or other rich scrape formats, change tracking, or Firecrawl-specific privacy/security controls without an approved replacement. Search and Extract do not reproduce those contracts. |
| 33 | - Follow repository-local instructions such as `AGENTS.md`, `CLAUDE.md`, and `CONTRIBUTING.md`. Preserve unrelated work and never reset or discard user changes. |
| 34 | - Complete safe |