Install
$ agentstack add skill-rowanaldean-exa-skills-exa-get-contents ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Exa Get Contents (Token-Efficient)
Use this skill to extract clean, LLM-ready content from known URLs using the Exa API via curl, while strictly minimizing token usage to keep context sizes manageable.
Note: This is for when you already have the URLs. If you need to search the web to find URLs first, use the exa-search skill instead.
Extraction Approaches
Choose the extraction mode that best balances your need for information against token cost. Do NOT wrap extraction options in a contents object (unlike the /search endpoint).
1. Highlights Extraction (Recommended)
Extracts key excerpts relevant to a query. This uses 10x fewer tokens than full text.
curl -X POST 'https://api.exa.ai/contents' \
-H "x-api-key: $EXA_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"urls": ["https://example.com/article", "https://example.com/another-post"],
"highlights": {
"query": "key findings and methodology",
"maxCharacters": 4000
}
}'
2. Structured Summary
Uses an LLM to generate an abstract or structured JSON. Excellent for analyzing dense company pages or long documents without reading the entire text.
curl -X POST 'https://api.exa.ai/contents' \
-H "x-api-key: $EXA_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"urls": ["https://example.com"],
"summary": {
"query": "Extract company overview and recent news",
"schema": {
"type": "object",
"properties": {
"name": { "type": "string" },
"industry": { "type": "string" },
"recent_news": { "type": "array", "items": { "type": "string" } }
},
"required": ["name", "industry"]
}
}
}'
3. Subpage Crawling (Documentation/Deep Dives)
Automatically discover and extract content from linked subpages (e.g., API docs). Use subpageTarget to focus the crawl.
curl -X POST 'https://api.exa.ai/contents' \
-H "x-api-key: $EXA_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"urls": ["https://docs.example.com"],
"subpages": 5,
"subpageTarget": ["api", "reference", "guide"],
"highlights": { "maxCharacters": 4000 }
}'
Gotchas & Error Handling
- Top-Level Keys:
text,highlights, andsummaryMUST be placed at the top level of the JSON payload. Do NOT nest them inside acontentsobject (that is only for the/searchendpoint). - Silent Failures: The API returns HTTP 200 even if individual URLs fail to scrape. You MUST check the
statusesarray in the JSON response to verify success. - E.g., check that
statuses[].statusis"success"and not"error". Look for tags likeCRAWL_NOT_FOUNDorCRAWL_LIVECRAWL_TIMEOUTif an error occurs. - Freshness: To bypass cache and force a live crawl, add
"maxAgeHours": 0and a timeout"livecrawlTimeout": 15000to the top level of the JSON. Do not use the deprecatedlivecrawlparameter. - Deprecated Parameters: Never use
useAutoprompt,stream,tokensNum,numSentences, orhighlightsPerUrl. - Token warnings: Avoid
text: truewithout limits. If you must use text, always cap it:"text": {"maxCharacters": 8000}.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: RowanAldean
- Source: RowanAldean/exa-skills
- License: Unlicense
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.