Wenlan is a knowledge base for the AI-native age. Your AI agents capture what they learn, Wenlan keeps it current and distills it into source-cited wiki pages you can trust
See the code
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.
English | 简体中文 | 繁體中文 | Español
Get started · What is this? · Capabilities · Daily workflow · Evaluation · Learn more
https://github.com/user-attachments/assets/d8b2ad4a-f97a-4a15-97a8-9105478de18a
A maintained Page in the desktop app: open any citation to inspect the Source or Memory behind the claim.
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.
Download from the Releases page:
.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).-setup.exe. It is not signed yet, so when SmartScreen says "Windows protected your PC", choose "More info", then "Run anyway".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).
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.
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:
The LLM-wiki foundation, extended:
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.
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 ->
uses, part_of, contradicts, and replaced_by; unknown types fall back to related_to and become reviewable vocabulary proposals.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 ->
Wenlan's core search is a local hybrid pipeline, not a single vector lookup. Each stage has a different job:
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.k = 60): lexical and semantic rank lists are fused without pretending their raw scores share a scale; cosine similarity also weights the vector contribution.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 ->
A generated wiki can go stale; a memory store can fragment into disconnected facts. Wenlan links two lifecycles without collapsing them into one layer.
CAPTURE -> CLASSIFY -> ENRICH -> LINK -> RECONCILE
Capture and explicit supersession are core. Model-backed stages run only when the matching model is configured, and the reconcile pass is off by default.
| Operation | What Wenlan does |
|---|---|
| Capture | Agents write one complete, self-contained idea per Memory, following the Zettelkasten atomic-note principle instead of saving the whole conversation. |
| Classify | With the on-device model, Wenlan assigns identity, preference, decision, lesson, gotcha, or fact; a precise type supplied by the caller remains authoritative. |
| Enrich | With the on-device model, adds structured fields, retrieval cues, event dates, quality, importance, and tags when available. |
| Link | Retains provenance and, when enrichment is enabled, connects Memories to entities and relations in the knowledge graph. |
| 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. |
Advanced configuration: set WENLAN_ENABLE_DUAL_POOL_RESOLVE=1 to enable that reconcile pass.
DISTILL -> CITE -> TRACK -> REFRESH -> REVIEW
| Operation | What Wenlan does |
|---|---|
| Distill | Compiles related Sources and Memories into one Markdown Page. |
| Cite | Retains citation records and verification status; automatic refresh discards a draft when its citation-support check fails. |
| Track | Records which evidence supports the Page, why it became stale, and a bounded changelog. |
| Refresh | When a Page is marked stale, rebuilds the eligible machine-maintained Page from current evidence. |
| Review | Turns changes to a Page you edited into a proposed revision instead of a silent rewrite. |
For example, import a design document and capture a debugging decision in Codex. Wenlan can compile one Page that cites both. When that Page is refreshed, it rebuilds from its current support; if you have edited it, the proposed change waits for review.
Your durable synthesis remains ordinary files rather than a proprietary editor format:
~/.wenlan/.~/.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.The local history is directly inspectable:
$ git -C ~/.wenlan log --oneline
a1b2c3d distill: 4 pages
9f8e7d6 session: embedding-work
.md, .txt, or text-extractable .pdf file; recurse through a folder of them; or index Markdown from an Obsidian vault.[[wikilinks]]; the daemon can verify and record per-claim citations.doctor verifies the runtime; lint finds malformed citations, orphan links, broken embeddings, and search-index or graph integrity problems without rewriting knowledge.The system above becomes a small daily loop: start with relevant knowledge, capture what matters while you work, close with a handoff, and let Wenlan refine what should return next time. Each pass leaves the same knowledge base sharper instead of creating another disconnected history.
The loop has four steps:
/capture <thing> saves a decision, lesson, gotcha, or fact with its source. /recall <query> retrieves only what is relevant instead of loading your whole history./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./handoff records what changed and applies typed item-level updates to the current Space Brief./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.If the local daemon is unreachable, wenlan capture and wenlan brief update write their requests to a durable local outbox and exit successfully. When the daemon returns, it drains those writes through the normal HTTP routes; inspect the queue with wenlan outbox status or request an immediate replay with wenlan outbox drain. A write the daemon rejects outright (a 4xx, such as failing the content quality gate) moves to outbox/failed/ with a receipt instead of retrying forever; a transport failure or server error (5xx) leaves it queued for the next drain, which runs automatically every 60 seconds.
Qwen3 4B or Qwen3.5 9B through llama.cpp. Wenlan does not download or activate a language model until you choose one.Full workflow reference: plugin/skills. Technical model roles: technical foundations.
Nothing is locked in. Pages and session notes are Markdown under ~/.wenlan/; memories live in one libSQL database under the platform data directory (~/Library/Application Support/wenlan/ on macOS, ~/.local/share/wenlan/ on Linux, %LOCALAPPDATA%\wenlan\ on Windows). Copy those two folders to back up or move a Wenlan. An install upgraded from Origin still holds a full copy of its data in ~/.origin/ and in the sibling origin data folder (~/Library/Application Support/origin/ on macOS, ~/.local/share/origin/ on Linux, %LOCALAPPDATA%\origin\ on Windows); delete or copy those two as well.
To uninstall: the app's Run Wenlan in background at login toggle removes the launch registration — turn it off, quit, and delete Wenlan.app or run the Windows uninstaller, then delete the folders above. wenlan background off only stops the daemon and disables autostart; it does not remove the launch registration, so a CLI-only install should instead follow the daemon uninstall bullet in PRIVACY.md. The paths Wenlan writes are listed there.
This is a retrieval-only snapshot, not a claim about end-to-end answer quality. Method, environment receipts, and the update workflow live in docs/eval.
| Benchmark | Recall@5 | MRR | NDCG@10 |
|---|---|---|---|
| LME_Oracle (500 Q) | 93.6% | 0.857 | 0.883 |
| LME_S (deep, 90 Q) | 87.7% | 0.815 | 0.822 |
More detailed documentation, concepts, and comparisons:
Bug fixes, eval cases, docs, and features are welcome. Installing Wenlan does not require building from source. For local development, run these commands from this repository's root:
# daemon crates (default-members — the desktop app is not compiled)
cargo build
cargo test
# desktop app (Cargo target and root-level frontend tooling)
pnpm install
pnpm dev:all
pnpm build:all
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 and CONTRIBUTING.md, plus the in-tree app/AGENTS.md, for the complete development workflow. Security reports: SECURITY.md. Privacy policy: PRIVACY.md. Please also read the Code of Conduct.
Free code signing provided by SignPath.io, certificate by SignPath Foundation.
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.
Privacy policy: PRIVACY.md — what Wenlan stores, where it stores it, and each case we know of in which it reaches the network. How each platform is signed: docs/code-signing.md.
The SignPath application is pending. Windows installers are not signed yet.
Wenlan uses two licenses, one per part of the repository.
LICENSE) covers the local runtime, CLI, MCP server, shared types, and the Claude Code and Codex plugin files. Build on these freely.app/LICENSE) covers the desktop app: the app/ crate and the React frontend it ships. If you run a modified version of the app as a network service, the AGPL asks you to offer that modified source to its users.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.
Wenlan (文瀾) takes its name from 文瀾閣, an imperial library that held 四庫全書 as part of one of China's largest book collections.
Wenlan's llm-wiki v2 model is its own product direction, informed by the LLM-wiki and agent-memory lineages:
Rust
70.3%
TypeScript
18.9%
Python
5.5%
Shell
2.9%
PowerShell
1.3%
Wenlan is a knowledge base for the AI-native age. Your AI agents capture what they learn, Wenlan keeps it current and distills it into source-cited wiki pages you can trust
See the code
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.
English | 简体中文 | 繁體中文 | Español
Get started · What is this? · Capabilities · Daily workflow · Evaluation · Learn more
https://github.com/user-attachments/assets/d8b2ad4a-f97a-4a15-97a8-9105478de18a
A maintained Page in the desktop app: open any citation to inspect the Source or Memory behind the claim.
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.
Download from the Releases page:
.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).-setup.exe. It is not signed yet, so when SmartScreen says "Windows protected your PC", choose "More info", then "Run anyway".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).
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.
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:
The LLM-wiki foundation, extended:
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.
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 ->
uses, part_of, contradicts, and replaced_by; unknown types fall back to related_to and become reviewable vocabulary proposals.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 ->
Wenlan's core search is a local hybrid pipeline, not a single vector lookup. Each stage has a different job:
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.k = 60): lexical and semantic rank lists are fused without pretending their raw scores share a scale; cosine similarity also weights the vector contribution.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 ->
A generated wiki can go stale; a memory store can fragment into disconnected facts. Wenlan links two lifecycles without collapsing them into one layer.
CAPTURE -> CLASSIFY -> ENRICH -> LINK -> RECONCILE
Capture and explicit supersession are core. Model-backed stages run only when the matching model is configured, and the reconcile pass is off by default.
| Operation | What Wenlan does |
|---|---|
| Capture | Agents write one complete, self-contained idea per Memory, following the Zettelkasten atomic-note principle instead of saving the whole conversation. |
| Classify | With the on-device model, Wenlan assigns identity, preference, decision, lesson, gotcha, or fact; a precise type supplied by the caller remains authoritative. |
| Enrich | With the on-device model, adds structured fields, retrieval cues, event dates, quality, importance, and tags when available. |
| Link | Retains provenance and, when enrichment is enabled, connects Memories to entities and relations in the knowledge graph. |
| 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. |
Advanced configuration: set WENLAN_ENABLE_DUAL_POOL_RESOLVE=1 to enable that reconcile pass.
DISTILL -> CITE -> TRACK -> REFRESH -> REVIEW
| Operation | What Wenlan does |
|---|---|
| Distill | Compiles related Sources and Memories into one Markdown Page. |
| Cite | Retains citation records and verification status; automatic refresh discards a draft when its citation-support check fails. |
| Track | Records which evidence supports the Page, why it became stale, and a bounded changelog. |
| Refresh | When a Page is marked stale, rebuilds the eligible machine-maintained Page from current evidence. |
| Review | Turns changes to a Page you edited into a proposed revision instead of a silent rewrite. |
For example, import a design document and capture a debugging decision in Codex. Wenlan can compile one Page that cites both. When that Page is refreshed, it rebuilds from its current support; if you have edited it, the proposed change waits for review.
Your durable synthesis remains ordinary files rather than a proprietary editor format:
~/.wenlan/.~/.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.The local history is directly inspectable:
$ git -C ~/.wenlan log --oneline
a1b2c3d distill: 4 pages
9f8e7d6 session: embedding-work
.md, .txt, or text-extractable .pdf file; recurse through a folder of them; or index Markdown from an Obsidian vault.[[wikilinks]]; the daemon can verify and record per-claim citations.doctor verifies the runtime; lint finds malformed citations, orphan links, broken embeddings, and search-index or graph integrity problems without rewriting knowledge.The system above becomes a small daily loop: start with relevant knowledge, capture what matters while you work, close with a handoff, and let Wenlan refine what should return next time. Each pass leaves the same knowledge base sharper instead of creating another disconnected history.
The loop has four steps:
/capture <thing> saves a decision, lesson, gotcha, or fact with its source. /recall <query> retrieves only what is relevant instead of loading your whole history./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./handoff records what changed and applies typed item-level updates to the current Space Brief./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.If the local daemon is unreachable, wenlan capture and wenlan brief update write their requests to a durable local outbox and exit successfully. When the daemon returns, it drains those writes through the normal HTTP routes; inspect the queue with wenlan outbox status or request an immediate replay with wenlan outbox drain. A write the daemon rejects outright (a 4xx, such as failing the content quality gate) moves to outbox/failed/ with a receipt instead of retrying forever; a transport failure or server error (5xx) leaves it queued for the next drain, which runs automatically every 60 seconds.
Qwen3 4B or Qwen3.5 9B through llama.cpp. Wenlan does not download or activate a language model until you choose one.Full workflow reference: plugin/skills. Technical model roles: technical foundations.
Nothing is locked in. Pages and session notes are Markdown under ~/.wenlan/; memories live in one libSQL database under the platform data directory (~/Library/Application Support/wenlan/ on macOS, ~/.local/share/wenlan/ on Linux, %LOCALAPPDATA%\wenlan\ on Windows). Copy those two folders to back up or move a Wenlan. An install upgraded from Origin still holds a full copy of its data in ~/.origin/ and in the sibling origin data folder (~/Library/Application Support/origin/ on macOS, ~/.local/share/origin/ on Linux, %LOCALAPPDATA%\origin\ on Windows); delete or copy those two as well.
To uninstall: the app's Run Wenlan in background at login toggle removes the launch registration — turn it off, quit, and delete Wenlan.app or run the Windows uninstaller, then delete the folders above. wenlan background off only stops the daemon and disables autostart; it does not remove the launch registration, so a CLI-only install should instead follow the daemon uninstall bullet in PRIVACY.md. The paths Wenlan writes are listed there.
This is a retrieval-only snapshot, not a claim about end-to-end answer quality. Method, environment receipts, and the update workflow live in docs/eval.
| Benchmark | Recall@5 | MRR | NDCG@10 |
|---|---|---|---|
| LME_Oracle (500 Q) | 93.6% | 0.857 | 0.883 |
| LME_S (deep, 90 Q) | 87.7% | 0.815 | 0.822 |
More detailed documentation, concepts, and comparisons:
Bug fixes, eval cases, docs, and features are welcome. Installing Wenlan does not require building from source. For local development, run these commands from this repository's root:
# daemon crates (default-members — the desktop app is not compiled)
cargo build
cargo test
# desktop app (Cargo target and root-level frontend tooling)
pnpm install
pnpm dev:all
pnpm build:all
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 and CONTRIBUTING.md, plus the in-tree app/AGENTS.md, for the complete development workflow. Security reports: SECURITY.md. Privacy policy: PRIVACY.md. Please also read the Code of Conduct.
Free code signing provided by SignPath.io, certificate by SignPath Foundation.
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.
Privacy policy: PRIVACY.md — what Wenlan stores, where it stores it, and each case we know of in which it reaches the network. How each platform is signed: docs/code-signing.md.
The SignPath application is pending. Windows installers are not signed yet.
Wenlan uses two licenses, one per part of the repository.
LICENSE) covers the local runtime, CLI, MCP server, shared types, and the Claude Code and Codex plugin files. Build on these freely.app/LICENSE) covers the desktop app: the app/ crate and the React frontend it ships. If you run a modified version of the app as a network service, the AGPL asks you to offer that modified source to its users.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.
Wenlan (文瀾) takes its name from 文瀾閣, an imperial library that held 四庫全書 as part of one of China's largest book collections.
Wenlan's llm-wiki v2 model is its own product direction, informed by the LLM-wiki and agent-memory lineages:
Rust
70.3%
TypeScript
18.9%
Python
5.5%
Shell
2.9%
PowerShell
1.3%