6.5 KiB
6.5 KiB
name, description, version, category, tags
| name | description | version | category | tags | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| memory-sync | Set up and maintain a markdown-based personal memory system with qmd semantic search and Git/Gitea sync. Based on Karpathy's LLM Wiki pattern. Covers wiki structure, qmd search setup, git sync, and maintenance protocol. | 2.0.0 | research |
|
Memory Sync
Set up and maintain a markdown-based personal memory system using qmd for semantic search and Git/Gitea for version control.
This umbrella skill covers:
- Wiki setup and maintenance — directory structure, git sync, session log protocol
- qmd semantic search — BM25, vector embeddings, LLM reranking for the wiki
- MCP server integration (optional) — HTTP transport for LLM tool access
Quick Setup
1. Install qmd (Query Markup Documents)
# Check for Node.js
node --version 2>/dev/null || echo "Not installed"
# If not installed, download Node.js for x86_64:
curl -fsSL https://nodejs.org/dist/v20.11.0/node-v20.11.0-linux-x64.tar.xz -o /tmp/node.tar.xz
tar -xJf /tmp/node.tar.xz -C /tmp/
export PATH="/tmp/node-v20.11.0-linux-x64/bin:$PATH"
# Install qmd
npm install -g @tobilu/qmd
2. Create Memory Directory
mkdir -p ~/.hermes/memory
cd ~/.hermes/memory
# Add as qmd collection
qmd collection add ~/.hermes/memory --name memory
# Add context for better search results
qmd context add qmd://memory "Personal knowledge base using Karpathy LLM Wiki pattern"
# Generate embeddings (downloads model on first run, ~250MB)
qmd embed
3. Set Up Git Sync
cd ~/.hermes/memory
git init
git config user.name "Your Name"
git config user.email "your@email.com"
# Add remote (Gitea HTTPS with token auth)
git remote add origin "https://USER:TOKEN@git.familie-schoen.com/USER/memory.git"
# Push to main branch
git branch -m master main 2>/dev/null
git push -u origin main
4. Create Initial Structure
~hermes/memory/
├── index.md # Content catalog
├── log.md # Chronological log (append-only)
├── Entities/
│ └── *.md # Entity pages (person, system, tool)
├── Concepts/
│ └── *.md # Concept pages (architecture, workflow)
├── Projects/ # Empty — future project pages
├── Templates/ # Empty — future templates
└── memory-entry-NNN.md # Session log entries (numbered)
The index.md links to subdirectory pages using relative paths: [[Entities/Infrastructure.md]].
Maintenance Protocol (CRITICAL)
The memory must be kept current at ALL times. This is not optional.
Start of Session
- Read
log.mdand checkgit statusto see what was last synced - Read
index.mdto understand current state - If memory is stale, correct it before proceeding with any task
- Use
hindsight_recallor direct file reads to verify facts before answering
End of Session
- Append to
log.mdwith today's changes - Create
memory-entry-NNN.md(next available number) summarizing the session - Update
index.mdif new entities/concepts were created - Commit and push:
cd ~/.hermes/memory && git add . && git commit -m "Update: brief description" && git push - Verify push succeeded before ending the session
Never
- Do NOT use
hindsight_retainfor memory files — the daemon is not available and will silently fail - Do NOT commit without pushing — unsynced memory is stale memory
- Do NOT let memory files go stale between sessions
Sync Workflow
Manual Sync
cd ~/.hermes/memory
git add .
git commit -m "Description" && git push 2>/dev/null || echo "No changes"
qmd embed 2>/dev/null # Re-index new files
Automatic Sync (cron — script-only, no agent)
For purely git-based sync operations, use --no-agent to skip the LLM entirely (saves time/cost):
hermes cron create \
--name "memory-sync-daily" \
--schedule "0 22 * * *" \
--script 'cd ~/.hermes/memory && git add . && git commit -m "Auto-sync: $(date +%%Y-%%m-%%d)" && git push origin main' \
--no-agent
Memory Entry Format
Use numbered entries for session logs:
# Memory Entry 001 - System Initialization
## Date
2026-04-28
## Summary
Brief description of what was done.
## Details
- [x] Task 1
- [x] Task 2
- [ ] Task 3 (pending)
## Status
- Completed items
- Pending items
## Notes
Additional context or questions.
Pitfalls
- qmd embed may not index new files — if files were added after collection creation, recreate the collection:
qmd collection rm memory && qmd collection add ~/.hermes/memory --name memory && qmd embed - First qmd embed downloads a model — ~250MB, may take minutes
- Token scope — Gitea tokens need
write:repositoryscope for push access - Branch naming — Gitea repos default to
main, local git may createmaster— rename withgit branch -m master main - HTTPS vs SSH — When SSH is blocked, use HTTPS with token in URL:
https://USER:TOKEN@git.server.com/USER/repo.git - hindsight_retain silently fails — the daemon is not available; use direct file edits + git instead
- Memory goes stale between sessions — always start by reading log.md and checking git status
When to Use
- Setting up a new memory/knowledge system
- Adding semantic search to a markdown wiki
- Syncing memory files to Gitea/GitHub
- Creating structured memory entries after sessions
- Maintaining up-to-date knowledge base across sessions
Search Commands
# Fast keyword search (BM25)
qmd search "authentication"
# Semantic search (embedding-based)
qmd vsearch "how to deploy"
# Hybrid + LLM reranking (best quality)
qmd query "quarterly planning process"
# Get a specific document
qmd get "meetings/2024-01-15.md"
# Search within a specific collection
qmd search "API" -c wiki
# JSON output for agents
qmd search "authentication" --json -n 10
MCP Server (Optional)
# Start MCP server (HTTP transport)
qmd mcp --http
# Start as daemon
qmd mcp --http --daemon
# Stop
qmd mcp stop
# Check status
qmd status
Configure MCP clients to connect to http://localhost:8181/mcp.
Pitfalls
- qmd embed may not index new files — if files were added after collection creation, recreate:
qmd collection rm wiki && qmd collection add $WIKI --name wiki && qmd embed - First qmd embed downloads model — ~250MB, may take minutes
- Node.js version — qmd requires Node.js 20.17.0+ for some deps
- Memory usage — ~1GB RAM when model is loaded