Repository navigation
Releases
0.8.1 — 2026-10-22
Release Notes
Changed
- Minimum supported Rust version is now 1.88 (was 1.85). Building from source
orcargo installneeds Rust 1.88 or newer; prebuilt archives and the
Homebrew formula are unaffected.
Security
- TLS trust-store dependencies updated: rustls 0.23.46, rustls-webpki 0.103.16,
and webpki-roots 1.0.10. This picks up the fixes for RUSTSEC-2026-0346,
RUSTSEC-2026-0347, RUSTSEC-2026-0348, RUSTSEC-2026-0349, RUSTSEC-2026-0381,
RUSTSEC-2026-0382, and RUSTSEC-2026-0383, and the updated trust anchors that
follow the eMudhra CA incident. timeupdated to 0.3.47 for RUSTSEC-2026-0009.
Install exa-agent-cli 0.8.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.8.1/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.8.1
| 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 |
0.8.0 — 2026-10-07
Release Notes
Added
- Agent Ultra effort, optional
--max-duration-seconds(300..10,800), and the
Macrobond data source. Ultra retains an explicit $1..$100 cost cap as CLI
safety policy; legacymaxreturns a local migration command. - Search
--objective(up to 4,096 characters), plus country and paired
latitude/longitude hints on search and answer.
Changed
- Content text, highlights, and legacy context character caps increase to
1,000,000 where supported upstream. Ultra and early stop need no beta header;
Batch and Dynamic Highlights keep their own beta requirements. - Government content recovery suggests
firecrawl scrape URL --max-age 0. - Public API spec refreshed for October changes. SDK-only beta Agent monitors
remain a deliberate omission; the command count stays 71.
Fixed
- Deprecated
crawledBeforeDateapplies the same historical-content conflict
checks assnapshotAsOf. Metadata keys on supported Websets mutations are limited to
250 Unicode characters, including body/set overrides and nested enrichment
metadata on Webset creation. Agent/Batch metadata is outside this Websets
rule; nestedsearch.metadatais not defined by the upstream creation schema. - Preset structure is checked before merge; required-field and cross-field checks
use the final request. Strict schema checks reject unknown fields where request
structure is modeled, while ordinary
typed requests retain forward compatibility. Location, content caps, and budget
constraints share validation across schema, presets, and dispatch. - Migration hints preserve the final request body, including leading-dash values.
Restore explicit profile, base URL, beta, and custom-header context manually
before replay. Ultra budget/time-limit warnings explain limited results. - Government PDF fallback writes to stdout rather than a fixed filename.
- Monthly maintenance guidance distinguishes the offline vendored identity
check from a fresh upstream fetch.
Removed
- Removed
websets exports createandwebsets exports getbecause Exa no longer
documents or ships their routes and a live probe returned a route-level 404. A stale
websets exports ...invocation now fails as an unrecognized subcommand; there is no
replacement command.
Install exa-agent-cli 0.8.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.8.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.8.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 |
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 ...
0.6.0 — 2026-08-11
Release Notes
Added
- Raw Search/Contents payment pass-through:
--payment-discovery,--x402-payment-stdin, and
--mpp-payment-stdinwork only with exact nonstreamingraw POST /searchor/contentson
the default Exa host. Payment values are stdin-only, generic payment headers are refused, dry-run
previews redact placeholders, and wallet/signing/custody remain out of scope. agent runs create --max-cost-dollars DOLLARSmaps tobudget.maxCostDollars;effort max
is exposed behind explicit--beta agent-max-effort-2026-07-27and requires an explicit budget
cap.stopReason: budget_reachednow emits a machine-visiblebudget_reachedwarning.search --streamnow maps to the upstream Search SSE field, is advertised by help and
capabilities, and emitsstream_ignoredwhen upstream will fall back to normal JSON because
the final request has no non-nulloutputSchema. Canonical Search SSE events expose
text-deltaas NDJSONdeltarecords and reconstruct terminal results, output, timing, and
cost metadata. Search stream error events and streams missing a terminaldoneevent now
fail with structured upstream errors instead of returning partial data as success; malformed
or non-terminaldoneevents are rejected as upstream contract violations.
Changed
- Error envelopes now expose
error.details.omittedFlagswhen argv-derived recovery commands
drop unsafe or conflicting flags, and argv-derivedsuggestedCommandvalues are sanitized so
recovery hints do not echo secrets or invalid combinations. - Successful signed raw payment responses in JSON-envelope mode now add top-level
payment
receipt metadata. Signed payment--rawremains envelope-free; all non-payment raw bytes stay
exact, while exact submitted payment credential echoes are redacted as<redacted>. - HTTP 402 classification now distinguishes billing exhaustion from payment challenges:
NO_MORE_CREDITS/ bare 402 staysinsufficient_credits(exit 13), while a 402 with safe
payment challenge metadata ispayment_required(exit 2). - Typed
agent runs create --data-sourcevalues are validated case-insensitively against the
current provider enum (fiber,financial_datasets,similarweb,baselayer,affiliate,
particle,jinko) and sent canonically. Legacy aliases and explicit--body/--set
pass-through behavior are unchanged.
Install exa-agent-cli 0.6.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.6.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.6.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 |
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 |
0.4.0 — 2026-07-16
Release Notes
Changed
--textcharacter caps now accept only bare--text,--text full, or an
integer from 1 through 10000. The legacy--text 0,--text true, and
--text falseforms from 0.2-era recipes are intentionally removed; use
bare--textfor the command default or--text fullfor uncapped text.- Live
contentsandfetchresult envelopes add a requiredoutcomefield:
full,partial, orno_content. This is additive and independent of the
command's exit classification.
Fixed
- Wave 5 contract hardening: contents metadata distinguishes positional URLs,
contents/fetch outcomes require one result row per requested item, and repo
probes can forbid network. - The documented
.data.results[]jq path was verified with one budgeted live
search; no response or credential material was retained.
Install exa-agent-cli 0.4.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.4.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.4.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 |
0.3.0 — 2026-07-07
Release Notes
Fix pass driven by a cold-start dogfood audit (audit.md): a fresh agent using only --help
and error messages hit a first-call failure on context, two entirely dead command trees
(websets, team), and error messages that destroyed the one piece of information an agent
needed to recover. All four are fixed.
Fixed
context "query"now works on the first call:--tokensdefaults todynamicinstead of
sending no token budget and failing upstream with a 400.--tokens dynamicand--tokens N
both reach the request body correctly;--helpnow documents the range and the default.websetsandteamwere calling the wrong URL prefix (/v0/...) and 404ing on every
invocation with an HTML body. The runtime path is now/websets/v0/..., matching Exa's
deployed Websets base.team(bare, no subcommand) now runsteam infodirectly instead of
requiring the one child command by name.- Upstream error bodies are parsed instead of dumped raw. A JSON error body yields a clean
messageplusdetails.upstream(capped at 4096 bytes, withdetails.upstreamPreviewand
upstreamTruncatedwhen it's cut); an HTML error page yields
"upstream returned non-JSON error page (HTTP N)"plusbodyPreviewinstead of the literal
<!DOCTYPE html>as the error message. - The
askmacro no longer expands toanswer QUESTION --text./answer'stextfield is
boolean-only (no character cap), so that flag pulled in full uncapped citation text — a
44.8 KB response for a questionansweralone answers in 5 KB.asknow expands to plain
answer QUESTION.
Changed
contents/fetchno longer report total failure as success. When every requested URL
fails, the command now emits anall_urls_failedwarning and exits10instead ofok: true
with an empty result set; partial failures emit a per-URLurl_failedwarning and still exit
0.- Search's default highlights are now capped at 800 characters per result (previously
uncapped server-default length);--highlights Nstill overrides the cap and
--no-highlightsstill turns highlights off entirely. --highlightsand--no-highlightsare no longer hidden fromsearch --help— they were
functional but undocumented.- The envelope now omits always-null optional fields (
pagination,bytes,dataPath,
upstreamRequestId,correlationId) instead of emitting them as literalnull; an empty
resolvedSearchTypeis omitted rather than serialized as"".warnings/nextActions
still serialize as[]when empty. --ndjsonon list-shaped data now emits one line per result plus a final summary envelope,
instead of a single envelope line indistinguishable from--compact.--format humannow renders a real terse text format forsearch,contents, andanswer
(title/url/citation lines instead of indented JSON); other commands still fall back to
pretty-printed JSON, with a one-time note on stderr when stdout is a TTY.- Global flags now all carry help text and are grouped under a "Global options" heading in
--help, separate from each subcommand's own flags.
Added
capabilities <command-path>filters the inventory to a single command's entry, instead of
requiring the full ~9k-token dump to find one command.buildDate(incapabilitiesanddoctor) is now a real date:SOURCE_DATE_EPOCHif set,
else the git HEAD commit date, else"unknown"— previously always"unknown"on
cargo-install builds.missing_subcommandandunknown_subcommanderrors now carrydetails.subcommands(the
valid children) and asuggestedCommand, instead of surfacing the parent command's own
aboutstring as the error message.
Install exa-agent-cli 0.3.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.3.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.3.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 |
0.2.0 — 2026-07-06
Release Notes
Token-safe retrieval defaults: search results are now sized for agent context windows out of the box.
- Breaking-ish pre-1.0:
searchnow requests query-aware highlights by default at Exa's server default length; use--highlights Nto cap highlight characters or--no-highlightsfor metadata-only results. Baresearch --textandsimilar --textnow requesttext.maxCharacters=1500; use--text fullor--text 0for uncapped text. Barecontents --textremains uncapped. - Breaking-ish pre-1.0: default
--max-output-bytesdrops from 1 MiB to 48 KiB for agent context safety. Spill files are now pretty-printed JSON.
Install exa-agent-cli 0.2.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.2.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.2.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 |
v0.1.0
Install exa-agent-cli 0.1.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/treygoff24/exa-agent-cli/releases/download/v0.1.0/exa-agent-cli-installer.sh | shInstall prebuilt binaries via Homebrew
brew install treygoff24/tap/exa-agentDownload exa-agent-cli 0.1.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 |