home-dreaming 定时任务的 Observe 步骤,仅由该任务调用。
57
66%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./plugins/skills/miloco-home-observe/SKILL.md从感知记忆和交互记忆中提取值得沉淀的家庭知识(成员的习惯、偏好、健康、画像,以及家居环境),累积到家庭档案。
仅在 miloco-home-dreaming cron 流程中激活,不单独使用。
读到一条观察后,按这条决策链处理:① 值不值得记 → ② 归哪一类 → ③ 和已有知识什么关系 → 落命令。下面依次展开。
⚠️ 两条绝对红线,违反即错误,优先级高于一切效率考量:
- 禁止重复创建同一条目:同一条结论全程只能存在一个候选。写入前必须先
list,语义相同的走 merge;即使在同一次--ops批次内,也绝不允许为同一条结论生成多个add(这是最常见的重复来源)。- 禁止编造 / 脑补人物身份:人物身份只能照搬记忆里明确写出的。记忆说"陌生人 / 未识别 / 访客 / 某个人",就绝不能改写成"主人 / 爸爸 / 妈妈"等任何具名成员。存疑宁可不记,也不许猜。
memory/YYYY-MM-DD-miloco-perception.mdmemory/YYYY-MM-DD.mdmiloco-cli home-profile list --target both 查看已有知识(写入前的强制前置步骤,不 list 不写)evidence_log(完整证据列表)判断与已有条目的关系list 结果、以及彼此之间两两比对,语义相同的合并为一个操作,确保同一条结论只对应一个 add 或 merge(详见 ③)miloco-cli home-profile candidate-write 或 miloco-cli home-profile profile-write 操作注意:步骤 1、2 中的记忆文件在当天没有相关记录时不会生成。读取失败(文件不存在)时直接跳过该文件,继续处理剩余可用的记忆源。不要重复尝试读取同一个不存在的文件。只要至少有一个记忆源有内容即可继续后续步骤;若所有文件均不存在,则本次 Observe 无输入可处理,直接结束。
家庭档案只有一个用途:让 agent 借它读懂每个成员的生活习惯,从而把控设备、调环境、提醒关怀做得更精准、更合各人心意。所有提取都服务于此,唯一标尺是——
核心判断:知道这条,未来能让某次「控设备 / 调环境 / 提醒关怀」更准、更贴某个具体成员的心意吗? 能 → 记;只是"识别到了"却不会改变任何未来动作 → 丢。
感知识别结果天然嘈杂,大多数没有沉淀价值,宁缺毋滥——记一条无用信息,未来只会干扰判断。
值得记(每类都能落到具体行为上):
| 信息 | 未来用它做什么 | 例子 |
|---|---|---|
| 偏好 | 调环境到成员舒适态 | 爸爸喜欢 24°C 制冷、奶奶要暖光 |
| 作息 / 习惯 | 把提醒、自动化卡在对的时机 | 工作日 7:30 出门、每晚 9 点吃药 |
| 健康 / 禁忌 | 关怀与安全的硬约束 | 花粉过敏、高血压、行动不便 |
| 画像 / 构成 | 弄清"家里有谁、谁要被照顾" | 谁是主厨、有个小孩豆豆、养了狗旺财 |
| 空间 / 设备 | 让控制落到对的设备、给对的预期 | 主卧出风口对床头、客厅空调达温慢 |
不值得记(记了也用不上,直接丢):
置信度怎么给(已判定值得记的,按性质决定单次能否入候选——候选区是"证据累积区",低置信不等于丢弃):
type 分类:
| type | 含义 | 示例 |
|---|---|---|
| member_persona | 成员画像(家庭角色、身份、外貌) | "爸爸是家里的主厨" |
| member_health | 体质健康(过敏、禁忌、慢性病) | "妈妈对花粉过敏" |
| member_routine | 日常习惯(作息、出行规律) | "爸爸通常 7:30 出门上班" |
| member_entertain | 娱乐习惯(观影、游戏、音乐) | "妈妈睡前听白噪音" |
| member_preference | 个人偏好(温度、光线、饮食) | "爸爸喜欢 24°C 制冷" |
| family | 全家共同遵守的规则/约定(仅规则,非家庭构成信息) | "22:00 后全屋静音"、"访客来访自动开走廊灯" |
| space | 空间环境(户型、朝向、动线) | "主卧空调出风口对床头" |
| device | 设备经验(设备使用经验) | "客厅空调制冷需 5 分钟达温" |
subject 命名规则:
subject_id 优先绑定身份库 person_id(从 miloco-cli identity member list 查得,保证映射唯一);无法确定 person_id 时退回 subject_name = 成员名(如"爸爸")。多成员共同适用时 subject_name = "shared",subject_id 留空。subject_name 固定为 "shared"(家庭规则天然多主体)。subject_name = 空间名或设备名(如"主卧"、"小米空调"),通用信息 subject_name = "general"。身份判定红线(严禁编造,最高优先级):
subject 的人物身份只能照搬记忆里明确写出的——记忆说是谁就是谁,记忆没说就是没说,不允许任何形式的推测、脑补、"合理推断"。
member_persona、以未识别人物为主体如实记录(subject_name="未识别",不要臆断成"访客"等具体身份,未必是访客;subject_id 留空),绝不冒名任何成员。宠物与家庭构成归类(避免误入 family):
family 仅指"全家共同遵守的规则/约定",不是任何家庭相关信息的兜底类。member_* 类型,subject_name = 宠物名(如"旺财");subject_id 先查开关 miloco-cli config get features.pet_recognition --value-only(输出 True / False)分流——关 → 一律留空(即使花名册里有同名也别填 pet_id:填了会被软关闭隐藏;留空即纯家庭事实、一直可见);开 → 该宠物已在宠物花名册(miloco-cli pet list)则填其 pet_id,否则留空(commit 时按名收敛回 pet_id)。观察路径不主动建花名册,登记由用户在 web / 对话中确认。
member_persona,subject_name="旺财"member_routine,subject_name="旺财"member_persona(如"一只橘白相间的短毛猫,左耳尖有缺口"),供感知在画面中区分与称呼。member_persona,subject_name 为对应成员;全家整体构成事实可用 subject_name="shared"。先和 list 拿到的已有条目比对,决定怎么写:
| 情况 | 操作 |
|---|---|
| 全新知识 | candidate-write op add |
| 与候选区已有相同 | candidate-write op merge(id) |
| 与正式区已有相同 | profile-write op merge(id)(仅+证据) |
| 与已有矛盾 | candidate-write op add(独立竞争) |
list 结果里找同主体 + 同维度 + 相似结论的条目——有就 merge,没有才 add。且同一条结论全程只能存在一个候选:
--ops 批次内也要自查——不要为同一条结论生成多个 add(这是重复条目最常见的来源,例如同一条净化器规则被 add 三次)。add(evidence_log 放多条),或"一个 add + 后续 merge",绝不 add 多次。list 返回的该条 evidence_log——同一观察事件(同日期 + 同来源/现象)若已在其中,不要重复 add/merge,否则会虚增 evidence_count / confidence。只有日志里没有的新观察才 add/merge。批量候选写入(一次提交多条,提高效率)。每个 op 必须带 op(add / merge)和 date(观察日期 YYYY-MM-DD,必填,传入对应记忆的日期):
miloco-cli home-profile candidate-write --ops '[
{
"op": "add",
"date": "2026-05-29",
"entry": {
"type": "member_routine",
"subject_id": "<person_id 或留空>",
"subject_name": "爸爸",
"content": "通常 7:30 出门上班",
"confidence": 0.8,
"source": "observed",
"evidence_log": ["2026-05-29 07:31: 玄关相机识别到爸爸出门"]
}
}
]'merge 到已有候选(仅 +证据):{"op": "merge", "id": "<candidate_id>", "date": "2026-05-29", "evidence_log": "2026-05-29 07:35: 玄关相机再次识别到爸爸出门", "confidence_delta": 0.1}
merge 到正式区(仅 +证据):{"op":"merge","id":"<profile_id>","date":"2026-05-29","evidence_log":"2026-05-29 07:35: 玄关相机再次识别到爸爸出门"}
多个条目需要操作时,优先在单次
--ops中批量提交,提高效率。
095782d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.