This topic summarizes the quotas and limitations for MemoryStore, including regions, memory stores, write and retrieval operations, Scope, SDK versions, and agent plugins.
Region
The service is currently available only in the China (Beijing) region.
Memory store limitations
Item | Limit |
Memory store name characters | Can only contain letters, digits, and underscores (_). |
Memory store name length | Up to 32 characters |
Memory store description length | Up to 1,024 characters |
After you create a memory store, the index takes about one minute to initialize. Perform write and retrieval operations only after the index is initialized.
AddMemories limitations
Item | Limit |
Number of | Up to 20 |
Total content length of | Up to 32,000 characters |
Length of | Up to 32,000 characters |
Length of | Up to 256 characters |
Number of keys in | Up to 16 |
Length of a key in | Up to 64 characters |
Length of a value in | Up to 1,024 characters |
You must provide at least one of messages or text. When writing to memory, Scope does not allow the wildcard character *.
SearchMemories default values
Parameter | Default | Description |
|
| The number of results to return. The valid range is |
|
| Specifies whether to enable Rerank. |
To retrieve long-term memory, appId and tenantId are required. You can use the wildcard * for agentId and runId.
Scope rules
Actions | Scope requirement | Wildcard ( |
Write memory |
| No |
Retrieve long-term memory |
| Yes, for |
Query short-term memory | All four Scope levels are required. | No |
Get a single long-term memory | All four Scope levels are required. | No |
Update a single long-term memory | All four Scope levels are required. | No |
Delete a single long-term memory | All four Scope levels are required. | No |
List long-term memories | You can specify Scope by level. | Yes |
Query request audits | You can specify Scope by level. | Yes |
Wildcards must be used hierarchically. If you use the wildcard * at a certain level, all subsequent levels must also use * or be left empty. For example, app-001/user-001/*/* is a valid Scope, but app-001/*/agent-001/* is not.
Asynchronous write visibility
The default value of AddMemories.sync is false, which indicates an asynchronous write. The visibility of asynchronous writes is as follows:
The raw message is written first and is immediately available for short-term memory queries.
Long-term memory extraction runs in the background.
After a write operation is complete, long-term memory can be recalled by
SearchMemorieswithin approximately 15 seconds.
When you need to view the extraction results immediately after writing in a test scenario, set sync to true. After a synchronous write is complete, long-term memory retrieval is still subject to a brief index refresh delay.
Short-term memory query
The ListMemoryStoreMessages operation queries original session messages. You must specify all four levels of the Scope: appId, tenantId, agentId, and runId. Wildcards are not supported.
Use cases:
View raw session messages.
Replay a specific session.
Troubleshoot long-term memory extraction issues.
CLI pagination behavior
The CLI's list commands return only a single page of results and do not automatically paginate. To retrieve the next page, use the nextToken from the response.
Example:
tablestore-agent-cli memory list-units \
--store agent_memory \
--app-id app-001 \
--next-token <token>CLI automatic instance creation
If ots_endpoint and ots_instance_name are not configured, the CLI automatically creates and reuses a managed Tablestore instance in the China North 2 (Beijing) region when you run the doctor command or perform other operations. The automatic creation takes some time, and the result is written to the local configuration file.
If you later manually configure the instance endpoint and name, the CLI will use that instance.
SDK versions
SDK | Version requirement |
Python SDK |
|
Node.js SDK |
|
CLI |
|
Agent plugin
By default, the Hermes and OpenClaw plugins use a cross-agent and cross-session scope for retrieval within the current tenant, that is, agentId=* and runId=*. If your application does not allow cross-agent or cross-session memory sharing, you can control the retrieval Scope by using the SDK or adjust the plugin configuration.