Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cursor/skills/mcp-memnet/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ session_open(map) → cue / find → pin_map → reason → mutate → pin_map
2. **Cue** — `kind` / `locators` (`qname=`, `path=`, `goal=`, …) / `keyword` / nickname `cue`. Empty cue = **session outline** (0.11). Ego unknown: `find(limit=…)` then `pin_map` from labels+props. Prefer one live `TSK_*`. When MATCH_L \(|Q|>1\), CueConflict — do not pick one root. A locator/keyword miss is CueMiss / Peak_L, not CueConflict.
3. **`pin_map`** — one \(S\) per generate. MCP `session=` selects the stratum. Drop the prior map next turn. leftover `anchor=` / `anchors=` are leftover nicknames.
4. **`mutate`** — sparse GraphElement `CREATE` / `MATCH`…`SET`/`DELETE`. No leftover `id:'NEW'` mint. Under RSV pass `llm_id`.
5. Persist if needed: `session_save` (file) or live cabinet (0.7 Agens / 0.14 Neo4j). Expire-time save is opt-in (`MEMNET_SAVE_ON_EXPIRE`). Agents MUST NOT talk Bolt.
5. Persist if needed: `session_save` (file) or AgensGraph adapter (0.7: adapter + operator round trip, no runtime caller). Neo4j is retired. Expire-time save is opt-in (`MEMNET_SAVE_ON_EXPIRE`). Agents MUST NOT talk Bolt.

**MCP missing:** skip MemNet; plain Markdown only.

Expand Down
2 changes: 1 addition & 1 deletion .cursor/skills/mcp-memnet/references/mcp-policy.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Cursor (stdio) → memnet-mcp

- Product **0.19.3**. Cue then `pin_map`. Write **`mutate`**. leftover `add`/`update` / `query_warm` / `anchor=` named leftover.
- Multitask **MUST NOT** use in-process MCP for a shared session.
- Live Agens claimed (0.7); Neo4j live claimed (0.14); RSV + Path-B ingest + `snap_model` + `export_pin_map` shipped.
- AgensGraph 0.7 is adapter + operator round trip (no runtime caller). Neo4j is retired (#187). RSV + Path-B ingest + `snap_model` + `export_pin_map` shipped.
- Novel-writer MCP is dropped.

## mcp.json (this repo / local)
Expand Down
4 changes: 2 additions & 2 deletions .cursor/skills/mcp-memnet/references/tool-parameters.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ Parse **`stdout`**. Join `wire_lines` with `\n`.
| `MEMNET_MCP_TRANSPORT` | `tcp` when sharing a serve graph |
| `MEMNET_SERVE_HOST` / `MEMNET_SERVE_PORT` | Serve bind (library default `127.0.0.1:18765`) |
| `MEMNET_SESSION` | Default session after open/load |
| `MEMNET_AGENSGRAPH_URL` | Live Agens (0.7) |
| `MEMNET_NEO4J_URL` | Neo4j extra; live claimed **0.14**. Both URLs need `MEMNET_DURABLE_BACKEND` |
| `MEMNET_AGENSGRAPH_URL` | AgensGraph adapter (0.7: operator round trip, no runtime caller) |
| `MEMNET_NEO4J_*` | Retired (#187). Ignored. Engine starts |

## wire_lines (product)

Expand Down
4 changes: 2 additions & 2 deletions .cursor/skills/memnet-multitask/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ Path-B: **`ingest_*`** into the current session (locator ids; **no** leftover NE
| Neighbourhood RSV | **Shipped** |
| Path-B ingest | **Shipped** |
| CapsPolicy ACL | **Shipped opt-in** (`session_acl_enable`) |
| Live AgensGraph | **Claimed 0.7** when URL set |
| Neo4j live | **Claimed 0.14** |
| AgensGraph | **0.7** adapter + operator round trip (no runtime caller) when URL set |
| Neo4j | **Retired** (#187). `MEMNET_NEO4J_*` ignored |
| HostSearch locators | Extra **0.17** (`RagHostHook`; no `rag_query`) |
| Peak_L | Extra **0.18** (last-resort; not default goldfish) |
| Pin-map export / catalog Snap | Extra **0.19** / **0.15** |
Expand Down
2 changes: 1 addition & 1 deletion .cursor/skills/sysml-memnet-documentation/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ token_guardrails: |

## Prerequisites

1. Install **0.19**: `pip install 'memnet-llm[mcp]'` (Hatch **0.19.3**; pin `==0.19.3` after PyPI upload, else last wheel is **0.19.0**). Optional `[neo4j]` (live claimed 0.14; drivers only). Contributors: `pip install -e ".[mcp]"`.
1. Install **0.19**: `pip install 'memnet-llm[mcp]'` (Hatch **0.19.3**; pin `==0.19.3` after PyPI upload, else last wheel is **0.19.0**). Neo4j extra is retired (#187). Contributors: `pip install -e ".[mcp]"`.
2. MemNet tools in the catalog. If absent: edit `.sysml` only.
3. SysML map: `parts/common/memnet/memnet/examples/schema.sysml.example.txt`.

Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Catalog and load order: [`docs/README.md`](docs/README.md) (identity / `grammar/
Pure Python package (`memnet-llm`, Python >= 3.11). No external services, database, or Docker — the graph is in-memory. Standard lint/test/build commands are the authoritative recipe in `.github/workflows/ci.yml`; run/quick-start flow is in `README.md`.

- **Virtualenv**: the startup update script installs everything (editable, with `dev,mcp` extras) into `.venv` at the repo root. **Activate it first** each session: `source .venv/bin/activate`. The `memnet` and `memnet-mcp` console scripts and `pytest`/`ruff` only exist inside `.venv`. System Python is externally managed, so do not `pip install` into it.
- **Tests / lint**: `pytest` (runs fully in-process; `tests/conftest.py` sets `MEMNET_TEST_INLINE=1`, no serve daemon needed). `ruff check` + `ruff format --check` over `parts/common/memnet parts/memnet-mcp/software tests`. One test (`agensgraph_live`) is skipped unless `MEMNET_AGENSGRAPH_URL` points at an external AgensGraph server.
- **Tests / lint**: `pytest` (runs fully in-process; `tests/conftest.py` sets `MEMNET_TEST_INLINE=1`, no serve daemon needed). `ruff check` + `ruff format --check` over `parts/common/memnet parts/memnet-mcp/software tests`. One test (`agensgraph_live`) is skipped unless `MEMNET_AGENSGRAPH_URL` points at an external AgensGraph server. Neo4j is not a backend. `MEMNET_NEO4J_*` is ignored; the engine starts.
- **CLI path**: every `memnet` subcommand except `serve` needs a running serve process. Start it with `export MEMNET_IPC_SOCKET=/tmp/memnet.sock && memnet serve --ipc` (TCP fallback: `memnet serve`). Non-obvious: serve proxies argv, not your shell env — pass the minted `--session mn_...` explicitly (do not rely on `MEMNET_SESSION`).
- **MCP path**: single-agent `memnet-mcp` (stdio) is in-process and needs no serve. `session_open` requires a map. Product write is **`mutate`**. leftover `add`/`update` remain leftover façades. MCP args are `wire_lines`/`map_lines` and `session` (the id), not `session_id`.
- **Tip access portal**: ops sidecar `ops/tip_access_portal` (`memnet-tip-portal`), not the Hatch wheel. Keyed tip MCP only (`https://memnet.139-59-255-181.nip.io/mcp`). Env placeholders in `ops/tip_access_portal/.env.example`. nginx `auth_request` teach: `docs/operations/tip-memnet-access-portal.md`. tip≠face.
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ This project uses Semantic Versioning as **interpreted for MemNet**: package `a.
## [Unreleased]

### Changed
- **Honesty `c` — retire Neo4j; narrow AgensGraph 0.7 (#187)** — Neo4j cabinet (`Neo4jAdapter`, `Neo4jLibraryPort`, `liveNeo4jClaimed`) moved to `sysml-models/models/archive.sysml` (`MemNetArchive`, off `ProjectMemNet` load). Factory `bindsExactlyOneOf="fake|agensgraph"`. Removed the Neo4j adapter module, the `neo4j` extra, and the `neo4j_live` marker. `MEMNET_NEO4J_*` is ignored (one log warning); the engine starts. **0.7** claim is adapter + operator round trip (no runtime caller). No new hydrate/flush caller. No Hatch bump.

## [0.19.14] - 2026-09-24

Expand Down
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Mission working memory for LLMs. A named session graph (GQL **node**/vertex, **edge**/relationship, **property**) that agents **pin** and **mutate** — not a notepad in chat, and not the search library.

MemNet sits **between** LLM call pipelines and data search (MN-REQ-00). Corpus lookup stays on the host (grep, ingest, optional RAG); it may propose **locators**. In the session, kinds/tags are overlapping **cues**; recall is **serial** — cue, then a bounded `pin_map` neighbourhood. It is not GraphRAG, not a vector store, and not AgensGraph/Neo4j.
MemNet sits **between** LLM call pipelines and data search (MN-REQ-00). Corpus lookup stays on the host (grep, ingest, optional RAG); it may propose **locators**. In the session, kinds/tags are overlapping **cues**; recall is **serial** — cue, then a bounded `pin_map` neighbourhood. It is not GraphRAG, not a vector store, and not AgensGraph.

This repo ships the engine + generic MCP only. **Product shape:** [`docs/SHAPE.md`](docs/SHAPE.md). **Pinned role:** working set of **a few technical documents** (atoms and locators, not PDF bytes) plus live `TSK`/`USR`/`MOD`, re-read fast. Tens of MiB typical; **hundreds of MiB still in role**; gigabytes = RAG/cabinet.

Expand All @@ -13,10 +13,9 @@ Package **`memnet-llm`** (CLI **`memnet`**). Python ≥ 3.11. Hatch **0.19.11**;
```bash
pip install memnet-llm
# or pin published: pip install memnet-llm==0.19.6
# optional extras (drivers only — not AgensGraph/Neo4j servers):
# optional extras (drivers only — not an AgensGraph server):
# pip install 'memnet-llm[mcp]'
# pip install 'memnet-llm[agensgraph]'
# pip install 'memnet-llm[neo4j]'
# contributors: pip install -e ".[dev,mcp]"
```

Expand Down Expand Up @@ -72,7 +71,7 @@ Handoff between modules/agents is the **`sessionId`** (treat it as a secret capa

**Transport:** in-process MCP default (one graph per process). Shared graph: `memnet serve --ipc` (`MEMNET_IPC_SOCKET`) or TCP `memnet serve` (`127.0.0.1:18765`). Multitask / parallel workers need a shared serve — not default in-process.

**Durable:** optional clients `memnet-llm[agensgraph]` and `memnet-llm[neo4j]`; cabinets are external and not vendored. **0.7** AgensGraph live hydrate/flush proven (`liveCabinetClaimed`); CI skips unless `MEMNET_AGENSGRAPH_URL` is set. Neo4j is the same hydrate/flush seam (`Neo4jAdapter`); extra **0.14** claims `liveNeo4jClaimed=true` (live round-trip yes; hid flush; leftover-nickname hydrate after hid miss). Extra **0.16**: optional library database (`MEMNET_NEO4J_LIBRARY_DATABASE`) on the same URL emits locators only. Skip unless `MEMNET_NEO4J_URL`.
**Durable:** optional client `memnet-llm[agensgraph]`; the cabinet is external and not vendored. **0.7** is adapter + operator round trip (no runtime caller) (`liveCabinetClaimed`); CI skips unless `MEMNET_AGENSGRAPH_URL` is set. Neo4j is retired (#187). `MEMNET_NEO4J_*` is ignored (one log warning); the engine still starts.

## Deferred (honest)

Expand Down
4 changes: 2 additions & 2 deletions docs/LLM-GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Interact only with **relevant slices** of the session — never dump the graph.
5. **Settle** finished work (`status=settled`, `recycle=delete_on_settle`) — HiAgent replace of the old subgoal.
6. (Occasionally) prune recyclable rows.

Process death / TTL: `session save` / `session load` is the offered file durable. Expire-time save is **off by default**. Set ``MEMNET_SAVE_ON_EXPIRE=1`` so `session save --file` still writes after TTL (then the live id is dropped). Set ``MEMNET_EXPIRE_SNAPSHOT_DIR`` as well to auto-write `{session_id}.snap` on purge/get expire. After expire, restore a sid you already hold with MCP `session_load(session=sid)` (no serve-host file path). `serve_status` reports whether expire-save is armed (`save_on_expire`, `expire_snapshot_dir_set`). Fake hydrate/flush is always-on CI. Live AgensGraph hydrate/flush is **0.7** when `MEMNET_AGENSGRAPH_URL` points at an operator cabinet — not required for default in-process work. Optional Neo4j client (`memnet-llm[neo4j]`) uses the same hydrate/flush owner; extra **0.14** claims live (`liveNeo4jClaimed=true`; live round-trip yes; hid flush; leftover-nickname hydrate after hid miss; skip unless `MEMNET_NEO4J_URL`). Extra **0.16** optional `MEMNET_NEO4J_LIBRARY_DATABASE` is locator-only on the same process. Agents still MUST NOT talk Bolt. **0.8** teach: product shape [`SHAPE.md`](SHAPE.md); version map [`ROADMAP.md`](ROADMAP.md).
Process death / TTL: `session save` / `session load` is the offered file durable. Expire-time save is **off by default**. Set ``MEMNET_SAVE_ON_EXPIRE=1`` so `session save --file` still writes after TTL (then the live id is dropped). Set ``MEMNET_EXPIRE_SNAPSHOT_DIR`` as well to auto-write `{session_id}.snap` on purge/get expire. After expire, restore a sid you already hold with MCP `session_load(session=sid)` (no serve-host file path). `serve_status` reports whether expire-save is armed (`save_on_expire`, `expire_snapshot_dir_set`). Fake hydrate/flush is always-on CI. AgensGraph **0.7** is adapter + operator round trip (no runtime caller) when `MEMNET_AGENSGRAPH_URL` points at an operator cabinet — not required for default in-process work, and not a runtime caller. Neo4j is retired. `MEMNET_NEO4J_*` is ignored; the engine still starts. Agents still MUST NOT talk Bolt. **0.8** teach: product shape [`SHAPE.md`](SHAPE.md); version map [`ROADMAP.md`](ROADMAP.md).

Repeat. Each new turn starts with `pin_map(q)` (or empty-q outline). Drop the previous map from the pack.

Expand Down Expand Up @@ -258,7 +258,7 @@ memnet query pin-map --cue …

TCP `memnet serve` (`127.0.0.1:18765`) remains the Multitask / LAN fallback (MN-REQ-06.3).

See `docs/grammar/` for targets. Durable online GQL store adapter = **M2.5** (0.7: live hydrate/flush proven against an external cabinet; Fake + URL skip in CI).
See `docs/grammar/` for targets. Durable online GQL store adapter = **M2.5** (0.7: adapter + operator round trip, no runtime caller, against an external cabinet; Fake + URL skip in CI). Neo4j is not a backend.

### Common failure modes

Expand Down
4 changes: 2 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ Durable store **behind** sessions. Index: [`cabinet/README.md`](cabinet/README.m

| Doc | Role |
|-----|------|
| [`cabinet/agensgraph-buffer.md`](cabinet/agensgraph-buffer.md) | AgensGraph adapter: 0.7 live hydrate/flush; Fake + URL skip |
| [`cabinet/neo4j-buffer.md`](cabinet/neo4j-buffer.md) | MemNet ↔ Neo4j; live claimed (0.14); two namespaces (0.16) |
| [`cabinet/agensgraph-buffer.md`](cabinet/agensgraph-buffer.md) | AgensGraph adapter: 0.7 adapter + operator round trip (no runtime caller); Fake + URL skip |
| [`cabinet/neo4j-buffer.md`](cabinet/neo4j-buffer.md) | Retired Neo4j cabinet (#187). `MEMNET_NEO4J_*` ignored |

## Extras — `extras/`

Expand Down
Loading
Loading