← projects
Rivet / RivetOS

Rivet / RivetOS

Creator & Operator

2025 — present

8-node mesh · 975K+ messages · hybrid memory

RivetOSTypeScriptPostgreSQLpgvectorIncusRustClaudeGrokKimiDeepSeekGLMTelegramDiscordHome Assistant
8-node mesh (7 agents + my desktop), one datahub
975,000+ messages in shared memory
Hybrid search: FTS + trigram + vector (RRF)
Claude Code, Codex, Grok Build, Kimi Code, and Hermes harnesses

What is Rivet?

Rivet is the engineering partner I leave running. Not a chat tab. A set of agents that share memory, tools, and the homelab. The voice stays the same when I swap the model underneath.

RivetOS is the runtime. I wrote it as philbert440/rivetOS. It is not a fork. TypeScript monorepo: mesh deploys, hybrid memory, MCP tools, compaction workers, and harnesses that can be Claude Code, Codex, Grok Build, Kimi Code, or Hermes. We cut a lot of weight on purpose. The newer gateway is a Rust rewrite.

The memory side turned into its own product, RivetHub: the installers and apps that put RivetOS on someone else's machines.

Mesh architecture

Two servers now. The G9 runs the agent containers on Incus. The 8× V100 box runs local inference, and the datahub lives there on its own NVMe: Postgres with pgvector, the compaction and embedding workers, the mesh CA, and the shared files. Nodes talk over mTLS.

  • Seven agent nodes: Claude, Grok, GPT, Kimi, DeepSeek, GLM, and a local node that runs our own models through Hermes
  • My desktop: Claude Code, Grok Build, and Hermes, writing to the same memory

Ship an update with rivetos update --mesh. It isn't done until every node's health check passes.

Hybrid memory

Every harness reads the same store. Messages get embedded and rolled into a DAG of summaries. Search is full-text plus trigram plus vector ANN, fused with reciprocal rank fusion, then a recency boost. IPs, hostnames, and error strings still come back because trigram hits what embeddings miss.

Grok Build capture used to be hook payloads. It now ingests updates.jsonl, the real session log, so replies, tool output, and thinking land in Postgres. That was PR #196. Hermes on the desktop got the same search engine in Python so the harnesses match.

Tools & integrations

Gmail and Calendar through a CLI. GitHub. 1Password. Home Assistant. Web search. Shell on mesh nodes. RivetOS MCP for memory browse and search. Heartbeats look at mail, calendar, and infra. The interesting stuff shows up on Telegram or Discord.

Discord voice uses xAI's realtime API. Telegram voice notes go through local Whisper. Images go to Grok with a reference. Cron and mesh manifests handle backups and deploys.

Pipelines

Rivet does more than answer. A few loops that actually ship:

Build. Spec in Opus, implement in Grok Build or a mesh delegate, review in Opus or a verifier, merge, mesh deploy. EM Kit, this site, and RivetOS go through that. Linear when harnesses drift.

Self-improvement. Compactors and embedders keep memory searchable. Review notes go back into project memory so the next session does not relearn the same lesson. Fix the harness before you fine-tune. Training data is useless if the scaffold lies.

Memory to blog. Walk the summaries in order and you see what happened. Experiments, dead ends, the things we kept. That is supposed to become site updates and builder posts without me rewriting the week from memory.

Rivet in public

Rivet has its own page now: /rivetphilbot — the build-in-public side of the assistant, in its own voice, not mine.