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. |
| 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 |