An Obsidian-style knowledge base: ingest sources, let the LLM build and maintain an interlinked wiki, and ask questions grounded in it.
Install
# from npm (prebuilt)
dsh plugin --profile web add @vesna-strivozha-2026/dsh-llm-wiki
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Vesna-Strivozha/DSH-LLM-wiki-plugin#path:/packages/dsh-llm-wiki
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
English | 中文
An Obsidian-style personal knowledge base for DeepSeek Harness, built on the Karpathy Wiki methodology.
LLM Wiki turns DeepSeek Harness into a lightweight Obsidian: a three-column workspace (sessions · chat · wiki) where you drop source files in, the LLM incrementally builds and maintains a persistent wiki, and you can then ask questions in the chat that are grounded in your knowledge base.
Why LLM Wiki (vs. plain RAG)
Most RAG re-derives knowledge from raw documents on every query — nothing accumulates. LLM Wiki instead keeps a persistent, compounding wiki of interlinked markdown pages between you and your sources. Each new source is read once and integrated: entity/concept pages are updated, cross-references maintained, contradictions flagged, and the index kept current.
- You curate sources and ask questions.
- The LLM does the summarizing, cross-referencing, filing, and bookkeeping.
Inspired by Karpathy's "LLM Wiki" pattern — the wiki is just a git repo of markdown files.
Features
- Three-column workspace — sessions on the left, chat in the middle, the wiki panel on the right.
- One-click workspace — pick a directory, build a Karpathy-methodology wiki skeleton (
raw/,wiki/,index.md,log.md,schema.md). - Upload + confirm — drag/select files, review in a confirm dialog, write to
raw/. - Auto-ingest — the plugin drives the LLM to read
raw/and generate/updatewiki/pages, with concurrent processing and a progress bar. PDFs are text-extracted viapypdf. - Knowledge graph — force-directed graph of
[[wikilinks]], with zoom/pan, hover-highlight, and click-to-open. - Self-check (lint) — reports orphan pages, isolated pages, and dead links.
- Read in place — markdown renderer + inline PDF viewer.
- Chat-grounded Q&A — a
wiki_querytool + prompt section lets you ask the chat and get answers with page citations.
Architecture
A single package with two halves, plus a one-line preset contribution:
| Part | Where | Responsibility |
|---|---|---|
Host plugin (src/index.ts) |
main |
ingest engine (LLM), graph/lint/search, RPC handlers, wiki_query tool, prompt section |
Client plugin (src/client/index.tsx) |
./client + dsh.client |
the right-column panel UI (tree, upload, graph, reader) |
| Preset row | agent.cordis.yml (user copy of standard) |
exposes the wiki_query tool to the agent |
Wiki layout
<workspace>/llm-wiki/
├── raw/ # immutable source files (you own)
│ └── .ingested.json # dedup bookkeeping
├── wiki/ # LLM-generated pages
│ ├── entities/
│ ├── concepts/
│ └── sources/
├── index.md # content catalog (auto-rebuilt)
├── log.md # append-only timeline
└── schema.md # wiki conventions (you + LLM co-evolve)
Build & install
This package is authored as TypeScript/JSX against the DeepSeek Harness source tree, so it is built with that repo's toolchain:
# inside the deepseek-harness repo
pnpm install
pnpm --filter @vesna-strivozha-2026/dsh-llm-wiki build
# install into your profile (host + client)
dsh plugin --profile web add @vesna-strivozha-2026/dsh-llm-wiki
Then author a preset (copy of standard) that adds the chat-Q&A tool row, e.g.:
- id: tool-llm-wiki
name: '@vesna-strivozha-2026/dsh-llm-wiki'
Restart the client — the wiki panel and wiki_query tool are now permanent.
Roadmap
- Core loop: workspace / ingest / graph / lint / read / chat Q&A
- Polished UI on the DSH design system (
@deepseek-ai/dsh-client-ui-primitives) - Publish to the DSH plugin store
- Open-source: CI, tests, contribution guide
Model Experience
Ingest engine
What the model sees
One LLM call per raw/ source: the source text (truncated to maxSourceChars) plus the schema.md conventions, asked to return a structured JSON {"pages":[{"path":"...","content":"..."}],"logEntry":"..."} that is written into wiki/ pages before index.md and log.md are rebuilt.
Token effect
Output is capped at ingestMaxTokens (default 16384) per source; input is truncated at maxSourceChars (default 60000); up to concurrency (default 3) sources run concurrently.
KV Cache effect
None; ingest reads source and wiki markdown from disk on each run.
wiki_query tool
What the model sees
The wiki_query tool searches wiki/ pages and returns the index.md summary plus the top matching pages; a llm-wiki-query prompt section tells the model to prefer the tool for knowledge-base topics.
Token effect
The tool result is truncated — index ≤ 1500 chars, each hit ≤ 1200 chars, at most 4 pages — so it stays small in context.
KV Cache effect
None; search reads markdown from disk on each call.
Known Limitations and Deferred Work
- macOS-only "open with specific app" — the PDF-app list (Preview / Adobe / Skim) and "open with app" are macOS-only; "open with default app" and "reveal in file manager" work cross-platform (macOS
open, WindowsInvoke-Item, Linuxxdg-open). pypdfdependency — PDF ingestion (text extraction) needs Python withpypdfon any platform (in-panel PDF reading works without it).detailsslot takeover — the panel replaces the shipped tool-details column (tool results remain visible in the conversation cards).- Hand-rolled markdown renderer and force-directed graph — no third-party markdown/graph library; large wikis may render slowly, and the graph offers only zoom/pan/click.
- Binary uploads go over JSON as base64 — large files upload slowly; there is no streaming upload.
Links
More in this category
vectorize-io/hindsight#coding-agents★ 46897
Hindsight, agent memory that learns: long-term project memory with auto recall and retain, knowledge pages, deep reflection, and per-repo memory banks.
volcengine/OpenViking#examples/dsh-memory-plugin★ 39378
OpenViking memory and context bundle for DeepSeek Harness: pre-step auto-recall and profile injection, session capture, `viking://` URI guarding, and recall/write memory tools backed by an OpenViking server.
agentscope-ai/ReMe#dsh★ 3557
Connects DeepSeek Harness to ReMe's local-first, self-evolving personal knowledge base: automatically captures completed main-agent conversations as user-owned Markdown memory, searches conversations and source material through reme_search with BM25, optional embeddings, and wikilink expansion, and schedules daily memory consolidation.
zilliztech/memsearch#MemSearch★ 2728
Shared Markdown memory for DSH and other coding agents, with automatic capture, pre-step context injection, searchable recall, and memory-to-skill self-evolution through a review panel.
vshulcz/deja-vu#extensions/dsh★ 1147
Reads the session files thirty-three other coding agents on this machine already wrote — Claude Code, Codex, Cursor, VS Code Copilot Chat, opencode, OpenClaw, Hermes, Kimi, Cline, Zed and more — including sessions from before it was installed: six tools (deja_recall, deja_session, deja_blame, deja_fix, deja_how, deja_remember), a /deja command, and optional automatic recall added to the runtime context. Local BM25 index, no LLM, no embeddings, no network (dsh plugin --profile web add dsh-deja).
adoresever/graph-memory★ 638
Traceable, searchable cross-session memory for DeepSeek Harness — conversation knowledge as typed graph nodes (TASK/SKILL/EVENT) and typed edges.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.