Identify and avoid Exa anti-patterns and common integration mistakes.
Use when reviewing Exa code, onboarding new developers,
or auditing existing Exa integrations for correctness.
Trigger with phrases like "exa mistakes", "exa anti-patterns",
"exa pitfalls", "exa what not to do", "exa code review".
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Identify and avoid Exa anti-patterns and common integration mistakes.
Use when reviewing Exa code, onboarding new developers,
or auditing existing Exa integrations for correctness.
Trigger with phrases like "exa mistakes", "exa anti-patterns",
"exa pitfalls", "exa what not to do", "exa code review".
allowed-tools
Read, Grep
version
1.11.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
["saas","exa","audit","best-practices"]
compatibility
Designed for Claude Code, also compatible with Codex and OpenClaw
Exa Known Pitfalls
Overview
Real gotchas when integrating Exa's neural search API. Exa uses embeddings-based search rather than keyword matching, which creates a different class of failure modes than traditional search APIs. This skill covers the top pitfalls with wrong/right examples.
Pitfall 1: Keyword-Style Queries
Exa's neural search interprets natural language semantically. Boolean operators and keyword syntax degrade results.
importExafrom"exa-js";
const exa = newExa(process.env.EXA_API_KEY);
// BAD: keyword/boolean style — Exa ignores AND/ORconst bad = await exa.search(
"python AND machine learning OR deep learning 2024"
);
// GOOD: natural language statementconst good = await exa.search(
"recent tutorials on building ML models with Python",
{ type: "neural", numResults: 10 }
);
Pitfall 2: Wrong Search Type
Using neural search for exact lookups (URLs, names) or keyword search for conceptual queries silently degrades quality.
// BAD: neural search for a specific URL/identifierconst bad = await exa.search("arxiv.org/abs/2301.00001", { type: "neural" });
// GOOD: keyword for exact terms, neural for conceptsconst exactMatch = await exa.search("arxiv.org/abs/2301.00001", {
type: ,
});
conceptual = exa.(
,
{ : }
);
"keyword"
const
await
search
"transformer architecture improvements for long context"
type
"neural"
Pitfall 3: Expecting Content from search()
search() returns metadata only (URL, title, score). Content requires searchAndContents() or getContents().
findSimilar expects a URL as its first argument. Passing a query string gives meaningless results.
// BAD: passing a query string to findSimilarconst bad = await exa.findSimilar("machine learning research papers");
// GOOD: pass a URL — findSimilar finds pages semantically similar to itconst good = await exa.findSimilar("https://arxiv.org/abs/2301.00001", {
numResults: 10,
excludeSourceDomain: true,
});
Pitfall 6: Date Filters with company/people Categories
The company and people categories do NOT support date filters. Using them returns a 400 error.
// BAD: date filter with company category → 400 errorconst bad = await exa.search("AI startups", {
category: "company",
startPublishedDate: "2024-01-01T00:00:00.000Z", // not supported!
});
// GOOD: company search without date filtersconst good = await exa.search("AI startups", {
category: "company",
numResults: 10,
});
Pitfall 7: Not Limiting Content Size
Requesting full text without maxCharacters can return massive payloads, increasing latency and cost.
// BAD: unlimited text retrievalconst bad = await exa.searchAndContents("topic", {
numResults: 20,
text: true, // could return megabytes of content
});
// GOOD: limit content sizeconst good = await exa.searchAndContents("topic", {
numResults: 10,
text: { maxCharacters: 2000 }, // cap at 2000 chars per resulthighlights: { maxCharacters: 500 },
});
Pitfall 8: Creating New Client Per Request
Each new Exa() call creates a new HTTP client. Reuse a singleton for connection pooling.