--- title: HuggingClaw emoji: 🦞 colorFrom: blue colorTo: purple sdk: docker app_port: 7861 pinned: true license: mit secrets: - name: LLM_API_KEY description: "Your LLM provider API key (e.g. Anthropic, OpenAI, Google, OpenRouter)." - name: LLM_MODEL description: "Model ID to use, e.g. google/gemini-2.5-flash or openai/gpt-4o." - name: GATEWAY_TOKEN description: "Strong token to secure your OpenClaw Control UI (generate: openssl rand -hex 32)." - name: CLOUDFLARE_WORKERS_TOKEN description: "Cloudflare API token β€” auto-creates a Worker proxy and KeepAlive monitor." - name: TELEGRAM_ALLOWED_USERS description: "Comma-separated Telegram user IDs for access" - name: TELEGRAM_BOT_TOKEN description: "Telegram bot token from BotFather" - name: HF_TOKEN description: "HuggingFace token with Write access β€” enables automatic workspace backup." - name: WHATSAPP_ENABLED description: "Set to 'true' to enable WhatsApp pairing support." --- [![GitHub Stars](https://img.shields.io/github/stars/somratpro/huggingclaw?style=flat-square)](https://github.com/somratpro/huggingclaw) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT) [![HF Space](https://img.shields.io/badge/πŸ€—%20HuggingFace-Space-blue?style=flat-square)](https://huggingface.co/spaces) [![OpenClaw](https://img.shields.io/badge/OpenClaw-Gateway-red?style=flat-square)](https://github.com/openclaw/openclaw) **Your always-on AI assistant β€” free, no server needed.** HuggingClaw runs [OpenClaw](https://openclaw.ai) on HuggingFace Spaces, giving you a 24/7 AI chat assistant on Telegram and WhatsApp. It works with *any* large language model (LLM) – Claude, ChatGPT, Gemini, etc. – and even supports custom models via [OpenRouter](https://openrouter.ai). Deploy in minutes on the free HF Spaces tier (2 vCPU, 16GB RAM, 50GB) with automatic workspace backup to a HuggingFace Dataset so your chat history and settings persist across restarts. ## Table of Contents - [✨ Features](#-features) - [πŸŽ₯ Video Tutorial](#-video-tutorial) - [πŸš€ Quick Start](#-quick-start) - [πŸ“± Telegram Setup *(Optional)*](#-telegram-setup-optional) - [🌐 Cloudflare Proxy *(Optional)*](#-cloudflare-proxy-optional) - [πŸ’¬ WhatsApp Setup *(Optional)*](#-whatsapp-setup-optional) - [πŸ’Ύ Workspace Backup *(Optional)*](#-workspace-backup-optional) - [πŸ”” Webhooks *(Optional)*](#-webhooks-optional) - [πŸ” Security & Advanced *(Optional)*](#-security--advanced-optional) - [πŸ”‘ API Key Rotation *(Optional)*](#-api-key-rotation-optional) - [πŸ€– LLM Providers](#-llm-providers) - [πŸ’» Local Development](#-local-development) - [πŸ”— CLI Access](#-cli-access) - [πŸ—οΈ Architecture](#-architecture) - [πŸ’“ Staying Alive](#-staying-alive) - [πŸ› Troubleshooting](#-troubleshooting) - [πŸ“š Links](#-links) - [🀝 Contributing](#-contributing) - [πŸ“„ License](#-license) ## ✨ Features - πŸ”Œ **Any LLM:** Use Claude, OpenAI GPT, Google Gemini, Grok, DeepSeek, Qwen, and 40+ providers (set `LLM_API_KEY` and `LLM_MODEL` accordingly). - πŸ”‘ **Multi-Key Rotation:** Supply comma-separated key pools per provider (e.g. `ANTHROPIC_API_KEYS=key1,key2,key3`) for automatic round-robin rotation across rate limits. - ⚑ **Zero Config:** Duplicate this Space and set **just three** secrets (LLM_API_KEY, LLM_MODEL, GATEWAY_TOKEN) – no other setup needed. - 🐳 **Fast Builds:** Uses a pre-built OpenClaw Docker image to deploy in minutes. - 🌐 **Cloudflare Outbound Proxy:** HuggingClaw can automatically provision a Cloudflare Worker proxy for blocked outbound traffic such as Telegram API requests. - πŸ’Ύ **Workspace Backup:** Chats, settings, and WhatsApp session state sync to a private HF Dataset via the `huggingface_hub`, preserving data automatically without storing your HF token in a git remote. - ⏰ **Easy Keep-Alive:** Uses `CLOUDFLARE_WORKERS_TOKEN` to automatically set up a cron-triggered keep-awake worker at boot. - πŸ‘₯ **Multi-User Messaging:** Support for Telegram (multi-user) and WhatsApp (pairing). - πŸ“Š **Visual Dashboard:** Beautiful Web UI to monitor uptime, sync status, and active models. - πŸ”” **Webhooks:** Get notified on restarts or backup failures via standard webhooks. - πŸ” **Flexible Auth:** Secure the Control UI with either a gateway token or password. - 🏠 **100% HF-Native:** Runs entirely on HuggingFace’s free infrastructure (2 vCPU, 16GB RAM). ## πŸŽ₯ Video Tutorial Watch a quick walkthrough on YouTube: [Deploying HuggingClaw on HF Spaces](https://www.youtube.com/watch?v=S6pl7NmjX7g&t=73s). ## πŸš€ Quick Start ### Step 1: Duplicate this Space [![Duplicate this Space](https://huggingface.co/datasets/huggingface/badges/resolve/main/duplicate-this-space-xl.svg)](https://huggingface.co/spaces/somratpro/HuggingClaw?duplicate=true) Click the button above to duplicate the template. ### Step 2: Add Your Secrets Navigate to your new Space's **Settings**, scroll down to the **Variables and secrets** section, and add the following three under **Secrets**: - `LLM_API_KEY` – Your provider API key (e.g., Anthropic, OpenAI, OpenRouter). - `LLM_MODEL` – The model ID string you wish to use (e.g., `openai/gpt-4o` or `google/gemini-2.5-flash`). - `GATEWAY_TOKEN` – A custom password or token to secure your Control UI. *(You can use any strong password, or generate one with `openssl rand -hex 32` if you prefer).* > [!TIP] > HuggingClaw is completely flexible! You only need these three secrets to get started. You can set other secrets later. Optional: if you want to pin a specific OpenClaw release instead of `latest`, add `OPENCLAW_VERSION` under **Variables** in your Space settings. For Docker Spaces, HF passes Variables as build args during image build, so this should be a Variable, not a Secret. ### Step 3: Deploy & Run That's it! The Space will build the container and start up automatically. You can monitor the build process in the **Logs** tab. ### Step 4: Monitor & Manage HuggingClaw features a built-in dashboard to track: - **Uptime:** Real-time uptime monitoring. - **Sync Status:** Visual indicators for workspace backup operations. - **Chat Status:** Real-time connection status for WhatsApp and Telegram. - **Model Info:** See which LLM is currently powering your assistant. ## πŸ“± Telegram Setup *(Optional)* To chat via Telegram: 1. Create a bot via [@BotFather](https://t.me/BotFather): send `/newbot`, follow prompts, and copy the bot token. 2. Find your Telegram user ID with [@userinfobot](https://t.me/userinfobot). 3. Add `CLOUDFLARE_WORKERS_TOKEN` in Space secrets to let HuggingClaw auto-provision the outbound proxy, or set `CLOUDFLARE_PROXY_URL` manually if you already have a Worker. 4. Add these secrets in Settings β†’ Secrets. After restarting, the bot should appear online on Telegram. | Variable | Default | Description | | :--- | :--- | :--- | | `TELEGRAM_BOT_TOKEN` | β€” | Telegram bot token from BotFather | | `TELEGRAM_ALLOWED_USERS` | β€” | Comma-separated Telegram user IDs for access | ## 🌐 Cloudflare Proxy Setup Hugging Face Free Tier often restricts outbound connections to services like Telegram, Discord, and WhatsApp. HuggingClaw solves this with a **Transparent Outbound Proxy** via Cloudflare Workers. ### ⚑ Automatic Setup (Recommended) This is the easiest way. HuggingClaw will handle the deployment for you. 1. Create a **Cloudflare API Token**: - Go to [API Tokens](https://dash.cloudflare.com/profile/api-tokens). - Create Token -> **Edit Cloudflare Workers** template. - Ensure it has `Account: Workers Scripts: Edit` permissions. 2. Add the token as a secret named `CLOUDFLARE_WORKERS_TOKEN` in your Space Settings. **What happens next?** - HuggingClaw automatically creates a Worker named after your Space host. - It generates a secure, private `CLOUDFLARE_PROXY_SECRET`. - All restricted outbound traffic is automatically routed through this Worker. ## πŸ’¬ WhatsApp Setup *(Optional)* To use WhatsApp, enable the channel and scan the QR code from the Control UI (**Channels** β†’ **WhatsApp** β†’ **Login**): | Variable | Default | Description | | :--- | :--- | :--- | | `WHATSAPP_ENABLED` | `false` | Enable WhatsApp pairing support | ## πŸ’Ύ Workspace Backup *(Optional)* HuggingClaw automatically syncs your workspace (chats, settings, sessions) to a private HF Dataset named `huggingclaw-backup`. - **Persistence:** Survived restarts and restores your state on boot. - **WhatsApp:** Stores session credentials so you don't have to scan the QR code every time. - **Interval:** Syncs every 3 minutes by default. | Variable | Default | Description | | :--- | :--- | :--- | | `HF_TOKEN` | β€” | HF token with **Write** access | | `SYNC_INTERVAL` | `180` | Backup frequency in seconds | ## πŸ“¦ Ephemeral Package Re-install *(Optional)* Yes β€” you can use extra packages after a Space restart without storing package files. The easiest option is to remember **one variable**: | Variable | What to put in it | | :--- | :--- | | `HUGGINGCLAW_RUN` | Any bash commands you want to run on every startup | Example: ```bash HUGGINGCLAW_RUN=""" set -e sudo apt-get update sudo apt-get install -y ffmpeg python3 -m pip install --user pandas requests npm install -g typescript """ ``` For very quote-heavy or strange scripts, put a base64 script in the same variable: ```bash # locally base64 -w0 setup.sh # HF Variable HUGGINGCLAW_RUN=base64: ``` How it works: 1. `HUGGINGCLAW_RUN` is run as a full bash script on every boot before the OpenClaw gateway launches, so multi-line commands, `if`, loops, functions, and heredocs work. Long installs will delay gateway startup. 2. Startup scripts load the same HuggingClaw shell wrappers as the interactive shell, so `apt install ...`, `pip install ...`, `npm install -g ...`, and `openclaw plugins install ...` behave consistently. 3. OpenClaw plugins installed at startup are synced into `plugins.allow` before the gateway launches, so the gateway can load them instead of reporting them as not installed. 4. If you install from the OpenClaw shell manually, HuggingClaw records only successful install commands in `/home/node/.openclaw/workspace/startup.sh` for replay. Failed or dummy commands are not saved by the wrapper. 5. Package files are not persisted; commands are replayed to reconstruct them after restart. Errors are always printed as `ERROR:` lines in Space logs. By default HuggingClaw logs the error and continues booting; set `HUGGINGCLAW_STARTUP_STRICT=true` if the Space should fail fast when any startup install command fails. Advanced/backward-compatible variables still work if you prefer package-specific fields: `HUGGINGCLAW_APT_PACKAGES`, `HUGGINGCLAW_PIP_PACKAGES`, `HUGGINGCLAW_NPM_PACKAGES`, `HUGGINGCLAW_OPENCLAW_PLUGINS`, `HUGGINGCLAW_STARTUP_COMMANDS`, `HUGGINGCLAW_STARTUP_COMMAND_1`...`100`, `HUGGINGCLAW_STARTUP_SCRIPT`, and `HUGGINGCLAW_STARTUP_SCRIPT_B64`. > [!IMPORTANT] > `sudo` is available for package-manager commands only (`apt`, `apt-get`, and `dpkg`). This is enough for `sudo apt-get update` and `sudo apt-get install -y ...`, but it is not unrestricted root access. Apt-installed packages still disappear on Space restart, so put them in `HUGGINGCLAW_RUN` or let the shell wrapper record the command in `startup.sh`. ## πŸ’“ Staying Alive *(Recommended on Free HF Spaces)* Your Space will automatically be kept awake by a background Cloudflare Worker when you configure the `CLOUDFLARE_WORKERS_TOKEN` secret. The worker uses a cron trigger to regularly ping your Space's `/health` endpoint. The dashboard displays the current keep-alive worker status. ## πŸ”” Webhooks *(Optional)* Get notified when your Space restarts or if a backup fails: | Variable | Default | Description | | :--- | :--- | :--- | | `WEBHOOK_URL` | β€” | Endpoint URL for POST JSON notifications | ## πŸ” Security & Advanced *(Optional)* Configure password access and network restrictions: | Variable | Default | Description | | :--- | :--- | :--- | | `OPENCLAW_PASSWORD` | β€” | Enable simple password auth instead of token | | `TRUSTED_PROXIES` | β€” | Comma-separated IPs of HF proxies | | `ALLOWED_ORIGINS` | β€” | Comma-separated allowed origins for Control UI | | `CLOUDFLARE_KEEPALIVE_ENABLED` | `true` | Set to `false` to disable the automatic Cloudflare KeepAlive worker | ## πŸ”‘ API Key Rotation *(Optional)* Spread requests across multiple API keys to avoid rate limits. Supply a comma-separated pool for any provider β€” keys rotate round-robin per provider independently. ```bash # Single provider, multiple keys ANTHROPIC_API_KEYS=sk-ant-key1,sk-ant-key2,sk-ant-key3 # Multiple providers simultaneously OPENAI_API_KEYS=sk-openai-key1,sk-openai-key2 GEMINI_API_KEYS=AIza-key1,AIza-key2 ``` **Fallback chain** (per provider): 1. `{PROVIDER}_API_KEYS` β€” comma-separated pool *(preferred)* 2. `{PROVIDER}_API_KEY` β€” single dedicated key 3. `LLM_API_KEY` β€” universal fallback *(default for all providers)* > [!TIP] > If you only set `LLM_API_KEY`, all providers use it as a fallback automatically β€” no extra config needed. Add per-provider pools only when you need multi-key rotation. Supported per-provider variables: `ANTHROPIC_API_KEYS`, `OPENAI_API_KEYS`, `GEMINI_API_KEYS`, `DEEPSEEK_API_KEYS`, `GROQ_API_KEYS`, `MISTRAL_API_KEYS`, `OPENROUTER_API_KEYS`, `XAI_API_KEYS`, `NVIDIA_API_KEYS`, `COHERE_API_KEYS`, `TOGETHER_API_KEYS`, `CEREBRAS_API_KEYS`, and more β€” see `.env.example` for the full list. ## πŸ€– LLM Providers HuggingClaw supports **all providers** from OpenClaw. Set `LLM_MODEL=` and the provider is auto-detected.
Click to see supported providers and examples | Provider | Prefix | Example Model | | :--- | :--- | :--- | | **Anthropic** | `anthropic/` | `anthropic/claude-3-5-sonnet-latest` | | **OpenAI** | `openai/` | `openai/gpt-4o` | | **Google** | `google/` | `google/gemini-2.0-flash` | | **DeepSeek** | `deepseek/` | `deepseek/deepseek-chat` | | **xAI (Grok)** | `xai/` | `xai/grok-2-latest` | | **Mistral** | `mistral/` | `mistral/mistral-large-latest` | | **HuggingFace** | `huggingface/` | `huggingface/deepseek-ai/DeepSeek-R1` | | **OpenRouter** | `openrouter/` | `openrouter/anthropic/claude-3.5-sonnet` | *And many more: Cohere, Groq, NVIDIA, Mistral, Moonshot, etc.*
### Any Other Provider You can also use any custom provider: ```bash LLM_API_KEY=your_api_key LLM_MODEL=provider/model-name ``` The provider prefix in `LLM_MODEL` tells HuggingClaw how to call it. See [OpenClaw Model Providers](https://docs.openclaw.ai/concepts/model-providers) for the full list. ### Custom OpenAI-Compatible Provider Register a custom endpoint at startup without modifying the CLI. | Variable | Description | Default | | :--- | :--- | :--- | | `CUSTOM_PROVIDER_NAME` | Unique provider prefix (e.g., `modal`) | **Required** | | `CUSTOM_BASE_URL` | API base URL (e.g., `https://.../v1`) | **Required** | | `CUSTOM_MODEL_ID` | Model ID on the server | **Required** | | `LLM_MODEL` | Must match `{CUSTOM_PROVIDER_NAME}/{CUSTOM_MODEL_ID}` | **Required** | | `CUSTOM_API_KEY` | Provider-specific key | `LLM_API_KEY` | | `CUSTOM_CONTEXT_WINDOW` | Context limit | `128000` | > [!TIP] > `CUSTOM_PROVIDER_NAME` cannot override built-in providers (openai, anthropic, etc.). **Example (Modal):** ```bash CUSTOM_PROVIDER_NAME=modal CUSTOM_BASE_URL=https://api.us-west-2.modal.direct/v1 CUSTOM_MODEL_ID=zai-org/GLM-5.1-FP8 LLM_MODEL=modal/zai-org/GLM-5.1-FP8 ``` ## πŸ’» Local Development ```bash git clone https://github.com/somratpro/huggingclaw.git cd huggingclaw cp .env.example .env # Edit .env with your secret values ``` **With Docker:** ```bash docker build --build-arg OPENCLAW_VERSION=latest -t huggingclaw . docker run -p 7861:7861 --env-file .env huggingclaw ``` **Without Docker:** ```bash npm install -g openclaw@latest export $(cat .env | xargs) bash start.sh ``` ## πŸ”— CLI Access After deploying, you can connect via the OpenClaw CLI (e.g., to onboard channels or run agents): ```bash npm install -g openclaw@latest openclaw channels login --gateway https://YOUR_SPACE_NAME.hf.space # When prompted, enter your GATEWAY_TOKEN ``` ## πŸ—οΈ Architecture HuggingClaw uses a multi-layered approach to ensure stability and persistence on Hugging Face's ephemeral infrastructure.
Click to view technical details - **Dashboard (`/`)**: Management, monitoring, and keep-alive tools. - **Control UI (`/gateway`)**: Secure interface for managing agents and channels. - **Health Check (`/health`)**: Endpoint for uptime monitoring and readiness probes. - **Sync Engine**: Python background process managing HF Dataset persistence. - **Transparent Proxy**: Interceptor for requests to blocked domains (Telegram, etc.). **Startup sequence:** 1. Validate required secrets and check HF token. 2. Resolve backup namespace and restore workspace from HF Dataset. 3. Generate `openclaw.json` configuration. 4. Launch background tasks (auto-sync, channel helpers). 5. Start OpenClaw gateway and listen for connections.
## πŸ› Troubleshooting - **Missing secrets:** Ensure `LLM_API_KEY`, `LLM_MODEL`, and `GATEWAY_TOKEN` are set in your Space **Settings β†’ Secrets**. - **Telegram bot issues:** Verify your `TELEGRAM_BOT_TOKEN`. Check Space logs for lines like `πŸ“± Enabling Telegram`. - **Backup restore failing:** Make sure `HF_TOKEN` is valid and has write access to your HF account dataset. Set `HF_USERNAME` only if auto-detection is not available in your environment. - **Space keeps sleeping:** Add `CLOUDFLARE_WORKERS_TOKEN` as a Space secret to enable automatic keep-awake monitoring via Cloudflare Workers. - **Auth errors / proxy:** If you see reverse-proxy auth errors, add the logged IPs under `TRUSTED_PROXIES` (from logs `remote=x.x.x.x`). - **Control UI says too many failed authentication attempts:** Wait for the retry window to expire, then open the Space in an incognito window or clear site storage for your Space before logging in again with `GATEWAY_TOKEN`. - **WhatsApp lost its session after restart:** Make sure `HF_TOKEN` is configured so the hidden session backup can be restored on boot. - **UI blocked (CORS):** Set `ALLOWED_ORIGINS=https://your-space-name.hf.space`. - **Version mismatches:** Pin a specific OpenClaw build with the `OPENCLAW_VERSION` Variable in HF Spaces, or `--build-arg OPENCLAW_VERSION=...` locally. ## 🌟 More Projects Similar projects by [@somratpro](https://github.com/somratpro) β€” all free, one-click deploy on HF Spaces: | Project | What it runs | HF Space | GitHub | | :--- | :--- | :--- | :--- | | **HuggingFlow** | DeerFlow β€” deep research agent | [Space](https://huggingface.co/spaces/somratpro/HuggingFlow) | [Repo](https://github.com/somratpro/HuggingFlow) | | **HuggingMes** | Hermes β€” Self-hosted agent gateway | [Space](https://huggingface.co/spaces/somratpro/HuggingMes) | [Repo](https://github.com/somratpro/huggingmes) | | **Hugging8n** | n8n β€” workflow & automation platform | [Space](https://huggingface.co/spaces/somratpro/Hugging8n) | [Repo](https://github.com/somratpro/hugging8n) | | **HuggingClip** | Paperclip β€” AI agent orchestration platform | [Space](https://huggingface.co/spaces/somratpro/HuggingClip) | [Repo](https://github.com/somratpro/huggingclip) | | **HuggingPost** | Postiz β€” social media scheduler | [Space](https://huggingface.co/spaces/somratpro/HuggingPost) | [Repo](https://github.com/somratpro/HuggingPost) | ## πŸ“š Links - [OpenClaw Docs](https://docs.openclaw.ai) - [OpenClaw GitHub](https://github.com/openclaw/openclaw) - [HuggingFace Spaces Docs](https://huggingface.co/docs/hub/spaces) ## ❀️ Support If HuggingClaw saves you time, consider buying me a coffee to keep the projects alive! **USDT (TRC-20 / TRON network only)** ``` TELx8TJz1W1h7n6SgpgGNNGZXpJCEUZrdB ``` > [!WARNING] > Send **USDT on TRC-20 network only**. Sending other tokens or using a different network will result in permanent loss. ## 🀝 Contributing Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. ## πŸ“„ License MIT β€” see [LICENSE](LICENSE) for details. *Made with ❀️ by [@somratpro](https://github.com/somratpro) for the OpenClaw community.*