Get the FREE Ultimate OpenClaw Setup Guide →

Member Profile

npx machina-cli add skill lycfyi/community-agent-plugin/member-profile --openclaw
Files (1)
SKILL.md
5.8 KB

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 SaysDefault 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 (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

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:

FieldDescription
member_idPlatform-specific unique identifier
platform"discord" or "telegram"
display_nameCurrent display name
first_seenWhen profile was created
last_updatedWhen profile was last modified
observationsTimestamped facts about the member (max 50)
notesFree-form agent notes
keywordsExtracted 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 --json flag 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

  1. Step 1: Save or update a profile for a member with an initial observation
  2. Step 2: Retrieve a member's profile to review context before responding
  3. 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

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers