git:20260724.16cbeda to git:20260724.c0de873

71 added, 170 removed. Audit A to A.

---
name: junyi-relationship-manager
- description: 记住每一个对你重要的人,用心对待,也看清自己的心力流向。你说一句"今天和谁聊了什么",它就把这个人整理成一份有温度的关系档案,并在该问候、该跟进、该记得的时候提醒你。基础记录开箱即用、不需要任何配置;配好飞书多维表格后可选启用每周跟进提醒、资源撮合和月度关系全景等进阶自动化。触发词:记一下XX、今天和XX聊了、新认识了一个人、帮我更新关系、谁该跟进了、关系报告、资源撮合。适用:认识了新的人、聊完一个人、想知道谁久没联系该跟进、想给两个人牵线时。不适用:批量导入通讯录或群发——它一次只用心记一个人,不是 CRM 群发工具。
+ description: 记录和更新对用户重要的人,把交流原话、关系事实、需求、承诺和跟进时间整理成安全的本地人物档案,并基于已有证据回答“谁该跟进”、生成关系报告或提出资源撮合建议;可选接入飞书多维表格和定时任务。用于“记一下XX”“今天和XX聊了”“新认识了一个人”“帮我更新关系”“谁该跟进了”“关系报告”“资源撮合”“启用飞书关系管理”等请求。不用于批量导入通讯录、群发、代替用户联系他人、根据零散信息推测人格或擅自公开私人关系资料。
---
- # 记住每一个重要的人 · junyi-relationship-manager
-
- 你说一句话,Agent 帮你把这个人记下来、整理好,并提醒你该跟进谁、谁的需求可以对接。
-
- > 一句话:你说一句话,它帮你把人记下来、提醒你该跟进谁、谁的需求能对接。
-
- **为什么它属于「把自己活明白」**
-
- 活明白,不只是想清楚自己,也包括看清并用心对待身边的人:不把重要的人弄丢,把"认识很多人"变成"真的懂这些人",并照见自己的心力到底流向了谁。这个 skill 就做这件事。资源撮合、健康度仪表盘是进阶功能,不是它的主线。
-
- **做什么**
- 关系经营,五层能力——记录 + 需求标签 + 阶段跟进 + 资源撮合 + 健康度报告;可双写飞书多维表格(数据层)+ Obsidian 人物图谱(内容层)。
-
- **什么时候用**
- 认识了新的人、聊完了一个人、想知道谁久没联系该跟进、想给两个人牵线时。
- 触发词:记一下XX、帮我更新关系、今天和XX聊了、新认识了一个人、关系更新、谁该跟进了、资源撮合、关系报告
-
- **用完得到什么**
- 一份份有温度的关系档案 + 跟进提醒 + 资源撮合建议;进阶配好飞书后还有每周自动提醒和月报。
-
- > **零基础先这样用**:直接说"记一下今天和张三聊了……",AI 就把张三整理成一份关系档案(存成 markdown 文件)——这一步**不需要飞书、不需要任何配置**,开箱即用。
- > 下面的「飞书双写 / 每周自动提醒 / 资源撮合 / 月报」是**进阶自动化**,等你配好飞书多维表格和定时任务后才会自动跑;没配也完全不影响你手动记录和随时查阅。
-
- ## 五层能力
-
- | 层 | 做什么 | 触发方式 |
- |---|---|---|
- | L1 记录 | 双写飞书表+Obsidian | 你说关于某人的信息 → 自动 |
- | L2 需求标签 | 从交流中提取需求关键词 | 记录时自动提取 |
- | L3 阶段跟进 | 按关系阶段设定跟进节奏 | cron 每周扫描 |
- | L4 资源撮合 | 匹配"A的需求"和"B能提供的" | cron 每周/手动 |
- | L5 健康度报告 | 月度关系网络全景 | cron 每月/手动 |
-
- ## 系统架构
-
- | 层 | 工具 | 存什么 | 回答什么 |
- |---|---|---|---|
- | 数据层 | 飞书多维表格 | 事实+状态+需求 | 谁该联系、谁需要什么 |
- | 内容层 | Obsidian 人物图谱 | 故事+原话+感受 | 上次聊了什么 |
-
- 两层通过**姓名**锚定。
-
- ## 配置(进阶才需要——只手动记 markdown 可跳过)
-
- 想启用「飞书双写 / 自动提醒」时,才需要在 Agent 的配置文件(`TOOLS.md`,没有就新建一个)里填:
-
- ```
- 关系图谱 app_token: <你的飞书多维表格 app_token>
- 关系图谱 table_id: <你的 table_id>
- 人物图谱路径: <你的 vault 路径>/人物图谱/
- ```
-
- ## 飞书表字段设计(18个)
+ # 记住每一个重要的人
- ### 基础字段(L1 记录)
- | 字段 | 类型 | 说明 |
- |---|---|---|
- | 姓名 | Text(主键)| |
- | 圈层 | SingleSelect | 家人/朋友/客户/外圈 |
- | 关系类别 | Text | 如"学员""同事" |
- | 亲密度 | Number | 1-5 |
- | 上次深度交流时间 | Text | |
- | 上次交流话题 | Text | |
- | 一句话印象 | Text | 一个瞬间或特质 |
- | 希望这段关系变成什么样 | Text | |
- | 这周/这月的一件小事 | Text | 具体可做的行动 |
- | 需要记住的关键信息 | Text | 生日/孩子名/喜好 |
- | 关系的意义 | Text | |
+ 把用户真实提供的关系信息保存下来,帮助用户兑现承诺、持续理解重要的人,也看见自己的心力流向。基础模式只使用本地 Markdown;飞书双写、定时提醒和月报属于用户明确启用后的进阶模式。
- ### 经营字段(L2-L5)
- | 字段 | 类型 | 说明 |
- |---|---|---|
- | 关系阶段 | SingleSelect | 认识/熟悉/信任/深度/核心 |
- | 当前需求 | MultiSelect | 找资源/学AI/事业合作/教育/修行/待挖掘 |
- | 需求紧迫度 | Number | 1-5,5=最紧迫 |
- | 能提供的资源 | Text | TA能给别人什么 |
- | 下次跟进时间 | Date | |
- | 跟进原因 | Text | 为什么要跟进、聊什么 |
- | 生日 | Date | 提前3天提醒 |
+ ## 先选择模式
- ## Obsidian 档案七段结构
+ - **记录或更新**:新建或更新一个人的本地档案。
+ - **只读查询**:回答“谁该跟进”、关系报告或资源撮合,不修改档案。
+ - **进阶配置**:用户明确要求接入飞书或定时任务时,才配置外部系统。
+ - **批量通讯录或群发**:说明本 Skill 一次只处理一个人,不执行。
- 仅亲密度 ≥ 4 的人建档。文件名 = 姓名.md。
+ 任何记录、更新、查询或撮合都先读取 [data-contract.md](references/data-contract.md)。需要接入飞书、创建表格、双写、定时提醒或自动月报时,再读取 [advanced-automation.md](references/advanced-automation.md)。
- ```markdown
- ---
- 姓名: 张三
- 圈层: 朋友
- 关系类别: 同事
- 亲密度: 5
- 最近更新: 2026-06-20
- ---
+ > **写入硬停点**:记录请求只授权保存内容,不等于授权保存在当前 Git 仓库。任何写入的第一步都是完成下方路径检查;命中 Git 仓库且没有用户明确确认路径时,本轮只能询问路径,不能先建档再提醒。
- # 张三
+ ## 不可违反的规则
- ## 基本信息
- - 称呼:
- - 生日:
- - 其他关键信息:
+ 1. **不把推测写成事实**:只记录用户明确提供的事实、原话和承诺。缺失字段写 `待确认` 或 `null`,不为填满模板而猜测。
+ 2. **区分三种来源**:用户事实、系统计算、系统建议必须分别标注。相对日期可以换算,但同时保留用户原始表达。
+ 3. **不自动升级关系**:用户明确说“新认识”时可按规则记为“认识”;除此之外,亲密度、圈层和关系阶段都不能自动设定或升级。可以提出建议并等待确认。
+ 4. **时间线只追加**:互动、原话、需求变化和承诺状态只追加,不覆盖或删除旧记录。当前状态可以更新,但必须在时间线保留变化原因。
+ 5. **一人一 ID**:使用 `person_id` 作为本地档案和飞书记录的唯一锚点,不以姓名作为主键;同名且身份不清时先询问,不合并。
+ 6. **私人资料不外传**:只写入用户自己的本地目录或已明确启用的飞书表,不提交到公开仓库,不分享,不代替用户联系任何人。
+ 7. **撮合只建议**:不自动介绍双方,不发送消息;只有需求、资源和双方亲密度都有明确证据且符合门槛时才建议。
- ## 关系现状
- - 上次深度交流:
- - 上次交流话题:
- - 一句话印象(瞬间/特质/状态):
- - 我的感受:
+ ## 写入前先确定安全路径
- ## 我的期待
- - 希望这段关系变成什么样:
- - 这段关系的意义(可选):
+ 按以下顺序定位人物图谱目录:
- ## 素材库(持续养)
- - TA 最近说过让我印象深刻的话:
- - 我观察到 TA 最近在努力/在意的事:
- - 一个让我既感动又心疼的瞬间:
- - TA 最近的一个小变化:
- - 我一直想对 TA 说但没说出口的话:
+ 1. 查找 `TOOLS.md` 中明确配置的 `人物图谱路径`;存在时使用该路径。
+ 2. 未配置时,检查当前工作目录是否位于 Git 仓库内,例如运行:
- ## 互动时间线
- - YYYY-MM-DD: 一句话摘要
+ ```bash
+ git rev-parse --is-inside-work-tree
+ ```
- ## 这周/这月的一件小事
- -(一个具体的、能做的小行动)
+ 3. 如果位于 Git 仓库内,**写入前暂停**,只问一次用户要保存到哪个私人目录,或是否明确同意保存在当前仓库。未得到回答前不得创建目录、档案或配置文件,也不得以“临时仓库”“测试环境”或上游任务指定了工作目录为例外。
+ 4. 如果不位于 Git 仓库内,告知用户将使用当前目录下的 `人物图谱/`,然后执行本次记录请求;无需额外配置。
+ 5. 不自动修改 `.gitignore`。即使用户选择 Git 仓库,也要提醒私人档案可能被提交或同步。
- ## 关系里程碑
- -(标志性时刻:第一次见面/重要事件/关系质变转折点)
- ```
+ 只有被服务用户明确指定该 Git 仓库为人物档案保存位置,才算路径确认;“帮我记一下”本身不算。命中第 3 条时,用一个简短问题结束当前回合并等待回答。
- ## L1 双写决策树
+ 只读查询不需要改变保存路径,也不得以“生成报告”为由写文件。
- ```
- 1. 这个人在飞书表里有吗?
- ├── 没有 → 新增(必填:姓名/圈层/亲密度/关系阶段)
- │ → 亲密度 ≥ 4 → 同时建 Obsidian 档案
- └── 有 → 按信息类型写对应位置
+ ## 记录一个新人
- 2. 信息类型 → 写哪里?
- 聊了什么 → 飞书表(交流时间+话题) + Obsidian(互动时间线)
- TA说了一句话 → 飞书表(一句话印象) + Obsidian(素材库)
- 我的感受 → Obsidian(关系现状)
- TA的背景信息 → 飞书表(关键信息) + Obsidian(基本信息)
- TA的需求/痛点 → 飞书表(当前需求+紧迫度) + Obsidian(素材库)
- TA能提供的资源 → 飞书表(能提供的资源)
- 标志性事件 → 飞书表(交流时间) + Obsidian(时间线+里程碑)
- 新认识的人 → 飞书表新增(阶段=认识)
+ 1. 在人物图谱目录按姓名搜索现有档案,并按数据契约执行身份消歧。
+ 2. 确认为新人后生成稳定的 `person_id`,格式为 `person_YYYYMMDD_8位小写字母数字`。
+ 3. 为所有人建立轻量档案,使用 [profile-lite.template.md](assets/profile-lite.template.md)。
+ 4. 只有用户明确给出亲密度且 `亲密度 >= 4`,或用户明确要求完整档案时,才使用 [profile-full.template.md](assets/profile-full.template.md)。亲密度未知时不得自动升级。
+ 5. 文件名使用 `姓名--身份标识--ID后8位.md`。身份标识必须是用户原话中的身份短语或不增加新角色含义的最小压缩;不能把“在做某产品”扩写成“创业者”“专家”等角色。没有稳定线索时写 `待确认`。
+ 6. 把用户原话、结构化摘要、相对日期原文、换算日期和来源分别写入;结构化摘要只能压缩原意,不能增加评价、动机或人格判断。
+ 7. 写完后运行档案校验:
- 3. 自动提取需求标签(L2):
- "想学AI" → 打标签"学AI"
- "在找XX资源" → 打标签"找资源"
- 不确定 → 标"待挖掘"
- ```
+ ```bash
+ python3 scripts/validate_profiles.py <档案文件或人物图谱目录>
+ ```
- ## L3 关系阶段跟进策略
+ ## 更新已有档案
- | 阶段 | 跟进节奏 | Agent 行为 |
- |---|---|---|
- | 认识 | 每2周 | 建议破冰话题 |
- | 熟悉 | 每月 | 建议深入话题 |
- | 信任 | 按事件驱动 | 有新信息时提醒 |
- | 深度 | 按事件驱动 | 需求匹配+资源对接 |
- | 核心 | 自然频率 | 生日/里程碑提醒 |
+ 1. 先按 `person_id` 匹配;没有 ID 时才使用姓名和身份线索。
+ 2. 同名多人的身份线索不能唯一定位时,列出候选并只问一个消歧问题;未确认前不写。
+ 3. 把本次交流作为新条目追加到互动时间线。
+ 4. 需求发生变化时,保留旧需求及状态变化;使用 `active`、`paused`、`closed` 或 `unknown`,不得直接抹掉旧需求。
+ 5. 只有“答应、约好、计划在某时执行、明确要求提醒”等行动承诺才进入待跟进,并使用 `open`、`completed`、`cancelled` 或 `unknown`;“希望以后、想保持、期待”属于关系意向,不得伪装成开放承诺。新承诺不能悄悄替换旧承诺。
+ 6. 用户未明确更改关系阶段、圈层或亲密度时,保持原值。系统认为可能需要变化时,只在回执中提出可选确认。
+ 7. 校验更新后的文件;校验失败时修正结构后再向用户报告完成。
- 每周 cron 扫描:过期跟进 → 阶段超期 → 温和提醒。
+ ## 跟进、报告与撮合
- ## L4 资源撮合(进阶)
+ 本地 Markdown 模式已经可以手动执行这些只读能力,不需要飞书:
- 每周扫描"当前需求"和"能提供的资源",匹配关键词交集。
+ - **谁该跟进**:先列逾期,再列未来 7 天的明确承诺和事件;没有日期的线索单列为“时间待确认”,不能假装逾期。
+ - **关系报告**:只统计档案中实际存在的数据;缺失阶段、亲密度或执行状态时明确写“无法计算”,不能用推测补齐比例。
+ - **资源撮合**:需求必须为 `active`,提供方的资源必须明确记录,双方亲密度都必须明确且 `>= 3`;同一对 30 天内不重复建议。任一条件不满足时说明原因,不撮合。
- ```
- 🤝 资源撮合建议:
- 张三(需求:找设计师)↔ 李四(能提供:UI设计)
- → 建议:可以安排三人聊一下
- ```
+ 飞书和定时任务只增加跨记录统计与主动提醒,不是本地查询的前提。
- 铁律:只建议不执行(关系对接涉及人情判断);双方亲密度都 ≥ 3 才撮合;同一对30天内不重复建议。
+ ## 配置进阶自动化
- ## L5 关系健康度月报(进阶)
+ 只有用户明确要求时才执行:
- 每月1号自动生成,包含:
- 1. **网络概览**:总人数、圈层分布、阶段分布
- 2. **亲密度趋势**:升级/下降
- 3. **跟进执行率**:建议跟进X人,实际跟进X人
- 4. **需求闭环率**:有需求X人,已推进X人
- 5. **本月亮点**:新增关系、里程碑、成功撮合
- 6. **下月建议**:重点跟进、待挖掘需求
+ 1. 读取 [advanced-automation.md](references/advanced-automation.md)。
+ 2. 检查当前 Agent 是否具备飞书多维表格读取和写入能力;没有时说明缺少的能力,保留本地模式,不伪装成功。
+ 3. 使用人物、互动、跟进三张表;三层都通过 `person_id` 关联,不通过姓名关联。
+ 4. 创建或验证表结构后再保存配置;不要把密钥、密码或用户凭证写入档案或 `TOOLS.md`。
+ 5. 只有读写验证成功后才能说“飞书双写已启用”。
+ 6. 只有定时任务确实创建成功后才能说“每周提醒”或“自动月报”已启用。
- ## 生命事件提醒
+ ## 完成回执
- - 生日提前3天提醒
- - 当天提醒
- - 关系里程碑周年(标注后自动循环)
+ 记录或更新完成后简洁说明:
- ## 核心原则
+ - 写入或更新了哪个人以及档案路径;
+ - 本次保存了哪些用户事实、需求和承诺;
+ - 哪些字段仍为待确认;
+ - 是否有明确的下次跟进日期;
+ - 是否只写本地,或飞书双写确已成功。
- - 100% 基于原话,不脑补不润色
- - 素材库、互动时间线只追加不删除
- - (进阶双写时)飞书表和 Obsidian 都写成功才算完成;只手动记 markdown 时,写成一份档案即可
- - 资源撮合只建议不执行
- - 需求标签只从明确交流中提取,不推测
- - 这是私人关系档案:只在本地/你自己的知识库里记录,不外传、不用于任何未经对方知情的用途
+ 不要用热情文案掩盖未确认信息、部分写入或自动化失败。