Install
openclaw skills install i-skillGenerates personalized interaction guides by analyzing user conversations. Invoke when users seek personalized responses, want AI assistants to better understand their preferences, or need customized service adaptation. Activation: '激活个性化' or 'personalization'.
openclaw skills install i-skillAnalyzes user conversations to generate a structured personalization profile, enabling AI assistants to deliver customized service based on user preferences.
Default Location: User data is stored in the skill's own user_data/ directory (relative to the skill installation).
Environment Variable Override: You can set the ISKILL_DATA_PATH environment variable to specify a custom directory for storing user data.
Important Notes:
user_data/ directory (either default or via ISKILL_DATA_PATH override)Key Principle: No directories are created and no files are written to disk until the skill is manually activated.
audit_log.py, consent_manager.py, myself_manager.py) are first imported or instantiated, no file system operations occur.These rules remain active throughout the entire session after activation, regardless of context length.
i-skill_state.json (from data directory) to check current statestatus == "active", read myself.md (from data directory) and use it as personalization contexti-skill_state.json (from data directory) to check current state
b. If already active, inform user: "Personalization is already active, profile version vX"
c. If inactive, create/update i-skill_state.json to active, increment activation count by 1
d. Read current myself.md (if it exists, from data directory), combine with conversation context, generate/update profile using the template below
e. Display a brief profile summary to the user after generationThe profile is stored in myself.md (from data directory) and must strictly follow this semi-structured template:
# User Profile
> Auto-generated on YYYY-MM-DD · Version vX · Refined over N iterations
## Basic Info
- **Name**: (User's name or AI-inferred)
- **Career Direction**: (Current primary career or job-seeking direction)
- **Tech Stack**: (Technologies frequently used or currently learning, comma-separated)
## Interests & Preferences
- **Core Interests**: (3-5 core interest areas)
- **Learning Focus**: (Areas currently being studied in depth)
- **Content Preference**: (Types of content preferred: hands-on projects / theoretical knowledge / industry trends / comprehensive analysis)
## Communication Style
- **Language**: (Primary language)
- **Style**: (Concise / Detailed / Casual / Professional)
- **Format Preference**: (Code examples / Plain text / Visual charts / Mixed)
- **Feedback Habit**: (Proactive / Implicit adjustment / Direct correction)
## Thinking Style
(Free-form description, 1-3 sentences. E.g.: Systematic thinker, analyzes problems holistically; pragmatic, prefers actionable solutions; curious, enjoys exploring new technology boundaries)
## Recent Focus
(2-5 recent topics or projects, in reverse chronological order)
## Observation Notes
(Free-form description of other stable traits, interesting details, or memorable preferences observed from conversations. 1-3 items, concise. Prefer prefixing each item with `[场景]` for traceability, e.g. `[2026-03-27, cogito讨论] 对"本质"有执念...`)
**-marked items) must appear under their corresponding sections[~] (1st observation, tentative) or [!!] (2nd observation, emerging) after the value. Tags are removed once confirmed (3+ consistent signals or user approval). Unmarked = confirmed. Example: - **Learning Focus**: LLM应用开发 [~]Rust(待观察)PRIVACY FIRST: All profile updates require explicit user consent. No automatic silent updates are performed without prior user approval.
When any of the following conditions are met, ask the user for explicit consent before updating the profile:
| Trigger | Description | Update Mode |
|---|---|---|
| User demonstrates a new stable trait | Mentions a new career direction, new core interest, etc. | Ask for consent first, then update only if approved |
| User explicitly corrects profile errors | "I'm not a frontend dev, I do backend" | Confirm correction first, then update if approved |
| Conversation involves major changes | Career change, tech stack switch, etc. | Show change summary first, ask for consent before updating |
| 3+ consecutive rounds on a new topic | In-depth discussion of a topic not covered in the profile | Ask for consent first, then update only if approved |
[~] in Observation Notes only (no profile field change); 2nd → [!!]; 3rd → ask user before writing to profile fields.User: (Normal conversation content suggesting potential profile updates)
AI: (Normal response content)
AI: "I noticed some information that could update your profile. Would you like me to update it with these changes?
- Career Direction: LLM App Development → Full-Stack Development
- New Interest: Rust programming language
(Reply 'yes' to confirm, 'no' to skip)"
[Only update if user explicitly says 'yes']
AI: Detected potential updates to your profile:
- Career Direction: LLM App Development → Full-Stack Development
- New Interest: Rust programming language
Confirm update? (Reply "yes" to confirm, "no" to skip)
The following destructive operations require explicit user confirmation before execution.
When the user proactively requests profile modification (not auto-sensing updates):
When the user requests a profile reset:
myself.md and write initial template, reset profile_version to 0i-skill_state.json status unchangedWhen the user requests profile deletion:
myself.mdi-skill_state.json to {"status": "inactive", "activation_count": 0, "profile_version": 0}status to paused, retain all profile datastatus back to active, re-read profile to resume personalization servicemyself.md — User profile (with version tracking)i-skill_state.json — Activation state, statistics, profile_version./scripts/myself_manager.py — Safe profile file read/write (with auto-rollback)./scripts/validator.py — Data validation and PII sanitization./scripts/audit_log.py — Operation audit logging./scripts/consent_manager.py — Cross-skill authorization managementmyself_operations.log — File-level operation audit log (from data directory)audit_log.json / defensive_log.json — Audit logs (from data directory)consent_state.json — Authorization state (from data directory)validator.pyPurpose: The ISKILL_DATA_PATH environment variable allows you to specify a custom directory for storing user data.
Security Recommendations:
ISKILL_DATA_PATH to a dedicated, isolated directory specifically for this skillISKILL_DATA_PATH to system directories or directories containing sensitive filesuser_data/ directory which is the safest option