**Bead** `43685e36-80bb-44dc-94be-89ea1c2fa205` · [canonical URI](https://redfish.acequia.io/guerin/.agents/43685e36-80bb-44dc-94be-89ea1c2fa205/) · discussion: Talk: Browser + Node Vector & RAG Search This page is the wiki facet of a [bead](https://redfish.acequia.io/guerin/.agents/); the bead is the source of truth.
## Identity - **URI:** https://redfish.acequia.io/guerin/.agents/43685e36-80bb-44dc-94be-89ea1c2fa205/ - **Local origin:** `sites/redfish.acequia.io/guerin/.agents/43685e36-80bb-44dc-94be-89ea1c2fa205/` - **GUID:** `43685e36-80bb-44dc-94be-89ea1c2fa205` - **Created:** 2026-06-10 - **Currently animated by:** Claude (CE / Claude Code extension, writer modality) - **Invoked by:** Stephen (parciante)
## Motivation (Why a GUID) This bead exists to host an ongoing **thread of work**: comparing and selecting an **asynchronous query engine for vector + RAG search over the Markdown commons** — one engine that runs **isomorphically in both Node.js (local hard drive, VS Code MCP server) and the browser (Browser DAV surface over OPFS / IndexedDB / Service Worker Cache)**. The driving problem: the same `.md` space (agent-to-agent docs, skills, MCP configs) is mirrored locally and online, and is also resident in the browser dev surface's web-native storage. Stephen wants AI agents — Claude/Gemini in VS Code, and agents inside the browser surface — to **semantically search their own Markdown commons**, with the *same* search logic compiled to both runtimes. Because the engine sits behind a web server with **many concurrent agents querying it**, single-writer / synchronous-locking engines (DuckDB-WASM in particular) are a structural mismatch. The thread evaluates async, memory-first, document-native alternatives — **Orama** is the leading contender. This bead gives that comparison a stable URI-space distinct from the DuckDB storm-pipeline work in bead [`1c0f5851-d7f5-4ac4-846a-09b71feb82dc`](https://redfish.acequia.io/guerin/.agents/1c0f5851-d7f5-4ac4-846a-09b71feb82dc/), which uses DuckDB on both ends for *analytical* querying — a different use-case from this real-time, high-concurrency, document-indexing one.
## Mechanism (What this bead does) - **Hosts** the engine-comparison work: criteria, candidate engines (Orama, DuckDB-WASM, LokiJS/NeDB-style, pure JSON/B-tree index), trade-off analysis, and eventual recommendation + worked code. - **Ingests** the seeding Gemini conversation (the external exploration that prompted this thread) as provenance in `artifacts/`. - **Does NOT** host the actual production search-daemon implementation yet — that belongs in a deploying site path once the engine is chosen; this bead is the decision-and-design workshop. - **Does NOT** duplicate the DuckDB storm-pipeline skill; it *references* it as the contrast case.
## Folder Layout ``` 43685e36-80bb-44dc-94be-89ea1c2fa205/ ├── about.md # this file ├── uploads/ │ └── README.md # inbound dock (deposit protocol) └── 2026-06-10/ ├── notes/ │ ├── 00-orientation.md # READ FIRST — frame, candidates, criteria │ └── engine-comparison.md # working comparison: Orama vs DuckDB-WASM vs JS-native ├── skills/ # empty (no extracted skills yet) ├── chats/ │ └── 2026-06-10-browser-node-vector-rag-search.md # verbatim session log └── artifacts/ └── gemini-share-ed5cf391cad7.md # captured seeding Gemini conversation (provenance) ```
## Session Log - **2026-06-10 (open, Claude/CE):** Bead opened via `/start-bead`. Seeded with the Gemini share conversation `ed5cf391cad7` (captured via the `capture-shared-chat` skill, 14 turns) placed in `artifacts/`. Wrote orientation note and engine-comparison note from that conversation. No engine selected yet — comparison is open. Orama (`@orama/orama`) named as leading contender; Transformers.js (`@xenova/transformers`) + `gray-matter` named as the companion embedding/parsing stack.
## Modus Operandi (How to interact) 1. **Read order:** `about.md` → `2026-06-10/notes/00-orientation.md` → `2026-06-10/notes/engine-comparison.md` → `2026-06-10/artifacts/gemini-share-ed5cf391cad7.md` (the raw source). 2. **New working concepts** (criteria refinements, additional candidate engines, benchmark notes) go in `2026-06-10/notes/` (or a later dated `notes/` folder). 3. **Reusable capabilities** (e.g. an ingestion/indexer skill, an isomorphic-adapter pattern) go in `skills/`. 4. **Chat log** is written incrementally in `chats/`, verbatim user prompts. 5. **Cross-bead references** use absolute `https://redfish.acequia.io/...` URIs. 6. **Do NOT** write into `guerin/notes/`, `guerin/skills/`, or any global tree — only this bead's subdirectories.
## Capabilities - Hosts the **async query-engine selection** for the Markdown-commons search problem. - Can be cited for: the isomorphic Node+browser search-daemon architecture, the case against DuckDB-WASM for high-concurrency document search, and the Orama + Transformers.js + gray-matter candidate stack. - Does **NOT** produce: a deployed search service, embeddings infrastructure, or the MCP server itself (those are downstream of the decision recorded here).
## Lifecycle - **Energization:** charged by Stephen's active comparison work and by any other bead that cites the engine decision (e.g. a future MCP-server bead, or the Browser DAV surface work). - **Apoptosis:** fades once an engine is selected, the decision is recorded as a durable note/skill, and the production implementation has moved to its own deploying path — at which point this bead becomes a citable archive of *why* that engine was chosen, not active work.
## Limitations - This bead is **NOT** the implementation; it is the decision workshop. - The seeding analysis is partly from a Gemini conversation — its claims (e.g. DuckDB HNSW memory behavior, Orama footprint) are **candidate assertions to verify**, not established benchmarks. Treat them as hypotheses to test, not facts. - Vantage-relative: written from the "isomorphic single-engine" framing. A different framing (separate engines per runtime, or an external vector service) would reorganize the comparison.
## Related beads - [`1c0f5851-d7f5-4ac4-846a-09b71feb82dc`](https://redfish.acequia.io/guerin/.agents/1c0f5851-d7f5-4ac4-846a-09b71feb82dc/) — Storm Events app + the **DuckDB storm pipeline** skill (DuckDB-WASM in-browser query over Parquet). The *contrast case*: analytical querying where DuckDB fits, vs this bead's real-time high-concurrency document search where it does not. - [`.agents/beads.md`](https://redfish.acequia.io/guerin/.agents/beads.md) — canonical bead protocol. - Browser-as-storage frame: [`.ai/browser-hosting.md`](https://redfish.acequia.io/) (OPFS / IndexedDB / Service Worker Cache as the browser storage layer this engine must run against).
## References (bead cross-links) - Bead: Storm Events Build · [canonical](https://redfish.acequia.io/guerin/.agents/1c0f5851-d7f5-4ac4-846a-09b71feb82dc/)
See all: Beads