Building Custom AI Skills with InstructLab Taxonomy
Create domain-specific AI capabilities using InstructLab's taxonomy system—from writing skill definitions to generating synthetic training data and validating fine-tuned models.
OpenClaw agents can search their own memory notes using hybrid search — a combination of:
By blending both approaches, hybrid search retrieves results that are both semantically relevant and keyword-precise. This is critical for long-running agents that accumulate knowledge across many sessions.
Agent query → Hybrid search engine
├─ Vector path (0.7 weight)
│ └─ all-MiniLM-L6-v2 embeddings
│ └─ Cosine similarity ranking
└─ Text path (0.3 weight)
└─ Full-text keyword matching
→ Merged & re-ranked candidates
→ Top results returned to agentAll settings live under agents.defaults.memorySearch. Here’s the complete setup from a real Azure deployment:
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.provider localThe local provider runs embeddings on the gateway container itself — no external API calls, no data leaving your VM.
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.model all-MiniLM-L6-v2all-MiniLM-L6-v2 is a sentence-transformer model optimized for:
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.local.modelPath \
sentence-transformers/all-MiniLM-L6-v2This tells the local provider where to find (or download) the model. On first run, the gateway downloads it from the Hugging Face model hub.
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.query.hybrid.enabled trueThe vector and text weights control how much each search path contributes to the final ranking:
# Semantic similarity gets 70% weight
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.query.hybrid.vectorWeight 0.7
# Keyword matching gets 30% weight
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.query.hybrid.textWeight 0.3| Weight Split | Best For |
|---|---|
| 0.9 vector / 0.1 text | Conversational queries, fuzzy recall |
| 0.7 vector / 0.3 text | General-purpose (recommended) |
| 0.5 vector / 0.5 text | Balanced, when exact terms matter |
| 0.3 vector / 0.7 text | Technical docs with specific jargon |
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.query.hybrid.candidateMultiplier 4The candidate multiplier controls how many raw candidates each search path retrieves before fusion. With a multiplier of 4, if you request 10 results, each path fetches 40 candidates — giving the re-ranker more material to work with.
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.cache.enabled true
docker compose run --rm openclaw-cli config set \
agents.defaults.memorySearch.cache.maxEntries 50000The cache stores computed embeddings so identical queries don’t need re-embedding. With 50000 entries and 384-dimensional vectors, the cache uses roughly 50,000 × 384 × 4 bytes ≈ 73 MB. That’s well within the 2 GB RAM of an Azure B2s VM.
docker compose restart openclaw-gatewayAfter applying all settings, check the gateway logs for config reload confirmations:
docker logs openclaw-openclaw-gateway-1 | grep -i "memorySearch"You should see sequential reload entries for each setting:
[reload] config change detected; evaluating reload
(meta.lastTouchedAt, agents.defaults.memorySearch)
[reload] config change applied (dynamic reads:
meta.lastTouchedAt, agents.defaults.memorySearch)
[reload] config change detected; evaluating reload
(meta.lastTouchedAt, agents.defaults.memorySearch.model)
[reload] config change applied (dynamic reads:
meta.lastTouchedAt, agents.defaults.memorySearch.model)
[reload] config change detected; evaluating reload
(meta.lastTouchedAt, agents.defaults.memorySearch.local)
...Each pair confirms the gateway detected and applied the change dynamically.
After completing all steps, the config section looks like:
{
"agents": {
"defaults": {
"memorySearch": {
"provider": "local",
"model": "all-MiniLM-L6-v2",
"local": {
"modelPath": "sentence-transformers/all-MiniLM-L6-v2"
},
"query": {
"hybrid": {
"enabled": true,
"vectorWeight": 0.7,
"textWeight": 0.3,
"candidateMultiplier": 4
}
},
"cache": {
"enabled": true,
"maxEntries": 50000
}
}
}
}
}| Property | Value |
|---|---|
| Architecture | 6-layer MiniLM (distilled BERT) |
| Output dimensions | 384 |
| Max sequence length | 256 tokens |
| Model size | ~80 MB |
| Speed | ~14,000 sentences/sec on CPU |
| Quality | Competitive with larger models for retrieval tasks |
The model is downloaded once and cached inside the Docker container’s filesystem. On an Azure B2s VM with 2 vCPUs, expect first-run download to take 30–60 seconds.
candidateMultiplier: 2 is sufficientcandidateMultiplier: 4-8 improves recallmaxEntries| Component | Approximate RAM |
|---|---|
| Gateway base | ~200 MB |
| MiniLM-L6-v2 model | ~80 MB |
| Embedding cache (50K entries) | ~73 MB |
| SQLite index | ~10–50 MB |
| Total | ~363–403 MB |
This leaves roughly 1.6 GB for the OS and other containers — comfortable but monitor with docker stats.
Model download fails:
docker exec -it openclaw-openclaw-gateway-1 sh -lc 'wget -q --spider https://huggingface.co && echo OK'Embeddings seem wrong:
model and local.modelPath match (both should reference all-MiniLM-L6-v2)docker compose run --rm openclaw-cli config set agents.defaults.memorySearch.cache.enabled false then re-enableSearch returns no results:
docker exec -it openclaw-openclaw-gateway-1 sh -lc 'ls -la /home/node/.openclaw/memory/notes'AI & Cloud Advisor with 18+ years experience. Author of 8 technical books, creator of Ansible Pilot. Speaker at KubeCon EU & Red Hat Summit 2026.
Create domain-specific AI capabilities using InstructLab's taxonomy system—from writing skill definitions to generating synthetic training data and validating fine-tuned models.
How to access the OpenClaw Control UI dashboard from an Azure VM — via SSH tunnel (secure) or public IP. Covers device pairing, dashboard authentication, and the browser-based management interface.
End-to-end guide to building a complete persistent memory system for your OpenClaw AI agent. Combine memory flush, hybrid search, file-backed notes, SQLite indexing, and session hooks into a cohesive knowledge architecture.