English · 简体中文
Turn a Markdown writing collection into a personal knowledge mountain range that always leads back to the source.
Wenshan reviews authorship and document quality, resolves draft/final versions, and then identifies recurring scenes, industries, roles, and practices as mountains. Every visible mountain must pass an evidence gate; every count, evidence point, and synthesized answer can be traced to the original article.
It is not a folder chart or an embedding cluster map. A mountain name is a recurring concrete problem space, its article count is accumulated writing volume, and its subtitle is the author's current answer in that area.
Beta 1.0 (
1.0.0-beta.1) is a public field test. The analysis contract and renderer are usable; schemas and host-specific adapters may still change before a stable release.
Requirements: Node.js, Python 3.10+, and a local-file-capable Agent.
npx skills add pakco77/wenshan-skill --skill knowledge-peak-map -gCheck that the repository exposes the Skill:
npx skills add pakco77/wenshan-skill --listInstall for a specific Agent or every detected compatible Agent
# Codex
npx skills add pakco77/wenshan-skill \
--skill knowledge-peak-map \
--agent codex \
--global \
--yes
# Claude Code
npx skills add pakco77/wenshan-skill \
--skill knowledge-peak-map \
--agent claude-code \
--global \
--yes
# Every compatible Agent detected on this machine
npx skills add pakco77/wenshan-skill \
--skill knowledge-peak-map \
--agent '*' \
--global \
--yesFor CodeWhale, CodeBuddy, WorkBuddy, and manual installation, read the Agent compatibility guide.
Send this to your Agent and replace the path and nickname:
Use $knowledge-peak-map to analyze:
/absolute/path/to/my-writing
Author nickname: Pakco
Interface language: English
Goal: Generate a Wenshan map
If your host does not use $skill-name syntax, say: “Use the knowledge-peak-map Skill to analyze this directory.”
Wenshan needs only:
- an author nickname;
- a user-selected Markdown or Obsidian writing directory;
- an interface language: English or Chinese.
It does not scan the whole vault by default, edit source articles, or upload writing to a remote service.
Use huashu-md-html to convert PDF, DOCX, PPTX, XLSX, HTML, web pages, EPUB, images, audio, or ZIP archives into clean Markdown first:
npx skills add alchaincyf/huashu-md-html --skill huashu-md-html -gThen ask your Agent:
Use $huashu-md-html to convert these source files into a clean Markdown collection.
After I review the converted files, use $knowledge-peak-map to generate Wenshan.
The two Skills remain separate on purpose: huashu-md-html prepares the corpus; Wenshan reviews evidence, resolves versions, audits mountain boundaries, and renders the map.
writing/
└── Cognitive Map/
└── Agent Atlas/
├── cards/ # auditable semantic card per article
├── runs/ # analysis and review records
├── review.md # boundary cases and human decisions
├── wenshan-terrain.json # mountains, counts, evidence, relations
├── Wenshan.md # readable analysis summary
└── Wenshan.html # zoomable, clickable, shareable map
The generated HTML supports:
- English and Chinese interface switching while preserving original article titles;
- wheel and keyboard zoom plus pointer panning;
- peak focus and a reverse-chronological source-article drawer;
- daylight parchment and night atlas themes;
- 3:4 share-image export;
- links back to Markdown or Obsidian source notes.
- You have many articles but cannot clearly name what you keep returning to.
- Drafts, finals, and rewrites are mixed together, so ordinary counts are inflated.
- You do not want folders, tags, word frequency, or vector similarity to decide your knowledge structure.
- You want a personal writing asset that is explainable, auditable, and visually shareable.
Wenshan can analyze public-account articles, essays, research notes, project retrospectives, decision records, reading notes, and portfolios. Obsidian is a recommended container, not a requirement; an ordinary Markdown directory is enough.
Wenshan uses Evidence-Gated Longitudinal Framework Analysis (EGLFA). EGLFA is a Wenshan-defined engineering specification that combines established qualitative research practices; it is not the established name of a published research method.
flowchart LR
A["Select the author's own writing"] --> B["Exclude templates, prompts, references, and fragments"]
B --> C["Resolve draft / final / rewrite versions"]
C --> D["Code scenes, industries, roles, practices, and claims"]
D --> E["Form MECE candidate mountains on one classification axis"]
E --> F{"At least 3 independent canonical articles?"}
F -- "No" --> G["Render no mountain"]
F -- "Yes" --> H["Audit boundaries, synthesize claims, review relations"]
H --> I["Deterministic contour map"]
Core rules:
- one version-resolved canonical article is one independent analysis unit;
- one article adds altitude to only one primary mountain;
- a main mountain is a noun phrase strongly anchored to a scene, industry, role, or practice;
- main mountains should be MECE on one declared classification axis;
- a contained medium, format, tool, or method becomes a subpeak, not a peer mountain;
- a mountain requires at least three independent articles; no evidence means no mountain;
- mountain proximity comes from explicit semantic review, not embedding distance;
- article count represents accumulated writing volume, not expertise, authority, or correctness.
Read the complete English EGLFA method specification.
| Map element | Meaning |
|---|---|
| Mountain name | A recurring concrete problem space, such as AI Tools, Product Management, or CNC |
16 pieces |
16 independent canonical articles; accumulated volume, not a capability score |
| Solid triangle | Peak summit and interaction target |
| Subtitle | The Agent's synthesis of the author's current answer in this area |
| Peripheral evidence labels | Recurring scenes or practices supported by articles inside the mountain |
| Article dots | Real source articles that open titles, dates, summaries, and original paths |
| Mountain proximity | Reviewed semantic relations, shared practices, or longitudinal transitions |
| Contours and ridges | One continuous mountain range, not a set of disconnected rings |
| Bottom-right timestamp | Analysis and render time |
| Approach | What it usually answers | Wenshan's treatment |
|---|---|---|
| Folder or tag chart | Where a file was stored | Re-reads article meaning instead of copying the directory |
| Word frequency or word cloud | Which words appear often | A frequent brand or term does not automatically become a mountain |
| Topic model | Which statistical topics may exist | Final topics must pass evidence and human-interpretability gates |
| Embedding clustering | Which texts are close in vector space | Mountain relations are explicit, explainable, and editable |
| Generic knowledge graph | Which entities are connected | Wenshan also represents accumulated writing, claim evolution, and mountain boundaries |
A collection of 102 Markdown files was reviewed:
- 87 independent canonical articles;
- 80 articles entered the map;
- 7 remained below the evidence gate as outliers;
- 7 main mountains were produced.
Two important boundary corrections:
| Incorrect peer mountain | Reviewed result |
|---|---|
HTML Expression · 5 articles |
Moved under AI Tools as a subpeak |
AI Cognition · 9 articles |
Moved under AI Industry as the Human–AI Boundaries subpeak |
This was not an attempt to force a fixed mountain count. It prevented parent and child topics from appearing as peers. Read the compact MECE case.
Select a directory that primarily contains the author's own drafts and finals:
writing/
├── drafts/
└── published/
Ask your Agent:
Use $knowledge-peak-map to analyze this Obsidian writing collection:
/absolute/path/to/writing
Author: Pakco
Language: English
Exclude non-author work, resolve versions, and then generate Wenshan.
Derived files are written only to Cognitive Map/Agent Atlas/ inside the selected collection. Rendering never rewrites source Markdown or semantic cards.
If reviewed cards and wenshan-terrain.json already exist, run only the deterministic renderer:
python3 knowledge-peak-map/scripts/render_territory_demo.py \
--scope "/absolute/path/to/collection" \
--nickname "Pakco" \
--language en \
--theme obsidian-atlas \
--output-name "Wenshan"A visual theme may change paper, lines, typography, grid, selection treatment, and controls. It must never change mountain names, counts, evidence points, reviewed relations, or terrain coordinates.
| Theme | Direction | Status |
|---|---|---|
survey-parchment |
Parchment × surveying instrument × restrained monochrome lines | Implemented |
obsidian-atlas |
Black archival paper × warm gray-sepia contours × evidence stardust | Implemented |
mythic-parchment |
Ancient speculative cartography × hand-cut contours × restrained slope marks | Design specification |
archive-engraving |
Nineteenth-century geographic atlas × copper engraving × museum archive | Design specification |
- Read only the user-selected collection.
- Never scan the whole vault by default.
- Never edit source articles.
- Require no vector database or embedding service.
- Never publish private article bodies or absolute local paths.
- Only unique source paths with both
include: trueandcanonical: trueadd altitude. - Do not claim longitudinal analysis when reliable dates are unavailable.
- Send ambiguous article assignments and mountain boundaries to
review.mdinstead of silently guessing.
git clone https://github.com/pakco77/wenshan-skill.git
cd wenshan-skill
python3 knowledge-peak-map/scripts/self_check.pyRepository structure:
wenshan-skill/
├── README.md
├── README.zh-CN.md
├── VERSION
├── LICENSE
├── assets/
├── docs/
└── knowledge-peak-map/
├── SKILL.md
├── agents/
├── assets/
├── references/
└── scripts/
The renderer and self-check use only the Python standard library. Contributions are welcome for corpus cases, host adapters, validation rules, and visual themes, provided that visual changes preserve the same semantic data.
MIT © 2026 Pakco
If Wenshan helps you see your writing as an accumulated body of work, consider starring the repository. If you find a wrong mountain boundary or a new use case, open an Issue or PR.
