Who is this for?

This is an advanced topic for developers who want to extend OpenClaw into a customizable local-first assistant with persistent memory, document RAG, explicit browser search, deterministic routing, and proactive scheduling.

What will you learn?

After completing this Learning Path, you'll be able to perform the following tasks:

  • Explain the local and external data boundaries of an OpenClaw-based runtime.
  • Deploy and validate the reference runtime with local vLLM inference on NVIDIA DGX Spark.
  • Verify persistent memory, document RAG, explicit browser search, deterministic routing, and proactive scheduling with Telegram and Qdrant.
  • Optionally move the same application workflows to a CPU-only Armv9 system through an OpenAI-compatible llama.cpp endpoint.

Prerequisites

Before starting, you'll need the following prerequisites:

  • An NVIDIA DGX Spark system with NVIDIA drivers, Docker and NVIDIA Container Toolkit
  • Administrative access on DGX Spark
  • Access to Telegram through a mobile, desktop, or web client
  • Familiarity with Linux, Docker Compose, and command-line tools
  • (Optional) A Radxa Orion O6 or comparable CPU-only Armv9 system running Debian 12, Docker, and at least 30 GB of memory

Summary

AI-assisted

This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
You’ll extend OpenClaw into a local-first assistant that runs across Arm platforms with local inference and explicit external-data boundaries. First, you’ll prepare a DGX Spark with Docker, Ollama, Qdrant, and vLLM. Then, you’ll validate memory and document RAG, browser search, weather, routing, and scheduled notifications. You can optionally move the same workflows to a CPU-only Armv9 system with an OpenAI-compatible llama.cpp endpoint.

Frequently asked questions

AI-assisted

These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.

Close
?
What should I check on the DGX Spark host before starting the containers?
Run uname -m and confirm the architecture is aarch64. Use nvidia-smi to verify GPU visibility, then run docker run --rm --gpus all ubuntu nvidia-smi to confirm GPU access from containers.
How do I get the Telegram bot token and chat ID for the runtime configuration?
Start a chat with BotFather, send /newbot, and copy the HTTP API token it returns. Send a test message to your new bot, call curl "https://api.telegram.org/bot<your-telegram-bot-token>/getUpdates", and copy message.chat.id. Set both values in .env before starting the services.
How do I know that local memory persistence is working?
Send /mem #home The boiler should be inspected every October. in Telegram, then ask /rag memory: When should the boiler be inspected?. You should see October in the response. Confirm the record directly in the personal_tracker_memory Qdrant collection with the documented payload query.
Where do I upload documents for RAG, and how can I confirm ingestion?
Create the file on the device running your Telegram client and upload it with the /knowledge caption. Copy the returned filename, wait for indexing, and ask /rag <returned-file-name> a question about the file. Check the personal_knowledge_base Qdrant payload for that filename to confirm ingestion.
How do I verify that proactive scheduling is active?
Create a job with /cron add, confirm it’s enabled with /cron list, and wait for the configured time. Check Telegram for the notification and inspect docker logs --tail 30 openclaw-cron for the [cron] dynamic job sent entry. You can use /cron run <job-id> to test the job without waiting.
Next