Memory
Skill harnessprotocol/harness-kit/plugins/membrain/skills/memory
Your plugins, skills, MCP servers, hooks, conventions, and governance packaged into a single config
npx -y skills add harnessprotocol/harness-kit --skill memoryAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when user invokes /memory with a subcommand (search, trace, add, episode, status). Also triggers on "search my memory for X", "add to memory", "what do I know about X" (when membrain is available), "memory status", "memory trace". Searches and manages the membrain knowledge graph via MCP tools or HTTP API.
SKILL.md
6.1 KB, as published. Nobody here has run it
membrain Memory
Overview
Interface with the membrain knowledge graph — search entities, trace BFS traversals, add observations, create episodes, and check graph health.
Graceful degradation: If membrain MCP tools are not available, print install instructions and exit. If the HTTP server is not running, skip HTTP-dependent subcommands and say so.
Subcommands
Parse the argument after /memory to determine which operation to run.
| Invocation | Operation |
|---|---|
/memory search <topic> | Search the graph for entities matching the topic |
/memory trace <query> | Run BFS traversal and display token savings |
/memory add <entity> <observation> | Add an observation to an existing entity |
/memory episode <text> | Create a timestamped episode from free text |
/memory status | Show graph statistics (entity/relation counts) |
/memory (no args) | Show usage and subcommand list |
Step 1: Check MCP Availability
Before any graph operation, confirm membrain MCP tools are available.
Test: Can you call search_nodes? If the tool is missing from the tool list:
membrain MCP tools are not connected.
To connect them:
1. Install mem: go install github.com/siracusa5/membrain/cmd/mem@latest
2. Add to Claude Code settings (or via /plugin install membrain@harness-kit):
{
"mcpServers": {
"membrain": { "command": "mem", "args": ["mcp"] }
}
}
3. Restart Claude Code
For the desktop UI: mem serve (opens http://localhost:3131)
Step 2: Route to Subcommand
search <topic>
Search the graph for entities and relations related to the topic.
- Call
search_nodeswith the topic as the query - If results < 3, try decomposing the topic into individual keywords and search each (max 2 additional calls)
- Format results:
## Memory: "<topic>"
Found N entities · saved X% tokens vs full graph dump
### <EntityName> (Type)
- observation 1
- observation 2
- observation 3
### <EntityName> (Type)
...
Relations: A → relationType → B
Caps: Max 10 entities shown. Max 3 observations per entity. Max 3 search_nodes calls.
If no results: "No entities found for '[topic]'. Try a broader term or check /memory status to confirm the graph has data."
trace <query>
Run a BFS traversal to show how topics connect through the graph.
Requires: membrain server running on http://localhost:3131
- Call
GET http://localhost:3131/api/v1/trace?focus=<query>(URL-encode the query) - Parse the response — it includes traversal frames and token stats
- Display:
## Trace: "<query>"
Traversal: N nodes · depth D · saved X% vs full dump
Starting node → relation → Node B → relation → Node C
→ relation → Node D
...
Token savings: retrieved ~X tokens of ~Y total (Z% saved)
Open in browser: http://localhost:3131/trace?focus=<query>
If the server is not running: "membrain server is not running. Start it with: mem serve"
add <entity> <observation>
Add an observation to an existing entity in the graph.
Parse the argument: everything before the first quoted string or : is the entity name; the rest is the observation.
Examples:
/memory add Claude "ships membrain MCP integration"→ entity: Claude, obs: ships membrain MCP integration/memory add Claude: ships membrain MCP integration→ same
- Call
add_observationswith:[{ "entityName": "<entity>", "contents": ["<observation>"] }] - On success: "Added observation to <entity>."
- If entity not found: "Entity '<entity>' not found. Create it first with
create_entitiesor use/memory episodeto capture a session."
episode <text>
Create a timestamped episode capturing a chunk of session knowledge.
- Extract a short name from the text (first sentence or ≤60 chars)
- Scan the text for entity names that exist in the graph (use recent
search_nodesresults if available) - Call
add_episodewith:{ "name": "<short-name> (YYYY-MM-DD)", "summary": "<full text>", "occurred_at": "<current ISO timestamp>", "mentioned_entities": ["Entity1", "Entity2"] }mentioned_entitiesauto-links the episode to existing graph entities — always include them when identifiable. - On success: "Episode created: <name>"
status
Show graph health and statistics.
Requires: membrain server running on http://localhost:3131
- Call
GET http://localhost:3131/api/v1/graph/stats - Display:
## membrain Status
Entities: N
Relations: N
Episodes: N
Server: http://localhost:3131 ✓
Graph: <path to graph file>
Desktop UI: http://localhost:3131/
If server not running: note that the server is offline and MCP-only stats are not available (membrain does not support entity count queries via MCP without the HTTP server).
No args
Print usage:
## /memory — membrain knowledge graph
/memory search <topic> search entities
/memory trace <query> BFS traversal with token stats
/memory add <entity> <obs> add an observation
/memory episode <text> create timestamped episode
/memory status graph health and counts
Common Mistakes
| Mistake | Fix |
|---|---|
Calling read_graph | NEVER. Use search_nodes for all queries. |
| Treating entity name as case-sensitive | membrain names are case-sensitive — match exact name from prior search results |
| Running HTTP calls when server might be down | Always note if server is unreachable; MCP tools still work offline |
| Showing raw JSON | Format output as human-readable markdown |
| Exceeding search caps | Max 3 search_nodes calls per /memory search invocation |