A starter stack for turning markdown notes into a searchable personal wiki.
It gives you a local markdown vault, wiki linting, graph extraction, hybrid search, and report-only maintenance jobs. It is a public template, not a mirror of any private memory system.
curl -fsSL https://raw.githubusercontent.com/nardovibecoding/memory-wiki-graph-stack/main/install.sh | bashRequirements:
- Python 3.10+
- Node.js 18+ for local search
- macOS or Linux
The installer creates a vault under ~/wiki by default. Override it with:
VAULT_ROOT="$HOME/my-wiki" bash install.sh| Component | Purpose |
|---|---|
wiki-scaffold/ |
starter markdown wiki structure |
lint/ |
schema, wikilink, orphan, and stale-reference checks |
graph/ |
graph extraction from markdown links and metadata |
search/ |
local BM25/vector search over markdown files |
lifecycle/ |
importance decay and maturity promotion helpers |
promote/ |
optional lesson-promotion workflow using your own LLM adapter |
cron/ |
report-only daily maintenance wrappers |
git clone https://github.com/nardovibecoding/memory-wiki-graph-stack.git
cd memory-wiki-graph-stack
./scripts/init.sh "$HOME/my-wiki"
cp config.yaml "$HOME/.config/llm-wiki-stack/config.yaml"Edit the config:
wiki_dir: ~/my-wiki
memory_dir: ~/my-wiki/imports/memory
memo_dir: ~/my-wiki/memosInstall search dependencies:
cd search
npm install# lint only
python3 lint/scripts/wiki_lint.py --scope wiki
# deterministic fixes only
python3 lint/scripts/wiki_lint.py --scope wiki --fix
# build a tag index
node search/build-index.mjs
# search your wiki
node search/search.mjs "release checklist"
# run report-only daily maintenance
bash cron/daily-maintenance-full.shCopy .env.example or config.yaml and edit locally. Use fake values in public
examples. Keep real paths, notes, logs, transcripts, and API keys out of git.
Key settings:
| Setting | Default | Meaning |
|---|---|---|
wiki_dir |
~/wiki |
markdown wiki root |
memory_dir |
~/wiki/imports/memory |
optional imported notes |
memo_dir |
~/wiki/memos |
report output |
graph.output |
~/wiki/meta/graph_unified.json |
graph output |
LLM_WIKI_CONFIG |
unset | override config path |
LLM_WIKI_APPLY |
0 |
allow write-capable maintenance only when set to 1 |
Cron scripts are report-only by default. They can inspect and report, but they
do not run write-capable LLM automation unless you explicitly opt in with
LLM_WIKI_APPLY=1 or an --apply flag where documented.
This keeps the public template safe for first-time users.
The stack can be connected to your own LLM tooling, but no private assistant workflow is required. Configure these only if you already have a local adapter:
promote:
llm_client_path: ~/llm-client
system_prompt_script: ~/wiki/system_prompt_rules.py
min_votes: 3The public template intentionally omits:
- private memory graphs
- bot transcript paths
- trading or production project defaults
- unattended write-capable automation
- private hostnames, deployment logs, cookies, OAuth files, and session state
Every markdown file should have:
---
title: Article Title
type: article
tags: [example]
created: 2026-01-15
updated: 2026-01-20
---Optional fields include importance, maturity, source, and status.
| Feature | Concept | This Template |
|---|---|---|
| Markdown wiki | described | scaffolded |
| Search | described | local BM25/vector search |
| Graph | optional | markdown graph extraction |
| Lint | described | deterministic checks and fixes |
| Maintenance | manual | report-only cron wrappers |
| Private workflow | user-specific | intentionally omitted |
This is a solo-maintainer public template. Security-sensitive changes should be reviewed by the maintainer before release.
MIT