wenlan-mcp 0.18.16 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +169 -169
- package/install.js +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<picture>
|
|
3
3
|
<source media="(max-width: 600px)" srcset="./docs/assets/readme-banner-mobile.png">
|
|
4
|
-
<img src="./docs/assets/readme-banner.png" alt="Wenlan:
|
|
4
|
+
<img src="./docs/assets/readme-banner.png" alt="Wenlan: A living personal wiki. AI organizes. You stay in control." width="100%">
|
|
5
5
|
</picture>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Wenlan turns your documents, notes, and AI conversations into editable pages with links to their sources, so you and your AI tools can keep building on them.
|
|
9
|
+
|
|
10
|
+
As sources change, you can ask AI to update the pages or enable background updates. If you’ve edited a page, Wenlan proposes revisions for you to review instead of automatically overwriting your work.
|
|
9
11
|
|
|
10
12
|
<p align="center">
|
|
11
13
|
English | <a href="./README.zh-Hans.md">简体中文</a> | <a href="./README.zh-Hant.md">繁體中文</a> | <a href="./README.es-ES.md">Español</a>
|
|
12
14
|
</p>
|
|
13
15
|
|
|
14
16
|
<p align="center">
|
|
15
|
-
<a href="https://github.com/
|
|
16
|
-
<a href="https://github.com/
|
|
17
|
+
<a href="https://github.com/wenlan-app/wenlan/actions/workflows/ci.yml?query=branch%3Amain"><img alt="CI" src="https://github.com/wenlan-app/wenlan/actions/workflows/ci.yml/badge.svg?branch=main&event=push"></a>
|
|
18
|
+
<a href="https://github.com/wenlan-app/wenlan/releases/latest"><img alt="Latest release" src="https://img.shields.io/github/v/release/wenlan-app/wenlan?sort=semver&label=release"></a>
|
|
17
19
|
<a href="#license"><img alt="License: Apache-2.0 and AGPL-3.0" src="https://img.shields.io/badge/license-Apache--2.0%20%2B%20AGPL--3.0-blue.svg"></a>
|
|
18
20
|
</p>
|
|
19
21
|
|
|
@@ -26,34 +28,30 @@ Useful work with AI shouldn't disappear when a conversation ends. Wenlan builds
|
|
|
26
28
|
<a href="#learn-more">Learn more</a>
|
|
27
29
|
</p>
|
|
28
30
|
|
|
29
|
-
https://github.com/user-attachments/assets/
|
|
31
|
+
https://github.com/user-attachments/assets/35f06749-00e5-484d-a9f4-5e462de8d11e
|
|
30
32
|
|
|
31
33
|
<p align="center">
|
|
32
|
-
<sub>
|
|
34
|
+
<sub>The opening frame is a composed preview, not a native three-pane view. The rest shows the app in use, including pages and source citations.</sub>
|
|
33
35
|
</p>
|
|
34
36
|
|
|
35
|
-
---
|
|
36
|
-
|
|
37
37
|
<a id="quickstart"></a>
|
|
38
38
|
<a id="start-in-30-seconds"></a>
|
|
39
39
|
|
|
40
40
|
## Get started
|
|
41
41
|
|
|
42
|
-
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.
|
|
43
|
-
|
|
44
42
|
<a id="start-with-the-app"></a>
|
|
45
43
|
<a id="open-the-wiki"></a>
|
|
46
44
|
<a id="desktop-app"></a>
|
|
47
45
|
|
|
48
|
-
###
|
|
46
|
+
### 1. Download and open Wenlan
|
|
49
47
|
|
|
50
|
-
Download
|
|
48
|
+
[Download the app](https://github.com/wenlan-app/wenlan/releases/latest), then open it:
|
|
51
49
|
|
|
52
|
-
- **macOS (Apple Silicon):** open the `.dmg` and drag Wenlan to Applications. The app is signed and notarized
|
|
53
|
-
- **Windows x64:** run the `-setup.exe`. It is not signed yet,
|
|
54
|
-
- **Linux:** no desktop build yet;
|
|
50
|
+
- **macOS (Apple Silicon):** open the `.dmg` and drag Wenlan to Applications. The app is signed and notarized.
|
|
51
|
+
- **Windows x64:** run the `-setup.exe`. It is not signed yet. If SmartScreen warns you, confirm you downloaded it from the official Releases page before choosing "More info" → "Run anyway".
|
|
52
|
+
- **Linux:** no desktop build yet; follow the [setup guide](docs/setup-with-ai.md#install-the-runtime) to use Wenlan with your AI tools without the app.
|
|
55
53
|
|
|
56
|
-
|
|
54
|
+
First launch downloads a model for local search, so keep an internet connection until setup finishes. [Download and privacy details](docs/PRIVACY.md#when-wenlan-reaches-the-network).
|
|
57
55
|
|
|
58
56
|
<a id="claude-code-in-30-seconds"></a>
|
|
59
57
|
|
|
@@ -62,230 +60,242 @@ The app bundles the daemon, CLI, and MCP connector, starts the daemon on launch,
|
|
|
62
60
|
<a id="mcp-setup"></a>
|
|
63
61
|
<a id="mcp-clients"></a>
|
|
64
62
|
|
|
65
|
-
###
|
|
63
|
+
### 2. Start with your own note
|
|
64
|
+
|
|
65
|
+
Choose **Open notes** to enter Wenlan, then create a page of your own. The welcome screen also offers a sample to explore first. You can start writing without importing material, connecting an AI tool, or setting up an AI model.
|
|
66
|
+
|
|
67
|
+
### 3. Bring in sources when you want
|
|
68
|
+
|
|
69
|
+
You can [import notes or ChatGPT / Claude conversation exports](#what-can-i-bring-in) whenever you are ready. Import is optional; you can begin with a page of your own.
|
|
70
|
+
|
|
71
|
+
### 4. Connect AI tools when you want AI help
|
|
72
|
+
|
|
73
|
+
Connect Claude Code, Codex, or other supported AI tools when you want them to use the same knowledge. A connected AI can write pages without an additional local language model.
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
<details>
|
|
76
|
+
<summary>Need help connecting? Ask your AI</summary>
|
|
77
|
+
|
|
78
|
+
Restart your AI tool if prompted. For help with setup, paste this into Claude Code, Codex, or another tool that can follow a setup guide:
|
|
68
79
|
|
|
69
80
|
```text
|
|
70
|
-
|
|
71
|
-
https://raw.githubusercontent.com/
|
|
81
|
+
Connect this AI tool to Wenlan by following:
|
|
82
|
+
https://raw.githubusercontent.com/wenlan-app/wenlan/main/docs/setup-with-ai.md
|
|
72
83
|
|
|
73
|
-
|
|
74
|
-
|
|
84
|
+
Reuse my existing Wenlan installation if available.
|
|
85
|
+
Set up only this AI tool, then check that it can save and find a test memory.
|
|
75
86
|
```
|
|
76
87
|
|
|
77
|
-
|
|
88
|
+
</details>
|
|
78
89
|
|
|
79
|
-
|
|
90
|
+
To organize a topic with a connected AI, open a work conversation worth keeping and ask:
|
|
80
91
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
92
|
+
> Turn the conclusions, reasoning, and sources about [topic] in this conversation into a Wenlan page with source citations.
|
|
93
|
+
|
|
94
|
+
You can also ask your AI to organize a topic from material you imported into a page.
|
|
84
95
|
|
|
85
|
-
|
|
96
|
+
When it's ready, open the new page in Wenlan, click a citation to check its source, and add your own thoughts. Next time you work on that topic, ask your AI to read this page before continuing.
|
|
86
97
|
|
|
87
|
-
|
|
98
|
+
Background organization and automatic updates are optional and need a [configured model](#models-and-privacy). For terminal installation, other platforms, and updates, see the [setup guide](docs/setup-and-data.md#installation).
|
|
88
99
|
|
|
89
|
-
|
|
100
|
+
Need help? [Setup guide](docs/setup-with-ai.md) · [Report a problem](https://github.com/wenlan-app/wenlan/issues). Issues are public: redact secrets, credentials, access tokens, identifiers, private or personal content from anything you share, including logs.
|
|
90
101
|
|
|
91
|
-
---
|
|
92
102
|
|
|
93
103
|
<a id="what-does-wenlan-build"></a>
|
|
94
104
|
<a id="why-it-compounds"></a>
|
|
95
105
|
|
|
96
|
-
|
|
106
|
+
<a id="what-is-this"></a>
|
|
97
107
|
|
|
98
|
-
|
|
108
|
+
## Your wiki, for you and your AI
|
|
109
|
+
|
|
110
|
+
- **Turn scattered material into connected topics.** Bring documents, notes, and AI conversations together in linked pages, with citations you can open and check.
|
|
111
|
+
- **Read it yourself. Use it with your AI.** Read and edit your pages, or ask Claude Code or Codex to use them for your next task.
|
|
112
|
+
- **Maintain knowledge without starting over.** Track source changes, update related pages, and keep their history. AI proposes revisions to pages you've edited for you to review.
|
|
113
|
+
|
|
114
|
+
Your pages are local Markdown files you can read, edit, and take with you.
|
|
99
115
|
|
|
100
116
|
<p align="center">
|
|
101
117
|
<picture>
|
|
102
|
-
<source media="(max-width:
|
|
103
|
-
<img src="./docs/assets/wenlan-system.png" alt="Sources and memories
|
|
118
|
+
<source media="(max-width: 900px)" srcset="./docs/assets/wenlan-system-mobile.png">
|
|
119
|
+
<img src="./docs/assets/wenlan-system.png" alt="Sources and memories feed an illustrative Agent Loop page. It combines retry guidance with a concrete lesson: tests passed, but a line still covered a mobile label. Desktop and mobile visual checks become part of the completion criteria for later work with Claude or Codex." width="100%">
|
|
104
120
|
</picture>
|
|
105
121
|
</p>
|
|
106
122
|
|
|
107
123
|
<a id="what-wenlan-is-not"></a>
|
|
108
124
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
**One knowledge system, three roles:**
|
|
112
|
-
|
|
113
|
-
- **Sources keep the material Wenlan reads traceable.** Imported conversations remain as captured records; registered files sync their current contents as they change.
|
|
114
|
-
- **Memories preserve what work teaches you.** Agents capture atomic decisions, lessons, corrections, and supersession with provenance.
|
|
115
|
-
- **Pages compile current knowledge.** Wenlan turns relevant Sources and Memories into source-cited Markdown you can reuse, refresh, and review.
|
|
116
|
-
|
|
117
|
-
**The LLM-wiki foundation, extended:**
|
|
118
|
-
|
|
119
|
-
- **[LLM-wiki v1](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f):** 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](docs/technical-foundations.md#typed-memory-schema) and built-in rules for Page structure, provenance, citations, refresh, ownership, and review.
|
|
120
|
-
- **[LLM-wiki v2](https://gist.github.com/rohitg00/2067ab416f7bbe447c1977edaaa681e2):** 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.
|
|
121
|
-
|
|
122
|
-
For the complete workflow, see the [LLM-wiki implementation guide](https://wenlan.app/learn/distilled-wiki-pages-ai-memory).
|
|
123
|
-
|
|
124
|
-
**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.
|
|
125
|
+
The illustration shows a reusable working rule, not customer results or an automated page-generation test. [How sources, memories, and pages work together](docs/knowledge-guide.md#sources-and-pages).
|
|
125
126
|
|
|
126
127
|
<a id="knowledge-graph"></a>
|
|
127
128
|
|
|
128
|
-
###
|
|
129
|
+
### Follow the connections behind a page
|
|
129
130
|
|
|
130
|
-
The
|
|
131
|
+
The Agent Loop example connects a retry rule, a lesson from a UI review, and an acceptance checklist you can reuse.
|
|
131
132
|
|
|
132
133
|
<p align="center">
|
|
133
134
|
<picture>
|
|
134
|
-
<source media="(max-width:
|
|
135
|
-
<img src="./docs/assets/wenlan-knowledge-network.png" alt="
|
|
135
|
+
<source media="(max-width: 900px)" srcset="./docs/assets/wenlan-knowledge-network-mobile.png">
|
|
136
|
+
<img src="./docs/assets/wenlan-knowledge-network.png" alt="Illustrative Agent Loop page citing an agent-design guide and UI-review note; named memories include retry guidance and a visual-check lesson, linked to a reusable acceptance checklist and related concepts and tools." width="100%">
|
|
136
137
|
</picture>
|
|
137
138
|
</p>
|
|
138
139
|
|
|
139
|
-
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 ->](docs/technical-foundations.md#connected-knowledge-model)
|
|
140
|
-
|
|
141
|
-
- **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.
|
|
142
|
-
- **Strength and provenance:** A relation can store confidence, an explanation, and its source Memory, so stronger and weaker claims remain distinguishable and inspectable.
|
|
143
|
-
- **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.
|
|
144
|
-
- **Correction without erasure:** Related claims, corrections, and explicit supersession stay inspectable together while original Sources and Memory history remain.
|
|
145
|
-
|
|
146
|
-
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](https://cormack.uwaterloo.ca/cormacksigir09-rrf.pdf) signal. The path is data- and scope-dependent, and Space boundaries (Spaces are defined under Capabilities) still apply. [How the graph path works ->](docs/technical-foundations.md#graph-assisted-retrieval)
|
|
147
|
-
|
|
148
140
|
<a id="retrieval"></a>
|
|
141
|
+
<a id="retrieval-across-words-meaning-and-connections"></a>
|
|
149
142
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
Wenlan's core search is a local hybrid pipeline, not a single vector lookup. Each stage has a different job:
|
|
153
|
-
|
|
154
|
-
- **Exact wording, [SQLite FTS5](https://www.sqlite.org/fts5.html):** a full-text index finds literal terms, identifiers, and phrases.
|
|
155
|
-
- **Similar meaning, FastEmbed + [`Qdrant/bge-base-en-v1.5-onnx-Q`](https://huggingface.co/Qdrant/bge-base-en-v1.5-onnx-Q):** a quantized English model creates 768-dimensional embeddings; [libSQL cosine DiskANN](https://turso.tech/blog/approximate-nearest-neighbor-search-with-diskann-in-libsql) indexes them for approximate nearest-neighbor retrieval.
|
|
156
|
-
- **Combined ranking, weighted [RRF](https://cormack.uwaterloo.ca/cormacksigir09-rrf.pdf) (`k = 60`):** lexical and semantic rank lists are fused without pretending their raw scores share a scale; cosine similarity also weights the vector contribution.
|
|
157
|
-
- **Connected context, graph-memory stream:** eligible entity links add a third RRF signal while the active read scope still filters returned Memories.
|
|
158
|
-
- **Optional precision, cross-encoder reranking:** unlike embeddings, [`jinaai/jina-reranker-v1-turbo-en`](https://huggingface.co/jinaai/jina-reranker-v1-turbo-en) or [`BAAI/bge-reranker-base`](https://huggingface.co/BAAI/bge-reranker-base) reads each query-candidate pair and reorders the smaller pool; reranking is off by default.
|
|
159
|
-
|
|
160
|
-
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 ->](docs/technical-foundations.md)
|
|
143
|
+
Follow a page to related concepts and evidence. [How graph and search work](docs/knowledge-guide.md#graph-and-search).
|
|
161
144
|
|
|
162
145
|
<a id="what-makes-wenlan-distinct"></a>
|
|
163
146
|
<a id="why-is-wenlan-different"></a>
|
|
164
147
|
<a id="two-lifecycles"></a>
|
|
148
|
+
<a id="two-lifecycles-one-maintained-knowledge-system"></a>
|
|
165
149
|
|
|
166
|
-
###
|
|
150
|
+
### Knowledge changes. History stays.
|
|
167
151
|
|
|
168
|
-
|
|
152
|
+
New experience improves your notes without hiding earlier decisions. This example replaces “tests passed, so the UI is done” with “check tests and the desktop and mobile views,” keeping the reason and evidence for the change.
|
|
169
153
|
|
|
170
154
|
<p align="center">
|
|
171
155
|
<picture>
|
|
172
|
-
<source media="(max-width:
|
|
173
|
-
<img src="./docs/assets/wenlan-lifecycle.png" alt="
|
|
156
|
+
<source media="(max-width: 900px)" srcset="./docs/assets/wenlan-lifecycle-mobile.png">
|
|
157
|
+
<img src="./docs/assets/wenlan-lifecycle.png" alt="Illustrative before and after: “tests passed, so the UI is done” becomes “check tests and desktop and mobile views”; the evidence is a mobile label obscured despite passing tests. During automatic refresh, changes to a page you edited are proposed for your review." width="100%">
|
|
174
158
|
</picture>
|
|
175
159
|
</p>
|
|
176
160
|
|
|
177
|
-
|
|
161
|
+
<a id="local-markdown"></a>
|
|
162
|
+
<a id="atomic-memory"></a>
|
|
163
|
+
<a id="maintained-page"></a>
|
|
164
|
+
<a id="local-markdown-that-works-with-obsidian"></a>
|
|
178
165
|
|
|
179
|
-
|
|
166
|
+
Review applies to AI updates; direct file edits and forced regeneration follow different rules. [Updates, review, and local files](docs/knowledge-guide.md#updates-and-history).
|
|
180
167
|
|
|
181
|
-
|
|
168
|
+
### Already using Obsidian with AI plugins?
|
|
182
169
|
|
|
183
|
-
|
|
184
|
-
|---|---|
|
|
185
|
-
| **Capture** | Agents write one complete, self-contained idea per Memory, following the Zettelkasten atomic-note principle instead of saving the whole conversation. |
|
|
186
|
-
| **Classify** | With the on-device model, Wenlan assigns `identity`, `preference`, `decision`, `lesson`, `gotcha`, or `fact`; a precise type supplied by the caller remains authoritative. |
|
|
187
|
-
| **Enrich** | With the on-device model, adds structured fields, retrieval cues, event dates, quality, importance, and tags when available. |
|
|
188
|
-
| **Link** | Retains provenance and, when enrichment is enabled, connects Memories to entities and relations in the knowledge graph. |
|
|
189
|
-
| **Reconcile** | Explicit replacements preserve a `supersedes` chain. A replacement from an agent whose trust level is below full queues for human review automatically, no flag required. An optional on-device pass can also queue protected conflicts for review instead of overwriting history; that pass is off by default and must be explicitly enabled. |
|
|
170
|
+
You can use [Copilot](https://docs.obsidiancopilot.com/agent-mode-and-tools/) for AI-assisted reading and editing, [Smart Connections](https://github.com/brianpetro/obsidian-smart-connections) to find related notes, and [Obsidian Git](https://github.com/Vinzent03/obsidian-git) to keep version history. That gives you flexibility, but choosing how the plugins work together, when to organize new material, and how to update older pages is still a workflow you arrange.
|
|
190
171
|
|
|
191
|
-
|
|
172
|
+
Wenlan connects topic-page creation, source-change tracking, page updates, and revision history in one workflow, saving you the work of assembling and maintaining those steps yourself. You can read the resulting knowledge directly or let Claude Code, Codex, and other tools build on it.
|
|
192
173
|
|
|
193
|
-
|
|
174
|
+
Ask your connected AI to update a page, or [configure a model](#models-and-privacy) to enable background updates. When AI updates a page you've edited, Wenlan proposes a revision for you to review.
|
|
194
175
|
|
|
195
|
-
|
|
176
|
+
Connect your existing Obsidian vault as a read-only source without moving your notes. Wenlan does not modify the vault or sync changes back to it.
|
|
196
177
|
|
|
197
|
-
| Operation | What Wenlan does |
|
|
198
|
-
|---|---|
|
|
199
|
-
| **Distill** | Compiles related Sources and Memories into one Markdown Page. |
|
|
200
|
-
| **Cite** | Retains citation records and verification status; automatic refresh discards a draft when its citation-support check fails. |
|
|
201
|
-
| **Track** | Records which evidence supports the Page, why it became stale, and a bounded changelog. |
|
|
202
|
-
| **Refresh** | When a Page is marked stale, rebuilds the eligible machine-maintained Page from current evidence. |
|
|
203
|
-
| **Review** | Turns changes to a Page you edited into a proposed revision instead of a silent rewrite. |
|
|
204
178
|
|
|
205
|
-
|
|
179
|
+
<a id="what-you-get"></a>
|
|
180
|
+
<a id="what-can-it-do"></a>
|
|
181
|
+
<a id="what-can-i-bring-in"></a>
|
|
206
182
|
|
|
207
|
-
|
|
183
|
+
## Capabilities
|
|
208
184
|
|
|
209
|
-
###
|
|
185
|
+
### Bring your material in
|
|
210
186
|
|
|
211
|
-
|
|
187
|
+
- **Keep useful AI conversations:** Import ChatGPT or Claude export ZIPs without duplicating conversations already imported.
|
|
188
|
+
- **Bring your existing notes:** Import Markdown, text files, or text-extractable PDFs, by file or folder; connect an Obsidian vault as a source. Scanned PDFs need text extraction first.
|
|
189
|
+
- **Quick Capture:** Save a thought or decision directly in the desktop app without opening an AI chat.
|
|
190
|
+
- **[Capture decisions with your AI](https://wenlan.app/learn/ai-work-memory):** Ask your AI tool to save decisions, lessons, corrections, preferences, and facts, with their sources and what they replace.
|
|
191
|
+
- **Bring in another wiki:** Import an external OKF wiki through the CLI or API, preserving source references and links. Reimporting Wenlan's own OKF exports is not supported.
|
|
212
192
|
|
|
213
|
-
|
|
214
|
-
- **Inspectable history:** Distill and handoff workflows can commit logical file batches to a local git repository.
|
|
215
|
-
- **Obsidian coexistence:** Wenlan reads an existing vault as a source. Symlink `~/.wenlan/pages/` into the vault or export a Page from the desktop app; your edits remain human-owned, and later machine refreshes become reviewable revisions.
|
|
193
|
+
### Explore your personal wiki
|
|
216
194
|
|
|
217
|
-
|
|
195
|
+
- **[Editable, source-linked Pages](https://wenlan.app/docs/source-backed-pages):** Turn related documents and Memories into Markdown Pages with citations and links to other Pages.
|
|
196
|
+
- **Cards or lists:** Browse Pages, Entities, and Spaces in the view that suits you.
|
|
197
|
+
- **[Knowledge graph](docs/technical-foundations.md#graph-data-and-entity-resolution):** Explore connections between people, projects, claims, and the Memories supporting them.
|
|
218
198
|
|
|
219
|
-
|
|
220
|
-
$ git -C ~/.wenlan log --oneline
|
|
221
|
-
a1b2c3d distill: 4 pages
|
|
222
|
-
9f8e7d6 session: embedding-work
|
|
223
|
-
```
|
|
199
|
+
### Use it with your AI tools
|
|
224
200
|
|
|
225
|
-
|
|
201
|
+
- **[Pick up in another AI tool](https://wenlan.app/docs/architecture):** Connected Claude Code, Codex, and other MCP clients can use the same local Pages and Memories as the desktop app and CLI.
|
|
202
|
+
- **[Search by words and meaning](docs/technical-foundations.md#retrieval-pipeline):** Combine exact matches with local semantic search; graph connections can add relevant context.
|
|
203
|
+
- **[Optional deeper search](docs/technical-foundations.md#optional-channels-and-defaults):** Search Pages and finer-grained Memories, with optional reranking to refine results.
|
|
204
|
+
- **[Keep projects separate](https://wenlan.app/docs/spaces):** Use Spaces to choose which work, personal, client, or repository knowledge your AI searches.
|
|
205
|
+
- **Web access (experimental):** Connect a supported web AI client to your whole library, or to one Space you choose, while your computer is online. Queries and results pass through a relay; see [how access works and its privacy limits](docs/PRIVACY.md#pre-release-standalone-wenlan-relay-connector).
|
|
206
|
+
- **Connect your own tools:** Send prepared text, webpage content, or Memories through the local HTTP API. It accepts content, not URLs to fetch.
|
|
226
207
|
|
|
227
|
-
|
|
228
|
-
<a id="what-can-it-do"></a>
|
|
229
|
-
<a id="what-can-i-bring-in"></a>
|
|
208
|
+
### Keep knowledge current
|
|
230
209
|
|
|
231
|
-
|
|
210
|
+
Optional background organization and Page updates need a [configured model](#models-and-privacy).
|
|
211
|
+
|
|
212
|
+
- **Incremental sync:** File and folder Sources track changes in the background. Obsidian vaults stay read-only and resync on demand.
|
|
213
|
+
- **[Organize saved knowledge](docs/technical-foundations.md#typed-memory-schema):** A configured model can add types, structured details, relevant dates, tags, search cues, and graph links to Memories.
|
|
214
|
+
- **Updates backed by sources:** Automatic refresh rejects drafts with insufficient citations. AI-generated Pages can update; changes to Pages you have edited become review proposals.
|
|
215
|
+
- **[Review where judgment matters](https://wenlan.app/docs/review-and-trust):** Review protected conflicts, Page revisions, entity merges, and new vocabulary.
|
|
216
|
+
- **See what is happening:** Check progress and blockers in Activity. Configured sync, enrichment, and eligible Page updates can continue after the app window closes while the local service runs.
|
|
217
|
+
|
|
218
|
+
### Keep ownership and control
|
|
219
|
+
|
|
220
|
+
- **[Local, inspectable knowledge](https://wenlan.app/learn/local-first-ai-memory):** Keep Markdown Pages, citations, revisions, git history, and Obsidian exports; Memories and graph data live in local libSQL.
|
|
221
|
+
- **Take your wiki with you:** Export eligible Pages across Spaces as an OKF v0.2 wiki from Settings or the CLI. This is a wiki export, not a full database backup.
|
|
222
|
+
- **[Model choice](docs/technical-foundations.md#model-roles):** Base retrieval stays local. Optional enrichment and synthesis can use on-device Qwen, a local endpoint, or a cloud model; remote providers receive the content needed for their tasks.
|
|
223
|
+
- **Health checks and reviewed repairs:** [Doctor](https://wenlan.app/docs/diagnostics-and-issue-reports) and [lint](plugin/skills/lint/SKILL.md) report problems without rewriting knowledge. For supported findings, the app lets you preview and explicitly apply a repair, then verify it.
|
|
224
|
+
|
|
225
|
+
**Start with a note you want to keep.** [Get started](#start-in-30-seconds). Star this repo if you'd like to come back and try it later.
|
|
232
226
|
|
|
233
|
-
- **Chat import:** Bring in ChatGPT or Claude export ZIPs; Wenlan automatically skips conversations already imported.
|
|
234
|
-
- **Document Sources:** Ingest one `.md`, `.txt`, or text-extractable `.pdf` file; recurse through a folder of them; or index Markdown from an Obsidian vault.
|
|
235
|
-
- **Incremental sync:** Regular file and folder Sources track changes in the background; Obsidian vaults stay read-only and resync on demand.
|
|
236
|
-
- **Atomic Memory:** MCP clients save one complete decision, lesson, correction, preference, or fact, with [provenance and supersession](https://wenlan.app/learn/ai-memory-provenance) recording where it came from and what it replaces.
|
|
237
|
-
- **[Typed enrichment](docs/technical-foundations.md#typed-memory-schema):** A configured model classifies each Memory, then adds the structured fields defined for its type, plus dates, tags, retrieval cues, and graph links.
|
|
238
|
-
- **[Source-backed Pages](https://wenlan.app/docs/source-backed-pages):** Distill related Sources and Memories into Markdown Pages with source references and `[[wikilinks]]`; the daemon can verify and record per-claim citations.
|
|
239
|
-
- **Citation-gated refresh:** Automatic refresh rejects citation-poor drafts; machine Pages update while human edits become reviewable revisions.
|
|
240
|
-
- **[Hybrid retrieval](docs/technical-foundations.md#retrieval-pipeline):** FTS5 finds exact words, local BGE embeddings find meaning, and RRF fuses their ranks; graph links can add context.
|
|
241
|
-
- **[Retrieval channels](docs/technical-foundations.md#optional-channels-and-defaults):** Optional Page, episodic, and per-fact channels widen recall; cross-encoder reranking can improve precision.
|
|
242
|
-
- **[Knowledge graph](docs/technical-foundations.md#graph-data-and-entity-resolution):** Typed entities, relations, and observations connect people, projects, claims, and supporting Memories.
|
|
243
|
-
- **[Human-in-the-loop review](https://wenlan.app/docs/review-and-trust):** Routine work stays automatic; protected conflicts, Page revisions, entity merges, and new vocabulary wait for judgment.
|
|
244
|
-
- **[Spaces](https://wenlan.app/docs/spaces):** Keep work, personal, client, and repository knowledge inside an explicit retrieval scope.
|
|
245
|
-
- **[Local daemon + MCP](https://wenlan.app/docs/architecture):** One lightweight Rust daemon remains the local source of truth. The desktop app and CLI call it directly; AI clients use small MCP connectors to reach the same knowledge.
|
|
246
|
-
- **Custom integrations:** The localhost HTTP API accepts prepared text, webpage content, and Memories from other capture workflows.
|
|
247
|
-
- **Background maintenance:** The daemon keeps working after the desktop app closes, running configured sync, enrichment, citation work, and eligible Page refresh.
|
|
248
|
-
- **[Model choice](docs/technical-foundations.md#model-roles):** Base retrieval stays local; enrichment and synthesis can use on-device Qwen, a local endpoint, or a configured cloud model.
|
|
249
|
-
- **[Inspectable ownership](https://wenlan.app/learn/markdown-local-index-ai-memory):** Memories and graph data stay in local libSQL; Markdown, citations, revisions, git history, and Obsidian exports remain inspectable.
|
|
250
|
-
- **Read-only health checks:** [`doctor`](https://wenlan.app/docs/diagnostics-and-issue-reports) verifies the runtime; [`lint`](plugin/skills/lint/SKILL.md) finds malformed citations, orphan links, broken embeddings, and search-index or graph integrity problems without rewriting knowledge.
|
|
251
|
-
|
|
252
|
-
---
|
|
253
227
|
|
|
254
228
|
<a id="how-wenlan-works"></a>
|
|
255
229
|
<a id="how-does-it-work"></a>
|
|
256
230
|
|
|
257
231
|
## Daily workflow
|
|
258
232
|
|
|
259
|
-
|
|
233
|
+
Once your AI tool is connected, you can ask in plain language:
|
|
234
|
+
|
|
235
|
+
With the Wenlan plugin installed, you can also use the slash commands below.
|
|
236
|
+
|
|
237
|
+
### Before starting a task
|
|
238
|
+
|
|
239
|
+
> Find what I've saved in Wenlan about [topic], including earlier decisions and their sources.
|
|
240
|
+
|
|
241
|
+
Shortcut: `/recall [topic]`
|
|
242
|
+
|
|
243
|
+
### When you reach a useful conclusion
|
|
244
|
+
|
|
245
|
+
> Save this decision and why we made it in Wenlan, with its sources.
|
|
260
246
|
|
|
261
|
-
|
|
247
|
+
Shortcut: `/capture [decision, reasons, and sources]`
|
|
262
248
|
|
|
263
|
-
|
|
264
|
-
2. **Find current knowledge.** Open a relevant Page, search, or use `/recall <query>`; `/brief [topic]` reads the Brief — the Space's rolling project snapshot, first written by `/handoff` — and a topic appends separately labeled context from that same Space. Clients without plugin commands use the equivalent page, search, recall, and brief tools.
|
|
265
|
-
3. **Close the loop.** `/handoff` records what changed and applies typed item-level updates to the current Space Brief.
|
|
266
|
-
4. **Keep the wiki current.** `/distill` deliberately creates or refreshes pages. Between sessions, optional model-backed passes can enrich captures, connect related entities, and refresh eligible pages. `/lint` checks knowledge health; `/curate` brings proposed revisions and any conflict-review items created by the optional reconcile pass to you.
|
|
249
|
+
### When a topic deserves a page
|
|
267
250
|
|
|
268
|
-
|
|
251
|
+
> Create or update a Wenlan page on [topic] from the material we've saved. Keep the citations.
|
|
269
252
|
|
|
270
|
-
|
|
253
|
+
To organize saved knowledge into pages: `/distill`
|
|
254
|
+
|
|
255
|
+
Open the page in Wenlan to read, edit, and check its sources. Next time, ask your AI to use it for your next task.
|
|
256
|
+
|
|
257
|
+
### When you wrap up
|
|
258
|
+
|
|
259
|
+
> Save this session's progress, decisions, and open questions in Wenlan so we can pick up next time.
|
|
260
|
+
|
|
261
|
+
Shortcut: `/handoff`
|
|
262
|
+
|
|
263
|
+
<details>
|
|
264
|
+
<summary>Plugin commands and maintenance</summary>
|
|
265
|
+
|
|
266
|
+
- **Read the project summary:** `/brief [topic]` reads the current Space's project summary; an optional topic adds related context from that Space.
|
|
267
|
+
- **Check and review:** `/lint` checks knowledge health; `/curate` reviews pending captures or revisions.
|
|
268
|
+
|
|
269
|
+
These shortcuts are available through the Wenlan plugins. Other connected clients use the equivalent MCP tools. Optional background organization and Page updates need a [configured model](#models-and-privacy).
|
|
270
|
+
|
|
271
|
+
[Full command reference](plugin/skills/README.md).
|
|
272
|
+
|
|
273
|
+
</details>
|
|
274
|
+
|
|
275
|
+
<a id="offline-queue-outbox"></a>
|
|
276
|
+
|
|
277
|
+
[CLI offline writes and replay](docs/setup-and-data.md#offline-queue).
|
|
278
|
+
|
|
279
|
+
<a id="models-and-privacy"></a>
|
|
271
280
|
|
|
272
281
|
### Models and privacy
|
|
273
282
|
|
|
274
|
-
|
|
275
|
-
- **Optional on-device synthesis:** Enrichment and Page synthesis can use user-selected [`Qwen3 4B`](https://huggingface.co/unsloth/Qwen3-4B-Instruct-2507-GGUF) or [`Qwen3.5 9B`](https://huggingface.co/unsloth/Qwen3.5-9B-GGUF) through [llama.cpp](https://github.com/ggml-org/llama.cpp). Wenlan does not download or activate a language model until you choose one.
|
|
276
|
-
- **Other providers:** An OpenAI-compatible local endpoint such as Ollama or LM Studio, or a configured cloud provider, can supply model-backed enrichment and synthesis instead.
|
|
277
|
-
- **Cloud disclosure:** If the model endpoint you select is remote, Wenlan sends that task's system and user prompts to it. Local retrieval and on-device synthesis stay on your machine.
|
|
278
|
-
- **Optional usage statistics:** Off by default. If you opt in, Wenlan sends bounded operation counts, version and platform—not your knowledge content or an installation ID. See [privacy](docs/PRIVACY.md#telemetry).
|
|
283
|
+
Use your connected AI to write pages without installing an additional local language model. Background organization and automatic updates are optional and need a configured model.
|
|
279
284
|
|
|
280
|
-
|
|
285
|
+
- **Search stays local.** The search model downloads at first launch and runs on your machine, without an API key.
|
|
286
|
+
- **Connected AI can receive your knowledge.** A cloud AI client can send retrieved content to its provider. Choosing a cloud model for background organization also sends the material needed for that task. Local storage does not make those interactions local.
|
|
287
|
+
- **Usage statistics are off by default.** If you opt in, Wenlan sends limited operation counts, version, and platform, not your knowledge content or an installation ID. [Details](docs/PRIVACY.md#telemetry).
|
|
288
|
+
|
|
289
|
+
See [network and privacy details](docs/PRIVACY.md#when-wenlan-reaches-the-network) for downloads, update checks, remote images, and optional remote access.
|
|
290
|
+
|
|
291
|
+
[Model choices and configuration](docs/setup-and-data.md#models).
|
|
281
292
|
|
|
282
293
|
### Your data and uninstall
|
|
283
294
|
|
|
284
|
-
|
|
295
|
+
Your pages and session notes are Markdown files; memories and the graph live in a local database. You can keep your knowledge when you uninstall the app.
|
|
285
296
|
|
|
286
|
-
|
|
297
|
+
[File locations, backup, and removal](docs/setup-and-data.md#backup-and-removal).
|
|
287
298
|
|
|
288
|
-
---
|
|
289
299
|
|
|
290
300
|
<a id="evaluation"></a>
|
|
291
301
|
|
|
@@ -300,7 +310,6 @@ This is a retrieval-only snapshot, not a claim about end-to-end answer quality.
|
|
|
300
310
|
| LME_S (deep, 90 Q) | 87.7% | 0.815 | 0.822 |
|
|
301
311
|
<!-- EVAL_SNAPSHOT_END -->
|
|
302
312
|
|
|
303
|
-
---
|
|
304
313
|
|
|
305
314
|
<a id="learn-more"></a>
|
|
306
315
|
|
|
@@ -316,6 +325,7 @@ More detailed documentation, concepts, and comparisons:
|
|
|
316
325
|
|
|
317
326
|
### Workflow guides
|
|
318
327
|
|
|
328
|
+
- [Build your first LLM Wiki](https://wenlan.app/learn/distilled-wiki-pages-ai-memory): work through a three-source example, check its citations, and review what changes when a source is updated.
|
|
319
329
|
- [Build a client project knowledge base for consulting](https://wenlan.app/learn/build-client-project-knowledge-base-for-consulting)
|
|
320
330
|
- [Build an investment research knowledge base](https://wenlan.app/learn/build-investment-research-knowledge-base)
|
|
321
331
|
- [Build a product research knowledge base before writing a PRD](https://wenlan.app/learn/build-product-research-knowledge-base-for-prd)
|
|
@@ -327,7 +337,7 @@ More detailed documentation, concepts, and comparisons:
|
|
|
327
337
|
- [Why a living wiki, not just AI memory](https://wenlan.app/learn/ai-work-memory): the problem and product model in depth.
|
|
328
338
|
- [MCP memory server](https://wenlan.app/learn/mcp-memory-server): how Wenlan exposes knowledge across AI tools.
|
|
329
339
|
- [Local-first AI memory](https://wenlan.app/learn/local-first-ai-memory): data, privacy, and control.
|
|
330
|
-
- [Markdown and local index](https://wenlan.app/learn/
|
|
340
|
+
- [Markdown and local index](https://wenlan.app/learn/local-first-ai-memory): storage, retrieval, and ownership.
|
|
331
341
|
- [AI agent handoff loop](https://wenlan.app/learn/ai-agent-handoff-loop): carrying work cleanly into the next session.
|
|
332
342
|
- [Research knowledge base from papers](https://wenlan.app/learn/source-backed-research-knowledge-base): build an inspectable literature matrix and source-backed synthesis from papers you already have.
|
|
333
343
|
|
|
@@ -337,7 +347,6 @@ More detailed documentation, concepts, and comparisons:
|
|
|
337
347
|
- [Wenlan vs claude-mem](https://wenlan.app/learn/wenlan-vs-claude-mem)
|
|
338
348
|
- [Wenlan vs Superlocal Memory](https://wenlan.app/learn/wenlan-vs-superlocal-memory)
|
|
339
349
|
|
|
340
|
-
---
|
|
341
350
|
|
|
342
351
|
## Contributing
|
|
343
352
|
|
|
@@ -356,25 +365,17 @@ pnpm build:all
|
|
|
356
365
|
|
|
357
366
|
`pnpm dev:all` is the supported development entry point for the desktop app. It keeps development ports, data, process ownership, app identity, MCP sockets, and Remote Access state separate from the installed production runtime; a debug app started without that isolation refuses to run. See this repository's [AGENTS.md](AGENTS.md) and [CONTRIBUTING.md](.github/CONTRIBUTING.md), plus the in-tree [app/AGENTS.md](app/AGENTS.md), for the complete development workflow. Security reports: [SECURITY.md](.github/SECURITY.md). Privacy policy: [PRIVACY.md](docs/PRIVACY.md). Please also read the [Code of Conduct](.github/CODE_OF_CONDUCT.md).
|
|
358
367
|
|
|
359
|
-
---
|
|
360
368
|
|
|
361
369
|
<a id="code-signing-policy"></a>
|
|
362
370
|
|
|
363
371
|
## Code signing policy
|
|
364
372
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
- **Authors:** [@7xuanlu](https://github.com/7xuanlu), who may commit to this repository without a further review.
|
|
368
|
-
- **Reviewers:** [@7xuanlu](https://github.com/7xuanlu). Every change from someone who is not a committer arrives as a pull request and is reviewed before it merges.
|
|
369
|
-
- **Approvers:** [@7xuanlu](https://github.com/7xuanlu), who approves each signing request and so decides which release is signed.
|
|
370
|
-
|
|
371
|
-
Multi-factor authentication is required of every maintainer, on GitHub and on SignPath, and nobody is added to either without it. Releases are built only by the tagged release workflow in this repository, on GitHub-hosted runners, from the commit the tag points at.
|
|
373
|
+
macOS desktop releases are Developer ID signed and notarized. Windows installers are not signed yet.
|
|
372
374
|
|
|
373
|
-
|
|
375
|
+
Releases are built from tagged commits by this repository's release workflow on GitHub-hosted runners. Maintainers must use multi-factor authentication on GitHub.
|
|
374
376
|
|
|
375
|
-
|
|
377
|
+
[Platform signing details](docs/code-signing.md) · [Privacy policy](docs/PRIVACY.md).
|
|
376
378
|
|
|
377
|
-
---
|
|
378
379
|
|
|
379
380
|
<a id="license"></a>
|
|
380
381
|
|
|
@@ -387,7 +388,6 @@ Wenlan uses two licenses, one per part of the repository.
|
|
|
387
388
|
|
|
388
389
|
The split is deliberate. Apache-2.0 code may be used inside an AGPL-3.0 program, so the desktop app builds on the runtime without either license being violated.
|
|
389
390
|
|
|
390
|
-
---
|
|
391
391
|
|
|
392
392
|
<a id="acknowledgments"></a>
|
|
393
393
|
|
package/install.js
CHANGED
|
@@ -11,7 +11,7 @@ const fs = require("fs");
|
|
|
11
11
|
const path = require("path");
|
|
12
12
|
|
|
13
13
|
const VERSION = require("./package.json").version;
|
|
14
|
-
const REPO = "
|
|
14
|
+
const REPO = "wenlan-app/wenlan";
|
|
15
15
|
|
|
16
16
|
// Maps Node platform-arch to the release bundle filename shipped by release.yml.
|
|
17
17
|
// Each bundle contains wenlan, wenlan-server, and wenlan-mcp (or .exe on Windows).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wenlan-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Local-first memory layer for AI agents - MCP server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
"chatgpt",
|
|
18
18
|
"wenlan"
|
|
19
19
|
],
|
|
20
|
-
"homepage": "https://github.com/
|
|
20
|
+
"homepage": "https://github.com/wenlan-app/wenlan#readme",
|
|
21
21
|
"bugs": {
|
|
22
|
-
"url": "https://github.com/
|
|
22
|
+
"url": "https://github.com/wenlan-app/wenlan/issues"
|
|
23
23
|
},
|
|
24
24
|
"author": "7xuanlu <h164654156465@gmail.com>",
|
|
25
25
|
"license": "Apache-2.0",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
],
|
|
50
50
|
"repository": {
|
|
51
51
|
"type": "git",
|
|
52
|
-
"url": "https://github.com/
|
|
52
|
+
"url": "https://github.com/wenlan-app/wenlan",
|
|
53
53
|
"directory": "crates/wenlan-mcp/npm"
|
|
54
54
|
}
|
|
55
55
|
}
|