The user must have:
AliyunOTSFullAccess permission) or ECS RAM Role (recommended on ECS)cn-hangzhou)📋 RAM Permissions: See references/ram-policies.md for the complete list of required API permissions.
This task is NOT complete until all of the following are true:
openclaw.json is configured correctly[AGENT] Ask the user:
To set up Tablestore Mem0, I need:
Required:
- Alibaba Cloud AccessKey ID
- Alibaba Cloud AccessKey Secret
- 阿里云百炼 API Key
Optional (if you have an existing Tablestore instance): 4. Tablestore endpoint (e.g.
https://my-instance.cn-hangzhou.ots.aliyuncs.com) 5. Tablestore instance nameIf you don't provide an endpoint and instance name, I'll automatically create a new Tablestore instance. In that case, I need: 6. Region ID (e.g.
cn-hangzhou,cn-shanghai)
Ask the user:
Question 1 — Authentication: How would you like to authenticate?
- Option A: ECS RAM Role (recommended on ECS) — Provide the role name.
- Option B: AccessKey — Provide AccessKey ID and Secret.
Question 2 — Tablestore instance: Do you already have a Tablestore instance?
- Yes → Provide endpoint and instance name.
- No → Provide region ID for auto-provisioning.
⚠️ HIGH-RISK OPERATION — Pre-flight Confirmation:
If the user answers No, the agent MUST:
Explicit Confirmation:
⚠️ This setup will create a new Tablestore instance in your Alibaba Cloud account.
- Instance type: VCU (pay-as-you-go, typically under ¥1/month)
- Region: as specified Do you confirm? (yes/no)
Double-check:
Please verify in Tablestore Console (
https://ots.console.aliyun.com/) that you don't have existing instances.
Do NOT proceed until the user explicitly confirms.
If the user is missing credentials, point them to:
https://account.alibabacloud.com/register/intl_register.htmhttps://ram.console.aliyun.com/manage/akhttps://dashscope.console.aliyun.com/apiKeyAliyunOTSFullAccess — ReferencePlugin version: 0.8.2
⚠️ External Package Installation Notice:
This skill will install
@tablestore/openclaw-mem0@0.8.2from npm registry. By proceeding, you acknowledge installing an external package. Do you consent? (yes/no)
Wait for user confirmation, then:
bash
NPMJS_TIME="$(curl -o /dev/null -sS --connect-timeout 2 --max-time 6 -w '%{time_total}' https://registry.npmjs.org/@tablestore%2fopenclaw-mem0 || echo timeout)"
MIRROR_TIME="$(curl -o /dev/null -sS --connect-timeout 2 --max-time 6 -w '%{time_total}' https://registry.npmmirror.com/@tablestore%2fopenclaw-mem0 || echo timeout)"
if [ "$MIRROR_TIME" != "timeout" ] && { [ "$NPMJS_TIME" = "timeout" ] || awk "BEGIN { exit !($NPMJS_TIME > 2 && $MIRROR_TIME < $NPMJS_TIME) }"; }; then
echo "Using China npm mirror"
NPM_CONFIG_REGISTRY=https://registry.npmmirror.com openclaw plugins install @tablestore/openclaw-mem0@0.8.2
else
openclaw plugins install @tablestore/openclaw-mem0@0.8.2
fi
If extract tar timed out, fallback to manual install:
bash
cd /tmp && npm pack @tablestore/openclaw-mem0@0.8.2
mkdir -p /tmp/openclaw-mem0-install
tar xzf /tmp/tablestore-openclaw-mem0-*.tgz -C /tmp/openclaw-mem0-install --strip-components=1
openclaw plugins install /tmp/openclaw-mem0-install
bash
openclaw --version
>= 2.2.0 → use Step 3A< 2.2.0 → use Step 3B (remove .plugins.allow line)Detect config file path:
bash
OPENCLAW_CONFIG="$(openclaw config file 2>/dev/null | head -1)"
OPENCLAW_CONFIG="${OPENCLAW_CONFIG/#\~/$HOME}"
echo "Config file: $OPENCLAW_CONFIG"
⚠️ Credential Security (REQUIRED):
ALWAYS prefer environment variables:
bash
export TABLESTORE_ACCESS_KEY_ID="<your-access-key-id>"
export TABLESTORE_ACCESS_KEY_SECRET="<your-access-key-secret>"
export DASHSCOPE_API_KEY="<your-dashscope-api-key>"
⚠️ Input Validation (REQUIRED):
InputValidation RuleAccessKey IDRegex: ^LTAI[Nt][A-Za-z0-9]{12,20}$AccessKey SecretAlphanumeric, ~30 charsRegion IDRegex: ^cn-[a-z]+(-[0-9]+)?$ or ^[a-z]+-[a-z]+-[0-9]+$EndpointRegex: ^https://[a-z0-9-]+\.[a-z0-9-]+\.ots\.aliyuncs\.com$Instance NameRegex: ^[a-z][a-z0-9-]{0,19}$
⚠️ Embedder/LLM provider MUST be "openai" with baseURL "https://dashscope.aliyuncs.com/compatible-mode/v1", NOT "dashscope".
Auth methodHas existing instance?vectorStore.config fieldsAccessKeyNoaccessKeyId, accessKeySecret, regionIdAccessKeyYesaccessKeyId, accessKeySecret, endpoint, instanceNameECS RAM RoleNoroleName, regionIdECS RAM RoleYesroleName, endpoint, instanceName
Template (AccessKey auth + auto-create):
bash
jq '
.plugins.slots.memory = "openclaw-mem0" |
.plugins.entries["openclaw-mem0"] = {
enabled: true,
config: {
mode: "open-source",
oss: {
vectorStore: {
provider: "tablestore",
config: {
accessKeyId: "${TABLESTORE_ACCESS_KEY_ID}",
accessKeySecret: "${TABLESTORE_ACCESS_KEY_SECRET}",
regionId: "cn-hangzhou"
}
},
embedder: {
provider: "openai",
config: {
apiKey: "${DASHSCOPE_API_KEY}",
model: "text-embedding-v3",
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
}
},
llm: {
provider: "openai",
config: {
apiKey: "${DASHSCOPE_API_KEY}",
model: "qwen-plus",
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
}
}
}
}
} |
.plugins.allow = ((.plugins.allow // []) + ["openclaw-mem0"] | unique)
' "$OPENCLAW_CONFIG" > /tmp/openclaw-tmp.json && mv /tmp/openclaw-tmp.json "$OPENCLAW_CONFIG"
For existing instance: replace regionId with endpoint and instanceName.
For ECS RAM Role: replace accessKeyId/ accessKeySecret with roleName.
Same as Step 3A but remove the .plugins.allow line.
bash
openclaw gateway restart
Wait ~1 minute for the gateway to restart.
bash
openclaw mem0 stats
Success criteria: plugin loads without errors, shows mode and memory count.
text
✅ Tablestore Mem0 is ready.
Your memory is now backed by Alibaba Cloud Tablestore.
The plugin will automatically recall relevant memories before each conversation
and capture key facts after each conversation.
Manual commands: "remember this" / "what do you know about me?" / "forget that"
Configuration: Tablestore vector store + 阿里云百炼 text-embedding-v3 + Qwen-Plus
Instance: <auto-created or user-provided>
Security: Prefer ECS RAM Role on ECS. Never commit credentials to version control.
ParameterRequiredDefaultDescriptionaccessKeyIdNo*—AccessKey ID (or env TABLESTORE_ACCESS_KEY_ID)accessKeySecretNo*—AccessKey Secret (or env TABLESTORE_ACCESS_KEY_SECRET)roleNameNo*—ECS RAM Role name (or env TABLESTORE_ROLE_NAME)endpointNoAuto-createdTablestore instance endpointinstanceNameNoAuto-createdTablestore instance nameregionIdNocn-hangzhouRegion for auto-provisioningtableNameNomem0_vectorsData table namedimensionNo1024Vector dimension
*Required unless roleName is set.
When endpoint/ instanceName not provided, creates VCU instance with:
SymptomFixPlugin not loadingCheck slots.memory = "openclaw-mem0" and enabled = true``AccessKeyId is invalidVerify AccessKey is correct and account is activeAuto-provisioning failsEnsure AccessKey has AliyunOTSFullAccessEmbedding errorsVerify DASHSCOPE_API_KEY is setVPC endpoint unreachablePlugin auto-enables public access; verify AliyunOTSFullAccess``extract tar timed outUse manual fallback: npm pack + system tarProvider shows dashscopeChange provider to "openai" with correct baseURL
Do not set up automatic updates. Only update when explicitly requested.