Repository navigation
0.7.0 — 2026-09-21
Release Notes
Added
-
Typed content-freshness flags on
search,contents, andsimilar:
--max-age-hours N(-1..=720),--fresh(maxAgeHours: 0, always crawl),
--cache-only(maxAgeHours: -1), and--livecrawl-timeout MS. The default stays
cache-first and the request body is unchanged when none of the flags are given. A merged
body carrying the deprecatedlivecrawlfield warns, andlivecrawlwithmaxAgeHours
is rejected locally. Thecontentsrecovery hints now emit a--freshthat actually
parses; every emittednextActionsandsuggestedCommandis parsed through the real
command tree in tests, including warning-derived ones. -
Exa Snapshot support:
--snapshot-as-of DATE_OR_DATETIMEonsearch,contents, and
similar(nested undercontentsfor search/similar, top-level for contents). Snapshot
conflicts are rejected on the merged body:maxAgeHours,livecrawl,livecrawlTimeout,
subpages, and forsearchanycategoryor atypeother thanauto/fast/instant.
Snapshot plan, contract, and trial error tags classify asfeature_not_enabledon 402/403;
SNAPSHOT_RATE_LIMIT_EXCEEDEDclassifies as a rate limit. Snapshot access remains subject
to Exa plan entitlements. -
websets preview --search <true|false>, sent as the URL query parameter the corrected
upstream spec now declares. It defaults totruewhen the body carriessearch.count,
which preserves the previous behaviour.capabilitiesreports request placement (in)
for query parameters. -
Vendored specs re-verified 2026-09-21: the public spec kept 64 operations and gained
snapshotAsOf, explicit 503SERVICE_OVERLOADEDresponses on the four core endpoints,
and a factored stream/output schema set; the admin spec changed in prose only.
xtask vendor-specnow normalizes the admin YAML in Rust (serde_yaml_ng, dev-tool only)
instead of shelling out to Ruby, so the re-vendor runs on hosts without Ruby. The shipped
binary still carries no YAML parser. -
websets exports create|getandcontextwarn (undocumented_upstream) that their routes
are no longer documented by Exa as of 2026-09-21 and are absent from the official SDKs.
The exports route returned a route-level 404 on a live probe and may have been retired;
/contextstill works. Both stay available pending an upstream statement. -
Batch create, list, get, cancel, and delete commands, plus early Agent run stop.
Batch wrappers are validated locally over the merged body (--requests,--body,
--set, or a preset may supplyrequests), completed-list filters survive
pagination, and commands add their required beta tokens. Batch and stop access
remains subject to Exa account entitlements. -
Answer model, system prompt, and country flags; the Polymarket Agent data source;
monitor domain filters; Dynamic Highlights JSON and file input with beta and
option-conflict checks. -
Follow-up commands for created resources and remaining pages. Continuations retain
filters and explicit profile/beta settings without copying API keys or output paths. -
Linux static release artifacts for
x86_64-unknown-linux-musland
aarch64-unknown-linux-musl, alongside the existing glibc builds. The shell installer
prefers the glibc archive and falls back to musl when the host's glibc is older than the release's recorded minimum
or absent, so containers without glibc now get a working binary. Existing glibc users
receive the same-gnuarchive as before. -
CI gains a Linux static lane that builds the musl target, fails unless the binary has no
PT_INTERPsegment and noNEEDEDentries, and runs the result on an Alpine image; a
guard rejecting-C target-cpu/-C target-featurein the build environment or the
repository's cargo config; an offlinecargo xtask vendor-spec --checkgate over the
vendored specs, overlay, andopenapi/provenance.toml; and a check that the generated
release.ymlstill matchesdist-workspace.toml. -
--max-response-bytesand configmax_response_bytes: a 64 MiB default ceiling
on decoded success bodies, gzip, and entire SSE streams/JSON fallbacks. Oversize
responses return nonretryableresponse_too_large(exit 5), preserving HTTP error
classification and ambiguous-create recovery. Invalid/zero caps remain exit 1. -
contents --jobssupports 1-16 workers (default 1) for--chunk-sizerequests.
Output stays in input order and retains every admitted result after a failure.
One--outputdestination holds all successful chunk renderings, preserving
modes, symlinks, and completed data on later failure. -
permissions.statereports accessible state files and group/world-writable
managed directories, including the credential directory, without changing modes
or following child-directory symlinks.
Fixed
-
The generated agent skill now explains the auto-spill envelope: when output crosses
--max-output-bytes,dataisnulland the file atdataPathholds the formerdata
object, so results live at.resultsthere (or pass--output FILE/--max-output-bytes 0
for the inline shape). Extractors that read.data.resultsfrom the spill file returned
nothing. -
Healthy doctor test fixtures explicitly create private managed directories;
writable-directory diagnostics remain report-only. -
Chunked contents rejects
stream:truebefore sending or touching output, and
explicit--jobsrequires--chunk-size. Failed writes roll back partial
records on regular files, including targets created through dangling symlinks. -
Account feature-access failures now return
feature_not_enabled, distinct from
a rejected credential. This follows a live Batch API entitlement refusal. -
Schema refresh decides drift on canonical JSON (
embeddedCanonicalSha256and
liveCanonicalSha256) rather than on formatting-dependent byte hashes;
embeddedSpecSha256stays as provenance for the vendored file. -
contents --text URLand interleaved URL lists now treat--textas bare text
retrieval, while retaining--text full, numeric caps, and explicit--text=.... -
Recovery and pagination actions retain safe request scope, withhold private headers
and filters, and stop offering a cursor after the pagination loop rejects it.
Batch creation never auto-retries without a documented deduplication guarantee. -
Auto-paginated NDJSON now honors
--output, retains completed pages on later
failures, and avoids collecting the entire result set in memory. Pages are staged
in a sibling temp file, so an existing output file is never truncated before the
first page is written; the file keeps its permissions and a symlinked path keeps
its link. Intermediate pages no longer offer redundant continuation commands. -
Completed Agent streams now offer resource follow-ups without copying their
output again. Follow-up generation no longer clones whole retrieval responses. -
Request previews now share header assembly with live requests, including custom
headers, SSE Accept, idempotency keys, and the documentedExa-Betaheader.
Beta tokens supplied through--beta,--header 'Exa-Beta: …', or automatic
injection are folded into oneExa-Betaheader with each token sent once, and
every beta gate accepts a token supplied by either flag. -
Doctor config backups are always written
0600, whatever the config's own mode
was;--undorestores the original mode recorded alongside the backup. -
Output documentation now explains how to recover the complete stdout result after
an output-file write failure without repeating a successful create. -
Connect timeout now reaches all three HTTP agents via
--connect-timeoutor
configconnect_timeout, independently of the whole-request timeout. -
Doctor fix/undo honor lock acquisition failure and refresh config under lock;
--fix --dry-runperforms no filesystem mutation. Temporary files are cleaned
after failed sync/rename, and supported directory-sync errors are reported. -
Empty/relative XDG roots fall back to HOME; explicit Exa path overrides remain
relative-capable. Explicit trace paths use locking sidecars and new-file 0600.
Changed
robot-docs guidenow emits a co-locatedsectionsstructure while retaining
the flattenedguidancelist for compatibility. The generated agent skill is
rewritten as agent-facing documentation and now ships at
skills/exa-agent-cli/SKILL.md.- A leading
@incontents --highlightsnow selects a file. For a literal query
such as@openai roadmap, use--highlights '{"query":"@openai roadmap"}'. agent runs cancelnow requires--yesfor live calls, likestopanddelete:
it discards the results the run has gathered.- Every cursor-paginated
listrejects--limit 0locally asinvalid_value
instead of forwarding it upstream. answer --user-locationis sent as the string upstream expects, and
answer --textis a boolean;capabilitiesnow reports both kinds.- HTTP responses may now be gzip-encoded:
ureqgains itsgzipfeature, which pulls in
flate2on its default pure-Rust backend, so musl static linking stays free of a zlib C
shim.default-featuresonureqstays off. Raw output preserves the decoded
response body, not compressed wire bytes; payment redaction is unchanged. rustix(unix only,fsfeature) is now a direct dependency for the state layer's file
handling. It was already present transitively, so the lockfile gained no new versions
beyond the gzip chain and nothing was upgraded.- The source package now includes
openapi/provenance.toml, which the OpenAPI parity test
andvendor-spec --checkread. - CI no longer repeats the formatting and generated-artifact checks on both operating
systems; they run once in a dedicatedlintjob. Per-OS clippy, tests, and release
builds are unchanged. Every job now has a timeout, and superseded pull-request runs are
cancelled while pushes tomainare not. - The dev profile now builds with
debug = "line-tables-only"and no debug info for
dependencies. A Linux comparison reduced the binary from 82,861,952 to 33,311,480
bytes while retaining project line tables. Single cold builds were 11.63s and
11.80s, so no build-speed gain is claimed. Release anddistbuilds are unaffected. - Documentation correction: the
keyringcargo feature is inert and gates no code, so no
release artifact stores credentials in an OS keyring.auth loginwrites a plaintext
0600file on every platform. The D11/D15 keyring design indocs/v2/is planned, not
implemented.
Install exa-agent-cli 0.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.7.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.7.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 |
| exa-agent-cli-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| exa-agent-cli-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |