Neonmem Workspace

A memory-based agentic IDE.

Neonmem Workspace uses neonmem cartridges to enhance the Claude Code experience, adding capabilities that help the agent make decisions based on a prism of experience held in the cartridge.

It is for any type of development — traditional, agentic, or vibe coding — and extends each of these approaches.

Neonmem Workspace: the Brain memory visualiser on the left, the project's memory Home in the centre showing the Labyrinth project's decisions and active plans, and the agent panel on the right.
Project Home — a live recap regenerated from the project's own memory, beside the Brain memory graph.

The Neonmem cartridge

A single-file, multi-layer memory store with built-in vector storage.

A cartridge holds a project's experience as a typed graph. It is little-endian, page-aligned, and begins with a 64-byte header; the sections below carry the memory itself.

Nodes

Fixed-size records. Each holds a type — observation, question, hypothesis, conclusion, resolution, rule, dead-end, plan, procedure — with a confidence and relevance score, timestamps, an edge count, and an index into the vector store.

Edges

Typed, directed relationships between nodes: led-to, blocked-by, supports, contradicts, part-of. A node stores its first edges inline, with an overflow table for high-degree nodes.

Vectors

One embedding per node, int8-quantized with a per-vector scale (v = q·scale). The vectors are L2-normalized, so cosine similarity is a dot product. Recall is exact, over the vectors in the cartridge.

Integrity

Node text is stored in an LZ4-compressed string table; a footer carries a per-section CRC32 and a content hash. The vectors are part of the file — there is no external database.

magic ARIN  ·  header 64B  ·  sections nodes / edges / vectors / strings  ·  footer CRC32 + content-hash

Layers

  • reflexRules and invariants that always apply.
  • short-termThe decisions and observations of the current effort.
  • long-termKnowledge retained across sessions.

PRISM — reasoning through the graph

Recall answers what is stored; PRISM reasons over how the stored items relate. It is based on Hopfield/Ising energy-based associative memory. For a query, anchor nodes are found by cosine similarity and their neighborhood is expanded into a subgraph. The subgraph is treated as a network of units: its edges define a coupling matrix J — supporting edges attract, contradicting and blocking edges repel — and node types define a field bias h. The unit states relax by

a  ←  σ( β ( J·a + h ) )

until they settle into a low-energy configuration. That configuration is read out as attractors — the answer — repelled regions — dead-ends to avoid — and active constraints — the rules that apply.

Embeddings

Text is embedded with the IBM Granite-30M model. A string is tokenized, passed through one forward pass, and the last hidden state at the CLS position is L2-normalized to a 384-dimensional unit vector. The same model runs at write and read time.

Capture

What a turn of work adds is scored by an energy-like salience — σ(β·L)·L — combining novelty, node-type weight, and the relief of resolving an open thread. Items above a write threshold are kept; a plan is a forward-looking commitment and is kept even when it relates to existing memory.

Developer journey — Labyrinth

Building a maze game, one decision at a time.

You build a small terminal game — The Labyrinth — by talking through it with the agent, one decision at a time. You do not ask it to remember anything. As you frame the project, argue a design, hit a wall, and set a rule, the memory forms on its own: each turn is classified and written to the cartridge as a typed node. By the end, the whole reasoning trail is there to recall and reason through.

Act 1 — Frame the project

  • Context

    A single-file terminal game in Python: rooms connected by exits, the player looks for the way out.

  • Observation

    Each room has a name, a description, and exits — north, south, east, west.

  • Question

    Should rooms be plain dictionaries or proper classes?

The Brain shows a small three-node cloud; the Project Home has nothing recorded yet.
Three memories. The frame, an observation, and an open question — a loose cloud in the Brain.

Act 2 — A design debate

  • Hypothesis

    A dict of room-name → exits is the simplest thing that could work.

  • Debate

    A hand-crafted fixed maze versus a procedurally generated one.

  • Argument

    For procedural: infinite replayability. Against: harder to make it feel designed, and harder to test.

  • Resolution

    Hand-crafted maze for v1 — testable and tunable. Procedural can come later.

The Brain graph has grown to seven nodes as the debate and its resolution are recorded.
The debate and its resolution join. Seven memories now — the cloud thickens as the design is argued out.

Act 3 — Build it, and hit a wall

  • Action

    Implement a parser that reads "go north" and moves the player — the first version of labyrinth.py.

  • Conclusion

    The dict-of-rooms approach is clean and easy to extend — the call held up.

  • Dead-end

    Keeping player position and room state in module-level globals caused state bugs across functions. Do not.

  • Rule

    Keep the whole game state in one dict, passed around explicitly — never module globals.

Eleven memories in the Brain; the red node is the dead-end. The Home already recaps the decisions and the rule.
The red node is the dead-end. Eleven memories — and the Home already recaps the decisions and the new rule.

Act 4 — Instant knowing

  • Procedure

    Add a room: (1) add it to the rooms dict, (2) wire its exits both ways, (3) add a test that it is reachable from start, (4) run pytest.

  • Reflex

    A standing principle: single-file, zero dependencies, runs on plain Python 3.

Thirteen memories; the procedure and the single-file reflex settle near the core and the cloud has become a brain.
The cloud becomes a brain. Thirteen memories — the procedure and the single-file reflex settle at the core.

Act 5 — Lean on the memory

  • Recall

    "Why did we go with a hand-crafted maze again?" — answered from memory: testability and feel.

  • Warns

    "Is it okay to keep game state in globals?" — it warns you: that is a recorded dead-end, and why.

  • Timeline

    "What did we decide today?" — the day's decisions, in order, not a guess.

  • Rule

    "What's our rule about dependencies?" — the single-file, zero-deps reflex.

The editor completes a line inside a function from the project's own recorded decision.
Recall reaches the editor. Inside a function, the completion continues from a decision the project already made.

Act 6 — Ingest, then let it sleep

  • Ingest

    Hand it a spec and a source file: endpoints, config values, and code structure — classes, methods, and a call graph — become connected nodes. The filler prose is skipped.

  • Consolidate

    A consolidation pass merges near-duplicates and dims low-value chatter; the dead-end and the rules stay put. Reopen tomorrow — the decisions are still front and centre.

Project Home: fourteen memories, agent personality, recent decisions, an active plan to add procedural maze generation after v1, and the reflexes.
Project Home — the status counts, agent personality, the decisions, the active plan, and the reflexes, regenerated from memory each time it opens.

Thirteen memory types formed while you worked — reflex and rules at the core, working notes and decisions around them — with nothing to remember by hand.

Download

Neonmem Workspace for Windows.

Two ways to run it, both carrying the editor, the memory engine, and the embedding model. The installer sets it up on your PC; the portable build unzips and runs from a folder — nothing added to your system, keep it on a drive and take it with you.

Linux — comingSDK — coming