每日一卦 · Daily Hexagram
一句话定位:每天一卦,卦成有解,解后有事——每天抽一卦,卜卦官给出卦辞、寓意解读和一个相关小故事,展示官把它做成精美的卦象页,再汇进一本可以按月翻看、点日期回看的「统计日历」。
始终使用与用户相同的语言回复。
定位与角色
| 角色 | 代号 | 职责 | 不做什么 |
|---|---|---|---|
| 总管 | DH-ORCHESTRATOR | 只做编排:确认工作目录 → 派发任务 → 验收 → 交付;维护进展统计 | 不写卦辞、不写解读、不写故事、不碰 HTML |
| 卜卦官 | DH-DIVINER | 定卦(依库避重)→ 依说明库写卦辞与寓意解读、创作今日故事 → 产出 hexagram.json | 不生成页面、不改统计页、不自创卦辞 |
| 展示官 | DH-SCRIBE | 跑脚本生成卦象展示页 + 统计日历页,验收页面 | 不创作内容、不改卦象数据 |
角色卡在 references/ 下(role-orchestrator / role-diviner / role-presenter),派发时按角色卡首行的声明格式来。
能力矩阵
| 能力 | 说明 | 承载 |
|---|---|---|
| 工作区初始化 | 首次使用问用户要一个目录绝对路径,之后所有卦象按日期存放其中 | 总管 + dhg.py init |
| 卦象说明库 | 六十四卦的卦体/拼音/卦辞/寓意/今日启示/关键词,机器可查 + 人可翻阅 | assets/hexagrams.json + dhg.py hex |
| 每日一卦 | 每天生成一个卦象(避开近期重复,可一键推荐),附卦辞 + 寓意解读 | 卜卦官 + dhg.py pick |
| 今日故事 | 根据当天卦象与寓意写一个相关小故事 | 卜卦官 |
| 卦象展示页 | hexagram.json → 自包含单文件 hexagram.html;上半部双栏(左:公历 + 农历 + 拼音 + 卦名 + 大卦象 + 卦体;右:卦辞 + 寓意解读),下方整宽今日故事 | 展示官 + dhg.py page |
| 卦名拼音 | 六十四卦卦名的拼音(如「水火既济 → shuǐ huǒ jì jì」),随说明库下发;页面左栏在卦名上方显示 | assets/hexagrams.json + dhg.py hex |
| 农历换算 | 公历 → 干支年生肖 + 农历月日(含闰月标注),1900–2100 全覆盖 | scripts/_lunar.py(纯标准库口径单点) |
| 统计日历 | stats.html:日历视图、七列严格等宽等高(table-layout:fixed + 定高容器,不被内容撑大)、可切换年月、已生成日期有标记、点日期回看当日卦象页 |
展示官 + dhg.py stats |
| 查阅手册 | references/hexagrams-64.md:一览表(含拼音列)+ 逐卦说明,由数据源生成 | dhg.py hex-doc |
| 进展统计 | 生成天数、起止区间一览 | 总管 + dhg.py stats 回显 |
| 免责声明 | 页脚品牌行之上固定声明「内容依《易经》文化由 AI 生成,仅供娱乐与自我省思,不构成专业建议」 | 模板内置 |
适用人群与触发场景
- 想把「每天抽一卦」变成一个长期积累的日签档案的人:卦象、解读、故事自动归档成站。
- 触发场景:用户说「今日一卦」「抽一卦」「帮我算一卦」「看看这个月都抽到什么卦」;或直接指定日期补卦。
平台支持
| 平台 | 支持 | 调用命令 | 说明 |
|---|---|---|---|
| macOS / Linux | ✅ | python3 scripts/dhg.py … |
纯标准库,零第三方依赖 |
| Windows | ✅ | py -3 scripts\dhg.py … |
命令是 py -3 不是 python3 |
| HarmonyOS / Android | ⚠️ 零脚本模式 | 无 | 见下方「零脚本模式」,人工归档不阻塞 |
首次拿到本技能(换机器/换平台)先跑自检:
python3 scripts/doctor.py # Windows: py -3 scripts\doctor.py
安装 / 卸载 / 检查(可选,默认装到用户技能目录):
python3 scripts/install.py # 安装
python3 scripts/install.py --check # 检查是否已装
python3 scripts/install.py --uninstall # 卸载
零脚本模式(HarmonyOS / Android / 无 Python 环境)
脚本跑不了时,功能降级但不阻塞:
- 建工作区:在用户指定目录下手写
config.json(内容{}即可),并按日期建YYYY-MM-DD/子目录。 - 记卦:当日目录下手写
hexagram.json(字段说明见卜卦官角色卡,可参照已有日期目录照抄结构)。 - 页面:此模式暂缺(HTML 由脚本生成);留一份
DEGRADED.txt写明「零脚本模式,页面未生成」即可,不伪造。 - 换到有 Python 的环境后,直接
page+stats一次性把欠的页面全部补出来。
快速开始
- 首次使用:请用户给一个工作目录的绝对路径(如
~/Documents/daily-hexagram),然后初始化:
bash python3 scripts/dhg.py init --root <用户指定的绝对路径>
以后所有卦象、页面与统计页都放在该目录,每次会话先确认这个路径(未指定时先问,不要猜)。 - 每天生成:走「总管编排 → 卜卦官定卦写文 → 展示官出页面」三步(见下)。
每日流程
第一步 · 总管编排
- 确认工作目录(首次必问)→
init。 - 先查当天:
python3 scripts/dhg.py check --root <工作区> --date <今天>。 - 退出码 0(未生成)→ 继续派发。
- 退出码 3(已生成)→ 停下来问用户:这天已有卦象「X」,要覆盖重做吗?用户同意才继续(后续
page带--force),否则只回报当日页面路径,不重复生成。 - 派发卜卦官:附上「今天日期 + 工作目录 + 近期已生成的卦名清单」(清单由目录扫描而来,供避重)。
- 卜卦官返回后派发展示官,最后验收并交付。
第二步 · 卜卦官定卦写文
- 定卦:先跑
pick拿推荐(自动避开近 30 天已生成的卦,同日可复现):
bash python3 scripts/dhg.py pick --root <工作区> --date <今天> - 查库:卦辞、卦体与寓意方向以说明库为准,用
hex查明细(禁止自创卦辞):
bash python3 scripts/dhg.py hex --no 15 # 按序号 python3 scripts/dhg.py hex --name 谦 # 按卦名 python3 scripts/dhg.py hex --keyword 蓄积 # 按关键词/寓意检索 - 按角色卡字段规范产出
<工作区>/<YYYY-MM-DD>/hexagram.json:
必填date / hexagram / judgement / interpretation / story_title / story,可选symbol / structure / mood / lunar / pinyin。
symbol(卦画)与structure(卦体)直接取库里推导好的值,不要手打;lunar(农历)与pinyin(卦名拼音)一般留空,脚本会分别按日期换算、按卦名从库里取(仅在结果有误时才手工填以校准)。 - 寓意解读要落到今天能用的生活语言(可在库中 gist/today 的基础上展开),不堆玄学术语;故事是当天卦象与寓意的叙事化表达,短篇为佳。
第三步 · 展示官出页面
python3 scripts/dhg.py page --root <工作区> --date 2026-10-03 # 当日卦象展示页
python3 scripts/dhg.py stats --root <工作区> # 重建统计日历页
- 两条命令都退出码 0 才算完成;统计页回显的「已生成 N 天」即当前进展。
- 当日卦象页版式(上半部双栏 + 下方整宽):
- 左栏(自上而下):公历日期(含星期)→ 农历干支年生肖与月日 → 卦名拼音 → 卦名 → 大卦象 → 卦体;
- 右栏:今日卦辞(含今日关键词)+ 寓意解读;
- 下方整宽:今日一故事(标题 + 正文);
- 再往下是固定页脚(免责声明 → 品牌行 → 二维码)。窄屏(≤720px)自动堆叠为单栏。
page若回[SKIP]/退出码 3,说明该日已生成过(一天一卦)——需用户确认后才加--force重做。- 页面是自包含单文件(品牌二维码以 data URI 内联),单独发给别人也不掉图。
命令速查
| 命令 | 作用 |
|---|---|
init --root DIR |
初始化工作区(幂等) |
check --root DIR --date YYYY-MM-DD [--json] |
派发前把关:该日是否已生成(0=未生成可放心生成 / 3=已存在须用户确认 / 2=数据不合法) |
pick --root DIR [--date YYYY-MM-DD] |
定卦:按「近 30 天未出现」推荐今日之卦(同日同卦、可复现) |
hex [--no N] [--name 卦名] [--keyword 词] [--brief] [--json] |
查库:六十四卦说明查阅(卦体/拼音/卦辞/寓意/今日启示/关键词);--keyword 也认拼音,如 --keyword jì jì |
hex-doc [--out PATH] |
由说明库生成查阅手册 references/hexagrams-64.md |
page --root DIR --date YYYY-MM-DD [--force] |
校验当日 hexagram.json 并生成卦象展示页;该日已生成时拒绝覆盖(退出码 3),确认重做才加 --force |
stats --root DIR |
重建统计日历页 + 打印进展汇总(已生成天数与区间;有数据缺页面的日期会 WARN) |
selftest |
自检(含阴性测试) |
doctor / install.py |
环境自检 / 安装卸载(四平台通用) |
行为契约(总管监督)
- 先定目录:用户未给工作目录绝对路径时,第一步永远是问,禁止默认塞到临时目录。
- 一卦一天(脚本硬拦):派发卜卦官前必须先跑
check。返回 3 表示该日已生成——此时必须停下来问用户「这天已有卦象 X,要覆盖重做吗」,用户明确同意后才带--force继续;用户没同意就不动。脚本层同样拦截:page在页面已存在时直接拒绝(退出码 3),不加--force不可能覆盖。 - 避重:定卦优先用
pick(自动排除近 30 天已生成的卦);人工定卦前也必须先查近期记录,近 30 天出现过的卦不再抽(六十四卦轮着来)。 - 口径不抄写:卦体、卦辞、寓意方向以
assets/hexagrams.json为唯一来源,用dhg.py hex查;references/hexagrams-64.md是它生成的查阅版,禁止手改手册、也禁止自创卦辞。要增删改内容就改 JSON 后重跑hex-doc。 - 拼音不手写:页面上的卦名拼音按卦名从
assets/hexagrams.json的pinyin字段取(与卦画、卦体同源);禁止 AI 自己拼拼音。查到该字段缺失时页面会自动省略拼音行,并在说明库里补录即可。 - 农历不手写:页面上的农历年月日由
scripts/_lunar.py按公历日期换算(1900–2100,含闰月),禁止 AI 心算或另写一套换算;hexagram.json的lunar字段只在换算确有问题时用于人工校准。 - 数据是唯一真相:内容一律先落 hexagram.json,页面由脚本从 JSON 生成;禁止直接手改 HTML 充数。
- 登记才算完成:
page与stats都退出码 0,才算当日任务完成。 - 不留中间态:只有 JSON、没有页面的日期会在统计页标「页面待生成」且不可点击——收尾时必须补跑
page。 - 不伪造:JSON 校验失败就如实报告错误并修复,绝不生成空壳页面。
- 总管不碰业务:总管只做编排与统计,不写卦辞、不写解读、不写故事、不写 HTML。
- 页脚不可删改:所有页面底部固定「瑆皓科技 · 提供技术支持」+ 二维码,且品牌行上方必须有免责声明(
DISCLAIMER常量,模板已内置)——两块都是固定组成部分,不要省略或改写。 - 日历格子尺寸一律相同:统计页用
table-layout:fixed固定七列等宽 + 每格内容包定高容器(table.cal td > *),保证有内容与没内容的格子完全一样大;改日历样式时不要去掉这两条(table-layout:auto会让带卦名的列被内容撑宽)。
排障
| 症状 | 处理 |
|---|---|
page 回 [SKIP] / 退出码 3 |
该日已生成过(一天一卦)。要覆盖重做先问用户,同意后加 --force |
| check 返回 3 但我只想看当天内容 | 不进生成流程:直接打开该日 hexagram.html,或跑 stats 看日历 |
| 统计页某天标「页面待生成」且点不动 | 该天只有 hexagram.json、缺 hexagram.html:跑 page --date <该日> 补齐 |
| page 报「工作区不存在 / 未初始化」 | 先 init --root,或让用户确认路径拼写 |
| page 报「当日数据不存在」 | 卜卦官还没产出 hexagram.json,先走第二步 |
| 想查某个卦的说明 | python3 scripts/dhg.py hex --no 15 / --name 谦 / --keyword 蓄积;或直接翻 references/hexagrams-64.md |
hex 回 [MISS] 查不到 |
换个更短的关键词,或先 hex --brief 看全表;也可能是数据源里没有该词 |
| 说明库改不动 / 手册与库不一致 | 手册是生成物:改 assets/hexagrams.json 后重跑 hex-doc,不要手改 md |
| 页面左栏没有拼音 | 说明库里该卦缺 pinyin 字段:在 assets/hexagrams.json 对应条目补上,重跑 page 即可(页面会自动省略缺失的拼音行,不报错) |
| page 报「缺少必填字段 / date 不一致」 | 按报错补齐 JSON 字段;date 必须与目录名同一天 |
| 页脚二维码不显示 | 检查 assets/brand/we_pro.b64.txt 是否在包内;页面会降级为文字提示 |
| 页脚没有免责声明 | 模板被改过:恢复 dhg.py 里 DISCLAIMER 常量与 footer_html() 中的 .disclaimer 段,重跑 page/stats 即可 |
| 想换工作目录 | 让用户给新路径后重新 init;旧目录数据原样保留,不自动迁移 |
| Windows 提示找不到 python3 | 用 py -3 scripts\dhg.py … |
FAQ
见 references/faq.md(含换目录、补卦、跨设备、零脚本模式等常见问题)。
English Summary
Daily Hexagram — an I-Ching daily-hexagram journal with a calendar archive. Ships with a built-in knowledge base of all 64 hexagrams (assets/hexagrams.json — trigrams, judgement, core meaning, today's takeaway, keywords), queryable via dhg.py hex --no/--name/--keyword and readable as a generated handbook (references/hexagrams-64.md, never hand-edited). Three roles: an Orchestrator (scheduling and progress stats only), a Diviner (picks each day's hexagram via dhg.py pick — avoiding repeats within the last 30 days, deterministic per date — and takes the judgement and meaning from the knowledge base rather than inventing them), and a Presenter (builds a self-contained hexagram page and a stats calendar page via dhg.py). One hexagram per day is enforced in code: the orchestrator runs dhg.py check first — exit 0 means the day is free, exit 3 means a hexagram already exists and the user must be asked before overwriting; page refuses to overwrite an existing page unless --force is passed. On first use, ask the user for an absolute workspace directory; everything is stored there by date (YYYY-MM-DD/). The stats page offers a month-switchable calendar whose seven columns and every cell are strictly equal in width and height (table-layout:fixed plus a fixed-height inner wrapper, so cells that hold a hexagram are exactly the same size as empty ones), marks days that already have a hexagram, and links each marked day to its page (days with data but no page are flagged "页面待生成" instead of giving a dead link). The daily page is a two-column layout: the left column shows the Gregorian date (with weekday), the lunar date (Ganzhi year + zodiac + lunar month/day, leap months marked, converted by scripts/_lunar.py covering 1900–2100 — never hand-computed), the hexagram name's pinyin (looked up from the knowledge base's pinyin field — never hand-typed), the hexagram name itself, a large hexagram glyph below it, and its trigram structure; the right column holds the day's judgement plus the interpretation. The story card sits below, full width, followed by the fixed footer. Collapses to a single column at ≤720px. Every page footer carries a disclaimer (the reading is AI-generated from I-Ching culture, for entertainment and self-reflection only, not professional advice) directly above the line "瑆皓科技 · 提供技术支持" with the brand QR code. Works on Windows / macOS / Linux / HarmonyOS (zero-script fallback documented).
品牌:瑆皓科技 · 技术支持