关于 user-profile-keeper
user-profile-keeper 是用于维护本地用户档案的通用 Agent 技能,并要求档案更新附带证据且经过相应审核。它支持查看、更正、删除和导出档案数据。
主要功能
- 01本地存储用户档案
- 02记录带证据的档案断言
- 03敏感或推断信息转为待审提案
- 04查看和更正档案
- 05搜索、删除与导出
适用场景
- 01记录协作偏好以供后续辅助参考
- 02审核根据会话信息提出的更新
- 03更正或导出已存储的档案信息
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dongshuyan/ compass-skills --skill user-profile-keeper安装后在 Claude Code 中输入/user-profile-keeper确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/examples.mdprivacy-boundary.mdprofile-schema.mdquestionnaire.mdtask-clarifier-integration.mdupdate-policy.mdscripts/onboarding_webui.pyprofile_store.pysmoke_test_onboarding.py详细介绍
用户档案管理器
语言政策
**所有面向用户的输出——档案摘要、提案、导出内容、问题和确认信息——都必须使用用户的语言。**根据用户的消息判断其语言。无法确定时,默认使用中文。技能说明使用英文编写;这不影响面向用户的输出语言。
角色
维护仅存储在本地的用户档案。默认用户为 default。只有当用户明确指定其他身份时,才创建或切换到其他用户。
可移植性
此技能不依赖特定 Agent。根据包含此 SKILL.md 的目录解析路径。使用主机上可用的 Python 命令(python3、python 或 py -3)。这些脚本适用于使用 Python 3 和标准库的 macOS、Windows 和 Linux。
核心约定
- 仅当用户明确调用
$user-profile-keeper时,才使用此技能。 - 默认将档案数据存储在主机用户的本地个人主目录下的
.compass-skills/user-profiles/v1中。使用COMPASS_USER_PROFILE_HOME设置其他本地目录。 - 不得上传档案数据。不得读取浏览器 Cookie、令牌、密码、私钥、验证码或凭据。
- 将存储内容视为本地明文。首次初始化前,告知用户:具有足够权限的本地进程、用户或备份均可读取本地文件。
- 每条档案陈述都必须包含来源类型、置信度、敏感度、状态和证据。避免无法追溯的结论。
- 对无冲突的低敏感度明确事实,可通过
--auto-apply-safe提交;由脚本决定是否将其设为有效。推断得出的、私密的、敏感的、高影响的或有冲突的事实必须作为待处理提案。 - 档案范围包括协作偏好、表达需求的习惯、能力边界、风险确认、隐私边界、防止信息茧房的规则、典型事件,以及用户提供的背景信息,例如年龄范围、教育程度、领域、角色、经验阶段和长期目标。
- 默认将背景信息视为
private。只有当用户明确要求生成低敏感度摘要时,才采用其他处理方式。默认不在跨技能摘要中包含这些信息。 - 随时允许用户查看、更正、撤回、删除和导出档案数据。
- 仅在此技能内读取完整档案。其他技能只能读取低敏感度视图,例如
clarification_summary。 - 当前会话指令、AGENTS 规则、代码库约束和技能操作规则会约束当前任务,但本身不会初始化持久化用户档案。
- 如果用户要求填写入门问卷或使用首次运行 WebUI,请运行
scripts/onboarding_webui.py --user <id>。
上下文充分性门槛
使用以下判断规则:
- 已存在有效档案:将任务视为增量更新。默认不建议填写问卷。
- 不存在有效档案:建议填写入门问卷。如果用户提出要求,则运行 WebUI。如果用户拒绝,则继续当前任务,并将任何可能持久化的档案信息作为提案处理。
不要通过统计已覆盖的问卷模块来判断当前会话是否“足够”。不要根据操作指令初始化有效档案。
会话推断政策
source_type=inferred始终作为待处理提案,绝不能通过--auto-apply-safe设为有效。- 用户明确自述的背景信息,包括年龄范围、教育程度、领域、角色、经验阶段和长期目标,默认作为待处理提案,且
sensitivity=private。 - 仅使用推断来改进协作和后续提问。避免诊断、人格标签、价值判断以及限制用户选择。
工作流
- 识别用户。除非用户明确指定其他身份,否则使用
default。需要时,使用scripts/profile_store.py init --user <id>初始化。 - 使用
scripts/profile_store.py read --user <id> --view clarification_summary读取当前状态。 - 执行 Context Adequacy Gate。对于首次运行的问卷请求,运行
scripts/onboarding_webui.py --user <id>。 - 从当前会话中提取候选更新。将持久的个人资料证据与任务本地指令、AGENTS 规则、仓库约束和技能操作规则区分开。
- 安全写入:
- 对明确由用户自述、低敏感且无冲突的协作事实,使用
update-from-session --auto-apply-safe。脚本只会应用通过安全检查的候选项,其余内容会进入提案。 - 对其他所有候选项,使用
proposal-create或update-from-session创建提案,不依赖自动应用。 - 报告已应用、已提议、已编辑、已跳过的内容,并说明原因。
- 对明确由用户自述、低敏感且无冲突的协作事实,使用
阅读 references/update-policy.md,了解自动应用、待处理项、冲突、更正和首次运行规则。阅读 references/privacy-boundary.md,了解敏感度边界。
存储与工具
主存储由 scripts/profile_store.py 管理:
init:创建注册表、用户目录和 SQLite 数据库。read:读取clarification_summary、profile_overview、full或pending。update-from-session:根据 Agent 提取的候选 JSON 进行更新或创建提案。proposal-list/proposal-apply/proposal-reject:审核并应用待处理的更新。assertion-add/correct/delete/search/export:手动执行 CRUD 和导出。validate:只读检查已初始化存储的完整性、权限、WAL 模式和孤立证据引用。若个人资料缺失,会报告缺失情况,但不会初始化个人资料。
validate 不会更改个人资料数据或注册表。对于 WAL 模式的存储,SQLite 以只读方式打开数据库时,仍可能创建或更新临时的 -shm 协调文件。
在 POSIX 系统上,目录或数据库模式异常会导致验证失败;在 Windows 上,permission_ok 为 null,因为 POSIX 模式位在该系统上不是可靠的权限检查依据。
主要用法示例:
# Initialize (macOS / Linux)
python3 <skill-dir>/scripts/profile_store.py init --user default
# Windows
py -3 <skill-dir>\scripts\profile_store.py init --user default
# Read low-sensitivity summary for task-clarifier
python3 <skill-dir>/scripts/profile_store.py read --user default --view clarification_summary
# Submit a self-reported low-sensitivity candidate (auto-apply-safe path)
python3 <skill-dir>/scripts/profile_store.py update-from-session \
--user default \
--session-summary "User requires confirmation before high-impact actions." \
--candidate-json '[{"category":"risk_boundary","claim":"confirm_high_impact_actions","value":{"summary":"Confirm before delete, overwrite, publish, or install."},"scope":"global","source_type":"self_report","confidence":0.95,"sensitivity":"low","evidence":{"summary":"User explicitly stated this.","context":"current session"}}]' \
--auto-apply-safe
# Submit a private background or inferred candidate as proposal
python3 <skill-dir>/scripts/profile_store.py update-from-session \
--user default \
--session-summary "User filled background in onboarding." \
--candidate-json '[{"category":"education_background","claim":"major_or_specialty","value":{"summary":"User self-reported a field or research direction."},"scope":"global","source_type":"self_report","confidence":0.9,"sensitivity":"private","evidence":{"summary":"Onboarding questionnaire.","context":"local onboarding"}}]' \
--propose
# Review and apply proposals
python3 <skill-dir>/scripts/profile_store.py proposal-list --user default
python3 <skill-dir>/scripts/profile_store.py proposal-apply --user default --proposal-id <id>
# Start onboarding WebUI
python3 <skill-dir>/scripts/onboarding_webui.py --user default
阅读 references/profile-schema.md,了解数据结构和 JSON 输入格式。需要引导流程时,阅读 references/questionnaire.md。
读取视图
clarification_summary:低敏感、有效且与需求对齐相关的摘要,可供$task-clarifier等技能选择性使用。profile_overview:供此技能使用的低敏感/私人有效摘要;不包含敏感、私密、秘密内容及原始证据文本。full:完整个人资料,仅在用户明确调用此技能处理个人资料时使用。pending:待处理提案;绝不可将其视为稳定的个人资料事实。
阅读 references/task-clarifier-integration.md,了解 $task-clarifier 的边界。阅读 references/examples.md,查看典型用法。
安全默认项
- 不存储秘密、令牌、密码、私钥、验证码或凭证。
- 将敏感经历、健康、宗教、政治、财务、身份、亲密关系史及类似内容发送至提案或编辑路径。
- 用户当前的陈述优先于存储的个人资料数据。
- 将个人资料视为协作支持和需求对齐证据。