Liking cljdoc? Tell your friends :D

com.blockether.vis.ext.foundation-search.core

Research extension — NATIVE tools.

Three model-facing bindings, bound BARE (native, no alias) in the sandbox alongside cat/rg/patch — same surface as the foundation kernel, no ;; -- EXTENSION search -- prompt block:

search_web(query, opts?) — web search via Exa MCP search_code(query, opts?) — code/doc context via Exa MCP search_papers(query, opts?) — arxiv papers (Atom feed)

Output shape — consistent with the rest of the :tag :observation tool surface (cat, ls, rg). Every search fn returns the canonical tool envelope; the agent sees the unwrapped :result map:

{:op :search-web|:search-code|:search-papers :query "…" :citations [{:type :title :url :excerpt :source …} …] :citation-count N :truncated? B :source :exa|:arxiv :endpoint "…REDACTED…" ;; web/code only :error? true ;; only on failure :error {:message … …}} ;; only on failure

:excerpt is Markdown; the channel renderer parses it through vis/markdown->ir so the TUI / Telegram / web channels render commonmark blocks (headings, lists, code fences) instead of dumping the raw blob. Errors are still surfaced inline as a single citation with :error true AND on the envelope's :error slot so failures stay visible no matter which lens the consumer reads.

Exa MCP: the public endpoint supports basic unauthenticated use; set EXA_API_KEY (or EXA_MCP_API_KEY) for higher limits. The key is never logged or surfaced; the endpoint shown in results is redacted.

arxiv: free public Atom feed via https://export.arxiv.org/api/query.

Research extension — NATIVE tools.

Three model-facing bindings, bound BARE (native, no alias) in the
sandbox alongside cat/rg/patch — same surface as the foundation
kernel, no `;; -- EXTENSION search --` prompt block:

  search_web(query, opts?)    — web search via Exa MCP
  search_code(query, opts?)   — code/doc context via Exa MCP
  search_papers(query, opts?) — arxiv papers (Atom feed)

Output shape — consistent with the rest of the `:tag :observation`
tool surface (cat, ls, rg). Every search fn returns the
canonical tool envelope; the agent sees the unwrapped `:result` map:

  {:op       :search-web|:search-code|:search-papers
   :query        "…"
   :citations    [{:type :title :url :excerpt :source …} …]
   :citation-count N
   :truncated?   B
   :source       :exa|:arxiv
   :endpoint     "…REDACTED…"   ;; web/code only
   :error?       true               ;; only on failure
   :error        {:message … …}}    ;; only on failure

`:excerpt` is Markdown; the channel renderer parses it through
`vis/markdown->ir` so the TUI / Telegram / web channels render
commonmark blocks (headings, lists, code fences) instead of dumping
the raw blob. Errors are still surfaced inline as a single citation
with `:error true` AND on the envelope's `:error` slot so failures
stay visible no matter which lens the consumer reads.

Exa MCP: the public endpoint supports basic unauthenticated use;
set `EXA_API_KEY` (or `EXA_MCP_API_KEY`) for higher limits. The
key is never logged or surfaced; the endpoint shown in results is
redacted.

arxiv: free public Atom feed via `https://export.arxiv.org/api/query`.
raw docstring

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close