领域
领域是没有结束日期的持续责任——健康、财务、职业。 它们不是项目,也永远不会“完成”。一个沉寂的领域正是此技能旨在揭示的问题:与项目不同,领域不会主动宣告自己被忽视了。
如何组织领域不在此处决定。 areas.md 拥有模型的管辖权:是否存在分组层、分组的名称、记录分组的 YAML 前置元数据字段,以及新笔记的存放位置。此技能持有算法并读取模型——它从不硬编码组名或假设有多少个组。
基础层
每次操作前需读取以下文件,每个文件相对于此技能的基目录,路径为 ../../para/<file>.md——它们包含共享规则,不要从记忆重述:
../../para/paths.md—— 始终包含,包括“语言”:下面的字符串来自lang/<LANG>.md.claude/para/areas.md(仓库配置,位于REPO_ROOT下)—— 始终需要;没有模型此技能毫无意义../../para/note-format.md—— 用于create;用于review时,在TASKS = files下查看“旧版字段”../../para/find-target.md—— 当review需要解析一个已命名的领域时../../para/confirm.md——create写入;review不写入任何内容../../para/thresholds.md—— 用于review
子命令
$ARGUMENTS 的第一个词决定子命令:create 或 review。为空时则显示两者并询问。
create <name> —— 创建一个领域
- 从磁盘读取
Templates/Area.md,原文读取。 - 决定分组。 从
areas.md中GROUPS列出的值中选取一个,根据描述决定。如果确实不清楚,询问——分组字段决定了文件的存放位置,因此不能留空。 如果GROUPING = none,则此步骤不适用。 - 填充前置元数据,按照
note-format.md中领域行的模式:title、tags: [area/<slug>](标签中的 slug 按note-format.md填充),以及如果模型有分组字段则填充该字段。 - 填充正文:
common.links章节——相关笔记的维基链接,否则为模板中的空-。area.current_state章节——当前该责任的状况,用用户描述中的原话。如果他们没说则留空。area.notes章节——留空;随时间积累。
- 写入到
areas.md中PLACEMENT指定的路径,如果描述暗示子文件夹则深入。先检查基本文件名是否与整个仓库冲突。 - 报告路径和分组。
如果描述包含结束状态和目标,那它就是个项目,不是领域——告知用户并提供 /projects create。
review —— 哪些领域沉寂了
只读。回答“我的哪些责任没有被查看”。如果带参数,只审查该领域;如果不带参数,审查 GROUPS 列出的所有分组——无论有多少个。
- 递归遍历
Areas/目录。对每个笔记:路径、分组字段和最后一次修改时间(stat -f '%m %N')。在TASKS = files下,排除*/Tasks/*:那些是任务笔记,不是领域笔记(note-format.md“旧版字段”)。 - 读取每个笔记的前置元数据,以及存在的
area.current_state章节。不读全部正文——这是扫描,不是对每个笔记的总结。 - 按分组计算:有多少个笔记、该分组最后被触摸的时间,以及哪些单个笔记超过了
thresholds.md中定义的领域沉寂阈值(该阈值故意设置得比项目的阈值宽松很多)。 - 只标记实际触发的问题:
- 某个分组没有任何笔记;
- 某个笔记超过阈值——说明超了多少天,而不是说它不好;
- 某个笔记违反了
PLACEMENT_CHECK——其分组字段与所在文件夹不一致。如果模型设置PLACEMENT_CHECK = none则跳过; - 某个领域笔记的
area/标签 slug 未填充; - 某个笔记完全没有前置元数据(早于约定——指出但不自动迁移);
common.links章节中存在悬空的维基链接;- 某个领域包含了看似是项目工作的内容——有结束状态的目标。注明并提供拆分建议。
- 按
LANG渲染,遵循REVIEW_GROUPING,丢弃任何没有问题的分组,使用areas.review.*字符串。输出的确切格式位于areas.md中——它依赖于模型,因此写在模型所在处。 - 不写入任何内容。 如果审查发现值得做的操作,说出来让用户决定。
备注
- 领域中的沉寂是一种信息,而不是判决。如实地报告——“74 天未更改”,绝不说“你放弃它了”。
- 领域很少被归档;持续的责任不会结束。如果要求归档一个领域,通常意味着笔记过时了,而不是责任过时了——参见
/archive。 - 所有内容使用
LANG。