Install
openclaw skills install custom-mysqlProvides a secure, least-privilege interface for managing user data, personas, and config snapshots in MySQL with input validation and secret redaction.
openclaw skills install custom-mysqlSecurity-hardened MyVector MySQL profile storage with capability bounding for OpenClaw. Tracks interactions, relationships, context, skill usage, notes, preferences, media, food, personas, mood states, engagement patterns, proactive reminders, agent learnings, community sentiment, trending topics, and community events. v3.0.0 replaces the local MySQL dependency with MyVector (MySQL 8.4 + vector search) running in a Docker container. All SQL is routed through docker exec into the MyVector container. Requires a dedicated least-privilege MySQL user — root/admin accounts are rejected.
3.0.0 – 2026-05-11
docker exec.env files for credentials (parsed as KEY=VALUE, never shell-sourced)sql_safe_exec.sh for safetyquery command is SELECT-only/* */, --, #)| Option | Default | Notes |
|---|---|---|
MYSQL_USER | required | Dedicated least-privilege account (NOT root) |
MYSQL_PASSWORD | required | Store in .env (chmod 600) |
MYSQL_PORT | 3310 | MyVector Docker port mapping |
DATABASE | mysqlclaw | Target database |
MyVector Docker container must be running:
docker run -d --name myvector-db -p 3310:3306 \
-e MYSQL_ROOT_PASSWORD=<root_pw> \
-e MYSQL_DATABASE=mysqlclaw \
ghcr.io/askdba/myvector:mysql8.4
# 1. Start MyVector container (if not running)
docker run -d --name myvector-db -p 3310:3306 \
-e MYSQL_ROOT_PASSWORD=<root_pw> \
-e MYSQL_DATABASE=mysqlclaw \
ghcr.io/askdba/myvector:mysql8.4
# 2. Create a dedicated least-privilege user inside MyVector
docker exec -it myvector-db mysql -u root -p<root_pw> -e "
CREATE USER IF NOT EXISTS 'mysqlclaw'@'%' IDENTIFIED BY '<strong_password>';
GRANT SELECT, INSERT, UPDATE, DELETE ON mysqlclaw.* TO 'mysqlclaw'@'%';
FLUSH PRIVILEGES;
"
# 3. Create .env file with the dedicated user's credentials
cat > .env <<'EOF'
MYSQL_USER=mysqlclaw
MYSQL_PASSWORD=<strong_password>
MYSQL_PORT=3310
DATABASE=mysqlclaw
EOF
chmod 600 .env
# 4. Apply schema with setup wizard
cd ~/.openclaw/workspace/skills/custom-mysql
./setup_wizard.sh
# Query (SELECT-only)
custom_mysql.sh query "SELECT * FROM users LIMIT 5"
# Execute script (DML requires interactive confirmation)
custom_mysql.sh exec --file /path/to/scripts.sql
# Convenience commands:
custom_mysql.sh insert_interaction <uid> <dir> <topic> <summary> [sentiment] [is_important]
custom_mysql.sh insert_note <uid> <note> [category] [is_pinned]
custom_mysql.sh insert_context <uid> <key> <value> [type] [importance] [expires_at]
custom_mysql.sh insert_skill_usage <uid> <skill_name> [action] [status] [duration_ms] [error_type]
custom_mysql.sh insert_relationship <uid> <related_uid> <type> [strength] [trust] [notes]
custom_mysql.sh insert_mood <uid> <mood> [intensity] [trigger_topic] [confidence]
custom_mysql.sh insert_reminder <uid> <trigger_type> <condition> <text> [priority]
custom_mysql.sh insert_thought <uid> <thought> [type] [channel_id]
custom_mysql.sh insert_learning <type> <title> <description> [priority] [user] [skill]
custom_mysql.sh insert_event <type> <title> [description] [channel_id]
| Type | Table | Description | Example |
|---|---|---|---|
| Episodic | user_context | Specific events/experiences with timestamps | "User mentioned their dog died last week" |
| Semantic | user_context | General facts and knowledge | "User is a software developer" |
| Procedural | user_context | How-to knowledge and habits | "User prefers concise responses" |
| Emotional | user_mood | Emotional states with triggers and intensity | "User was stressed about deadline" |
| Preference | user_preferences | Explicit preferences with confidence | "User likes dark mode" |
| Synaptic | synaptic_memory | Key-value memory with priority and decay | Quick-access facts with auto-decay |
docker exec. No local MySQL installation required.--defaults-extra-file with chmod 600, cleaned up via trap on any exit..env parsed safely: KEY=VALUE line parsing only — never evaluated as shell code.query command is SELECT-only (no DML through query)/* */, --, # style comments rejected)0x... bypasses)user_interactions: 30-day rolling window — older entries should be archived or purgeduser_mood: 90-day rolling window — emotional data ages quicklythought_stream: 30-day rolling windowsynaptic_memory: auto-decay via decay_rate column — low-priority entries fade naturallycommunity_sentiment, trending_topics: 90-day rolling windowuser_activity_heatmap: rolling 90-day windowsuser_notes, user_relationships, skill_usage, user_context: retained until explicitly deletedproactive_reminders: auto-deactivate after max_triggers reachedrollback_user.sql covers all 26 user-data tablesmysqlclaw databasesource: 'inferred' and lower confidenceagent_learnings and rule-like memories must be reviewed before affecting future behaviorSentiment is tracked at multiple levels:
user_interactions.sentiment (enum) + sentiment_score (float, -1 to 1)community_sentiment aggregated by time periodmood_impact field)Automatically tracked patterns:
agent_config_files table, allowed_snapshot_paths table, and related commands were removed to prevent storage of sensitive operational files.See changelog.md for full version history.
For step-by-step instructions on setting up MyVector, creating the database with proper security, and applying the schema, see SETUP_GUIDE.md.
Visit https://clawhub.ai/paradoxfuzzle/custom-mysql for live updates.