Useful work with AI shouldn't disappear when a conversation ends. Wenlan builds the right pages and keeps them current as sources change, asking only when judgment is needed.
https://github.com/user-attachments/assets/d8b2ad4a-f97a-4a15-97a8-9105478de18a
Get started
Wenlan runs as one local daemon. The desktop app carries that daemon inside it; the headless install gives you the same daemon without a window. Your AI clients reach the same knowledge base either way.
Desktop app
Download from the Releases page:
- macOS (Apple Silicon): open the
.dmg and drag Wenlan to Applications. The app is signed and notarized, so there is no warning on first launch. From the terminal instead: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/7xuanlu/wenlan/main/scripts/install-macos-app.sh)" (downloads, checks the SHA-256, moves it to Applications).
- Windows x64: run the
-setup.exe. It is not signed yet, so when SmartScreen says "Windows protected your PC", choose "More info", then "Run anyway".
- Linux: no desktop build yet; use the headless runtime below.
The app bundles the daemon, CLI, and MCP connector, starts the daemon on launch, and offers to connect the AI clients it detects: the plugin for Claude Code and Codex, an MCP entry for the rest. To upgrade, drag the new app over the old one and open it (Wenlan 0.17.0 and older must be quit by hand first).
Set up with your AI
Paste this into Claude Code, Codex, or another tool that can follow a setup guide:
Set up Wenlan for this AI client by following:
https://raw.githubusercontent.com/7xuanlu/wenlan/main/docs/setup-with-ai.md
Install only what this client needs. Then verify the local runtime,
its Wenlan connection, and a capture/recall round trip.
The guide detects which client you are using and keeps client-specific commands out of this README. It does not configure every AI tool unless you ask it to.
Need only the headless runtime on macOS Apple Silicon?
npx -y wenlan setup
npx requires Node.js; without it, run curl -fsSL https://raw.githubusercontent.com/7xuanlu/wenlan/main/install.sh | bash then wenlan setup --basic.
This downloads the prebuilt CLI, daemon, and MCP connector, starts the local runtime, and verifies it. No Rust toolchain or Cargo is required. Linux x64/ARM64 with glibc has an automated shell setup path; Windows x64 uses the matching archive from Releases. macOS Intel currently has no supported complete-runtime install.
Manual and client-specific instructions: AI-assisted setup · Claude Code plugin · Codex plugin · CLI and MCP.
What is this?
Wenlan turns documents, notes, and past AI conversations into a source-backed knowledge base that stays current as your work evolves. Sources remain traceable; decisions, lessons, and corrections become durable memories; both can support the same maintained Pages.
Built for work that continues. Wenlan is for researchers, writers, consultants, product teams, and software teams whose knowledge is scattered across documents, notes, and AI conversations. It turns that material into inspectable Pages that can improve across projects and weeks, not another chat history or isolated memory store. It is not a life-management system or a memory SDK embedded inside another product.
One knowledge system, three roles:
- Sources keep the material Wenlan reads traceable. Imported conversations remain as captured records; registered files sync their current contents as they change.
- Memories preserve what work teaches you. Agents capture atomic decisions, lessons, corrections, and supersession with provenance.
- Pages compile current knowledge. Wenlan turns relevant Sources and Memories into source-cited Markdown you can reuse, refresh, and review.
The LLM-wiki foundation, extended:
- LLM-wiki v1: Karpathy defined immutable Sources, an AI-maintained Markdown Wiki, and a co-evolving Schema of rules for structuring and maintaining it. Wenlan implements that foundation with typed Memory fields and built-in rules for Page structure, provenance, citations, refresh, ownership, and review.
- LLM-wiki v2: Rohitg00 added a memory lifecycle. Wenlan makes that direction concrete with traceable Sources, agent-captured Zettelkasten-style atomic Memories (one complete idea each), and maintained Pages built from both.
For the complete workflow, see the LLM-wiki implementation guide.
Wenlan's distinctive move: Sources and atomic Memories independently support maintained Pages. Memory history preserves how knowledge changed; Page history shows which current evidence supports the synthesis. Machine-maintained Pages can rebuild from current support, while changes to human writing wait as reviewable revisions.
A knowledge graph that gets more useful over time
The entity-relation graph is one part of Wenlan's wider connected wiki. Knowledge Pages hold maintained synthesis, Entities anchor reusable people, projects, and concepts, Source Pages make imported or synchronized material inspectable, and atomic Memories preserve decisions and changes. They work through separate, explicit links: Page-to-Page wikilinks, Page evidence, Memory-to-Entity links, and directed Entity relations.
Within the entity graph, a configured enrichment model extracts typed Entities, observations, and directed relations from Memories. Entity linking and resolution reuse existing nodes instead of treating every mention as new; each Memory keeps its Source and can link to multiple Entities. How the connected model is stored ->
- Meaning and direction: Relations use a seeded vocabulary such as
uses, part_of, contradicts, and replaced_by; unknown types fall back to related_to and become reviewable vocabulary proposals.
- Strength and provenance: A relation can store confidence, an explanation, and its source Memory, so stronger and weaker claims remain distinguishable and inspectable.
- Communities that compound: Label propagation groups Entities by relation density, weighted by the relation count between each pair. These groups can organize optional corpus summaries while Entity links add retrieval context.
- Correction without erasure: Related claims, corrections, and explicit supersession stay inspectable together while original Sources and Memory history remain.
During retrieval, dense entity matching finds query-relevant entities. When eligible graph links exist, the default graph-memory stream boosts linked Memories as a third RRF signal. The path is data- and scope-dependent, and Space boundaries (Spaces are defined under Capabilities) still apply. How the graph path works ->
Retrieval across words, meaning, and connections
Wenlan's core search is a local hybrid pipeline, not a single vector lookup. Each stage has a different job:
- Exact wording, SQLite FTS5: a full-text index finds literal terms, identifiers, and phrases.
- Similar meaning, FastEmbed +
Qdrant/bge-base-en-v1.5-onnx-Q: a quantized English model creates 768-dimensional embeddings; libSQL cosine DiskANN indexes them for approximate nearest-neighbor retrieval.
- Combined ranking, weighted RRF (
k = 60): lexical and semantic rank lists are fused without pretending their raw scores share a scale; cosine similarity also weights the vector contribution.
- Connected context, graph-memory stream: eligible entity links add a third RRF signal while the active read scope still filters returned Memories.
- Optional precision, cross-encoder reranking: unlike embeddings,
jinaai/jina-reranker-v1-turbo-en or BAAI/bge-reranker-base reads each query-candidate pair and reorders the smaller pool; reranking is off by default.
Page, episodic, and fact channels are opt-in and degrade to the remaining search signals if unavailable. Space still limits the read scope. Methods, defaults, and limitations ->
Two lifecycles, one maintained knowledge system