Persistent Context Graph

VerifiedSafe

A persistent knowledge base combining an LLM wiki with a knowledge graph for accumulating and cross-referencing information.

Sby Skills Guide Bot
Data & AIIntermediate
7/27/2026
Claude CodeCursorWindsurf
#knowledge-graph#persistence#rag#wiki#entity-extraction

Recommended for

Automated summary

Builds and queries a persistent knowledge base combining a wiki, a knowledge graph, and raw source documents, enabling knowledge accumulation without re-deriving context on every query.

Strengths

  • Persistent knowledge across sessions, avoiding re-discovery
  • Three layers (wiki, graph, raw sources) for rich querying and verification
  • Automated entity and relation extraction with textual provenance

Limitations

  • Requires Python infrastructure to run the helper scripts
  • Extraction quality depends on the LLM's ability to extract entities/relations consistently
  • Deduplication and update management may need manual oversight via logs
When to use it

For long-running or iterative projects where accumulating contextual knowledge prevents starting from scratch each time.

When not to use it

For one-off, simple queries where standard RAG is sufficient, or if the environment cannot maintain persistent files.

Security analysis

Safe
Quality score90/100

The skill instructs an LLM agent to use Python scripts for file operations within a designated knowledge base (writing wiki pages, updating graph data). No network activity, shell commands, or destructive actions are included. The ingestion constraints promote careful extraction, and there is no attempt to exfiltrate data or disable safety mechanisms.

No concerns found

How this analysis is made

Examples

Ingest a new document with entity extraction
Ingest this incident report document into the mini context graph. Extract entities like 'memory leak' and 'system crash' with their relations, and update the wiki summary page.
Query the knowledge graph for causal chains
Using the mini context graph, why does the system crash? Traverse the graph to find root causes and return the evidence chain.
Update an existing entity page
Update the wiki entity page for 'memory leak' with new findings from the latest analysis, and add any new relations to the graph.

name: mini-context-graph description: | A persistent, compounding knowledge base combining Karpathy's LLM Wiki pattern with a structured knowledge graph. Ingest documents once — the LLM writes wiki pages, extracts entities/relations into the graph, and stores raw content for evidence retrieval. Knowledge accumulates and cross-references; it is never re-derived from scratch.

Mini Context Graph Skill

The Core Idea

Standard RAG re-discovers knowledge from scratch on every query. This skill is different:

  1. Wiki layer — The LLM writes and maintains persistent markdown pages (summaries, entity pages, topic syntheses). Cross-references are already there. The wiki gets richer with every ingest.
  2. Graph layer — Entities and relations are extracted once and stored as a navigable knowledge graph. BFS traversal answers structural queries without re-reading sources.
  3. Raw source layer — Original documents are stored immutably with chunks. Provenance links tie every graph node and edge back to the exact text that supports it.

The LLM writes; the Python tools handle all bookkeeping.


Three Layers

| Layer | Where | What the LLM does | What Python does | |-------|-------|-------------------|-----------------| | Raw Sources | data/documents.json | Reads (never modifies) | Stores chunks + metadata | | Wiki | wiki/ (markdown) | Writes/updates pages | Manages index.md + log.md | | Graph | data/graph.json | Extracts entities + relations | Persists, deduplicates, traverses |


⚡ Quick Start for Agents

from scripts.contextgraph import ContextGraphSkill
from scripts.tools import wiki_store

skill = ContextGraphSkill()

# ===== INGEST WITH FULL RAG + WIKI =====
# 1. Read ingestion.md and ontology.md first
# 2. Extract entities and relations (LLM reasoning step)
entities = [
    {"name": "memory leak",   "type": "issue",  "supporting_text": "memory leaks cause crashes"},
    {"name": "system crash",  "type": "issue",  "supporting_text": "system crashes due to memory leaks"},
]
relations = [
    {"source": "memory leak", "target": "system crash", "type": "causes",
     "confidence": 1.0, "supporting_text": "System crashes due to memory leaks."},
]

result = skill.ingest_with_content(
    doc_id="doc_001",
    title="System Crash Analysis",
    source="/docs/incident_report.pdf",
    raw_content="System crashes due to memory leaks. Memory leaks occur when objects are not released.",
    entities=entities,
    relations=relations,
)
# result = {"doc_id": "doc_001", "chunk_count": 1, "nodes_added": 2, "edges_added": 1}

# 3. Write a wiki summary page for this document
wiki_store.write_page(
    category="summary",
    title="System Crash Analysis Summary",
    content="""---
title: System Crash Analysis
source_document: doc_001
tags: [summary, incident]
---

# System Crash Analysis

**Source:** incident_report.pdf

## Key Claims

- [[memory-leak]] causes [[system-crash]] (confidence: 1.0)

## Entities

- [[memory-leak]] (issue)
- [[system-crash]] (issue)
""",
    summary="Incident report: memory leaks cause system crashes.",
)

# ===== QUERY WITH EVIDENCE =====
result = skill.query_with_evidence("Why does the system crash?")
# Returns: {"query": ..., "subgraph": ..., "supporting_documents": [...], "evidence_chain": ...}

# ===== WIKI SEARCH (read wiki before answering) =====
pages = wiki_store.search_wiki("memory leak")
# Returns: [{slug, category, path, snippet}, ...]

Operations

Ingest

When a user provides a new document:

  1. Read ingestion.md — entity/relation extraction rules.
  2. Read ontology.md — type normalization rules.
  3. Extract entities and relations using your LLM reasoning.
  4. Call skill.ingest_with_content(...) — stores raw content + chunks + graph nodes + provenance.
  5. Write a wiki summary page using wiki_store.write_page(category="summary", ...).
  6. Update entity pages — for each new/updated entity, write or update wiki_store.write_page(category="entity", ...).
  7. Update topic pages if the document touches an existing synthesis topic.
  8. A single document ingest will typically touch 3–10 wiki pages.

Query

When a user asks a question:

  1. Check the wiki first — wiki_store.search_wiki(query) to find relevant pages. Read them.
  2. If the wiki has a good answer, synthesize from wiki pages (fast path).
  3. If deeper graph traversal is needed, call skill.query_with_evidence(query).
  4. Return the answer with evidence citations from supporting_documents.
  5. If the answer is valuable, file it back as a new wiki topic page.

Lint

Periodically health-check the wiki:

from scripts.tools import wiki_store
issues = wiki_store.lint_wiki()
# Returns: {orphan_pages, missing_pages, broken_wikilinks, isolated_pages}

Ask the LLM to review and fix: broken links, orphan pages, stale claims, missing cross-references. See lint.md for full lint workflow.


Ingestion Constraints

  • ❌ Do NOT hallucinate entities not present in the text
  • ❌ Do NOT add relations without explicit textual evidence
  • ❌ Do NOT add edges with confidence < 0.6
  • ✅ Provide supporting_text for every entity and relation — this enables provenance
  • ✅ Write a wiki summary page for every ingested document
  • ✅ Update existing entity pages when new information arrives
  • ✅ Flag contradictions in wiki pages when new data conflicts with old claims

Retrieval Constraints

  • 🔒 Traversal depth MUST NOT exceed 2 (config: MAX_GRAPH_DEPTH)
  • 🔒 Only edges with confidence ≥ 0.6 (config: MIN_CONFIDENCE)
  • 🔒 Maximum 50 nodes returned (config: MAX_NODES)
  • ❌ Do NOT fabricate nodes or edges not in the graph

Full Python API Reference

| Method | Purpose | When to Use | |--------|---------|-------------| | skill.ingest_with_content(doc_id, title, source, raw_content, entities, relations) | Full RAG ingest: raw docs + graph + provenance | Every new document | | skill.add_node(name, node_type) | Add single entity (no provenance) | Quick additions without a source doc | | skill.add_edge(source_name, target_name, relation, confidence) | Add single relation | Quick additions without a source doc | | skill.query(query) | Graph-only retrieval → subgraph | Structural queries | | skill.query_with_evidence(query) | Graph + provenance → subgraph + source chunks | Queries requiring citations | | wiki_store.write_page(category, title, content, summary) | Write/update a wiki page | After every ingest; after answering queries | | wiki_store.read_page(category, title) | Read a wiki page | Before answering; for cross-referencing | | wiki_store.search_wiki(query) | Keyword search across wiki | Fast path before graph traversal | | wiki_store.list_pages(category) | List all wiki pages | Getting an overview | | wiki_store.get_log(last_n) | Read recent operations | Understanding wiki history | | wiki_store.lint_wiki() | Health check | Periodic maintenance | | documents_store.list_documents() | List all ingested raw sources | Audit / provenance checking | | documents_store.search_chunks(query) | Chunk-level search | Finding specific evidence |


Design Philosophy

"The wiki is a persistent, compounding artifact. The cross-references are already there. The synthesis already reflects everything you've read." — Karpathy

| Layer | What Happens | Who Owns It | |-------|-----------|-------------| | LLM Reasoning | Extraction, synthesis, writing wiki pages | Agent (.md guidance files) | | Wiki Persistence | Index, log, file I/O | wiki_store.py | | Graph Persistence | Dedup, index, BFS traverse | graph_store.py, retrieval_engine.py | | Raw Source Storage | Immutable docs + chunks + provenance | documents_store.py |

The human curates sources and asks questions. The LLM writes the wiki, extracts the graph, and answers with citations. Python handles all bookkeeping.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/persistent-context-graph-ms2s7dlx' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/persistent-context-graph-ms2s7dlx/download' --output '.skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md.part' && mv '.skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md.part' '.skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md' && test -s '.skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/mini-context-graph' && cp -R '.skill-downloads/persistent-context-graph-ms2s7dlx' '.claude/skills/mini-context-graph'

Cursor
test -f '.skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md' && test -s '.skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/mini-context-graph' && cp -R '.skill-downloads/persistent-context-graph-ms2s7dlx' '.cursor/skills/mini-context-graph'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/persistent-context-graph-ms2s7dlx'

openskills read 'persistent-context-graph-ms2s7dlx'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/persistent-context-graph-ms2s7dlx/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills