plugins/life-compass/skills/life-compass/SKILL.md
# Life Compass — Skill ## Purpose Given a life situation, automatically select the 5 most relevant thinker lenses from a pool of 12 historical figures, analyze the situation through those 5 lenses in parallel, then synthesize a compass reading pointing to concrete action for **right now**. **Philosophy:** Different lenses reveal different truths. Where multiple lenses converge = high-signal. Where they conflict = the real choice you face. **Core difference from prism-debate:** - pri
npx skillsauth add jaykim88/claude-ai-engineering plugins/life-compass/skills/life-compassInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Given a life situation, automatically select the 5 most relevant thinker lenses from a pool of 12 historical figures, analyze the situation through those 5 lenses in parallel, then synthesize a compass reading pointing to concrete action for right now.
Philosophy: Different lenses reveal different truths. Where multiple lenses converge = high-signal. Where they conflict = the real choice you face.
Core difference from prism-debate:
User says: life-compass, 라이프 나침반, 지금 무엇을 해야, 삶의 방향, 인생 조언, or describes a life dilemma needing directional clarity.
Available subagent types for Step 3:
| subagent_type | Lens | Strength Area |
|---|---|---|
| marcus-aurelius | Stoic — control, virtue, present duty | Career, uncertainty, external pressure |
| carl-jung | Depth psychology — shadow, unconscious | Relationships, repeating patterns, inner conflict |
| viktor-frankl | Logotherapy — meaning in suffering | Loss, crisis, loss of direction |
| charlie-munger | Mental models — inversion, cognitive bias | Decision-making, rationality |
| machiavelli | Realism — power dynamics, incentives | Organizations, negotiation, reality check |
| nietzsche | Self-overcoming — value creation | Value conflicts, identity, change |
| aristotle | Virtue ethics — practical wisdom (phronesis) | Work ethics, habits, flourishing |
| alfred-adler | Individual psychology — hidden goals | Relationships, inferiority, behavioral goals |
| confucius | Role ethics — relational duty | Family, social roles, responsibilities |
| richard-feynman | First principles — simplify, question assumptions | Complexity reduction, problem reframing |
| hannah-arendt | Thinking & public life — moral courage | Moral choices, group pressure, courage |
| carl-sagan | Cosmic perspective — long-term, rational skepticism | Obsession, short vs long term, perspective |
Parse user message for an explicit situation.
If explicit situation provided (e.g., life-compass: {situation} or 라이프 나침반: {situation}):
situation from the messagehas_intake = falseIf no situation provided (bare life-compass or 라이프 나침반):
Ask the user to describe their situation via AskUserQuestion:
Q1 [header: "현재 상황"] free text:
"어떤 상황에 있으신가요? 자유롭게 설명해주세요. 맥락이 많을수록 더 정확한 렌즈를 선택합니다."
Q2 [header: "핵심 긴장"] single select:
"이 상황에서 가장 핵심적인 긴장은 무엇인가요?"
options:
- "가치 충돌" — 내가 중요하게 여기는 것들이 서로 부딪힌다
- "행동 vs 기다림" — 지금 움직여야 할지, 아직인지 모르겠다
- "관계 갈등" — 사람과의 관계가 복잡하게 얽혀 있다
- "방향 전환" — 현재 경로를 바꿔야 할 것 같다
Q3 [header: "바라는 것"] free text:
"이 상황에서 지금 가장 원하는 것은 무엇인가요? (명확성? 용기? 확신?)"
Build situation from Q1 answer. Store Q2 as tension_type, Q3 as desired_outcome.
Set has_intake = true
Display: 🔭 상황을 분석하여 최적의 5개 렌즈를 선택합니다...
Run lens-selector agent with the following prompt:
Analyze this life situation and select the 5 most illuminating thinker lenses from the pool of 12.
SITUATION:
{situation}
{if has_intake:
CORE TENSION: {tension_type}
DESIRED OUTCOME: {desired_outcome}
}
THINKER POOL (12):
- marcus-aurelius: Stoic — control, virtue, present duty | Best for: career, uncertainty, external pressure
- carl-jung: Depth psychology — shadow, unconscious, individuation | Best for: relationships, repeating patterns, inner conflict
- viktor-frankl: Logotherapy — meaning in suffering, attitude freedom | Best for: loss, crisis, loss of direction
- charlie-munger: Mental models — inversion, cognitive bias | Best for: decision-making, rationality, complexity
- machiavelli: Realism — power dynamics, incentives, what's actually happening | Best for: organizations, negotiation, reality check
- nietzsche: Self-overcoming — value creation, will to power, amor fati | Best for: value conflicts, identity, major change
- aristotle: Virtue ethics — practical wisdom (phronesis), eudaimonia | Best for: work ethics, habits, long-term flourishing
- alfred-adler: Individual psychology — hidden goals, inferiority, social interest | Best for: relationship patterns, motivation, compensation
- confucius: Role ethics — relational duty, self-cultivation, propriety | Best for: family, social roles, responsibilities
- richard-feynman: First principles — simplify, question assumptions, actual knowledge | Best for: complexity reduction, problem reframing
- hannah-arendt: Thinking & public life — moral courage, banality of non-thinking | Best for: moral choices, group pressure, courage to act
- carl-sagan: Cosmic perspective — long-term view, rational skepticism | Best for: obsession, short vs long term, perspective restoration
SELECTION RULES:
1. Select exactly 5 thinkers
2. Ensure genuinely non-overlapping perspectives (no two similar lenses)
3. Include at least 1 inner (psychological/existential) lens and 1 outer (reality/strategic) lens
4. Prioritize thinkers whose specific frameworks most directly illuminate THIS situation
5. Explain briefly why each was chosen and why the 7 excluded were not the right fit
Output exactly in this format:
상황 유형: [1-line classification]
선택된 렌즈:
1. [thinker-id] — [reason: why this lens reveals something unique about this situation]
2. [thinker-id] — [reason]
3. [thinker-id] — [reason]
4. [thinker-id] — [reason]
5. [thinker-id] — [reason]
제외된 렌즈:
- [thinker-id]: [reason not selected]
(list all 7 excluded)
Parse lens-selector output to extract the 5 thinker IDs as selected_thinkers array.
Display:
🔭 선택된 5개 렌즈:
1. [Thinker 1] — [reason]
2. [Thinker 2] — [reason]
3. [Thinker 3] — [reason]
4. [Thinker 4] — [reason]
5. [Thinker 5] — [reason]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🧭 5개 렌즈로 상황을 분석합니다...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Launch all 5 selected thinkers simultaneously in a single response block (true parallelism — do NOT launch them sequentially).
For each thinker_id in selected_thinkers, run the corresponding agent with:
SITUATION:
{situation}
{if has_intake:
CORE TENSION: {tension_type}
DESIRED OUTCOME: {desired_outcome}
}
Apply your specific philosophical lens to this situation.
Follow your Output Format exactly.
Be concrete. Avoid generic advice.
Store all 5 outputs as thinker_outputs dictionary keyed by thinker_id.
Display each thinker's analysis as it arrives. Use the thinker's name as the section header.
Display: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Display: 🧭 나침반 판독 중...
Display: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Run compass-guide agent with:
Original situation: {situation}
Thinker analyses:
=== {selected_thinkers[0]} ===
{thinker_outputs[selected_thinkers[0]]}
=== {selected_thinkers[1]} ===
{thinker_outputs[selected_thinkers[1]]}
=== {selected_thinkers[2]} ===
{thinker_outputs[selected_thinkers[2]]}
=== {selected_thinkers[3]} ===
{thinker_outputs[selected_thinkers[3]]}
=== {selected_thinkers[4]} ===
{thinker_outputs[selected_thinkers[4]]}
Synthesize into a compass reading. Find convergence (where 2+ lenses agree = high signal).
Find divergence (where lenses conflict = the real choice the person faces).
Extract one concrete action for this week. Extract one sharp self-question.
Display the full compass-guide output as the final compass reading.
The skill ends here. No save prompt. No follow-up questions required.
development
Design webhooks correctly on both sides — sending (HMAC signing, retries with backoff, at-least-once) and receiving (verify signature on raw body, enqueue + 200 fast, dedupe on event id). Use when adding webhook delivery or consuming a provider's webhooks. Not for internal service-to-service events (use async-messaging) or general outbound-call retry policy (use resilience-patterns).
testing
Use transactions and isolation levels correctly — keep them short, no network calls inside, explicit isolation, retry on serialization conflicts, and choose optimistic vs pessimistic locking. Use when a write spans multiple tables, when concurrent updates corrupt data, or when designing money/inventory flows. Not for cross-service event delivery (use async-messaging Outbox) or schema-level constraints (use schema-design).
development
Backend testing pyramid — unit for pure logic, integration against a real DB (Testcontainers), and consumer-driven contract testing (Pact) for service boundaries. Use before a feature, after a bug fix, or when services break each other on deploy. Not for load testing (use performance-profiling) or security testing (use backend-security-audit).
data-ai
Design a relational schema — normalize to 3NF then denormalize with justification, choose the right Postgres index type per data shape, enforce constraints at the DB. Use when modeling a new domain, when queries are slow, or before a migration. Not for diagnosing slow queries (use query-optimization) or shipping the change without downtime (use migration-strategy).