用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tools-only/X-Skills --skill user-profile命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Index of Build Systems Skills
Coordination patterns for distributed dataflow systems including barriers, epochs, and distributed snapshots
Windowing, sessionization, time-series aggregation, and late data handling for streaming systems
基于 SOC 职业分类
正在显示 SKILL.md
| name | user-profile |
| description | Manage user profile including watchlists, portfolio, and preferences. Also contains onboarding instructions. |
This skill provides 3 unified tools for managing user data:
get_user_data - Read user dataupdate_user_data - Create or update user dataremove_user_data - Delete user dataThe tools are hidden by default and will be available to you after loading the skill.
To load the skill, use the LoadSkill tool with the skill name "user-profile".
You should call the tools being loaded directly instead of using ExecuteCode tool.
For first-time user setup, see onboarding.md.
Retrieve user data by entity type.
| Entity | Description | entity_id |
|---|---|---|
all | Complete user data (profile, preferences, watchlists with items, portfolio) | Not used |
profile | User info (name, timezone, locale) | Not used |
preferences | All preferences (risk, investment, agent) | Not used |
watchlists | List of all watchlists | Not used |
watchlist_items | Items in a specific watchlist | Optional watchlist_id |
portfolio | All portfolio holdings | Not used |
# Get complete user data (recommended for initial context)
get_user_data(entity="all")
# Returns: {
# "profile": {"name": "John", "timezone": "America/New_York", "locale": "en-US"},
# "preferences": {"risk_preference": {...}, "investment_preference": {...}, ...},
# "watchlists": [{"name": "Tech Stocks", "items": [...], ...}],
# "portfolio": [{"symbol": "AAPL", "quantity": 50, ...}]
# }
# Get user profile
get_user_data(entity="profile")
# Returns: {"name": "John", "timezone": "America/New_York", "locale": "en-US"}
# Get all preferences
get_user_data(entity="preferences")
# Returns: {"risk_preference": {...}, "investment_preference": {...}, "agent_preference": {...}}
# Get all watchlists
get_user_data(entity="watchlists")
# Returns: [{"watchlist_id": "abc", "name": "Tech Stocks", "is_default": true}, ...]
# Get items from default watchlist
get_user_data(entity="watchlist_items")
# Returns: [{"symbol": "AAPL", "notes": "..."}, {"symbol": "NVDA", ...}]
# Get items from specific watchlist
get_user_data(entity="watchlist_items", entity_id="abc-123")
# Get portfolio holdings
get_user_data(entity="portfolio")
# Returns: [{"symbol": "AAPL", "quantity": 50, "average_cost": 175.0}, ...]
Create or update user data (upsert semantics).
All preference entities (risk_preference, investment_preference, agent_preference) support:
| Parameter | Type | Description |
|---|---|---|
replace | bool | If True, completely replace the preference instead of merging with existing data |
The data dict also accepts extra fields like notes, instruction, avoid_sectors, etc.
# Merge with existing (default behavior)
update_user_data(entity="agent_preference", data={"output_style": "quick", "notes": "User prefers brevity"})
# Replace entire preference (delete all existing fields, set only new ones)
update_user_data(entity="agent_preference", data={"output_style": "deep_dive"}, replace=True)
Update user profile info.
| Field | Type | Description |
|---|---|---|
name | str | Display name |
timezone | str | e.g., "America/New_York" |
locale | str | Preferred language, e.g., "en-US", "zh-CN" |
onboarding_completed | bool | Mark onboarding done (write-only, not returned in get) |
# Update display name
update_user_data(entity="profile", data={"name": "John Doe"})
# Mark onboarding complete
update_user_data(entity="profile", data={"onboarding_completed": True})
Set risk tolerance settings.
| Field | Type | Required | Description |
|---|---|---|---|
risk_tolerance | str | Yes | "low", "medium", "high", "long_term_focus" |
# Set risk preference
update_user_data(
entity="risk_preference",
data={"risk_tolerance": "medium"}
)
# Long-term investor comfortable with volatility
update_user_data(
entity="risk_preference",
data={"risk_tolerance": "long_term_focus"}
)
Set investment style settings. At least one field is required.
| Field | Type | Required | Description |
|---|---|---|---|
company_interest | str | No* | "growth", "stable", "value", "esg" |
holding_period | str | No* | "short_term", "mid_term", "long_term", "flexible" |
analysis_focus | str | No* | "growth", "valuation", "moat", "risk" |
*At least one field must be provided.
# Set company interest type
update_user_data(
entity="investment_preference",
data={"company_interest": "growth"}
)
# Full investment profile
update_user_data(
entity="investment_preference",
data={
"company_interest": "value",
"holding_period": "long_term",
"analysis_focus": "moat"
}
)
Set agent behavior settings.
| Field | Type | Required | Description |
|---|---|---|---|
output_style | str | Yes | "summary", "data", "deep_dive", "quick" |
# Quick summaries for busy user
update_user_data(
entity="agent_preference",
data={"output_style": "quick"}
)
# Detailed analysis with data focus
update_user_data(
entity="agent_preference",
data={"output_style": "deep_dive"}
)
Create or update a watchlist.
| Field | Type | Required | Description |
|---|---|---|---|
name | str | Yes | Watchlist name (used as key for upsert) |
description | str | No | Purpose of the watchlist |
is_default | bool | No | Set as default watchlist |
# Create a watchlist
update_user_data(
entity="watchlist",
data={"name": "AI Companies", "description": "Companies focused on AI"}
)
# Create and set as default
update_user_data(
entity="watchlist",
data={"name": "My Watchlist", "is_default": True}
)
Add or update an item in a watchlist.
| Field | Type | Required | Description |
|---|---|---|---|
symbol | str | Yes | Stock symbol (used as key) |
watchlist_id | str | No | Target watchlist (uses default if omitted) |
instrument_type | str | No | "stock", "etf", "index", "crypto" (default: "stock") |
exchange | str | No | e.g., "NASDAQ" |
name | str | No | Company name |
notes | str | No | Why you're watching |
# Add to default watchlist
update_user_data(
entity="watchlist_item",
data={"symbol": "NVDA", "notes": "Watching for AI chip growth"}
)
# Add to specific watchlist with full details
update_user_data(
entity="watchlist_item",
data={
"symbol": "AAPL",
"watchlist_id": "abc-123",
"name": "Apple Inc.",
"exchange": "NASDAQ",
"notes": "iPhone revenue growth"
}
)
# Add an ETF
update_user_data(
entity="watchlist_item",
data={"symbol": "QQQ", "instrument_type": "etf", "notes": "Tech exposure"}
)
Add or update a portfolio holding.
| Field | Type | Required | Description |
|---|---|---|---|
symbol | str | Yes | Stock symbol (used as key) |
quantity | float | Yes | Number of shares |
average_cost | float | No | Cost per share |
account_name | str | No | e.g., "Robinhood", "Fidelity IRA" (part of key) |
instrument_type | str | No | Default: "stock" |
currency | str | No | Default: "USD" |
notes | str | No | Additional notes |
# Add basic holding
update_user_data(
entity="portfolio_holding",
data={"symbol": "AAPL", "quantity": 50, "average_cost": 175.0}
)
# Add holding with account
update_user_data(
entity="portfolio_holding",
data={
"symbol": "VTI",
"quantity": 100,
"average_cost": 220.50,
"account_name": "Fidelity 401k",
"instrument_type": "etf",
"notes": "Long-term retirement holding"
}
)
# Same symbol in different accounts
update_user_data(
entity="portfolio_holding",
data={"symbol": "MSFT", "quantity": 25, "account_name": "Robinhood"}
)
update_user_data(
entity="portfolio_holding",
data={"symbol": "MSFT", "quantity": 50, "account_name": "Schwab IRA"}
)
Delete user data by entity type.
Delete an entire watchlist.
| Field | Type | Required | Description |
|---|---|---|---|
watchlist_id | str | Either | Watchlist ID |
name | str | Either | Watchlist name |
# Delete by ID
remove_user_data(
entity="watchlist",
identifier={"watchlist_id": "abc-123"}
)
# Delete by name
remove_user_data(
entity="watchlist",
identifier={"name": "Tech Stocks"}
)
Remove an item from a watchlist.
| Field | Type | Required | Description |
|---|---|---|---|
symbol | str | Yes | Stock symbol |
watchlist_id | str | No | Uses default if omitted |
# Remove from default watchlist
remove_user_data(
entity="watchlist_item",
identifier={"symbol": "NVDA"}
)
# Remove from specific watchlist
remove_user_data(
entity="watchlist_item",
identifier={"symbol": "AAPL", "watchlist_id": "abc-123"}
)
Remove a portfolio holding.
| Field | Type | Required | Description |
|---|---|---|---|
symbol | str | Yes | Stock symbol |
account_name | str | No | For disambiguation if same symbol in multiple accounts |
# Remove holding (when only one account)
remove_user_data(
entity="portfolio_holding",
identifier={"symbol": "AAPL"}
)
# Remove from specific account
remove_user_data(
entity="portfolio_holding",
identifier={"symbol": "MSFT", "account_name": "Robinhood"}
)
Be conversational - Don't ask all questions at once. Let the conversation flow naturally.
Provide context - When asking about risk tolerance, explain what each level means:
Handle partial info - If user mentions "I own some AAPL", ask follow-up:
Confirm entries - After saving, confirm what was added:
Use defaults - If user doesn't have a watchlist, items go to the default one automatically.