user-profile-keeper について
user-profile-keeperは、ローカルのユーザープロフィールを管理するエージェント非依存のスキルです。プロフィールの更新には根拠と適切な確認を求め、表示、訂正、削除、エクスポートを行えます。
主な機能
- 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 です。ユーザーが別のアイデンティティを明示的に指定した場合に限り、別のユーザーを作成するか、そのユーザーに切り替えてください。
移植性
このスキルは特定のエージェントに依存しません。パスは、この 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>を実行してください。
コンテキスト充足度ゲート
ゲートは1つだけ使用してください。
- 有効なプロファイルがある場合:タスクを段階的な更新として扱ってください。既定では質問票を勧めないでください。
- 有効なプロファイルがない場合:オンボーディング質問票を勧めてください。ユーザーが希望した場合は WebUI を実行してください。ユーザーが断った場合は、現在のタスクを続け、永続的なプロファイル候補については提案を使用してください。
対象となった質問票のモジュール数を数えて、現在のセッションで「十分」かどうかを判断しないでください。運用上の指示から有効なプロファイルを初期化しないでください。
セッション内の推論ポリシー
source_type=inferredは常に保留中の提案になります。--auto-apply-safeによって有効な情報になることはありません。- 年齢層、学歴、分野、役割、経験段階、長期目標など、ユーザーが明示的に自己申告した背景情報は、既定で
sensitivity=privateの保留中の提案になります。 - 推論は、協働や追加質問の改善に限って使用してください。診断、性格ラベル、価値判断、ユーザーの選択を制限することは避けてください。
ワークフロー
- ユーザーを特定します。ユーザーが別の ID を明示的に指定しない限り、
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を使用します。スクリプトは安全性チェックを通過した候補のみを適用し、残りは提案に回します。 - その他の候補はすべて、
auto-applyに頼らず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:エージェントが抽出した候補の JSON から更新するか、提案を作成します。proposal-list/proposal-apply/proposal-reject:保留中の更新を確認して適用します。assertion-add/correct/delete/search/export:手動での CRUD とエクスポートを行います。validate:初期化済みストアの整合性、権限、WAL モード、参照先のない証拠を読み取り専用で検査します。プロフィールが存在しない場合は、初期化せずにその旨を報告します。
validate はプロフィールデータやレジストリを変更しません。WAL モードのストアでは、データベースを読み取り専用で開く際に、SQLite が一時的な -shm 調整ファイルを作成または更新することがあります。
POSIX システムでは、ディレクトリやデータベースのモードが想定外の場合、検証は失敗します。Windows では POSIX のモードビットが信頼できる権限チェックにならないため、permission_ok は null になります。
主な使用例:
# 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
データ構造と JSON 入力形式については、references/profile-schema.md を参照してください。オンボーディングが必要な場合は、references/questionnaire.md を参照してください。
読み取りビュー
clarification_summary:機密性が低く、有効で、ニーズのすり合わせに関連する要約です。$task-clarifierなどのスキルで任意に使用できます。profile_overview:このスキル向けの、機密性の低い有効な概要です。機密性の高い情報、私的な情報、秘密情報、生の証拠テキストは含まれません。full:完全なプロフィールです。ユーザーがプロフィールの作業のためにこのスキルを明示的に呼び出した場合にのみ使用します。pending:保留中の提案です。確定済みのプロフィール情報として扱ってはいけません。
$task-clarifier との境界については、references/task-clarifier-integration.md を参照してください。一般的な使用例については、references/examples.md を参照してください。
安全なデフォルト設定
- 秘密情報、トークン、パスワード、秘密鍵、確認コード、認証情報は保存しません。
- 機密性の高い体験、健康、宗教、政治、財務、アイデンティティ、親密な経歴などに関する内容は、提案または伏字化の経路に送ります。
- 現在のユーザーの発言は、保存済みのプロフィール情報より優先されます。
- プロフィールは、コラボレーションの支援とニーズのすり合わせに関する根拠として扱います。