- 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.
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.
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
One brain, running on your machine.
Every note lands in one of twelve regions. The region decides where it is looked for first.
Two lanes. One answer.
Every window used to boot its own brain.
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.
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.
let's keep working on the auth refactor.
Sure. Quick question: can you explain your project structure again? What auth library are you using? Where do tokens live?
......
let's keep working on the auth refactor.
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?
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.
Semantic search, keyword search and graph traversal in one call. Falls back to keyword only while the model loads, so it never blocks.
Save a note. Embedded, classified into a region, versioned against the old content and indexed, all inside the call.
Explore outward from one note along backlinks and embedding similarity, to reach what you would not have searched for.
Recently changed notes, newest first. Needs no model, so it answers instantly even during a cold start.
Note count, vector count, model state, region distribution and the degraded-state flags. Always instant.
List the twelve regions with counts and descriptions, or customise a region's name, colour and remit.
Sort notes into regions with keyword rules, no API key involved. Single note, batch reclassify, or a correction that teaches it.
History, diff, or rollback. Up to fifty versions per note, deduplicated by content hash.
The whole stack, on one machine.
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.
Packaged as a binary that carries its own runtime. Only needed separately if you build from source.
L2 normalised cosine. One writer holds a file lock; readers stay searchable and are promoted if it exits.
BM25 with a custom tokenizer, WAL mode, rebuilt on every note write.
Loaded in a background thread from a model inside the bundle. The offline flag is set before the first import.
A thin proxy forwards into the shared daemon and respawns it if it dies mid-session.
Loopback only, per-run bearer token, Origin allow-list, bodies capped at 8 MB, idle shutdown after thirty minutes.
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"] } }
Twelve releases that changed how it behaves.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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.
Extract, open the GYSTC Dashboard folder, run the executable. The wizard handles vault selection, MCP install and hook registration.
Open the image and drag the app to Applications. On first launch the wizard configures your vault and registers the MCP server.
Python 3.11 or newer. Install the package, run the setup, point your MCP client at it.

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.