Buoya News Agent.
Buoya News Agent is an open-source, single-binary intelligence agent built in Rust that ingests news, research, and financial market telemetry into a local SQLite database. Engineered with zero recurring infrastructure costs, it runs local BGE text embeddings via sqlite-vec for vector search and orchestrates an autonomous LLM tool-use loop accessible through either a keyboard-driven Ratatui terminal UI or an Actix Web REST and Server-Sent Events (SSE) server.
- Role
- Systems Architect · Rust & AI Engineer
- Domain
- Local-first AI agent · Embedded semantic search · Terminal UI · Financial & AI intelligence
System at a glance
What the system does
Local vector search via sqlite-vec
Autonomous background feed ingestion
Keyboard-driven Ratatui terminal UI
Actix Web REST & SSE streaming server
Architecture flow
From intent to verified state.
- 01
Scheduled background workers fetch crypto, DeFi, and AI feeds alongside CoinGecko and DeFiLlama market snapshots.
- 02
Articles are deduplicated via URL unique constraints in SQLite and embedded locally using BGE-small-en-v1.5.
- 03
The sqlite-vec extension stores 384-dimensional embeddings, enabling sub-millisecond vector cosine similarity queries.
- 04
User queries trigger an autonomous LLM loop that dynamically executes up to 5 tool calls per turn against local data.
- 05
Responses stream token-by-token to the Ratatui TUI or across Server-Sent Events (SSE) to connected web frontends.
01 / Local-first storage
Embedded vector search and zero recurring infrastructure cost
Running embedding inference and vector indexing directly inside the binary without cloud dependencies.
Local BGE embeddings with fastembed
Uses ONNX-accelerated BGE-small-en-v1.5 models running entirely on-device, generating 384-dimensional embeddings without external API latency or costs.
sqlite-vec vector indexing
Stores and queries embedding vectors inside SQLite using cosine distance, eliminating the operational overhead of external vector databases.
Deduplicated article ledger
SQLite schema maintains normalized records across sources with transactional upserts and one-shot backfill for retroactive vector indexing.
02 / Ingestion pipeline
Continuous multi-source data collection & event broadcasting
Resilient background fetching across disparate syndicate feeds and financial APIs.
Multi-source RSS aggregation
Parses syndicated feeds across crypto media, foundation blogs, security feeds (e.g. rekt.news), and AI labs with graceful error recovery.
Daily market snapshot telemetry
Ingests structured snapshots from CoinGecko, DeFiLlama chain TVL, and the Crypto Fear & Greed index into structured relational tables.
Lossless internal broadcast
Uses Tokio broadcast channels to fan out newly ingested articles to background connectors without delaying the primary ingestion cycle.
03 / Autonomous reasoning
Deterministic tool registry & source-grounded LLM loop
Guiding models to verify claims against local data before producing final answers.
Typed tool registry
Defines tools (semantic_search, search_articles, get_market_snapshot) once in Rust, deriving both OpenAI function schemas and transport-neutral interfaces.
Multi-round tool execution
Drives an autonomous agent loop resolving up to 5 tool invocations per turn, feeding intermediate data back to the model before generating the final reply.
Source-grounded citations
Prompts and enforces deterministic citation of article titles, URLs, and timestamps, preventing hallucinated market or security claims.
04 / Delivery surfaces
Ratatui terminal UI and Actix Web streaming daemon
Multiple interaction surfaces powered by a shared core domain handle.
Ratatui TUI experience
Multi-session chat interface with Markdown rendering, inline tool execution indicators, session history sidebar, and full keyboard navigation.
Actix Web REST & SSE server
Production-ready HTTP daemon providing session management, search endpoints, OpenAPI 3.1 specs via Utoipa, and SSE token streaming.
Telegram push connector
Opt-in background worker that pushes category-filtered breaking news alerts directly to designated Telegram channels.