Install
openclaw skills install identity-compassHyper-personalized decision compass that extracts your values and choices as vectors from everyday conversations, computes your true life direction (H vector) and alignment score (M) using physics-inspired magnetization + Bayesian updates, and visualizes everything as an interactive decision map. No forms, no questionnaires — just talk. Use when facing career moves, life decisions, identity questions ("who am I?", "is this right for me?"), or comparing opportunities. Includes dialectical dialogue, decision simulation, and Obsidian vault integration for persistent memory.
openclaw skills install identity-compass대화에서 의사결정 벡터를 추출하고, 스핀/자기장 물리 모델 + 베이지안 업데이트로 **H 벡터(목표 방향)**와 **M(정렬도)**를 계산하는 초개인화 나침반.
직접 "목표가 뭐예요?"라고 묻지 않는다. 모순, 감정 반응, 반복 주제에서 역추론한다.
"몇 가지 질문을 드릴 건데, 언제든 '그만', '다음으로', '충분해'라고 하시면 거기서 멈추고 바로 지금까지 파악된 내용으로 정렬도를 계산해드릴게요."
7개 핵심 차원 상세 프로토콜: references/dialectical-protocol.md
H:
core_values: ["자율적 사고", "깊이 있는 연구"] # 반복 등장 가치
anti_values: ["단순 실행", "타인 시선 의존"] # 거부 반응 보인 것
direction: [0.85, 0.70, 0.90] # 3D 단위벡터
domain_weights: # 삶의 영역별 중요도
career: 0.8
family: 0.6
health: 0.5
finance: 0.4
growth: 0.7
confidence: 0.65 # 0~1, 대화 쌓일수록 상승
one_liner: "" # 본질 포착 한 줄 (아래 참조)
last_updated: "2026-03-22"
confidence < 0.4이면 정렬도 계산 전에 대화를 더 진행한다.
가치 나열이 아닌, 그 사람의 본질을 포착하는 문장 하나.
매 대화에서 의사결정/가치 판단 관찰 시 추출:
what: "무엇을 선택/거부/선호했는가"
why_surface: "사용자가 말한 이유"
why_essence: "LLM이 판단한 근본 이유"
direction: [x, y, z] # 3D 단위벡터
intensity: 0.0-1.0 # 반응 강도
confidence: 0.0-1.0 # 추출 확신도
weight: 1-10 # 구슬 가중치 (아래 기준표)
domain: "career" # 삶의 영역
timestamp: "2026-03-22"
| 기준 | 낮음 (1-3) | 중간 (4-6) | 높음 (7-10) |
|---|---|---|---|
| 재무적 변화 | 커피값 | 월급 10% | 집/직장/투자 |
| 시간적 구속 | 하루 | 수개월 | 수년 이상 |
| 비가역성 | 쉽게 취소 | 번복 비용 있음 | 되돌리기 매우 어려움 |
| 감정 강도 | 무덤덤 | 불안/기대 | 강한 두려움/흥분 |
| 언급 빈도 | 처음 나옴 | 2-3회 언급 | 반복적으로 언급 |
decay = 0.95^(days/30) (월 5%)posterior ∝ prior × likelihood
각 차원을 Beta(α, β) 분포로 모델링. 상세: references/bayesian-update.md
alignment_i = cos(v_i, H) - overlap(v_i, anti_values)
M = Σ(w_i × alignment_i) / Σ(w_i)
M 해석:
사용자가 새 선택을 고민할 때:
"[선택지 A]를 가상으로 추가했을 때, 전체 정렬도가 [현재 M] → [M+A]로 변합니다. [선택지 B]는 [M+B]가 됩니다. [A/B]가 [구체적 가치들]과 더 잘 맞습니다. 다만 [주의할 점]은 지켜봐야 할 것 같아요."
모든 대화에서 상시 작동. 사용자는 인식하지 못한다.
| 신호 유형 | 예시 발화 | 해석 |
|---|---|---|
| 부러움 | "그 사람처럼 살고 싶다" | 언급된 삶의 방식 → H 후보 |
| 피로/거부 | "이건 정말 못 하겠어" | 해당 가치 → anti_values 강화 |
| 몰입 | "시간 가는 줄 몰랐어" | 해당 활동 → core_values 강화 |
| 반복 언급 | 같은 주제 3회 이상 | 가중치 높은 구슬 후보 |
| 감정 극단 | 강한 불안·흥분·후회 | 해당 구슬 가중치 상향 |
| 모순 발화 | 이전 발언과 충돌 | H confidence 하향, 재탐색 필요 |
저장: obsidian-vault/compass/signals/raw_signals.md에 조용히 누적.
신호 5개 이상 누적 시 /update를 자연스럽게 제안:
"최근 대화에서 몇 가지 패턴이 보이던데, 한번 나침반 업데이트해볼까요?"
scripts/visualize_spins.html을 렌더링. 사양:
세션 대화형. 순서:
축적된 벡터의 궁극적 방향 + H 한 줄 요약 + M 수치
벡터 기반 강점/서사 생성 → obsidian-resume-brain 연동
클러스터에서 핵심 강점 3-5개 추출, 구체적 사례와 함께 서사화
회사 JD/문화를 벡터화 → 사용자 벡터와 코사인 유사도 계산
→ company-fit-research 연동
현재 선택 방향과 H의 각도 계산 + Phase 3 가상 구슬 시뮬레이션
전체 정렬도 + 클러스터별 분석 + 시각화
obsidian-vault/compass/
prior/ ← Phase 1 토론 결과
vectors/ ← 개별 구슬(벡터) 노트
clusters/ ← 상위 방향성 클러스터
signals/ ← 백그라운드 감지 신호
raw_signals.md ← 누적 신호 로그
magnetization.md ← H + M + posterior
timeline.md ← 방향성 변화 히스토리
_MOC.md ← compass 전체 조망
---
type: vector
date: 2026-03-19
what: "execution-heavy 거부"
why_surface: "단순 실행 역할은 재미없다"
why_essence: "자율적 사고 > 지시 수행"
direction: [0.8, -0.6, 0.3]
intensity: 0.9
confidence: 0.85
weight: 7
domain: career
cluster: "[[autonomy-first]]"
tags: [career, preference, anti]
---
| 스크립트 | 용도 |
|---|---|
scripts/export_vectors.py | vault 벡터 노트 → vectors.json |
scripts/calculate_magnetization.py | 자화도 계산 → magnetization.json + .md |
scripts/visualize_2d.html | 2D 인터랙티브 시각화 (다크 테크 테마) |
에이전트는 벡터를 추출할 때마다 아래 전체 파이프라인을 실행해야 한다. 수동 개입 없이, 대화 속에서 자동으로 완료되어야 함.
1. 시그널 감지 → 벡터 추출
2. Obsidian vault에 벡터 노트 생성/업데이트
3. vectors.json 업데이트 (전체 벡터 목록)
4. magnetization.json 재계산 (H, M, clusters)
5. compass_data.json 자동 생성 ← ⚠️ 이 단계를 빠뜨리지 말 것!
vectors.json + magnetization.json → compass_data.json 변환.
시각화(visualize_2d.html)가 이 파일을 로드하므로 반드시 갱신.
생성 규칙:
# vectors.json의 각 벡터를 identity/opportunities로 분류
identity_beads = [] # domain이 career/growth/life이고 기회(회사)가 아닌 것
opportunity_beads = [] # 회사/포지션 관련 벡터
for v in vectors:
bead = {
"what": v["what"],
"why": v["why_essence"],
"dir": v["direction"],
"w": v["weight"],
"cl": classify_color(v), # 아래 기준 참조
"status": v.get("status", "")
}
if is_opportunity(v):
bead["match"] = cosine_similarity(v["direction"], H["dir"])
opportunity_beads.append(bead)
else:
identity_beads.append(bead)
compass_data = {
"identity": identity_beads,
"opportunities": opportunity_beads,
"H": {"dir": magnetization["magnetization_vector"], "mag": magnetization["magnetization_magnitude"]},
"oneLiner": magnetization.get("H_one_liner", ""),
"clusters": [
{"name": name.upper(), "m": c["magnetization"], "color": cluster_colors[name]}
for name, c in magnetization["clusters"].items()
]
}
색상 분류 기준 (cl 필드):
| cl 값 | 조건 |
|---|---|
identity | 개인 정체성/가치 벡터 (회사가 아님) |
hot | 기회 + cosine match ≥ 0.85 |
active | 기회 + 이미 지원/제출 완료 |
warm | 기회 + match 0.65~0.85 |
tension | 기회 + H와 방향 충돌 있음 (match < 0.6이면서 weight ≥ 6) |
cool | 기회 + match 0.5~0.65 |
avoid | 기회 + match < 0.5 또는 anti-value 충돌 |
클러스터 색상 기본값:
{
"autonomy-first": "#00c8ff",
"depth-builder": "#a855f7",
"innovation-drive": "#00ff88"
}
모든 JSON 파일은 scripts/ 디렉토리에 저장:
scripts/
├── vectors.json # 전체 벡터 목록
├── magnetization.json # H + M + clusters
├── compass_data.json # 시각화용 (자동 생성)
├── sample_data.json # 데모용 (수정 금지)
└── visualize_2d.html # 시각화 UI
⚠️ 에이전트 필수 행동: 벡터를 추가/수정할 때마다 Step 3→4→5를 반드시 순차 실행. compass_data.json이 없거나 오래되면 시각화가 빈 화면 또는 구버전을 보여준다.