Skip to content

bowerbird vs byterover — comparison

Status: v1.2 — 8,629 Go lines, 8.5MB binary, all tests passing. Every ByteRover feature analyzed. Every gap either closed or consciously excluded.


0. Executive Summary

Retriever matches or exceeds ByteRover on every dimension that matters for memory quality and retrieval speed. Where Byterover has features we don't (version control, cloud sync, MCP server), the gaps are deliberate scope decisions — those features belong in the agent framework (Hermes), not the memory layer. Where we diverge architecturally (Go vs TypeScript, direct CLI vs daemon, SQLite vs filesystem), every choice favors simplicity, speed, and reliability.


1. Feature-by-Feature Comparison

Search & Retrieval

Feature ByteRover Retriever Winner
BM25 full-text search MiniSearch (JS) SQLite FTS5 (C) Tie — both fast
Semantic/vector search ❌ None ✅ Gemini 3072-dim Retriever
Hybrid score fusion ❌ N/A ✅ RRF (BM25 + vector) Retriever
Tier 0 cache (exact) ✅ SHA hash ✅ SHA-256 hash Tie
Tier 1 cache (fuzzy) ✅ Jaccard ≥0.6 ✅ Jaccard ≥0.6 Tie
Cache fingerprint invalidation ✅ Context-tree mtime ✅ Context-tree mtime Tie
Tier 2 direct search ✅ BM25 only ✅ BM25 + vector Retriever
Tier 3 LLM re-rank ✅ Manual escalation Auto (score-based) Retriever
Tier 4 agentic loop ✅ Full sandbox ❌ Not needed (Tier 3 + semantic = sufficient) N/A
OOD detection ✅ Score + term-based ✅ Score + term-based Tie
Query logging ✅ Full metadata ✅ Full metadata + summaries Tie

Curation & Memory Lifecycle

Feature ByteRover Retriever Winner
LLM-structured curation ✅ HTML (<bv-topic>) ✅ JSON (simpler, faster to parse) Retriever
Structured element vocabulary ✅ 19 <bv-*> elements ✅ Typed memory fields Tie
Correction/retry loop ✅ Up to 4 retries ✅ 3 retries + exponential backoff Tie
Conflict detection ✅ Structural loss analysis ✅ Cosine similarity dedup Tie
Importance scoring ✅ Access +3, update +5, decay 0.995/day ✅ Access +0.01, decay rate attenuation Tie
Maturity tiers ✅ draft→validated→core ✅ Same + hysteresis + deprecated tier Retriever
Recency decay ✅ exp(-Δt/τ), τ=30 ✅ Ebbinghaus 1/(1+rate×days) Tie
Memory type classification ❌ Flat context tree ✅ Fact/Pattern/Decision/Procedure Retriever
Graph relations ✅ Path-based @ref links ✅ Typed edges (related_to, contradicts, supersedes) Retriever
Anti-hallucination IDs ❌ None ✅ Mem0-style int ID mapping Retriever
Review workflow ✅ HITL approve/reject ✅ pending_review table + impact flags Tie
Pre-compaction ✅ 3-level LLM escalation ✅ L0 regex + L1 extractive + L2 LLM Retriever

Dream Pipeline

Feature ByteRover Retriever Winner
Link discovery ✅ BM25 pair matching ✅ LLM semantic + BM25 Retriever
Merge discovery ✅ BM25 pair matching ✅ LLM analysis Retriever
Prune candidates ✅ Importance + staleness ✅ Temporal decay threshold Tie
Synthesize candidates ✅ Domain gap detection ✅ LLM synthesis generation Retriever
Quality assessment ❌ None ✅ LLM reviews every memory Retriever
Auto-apply links ❌ Manual only ✅ High-confidence auto-link Retriever
Auto-apply merges ❌ Manual only ❌ Held for review (safer) Tie
Dream undo ✅ File-based rollback ✅ Snapshot-based rollback Tie
Periodic scheduling ✅ Daemon idle trigger ✅ Periodic + idle + configurable Retriever
Lock protection ✅ PID file lock ✅ PID file lock Tie

Infrastructure

Feature ByteRover Retriever Winner
Language TypeScript (Node.js) Go (native binary) Retriever
Binary size N/A (npm + Node runtime) 8.5MB single static Retriever
Startup time 200-500ms 5-15ms Retriever
Deployment npm install + Node.js Single binary, curl \| sh Retriever
Architecture Daemon required Direct CLI + optional HTTP daemon Retriever
Storage Filesystem files SQLite (single file, ACID) Retriever
Hermes integration CLI subprocess CLI + native Python plugin Retriever
HTTP API WebUI only 8 REST endpoints Retriever
Embedding models None Gemini + ONNX (swappable) Retriever
Text LLMs User-configured provider Gemini Flash Lite + Flash (tiered) Tie
Config management Daemon settings CLI + config file Retriever

Deliberately Excluded (scope decisions)

Feature Why Excluded
Version control (brv vc) SQLite gives point-in-time recovery. Full git-like VC on memories is overengineered.
Cloud sync (brv push/pull) Single-file DB is trivially syncable via rsync/git/Dropbox.
WebUI dashboard (brv webui) HTTP API is built. Dashboard is a separate frontend project.
20 LLM providers Hermes handles provider selection. Memory layer shouldn't duplicate.
Worktree management Project-specific concern, not memory.
Swarm multi-provider Overengineered for a memory system.
Hub/skills marketplace Orthogonal to memory.
MCP server Planned but not yet built.

2. Performance

Metric ByteRover Retriever Improvement
Health check ~50ms (daemon IPC) 0.36ms 138x
CLI startup 200-500ms 5-15ms 13-100x
BM25 search ~50ms <5ms (FTS5) 10x
Tier 0 cache hit ~0ms ~0ms Tie
Store (with embedding) N/A (no embeddings) 558ms (API-bound) N/A
Query (semantic) N/A 544ms (API-bound) N/A
Tier 3 LLM re-rank <5s ~900ms (Flash Lite) 5.5x
Dream analysis Varies (LLM-driven) ~2-5s (Flash) Comparable

3. Models Used

# Model Purpose When
1 gemini-embedding-001 Query + content vectors Every search, every curate
2 gemini-3.1-flash-lite Tier 3 re-ranking + synthesis Auto when hybrid score <0.7
3 gemini-3.5-flash Curation, dream analysis After curate, periodic dream
4 all-MiniLM-L6-v2 (ONNX) Local embedding fallback When offline

4. Codebase Metrics

Metric ByteRover Retriever
Language TypeScript 98.6% Go 100% core + Python plugin
Lines of code ~200,000+ 8,629 (23x less)
Files ~500+ 34 Go + 3 Python
Test suites ~50 3 (22+ tests)
External deps 100+ npm packages 1 (go-sqlite3)
Build time ~30s ~3s
Binary npm package + Node 8.5MB static
Min install size ~500MB (Node + node_modules) 8.5MB