Member Profile
npx machina-cli add skill lycfyi/community-agent-plugin/member-profile --openclawMember 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
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 (discordortelegram)--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
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.
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
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
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
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.
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":
# 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":
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":
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
--jsonflag for programmatic access to output
Source
git clone https://github.com/lycfyi/community-agent-plugin/blob/main/plugins/community-agent/skills/member-profile/SKILL.mdView on GitHub Overview
This skill stores and updates structured profiles for each community member, building a persistent understanding of who they are over time. It enables saving observations, looking up profiles, and searching by interests to support personalized, context-aware responses.
How This Skill Works
Profiles are stored with fields like member_id, platform, display_name, first_seen, last_updated, observations, notes, and keywords. The plugin provides commands to save/update profiles, get a profile, add observations, search, list, count, and rebuild-index across platforms (e.g., discord, telegram). Observations are timestamped and keywords are used to accelerate searches.
When to Use It
- Remember a detail about a member for future interactions
- Look up a member's profile by ID or username
- Find members by interests or skills (e.g., Python) to form groups
- List all member profiles to understand community composition
- Build contextual responses by loading a member's observations before replying
Quick Start
- Step 1: Save or update a profile for a member with an initial observation
- Step 2: Retrieve a member's profile to review context before responding
- Step 3: Add a new observation or run a search to locate members by keyword
Best Practices
- Use a consistent member_id and display_name across updates
- Keep observations concise, timestamped, and relevant; limit notes to essential info
- Update keywords when new interests are learned to improve search results
- Prefer add-observation for new facts rather than recreating profiles
- Run rebuild-index if search or lookup results become out of sync
Example Use Cases
- Remember that @alice works in fintech and follow up on fintech events
- Get Bob's profile to confirm his role before outreach
- Search for members who know Python to assemble a learning group
- List all profiles to create a directory in a channel
- Add an observation: 'Alice attended weekly standup' to keep context