Quick Start
Get the plugin running and test the memory loop in a few minutes.
- Prerequisites
- OpenClaw
>=2026.3.11installed and running
You also need a delegate key, account ID, and relayer URL from Walrus Memory. Get your Walrus Memory credentials explains how to get these.
Install the plugin
openclaw plugins install @mysten-incubation/oc-memwal
Get your Walrus Memory credentials
The plugin needs three values to connect to Walrus Memory:
| Value | What it is |
|---|---|
| Delegate key | A private key (64-character hex) used to sign requests and encrypt memories |
| Account ID | Your MemWalAccount object ID on Sui (0x...) |
| Relayer URL | The Walrus Memory relayer endpoint that handles search, storage, and encryption |
The easiest way to get your delegate key and account ID is through the Walrus Memory dashboard. See the main Quick Start for detailed setup instructions.
For the relayer URL, use a managed endpoint or deploy your own:
| Environment | Relayer URL |
|---|---|
| Production (Mainnet) | https://relayer.memory.walrus.xyz |
| Staging (Testnet) | https://relayer.dev.memwal.ai |
Walrus Foundation provides these managed relayer endpoints as a public good.
Set your delegate key
Store your delegate key as an environment variable so you never hardcode it in config files:
# Add to your shell profile (.zshrc, .bashrc, etc.)
export MEMWAL_PRIVATE_KEY="your-64-char-hex-key"
Configure OpenClaw
Add the plugin config to ~/.openclaw/openclaw.json:
{
"plugins": {
"slots": { "memory": "memory-memwal" },
"entries": {
"memory-memwal": {
"enabled": true,
// Required for auto-capture. OpenClaw blocks the agent_end hook for
// non-bundled plugins unless conversation access is granted here.
"hooks": { "allowConversationAccess": true },
"config": {
"privateKey": "${MEMWAL_PRIVATE_KEY}", // References the env var
"accountId": "0x3247e3da...", // Your account ID from the dashboard
"serverUrl": "https://relayer.dev.memwal.ai" // Or your self-hosted relayer
}
}
}
}
}
The config key is memory-memwal, the plugin's manifest ID, not the npm
package name oc-memwal. The installer reports this as
using manifest id as the config key. Using oc-memwal leaves the plugin
unbound, and it never loads.
hooks.allowConversationAccess is equally load-bearing. Without it, OpenClaw
logs typed hook "agent_end" blocked at startup and auto-capture silently
never runs, even though the gateway reports the plugin as connected.
Optional settings
You can add these to the config block to tune behavior. The defaults work well for most setups.
| Option | Default | Description |
|---|---|---|
autoRecall | true | Inject relevant memories before each turn |
autoCapture | true | Extract and store facts after each turn |
maxRecallResults | 5 | Maximum memories to inject per turn |
minRelevance | 0.3 | Relevance threshold (0-1) for memory injection |
captureMaxMessages | 10 | How many recent messages to analyze for facts |
defaultNamespace | "default" | Memory scope for the main agent |
requestTimeoutMs | 10000 | Deadline in ms for each relayer call. Raise it for a slow self-hosted relayer. |
Start OpenClaw
openclaw gateway stop && openclaw gateway
You should see in the logs:
memory-memwal: registered (server: https://..., key: e21d...ed9b, namespace: default)
memory-memwal: connected (status: ok, version: ...)
If you see health check failed, check that your relayer URL is reachable and that you set the MEMWAL_PRIVATE_KEY environment variable.
Check connectivity
Run the stats command to confirm the plugin is connected:
Source: openclaw/quick-start.md$ openclaw memwal stats
This shows the relayer status, your key (masked), account ID, active namespace, and whether auto-recall and auto-capture are enabled.
Test the memory loop
The core value of the plugin is the automatic recall and capture cycle. Test it end-to-end:
1. Store a fact, start a conversation and share something memorable:
Source: openclaw/quick-start.mdYou: I prefer TypeScript over JavaScript for backend work
Bot: (responds normally)
Check logs, you should see: Source: openclaw/quick-start.md
memory-memwal: auto-captured 1 facts (agent: main, namespace: default)
2. Recall it, in a new conversation, ask about it:
Source: openclaw/quick-start.mdYou: What programming languages do I like?
Check logs, you should see: Source: openclaw/quick-start.md
memory-memwal: auto-recall injected 1 memories (agent: main, namespace: default)
3. Search from terminal, confirm the memory exists through CLI:
Source: openclaw/quick-start.md$ openclaw memwal search "programming"
If all three steps work, the plugin is fully operational.
Enable LLM tools (optional)
By default, the plugin works entirely through hooks, and the large language model (LLM) doesn't know about memory tools. To give the LLM explicit control, add tools to your agent profile:
Source: openclaw/quick-start.md{
"tools": {
"allow": ["memory_search", "memory_store"]
}
}
Then the LLM can call memory_search and memory_store on its own when it decides to. This is a power-user feature, hooks handle the common case automatically.
Next steps
- How It Works, understand the architecture, message flow, and hook mechanics
- Reference, detailed breakdown of hooks, tools, CLI, and configuration
Troubleshoot missing auto-capture
If openclaw memwal stats reports the plugin as connected but the logs never show auto-captured, check the following:
- Confirm
autoCaptureistruein theconfigblock. This is the default. - Share a substantive fact. Capture skips trivial messages, such as messages under 30 characters and filler replies like ok or thanks.
- Search the logs for
auto-capture skippedorauto-capture failedmessages. - Search the startup logs for
typed hook "agent_end" blocked, which meanshooks.allowConversationAccessis missing. See Configure OpenClaw.
Which config key sets the relayer URL?
The plugin reads the relayer URL from the serverUrl field in the config block. Only privateKey expands ${ENV_VAR} references. The plugin keeps serverUrl and every other field literal, so a secret cannot land in serverUrl. Write the full relayer URL as the value instead of an environment variable reference.