Repository navigation
0.5.0 — 2026-08-04
Release Notes
Restores typed parity with the current Exa API under D16/D40: the surface now matches the live spec (2.0.0 as served 2026-08-03) and the documented docs-only endpoints. OpenAI-compatible routes remain raw-only; MPP/x402 remain unsupported (raw covers them; see decisions.md D40).
Breaking
- Research commands are now a local retirement stub. Upstream retired
/research/v1(HTTP 410RESEARCH_RETIRED).research create|get|listno longer call the network; each exits 1 with error coderesearch_retiredand a copy-pasteable replacement —research create "<query>"interpolates your query intoexa-agent search "<query>" --type deep-reasoning. The three operations leftcapabilities, and the registry count is now 67. websets imports create --csv/--urlremoved. They were advertised but returnednot_implemented. The documented flow is create →PUTyour file to the returneduploadUrl; the create envelope now carries a ready-to-pastenextActionscurl template for that second step. A one-shot convenience returns only alongside a resumable-upload design (D40d).
Added
- Websets exports:
websets exports create <webset> --format csv|jsonandwebsets exports get <webset> <export-id>(docs-only endpoints, overlay-defined like/context;createis idempotency-sensitive under D7 and its envelope points at the matchingexports get). websets get --expand items— a real query-string parameter;--set expand=itemsis also lifted into the query for this command instead of landing in a GET body.- Named flags:
search --output-schema,search --system-prompt,agent runs create --system-prompt,contents --highlights [QUERY]. - Category
publicationaccepted onsearch/similar(the canonical spelling upstream renamed fromresearch paper). Legacy spellings on typed flags —research paper,fiber_ai,particle_news— are coerced to canonical and flagged with a structuredlegacy_value_coercedwarning;--body/--setvalues pass through untouched. -o/--output FILEwrites the full response envelope to a file; stdout receives a small confirmation envelope instead, independent of the automatic spill-on-size behavior. Same-path collisions with--secret-outputare refused before any request is sent.- Live
contents/fetchandanswer/askenvelopes carry theoutcomefield (full/partial/no_content) plus per-itemcontentDiagnostics[](crawl status, error tag, HTTP status, inferred content type); answer/ask emit an empty diagnostics array because the upstream response exposes no per-citation crawl data. - New exit code
13(billing) and error codeinsufficient_creditsfor HTTP 402. An
out-of-credits account previously surfaced asinvalid_value/ exit1— a usage error —
so callers read it as "my flags were wrong" and retried with different arguments against an
account that could not pay for any of them. The 402 path now says the account is out of
credits, names the top-up URL, is marked non-retryable, and is skipped by the retry policy.
Credit exhaustion is also detected from aNO_MORE_CREDITSbody on any 4xx, since the tag has
been observed outside 402. auth testanddoctor --onlinedistinguish "credential valid but account out of credits"
from both acceptance and rejection. The Exa API publishes no balance endpoint, so this
billing-free probe is the only credit preflight available.
Changed
- Re-vendored both OpenAPI snapshots (drift absorbed: crawl-date fields now marked deprecated upstream,
evaluateon webset import scoping,scopeId, integerlimit/employeestypes, entity research fields, publicationabstract/doi, 402 responses on search/contents).
Fixed
- Rejected enum flag values now name the accepted set.
similar --category githubreported only
invalid value 'github' for '--category <CATEGORY>'; it now lists the six valid categories.
(search --categoryalready did this.) contentsandfetchrows whose upstream crawl failed with an emptyerror: {}now carry
error_reason: "upstream_reason_unavailable"incontentDiagnostics[]instead of a bare
crawl_status: "error"with no reason at all. The matching per-URL warning label no longer
depends on a fallback command being constructible. This complements the 0.4.0outcomefield
(full/partial/no_content) on the same result rows.probe_inconclusiveandinvalid_field_typewere emitted but missing from the published
errorCodesdictionary; both are now declared.
Install exa-agent-cli 0.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.5.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.5.0
| File | Platform | Checksum |
|---|---|---|
| exa-agent-cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| exa-agent-cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| exa-agent-cli-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| exa-agent-cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |