| name | profile-management |
| description | Interactive profile setup and management. Use when user wants to view, update, or set up their profile. Auto-triggers on phrases like "min profil", "uppdatera profil", "ändra profil", "profile setup", "inställningar", "preferences". |
| allowed-tools | Bash, Read, Write |
Profile Management Skill
Purpose
Provides interactive profile management including:
- New profile setup wizard for first-time users
- Profile viewing and section exploration
- Interactive updates through conversation
- Profile gap analysis and suggestions
- Integration with auto-learning observations
Triggers
- Auto-triggers: "min profil", "uppdatera profil", "ändra profil", "profile setup", "inställningar", "preferences"
- NOT auto-triggered: "visa profil" (direct CLI query), observation-related phrases (route to profile-learner agent)
Relationship to profile-learner Agent
This skill has a clear integration with the profile-learner agent:
profile-management skill = View/update profile (user-initiated CRUD operations) profile-learner agent = Analyze patterns, create observations (background analysis)
Routing Flow for Observation-Related Requests
User: "vad har du lärt dig om mig?" / "granska observationer"
↓
Main agent routes to @agent-profile-learner
↓
Agent analyzes data, creates/updates observations
↓
Agent invokes this skill (via skills: profile-management)
↓
OBSERVATIONS-REVIEW.md displays results
Phrases that route to profile-learner agent first:
- "vad har du lärt dig om mig?" (What have you learned about me?)
- "granska observationer" (review observations)
- "har du sett några mönster?" (have you seen any patterns?)
Phrases that trigger this skill directly:
- "min profil" (my profile)
- "uppdatera profil" / "ändra profil" (update profile)
- "profile setup"
- "inställningar" / "preferences"
Phrases that use direct CLI query (not this skill):
- "visa min profil" →
profile getFullProfile
Critical Rules
- ALL profile operations MUST use
aida-cli.tswith theprofilemodule - NEVER expose raw JSON to user - always format nicely in Swedish
- Use Swedish for user-facing output
- Ask one question at a time during setup
- Validate before saving any changes
- Show observations transparently - user should understand what AIDA has learned
Tool Contract
Allowed CLI Operations (profile module only):
- FULL ACCESS: profileExists, getProfile, getSection, getAttribute, updateAttribute, initializeProfile
- TIME QUERIES: getCurrentTimePeriod, getCurrentEnergyLevel, getActivitiesForEnergy
- OBSERVATIONS: getObservations, applyObservationSuggestion, getSuggestionAcceptanceRate
Forbidden Operations:
- Any task operations
- Any journal operations
- Any role/project management
- Profile deletion (if such function exists)
Update Requirements:
- source: always "user" (this skill represents user-initiated changes)
- reason: required for all updates
File Access:
- Read:
personal-profile.json - No direct file writes - All updates via CLI
🚨 How to Access Profile
ONLY use the aida-cli.ts tool for ALL profile operations:
# Get full profile
bun run src/aida-cli.ts profile getProfile
# Get specific section
bun run src/aida-cli.ts profile getSection "identity"
bun run src/aida-cli.ts profile getSection "energy_pattern"
bun run src/aida-cli.ts profile getSection "neurotype"
# Get nested attribute
bun run src/aida-cli.ts profile getAttribute "identity.name"
bun run src/aida-cli.ts profile getAttribute "neurotype.challenges"
bun run src/aida-cli.ts profile getAttribute "roles.1.label"
# Update attribute
bun run src/aida-cli.ts profile updateAttribute "identity.location.city" '"Stockholm"' "user" "User moved to Stockholm"
# Get current time period and energy
bun run src/aida-cli.ts profile getCurrentTimePeriod
bun run src/aida-cli.ts profile getCurrentEnergyLevel
bun run src/aida-cli.ts profile getActivitiesForEnergy "high"
# Initialize new profile
bun run src/aida-cli.ts profile initializeProfile '{"name":"Henrik"}'
# Check if profile exists
bun run src/aida-cli.ts profile profileExists
# Learning observations
bun run src/aida-cli.ts profile getObservations
bun run src/aida-cli.ts profile getObservations "energy"
bun run src/aida-cli.ts profile applyObservationSuggestion "<observation-id>"
# Feedback history
bun run src/aida-cli.ts profile getSuggestionAcceptanceRate "task_suggestion"
Workflows
1. Profile Setup Wizard (No Profile Exists)
See SETUP-WIZARD.md for step-by-step procedure.
Summary:
- Welcome user, explain AIDA's purpose and how profile helps
- Collect required fields progressively (name, time definitions, energy pattern, at least one role)
- Ask about optional neurotype information (sensitively)
- Ask about optional sections (values, tools, background)
- Validate and create profile
- Confirm creation and show friendly summary
2. View Profile Summary
See VIEW-PROFILE.md for formatting rules.
Summary:
- Check if profile exists
- Load profile sections
- Format in user-friendly Swedish
- Highlight active roles and current energy level
- Show observation count if any exist
- Offer to explore specific sections or make updates
3. Update Profile Section
See UPDATE-FLOW.md for interaction pattern.
Summary:
- Identify what user wants to update
- Show current value
- Ask for new value with guidance and examples
- Validate input
- Confirm change before applying
- Log update with source and reason
4. Review Learning Observations
See OBSERVATIONS-REVIEW.md for display format.
Summary:
- Fetch active observations
- Show each observation with:
- Pattern description
- Evidence supporting it
- Confidence level
- Suggested profile update
- For each observation, ask user: Apply / Dismiss / Keep observing
- If apply, update profile automatically and mark observation as applied
- If dismiss, mark as dismissed and optionally ask why
- Show summary of applied changes
Supporting Documentation
- SETUP-WIZARD.md - New profile creation flow
- VIEW-PROFILE.md - Profile display formatting
- UPDATE-FLOW.md - Update interaction patterns
- OBSERVATIONS-REVIEW.md - Learning observation review
Design Principles
- Progressive disclosure - Show summaries first, details on request
- One question at a time - Never overwhelm with forms
- Validation with explanation - Explain why something is invalid
- Transparency - Show what changes will be made before saving
- Non-judgmental - Profile is personal, no "wrong" answers
- Privacy-aware - Be sensitive when asking about neurotype and challenges
Example Invocations
User: "Visa min profil"
Response:
Här är din profil, Henrik! 👤
**Identitet**
Namn: Henrik
Plats: Stockholm, Sverige
**Energimönster** (just nu: eftermiddag, medium energi)
- Hög energi: Djuparbete, kreativt arbete (morgon)
- Medium energi: Möten, kodgranskning (eftermiddag)
- Låg energi: Admin, läsning (kväll)
**Aktiva roller** (4 st)
1. 💼 Developer (40%) - work
2. 📚 Personal Development (30%) - personal
3. 💪 Health & Fitness (20%) - private
4. 🎨 Hobby Projects (10%) - hobby
**Inlärning**
AIDA har gjort 3 observationer om dina arbetsmönster.
Vill du granska dem? (ja/nej)
Vad vill du göra?
- Uppdatera en sektion
- Visa detaljer för en sektion
- Granska AIDA:s observationer
User: "Vad har du lärt dig om mig?"
Response:
Jag har observerat 3 mönster i ditt arbete:
**1. Energimönster** (förtroende: 85%)
Du slutför 80% av deep work-uppgifter mellan 06:00-09:00.
→ Förslag: Uppdatera "deep_work.preferred_time" till "morning"
Bevis:
- 2025-12-10: Arkitekturdok färdigt kl 07:30
- 2025-12-11: Kodgranskning kl 08:15
- 2025-12-12: Problemlösning kl 08:00
**2. Rollfokus** (förtroende: 90%)
90% av dina completions är i Developer-rollen.
→ Förslag: Öka balance_target från 40% till 50%
**3. Eftermiddagsenergi** (förtroende: 70%)
70% av eftermiddags-check-ins visar låg energi.
→ Förslag: Justera energy_pattern för afternoons
Vill du applicera någon av dessa? (1/2/3/alla/nej)
Success Criteria
- User can create a profile in < 5 minutes
- User understands what each section is for
- Profile displays in friendly, scannable Swedish
- Updates are confirmed before saving
- Learning observations are transparent and user-controllable
- No raw JSON exposed to user