# user_profile > Build and refresh a cached "who am I" user profile from connected apps (Microsoft 365, HubSpot, Linear) to give assistants reliable signed-in context. - Author: Lloyd Vickery - Repository: LloydVickeryASI/claude-code-skills-test - Version: 20251222093431 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-07 - Source: https://github.com/LloydVickeryASI/claude-code-skills-test - Web: https://mule.run/skillshub/@@LloydVickeryASI/claude-code-skills-test~user_profile:20251222093431 --- --- name: user_profile description: Build and refresh a cached "who am I" user profile from connected apps (Microsoft 365, HubSpot, Linear) to give assistants reliable signed-in context. --- # User Profile Skill This skill builds a local, cached profile for the currently signed-in user by pulling identity + preferences from whichever apps are currently connected (via `pdc` OAuth env injection). It is intended to be: - **Low-risk**: never prints or stores access tokens. - **Portable**: stores a cache under `~/.cache/asi/` so other tools/skills can read it. - **Incremental**: if an app isn’t connected, it records a helpful suggestion instead of failing the whole refresh. ## What it collects ### Microsoft 365 (Graph via `pdc proxy`) - `GET https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail,userPrincipalName,jobTitle,department,officeLocation` - `GET https://graph.microsoft.com/v1.0/me/mailboxSettings?$select=timeZone,language` ### HubSpot (REST via bearer token) - `GET https://api.hubapi.com/crm/v3/owners/?email=` ### Linear (GraphQL via bearer token) - `query { viewer { id name email timezone } }` ## Files - Cache JSON: `~/.cache/asi/user_profile.json` Cache shape (high level): ```json { "fetched_at": "2025-12-17T08:23:07Z", "host": { "hostname": "..." }, "sources": { "microsoft_365": {}, "hubspot": {}, "linear": {} }, "derived": { "email": "...", "displayName": "...", "timeZone": "...", "locale": "..." }, "suggestions": [ { "app": "linear", "next_step": "pdc connect --app linear" } ] } ``` ## Usage ```bash cd ~/.claude/skills/user_profile # Refresh cache (writes ~/.cache/asi/user_profile.json) python3 user_profile.py refresh # Human-readable summary python3 user_profile.py show # JSON output (useful for piping into jq / other scripts) python3 user_profile.py show --json # Quick health checks / connection suggestions python3 user_profile.py doctor ``` Convenience wrapper (same commands): ```bash ~/.claude/skills/user_profile/profile refresh ~/.claude/skills/user_profile/profile show ``` ## Connection suggestions If a source is missing/unhealthy, the refresh output includes suggestions. Typical reconnection flow is: ```bash pdc connect --app microsoft_365 pdc connect --app hubspot pdc connect --app linear ``` (If an app requires a specific OAuth app id, use the corresponding skill docs for that app, e.g. `~/.claude/skills/linear/SKILL.md`.) ## Extending it (optional) Good next sources to add (if/when those apps are connected on-host): - Strety user + team context - Xero “whoami” org/tenant context - Outline user + workspace - PandaDoc user + workspace