Install
openclaw skills install agent-memory-graphAgent-agnostic personal knowledge graph stored as markdown files with YAML frontmatter. Use when you need persistent context about the user's life, projects, tools, people, concepts, or decisions — especially across agent resets or switches. Also use when logging significant activity, searching for context before starting work, creating knowledge nodes for new topics, discovering connections between existing nodes (backfill), or rebuilding indexes. Triggers include needing user context, logging work, "remember this", "what do I know about X", creating/updating knowledge entries, and periodic memory maintenance.
openclaw skills install agent-memory-graphA file-based personal knowledge graph at ~/memory/. Any agent can read/write. Human-browsable.
~/memory/
├── README.md # full architecture doc
├── graph/ # knowledge nodes
│ ├── people/
│ ├── projects/
│ ├── concepts/
│ ├── places/
│ ├── tools/
│ └── <any-category>/ # extend freely
├── log/ # daily activity logs
│ └── YYYY-MM-DD.md
├── indexes/ # computed — NEVER edit directly
│ ├── memory.db # SQLite (primary index, FTS5 search)
│ └── graph.html # interactive graph visualization
├── backfill/ # connection discovery
│ ├── suggestions.md
│ └── history.md
└── scripts/ # symlinks → skill's scripts/ directory
├── rebuild-indexes.js # full or incremental index rebuild
├── suggest-backfill.js # scoped connection discovery (+ QMD semantic)
├── query.js # CLI structural query tool
├── briefing.js # context assembly for agents
├── lint.js # graph validation and health checks
├── visualize.js # D3.js graph visualization generator
├── commit.js # git auto-commit for graph/log changes
└── promote.js # log-to-node promotion suggestions
Script location: Scripts live in the skill directory (scripts/). ~/memory/scripts/ contains symlinks to them. All scripts support MEMORY_ROOT env var (defaults to ~/memory) so they resolve paths correctly regardless of where they're installed.
If ~/memory/ does not exist, read references/setup.md and follow the scaffolding steps. This creates the folder structure, symlinks scripts, seeds initial nodes, and builds indexes.
If ~/memory/ already exists, proceed to Operations below.
Every node is a markdown file with YAML frontmatter:
---
type: project
created: 2026-03-20
updated: 2026-03-20
tags: [side-project, saas]
status: active
relations:
- { to: people/someone, type: owner }
- { to: tools/nextjs, type: built-with }
---
# Title
Free-form body.
## Changelog
- 2026-03-20: Created node
type — matches parent folder namecreated — ISO dateupdated — ISO date, last time node content was meaningfully changed. Used for staleness tracking.tags — flat list for categorizationstatus — active, archived, idea, done, etc.relations — list of { to, type } objects. to is relative path within graph/ (no .md). type is any string.Suggested standard types (non-standard types trigger info-level lint warnings):
uses, built-with, part-of, containscreator, owner, maintainerrelated-to, inspired-by, alternative-to, core-concept-of, core-value-ofled-to, preceded-by, evolved-intohome-of, lives-in, works-atWrite a relation on one side only. The index script computes the reverse.
Nodes can have a ## Changelog section at the bottom of the body. Format:
- YYYY-MM-DD: description of what changed
Templates for common node types are in the skill's templates/ directory:
person.md, project.md, tool.md, concept.md, place.mdUse these as starting points when creating new nodes. Copy and edit — don't modify the templates themselves.
# Check recent activity
cat ~/memory/log/$(date +%Y-%m-%d).md
# Context briefing for a node (full content + relations + recent logs)
node ~/memory/scripts/briefing.js --node projects/flowmind
# Topic briefing (search-based)
node ~/memory/scripts/briefing.js --topic "immutability"
# Semantic search (if QMD is installed — best for natural language queries)
qmd vsearch "trust and data integrity" # vector similarity
qmd query "what connects X and Y" # hybrid + reranking
# Structural search
node ~/memory/scripts/query.js --search "keyword"
# Node details with all relations
node ~/memory/scripts/query.js --node projects/flowmind
# All nodes related to something
node ~/memory/scripts/query.js --related-to people/abdullah
# Filter by type and status
node ~/memory/scripts/query.js --type project --status active
# Browse by tag
node ~/memory/scripts/query.js --tag side-project
# Recently modified nodes
node ~/memory/scripts/query.js --recent 7
# Stale nodes (not updated in N days)
node ~/memory/scripts/query.js --stale 30
# Graph overview
node ~/memory/scripts/query.js --stats
ls ~/memory/graph/<category>/templates/ directory to ~/memory/graph/<category>/<name>.mdcreated and updated to today)type: suggested if uncertainnode ~/memory/scripts/rebuild-indexes.js --incrementalqmd update && qmd embed (refreshes semantic search)updated field to today's date## Changelog section if significantnode ~/memory/scripts/rebuild-indexes.js --incrementalAppend to ~/memory/log/YYYY-MM-DD.md (create if needed):
- **HH:MM** [agent-name] Description {ref: path/to/node, path/to/other}
{ref: ...} references are backfill signals — they hint at connections between nodes.
# Rebuild indexes first (if not recently done)
node ~/memory/scripts/rebuild-indexes.js --incremental
# Generate suggestions (scoped — uses tags, FTS, log co-refs, + QMD semantic)
node ~/memory/scripts/suggest-backfill.js # all nodes
node ~/memory/scripts/suggest-backfill.js --scope recent # last 7 days only
node ~/memory/scripts/suggest-backfill.js --scope node:projects/flowmind # specific node
node ~/memory/scripts/suggest-backfill.js --no-qmd # skip semantic search
# Rebuild with automatic scoped backfill on changed nodes
node ~/memory/scripts/rebuild-indexes.js --incremental --with-backfill
Review ~/memory/backfill/suggestions.md. Accept by adding the relation to the node's frontmatter. Reject by logging in backfill/history.md.
node ~/memory/scripts/lint.js # check for issues
node ~/memory/scripts/lint.js --fix # auto-fix (adds missing updated fields)
Checks: missing required fields, broken relations, orphan nodes, duplicate titles, non-standard relation types.
node ~/memory/scripts/visualize.js # generates ~/memory/indexes/graph.html
open ~/memory/indexes/graph.html # view in browser
Interactive D3.js force-directed graph. Nodes colored by type, sized by connections. Click for details.
node ~/memory/scripts/commit.js # auto-commit graph/ and log/ changes
node ~/memory/scripts/commit.js --message "custom msg" # with custom message
Stages graph/, log/, backfill/history.md, and README.md changes, commits with descriptive message. Does NOT auto-push.
node ~/memory/scripts/promote.js # find recurring topics without nodes
node ~/memory/scripts/promote.js --min 5 # raise mention threshold
node ~/memory/scripts/promote.js --days 30 # only recent logs
Scans logs for entities mentioned 3+ times without existing nodes. Suggests node creation.
Create a folder under graph/. No config changes. Indexes adapt on rebuild.
log/YYYY-MM-DD.md when you do something significant.{ref: ...}.indexes/. Run the rebuild script instead.graph/recipes/? Create the folder. No config changes.suggested type for uncertain relations. Let a human or another agent confirm.updated on changes. Keep the updated field current for temporal tracking.lint.js to check.