member-profile
# Member Profile Management
What this skill does
# Member Profile Management
Manage community member profiles to build persistent understanding of who community members are over time.
## When to Use
- User asks to "remember" something about a community member
- User wants to look up information about a specific member
- User asks "who is @username" or wants member context
- User wants to search for members with specific interests/skills
- User asks for a list of community members
- When building context for personalized responses to members
- After gathering profile-relevant information from chat activity
## Smart Defaults
| User Says | Default Action |
|-----------|----------------|
| "remember that @alice works in fintech" | Save observation to Alice's profile |
| "who is @bob" | Get Bob's profile and display |
| "who knows Python" | Search profiles for "python" |
| "list members" | List all profiles (default platform: discord) |
## Commands
### Save or Update a Profile
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py save \
--platform discord \
--member-id "123456789" \
--name "Alice Smith" \
--observation "Works at a fintech startup"
```
**Parameters:**
- `--platform`: Required. Platform identifier (`discord` or `telegram`)
- `--member-id`: Required. The member's platform-specific ID
- `--name`: Required for new profiles. Display name (max 100 chars)
- `--observation`: Optional. Initial observation to record
- `--notes`: Optional. Free-form notes about the member
- `--keywords`: Optional. Keywords for search (space-separated)
- `--json`: Optional. Output in JSON format
### Get a Profile
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py get \
--platform discord \
--member-id "123456789"
```
**Parameters:**
- `--platform`: Required. Platform identifier
- `--member-id`: Required. The member's ID
- `--json`: Optional. Output in JSON format
### Add an Observation
Use this to record new information learned about a member without needing to reload their full profile.
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py add-observation \
--platform discord \
--member-id "123456789" \
--text "Interested in Python and machine learning"
```
**Parameters:**
- `--platform`: Required. Platform identifier
- `--member-id`: Required. The member's ID
- `--text`: Required. Observation text (max 500 chars)
- `--name`: Optional. Display name (required if profile doesn't exist yet)
- `--json`: Optional. Output in JSON format
### Search Profiles
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py search \
--platform discord \
--query "python developer" \
--limit 20
```
**Parameters:**
- `--platform`: Required. Platform identifier
- `--query`: Required. Search query string
- `--limit`: Optional. Maximum results (default: 20)
- `--json`: Optional. Output in JSON format
### List All Profiles
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py list \
--platform discord \
--offset 0 \
--limit 50
```
**Parameters:**
- `--platform`: Required. Platform identifier
- `--offset`: Optional. Skip first N profiles (default: 0)
- `--limit`: Optional. Maximum results (default: 50)
- `--json`: Optional. Output in JSON format
### Count Profiles
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py count \
--platform discord
```
### Rebuild Index
Use if the index becomes corrupted or out of sync with profile files.
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py rebuild-index \
--platform discord
```
## Profile Data Structure
Each profile contains:
| Field | Description |
|-------|-------------|
| `member_id` | Platform-specific unique identifier |
| `platform` | "discord" or "telegram" |
| `display_name` | Current display name |
| `first_seen` | When profile was created |
| `last_updated` | When profile was last modified |
| `observations` | Timestamped facts about the member (max 50) |
| `notes` | Free-form agent notes |
| `keywords` | Extracted keywords for search (max 10) |
## Storage Location
Profiles are stored in:
```
profiles/
├── discord/
│ ├── index.yaml # Fast lookup index
│ └── {member_id}.yaml # Individual profiles
└── telegram/
├── index.yaml
└── {member_id}.yaml
```
## Examples
### Remember information about a member
When a user shares that "@alice works in fintech":
```bash
# First check if profile exists
python {{PLUGIN_DIR}}/tools/member_profile.py get \
--platform discord \
--member-id "123456789" \
--json
# If exists, add observation:
python {{PLUGIN_DIR}}/tools/member_profile.py add-observation \
--platform discord \
--member-id "123456789" \
--text "Works at a fintech startup"
# If new, create profile:
python {{PLUGIN_DIR}}/tools/member_profile.py save \
--platform discord \
--member-id "123456789" \
--name "Alice" \
--observation "Works at a fintech startup"
```
### Look up a member
When user asks "who is @bob":
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py get \
--platform discord \
--member-id "987654321" \
--json
```
### Find members with specific skills
When user asks "who knows Python here":
```bash
python {{PLUGIN_DIR}}/tools/member_profile.py search \
--platform discord \
--query "python" \
--json
```
## Limits
- **Observations**: Max 50 per profile (oldest trimmed automatically)
- **Keywords**: Max 10 per profile
- **Display name**: Max 100 characters
- **Observation text**: Max 500 characters
- **Notes**: Max 2000 characters
- **Profiles**: Supports up to 100,000 per platform
## Notes
- Profiles are **platform-scoped**: One profile per member per platform
- A member active in multiple Discord servers shares **one Discord profile**
- Observations are **append-only** - conflicting info is preserved with timestamps
- The index enables **fast search** without loading all profiles
- Use `--json` flag for programmatic access to output
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.