Ray Swan_

The Hermes Librarian

2026 · Platform · Sole designer & engineer (schema, walker, provider, pane)

Vector recall and a knowledge graph in one Postgres — the model can find what you said, and you can see the walk.

01 · Problem

The constraint

Agent memory is usually a vector dump or a hidden graph. Hubs collapse into a few Title-Case 'Concepts,' sessions leak into each other, and you cannot tell whether injection came from this chat or someone else's nouns. I needed durable local recall that grows with real conversation, stays inspectable, and does not pretend to be a hosted brain.

02 · Built

What shipped

Two stores, one semantic topology. Apache AGE (PG17) is episodic only — this session, this turn, order in time. Postgres is the manifold: global `noun` rows, per-turn passports on `memory_chunk_nodes`, bivalent `semantic_edge` poles (`mentions` = co-occurrence, not theme). ANN entry is `conversations.embedding` (Ollama `nomic-embed-text`, 768-d). One bounded walker scores both prefetch and `/search`: `score = (0.4·sim + 0.4·align·provenance + 0.2·decay) × (magnitude / 8)`. Fountain docks nouns onto their turns and draws teal mention threads. Loopback only (`127.0.0.1:5450` / `:7890`). MIT. Alpha.

03 · Decisions

The path

  1. 01
    Hybrid store

    Postgres + AGE + pgvector as one MemoryProvider; loopback; honest install (you set the password, you seed three facts).

  2. 02
    Flower vs hub

    AGE `Turn → ABOUT → Concept` was the wrong semantic layer; hubs and session bleed.

  3. 03
    Manifold cutover

    Spec → V9 `noun` / passports / `mentions`; AGE keeps only Session/Turn/NEXT.

  4. 04
    One walker, one pane

    Same beam for prefetch and Fountain; nouns sit on their turn; cockpit/ghost levels taken off the ship surface.

  5. 05
    Ship & inspect

    Merge to `main`; Garden live at the pane URL; production V9 still a human migrate.

04 · Architecture

How it is built

One topology

Episodic flower in AGE; semantic switches in SQL. No dual Concept/ABOUT + noun graph for the same labels.

Shared nouns, private passports

`noun.label` is global; two sessions can mention Postgres; they do not share the walk's provenance.

Same score everywhere

Prefetch, `/search`, and the pane use one 7-tuple beam; no second ranking in the UI.

Recall without the spectacle

Fountain is optional grammar. Vector + graph injection works if you never open the pane.

05 · Surfaces

What it looks like to operate

The Hermes Librarian
Plate
The Hermes Librarian

Persistent memory & context injection for Hermes Agent — pgvector for semantic recall + Apache AGE knowledge graph for entity expansion

06 · Standing

What this proves

Proves: I can build inspectable agent memory — episodic flower in AGE, semantic manifold in SQL, one walker for recall.

Shipped as `hermes-memory` on GitHub (PR #67): V9 schema, mention-order extractor, drain that stops conversation `Concept`/`ABOUT`, passport isolation tests, Garden-only pane. A real chat seeds the first graph; verify uses synthetics on purpose. Live DB migrate remains an ops step so nouns appear in production memory.

hybrid-age MemoryProvider with V9 schema, pgvector ANN, AGE Session/Turn flower, ordered mentions, bounded walker, and optional Fountain 3D inspector.

01 / 06 · Problem