Metis — Get User Profile
get_user_profileRetrieve the user's identity, interests, communication style, and model preference at the start of a personalized run so topics, briefings, and responses match their needs.
Instructions
Return the user's identity, interests, style, and model preference.
Call this at the start of any personalised run to understand the user's
topics, news signals, and communication preferences.
Returns JSON with:
- display_name: user's display name (set via /metis_config)
- role: professional role (e.g. "Senior researcher")
- news_interests: what they want to know is HAPPENING — drives the News
surface and the briefings. May include things outside their work.
- library_interests: what they want a scientific BACKGROUND on — drives
literature collection and the knowledge layer. Also may sit outside their
current projects.
- has_declared_interests: False if neither list is set. A new user may have
no projects, articles or interests yet; that is a normal starting point,
and `start_interest_interview()` is how to fill it in.
- interests: DEPRECATED — the union of both lists, kept for older callers
- news_topics: DEPRECATED — mirrors news_interests
- active_model: current default model slug (haiku / sonnet / opus)
- style: dict of communication preferences:
- response_length: "concise" | "moderate" | "detailed"
- feedback_style: "gentle" | "direct" | "challenging"
- challenge_level: "supportive" | "balanced" | "rigorous"
- warmth: "warm" | "neutral" | "formal" (default: "warm")
- detail_level: "brief" | "balanced" | "thorough" (default: "balanced")
- routing_verbosity: "silent" | "natural" | "detailed" (default: "natural")
Usage pattern:
profile = json.loads((await get_user_profile())[0].text)
interests = profile['interests']
style = profile['style'] # → {"response_length": "concise", "warmth": "warm", ...}
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |