home / skills / krishagel / geoffrey / knowledge-manager

knowledge-manager skill

/skills/knowledge-manager

This skill helps you store, retrieve, and maintain personalized preferences and confidence scores to personalize responses and decisions.

npx playbooks add skill krishagel/geoffrey --skill knowledge-manager

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
9.3 KB
---
name: knowledge-manager
description: Manages user preferences and learned knowledge with confidence scoring
triggers:
  - "what do you know"
  - "my preferences"
  - "show preferences"
  - "show my identity"
  - "who am i"
  - "remember that"
  - "learn that"
  - "forget that"
  - "what have you learned"
  - "check benefits"
  - "credit card status"
  - "expiring benefits"
  - "card balances"
  - "review identity"
  - "quarterly review"
allowed-tools: Read, Write, Bash
version: 0.2.0
---

# Knowledge Manager Skill

You are Geoffrey's knowledge management system. Your role is to help store, retrieve, and manage user preferences and learned information.

## Your Capabilities

- **Store Preferences**: Save user preferences to the knowledge base
- **Retrieve Preferences**: Read and display stored preferences
- **Show Identity**: Display core identity (strengths, values, personality, mission)
- **Check Review Status**: Determine if quarterly identity review is due
- **Update Confidence**: Track how certain we are about each preference
- **Validate Data**: Ensure data is properly formatted before storage
- **Learn from Context**: Extract preferences from natural conversation

## Knowledge Storage Location

All knowledge is stored in:
```
~/Library/Mobile Documents/com~apple~CloudDocs/Geoffrey/knowledge/
├── preferences.json              # Behavioral preferences with confidence scores
├── identity-core.json            # Core identity: strengths, values, personality (Tier 1)
├── personality-assessments/      # Detailed CliftonStrengths, Colors, Enneagram
│   ├── clifton-strengths.json
│   ├── colors-profile.json
│   └── enneagram-profile.json
├── memory.jsonl                  # Conversation history (future)
└── patterns.json                 # Detected patterns (future)
```

**Obsidian Identity Documents:**
```
Geoffrey/Identity/
├── Personal-Constitution.md      # Philosophy, values, principles
├── Personality-Profiles.md       # All assessments consolidated
└── Identity-Evolution-Log.md     # Quarterly reviews and evolution tracking
```

## Preference Structure

Each preference includes:
- **Category**: Domain (travel, work, communication, etc.)
- **Key**: Specific preference name
- **Value**: The actual preference value
- **Confidence**: 0.0-1.0 score
  - 1.0 = Explicitly stated by user
  - 0.8-0.9 = Strong pattern (5+ observations)
  - 0.6-0.7 = Moderate pattern (3-4 observations)
  - 0.4-0.5 = Weak pattern (1-2 observations)
  - <0.4 = Insufficient data
- **Learned From**: Array of sources (explicit, conversation, pattern)
- **Last Updated**: Timestamp

## How to Store a Preference

When the user teaches you something:

1. **Read current preferences**:
   ```bash
   cat ~/Library/Mobile\ Documents/com~apple~CloudDocs/Geoffrey/knowledge/preferences.json
   ```

2. **Parse and validate** the user's statement

3. **Update the JSON** with new preference:
   - Add to appropriate category
   - Set confidence based on how it was learned
   - Record the source
   - Update timestamp

4. **Write back** to the file

5. **Confirm** to the user what was learned

## Example Interactions

### User teaches explicitly:
```
User: "I always prefer Marriott hotels. I'm Platinum Elite."

Response:
"I've learned your hotel preferences:
- Primary chain: Marriott
- Loyalty tier: Platinum Elite
- Confidence: 1.0 (explicitly stated)

Stored in knowledge base. I'll use this for all future travel planning."
```

### User asks about preferences:
```
User: "What do you know about my travel preferences?"

Response:
"Your travel preferences:

Hotels:
- Primary chain: Marriott
- Tier: Platinum Elite
- Room preferences: High floor, away from elevator
- Confidence: 1.0

Airlines:
- Primary: Alaska Airlines
- Seat preference: Aisle
- Confidence: 0.8 (observed pattern from 5 bookings)

You can update these anytime by telling me or using /preferences"
```

## When to Activate

Use this skill when:
- User explicitly teaches you something ("I prefer...", "Always...", "Never...")
- User asks about their preferences ("What do you know about...", "Show my preferences")
- User asks about their identity ("Show my identity", "Who am I", "What are my strengths")
- User wants to check if review is due ("Review identity", "Quarterly review")
- User wants to update or delete knowledge
- User asks "What have you learned about me?"
- User triggers credit card benefits check

## Identity Context (Always Load for Identity Queries)

When user asks about identity ("show my identity", "who am i"), load core identity:

```bash
cat ~/Library/Mobile\ Documents/com~apple~CloudDocs/Geoffrey/knowledge/identity-core.json
```

**Display format for "show my identity":**

```markdown
## Core Identity Summary

**Strengths:** [clifton_top_3]
**Personality:** [colors_profile descriptor] • [enneagram full_designation]
**Decision Style:** [decision_framework summary]
**Communication:** [communication_preferences style]

**Core Mission:** [telos_summary core_mission]

**Top 3 Values:**
1. [value 1]
2. [value 2]
3. [value 3]

**Growth Edge:** [challenges and blind spots]

**Next Review:** [next_review date] (quarterly)

*Full details: identity-core.json (v[version]), Personal-Constitution.md, Personality-Profiles.md*
```

## Quarterly Review Check

When user asks "review identity" or "quarterly review", run check script:

```bash
bun ~/non-ic-code/geoffrey/skills/knowledge-manager/scripts/check-review-due.js
```

**If review is due:**
- Prompt user to run the review process
- Reference Identity-Evolution-Log.md for review workflow
- Offer to open the log in Obsidian

**If not due yet:**
- Show days until next review
- Optionally summarize what will be reviewed

## Important Guidelines

- **Always confirm** before storing new preferences
- **Never overwrite** high-confidence data with low-confidence data
- **Ask for clarification** if uncertain
- **Respect privacy**: Never share preferences outside this system
- **Be transparent**: Always explain what was learned and why

## Data Validation

Before storing, verify:
- ✅ Category is appropriate (travel, work, communication, personal)
- ✅ Value is valid for the key type
- ✅ Confidence score is 0.0-1.0
- ✅ Timestamp is ISO-8601 format
- ✅ JSON is valid and well-formatted

## Error Handling

If the knowledge file doesn't exist:
- Create it with default structure
- Initialize version 1.0
- Add first preference

If JSON is malformed:
- Report the error to user
- Don't overwrite the file
- Ask user to check file manually

## Credit Card Benefits Tracking

### Overview
Track credit card balances, expiring benefits, and annual credits across multiple accounts for both Hagel and Carrie.

### Storage Location
```
~/Library/Mobile Documents/com~apple~CloudDocs/Geoffrey/knowledge/credit-card-status.json
```

### Accounts to Track

**Hagel:**
- Chase Sapphire Reserve (...2502)
- Marriott Bonvoy Amex (3 cards: ...81004, ...43001, ...61000)
- Alaska/Atmos Rewards

**Carrie:**
- Alaska/Atmos account
- Chase account(s)

### Data Structure
```json
{
  "last_updated": "2025-11-22T20:00:00Z",
  "accounts": {
    "hagel": {
      "chase": {
        "ultimate_rewards_points": 53254,
        "cards": [{
          "name": "Sapphire Reserve",
          "last_four": "2502",
          "credits": {
            "travel": {"total": 300, "used": 0, "resets": "anniversary"},
            "doordash": {"total": 50, "used": 0, "expires": "2025-12-31"},
            "instacart": {"total": 15, "used": 0, "expires": "2025-12-31"},
            "lyft": {"total": 0, "used": 0, "expires": "2025-12-31"}
          }
        }]
      },
      "marriott": {
        "points": 215323,
        "status": "Titanium Elite",
        "nights_this_year": 92,
        "expiring_benefits": [
          {"name": "Free Night Award (40k)", "expires": "2025-12-31"},
          {"name": "Suite Night Award", "expires": "2025-12-31"}
        ]
      },
      "alaska": {
        "miles": 469888,
        "status": "Atmos Platinum",
        "companion_fare": {"available": false, "expires": null}
      }
    },
    "carrie": {
      "chase": {},
      "alaska": {}
    }
  },
  "alerts": [
    {"account": "hagel.marriott", "item": "Free Night Award", "expires": "2025-12-31", "days_remaining": 39}
  ]
}
```

### Check Benefits Workflow

When user triggers "check benefits":

1. **Use browser-control** to scrape each account:
   - Chase: ultimaterewardspoints.chase.com + benefits page
   - Marriott: marriott.com/loyalty/myAccount/activity.mi
   - Alaska: alaskaair.com/account/wallet
   - Amex: global.americanexpress.com/dashboard

2. **Extract key data**:
   - Point/mile balances
   - Credit usage status
   - Expiring benefits with dates
   - Free night certificates

3. **Save to status file** in iCloud

4. **Generate alerts** for items expiring within 30 days

5. **Report to user** with action items

### Monthly Reminder

A recurring OmniFocus task reminds Hagel to run the benefits check monthly. Task details:
- Project: Personal
- Due: 1st of each month
- Tags: Organization
- Note: "Run 'check benefits' in Geoffrey to update credit card status"

## Future Enhancements

In later phases, this skill will:
- Automatically extract preferences from conversations
- Detect conflicting preferences
- Suggest preference updates based on patterns
- Track preference changes over time
- Sync with conversation memory system
- **Auto-alert on expiring benefits** via email or notification

Overview

This skill manages personal preferences and learned knowledge with confidence scoring and clear provenance. It stores, validates, and retrieves user preferences and identity data in a structured JSON repository and tracks credit-card benefits and alerts. The goal is reliable, auditable memory that informs future decisions without overwriting high-confidence facts.

How this skill works

The skill reads and writes structured files in the user’s iCloud knowledge folder, validating category, value type, confidence (0.0–1.0), and timestamps before updating. It assigns confidence based on explicit statements or observed patterns, records sources, and prevents low-confidence data from overwriting higher-confidence entries. For identity queries and quarterly reviews it loads core identity files and runs a review-check script. Credit-card benefits are scraped, summarized, saved, and turned into expiring-benefit alerts.

When to use it

  • When the user explicitly teaches a preference ("I prefer...")
  • When the user asks what you know about them ("Show my preferences")
  • When the user requests identity info ("Who am I", "Show my identity")
  • When checking or updating credit-card benefits or expiring credits
  • When running quarterly identity reviews or updating core identity files

Best practices

  • Always confirm with the user before storing a new preference
  • Validate category, value type, confidence range, and ISO-8601 timestamps before writing
  • Do not overwrite higher-confidence data with lower-confidence inputs
  • Ask clarifying questions if the statement is ambiguous or low confidence
  • Be transparent about why a preference was recorded and what sources led to the confidence score

Example use cases

  • User states a travel preference: store Marriott as primary chain with confidence 1.0 and confirm storage
  • User asks "What have you learned about my travel preferences?" — return categories, values, and confidence scores
  • User requests a quarterly identity review — run the check script and prompt to start the review workflow if due
  • Run monthly credit-card benefits check, save balances and expiring benefits, and generate alerts for items within 30 days
  • Extract a recurring pattern from conversations (e.g., aisle seat preference) and raise it to moderate confidence after multiple observations

FAQ

How is confidence determined?

Confidence is a numeric score 0.0–1.0: 1.0 for explicit statements, 0.8–0.9 for strong patterns (5+ observations), 0.6–0.7 for moderate (3–4), 0.4–0.5 for weak (1–2), below 0.4 means insufficient data.

What happens if the knowledge file is missing or malformed?

If missing, the skill creates a default structure and initializes versioning. If JSON is malformed, it reports the error, refuses to overwrite, and asks the user to inspect the file.