Planning With Files
jarrodwatts/claude-code-config
Transforms workflow to use Manus-style persistent markdown files for planning, progress tracking, and knowledge storage.
Call Exa Search directly with cURL or raw HTTP. An agent skill from compozy/compozy.
$ npx skills add compozy/compozy --skill exa-search -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install compozy/compozy exa-search --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/compozy/compozy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/exa-search .claude/skills/exa-search && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "exa-search" agent skill from https://github.com/compozy/compozy/tree/main/.agents/skills/exa-search into .claude/skills/exa-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "exa-search", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/compozy/compozy/tree/main/.agents/skills/exa-searchType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add compozy/compozy --skill exa-search -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install compozy/compozy exa-search --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/compozy/compozy.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/exa-search .agents/skills/exa-search && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "exa-search" agent skill from https://github.com/compozy/compozy/tree/main/.agents/skills/exa-search into .agents/skills/exa-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "exa-search", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add compozy/compozy --skill exa-search -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install compozy/compozy exa-search --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/compozy/compozy.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/exa-search .cursor/skills/exa-search && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "exa-search" agent skill from https://github.com/compozy/compozy/tree/main/.agents/skills/exa-search into .cursor/skills/exa-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "exa-search", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/compozy/compozy.git --path .agents/skills/exa-search--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add compozy/compozy --skill exa-search -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install compozy/compozy exa-search --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/compozy/compozy.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/exa-search .gemini/skills/exa-search && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "exa-search" agent skill from https://github.com/compozy/compozy/tree/main/.agents/skills/exa-search into .gemini/skills/exa-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "exa-search", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install compozy/compozy exa-searchInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add compozy/compozy --skill exa-search -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/compozy/compozy.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/exa-search .github/skills/exa-search && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "exa-search" agent skill from https://github.com/compozy/compozy/tree/main/.agents/skills/exa-search into .github/skills/exa-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "exa-search", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add compozy/compozy --skill exa-search -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install compozy/compozy exa-search --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/compozy/compozy.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/exa-search .opencode/skills/exa-search && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "exa-search" agent skill from https://github.com/compozy/compozy/tree/main/.agents/skills/exa-search into .opencode/skills/exa-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "exa-search", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
exa-searchCall Exa Search directly with cURL or raw HTTP. An agent skill from compozy/compozy.
Exa Search is an agent skill from compozy/compozy. Call Exa Search directly with cURL or raw HTTP. Use when an agent needs Exa semantic web retrieval from POST /search without an SDK, including ranked results, domain or category filters, freshness-aware result content, highlights or text extraction, structured output, or streaming search responses.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in AI & LLM Engineering, covering Structured output and tool calling. It works with Exa. The repository describes itself as: An operating system for AI agents. Plug in the agent CLIs you already use (Claude Code, Codex, Gemini CLI, Cursor) and they become a team: they split the work, hand tasks to each… The licence is MIT.
Read from SKILL.md and the folder at commit eec2ed1. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.exa.aiAlso links to:
dashboard.exa.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
EXA_API_KEYAPI_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Exa Search loads about 3.3k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 1,146 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from compozy/compozy at commit eec2ed1, republished under its MIT licence (© compozy). 1,146 words, ~3,302 tokens.
.claude/skills/exa-search/SKILL.md (or your agent's skills folder).Requires API key: Get one at https://dashboard.exa.ai/api-keys
Header:
x-api-key: $EXA_API_KEY
Use POST https://api.exa.ai/search for semantic web retrieval, ranked results, and optional result-level extraction in one raw HTTP call. Start with type: "auto" for general retrieval. Add contents only when the caller needs page text, highlights, summaries, freshness-controlled crawling, subpages, or extracted links.
curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "latest developments in LLMs",
"type": "auto",
"numResults": 10
}'curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "latest developments in LLMs",
"type": "auto",
"numResults": 5,
"contents": {
"highlights": true
}
}'curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "AI regulation policy updates",
"type": "auto",
"category": "news",
"numResults": 10,
"includeDomains": ["reuters.com", "bbc.com"],
"startPublishedDate": "2025-01-01",
"contents": {
"text": {
"maxCharacters": 2000
},
"maxAgeHours": 24,
"livecrawlTimeout": 12000
}
}'curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "map the major technical and commercial tradeoffs in sodium-ion batteries for grid storage",
"type": "deep",
"numResults": 8
}'POST https://api.exa.ai/searchAuthentication: x-api-key: <API_KEY> header. Exa also accepts Authorization: Bearer <API_KEY>, but prefer x-api-key in cURL examples for consistency.
Use this endpoint when the agent needs search results. If the agent already has URLs and only needs extraction, use POST /contents instead.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | Yes | - | Natural-language search query. Long, semantically rich descriptions work well. |
type | string | No | auto | Search method: auto, fast, instant, deep-lite, deep, or deep-reasoning. |
numResults | integer | No | 10 | Number of results to return. Use small values for agent loops; maximum is 100. |
category | string | No | - | Specialized result type: company, people, research paper, news, personal site, or financial report. |
includeDomains | string[] | No | - | Only return results from these domains, paths, or wildcard patterns. Max 1200. |
excludeDomains | string[] | No | - | Exclude these domains, paths, or wildcard patterns. Max 1200. |
startPublishedDate | string | No | - | ISO 8601 lower bound for result publication date. |
endPublishedDate | string | No | - | ISO 8601 upper bound for result publication date. |
userLocation | string | No | - | Two-letter ISO country code such as US or GB. |
moderation | boolean | No | false | Filter unsafe content from results. |
additionalQueries | string[] | No | - | Extra query variants for deep-search variants. Use alongside the main query. |
systemPrompt | string | No | - | Instructions for synthesized output and deep-search planning, such as source preferences. |
outputSchema | object | No | - | JSON Schema controlling output.content. Adds synthesized output and grounding. |
stream | boolean | No | false | If true, returns SSE instead of a single JSON response. |
compliance | string | No | - | Enterprise-only compliance mode, such as hipaa, when enabled for the account. |
contentsOn /search, text, highlights, and summary must be nested under contents.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
contents.text | boolean or object | No | - | Return full page text as markdown. Object form supports maxCharacters, includeHtmlTags, verbosity, includeSections, and excludeSections. |
contents.highlights | boolean or object | No | - | Return query-relevant excerpts. Prefer true for agent workflows unless a fixed character budget is required. |
contents.summary | boolean or object | No | - | Return per-result LLM summaries. Use sparingly because each result adds synthesis work. |
contents.maxAgeHours | integer | No | - | Freshness control. 0 always live crawls; -1 uses cache only; omit for default cache-first behavior with crawl fallback. |
contents.livecrawlTimeout | integer | No | 10000 | Timeout for live crawling in milliseconds. Use 10000 to 15000 for most freshness-sensitive calls. |
contents.subpages | integer | No | 0 | Number of linked subpages to crawl per result. |
contents.subpageTarget | string or string[] | No | - | Terms used to prioritize which subpages matter, such as ["api", "pricing"]. |
contents.extras.links | integer | No | 0 | Number of links to extract from each result page. |
contents.extras.imageLinks | integer | No | 0 | Number of image URLs to extract from each result page. |
| Parameter | Type | Default | Description |
|---|---|---|---|
maxCharacters | integer | - | Character limit for returned text. Use this instead of tokensNum. |
includeHtmlTags | boolean | false | Preserve HTML tags in output. |
verbosity | string | compact | compact, standard, or full. Pair fresh section-aware extraction with contents.maxAgeHours: 0. |
includeSections | string[] | - | Only include selected sections: header, navigation, banner, body, sidebar, footer, metadata. |
excludeSections | string[] | - | Exclude selected sections from the same section list. |
Prefer contents.highlights: true for the highest-quality default. Only use object form when the agent needs a custom focus or budget.
| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | - | Custom query guiding which excerpts are returned. |
maxCharacters | integer | - | Cap highlight characters per URL. Omit unless the caller has a strict budget. |
| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | - | Custom query for the summary. |
schema | object | - | JSON Schema for structured per-result summaries. |
Search type controls the retrieval and synthesis mode. Pick the mode for the workflow, not just the output format. outputSchema can be used with any search type; use deeper modes when the search process itself needs more planning, synthesis, or reasoning.
| Type | Best for | Tradeoff |
|---|---|---|
auto | General default search and most new integrations | Balances speed and quality without requiring the caller to tune retrieval strategy. |
fast | Low-latency agent loops and product paths | Faster than auto; use when responsiveness matters more than maximum reasoning depth. |
instant | Real-time UI, chat, voice, and autocomplete-style paths | Lowest latency path; use for quick retrieval rather than deep synthesis. |
deep-lite | Lightweight research or synthesis | Adds more planning and synthesis than auto while staying lighter than full deep. |
deep | Multi-step research, comparisons, and synthesis-heavy retrieval | Higher latency; better when the query needs exploration across several sources. |
deep-reasoning | Hard research tasks with high ambiguity or complex tradeoffs | Highest latency and reasoning depth. |
Use auto unless latency or reasoning depth is the primary constraint. Use fast or instant for time-sensitive calls. Use deep, deep-lite, or deep-reasoning when the query needs multi-step source discovery, comparison, or synthesis.
{
"query": "recent product launches from major AI chip companies",
"type": "fast",
"numResults": 5
}{
"query": "compare competing explanations for the recent rise in grid-scale battery deployments",
"type": "deep",
"numResults": 8
}Use systemPrompt for behavior and outputSchema for shape.
curl -sS -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "compare the latest frontier AI model releases",
"type": "deep",
"systemPrompt": "Prefer official sources and avoid duplicate results.",
"outputSchema": {
"type": "object",
"properties": {
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"notable_claims": {
"type": "array",
"items": { "type": "string" }
}
},
"required": ["name", "notable_claims"]
}
}
},
"required": ["models"]
},
"contents": {
"highlights": true
}
}'Keep schemas compact and bounded. Do not add citation fields to the schema; grounding is returned separately in output.grounding.
Streaming applies to synthesized output, so include outputSchema along with -N, Accept: text/event-stream, and stream: true. Without outputSchema, the endpoint returns the normal JSON search response even when stream is true.
curl -sS -N -X POST "https://api.exa.ai/search" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "x-api-key: $EXA_API_KEY" \
-d '{
"query": "recent grid-scale battery deployments",
"type": "deep",
"stream": true,
"outputSchema": {
"type": "object",
"properties": {
"summary": { "type": "string" }
},
"required": ["summary"]
},
"contents": {
"highlights": true
}
}'Treat streaming as SSE rather than JSON. Each data: frame contains an OpenAI-compatible chat completion chunk; read partial text from choices[0].delta.content and handle completion or error frames defensively.
| Field | Type | Description |
|---|---|---|
requestId | string | Unique request identifier. |
results | array | Ranked result objects. |
results[].title | string | Page title. |
results[].url | string | Page URL. |
results[].publishedDate | string or null | Estimated publication date when available. |
results[].author | string or null | Author when available. |
results[].text | string | Returned when contents.text is requested. |
results[].highlights | string[] | Returned when contents.highlights is requested. |
results[].highlightScores | number[] | Similarity scores for highlights. |
results[].summary | string | Returned when contents.summary is requested. |
results[].subpages | array | Nested result objects from subpage crawling. |
results[].extras.links | string[] | Extracted links when requested. |
output.content | string or object | Synthesized output when outputSchema is provided. |
output.grounding | array | Citations and confidence labels for synthesized fields. |
costDollars.total | number | Total request cost when returned. |
searchTime | number | Search latency when returned. |
text, highlights, and summary inside contents on /search.text, highlights, or summary; that shape belongs to /contents.tokensNum; use contents.text.maxCharacters to cap extracted text.useAutoprompt, numSentences, or highlightsPerUrl in new requests.contents.maxAgeHours instead of livecrawl.company, people, research paper, news, personal site, and financial report.company and people do not support startPublishedDate or endPublishedDate. company supports excludeDomains; people does not, and people only accepts LinkedIn domains in includeDomains.contents.highlights, contents.text, or contents.summary by default. Stack modes only when the caller truly needs multiple views of each page.stream: true is paired with outputSchema; otherwise /search returns its normal JSON response.© compozy, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/exa-search of compozy/compozy.
Open the folder on GitHubat commit eec2ed1
Exa Search next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Exa Search this skillcompozy/compozy | 2.8k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Planning With Filesjarrodwatts/claude-code-config | 1.1k | 5 repos | ~967 | Automated safety check: Pass | None | |
| Tool Use Data Synthesissunny-glow/Auto-BenchMax | 1.3k | — | ~3.3k | Automated safety check: Pass | None | |
| Agent Harness ConstructionKartikLabhshetwar/mind-mentor | 147 | 7 repos | ~500 | Automated safety check: Pass | Apache-2.0 | |
| Prompt Engineering Patternswshobson/agents | 40k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Model Benchmarkstheopenco/llmgateway | 1.7k | — | ~1.1k | Automated safety check: Notes | Custom licence |
jarrodwatts/claude-code-config
Transforms workflow to use Manus-style persistent markdown files for planning, progress tracking, and knowledge storage.
sunny-glow/Auto-BenchMax
Synthesize training data for ANY tool-use / agentic benchmark, in ANY repo.
KartikLabhshetwar/mind-mentor
Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates.
wshobson/agents
Reference for designing and tuning production LLM prompts: few-shot examples, chain-of-thought, structured outputs, templates and system prompts.
theopenco/llmgateway
Run and report repository model or provider-mapping benchmarks.
mastra-ai/mastra
Universal quality bar and final audit rubric for any agent system prompt.
compozy/compozy
Dogfoods Compozy through an autonomous startup scenario with live providers, cross-surface observation, and strict evidence audit.
compozy/compozy
Go test-shape discipline for Compozy. An agent skill from compozy/compozy.
compozy/compozy
Guide for assistant-ui library - AI chat UI components. An agent skill from compozy/compozy.
compozy/compozy
Guide for assistant-ui UI primitives - ThreadPrimitive, ComposerPrimitive, MessagePrimitive.
compozy/compozy
Guide for assistant-ui runtime system and state management. An agent skill from compozy/compozy.
compozy/compozy
Guide for assistant-stream package and streaming protocols. An agent skill from compozy/compozy.
Works with
Categories
Call Exa Search directly with cURL or raw HTTP. An agent skill from compozy/compozy. Exa Search is an agent skill from compozy/compozy. Call Exa Search directly with cURL or raw HTTP.
Exa Search fits situations like: an agent needs Exa semantic web retrieval from POST /search without an SDK; including ranked results; category filters; freshness-aware result content.
Run `npx skills add compozy/compozy --skill exa-search -a claude-code`. Or copy the skill folder (.agents/skills/exa-search in compozy/compozy) into .claude/skills/exa-search in your project. Claude Code loads it when a task matches its description.
Run `npx skills add compozy/compozy --skill exa-search -a codex`. Or copy the skill folder (.agents/skills/exa-search in compozy/compozy) into .agents/skills/exa-search in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add compozy/compozy --skill exa-search -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/exa-search, .gemini/skills/exa-search, .github/skills/exa-search and .opencode/skills/exa-search in your project.
Going by SKILL.md and its folder, Exa Search needs the command-line tools its instructions call (curl) and credentials named EXA_API_KEY and API_KEY. Our summary lists: A credential in EXA_API_KEY; A credential in API_KEY.
SKILL.md names 2 domains. In commands or code: api.exa.ai; the agent is likely to contact it when it follows the instructions. As links in the text: dashboard.exa.ai. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Exa Search is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Exa Search: Planning With Files (jarrodwatts/claude-code-config, 1.1k stars), Tool Use Data Synthesis (sunny-glow/Auto-BenchMax, 1.3k stars), Agent Harness Construction (KartikLabhshetwar/mind-mentor, 147 stars) and Prompt Engineering Patterns (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
compozy (a GitHub organization) maintains it in compozy/compozy, which has 2,792 GitHub stars. The repository holds 47 skills in this directory. The repository was last updated on October 8, 2026.
Source: compozy/compozy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.