OpenClaw AI Assistant icon

OpenClaw AI Assistant

stack

Personal AI assistant with multi-channel messaging gateway. WhatsApp, Telegram, Slack, Discord, and 25+ channels.

Details
Version
1.0.0 (default)
Schema version
2.3.0
Project type
AI
Language
TypeScript
Resources
Devfile
# OpenClaw — Personal AI Assistant Stack
#
# OpenClaw is a multi-channel AI assistant gateway by the OpenClaw project.
# Repo: https://github.com/openclaw/openclaw
#
# The openclaw container runs the Gateway service which provides:
#   - Control UI on port 18789
#   - Multi-channel messaging (WhatsApp, Telegram, Slack, Discord, 25+ channels)
#   - Agent tools, skills, cron jobs, webhooks
#
# State is relocated to /opt/data via OPENCLAW_CONFIG_DIR to handle
# OpenShift arbitrary UIDs (the official image uses uid 1000 with 700 perms).
#
# First boot: run `openclaw setup` in the terminal to configure
# your API key and model provider.


schemaVersion: 2.3.0
metadata:
  name: openclaw
  displayName: OpenClaw AI Assistant
  description: Personal AI assistant with multi-channel messaging gateway. WhatsApp, Telegram, Slack, Discord, and 25+ channels.
  icon: https://raw.githubusercontent.com/openclaw/openclaw/main/ui/public/favicon.svg
  tags:
    - AI
    - Assistant
    - Gateway
    - OpenClaw
  projectType: AI
  language: TypeScript
  version: 1.0.0


attributes:
  controller.devfile.io/storage-type: per-workspace


components:
  - name: tools
    container:
      image: quay.io/devfile/universal-developer-image:ubi9-latest
      memoryLimit: 1Gi
      memoryRequest: 256Mi
      mountSources: true


  # OpenClaw Gateway container.
  # Runs the gateway service with Control UI on port 18789.
  # State is relocated from /home/node/.openclaw (uid 1000, 700 perms)
  # to /opt/data on a writable PVC for OpenShift arbitrary-UID compat.
  - name: openclaw
    container:
      image: docker.io/openclaw/openclaw:2026.7.1
      mountSources: false
      memoryRequest: 2Gi
      memoryLimit: 3Gi
      env:
        - name: HOME
          value: /opt/data/home
        - name: OPENCLAW_CONFIG_DIR
          value: /opt/data/config
        - name: OPENCLAW_WORKSPACE_DIR
          value: /opt/data/config/workspace
        - name: OPENCLAW_GATEWAY_BIND
          value: lan
        - name: OPENCLAW_SKIP_ONBOARDING
          value: "1"
      command: ["/bin/bash", "-c"]
      args:
        - |
          if ! whoami &>/dev/null; then
            echo "openclaw:x:$(id -u):0:OpenClaw:${HOME}:/bin/bash" >> /etc/passwd
          fi


          mkdir -p "${HOME}" "${OPENCLAW_CONFIG_DIR}" "${OPENCLAW_WORKSPACE_DIR}"


          TOKEN_FILE="${OPENCLAW_CONFIG_DIR}/.gateway-token"
          if [ ! -f "${TOKEN_FILE}" ]; then
            TOKEN=$(head -c 48 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | head -c 48)
            echo "${TOKEN}" > "${TOKEN_FILE}"
            chmod 600 "${TOKEN_FILE}"
            echo "============================================"
            echo "  Gateway token: ${TOKEN}"
            echo "  Run 'show-token' command to see it again."
            echo "============================================"
          fi
          export OPENCLAW_GATEWAY_TOKEN=$(cat "${TOKEN_FILE}")


          openclaw config set gateway.mode local 2>/dev/null || true
          openclaw config set gateway.controlUi.allowedOrigins '["*"]' 2>/dev/null || true
          openclaw config set gateway.trustedProxies '["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"]' 2>/dev/null || true


          exec tini -s -- node /app/openclaw.mjs gateway
      endpoints:
        - name: control-ui
          targetPort: 18789
          exposure: public
          protocol: https
          attributes:
            cookiesAuthEnabled: true
            discoverable: false
            urlRewriteSupported: false
      volumeMounts:
        - name: openclaw-data
          path: /opt/data


  - name: openclaw-data
    volume:
      size: 10Gi


commands:
  - id: setup
    exec:
      label: "Configure OpenClaw (onboarding wizard)"
      component: openclaw
      commandLine: openclaw onboard
      workingDir: /opt/data/config
  - id: status
    exec:
      label: "Check gateway health"
      component: openclaw
      commandLine: |
        echo "--- Health ---"
        curl -fsS http://127.0.0.1:18789/healthz && echo " OK" || echo " FAIL"
        echo "--- Readiness ---"
        curl -fsS http://127.0.0.1:18789/readyz && echo " OK" || echo " FAIL"
      workingDir: /opt/data/config
  - id: show-token
    exec:
      label: "Display gateway access token"
      component: openclaw
      commandLine: cat "${OPENCLAW_CONFIG_DIR}/.gateway-token"
      workingDir: /opt/data/config
  - id: doctor
    exec:
      label: "Run diagnostics"
      component: openclaw
      commandLine: openclaw doctor
      workingDir: /opt/data/config
  - id: restart-gateway
    exec:
      label: "Restart gateway process"
      component: openclaw
      commandLine: openclaw gateway stop 2>/dev/null; openclaw gateway
      workingDir: /opt/data/config