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?

Upon completion of this Learning Path, you will be able to:

  • 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 will need the following:

  • 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