원클릭으로
원클릭으로
| name | user-profile |
| description | Manage user profile including watchlists, portfolio, and preferences. |
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 dataYou should call these tools directly instead of using ExecuteCode tool.
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 accepts any fields. Extra fields like notes, instruction, avoid_sectors are stored alongside named fields.
# Merge with existing (default behavior)
update_user_data(entity="agent_preference", data={
"output_style": "Balanced summary with key numbers highlighted",
"notes": "User prefers brevity"
})
# Replace entire preference (delete all existing fields, set only new ones)
update_user_data(entity="agent_preference", data={
"output_style": "In-depth deep dive with full analysis"
}, 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. All fields accept any descriptive string.
| Field | Type | Description |
|---|---|---|
risk_tolerance | str | Risk tolerance description (any text) |
| (extra fields) | any | Additional context (notes, constraints, etc.) |
# Descriptive risk preference
update_user_data(
entity="risk_preference",
data={
"risk_tolerance": "Moderate - comfortable with market swings but avoids concentrated bets",
"notes": "Prefers diversification after 2022 tech losses"
}
)
Set investment style settings. All fields accept any descriptive string. At least one field is required.
| Field | Type | Description |
|---|---|---|
company_interest | str | Type of companies interested in (any text) |
holding_period | str | Preferred holding period (any text) |
analysis_focus | str | Primary analysis focus area (any text) |
| (extra fields) | any | Additional context (avoid_sectors, focus_sectors, notes, etc.) |
# Full investment profile with rich descriptions
update_user_data(
entity="investment_preference",
data={
"company_interest": "Dividend-paying blue chips and REITs for income",
"holding_period": "Long-term (5+ years), rarely sells",
"analysis_focus": "Dividend sustainability and balance sheet strength",
"avoid_sectors": "Crypto, speculative biotech"
}
)
Set agent behavior settings. All fields accept any descriptive string.
| Field | Type | Description |
|---|---|---|
output_style | str | Preferred output style (any text) |
data_visualization | str | Chart/visualization preferences (any text) |
proactive_questions | str | When to ask clarifying questions (any text) |
| (extra fields) | any | Additional context (instruction, notes, etc.) |
# Rich agent preferences
update_user_data(
entity="agent_preference",
data={
"output_style": "Balanced summary with key numbers highlighted",
"data_visualization": "Include charts when comparing multiple stocks",
"proactive_questions": "Use your judgment, only ask when critical"
}
)
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 | Free-form. Common: "stock", "etf", "index", "crypto", "future", "commodity", "currency". Other values accepted (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 | Free-form. Common: "stock", "etf", "index", "crypto", "future", "commodity", "currency". Other values accepted (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"}
)
DCF valuation: free cash flow projections, WACC, terminal value, sensitivity analysis
Inline HTML widgets: charts, dashboards, data tables rendered directly in the chat via ShowWidget
Web scraping with Scrapling: MCP tool wrappers for quick fetching, plus direct Python API for advanced scraping with selectors, sessions, and spiders
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
Search X (Twitter) posts, pull user profiles, fetch specific tweets, and read reply threads for sentiment, news, and event research. Triggers on 'X', 'Twitter', 'tweets about', 'sentiment on', 'what are people saying about', 'historical tweets', or any request to read public X content.
Report issues and propose fixes to improve your own capabilities when you encounter errors or limitations