GYSTC
daemon running
vault0 notes
network0 requests
buildv1.4.4
Download
Macro photograph of a magnetic core memory plane: ferrite rings threaded on fine copper wire in a woven grid.

Claude forgets everything. This is the part that doesn't.

A memory daemon that runs on your machine and hands Claude back what it knew last week, last project, last month.

local processeight MCP toolszero network requestsMIT
session00:41:12
context held100%
daemonnot running

You explained all of this on Monday.

Session ended.

The daemon kept it.

Nothing here was typed twice.

pnpm, never npm. Builds go to F:, never C:.hippocampus

Postgres functions need SET search_path = 'public'.cerebellum

Never deploy to prod from a dirty working tree.basal ganglia

Secrets go in with printf. echo appends a newline.amygdala

One change, one PR. Review runs before the PR.prefrontal cortex

$ gystc status
running · vault indexed · 0 network requests
one process

One brain, running on your machine.

Every note lands in one of twelve regions. The region decides where it is looked for first.

hybrid retrieval

Two lanes. One answer.

0
notes indexed
Keywordsqlite fts5
idle
Vectorfaiss · 384d
idle
Mergedrrf · k=60
idle
Demo vault: 40 notes, shipped inside this page. Real daemon: a bundled sentence transformer, no network request. Merge: score = sum of 1 / (60 + rank) across lanes.
up to v1.3.3

Every window used to boot its own brain.

processes3 models in RAM3 cold startevery run idle shutdownnone

Open the CLI, the desktop app and an agent, and you paid for the embedding model three times over, with a cold start on each one.

the problem, and the difference

Same prompt. Different memory.

You have explained your project structure fifty times. It forgets your architecture decisions and does not know your conventions, so every session starts again at zero, right when it was getting useful.

"Remind me what stack you use."
"What was that file called again?"
"Should I use tabs or spaces here?"
"Wait, who decided this?"
session 47 · without gystc
14:02 you

let's keep working on the auth refactor.

14:02 claude

Sure. Quick question: can you explain your project structure again? What auth library are you using? Where do tokens live?

14:03 you

......

session 47 · daemon running
14:02 you

let's keep working on the auth refactor.

14:02 claude

Based on your architecture decisions from March you are using session cookies, not JWT, and the helper lives in lib/auth/session.ts. Want me to extend the rotation logic we sketched last Tuesday?

eight calls, twelve regions

Claude picks them itself.

Notes are classified by function, not by folder: architecture goes to the Prefrontal Cortex, endpoints to Motor Cortex, config to Brainstem. A search targets the regions that can plausibly hold the answer instead of sweeping everything you have written. Sixteen tools were consolidated into eight in v1.1.0, because fewer choices made the choices better.

brain_retrievesearch

Semantic search, keyword search and graph traversal in one call. Falls back to keyword only while the model loads, so it never blocks.

brain_storewrite

Save a note. Embedded, classified into a region, versioned against the old content and indexed, all inside the call.

brain_relatedgraph

Explore outward from one note along backlinks and embedding similarity, to reach what you would not have searched for.

brain_recentsearch

Recently changed notes, newest first. Needs no model, so it answers instantly even during a cold start.

brain_statusmeta

Note count, vector count, model state, region distribution and the degraded-state flags. Always instant.

brain_regionsmeta

List the twelve regions with counts and descriptions, or customise a region's name, colour and remit.

brain_classifyorganise

Sort notes into regions with keyword rules, no API key involved. Single note, batch reclassify, or a correction that teaches it.

brain_versionsversion

History, diff, or rollback. Up to fifty versions per note, deduplicated by content hash.

Segmental search routes a query to the relevant regions, not the whole vault.precision
Smart chunking splits long documents at their headings, one vector each.indexer
Cross encoder re-ranking is available and off by default.precision
A SessionStart hook reads your git context and pulls the notes before you type.runtime
Content addressable versioning, so nothing is overwritten without a way back.storage
493 tests, green on every commit, every fix pinned by a regression test.quality
under the hood

The whole stack, on one machine.

The GYSTC dashboard: the vault drawn as a force directed graph, nodes coloured by brain region, with a live activity terminal.

The dashboard ships with it.

Your vault as a force directed graph in Three.js. Nodes are notes, edges are backlinks, colour is the region. Click a node to open it in Obsidian.

Claude's tool calls stream into the activity terminal through a PostToolUse hook, so a memory operation lights up its node while it happens.

runtimePython 3.11+

Packaged as a binary that carries its own runtime. Only needed separately if you build from source.

vector indexFAISS

L2 normalised cosine. One writer holds a file lock; readers stay searchable and are promoted if it exits.

full textSQLite FTS5

BM25 with a custom tokenizer, WAL mode, rebuilt on every note write.

embeddingsSentenceTransformers

Loaded in a background thread from a model inside the bundle. The offline flag is set before the first import.

transportFastMCP over stdio

A thin proxy forwards into the shared daemon and respawns it if it dies mid-session.

daemonstreamable-http

Loopback only, per-run bearer token, Origin allow-list, bodies capped at 8 MB, idle shutdown after thirty minutes.

setup

Three steps. No accounts, no cloud.

Windows 10 or later, or macOS 12 or later. Claude Desktop or Claude Code. A folder of markdown files, or an Obsidian vault, whose edits are picked up live.

Install

Run the executable or open the DMG. The wizard registers the MCP server with Claude. No package manager, no PATH dance.

./GYSTC Dashboard.exe

Point at your vault

One field: the folder Claude should remember. Markdown, code, notes, anything textual.

vault_path = "D:/notes/work"

Forget about it

Every session starts with your git context and the notes that match it. You stop re-explaining.

{ "gystc": { "command": "gystc", "args": ["mcp"] } }
since may

Twelve releases that changed how it behaves.

v1.4.42026-09-04
the binary can actually search
  • The shipped app had no faiss, torch or mcp inside it. Every search answered 500. The build now installs the project instead of a hand written package list.
  • The embedding model travels inside the bundle, so a fresh install no longer degrades silently to keyword only. That is where the download size went.
  • A headless self check indexes, embeds and retrieves against the built binary. The build refuses to package if it fails.
v1.4.32026-08-25
index integrity, dashboard auth, ci gates
  • Reading the stats could delete the vector index: two display only callers passed a hardcoded dimension into a loader that deletes on mismatch.
  • Dashboard API routes moved behind the same token guard as everything else.
  • CI became lint plus tests on Windows and macOS, with the build hanging off it.
v1.4.02026-06-11
full hardening pass
  • Forty three findings closed across lifecycle, index integrity, curation, daemon and dashboard. Each one confirmed adversarially first, each fix pinned by a regression test.
  • A failed embed can no longer leave a note mapped to its old content's vector.
  • New vault curation: git reversible cleanup, dead link scan, near duplicate detection, human gated apply with a diff preview.
v1.3.52026-06-08
idle shutdown and security
  • The daemon terminates itself after thirty minutes of silence and frees the model from RAM. The proxy respawns it on the next call.
  • Request bodies capped at 8 MB so a token holder cannot exhaust memory.
  • Upper bounds on network facing dependencies against silent major upgrades.
v1.3.42026-06-08
the shared daemon
  • Every client now shares one long lived daemon that loads the model and index a single time, instead of each spawning its own server.
  • Serving became a thin stdio to HTTP proxy that auto starts the daemon and never hangs the client.
  • Loopback only, per run bearer token, Origin allow-list, held ephemeral port so there is no token leak race.
v1.3.32026-06-08
the real disconnect fix
  • Startup used to kill every other GYSTC process. That global killer is gone, and with it the random connection drops.
  • A server self terminates when its client exits instead of lingering as an orphan holding the database.
  • A single writer file lock stops coexisting writers from corrupting the index.
v1.3.22026-06-03
dashboard comes alive
  • Claude's tool calls stream into the dashboard and light up the matching brain node in real time.
  • The setup wizard writes Claude Code's nested hook schema, so the hooks actually fire on install. The old flat format was silently ignored.
v1.3.12026-06-03
the real hang fix
  • The first search of a session no longer freezes: retrieval falls back to keyword instantly instead of blocking on model load.
  • The SessionStart hook pointed at a module that did not exist. Auto context had been silently broken in every install.
  • Editing a note refreshes its chunk vectors, so search stops returning stale snippets.
v1.3.02026-05-16
zero hang guarantee
  • All eight tools became fully async with a thirty second timeout. Blocking the event loop stopped being possible.
  • The index saves every sixty seconds, so it survives a process kill.
  • SQLite busy timeout and WAL autocheckpoint removed database locked errors under concurrent access.
v1.2.02026-05-12
mcp hang eliminated
  • Waiting for readiness moved off the event loop into an executor thread. That was the root cause of every MCP hang.
  • Skipping cache validation on startup cut model load from about eleven seconds to six and a half.
v1.1.02026-05-10
sixteen tools became eight
  • Context merged into retrieve; history, diff and rollback merged into versions; three classify tools merged into one.
  • The cross encoder re-ranker moved to off by default.
  • The instructions were rewritten with explicit guidance on when not to search, which stopped Claude looping.
v1.0.02026-05-08
first public release
  • Windows and macOS builds, a setup wizard with a vault picker and one click MCP plus hook install.
  • Hybrid search with Reciprocal Rank Fusion, smart chunking, content addressable versioning.
  • Path traversal guards and an XSS fix in the dashboard before it ever shipped.
asked anyway

Answered anyway.

Is my data sent anywhere?

No. Everything runs on your machine and the daemon binds to 127.0.0.1 only. No account, no telemetry. This page vendors its own fonts, so it makes no third party request either.

What does it cost?

Nothing. The binary and the full source are free, with no paywall and no trial.

How is this different from Claude's built in memory?

Built in memory is a short summary of the conversation. This is your entire vault: semantic and full text search over everything you have written, versioned, organised into twelve regions, shared by every client. The files stay yours, in plain markdown.

Why is the download so large?

Because the embedding model is inside it. An earlier release left it out and semantic search silently degraded to keyword matching on every fresh install. Shipping it is the trade for working offline.

How heavy is the daemon?

The embedding model is the cost while it is loaded. After thirty minutes of silence the daemon shuts itself down and frees it; the next call respawns it transparently.

What if it crashes?

The proxy respawns the daemon and the single writer lock keeps the index consistent. Your notes are plain markdown on disk either way, so there is nothing to lose.

Windows says it is unsigned.

It is. Click More info, then Run anyway. If you would rather check first, compare the download's hash against SHA256SUMS.txt in the same release.

Does it work with anything besides Claude?

Any MCP client. The daemon is one process and clients attach to it. Nothing about it is Claude specific except the name.

Can I read the code?

All of it. The binary and the source are public under MIT: read it, build it, host it yourself.

Windows · gystc-windows.zip · 846 MB

Extract, open the GYSTC Dashboard folder, run the executable. The wizard handles vault selection, MCP install and hook registration.

macOS · gystc-macos.dmg · 794 MB

Open the image and drag the app to Applications. On first launch the wizard configures your vault and registers the MCP server.

From source · MIT

Python 3.11 or newer. Install the package, run the setup, point your MCP client at it.

what this page remembered

You have been here for a few minutes. Here is all of it.

That list was written by this page into your own browser, classified with the same twelve regions the daemon uses. Nothing was sent anywhere. It is a small, deliberately unimpressive version of what GYSTC does for Claude all day.