
HOW YOUR FIELD REPORTS
MADE XERJ AUTOINDEX FASTER.
Before the numbers, I owe you an apology. In rc.78 our agentic swarm shipped a change that made every background merge compress stored documents with zstd at level 19, with long-distance matching. It made autoindex about five times slower: a 200 MB bulk test that ran at about 41,000 documents per second on rc.77 managed 5,000 to 14,000 on rc.78 through rc.99. Separately, autoindex split one large folder into 454 small indices, and every search had to open all of them. That was our mistake, and we are sorry for the hours it cost you.
Your field reports, from people and from AI agents, found it very fast. They told us where to look, with numbers, and once the 5 GB reproduction was filed the merge fix was merged about seven hours later, with most of the fixes in this post merged within a day. Below is everything we changed, and a thank-you to every person and every agent that reported. Thank you.
Ivan N
Autoindex and search are faster and leaner now. Your field reports showed us where XERJ had room to get quicker and lighter: large folders that took a long time to index, command-line searches that took tens of seconds, and memory use on small sandboxes. We followed each report to its cause and improved it.
We measured each change on real data, including a 5 GB folder of 146,199 files, and on the performance gate's 1 GB corpus. There, the index now takes 1.80 bytes on disk for each byte of source it holds, down from 3.50. This post explains each improvement in plain terms: where the time and memory went, what we changed, and what you get. It also thanks, by name, the people and the 217 agent field reports that made it happen.
Leaner indexes, lighter memory, fewer indices
These numbers come from the performance gate's 1 GB corpus, comparing the current code with the previous release, rc.99, on the same data, the same machine and the same 15-minute run, and from the measurements behind each change.
On the same run, autoindex moved 29% more data per second than rc.99, and the search node's peak memory was 5% lower. Both runs stopped at the gate's 15-minute limit before indexing the whole corpus, which is why we compare index size per byte indexed. Three of the memory improvements below, 3, 4 and 5, came straight out of an earlier gate run's logs.
Six improvements, explained simply
Some background first. XERJ writes new documents into small files on disk called segments. In the background it merges small segments into bigger ones, because searching a few big segments is cheaper than searching many small ones. A memory governor watches how much RAM the process uses and paces writes so it stays within its limit. Most of these improvements live in those three parts.
Merges use a faster compression level
DONEWhere the time went. Background merges compressed stored documents with zstd at level 19, with long-distance matching over a 16 MiB window. That setting searches far back through the data for repeated bytes: the output is very small, and the write takes a long time. One merge spent 94–107 s encoding its stored documents, where the normal merge level does the same work in 2.4–3.3 s. While a merge runs, memory sits near the limit, so the governor paces new writes, and a 200 MB bulk test indexed 5,000 to 14,000 documents per second. Before level 19 was used for merges, the same test ran at about 41,000 documents per second.
What we changed. Background merges now compress at the normal merge level, the same one used when new documents are flushed. An explicit force-merge still uses level 19, so you can still ask for the smallest possible index when you have time for it.
What you get. Of the six, this one matters most for autoindex on large folders. Ingest no longer waits behind long merges, and neither does the agent waiting for its index.
File checks went from 1,095 ms to 1.1 ms
DONEWhere the time went. Before autoindex writes a file, it asks the index whether that file is already there. The question itself is a fast count. But the search handler also ran a second step after any request that came back with an empty page of results, to suggest values you might have meant. A count request always has an empty page, so every check also ran that step, which reads a sample of the whole index. Each write also reset the result cache, so the next check ran it again. On a 230,000-document index each check took about 1,095 ms, and the total grew with the number of files times the size of the index.
What we changed. The suggestion step now runs only when you asked for results, got none, and the match is known to be empty. The check now takes about 1.1 ms, roughly a thousand times quicker. Its answer is the same as before, including deletes and writes that are not yet committed.
What you get. A large folder makes many of these checks. Saving about a second on each one adds up to hours on a big folder.
CLI search reads only what it returns
DONEWhere the time went. xerj search builds one query for every index in a project. It adds clauses for code fields such as a symbol's name and its definitions. An index of plain documents has no such fields. The full-text engine could not plan a query that named a field it did not have, so it scanned the stored documents instead, decoding each one in full. About 85% of what it decoded was embedding vectors and their companion columns, which the CLI does not show. One 20,000-document segment decoded 716 MB to answer a single query.
What we changed. A clause on a field that is not mapped anywhere now simply matches nothing, and the rest of the query runs on the full-text index as normal. When a stored scan does run, it decodes only the columns the response can show: that segment now decodes 82 MB in 0.16 s, down from 716 MB in 1.1 s. A cold CLI search that took 13.3–15.3 s now takes 1.07 s cold and 0.14 s warm.
What you get. Agents search in loops, so every second saved per query is saved many times over in a task. The smaller decode also leaves more memory free on a small sandbox.
Merges budget for their final write
DONEWhere the memory went. Before a merge starts, the governor reserves memory for it from an estimate based on its inputs, and the merge checks in between steps so it can pause. The final step, which writes the merged segment, came after the last check. It parses the merged documents, builds the column buffers and compresses them while the merged data is still in memory, and that work had no reservation of its own. In one gate run the node reached 3,920 MB under a 3,072 MB cap, and on a later run large merges reached 4.4–4.9 GB about five seconds before each one finished.
What we changed. The write step is now estimated and charged to the merge budget before it starts, and if it would cross the hard limit, it waits. Merges are also reserved on their real size on disk, and parsed copies of documents are released as soon as they have been used.
What you get. The memory cap now covers every step of a merge. That is what lets XERJ sit comfortably inside a container or a small VM next to your agent.
Compaction always makes progress
DONEWhere the time went. When memory is tight, a merge yields so that searches can run first. On a busy search node, searches alone could keep memory near the limit. A merge would start in a quiet moment, reach its first check, yield, and be planned again with the same inputs, because it was already as small as a batch can be. In one window the same 49 MB batch yielded 68 times before any merge finished. Meanwhile the index stayed split into many segments, and each extra segment is one more file for every search to open.
What we changed. Background yields now have a bound. After three yields in a row with no merge finishing, a batch of 64 MiB or less runs to completion, so compaction keeps moving. Larger batches still yield, so the memory cap still applies.
What you get. Segments keep getting merged, so search stays quick as an index grows, and the node gets its memory back after each merge.
semantic_text stores its vectors once
DONEWhere the space went. An index with a semantic_text field kept two copies of its embedding vectors, and every merge and force-merge moved both of them.
What we changed. On a test of about 6,000 documents, storing the vectors once made the segment file 91% smaller, 1,787,081 bytes instead of 20,148,835. The whole index went from 3.67x to 1.63x the size of its source. Force-merge went from 38 s to about 1 s, and the first semantic query from 610 ms to 219 ms. The savings are on disk rather than in RAM.
What you get. Disk is often the tightest budget on a laptop or in a sandbox, and a smaller index is also quicker to merge and to copy.
Smaller improvements landed alongside these. A bulk request is now checked against the memory limit before it is parsed. Memory for merge buffers is accounted for by the governor, and writes resume once memory has dropped a little below the limit, so they flow smoothly instead of switching on and off. A cold search runs its freshness check alongside the search, reads compressed stored data through a buffer, and reads only document identities until it knows which hits make the page.
All of these improvements are merged, and the changelog describes each one. Once your XERJ includes them, to get the smaller dataset layout on a folder you already indexed, run xerj autoindex --fresh on it. Install steps are on the install page.
Speed and size are the promise
XERJ promises search for agents that ingests in the same league as Lucene, aims to keep its index smaller on disk than Elasticsearch, and is light enough to run beside the agent on a laptop or in a sandbox. Every improvement in this post serves that promise: ingest that keeps pace, answers in milliseconds, and memory that stays within its cap.
So we measured the bar. On the same 1 GB corpus and the same 4 vCPU, 16 GB runner, Elasticsearch 9.5.5 ingested 9.05 MiB/s into an index 1.42x the size of its source. Lucene 10.5.1 ingested 25.4 MiB/s with stored fields at 0.78x, and 36.0 MiB/s at 0.30x without them.
| Gate floor, 1 GB tier | Must hold |
|---|---|
| Ingest | ≥ 3.0 MB/s, and ≥ 0.5x Elasticsearch (stretch 0.8x) |
| Index size | ≤ 1.0x Elasticsearch, force-merged |
| Node memory | ≤ 3,072 MB RSS, 0 breaker trips |
| Search latency | p95 ≤ 1,000 ms, max ≤ 2,000 ms, p95 ≤ 1.5x Elasticsearch |
| Correctness | ≥ 90% of queries with hits, ≤ 20 bulk retries |
| Consistency | within 20% of the last release |
Those floors make up a performance gate with three tiers: a 200 MB smoke run, a 1 GB run and a 5 GB pre-release run, on a fixed corpus seed so every run sees the same data. It runs xerj autoindex with default flags, the way you would, on a fresh node with a fixed memory cap, then times uncached searches through the CLI, the API and MCP. A build meets the gate only when it holds every floor: missing any one fails the run and names the floor it missed. The floors live in the repository as the release performance budgets, so changing one takes a reviewed pull request, and loosening one also needs a linked issue that explains why. That is how we hold releases to the bar we measured, and we post each gate run's results openly on GitHub.
28 people and 217 agent reports
Performance work starts with someone saying “this could be faster”, with numbers. Your reports told us where to look, and we reproduced them on our own hardware. Here is everyone who helped since rc.78, people first, then every agent that sent a field report. Thank you, each of you.
The people who reported performance and memory
- Thank you, marcinzanko. Your Delphi field report on Windows, “Search is very slow across many indices, even after indexing finished” (report), described the slow search across many indices that the cap of 32 datasets per folder now addresses.
- Thank you, camen-collab. You and your DeepSeek Harness agent showed autoindex at default workers stalling at 70.9% on a 13,765-file, 1,153 MB repository, with searches failing while it ran (reports 1, 2).
- Thank you, dougchansan. You found autoindex stalling on its last file, a 1.1 MB JSON, on rc.96 and rc.97, and gave us a public repository at an exact commit so we could reproduce it (report).
- Thank you, endjoker. Your WSL2 measurements, a 42.7 MB JSON file that stalled a run for about 50 minutes and ended in memory exhaustion, gave our memory work hard evidence to tune against (reports 1, 2).
- Thank you, Nikan Wystaf. Your autoindex runs on a 16 GB Windows machine with no pagefile, and your field report, kept the small-machine case in front of us while we worked on memory (reports 1, 2).
- Thank you, Peter Etelej. Your sandboxed CVE research showed XERJ serving 1.25 million documents at about 240 MB steady under a 4 GB cap, the small-machine case this work is about. You also measured restoring a single pack under a 2 GB cap, and that is now one of our next memory targets (reports 1, 2).
- Thank you, Tom Villani. You measured remote embedding throughput during autoindex, about 38 inputs per second with at most 4 requests in flight, when the provider could take far more (report), and sent a SWE-bench Lite field report (report).
- Thank you, Naufal Zaky Nugraha. Your field report put numbers on neural ingest cost: a set of seven repositories, about 12.6 MB of trimmed source, took about an hour, while node memory stayed under 1.1 GiB (report).
- Thank you, Gilang Pratama. You measured neural ingest at 60–107 KB/s on a 16 GB laptop, a 256 MB corpus that needed more than three hours, and a finalize-verify step that stalled about 100 s per query (report).
- Thank you, Alessandro Costa. Your Node.js reference-coding report showed a corpus index running into the 7,200 s timeout (report).
- Thank you, Vincenzo Lombardo. You diagnosed slow semantic and hybrid search on FiQA (report), and sent three more field reports on hybrid code search, ES compatibility and query_string parity.
- Thank you, Riwut Libinuko. Your run of 134,838 files, 1.3 million documents in 6 min 12 s, showed memory reaching 12.3 GB against an 8 GB cap, with all 78 bulk retries recovering on their own (reports 1, 2).
The people whose code, reports and tests shaped this work
- Thank you, Ahmet Adaklı. Because of you, the MCP server answers ping and honours cancellation, code search has a request deadline, an unreadable response body is now reported clearly, and post_filter is applied. An agent can now cancel a long call cleanly.
- Thank you, sabrimete. You took an agent's field report and turned both of its findings into improvements: a comma-separated prefix now gets a clear message instead of being joined into a name that matches nothing, and a final verification that runs long is now retried so the run completes.
- Thank you, Jarvis. Your field report measured batch retrieval on a real pack, 49 of 49 labels found and 15.4 ms per batch against 29.5 ms for single calls, which is exactly the kind of number we tune against. You also built
xerj sessions, with personal data scrubbed, and made the node say which data directory it is using and why. - Thank you, Highlander. You ran semantic autoindex through a 768-dimension embedding proxy and noticed that an index could show green while holding 0 documents. Your careful report pinpointed where the embedding width has to follow the backend, and Cristian's change below builds on it.
- Thank you, Yanfei Ren. Your DeepSeek Harness field report gave us real timings, 7 ms to initialize, 2 ms to list tools, 248 documents in 4.1 s and 74 hits in 46 ms, and your feedback on the automatic field-report instructions made them easier for the next agent to follow.
- Thank you, GreenBean. You tested the Kimi CLI config path, marked its README row as tested, and added the hint to
xerj init, so the next person has it right there. - Thank you, ordinary being. Because of you, a write to an alias goes to its write index, every time.
- Thank you, Qiu. Your change loads the installer test fixtures through file URLs, so the installer tests now run on Windows too.
- Thank you, Mario Marcolongo. Your read-only check after each deploy confirms that the pages agents use to discover XERJ still say what they should.
- Thank you, Ömer Taha Öztop. The contributor-agreement exemption job now catches a malformed signature file, thanks to you.
- Thank you, Maurice. You spotted that post_filter was not being applied and told us, and now it is.
- Thank you, Jake Elbirt. You signed on and suggested that
xerj codeshow the part of a long definition that matched, rather than its start. That improvement is now merged. - Thank you, Cristian Groza. Your field report covered two coding agents sharing XERJ over one repository: an unchanged tree re-indexed in 5–6 s, and a GPU embedding proxy ran at 210 passages per second. You signed the contributor agreement, and your change that sizes a
semantic_textfield at the embedding backend's confirmed width is open for review. - Thank you, Joshua Pendragon. Your field report indexed two TypeScript repositories fully offline, in under 2 s each, and found that
xerj deflanded all 4 symbol lookups on the right file and line. Your notes on concept queries show us where search ranking can improve next. - Thank you, Sebastián Lucas. You wrote a field report by hand, with direct queries and no agent loop, on indexing a Spanish R package (report).
- Welcome, Benny Bach. You signed the contributor agreement in this window, and we are glad you are here.
Thank you, agents
AI agents sent us 217 field reports since rc.78: 169 through the field-report endpoint on xerj.org and 48 on GitHub, as 42 field-report pull requests and 6 issues and discussions. We counted each API report once by its stored report ID, so a report mirrored into two issues counts once, and each GitHub report once by its pull request or issue; where an agent filed both an issue and a pull request for the same run, we counted one. Our own test reports are not included. Each agent below is named as it named itself, with the report that mattered most to us. Bold marks a performance or memory finding.
On GitHub, 43 named reports, with the people who ran each agent:
- Thank you, Muse Spark (opencode), run by saurav kumar: found that
sort: _docdid not return documents in arrival order (report). - Thank you, Claude Code (Opus 4.8), run by Alessandro Costa: a reference-coding corpus index that hit the 7,200 s timeout (report).
- Thank you, Claude Code (Opus 5.5), run by Vincenzo Lombardo (4 reports): diagnosed slow semantic and hybrid search on FiQA, plus hybrid code search on mixed mappings, an ES-compatibility dashboard and query_string parity (reports 1, 2, 3, 4).
- Thank you, Claude Opus 5.5 (Claude Code), run by Tom Villani, Ph.D.: localization on SWE-bench Lite (report).
- Thank you, Muse Spark (Muse Code), run by Pierre F. Aubert: a run over 24,000 sources (report).
- Thank you, DeepSeek V4.1 Flash (OpenCode), run by ordinary being: flush parity with Elasticsearch (report).
- Thank you, Hermes (Miriya), run by Riaz Ur Rahaman: 68x less context (report).
- Thank you, Gemini (Antigravity), run by Christian Todie: a field report from the Cygnus project (report).
- Thank you, Devin (SWE-2 Medium), run by Julien: MCP on Windows (report).
- Thank you, DeepSeek V4.1 Flash (OpenCode), run by Hugh Whelan (2 reports): reference coding end to end, and indexing a set of Omarchy repositories (reports 1, 2).
- Thank you, Hermes Agent (glm-5.3-flash), run by niteagent: 18x fewer tokens (report).
- Thank you, Hermes Agent (muse-spark-1.3) with Pi CLI, run by alatar_evenstar: a Rust code probe (report).
- Thank you, omp (Claude Opus 5.5) with Codex workers, run by shyamsivakumar: retrieval for Qabot (report).
- Thank you, Claude Code (claude-opus-5-5), run by Sean Powless: XERJ against grep on the cudarc and candle sources (report).
- Thank you, ZCode (GLM), run by HiChat: a workstation setup (report).
- Thank you, omp (deepseek-v4.1-flash), run by Ömer Taha Öztop: project and reference corpora side by side (report).
- Thank you, DeepSeek Harness (deepseek-flash), run by camen-collab: autoindex at default workers stalled at 70.9% on a 13,765-file repository, with searches failing while it ran (report).
- Thank you, GLM-5.3-Flash Free (OpenCode), run by douglasparedes: indexing a web-scraper project (report).
- Thank you, omniroute GLM-5.3, run by Riwut Libinuko: an Android instrumentation project, with a 39 GB log on a nearly full disk (report).
- Thank you, Muse (Meta personal agent), run by tizerluo: a Chinese-language query that returned three precise snippets (report).
- Thank you, openfox 2.0 with Qwen3.8, run by Olivier HUBERT: a local LLM setup on Windows where XERJ did not detect the RAM (report).
- Thank you, Antigravity (Gemini 3.8 Flash), run by Roedy Rustam: Windows autoindex with the ES-compatible API (report).
- Thank you, Codex (GPT-5), run by 柠檬酱277: an Electron and Vue project on Windows (report).
- Thank you, Claude Code, run by Zach: MCP on Windows (report).
- Thank you, OpenAI Codex, run by Jarvis (5 reports): batch retrieval at 15.4 ms against 29.5 ms for single calls, plus semantic-verify diagnostics, MCP prefix isolation and MCP budget identity (reports 1, 2, 3, 4, 5).
- Thank you, GLM-5.3-Flash Free (OpenCode), run by Nikan Wystaf: autoindex on a 16 GB Windows machine aborting under memory pressure, with WAL replay restoring the data (report).
- Thank you, Claude Code (claude-opus-5-5), run by Ng Kam Woh: a corpus hub contribution (report).
- Thank you, GLM 5.3 Flash (OpenCode), run by Peter Etelej: sandboxed CVE research at about 240 MB steady under a 4 GB cap (report).
- Thank you, DeepSeek Harness (qwen3.8-flash-next), run by Highlander: semantic autoindex through a 768-dimension proxy that left an index green with 0 documents (report).
- Thank you, DeepSeek Harness 44.7.0 (DeepSeek-V4.1-Flash), run by Yanfei Ren: MCP registration timings: 7 ms to initialize, 2 ms to list tools (report).
- Thank you, Claude Fable 5 (Claude Code), run by Cristian Groza: two coding agents sharing XERJ over one repository (report).
- Thank you, Grok Bot, run by Joshua Pendragon: code search for TypeScript quality-gate CLIs (report).
- Thank you, Claude Code, run by Mahir Gül: log search that was not yet useful for troubleshooting (report).
- Thank you, OpenCode coding agent, run by Naufal Zaky Nugraha: neural ingest cost as the main friction (report).
- Thank you, devin/swe-2, run by Gilang Pratama: neural ingest at 60–107 KB/s and a finalize-verify stall (report).
Through the xerj.org API, 162 named reports, grouped by the name each agent gave:
- Thank you, Composer (29 reports): from one home-automation workspace:
xerj_searchfound the UPS outage notes straight away (report), and an incremental resume skipped new files until--fresh(report). - Thank you, Grok 4.7 / grok-4.7 (18 reports): a stale passage still ranked above the current code (report), and an alias search missed call sites that ripgrep found (report).
- Thank you, Grok / grok-build (2 reports): registered XERJ as a shared workspace skill (report) and used a docs index to find a typo and an overgrown AGENTS.md (report).
- Thank you, Gemini 3.8 Flash / gemini-3.8-flash (9 reports): clean installs on Windows and macOS, a project autoindexed in 4.1 s (report), and a search over a folder that was never indexed returning 0 hits with no hint (report).
- Thank you, Gemini Flash:
xerj searchandxerj deffound exact symbols in a web codebase (report). - Thank you, gemini-2.5-pro: a smooth autoindex of a multi-app suite, 922 records (report).
- Thank you, Google Antigravity (gemini-3.8-flash) / omp: the Windows binary stops with an illegal-instruction error on an older Ivy Bridge CPU (report).
- Thank you, Antigravity / Gemini Pro: short Markdown files with YAML front matter were read as YAML, so their text was not searchable (report).
- Thank you, Gemini 4 Argon (High):
corpus addrejected a Windows drive path that autoindex accepts (report). - Thank you, GPT-6 (7 reports): functions inside inline
<script>blocks were not extracted (report), and orphan indices from an aborted rebuild could not be removed by root (report). - Thank you, Codex GPT-6 / GPT-6 Codex (2 reports): indexed a Next.js frontend with its reference sources, 1,901 records (report), and found the right page components by definition (report).
- Thank you, GPT-6.1 Sol / openai-codex/gpt-6.1-sol (8 reports): multi-term definition-first queries over-ranked one-word symbols (report), an exact symbol query returned the wrong class on Windows (report), and watch-mode indexing kept a project fresh through edits and renames (report).
- Thank you, GPT_6_SOL via MyFlicker: neural mode blocked indexing, and the install needed a pinned version (report).
- Thank you, OpenAI GPT-6.1: used XERJ for research on agent-assisted coding and design-system guidance (report).
- Thank you, gpt-5 codex / Codex GPT-5 (5 reports): cross-repository migration analysis where project indexes were precise and the reference corpus had no close pattern (report), and a mobile security audit with stable file:line hits (report).
- Thank you, gpt-5 (2 reports): project retrieval was precise and reference search useful but noisy (report).
- Thank you, Codex / OpenAI Codex (5 reports): a merge panic on rc.97 and side-car publish failures on rc.98 during broad Windows autoindex runs (report), and unclear naming between managed corpora and autoindex datasets (report).
- Thank you, Claude Sonnet 5.5 / claude-sonnet-5-5 (5 reports): mapped a 220,000-file Windows drive with a dry run (report) and indexed 21,903 documents from 2,377 files in 42 s (report).
- Thank you, Claude Opus 5.5 / claude-opus-5-5 (4 reports):
xerj defanswered in about 0.15 s on a React repository (report), and hits gave only a passage start line, not the line of each match (report). - Thank you, claude-opus (2 reports): graph-mode re-indexing failed closed on added and deleted files (report).
- Thank you, claude-opus-4-6: the reference-coding lifecycle end to end: resumable, fast indexing (report).
- Thank you, claude-opus-4-5 (subagent): the hub had no JavaScript charting packs yet (report).
- Thank you, pi (claude opus 4.5 coding agent): MCP tools returned 503 when
ALL_PROXYwas set, because 127.0.0.1 was not bypassed (report). - Thank you, claude: definition-first search diagnosed a knowledge-base evaluation that scored zero (report).
- Thank you, Claude Code (WorkBuddy): lexical mode worked out of the box over FastAPI, Starlette, Flask and HTTPX corpora (report).
- Thank you, Qoder Desktop (2 reports): a semantic query over a wildcard failed when some indices lacked the field (report), proxy-embedding runs could not resume (report), and search gave no hint that an index was stale (report).
- Thank you, DeepSeek Harness (deepseek-flash, deepseek-v4.1-flash, DeepSeek-V4) (6 reports): an 8 GiB memory tier stuck in a breaker loop, with 0 documents indexed for minutes on a 318 MB corpus (report), a file vanishing mid-scan aborting a Windows run (report), and backup copies crowding the top results (report).
- Thank you, DeepSeekRuntime (dsh) · cn:deepseek-v4.1-flash: memory writes on a near-full disk failing with an unclear error, plus two documentation fixes (report).
- Thank you, DeepSeek V4.1 Flash (OpenCode, T3 Code, Free) (8 reports): re-indexing was idempotent, 15,674 documents in 105 s (report), an OpenAI-style
/v1embedding URL returned 404 (report), andautoindex maprejected a positional folder (report). - Thank you, deepseek-local/DeepSeek-V4-Flash_Local: a 67 MB numeric spreadsheet tripped the 512 MB query-memory breaker (report).
- Thank you, MiniMax M3.1 Flash (OpenCode, MiniMax Code, omp) (7 reports): deleting a 500 MB index near the memory cap wedged the node (report), and 2,053 project files became 30,209 records in one clean run (report).
- Thank you, MiniMax-M3: Next.js sources under bracketed route folders got no code index on Windows (report).
- Thank you, MiniMax-M2.7-highspeed (Hermes Agent): indexing at 2,047–8,128 documents per second and search at 82 ms p50 (report).
- Thank you, mimo-v2.6-pro (2 reports): autoindex stalled about 2.5 minutes on a 410 KB package-lock.json (report).
- Thank you, Step-5-Preview / WorkBuddy Step-5-Preview (2 reports): a wildcard refresh hung for 300 s and more while merges were pending, stalling autoindex finalize (report), and a runaway 65-minute search with no timeout (report).
- Thank you, GLM-5.3 (2 reports):
.sqlschema files were skipped as junk (report), and corpora built from git repositories had no way to follow upstream (report). - Thank you, GLM-5.3-Flash (ZCode) (2 reports): set up reference coding, and showed the hub had no quant-research coverage yet (report).
- Thank you, GLM-5.3-Flash (OpenCode): empty files were listed as duplicates in the autoindex plan (report).
- Thank you, GitHub Copilot (glm-5.3-flash): map and semantic search worked well on prose, while a plain-string search returned 400 (report).
- Thank you, opencode (zai-glm-5-3) (2 reports): a whole file family junked without a warning (report), and unknown flags printing help instead of an error (report).
- Thank you, glm-5.3-oc (pi coding agent):
corpus addskipped a repository left empty by an interrupted clone (report). - Thank you, qwen3.8-flash-next (Claude Code subagent, OpenCode) (5 reports): finalize-verify stalls under concurrent builds (report), and a self-verifying install that ran as a systemd service out of the box (report).
- Thank you, y_qwen3.8: explored the MCP tools: field maps and memory recall worked (report).
- Thank you, Hermes agent (Swift-Qwen3.8-Flash-Next): indexed nine repositories and four mirrored doc sites cleanly (report).
- Thank you, menlu/muse-spark (Hermes Agent): per-repository prefixes and precise file:line search on a multi-repo workspace (report).
- Thank you, Muse Spark 1.3 Contributor: audited a chapter's calculation chain against its app and SWMM, with precise matches (report).
- Thank you, nemotron-3.5-super-vl-free: indexed four repositories, about 137,000 documents, for reference coding (report).
- Thank you, pi-coding-assistant: cross-checked our recipe page against the CLI help (report).
- Thank you, GitHub Copilot: located a service's DTO, interface and implementation in one search (report).
And 12 more agent reports sent anonymously: 7 through the API without an agent name, and 5 on GitHub (a report by Hamad Ebrahim, a report by Daniel Lan, a report by Riwut Libinuko, a report by Tom Villani, Ph.D., a report by endjoker). Thank you too, whoever you are.
What we are improving next
- Restoring a single pack comfortably within a 2 GB memory cap.
- Sizing a
semantic_textfield at the embedding backend's confirmed width, now in review. - Meeting every floor of the performance gate, with ingest speed and search-node memory first, and posting each run's results.
The changelog lists every change with its pull request.
Tell us what to make faster next
If XERJ is faster for you, or if there is a place you would like it quicker, tell us with numbers: what you indexed, how big it was, how much memory the machine had, and what you waited for. A short field report is how most of this work started.
- Join the community, the field report
- Contributing
- Issues
- Discord
- GitHub
- X