<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on ajq — semantic jq</title><link>https://ricardocabral.github.io/ajq/docs/reference/</link><description>Recent content in Reference on ajq — semantic jq</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://ricardocabral.github.io/ajq/docs/reference/index.xml" rel="self" type="application/rss+xml"/><item><title>Command-line interface</title><link>https://ricardocabral.github.io/ajq/docs/reference/cli/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ricardocabral.github.io/ajq/docs/reference/cli/</guid><description>&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ajq [query] [flags]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ajq [command]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ajq reads input from standard input, applies one jq/semantic &lt;code&gt;query&lt;/code&gt;, and writes results
to standard output. Errors are written to standard error and produce a non-zero exit code.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;query&lt;/code&gt; is a single argument. ajq desugars &lt;code&gt;=~&lt;/code&gt;/&lt;code&gt;!~&lt;/code&gt; to &lt;code&gt;sem_match(...)&lt;/code&gt;, parses with
&lt;a href="https://github.com/itchyny/gojq"&gt;gojq&lt;/a&gt;, and executes through the selected backend only
when semantic operators require one.&lt;/p&gt;
&lt;h2 id="global-flags"&gt;Global flags&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Flag&lt;/th&gt;
					&lt;th&gt;Short&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--backend &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Select the semantic backend: &lt;code&gt;anthropic&lt;/code&gt;, &lt;code&gt;local&lt;/code&gt;, &lt;code&gt;mock&lt;/code&gt;, &lt;code&gt;ollama&lt;/code&gt;, &lt;code&gt;openai&lt;/code&gt;, or &lt;code&gt;openrouter&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--base-url &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Set the HTTP base URL for backends that use one (&lt;code&gt;local&lt;/code&gt;, &lt;code&gt;ollama&lt;/code&gt;, &lt;code&gt;openai&lt;/code&gt;, &lt;code&gt;openrouter&lt;/code&gt;). For &lt;code&gt;openai&lt;/code&gt;/&lt;code&gt;openrouter&lt;/code&gt;, custom URLs must use HTTPS unless the host is loopback (&lt;code&gt;127.0.0.1&lt;/code&gt;, &lt;code&gt;localhost&lt;/code&gt;, or &lt;code&gt;[::1]&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--backend-concurrency &amp;lt;N&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Maximum in-flight semantic requests in one provider batch. Default &lt;code&gt;1&lt;/code&gt;; maximum &lt;code&gt;2&lt;/code&gt; for OpenAI-compatible/Anthropic and &lt;code&gt;4&lt;/code&gt; for Ollama. Must be positive when set.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--cloud&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Select the Anthropic cloud backend; equivalent to &lt;code&gt;--backend anthropic&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--compact-output&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-c&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Emit compact JSON output.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--exit-status&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-e&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Set the exit status based on the last output value.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--explain&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Print the deterministic/semantic execution plan and exit without executing the query.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--max-calls &amp;lt;N&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Maximum post-dedup backend judgements before aborting; &lt;code&gt;0&lt;/code&gt; means unlimited. Paid backends default to &lt;code&gt;100&lt;/code&gt;; local/Ollama/mock default to unlimited.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--model &amp;lt;id-or-alias&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Semantic model id or alias for the selected backend.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--no-cache&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Disable persistent on-disk judgement cache reads and writes for this run.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--null-input&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-n&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Use a single &lt;code&gt;null&lt;/code&gt; input value instead of reading stdin.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--raw-input&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-R&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Read each input line as a string.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--raw-output&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-r&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Emit strings without JSON quoting.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--stats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Print run statistics to stderr after a successful run.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--stream&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Run supported semantic queries inline for low-latency frame output instead of window batching. Does not change backend, model, cache identity, or &lt;code&gt;--max-calls&lt;/code&gt;; pure-jq and planner-required inline queries retain their existing behavior.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--window-bytes &amp;lt;N&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;Maximum source bytes per supported three-phase semantic window; positive integer, default &lt;code&gt;262144&lt;/code&gt;. Has no execution effect for pure-jq or inline queries, including &lt;code&gt;--stream&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--version&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Print the version and exit.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--help&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-h&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Print usage and exit.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;See &lt;a href="../io-modes/"&gt;Input and output modes&lt;/a&gt; for framing and formatting details, &lt;a href="../backends/"&gt;Backends&lt;/a&gt;
for backend-specific defaults, and &lt;a href="../configuration/"&gt;Configuration&lt;/a&gt; for env/config
precedence.&lt;/p&gt;</description></item><item><title>Input and output modes</title><link>https://ricardocabral.github.io/ajq/docs/reference/io-modes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ricardocabral.github.io/ajq/docs/reference/io-modes/</guid><description>&lt;h2 id="input-framing"&gt;Input framing&lt;/h2&gt;
&lt;p&gt;ajq selects an input framing based on flags and the shape of stdin.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Mode&lt;/th&gt;
					&lt;th&gt;Flag&lt;/th&gt;
					&lt;th&gt;Behavior&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Auto (default)&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
					&lt;td&gt;Auto-detects a single JSON value or a stream of top-level / NDJSON JSON values.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Null input&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-n&lt;/code&gt;, &lt;code&gt;--null-input&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Ignores stdin; supplies one &lt;code&gt;null&lt;/code&gt; input frame.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Raw input&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-R&lt;/code&gt;, &lt;code&gt;--raw-input&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Reads each stdin line as a string, excluding the line terminator. &lt;code&gt;.&lt;/code&gt; is the line.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In the default mode, a stream of multiple top-level JSON values (whitespace- or
newline-separated, i.e. NDJSON/JSON Lines) is framed independently, with no whole-stream
buffering. Pure-jq and planner-required interleaved semantic queries execute and emit one
frame at a time. Supported three-phase semantic queries instead group complete frames into
configured byte-budgeted windows, resolve each window once, then emit their frames in
original order. The window retains only its frames plus bounded framing lookahead; a record
larger than the budget forms one oversized window and is never split. This still allows
inputs larger than available memory.&lt;/p&gt;</description></item><item><title>Semantic functions</title><link>https://ricardocabral.github.io/ajq/docs/reference/semantic-functions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ricardocabral.github.io/ajq/docs/reference/semantic-functions/</guid><description>&lt;p&gt;Semantic operators are registered as jq functions, so gojq parses them inside ordinary jq
constructs. ajq adds only the &lt;code&gt;=~&lt;/code&gt; and &lt;code&gt;!~&lt;/code&gt; surface sugar before parsing.&lt;/p&gt;
&lt;h2 id="function-vocabulary"&gt;Function vocabulary&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Function&lt;/th&gt;
					&lt;th&gt;Form&lt;/th&gt;
					&lt;th&gt;Kind&lt;/th&gt;
					&lt;th&gt;Returns&lt;/th&gt;
					&lt;th&gt;Execution status&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sem_match&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sem_match(value; &amp;quot;spec&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;predicate&lt;/td&gt;
					&lt;td&gt;boolean&lt;/td&gt;
					&lt;td&gt;Shipped&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sem_classify&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sem_classify(value; &amp;quot;a&amp;quot;; &amp;quot;b&amp;quot;; …)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;bounded value&lt;/td&gt;
					&lt;td&gt;one label from the given labels&lt;/td&gt;
					&lt;td&gt;Shipped&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sem_extract&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sem_extract(value; &amp;quot;what&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;unbounded value&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;Limited: supported only in gated/interleaved fallback contexts&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sem_score&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sem_score(value; &amp;quot;spec&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;unbounded value&lt;/td&gt;
					&lt;td&gt;number&lt;/td&gt;
					&lt;td&gt;Limited: supported in &lt;code&gt;sort_by(...)&lt;/code&gt; three-phase placeholder mode and in gated/interleaved fallback contexts&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sem_norm&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sem_norm(value; &amp;quot;canonicalization spec&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;unbounded value&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;Limited: supported in &lt;code&gt;group_by(...)&lt;/code&gt; three-phase placeholder mode and in gated/interleaved fallback contexts&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;sem_redact&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;sem_redact(value; &amp;quot;redaction spec&amp;quot;)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;unbounded value&lt;/td&gt;
					&lt;td&gt;string&lt;/td&gt;
					&lt;td&gt;Limited: supported only in gated/interleaved fallback contexts&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The &lt;strong&gt;spec&lt;/strong&gt; is a literal string in the query. Stream &lt;strong&gt;data&lt;/strong&gt; is structurally fenced by
the selected backend&amp;rsquo;s output constraints.&lt;/p&gt;</description></item><item><title>--explain output</title><link>https://ricardocabral.github.io/ajq/docs/reference/explain-output/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ricardocabral.github.io/ajq/docs/reference/explain-output/</guid><description>&lt;p&gt;&lt;code&gt;--explain&lt;/code&gt; prints a stable plan report and exits without executing the query. It does not
contact a provider or local model.&lt;/p&gt;
&lt;h2 id="pure-jq-report"&gt;Pure-jq report&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ajq explain v1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;query: &amp;#34;.users[] | select(.active) | .name&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;execution: pure-jq deterministic
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deterministic: yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model_calls: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;backend_calls: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;byte_reproducible: yes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stdin: ignored
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;query&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;The query as parsed.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;execution&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;pure-jq deterministic&lt;/code&gt; — no semantic call sites.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;deterministic&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;yes&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;model_calls&lt;/code&gt; / &lt;code&gt;backend_calls&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;0&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;byte_reproducible&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;yes&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;stdin&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;ignored&lt;/code&gt; — pure-jq explain does not read input.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="semantic-report"&gt;Semantic report&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ajq explain v1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;query: &amp;#34;.[] | select(sem_match(.msg; \&amp;#34;urgent\&amp;#34;)) | .msg&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;execution: semantic split plan
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deterministic: no
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;model_calls: input-dependent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;backend_calls: input-dependent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;byte_reproducible: cache-dependent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stdin: harvested for estimates
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;planned_call_sites: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;semantic_predicates: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;semantic_values: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;estimates:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; estimate_status: available
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; static_call_sites: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; input_frames: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; harvested_judgements: 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; post_dedup_judgements: 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mock_judge_batches: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; over_harvest_bound: post_dedup_judgements == mock distinct judgements; may be a safe superset of execute-needed judgements
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;subgraphs:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; deterministic: jq outside semantic call sites
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; semantic: 1 planned call site(s)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;semantic_plan:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - call_id: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; op: &amp;#34;sem_match&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; kind: &amp;#34;predicate&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; value_expr: &amp;#34;.msg&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; specs: [&amp;#34;urgent&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; source_range: 13:38
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gated: n/a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; execution: 3-phase
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; subgraph: semantic
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="header-fields"&gt;Header fields&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Field&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;execution&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;semantic split plan&lt;/code&gt; — the query has semantic call sites.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;deterministic&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;no&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;model_calls&lt;/code&gt; / &lt;code&gt;backend_calls&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;input-dependent&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;byte_reproducible&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;cache-dependent&lt;/code&gt; — deterministic phases are byte-reproducible; semantic answers depend on backend/cache state.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;stdin&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;harvested for estimates&lt;/code&gt; when valid stdin is used for an estimate. With &lt;code&gt;--stream&lt;/code&gt; on a supported plan, &lt;code&gt;not harvested&lt;/code&gt;: inline execution has no cross-frame harvest estimate and explain leaves stdin untouched.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;planned_call_sites&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Total semantic call sites found in the static plan.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;semantic_predicates&lt;/code&gt; / &lt;code&gt;semantic_values&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Counts of predicate-kind and value-kind ops.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="estimates-block"&gt;&lt;code&gt;estimates&lt;/code&gt; block&lt;/h3&gt;
&lt;p&gt;Present when valid stdin was supplied and the mock harvest path can estimate the query.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://ricardocabral.github.io/ajq/docs/reference/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ricardocabral.github.io/ajq/docs/reference/configuration/</guid><description>&lt;p&gt;ajq resolves semantic-backend settings from flags, environment variables, a TOML config
file, and backend defaults.&lt;/p&gt;
&lt;h2 id="precedence"&gt;Precedence&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: right"&gt;Rank&lt;/th&gt;
					&lt;th&gt;Source&lt;/th&gt;
					&lt;th&gt;Notes&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: right"&gt;1&lt;/td&gt;
					&lt;td&gt;Command-line flags&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--backend&lt;/code&gt;, &lt;code&gt;--model&lt;/code&gt;, &lt;code&gt;--base-url&lt;/code&gt;, &lt;code&gt;--backend-concurrency&lt;/code&gt;, &lt;code&gt;--max-calls&lt;/code&gt;, &lt;code&gt;--window-bytes&lt;/code&gt;, and &lt;code&gt;--no-cache&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: right"&gt;2&lt;/td&gt;
					&lt;td&gt;Environment variables&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;AJQ_BACKEND&lt;/code&gt;, &lt;code&gt;AJQ_MODEL&lt;/code&gt;, &lt;code&gt;AJQ_BASE_URL&lt;/code&gt;, &lt;code&gt;AJQ_BACKEND_CONCURRENCY&lt;/code&gt;, &lt;code&gt;AJQ_MAX_CALLS&lt;/code&gt;, &lt;code&gt;AJQ_WINDOW_BYTES&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: right"&gt;3&lt;/td&gt;
					&lt;td&gt;TOML config&lt;/td&gt;
					&lt;td&gt;Default path or &lt;code&gt;AJQ_CONFIG&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: right"&gt;4&lt;/td&gt;
					&lt;td&gt;Backend defaults&lt;/td&gt;
					&lt;td&gt;For example, Anthropic&amp;rsquo;s default model and paid-backend call cap.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Flags override environment variables; environment variables override config values; config
values override backend defaults.&lt;/p&gt;</description></item><item><title>Backends</title><link>https://ricardocabral.github.io/ajq/docs/reference/backends/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://ricardocabral.github.io/ajq/docs/reference/backends/</guid><description>&lt;p&gt;Semantic operators require a backend. Pure jq queries do not construct a backend, spawn a
daemon, or make network calls unless a semantic operator is present and a backend is
selected by flags, environment, or config.&lt;/p&gt;
&lt;h2 id="backend-summary"&gt;Backend summary&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Backend&lt;/th&gt;
					&lt;th&gt;Select with&lt;/th&gt;
					&lt;th&gt;Model default / requirement&lt;/th&gt;
					&lt;th&gt;Base URL&lt;/th&gt;
					&lt;th&gt;Credentials&lt;/th&gt;
					&lt;th style="text-align: right"&gt;Default &lt;code&gt;max_calls&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;mock&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--backend mock&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Built-in &lt;code&gt;ajq-default-model&lt;/code&gt; identity&lt;/td&gt;
					&lt;td&gt;none&lt;/td&gt;
					&lt;td&gt;none&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;code&gt;0&lt;/code&gt; (unlimited)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;local&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--backend local&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;qwen2.5-1.5b&lt;/code&gt; unless overridden&lt;/td&gt;
					&lt;td&gt;Managed loopback &lt;code&gt;http://127.0.0.1:8081&lt;/code&gt;; explicit &lt;code&gt;--base-url&lt;/code&gt; for user-trusted servers&lt;/td&gt;
					&lt;td&gt;managed bearer key (internal)&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;code&gt;0&lt;/code&gt; (unlimited)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;ollama&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--backend ollama&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Required &lt;code&gt;--model&lt;/code&gt; / config / env&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;OLLAMA_HOST&lt;/code&gt; or &lt;code&gt;http://127.0.0.1:11434&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;none&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;code&gt;0&lt;/code&gt; (unlimited)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;openai&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--backend openai&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Required &lt;code&gt;--model&lt;/code&gt; / config / env&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;https://api.openai.com/v1&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;openrouter&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--backend openrouter&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Required &lt;code&gt;--model&lt;/code&gt; / config / env&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;https://openrouter.ai/api/v1&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;OPENROUTER_API_KEY&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;anthropic&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--backend anthropic&lt;/code&gt; or &lt;code&gt;--cloud&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;claude-haiku-4-5&lt;/code&gt;; aliases &lt;code&gt;haiku&lt;/code&gt;, &lt;code&gt;sonnet&lt;/code&gt;, &lt;code&gt;opus&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;provider default; no user base URL&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: right"&gt;&lt;code&gt;100&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;max_calls&lt;/code&gt; counts post-dedup backend judgements. &lt;code&gt;0&lt;/code&gt; means unlimited. For a
machine-readable static projection of these registered backends, use &lt;code&gt;ajq capabilities --json&lt;/code&gt;; it does not resolve configured credentials or runtime
asset state. In that projection Ollama has no &lt;code&gt;default_base_url&lt;/code&gt;, because its
runtime URL may come from &lt;code&gt;OLLAMA_HOST&lt;/code&gt; before the documented loopback fallback.&lt;/p&gt;</description></item></channel></rss>