deanchensj/jiangshan-map/jiangshan-atlas
Claude Code and agent skill by deanchensj/jiangshan-map
- community
Checking that the SKILL.md file is still in the repository.
Locate historical Chinese events, classical poems, battles, ancient places, and single or multi-person life trajectories on the Jiangshan Historical Atlas (江山时序, 403 BCE – 2026 CE) by resolving a question into (year, place) or (--person A,B), generating an interactive deep-link URL, inspecting structured administrative/biographical context, and optionally rendering a high-resolution map screenshot. Use when the user asks about the time, location, territorial context, administrative genealogy, life trajectory, or shared historical encounters of Chinese historical events, poems (e.g. "雪拥蓝关马不前"), figures (e.g. "李白和杜甫在哪里相遇", "诸葛亮与司马懿交锋"), or ancient places.
Install
npx vskill@latest install deanchensj/jiangshan-map/jiangshan-atlasSKILL.md
Jiangshan Historical Atlas (江山时序) Skill
Use 江山时序 (Jiangshan Atlas) to turn any question about Chinese history, classical literature, poetry, battles, historical figures, or ancient geography into:
- A clickable interactive deep-link URL (
?year=<YEAR>&place=<PLACE>or?person=<FIGURES>) - Structured historical & administrative context (`--inspect`) returning the exact reign era, regime (
polity), macro-region (道/路/行省), prefecture (郡/州/府), modern province, nearest ancient city (with capital status and era-specific historicalremark), the 2,400-year city/pass overview (lorewith bilingualtag/descandtagEn/descEn), or single/multi-person life trajectories and shared historical encounters (person.encounters) - An optional high-resolution rendered map screenshot (`--out`) showing dynastic territories, mountains/rivers, red pinpoint marker, single/multi-person trajectory (
点人溯事 · 同途相逢 / 时空平行对照), or the 2,000-year administrative genealogy card (点地溯源 · 古今政区沿革).
Workflow (Deduce Time & Place First → Inspect & Build URL → Optional Screenshot)
Step 1: Deduce Historical year and Disambiguated place First (先考据年份与地点)
When a user asks about a historical event, classical novel scene, poem, battle, or idiom, the prompt often omits the exact year or uses a literary/event phrase (e.g., "找到水浒传宋江江州劫法场的地方"). Before building any URL or running the script, always deduce:
- Deduce the Historical Era & Representative Year (`先定年份`):
- Identify the dynasty, reign period, and concrete integer year (
-403to2026, negative for BCE, no year0) behind the event or literary setting. - Literary / Novel scenes: Map the story's setting to its historical reign era. For example,《水浒传》宋江刺配江州、浔阳楼题反诗、江州劫法场(白龙庙小聚义)is set in Northern Song Emperor Huizong's Chongning era (北宋徽宗崇宁年间) →
year=1102(or1110). - Classical poems / Battles: Identify the year of composition or battle. For example, 韩愈《左迁至蓝关示侄孙湘》("雪拥蓝关马不前") was written during his exile in 唐宪宗元和十四年 →
year=819. - Pre-403 BCE events: If an event occurred before 403 BCE (e.g., 牧野之战 1046 BCE / 鸣条之战 1600 BCE), clamp
yearto-403while explaining the actual date in prose. - Multi-year trajectories: When a route spans multiple years (e.g., Su Shi's lifetime exile stops or Wen Tianxiang's resistance campaign), deduce the chronological year for each stop (
year=1079,1080,1094,1097).
- Deduce & Disambiguate the Canonical Place (`再定地点 · 古今消歧`):
- Convert event phrases or literary scenes into the canonical ancient settlement/landmark name or modern prefecture/county city name (both Chinese and English / Pinyin are natively supported, with apostrophe/hyphen/space-insensitive matching):
- Strip event/action suffixes: Never pass an event phrase like
place=江州劫法场orplace=风雪山神庙. Extract the actual geographic site (浔阳/Xunyang/九江/Jiujiang). - Disambiguate cross-dynasty homonyms (同名异地): Check what a historical name referred to in that specific era. For example,
江州in Qin/Han/Three Kingdoms (巴郡江州) was modern 重庆 (`Chongqing`), whereas江州in Eastern Jin, Tang, and Song (e.g., 白居易“江州司马”、宋江“刺配江州”) had its seat at 浔阳 (`Xunyang`), i.e., modern 江西九江 (`Jiujiang`). - When in doubt, prefer unambiguous city/landmark names: Pass a clean canonical ancient/poetic name (
浔阳/Xunyang,浔阳楼,梁山泊/Mount Liang,景阳冈,大名府/Daming,风波亭,蓝关/Lantian Pass/Languan,长安/Chang'an/Changan,赤壁/Red Cliffs/Chibi,京口/Jingkou,五丈原/Wuzhang Plains,马嵬坡/Mawei,白帝城/Baidicheng,采石矶,长平/Changping,巨鹿/Julu,垓下/Gaixia,官渡/Guandu,肥水/Fei River,牧野/Muye,鸣条/Mingtiao,崖山/Yamen,土木堡/Tumu,滕王阁/Tengwang Pavilion,黄鹤楼,岳阳楼,兰亭,瓜洲,轮台,寒山寺,卢沟桥) OR its modern prefecture/county city name (九江/Jiujiang,运城/Yuncheng,镇江/Zhenjiang,黄冈/Huanggang,宝鸡/Baoji,奉节/Fengjie,绍兴/Shaoxing). - Never combine ancient and modern names with parentheses in a single token (write
place=浔阳,place=九江, orplace=Xunyang, neverplace=浔阳(九江)).
Step 2: Construct the Deep-Link URL & Verify with --inspect
Once (year, place) are deduced, format the deep-link URL (do NOT guess longitude or latitude numbers):
- Single site (0D pinpoint):
year=<INT>&place=<SITE>in Chinese or English/Pinyin (e.g.,?year=1102&place=浔阳,?year=819&place=蓝关, or?year=819&place=Lantian+Pass&lang=en). - Multi-stop route (1D same-year / 4D multi-year trajectory & converging multi-route `;`): Pass comma-separated place names in chronological order (
place=剑外,巴峡,巫峡,襄阳,洛阳withyear=763, orplace=Huzhou,Huangzhou,Huizhou,Danzhouwithyear=1079,1080,1094,1097), or semicolon-separated converging routes (place=许昌,江陵,赤壁;柴桑,樊口,赤壁withyear=208). The atlas draws curved high-contrast trajectories (1→2→3...), frames the camera bounding box, and lets the user click any numbered stop to jump to its year and open its 2,000-year administrative genealogy card. - Person Chronicle (`person=<FIGURE>&stop=<INDEX>`): Opens the curated multi-stop life & poetry trajectory (
点人溯事 · 人物生平纪事) for any of the 125+ curated historical figures (such assushi,zhugeliang,huoqubing,libai,dufu,gaoshi,caocao,xinqiji,xuanzang,wangyangming,zhangqian,baijuyi,hanyu,liuyuxi,yuefei,wentianxiang,zhenghe,banzhao,wangzhaojun,wenji,mulan,liqingzhao,qinshihuang,xiangyu,simamaqian,weiqing,banchao,zengguofan, etc.), any reigning monarch with ≥2 historical milestones, or the传国玉玺(yuxi) relic in Chinese, English, or Pinyin (?person=sushior?person=sushi&stop=2). - Multi-Person Chronicle (`person=<FIG1>,<FIG2>[,<FIG3>]`): Pass 2–4 comma-separated figures (
?person=libai,dufu,?person=libai,dufu,gaoshi,?person=caocao,liubei,sunquan,?person=zhugeliang,simayi,?person=liubei,caocao,?person=xiangyu,liubang,?person=wanganshi,simaguang,?person=xuanzang,lishimin,?person=liqingzhao,yuefei, or?person=libai,sushi). Merges all selected figures onto one unified chronological timeline and map layer with symmetric pairwise encounter matching: solo events carry a single badge ([🔴 李白]) and map bead, while co-located / co-participating events ($|\Delta\text{year}| \le 3,\ \le 45\text{ km}$) naturally carry 2 or 3 badges ([🔴 李白] [🔵 杜甫] [🟢 高适]) and a multi-dot capsule(🔴🔵🟢)on the map. - Optional `hover=<PREFECTURE>`: Highlights one 州/府/郡 polygon of that year's snapshot and pops its tooltip (
江州 · 属 宋 · 今:江西省). Supports both Chinese and English/Pinyin prefecture titles in that era (hover=江州orhover=Jiangzhouin 1102,hover=黄州orhover=Huangzhouin 1083,hover=应天府orhover=Yingtian Fuin 1415). Pair withplaceso the camera frames the prefecture (?year=1102&place=浔阳&hover=江州). - Optional `lang=zh-tw` / `lang=en`: Renders the Traditional Chinese (
lang=zh-tw) or English (lang=en) atlas UI when the user writes in Traditional Chinese or English, or asks for a Traditional Chinese / English map (place,person, andhoverwork in Simplified Chinese, Traditional Chinese, or English/Pinyin, e.g.,?year=741&place=長安&lang=zh-twor?year=1082&place=Huangzhou&hover=Huangzhou&lang=en).
Use --inspect to verify place or figure resolution and retrieve structured historical metadata (regime, circuit/province, prefecture, modern province, nearestCity with isCapital and era-specific remark, lore with 2,400-year city/pass overview tag/desc/tagEn/descEn, route distance, and person life events) as JSON without needing to read a screenshot:
| User Prompt | Step 1: Historical & Geographic Deduction (先考据) | Step 2: Deep-Link URL (后构建 URL) | |
|---|---|---|---|
| "找到水浒传宋江江州劫法场的地方" | 《水浒传》宋江刺配江州、浔阳楼题反诗、劫法场背景为北宋徽宗崇宁年间(约 1102 年);宋代江南西路江州治所为浔阳(今江西九江,非巴郡重庆) | https://deanchen.me/jiangshan-map/?year=1102&place=浔阳&hover=江州 | |
| "雪拥蓝关马不前 当时是什么时间地点?" | 韩愈于唐宪宗元和十四年(819 年)贬潮州途中经秦岭蓝田关(蓝关)(今陕西西安蓝田) | https://deanchen.me/jiangshan-map/?year=819&place=蓝关 | |
| "杜甫《闻官军收河南河北》即从巴峡穿巫峡,便下襄阳向洛阳路线?" | 唐代宗广德元年(763 年)杜甫在剑外(四川梓州)闻叛乱平定,规划同年水陆返洛阳路线 | https://deanchen.me/jiangshan-map/?year=763&place=剑外,巴峡,巫峡,襄阳,洛阳 | |
| "苏轼问汝平生功业,黄州惠州儋州贬谪路线?" | 苏轼自乌台诗案(1079 湖州)起,历贬黄州(1080)、惠州(1094)、儋州(1097) | https://deanchen.me/jiangshan-map/?year=1079,1080,1094,1097&place=湖州,黄州,惠州,儋州 | |
| "李白和杜甫一辈子在哪些地方相遇过?" | 唐天宝三载至四载(744–745),李白与杜甫先后于洛阳初遇、与高适同游梁宋(开封/商丘)、齐鲁兖州话别 | https://deanchen.me/jiangshan-map/?person=libai,dufu | |
| "李白、杜甫、高适三人的交集与各自命运如何?" | 744 年三人同游梁宋(开封/商丘);752 年杜甫与高适同登长安慈恩寺塔;安史之乱后李白流放夜郎,高适出任彭州刺史与成都草堂杜甫唱和(760) | https://deanchen.me/jiangshan-map/?person=libai,dufu,gaoshi | |
| "诸葛亮北伐与司马懿在哪几处正面交锋?" | 蜀汉建兴六年至十二年(228–234),两人先后于祁山、卤城/木门道、五丈原展开宿命对决 | https://deanchen.me/jiangshan-map/?person=zhugeliang,simayi | |
| "文天祥《过零丁洋》惶恐滩头说惶恐,零丁洋里叹零丁抗元路线?" | 南宋末文天祥自赣州起兵(1275),撤退经江西万安惶恐滩(1277),于珠江口零丁洋被俘(1278),至崖山海战(1279) | https://deanchen.me/jiangshan-map/?year=1275,1277,1278,1279&place=赣州,惶恐滩,零丁洋,崖山 | |
| "辛弃疾写京口北固亭怀古时天下局势如何?" | 南宋宁宗开禧元年(1205 年)辛弃疾任镇江知府,登京口(今江苏镇江)北固亭北望金朝 | https://deanchen.me/jiangshan-map/?year=1205&place=京口 | |
| "苏轼写《记承天寺夜游》时黄州归哪里管?" | 北宋神宗元丰六年(1083 年)苏轼贬居淮南西路黄州(今湖北黄冈),高亮黄州州界 | https://deanchen.me/jiangshan-map/?year=1083&place=黄州&hover=黄州 | |
| "Where was Su Shi exiled when he wrote the Red Cliff odes?" | Northern Song Yuanfeng 5 (1082 CE), exiled at Huangzhou (黄州, modern Huanggang, Hubei), English UI | https://deanchen.me/jiangshan-map/?year=1082&place=Huangzhou&lang=en |
Step 3 (Optional): Render a Map Screenshot On-Demand (--out)
Follow these three execution rules to keep responses fast and avoid wasted turns:
- Link & `--inspect` first, screenshot on-demand: The deep-link URL and
--inspectJSON are instantaneous and sufficient for most answers. Only pass--out <PATH>to render a PNG screenshot when the user asks for an image/map or when visual territorial/route comparison clearly adds value. - Request network access upfront for remote renders: When running inside a local checkout of
jiangshan-map(or withJIANGSHAN_REPO_ROOTset),--inspect(~0.2s via Node) and--out(~3–5s) work completely offline. When running standalone without a local checkout, headless Chrome must fetch ~3 MB of map/terrain assets fromdeanchen.me(typically 6–12s): run with network access enabled from the start (do not try in an offline sandbox first) and set a synchronous wait/timeout of at least 10–15 seconds. - Skip re-reading the generated PNG:
jiangshan.pyautomatically verifies the PNG header, dimensions (>=800x500), and pixel variance (exiting with code1on blank renders). Once it exits0, embed the PNG path directly in your response without calling an image-viewing tool unless you specifically need to inspect visual details on the canvas.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/jiangshan-atlas/SKILL.md
Popularity
- Repository stars
- 111
- Repository forks
- 4
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/deanchensj/jiangshan-map/jiangshan-atlas)