supragnosis

supra (above)  +  gnosis (knowing)

Portable memory
for AI agents.

Your agents' memory is trapped: one vendor, one machine, no record of where any of it came from. supragnosis hands it back - an embedded, file-based knowledge server in Rust where agents shed observations as a by-product of work, the knowledge travels between your machines, tools and team, and every claim arrives carrying who said it, on what basis, and how far to trust it. Humans govern what becomes canon. Any MCP client, any host, any workspace.

install curl -fsSL https://supragnosis.dev/install.sh | sh
  • v0.4.0
  • Rust
  • MIT OR Apache-2.0
  • macOS arm64 / x86_64
  • Linux x86_64 / arm64
  • macOS desktop app

01 / agent-first

Agents build it. Humans govern it.

agents

Agents write

Knowledge management dies the moment it becomes separate labor - so here it is a by-product of work. While your agents code, debug, and decide, they shed observations through one low-friction tool: free text plus whatever structure they can already offer. No forms, no curation shift.

agents

Agents induce the schema

No ontologist draws the taxonomy up front. Unknown knowledge lands as loose concepts, patterns harden with use, and agents promote them through define_type - every type with a mandatory plain-language definition. The workspace map keeps score of what is said together, so the next type worth naming surfaces on its own.

humans

Humans supervise

Ingest is free; canon is governed. Entity merges, trust promotions, and vocabulary changes travel through PR-like proposals that a human reviews in the curation console - and the tier a verdict may grant depends on the surface it arrives on, so an agent-cast verdict cannot reach human-confirmed.

02 / guarantees

Three guarantees, held everywhere.

Assertions, not facts

Every answer can say where it came from. The log never stores "X is true" - it stores who observed X, acting for whom, when, with what confidence. Belief is computed on top by a replaceable policy, so changing whom you trust recomputes the belief from the same log.

Supersede, don't delete

Nothing your agents learn is ever lost. Corrections supersede rather than erase, contradictions surface as signals instead of being silently resolved away, and forgetting only demotes recall - the log is eternal; only attention is finite.

Deterministic core, probabilistic edge

No model ever judges your knowledge. LLMs and embeddings extract and widen recall - they draft, they never decide. Everything that commits is deterministic, so the graph is correct with no model attached at all, and every node holding the same log holds the same graph.

The name is the design: observations that mention the same things leave a second-order structure behind - knowledge about the knowledge. That meta layer (supra + gnosis) is what the workspace map shows, and what curation reads when it proposes the next merge or type.

03 / how it works

From observation to ontology.

The log is the source of truth. Delete the graph, replay the log, and you get the same graph back - on any node, in any topology.

host A - an agent sheds an observation mid-task
# one observe call, free text plus whatever
# structure the agent already has
observe {
  "content": "Replaced Cozo with redb: of nineteen
              query shapes exactly one was recursive
              and none used time travel.",
  "source_ref": "docs/architecture.md",
  "on_behalf_of": "ashon",
  "confidence": 0.9,
  "entities": [
    { "name": "redb", "type": "Tool" }
  ],
  "relations": [
    { "from": "supragnosis-store",
      "type": "depends_on",
      "to":   "redb" }
  ]
}
host B - weeks later, a different agent recalls it
search_knowledge {
  "query": "why redb and not a datalog store?"
}

# the hit comes back with its receipts:
#   the original text, plus who observed it,
#   acting for whom, from which source, when,
#   at what trust tier - and the mode label
#   (hybrid vs keyword) that says which recall
#   surface answered.

# hits carry stable entity ids - pull the thread:
get_entity { "id": "9f41..." }   # id from the hit
traverse   { "id": "9f41...", "max_depth": 2 }

04 / the viewer

Watch your agents learn.

supragnosis viewer - http over ~/.supragnosis/viz.sock
The live ontology viewer: a force graph of entities and relations
                  with labeled co-occurrence hulls, a legend of node and edge types
                  on the left, and the curation console on the right showing an open
                  entity_merge proposal with accept and reject buttons.
A seeded workspace in the live viewer: entities land as agents observe, hulls shade co-occurrence contexts, and an entity_merge proposal - two spelling variants of the same store - waits in the curation console for a human verdict. All served on an owner-only unix socket.

05 / capabilities

Small binary, serious semantics.

Hybrid recall

Ask in your own words - "why redb and not a datalog store?" - and the fragment comes back. Vector search over local ONNX embeddings (fastembed) fuses with keyword search, deterministically ranked and mode-labeled so you know which surface answered. Without an embedder it degrades to keyword. No cloud calls either way.

Provenance and trust

Every fact carries its delegation chain (who, acting for whom), workspace, and trust tier - and trust is the receiver's evaluation, never self-declared. Every derivation records the observations it came from, so a contaminated source's tree is traceable - bulk recall over that lineage is specified and lands with M5.

Two time axes

"True until last month" is a first-class statement. Every relation can carry the interval it held in the world, separate from when the system learned it - so retroactive knowledge is captured the moment it arrives, and nothing is lost while the time-travel query logic (M3c) lands.

Absence is not falsehood

An open-world substrate: a miss comes back as {found: false}, never conflated with "false", so an LLM client cannot misread missing knowledge as negation. Asserting a negation explicitly is the open half: it is what M3c's time-travel queries wait on.

Embedded, file-based

One process, one directory. A pure-Rust embedded B-tree (redb) holds rows, graph edges, and vectors under ~/.supragnosis/redb. No external database to run, and no C++ toolchain to build.

Proposal gate

Ingest is free; promotion is gated. Changes to canon - tier promotions, entity merges, T-Box edits, recalls - flow through PR-like proposals, and a proposal is itself an observation: signed, replayable, reviewed in the curation console.

Live ontology viewer

A force-graph viewer streams entities, relations, proposals, and sync chatter live over SSE - served on an owner-only unix socket, never a TCP port. The macOS desktop app is a thin tray-resident shell over the same socket. Watch your agents learn.

Self-managed daemon

start / stop / status / restart with pidfile and logs under ~/.supragnosis - or let Homebrew keep it running with brew services. stdio for MCP-client children, loopback streamable HTTP for everything else.

06 / mcp surface

Speak MCP, remember everything.

register with your MCP client
# stdio: the client launches supragnosis
# as a child process
claude mcp add supragnosis \
  -- $(command -v supragnosis)

# or point at the background daemon over HTTP
supragnosis start
claude mcp add supragnosis \
  --transport http http://127.0.0.1:7373/mcp \
  --header "Authorization: Bearer $(cat \
    ~/.supragnosis/mcp.token)"
observe
load knowledge: entities, relations, and text become observation events
search_knowledge
semantic + keyword hybrid recall, deterministically ranked
get_entity
one entity with its relations and full provenance
traverse
n-hop walks over the relation graph
workspace_map
what was said together: co-occurrence hyperedges across a workspace
and more
define_type, the proposal gate, federation (sync_*) - 13 tools today, deliberately few

Alongside the tools, addressable resources: every search hit points back at supragnosis://observation/{id} - raw text, provenance, lineage - and each workspace exposes its graph, hypergraph, and types as read-only resources. Whoever holds an id can dereference it: no answer without a "where from".

07 / portability

Move the memory. Keep the meaning.

Laptop, desktop, a VM that never sleeps - every machine your agents work on ends up holding the same graph. What travels is the observation log, never merged state, so nothing is flattened on the way out: ids are content addresses that survive the move, projection is deterministic so any delivery order converges, and every attestation is signed by the node that made it. The receiving node can therefore prove where a claim came from and still decide for itself how far to trust it - a wire claim that "a human confirmed this" never outranks what the transport can actually prove. Sharing is opt-in per workspace: nothing leaves a node you did not whitelist. Hub-and-spoke ships today; the replication primitive is topology-independent, so peer and hybrid meshes reuse it unchanged when they land.

Portability here is a checked property rather than a promise. The content-address, convergence, and re-key guards run in CI on every change to the engine, and a principle whose guard stops running is reported as unguarded instead of quietly passing - the same registry that publishes what this system does not do yet.

hub-and-spoke
peer-to-peer
hybrid mesh

08 / status

Where it honestly stands.

Nothing on this page is aspirational. Everything under shipped is in the binary you can install today; everything under in flight is named and specified, and not written yet.

Shipped

  • [o]
    M2 - hybrid recall. Semantic (fastembed ONNX) + keyword search, file-backed persistence, stdio MCP + HTTP daemon.
  • [o]
    M3a / M3b - resolution. A replaceable tier-weighted policy computes the current belief and surfaces contested ones; aliases accumulate and forward, and one shared write path makes an incremental write equal a fresh replay.
  • [o]
    M3.5 - proposal gate. PR-like review in the curation console, with a computed belief diff - what a verdict would overturn, and which references would rewire - and blocking checks the fold enforces, so a merge that cannot commit does not.
  • [o]
    M4 phases 0-4 - federation. Hub-and-spoke log replication, ed25519-signed events over TLS, per-node auth, federated recall.
  • [o]
    Distribution. Signed/notarized macOS desktop app (tray-resident), Homebrew tap, viewer on an owner-only unix socket.

In flight

  • [ ]
    M3c - bitemporal queries. Both time axes are captured; querying across them waits on explicit negation, which the model does not have yet.
  • [ ]
    Canon effects for tbox_change and recall. Both fold correctly and change nothing yet - assigned, with multi-principal governance, to the federation remainder.
  • [ ]
    M4 remainder + MCP gaps. Authenticated remote reads (phase 3.5), multi-principal governance (phase 5); prompts and elicitation on the MCP surface.
  • [ ]
    M5 / M6. Extraction + contamination logic, forgetting + consolidation.

The roadmap keeps an honest record of what shipped and what is deferred - see architecture.md sections 12 and 14.

09 / get started

Up and running in a minute.

# desktop app, signed + notarized:
# pulls the server with it
brew tap ashon/tap
brew install supragnosis

# server / CLI only, kept running as a service
brew install supragnosis-server
brew services start supragnosis-server

# no homebrew? the one-line script installs
# to ~/.local/bin (arm64 / x86_64)
curl -fsSL https://supragnosis.dev/install.sh | sh

Whichever route you take, supragnosis start brings up the daemon: MCP on 127.0.0.1:7373 plus the viewer unix socket. Prebuilt binaries ship keyword recall; the fastembed build adds local semantic search. Curious how it is built? The design principles and the hexagonal Rust workspace behind all of this live in architecture.md.