From exa-pack
Executes Exa production checklist for search integrations: pre-flight API/tests, security/code quality/performance/monitoring audits, health endpoint setup.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin exa-packThis skill is limited to using the following tools:
Complete checklist for deploying Exa search integrations to production. Covers API key management, error handling verification, performance baselines, monitoring, and rollback procedures.
Executes Perplexity Sonar API production checklist: API config, code quality, performance caching, monitoring, cost controls for live deployments.
Deploys Exa search API apps to Vercel Edge, Docker, and Cloud Run with endpoint templates, secret configs, and production bash commands.
Executes Hex production deployment checklist for API access, projects, orchestration, monitoring, and rollback. Use when deploying Hex integrations to production or preparing for launch.
Share bugs, ideas, or general feedback.
Complete checklist for deploying Exa search integrations to production. Covers API key management, error handling verification, performance baselines, monitoring, and rollback procedures.
.env files in .gitignorerequestId captured from error responsesmoderation: true) for user-facing searchfast/auto/neural)numResults minimized per use case (3-5 for most)maxCharacters set on text and highlightsset -euo pipefail
echo "=== Exa Pre-Flight ==="
# 1. Verify production API key works
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
-X POST https://api.exa.ai/search \
-H "x-api-key: $EXA_API_KEY_PROD" \
-H "Content-Type: application/json" \
-d '{"query":"pre-flight check","numResults":1}')
echo "API Status: $HTTP_CODE"
[ "$HTTP_CODE" = "200" ] || { echo "FAIL: API key invalid"; exit 1; }
# 2. Verify tests pass
npm test || { echo "FAIL: Tests failing"; exit 1; }
echo "Pre-flight PASSED"
import Exa from "exa-js";
const exa = new Exa(process.env.EXA_API_KEY);
app.get("/health/exa", async (_req, res) => {
const start = performance.now();
try {
const result = await exa.search("health check", { numResults: 1 });
const latencyMs = Math.round(performance.now() - start);
res.json({
status: "healthy",
latencyMs,
resultCount: result.results.length,
timestamp: new Date().toISOString(),
});
} catch (err: any) {
res.status(503).json({
status: "unhealthy",
error: err.message,
errorCode: err.status,
latencyMs: Math.round(performance.now() - start),
});
}
});
set -euo pipefail
# Deploy canary (10% traffic)
kubectl apply -f k8s/production.yaml
kubectl rollout pause deployment/exa-service
echo "Canary deployed. Monitor for 10 minutes..."
echo "Check: /health/exa endpoint, error rates, latency"
# After monitoring, resume to full rollout
# kubectl rollout resume deployment/exa-service
set -euo pipefail
# Verify production endpoint
curl -sf https://your-app.com/health/exa | python3 -m json.tool
# Check error rates (if Prometheus available)
curl -s "localhost:9090/api/v1/query?query=rate(exa_search_error[5m])" 2>/dev/null
set -euo pipefail
# Immediate rollback
kubectl rollout undo deployment/exa-service
kubectl rollout status deployment/exa-service
echo "Rollback complete. Verify /health/exa endpoint."
| Alert | Condition | Severity |
|---|---|---|
| API Down | 5xx errors > 10/min | P1 |
| Auth Failure | 401/403 errors > 0 | P1 |
| Rate Limited | 429 errors > 5/min | P2 |
| High Latency | P95 > 5000ms | P2 |
| Budget Warning | Daily searches > 80% of limit | P3 |
| Issue | Cause | Solution |
|---|---|---|
| Health check fails | API key not set in prod | Verify secret injection |
| Latency spike after deploy | Missing cache warm-up | Pre-populate cache |
| Rate limit on launch | Traffic spike | Enable request queue |
| Rollback needed | Error rate spike | kubectl rollout undo |
For version upgrades, see exa-upgrade-migration. For incident response, see exa-incident-runbook.