<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: 1Richter</title>
    <description>The latest articles on Forem by 1Richter (@1richter).</description>
    <link>https://forem.com/1richter</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3734922%2Fee19379b-5605-4101-b557-cf446b0086b0.png</url>
      <title>Forem: 1Richter</title>
      <link>https://forem.com/1richter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/1richter"/>
    <language>en</language>
    <item>
      <title>Self-Hosted AI Assistant: Complete Moltbot Installation Guide for Docker</title>
      <dc:creator>1Richter</dc:creator>
      <pubDate>Wed, 28 Jan 2026 15:30:00 +0000</pubDate>
      <link>https://forem.com/1richter/self-hosted-ai-assistant-complete-moltbot-installation-guide-for-docker-558a</link>
      <guid>https://forem.com/1richter/self-hosted-ai-assistant-complete-moltbot-installation-guide-for-docker-558a</guid>
      <description>&lt;p&gt;&lt;strong&gt;Run your own ChatGPT-like AI assistant on WhatsApp, Telegram, and Discord with complete privacy and control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Are you looking for a &lt;strong&gt;self-hosted AI assistant&lt;/strong&gt; that gives you the power of ChatGPT, Claude, and Gemini without sacrificing your privacy? Moltbot is an &lt;strong&gt;open-source AI gateway&lt;/strong&gt; that lets you deploy your own AI chatbot on &lt;strong&gt;Docker&lt;/strong&gt; and connect it to &lt;strong&gt;WhatsApp&lt;/strong&gt;, &lt;strong&gt;Telegram&lt;/strong&gt;, &lt;strong&gt;Discord&lt;/strong&gt;, &lt;strong&gt;Slack&lt;/strong&gt;, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lrichter.net/en/projects/moltbot" rel="noopener noreferrer"&gt;In this comprehensive guide&lt;/a&gt;, I'll walk you through installing Moltbot with &lt;strong&gt;Docker Compose&lt;/strong&gt;, configuring it for maximum security, and solving common issues I encountered during my own deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Moltbot? Open-Source AI Assistant for Self-Hosting
&lt;/h2&gt;

&lt;p&gt;Moltbot is a &lt;strong&gt;privacy-first AI assistant&lt;/strong&gt; that runs entirely on your own infrastructure. Unlike cloud-based AI services, Moltbot gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complete data privacy&lt;/strong&gt; - all conversations stay on your server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-platform support&lt;/strong&gt; - WhatsApp, Telegram, Discord, Slack, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple AI models&lt;/strong&gt; - Google Gemini, OpenAI GPT-4, Anthropic Claude, GitHub Copilot&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker-native deployment&lt;/strong&gt; - easy installation with Docker Compose&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full customization&lt;/strong&gt; - extend with plugins, skills, and custom tools&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🔒 Privacy-First&lt;/strong&gt;: All data stays on your server - no third-party cloud services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌐 Multi-Channel&lt;/strong&gt;: WhatsApp, Telegram, Discord, Slack, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🤖 Multi-Model&lt;/strong&gt;: Google Gemini, OpenAI GPT, Anthropic Claude, GitHub Copilot, and others&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🛠️ Extensible&lt;/strong&gt;: Plugins for browser automation, shell access, memory, and custom tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📱 Mobile-Ready&lt;/strong&gt;: Full AI capabilities right from your phone via WhatsApp&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🐳 Docker-Native&lt;/strong&gt;: Easy deployment with Docker Compose&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔐 Secure&lt;/strong&gt;: Built-in sandboxing, approval workflows, and access controls&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Choose Moltbot Over Cloud AI Services?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For Beginners: Easy Self-Hosted AI Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero AI API costs&lt;/strong&gt;: Use free tiers (Google Gemini) or your existing GitHub Copilot subscription or ollama&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple Docker installation&lt;/strong&gt;: One &lt;code&gt;docker compose up&lt;/code&gt; command to get started&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp AI integration&lt;/strong&gt;: Talk to your AI assistant like you're texting a friend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart security defaults&lt;/strong&gt;: Works out of the box with sensible privacy settings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No coding required&lt;/strong&gt;: Configure everything through JSON files&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  For Advanced Users: Full Infrastructure Control
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shell access via chat&lt;/strong&gt;: Execute Linux commands on your server from WhatsApp&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker container management&lt;/strong&gt;: Control containers, check logs, deploy services remotely&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom skills and plugins&lt;/strong&gt;: Extend with Python/Node.js scripts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser Automation&lt;/strong&gt;: Headless Chromium for web scraping and testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure as Code&lt;/strong&gt;: Manage your entire homelab via WhatsApp&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Install Moltbot with Docker Compose (Step-by-Step)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites for Self-Hosting Moltbot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt; and &lt;strong&gt;Docker Compose&lt;/strong&gt; installed&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Google API Key&lt;/strong&gt; (free tier available) or &lt;strong&gt;GitHub Copilot&lt;/strong&gt; subscription&lt;/li&gt;
&lt;li&gt;A phone number for &lt;strong&gt;WhatsApp Web&lt;/strong&gt; pairing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone or create your Moltbot directory&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/moltbot &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; ~/moltbot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;moltbot-gateway&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;moltbot:local&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.&lt;/span&gt;
      &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;CLAWDBOT_DOCKER_APT_PACKAGES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${CLAWDBOT_DOCKER_APT_PACKAGES}&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;HOME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/home/node&lt;/span&gt;
      &lt;span class="na"&gt;TERM&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;xterm-256color&lt;/span&gt;
      &lt;span class="na"&gt;CLAWDBOT_GATEWAY_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${CLAWDBOT_GATEWAY_TOKEN}&lt;/span&gt;
      &lt;span class="na"&gt;MOLTBOT_STATE_DIR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/home/node/.moltbot&lt;/span&gt;
      &lt;span class="na"&gt;CLAWDBOT_STATE_DIR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/home/node/.moltbot&lt;/span&gt;
      &lt;span class="na"&gt;GOOGLE_GENERATIVE_AI_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${GOOGLE_API_KEY}&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;${CLAWDBOT_CONFIG_DIR}:/home/node/.moltbot&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;${CLAWDBOT_WORKSPACE_DIR}:/home/node/clawd&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${CLAWDBOT_GATEWAY_PORT:-18789}:18789"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${CLAWDBOT_BRIDGE_PORT:-18790}:18790"&lt;/span&gt;
    &lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;node"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dist/index.js"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gateway"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--bind"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${CLAWDBOT_GATEWAY_BIND:-lan}"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--port"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${CLAWDBOT_GATEWAY_PORT:-18789}"&lt;/span&gt;
      &lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;.env&lt;/code&gt; file&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLAWDBOT_CONFIG_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;./config
&lt;span class="nv"&gt;CLAWDBOT_WORKSPACE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;./workspace
&lt;span class="nv"&gt;CLAWDBOT_GATEWAY_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;18789
&lt;span class="nv"&gt;CLAWDBOT_BRIDGE_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;18790
&lt;span class="nv"&gt;CLAWDBOT_GATEWAY_BIND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;lan
&lt;span class="nv"&gt;GOOGLE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_google_api_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a &lt;code&gt;Dockerfile&lt;/code&gt;&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:22-bookworm&lt;/span&gt;

&lt;span class="c"&gt;# Install Bun (required for build scripts)&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://bun.sh/install | bash
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; PATH="/root/.bun/bin:${PATH}"&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;corepack &lt;span class="nb"&gt;enable&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;ARG&lt;/span&gt;&lt;span class="s"&gt; CLAWDBOT_DOCKER_APT_PACKAGES=""&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="nv"&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;noninteractive apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  ca-certificates curl gnupg lsb-release &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/apt/keyrings &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/debian/gpg | gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.gpg &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; | &lt;span class="nb"&gt;tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="nv"&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;noninteractive apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--no-install-recommends&lt;/span&gt; docker-ce-cli &lt;span class="se"&gt;\
&lt;/span&gt;    libgbm1 libnss3 libasound2 libxss1 libxtst6 libatk1.0-0 libatk-bridge2.0-0 &lt;span class="se"&gt;\
&lt;/span&gt;    libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 &lt;span class="se"&gt;\
&lt;/span&gt;    libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 &lt;span class="se"&gt;\
&lt;/span&gt;    libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 &lt;span class="se"&gt;\
&lt;/span&gt;    libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 &lt;span class="se"&gt;\
&lt;/span&gt;    libxshmfence1 libwayland-client0 libwayland-cursor0 libwayland-egl1 &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  apt-get clean &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;  &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/apt/lists/&lt;span class="k"&gt;*&lt;/span&gt; /var/cache/apt/archives/&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# Clone Moltbot repository&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;git clone https://github.com/moltbot/moltbot.git /app

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ui/package.json ./ui/package.json&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; patches ./patches&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; scripts ./scripts&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pnpm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--frozen-lockfile&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;&lt;span class="nv"&gt;CLAWDBOT_A2UI_SKIP_MISSING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 pnpm build
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; CLAWDBOT_PREFER_PNPM=1&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pnpm ui:install
&lt;span class="k"&gt;RUN &lt;/span&gt;pnpm ui:build
&lt;span class="k"&gt;RUN &lt;/span&gt;pnpm dlx playwright &lt;span class="nb"&gt;install &lt;/span&gt;chromium

&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; NODE_ENV=production&lt;/span&gt;

&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; node&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "dist/index.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start Moltbot&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pair with WhatsApp&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway node dist/index.js channels login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scan the QR code with WhatsApp on your phone (Settings → Linked Devices → Link a Device).&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic Configuration (&lt;code&gt;config/moltbot.json&lt;/code&gt;)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"primary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"google/gemini-3-flash-preview"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"channels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"whatsapp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dmPolicy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pairing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowFrom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"+1234567890"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"groupPolicy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"allowlist"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gateway"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lan"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"profile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"safe"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tool Profiles
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;safe&lt;/code&gt;&lt;/strong&gt;: Read-only tools (recommended for beginners)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;standard&lt;/code&gt;&lt;/strong&gt;: Read + basic write operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;full&lt;/code&gt;&lt;/strong&gt;: Full shell access, Docker control, file editing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Browser Configuration
&lt;/h3&gt;

&lt;p&gt;To enable web browsing without API keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"clawd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"executablePath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/root/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"headless"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"noSandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common Issues &amp;amp; Solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Issue 1: WhatsApp Connection Fails
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: QR code doesn't appear or connection drops&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clear WhatsApp session and re-pair&lt;/span&gt;
docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /home/node/.moltbot/channels/whatsapp
docker compose restart moltbot-gateway
docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway node dist/index.js channels login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Issue 2: Browser Relay Not Connected
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: "Chrome extension relay is running, but no tab is connected"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: This happens when using the default &lt;code&gt;chrome&lt;/code&gt; profile (extension-based). Switch to the &lt;code&gt;clawd&lt;/code&gt; profile (Playwright):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaultProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"clawd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"executablePath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/root/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"headless"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"noSandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Issue 3: Permission Denied on Docker Socket
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: "Cannot connect to Docker daemon"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Mount the Docker socket and run as root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;moltbot-gateway&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/run/docker.sock:/var/run/docker.sock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Issue 4: Chromium Fails to Start
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: "Failed to start Chrome CDP on port 18800"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Enable &lt;code&gt;noSandbox&lt;/code&gt; mode (required when running as root):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"noSandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Issue 5: Port 18789 Already in Use
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: "Address already in use"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Change the gateway port in &lt;code&gt;.env&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;CLAWDBOT_GATEWAY_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;18790
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Issue 6: Sandbox Image Missing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom&lt;/strong&gt;: "Sandbox base image missing: moltbot-sandbox:bookworm-slim"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Build the sandbox image when prompted by &lt;code&gt;moltbot doctor&lt;/code&gt;, or disable sandboxing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agents"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"defaults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sandbox"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Plugins &amp;amp; Skills
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Built-in Plugins
&lt;/h3&gt;

&lt;h4&gt;
  
  
  WhatsApp (&lt;code&gt;@moltbot/whatsapp&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Connect to WhatsApp Web for personal and group messaging.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway node dist/index.js channels login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Memory (&lt;code&gt;@moltbot/memory&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Persistent conversation memory across sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: "Remember that my server IP is 192.168.1.100"&lt;/p&gt;

&lt;h4&gt;
  
  
  Copilot Proxy (&lt;code&gt;@moltbot/copilot-proxy&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Use GitHub Copilot models for free (requires Copilot subscription).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"entries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"copilot-proxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Skills
&lt;/h3&gt;

&lt;p&gt;Skills are lightweight scripts that extend Moltbot's capabilities.&lt;/p&gt;

&lt;h4&gt;
  
  
  Local Places (&lt;code&gt;local-places&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Search for nearby restaurants, cafes, etc. via Google Places API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;uv&lt;/code&gt; (Python package manager)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GOOGLE_PLACES_API_KEY&lt;/code&gt; environment variable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: "Find pizza places near me"&lt;/p&gt;

&lt;h4&gt;
  
  
  Summarize (&lt;code&gt;summarize&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Extract and summarize content from URLs, podcasts, and videos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;summarize&lt;/code&gt; CLI tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: "Summarize this YouTube video: &lt;a href="https://youtube.com/watch?v=.." rel="noopener noreferrer"&gt;https://youtube.com/watch?v=..&lt;/a&gt;."&lt;/p&gt;

&lt;h4&gt;
  
  
  Model Usage (&lt;code&gt;model-usage&lt;/code&gt;)
&lt;/h4&gt;

&lt;p&gt;Track AI model usage and costs (macOS only, requires CodexBar).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: "Show me my model usage for today"&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing Skills
&lt;/h3&gt;

&lt;p&gt;Skills are auto-discovered from the bundled skills directory. Check available skills:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway node dist/index.js skills list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install missing dependencies as needed (e.g., &lt;code&gt;uv&lt;/code&gt; for &lt;code&gt;local-places&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ DO
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use DM pairing&lt;/strong&gt; for unknown senders (&lt;code&gt;dmPolicy: "pairing"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run group sessions in Docker sandboxes&lt;/strong&gt; (&lt;code&gt;sandbox.mode: "non-main"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up Tailscale&lt;/strong&gt; for remote access instead of exposing ports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regularly review&lt;/strong&gt; &lt;code&gt;moltbot doctor&lt;/code&gt; output&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep allowlists updated&lt;/strong&gt; (&lt;code&gt;allowFrom&lt;/code&gt; in channel config)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;exec.ask: "on-miss"&lt;/code&gt;&lt;/strong&gt; to approve new shell commands&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ DON'T
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expose port 18789&lt;/strong&gt; to the public internet (use &lt;code&gt;bind: "lan"&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grant shell access&lt;/strong&gt; without understanding the risks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install unverified skills&lt;/strong&gt; from unknown sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;dmPolicy: "open"&lt;/code&gt;&lt;/strong&gt; without allowlists&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advanced Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Server Management via WhatsApp
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You: "Check the status of my Traefik container"
Moltbot: "Traefik is running (up 3 days)"

You: "Show me the last 20 lines of Gitea logs"
Moltbot: [displays logs]

You: "Restart the job_map container"
Moltbot: "Container restarted successfully"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Website Deployment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You: "Create a new Nginx container in ~/docker/test-site with Traefik labels for test.example.com"
Moltbot: [creates docker-compose.yml, configures Traefik, deploys]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Web Research
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You: "Browse to the Traefik documentation and tell me how to add basic auth middleware"
Moltbot: [opens browser, reads docs, provides answer]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. File Management
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You: "What's the largest folder in ~/docker?"
Moltbot: "The largest folder is ~/docker/nextcloud (45GB)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Check Gateway Status
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway node dist/index.js health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  View Logs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose logs &lt;span class="nt"&gt;-f&lt;/span&gt; moltbot-gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Run Diagnostics
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway node dist/index.js doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reset Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nb"&gt;exec &lt;/span&gt;moltbot-gateway node dist/index.js reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion: Build Your Own Private AI Assistant Today
&lt;/h2&gt;

&lt;p&gt;Moltbot is the perfect solution for anyone who wants the power of ChatGPT, Claude, or Gemini without sacrificing privacy or paying monthly subscription fees. With Docker Compose, you can have your own &lt;strong&gt;self-hosted AI assistant&lt;/strong&gt; running in minutes.&lt;/p&gt;

&lt;p&gt;Whether you're a homelab enthusiast, a privacy-conscious developer, or someone who wants to automate their server management via WhatsApp, Moltbot gives you the tools to build a truly personal AI assistant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to get started?&lt;/strong&gt; Follow the installation guide above, and you'll have your own AI assistant running on your infrastructure in less than 30 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Official Documentation&lt;/strong&gt;: &lt;a href="https://docs.molt.bot" rel="noopener noreferrer"&gt;docs.molt.bot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/moltbot/moltbot" rel="noopener noreferrer"&gt;github.com/moltbot/moltbot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Discord&lt;/strong&gt;: &lt;a href="https://discord.gg/moltbot" rel="noopener noreferrer"&gt;discord.gg/moltbot&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;About the Author&lt;/strong&gt;: This guide is based on my personal experience deploying Moltbot on my homelab server. I've documented all the issues I encountered and their solutions to help you avoid the same pitfalls. If you found this guide helpful, consider sharing it with others who might benefit from a self-hosted AI assistant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keywords&lt;/strong&gt;: self-hosted AI, Docker AI assistant, WhatsApp AI bot, privacy-first AI, open-source ChatGPT alternative, Moltbot installation, AI gateway, Docker Compose AI&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Moltbot is open-source software licensed under the MIT License.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built with ❤️ by the Moltbot community&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>ai</category>
      <category>cli</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
