Developer memory — store and recall facts, decisions, and constraints.
This page is the CLI command reference. For conceptual background, IDE setup, team workflows, and the full schema, see the Memory section of the docs.
fluree memory <COMMAND>| Command | Description |
|---|---|
init |
Initialize the memory store (creates __memory ledger) |
add |
Store a new memory |
recall |
Search and rank relevant memories |
update <ID> |
Update a memory in place |
forget <ID> |
Delete a memory |
status |
Show memory store status |
export |
Export all current memories as JSON |
import <FILE> |
Import memories from a JSON file |
mcp-install |
Install MCP configuration for an IDE |
The memory system stores project knowledge as RDF triples in a dedicated __memory Fluree ledger. Memories persist across sessions and are searchable by keyword-scored recall.
Run fluree memory init before using other memory commands. The MCP server auto-initializes on first tool call.
Initialize the memory store and optionally configure MCP for detected AI coding tools. Idempotent — safe to run multiple times.
fluree memory init [OPTIONS]| Option | Description |
|---|---|
--yes, -y |
Auto-confirm all MCP installations (non-interactive) |
--no-mcp |
Skip AI tool detection and MCP configuration entirely |
- Creates the
__memoryledger and transacts the memory schema. - Creates
.fluree-memory/at the project root withrepo.ttl,.gitignore, and.local/user.ttl. - Migrates existing memories — if the ledger already has memories (e.g., from a pre-TTL version), they are exported to the appropriate
.ttlfiles. - Detects AI coding tools (Claude Code, Cursor, VS Code, Windsurf, Zed) and offers to install MCP config for each.
$ fluree memory init
Memory store initialized at /path/to/project/.fluree-memory
Repo memories are stored in .fluree-memory/repo.ttl (git-tracked).
Commit this directory to share project knowledge with your team.
Detected AI coding tools:
- Claude Code (already configured)
- Cursor
- VS Code (Copilot) (already configured)
Install MCP config for Cursor? [Y/n] Y
Installed: .cursor/mcp.json
Installed: .cursor/rules/fluree_rules.md
Configured 1 tool.With --yes: auto-confirms all installations without prompting. In a non-interactive shell (piped stdin) without --yes, MCP installation is skipped with a message.
init detects an IDE if any of these is true:
- A known binary is on
PATH(claude,code,cursor,windsurf,zed). - The IDE's app bundle is in
/Applicationsor~/Applications(macOS). - A home-dir marker exists (
~/.claude,~/.cursor,~/.vscode,~/.codeium/windsurf,~/.zed,~/.config/zed). - The IDE's user-config dir exists (
~/.config/Code,~/.config/Cursor, …; on macOS:~/Library/Application Support/<App>; on Windows:%APPDATA%\<App>).
If your IDE is installed but missed (commonly: a fresh install that's never been launched and isn't on PATH), install MCP for it directly with fluree memory mcp-install --ide <tool>. See memory/reference/ide-matrix.md for the full table.
Store a new memory.
fluree memory add [OPTIONS]| Option | Description |
|---|---|
--kind <KIND> |
Memory kind: fact, decision, constraint (default: fact) |
--text <TEXT> |
Content text (or provide via stdin) |
--tags <T1,T2> |
Required. Comma-separated tags for categorization — the primary recall signal |
--refs <R1,R2> |
Comma-separated file/artifact references |
--severity <SEV> |
For constraints: must, should, prefer |
--scope <SCOPE> |
Scope: repo (default) or user |
--rationale <TEXT> |
Why this memory exists (available on any kind) |
--alternatives <TEXT> |
Alternatives considered (comma-separated) |
--format <FMT> |
Output format: text (default) or json |
# Store a fact
fluree memory add --kind fact --text "Tests use cargo nextest" --tags testing,cargo
# Store a constraint with severity
fluree memory add --kind constraint --text "Never suppress dead code with underscore prefix" \
--tags code-style --severity must
# Store from stdin
echo "The index format uses postcard encoding" | fluree memory add --kind fact --tags indexer
# Store a decision with rationale and alternatives
fluree memory add --kind decision --text "Use postcard for compact index encoding" \
--rationale "no_std compatible, smaller output than bincode" \
--alternatives "bincode, CBOR, MessagePack" --refs fluree-db-indexer/
# Store a fact with rationale
fluree memory add --kind fact --text "PSOT queries return supersets — post-filter required" \
--rationale "B-tree range scan can't filter on non-key predicates" --tags query,indexOutput (text):
Stored memory: mem:fact-01JDXYZ5A2B3C4D5E6F7G8H9J0
If the content contains secrets (API keys, passwords, tokens, connection strings), they are automatically redacted and a warning is printed:
warning: secrets detected in content — storing redacted version.
Original content contained sensitive data that was replaced with [REDACTED].
Stored memory: mem:fact-01JDXYZ...
Search and retrieve relevant memories ranked by score.
fluree memory recall <QUERY> [OPTIONS]| Argument | Description |
|---|---|
<QUERY> |
Natural language search query |
| Option | Description |
|---|---|
-n, --limit <N> |
Maximum results per page (default: 3) |
--offset <N> |
Skip the first N results — use for pagination (default: 0) |
--kind <KIND> |
Filter to a specific memory kind |
--tags <T1,T2> |
Filter to memories with these tags |
--scope <SCOPE> |
Filter by scope: repo or user |
--format <FMT> |
Output: text (default), json, or context (XML for LLM) |
# Basic recall (returns top 3)
fluree memory recall "how to run tests"
# Get the next page
fluree memory recall "how to run tests" --offset 3
# Return up to 10 results
fluree memory recall "error handling" -n 10
# Filter by kind and tags
fluree memory recall "error handling" --kind constraint --tags errors
# Output as XML context (for LLM injection)
fluree memory recall "testing patterns" --format contextOutput (text):
Recall: "how to run tests" (2 matches)
1. [score: 13.0] mem:fact-01JDXYZ...
Tests use cargo nextest
Tags: testing, cargo
2. [score: 8.0] mem:fact-01JDABC...
Integration tests use assert_cmd + predicates
Tags: testing
(showing results 1–3; use --offset 3 for more)
Output (context):
<memory-context>
<memory id="mem:fact-01JDXYZ..." kind="fact" score="13.0">
<content>Tests use cargo nextest</content>
<tags>testing, cargo</tags>
</memory>
<pagination shown="1" offset="0" total_in_store="13" />
</memory-context>When results are cut off, the pagination element includes a hint:
<pagination shown="3" offset="0" limit="3" total_in_store="13">Results 1–3. Use offset=3 to retrieve more.</pagination>Update a memory in place. Only the fields you provide are changed — the ID stays the same. History is tracked via git.
fluree memory update <ID> [OPTIONS]| Option | Description |
|---|---|
--text <TEXT> |
New content text |
--tags <T1,T2> |
New tags (replaces all existing) |
--refs <R1,R2> |
New artifact refs (replaces all existing) |
--format <FMT> |
Output: text or json |
fluree memory update mem:fact-01JDXYZ... --text "Tests use cargo nextest with --no-fail-fast"Output:
Updated: mem:fact-01JDXYZ...
Delete a memory by retracting all its triples.
fluree memory forget <ID>Output:
Forgotten: mem:fact-01JDXYZ...
Show a summary of the memory store.
fluree memory statusOutput:
Memory Store Status
Total memories: 12
Total tags: 25
By kind:
fact: 7
decision: 2
constraint: 3
Export all current (non-superseded) memories as JSON, or import from a file.
fluree memory export > memories.json
fluree memory import memories.jsonInstall MCP configuration for an IDE so agents can use memory tools.
fluree memory mcp-install [--ide <IDE>]| Option | Description |
|---|---|
--ide <IDE> |
Target IDE (auto-detected if omitted) |
Supported IDE values:
| Value | Config written | Notes |
|---|---|---|
claude-code |
claude mcp add (local scope → ~/.claude.json) |
Also appends to CLAUDE.md |
vscode |
.vscode/mcp.json (key: servers) |
Also installs .vscode/fluree_rules.md |
cursor |
.cursor/mcp.json (key: mcpServers) |
Also installs .cursor/rules/fluree_rules.md |
windsurf |
~/.codeium/windsurf/mcp_config.json (global) |
— |
zed |
.zed/settings.json (key: context_servers) |
Skips if JSONC (comments) detected |
Legacy aliases: claude-vscode and github-copilot map to vscode.
When --ide is omitted, the first unconfigured detected tool is used; defaults to claude-code if none detected.
fluree memory mcp-install --ide cursorOutput:
Installed: .cursor/mcp.json
Installed: .cursor/rules/fluree_rules.md
Cursor’s MCP configuration supports stdio servers with a type field and config interpolation like ${workspaceFolder}. A portable repo-scoped setup looks like:
{
"mcpServers": {
"fluree-memory": {
"type": "stdio",
"command": "fluree",
"args": ["mcp", "serve", "--transport", "stdio"],
"env": {
"FLUREE_HOME": "${workspaceFolder}/.fluree"
}
}
}
}Setting FLUREE_HOME ensures the MCP server uses the current workspace’s .fluree/ directory even if Cursor spawns the process from a different working directory. That keeps repo memory/logs under <repo>/.fluree-memory/ instead of a global location.
- Repo-scoped expected:
- Memories:
<repo>/.fluree-memory/repo.ttl - MCP log:
<repo>/.fluree-memory/.local/mcp.log(should showclient initializedafter a full Cursor restart)
- Memories:
- If it’s using global dirs on macOS:
- Memories/log:
~/Library/Application Support/.fluree-memory/... - Fix: ensure your Cursor config sets
env.FLUREE_HOME = "${workspaceFolder}/.fluree"and restart Cursor fully.
- Memories/log:
- Memory overview — what it is, when to use it, how it fits into your workflow
- Memory getting started — install, quickstart, and per-IDE setup guides
- Memory concepts — repo vs user memory, supersession, recall ranking, secrets
- Memory guides — team workflows, rules-file customization, migrating from plain markdown
- Memory reference — IDE support matrix,
mem:schema, TTL file format - mcp — MCP server for IDE agent integration