Install
openclaw skills install skylv-knowledge-graph-notesAutomatically creates bidirectional links between related notes
openclaw skills install skylv-knowledge-graph-notesAuto-discover hidden connections between your notes. Bidirectional links, knowledge graphs, and semantic link suggestions — without plugins.
Analyzes a directory of notes (markdown, txt, org, obsidian vault) and:
Unlike the incumbent slipbot (which does keyword matching), this skill uses semantic understanding — it knows that "LLM" relates to "language model" and "transformer architecture" even without exact keyword overlap.
Trigger when user says:
| Field | Type | Description |
|---|---|---|
notesPath | string | Path to notes directory (default: ~/.qclaw/workspace/) |
query | string | Optional: specific question about note relationships |
depth | number | Link traversal depth (default: 2) |
format | string | graph / list / markdown (default: markdown) |
## Knowledge Graph
### Notes Analyzed: 47
### Total Links Found: 134
### Orphan Notes: 3 (unconnected)
## Top Hubs (most linked)
1. **AI_Agent_Architecture.md** — 18 connections
2. **Memory_System_Design.md** — 14 connections
3. **GitHub_Strategy.md** — 11 connections
## Link Suggestions
| From | To | Confidence | Reason |
|------|----|-----------|--------|
| EvoMap.md | Memory_System_Design.md | 0.94 | Shared topic: self-evolution |
| GitHub_Strategy.md | clawhub_publish.md | 0.91 | Project: SKY-lv repo family |
| AI_Agent_Architecture.md | hermes-agent-integration.md | 0.87 | Tool integration |
## Backlinks
### EvoMap.md (3 backlinks)
← Memory_System_Design.md (self-repair loop concept)
← skill-market-analyzer.md (GEP protocol reference)
← agent-builder.md (evolution pattern)
{
"nodes": [{"id": "note-name", "connections": 18, "topics": [...]}],
"edges": [{"from": "A", "to": "B", "weight": 0.94, "reason": "..."}]
}
notesPath/
├── link_engine.js ← Core: read → extract → analyze → graph
├── graph_query.js ← Traverse graph, answer questions
└── export.js ← Export as Obsidian markdown, JSON, CSV
Phase 1: Index
.md, .txt, .org filesPhase 2: Entity Extraction
Phase 3: Relationship Detection
Relationship Score = cosine_similarity(embedding_A, embedding_B)
Without external embedding APIs, use:
Phase 4: Graph Construction
const graph = {
nodes: Map<noteId, {file, topics, keywords, blocks}>,
edges: Map<noteId, Map<noteId, {score, reasons, type}>>
}
Phase 5: Query
| Confidence | Condition | Action |
|---|---|---|
| ≥ 0.85 | Strong semantic match | Auto-link (add [[wikilink]]) |
| 0.60–0.84 | Probable match | Suggest with reason |
| 0.40–0.59 | Weak match | Flag as "possible" |
| < 0.40 | Noise | Ignore |
For embedding-free similarity, use:
[[wikilink]] syntax![[embed]] and ![[callout]] patterns~/.qclaw/note-linking-graph.json| Metric | Value |
|---|---|
| Current incumbent | slipbot (score: 1.021) |
| Top target score | 3.5 |
| Gap | 3.43× improvement possible |
| Incumbent weakness | Keyword-only matching, no graph |
skylv-knowledge-graph — if you want full graph visualizationskylv-file-versioning — version your note graph over timeskylv-ai-prompt-optimizer — optimize your note-taking prompts