Playbook crashing when it tries to install homebrew #3

Open
opened 2026-02-15 17:17:37 -05:00 by yindo · 4 comments
Owner

Originally created by @Xyz3R on GitHub (Jan 13, 2026).

Requires to be run as non-root

TASK [Install Homebrew (macOS and Linux)] ************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"\n", "delta": "0:00:00.118638", "end": "2026-01-13 14:50:55.184116", "msg": "non-zero return code", "rc": 1, "start": "2026-01-13 14:50:55.065478", "stderr": "Don't run this as root!", "stderr_lines": ["Don't run this as root!"], "stdout": "==> Running in non-interactive mode because $NONINTERACTIVE is set.\n==> Checking for sudo access (which may request your password)...", "stdout_lines": ["==> Running in non-interactive mode because $NONINTERACTIVE is set.", "==> Checking for sudo access (which may request your password)..."]}

PLAY RECAP *******************************************************************************************************************************
localhost : ok=10 changed=1 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0

Originally created by @Xyz3R on GitHub (Jan 13, 2026). Requires to be run as non-root TASK [Install Homebrew (macOS and Linux)] ************************************************************************************************ fatal: [localhost]: FAILED! => {"changed": true, "cmd": "NONINTERACTIVE=1 /bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n", "delta": "0:00:00.118638", "end": "2026-01-13 14:50:55.184116", "msg": "non-zero return code", "rc": 1, "start": "2026-01-13 14:50:55.065478", "stderr": "Don't run this as root!", "stderr_lines": ["Don't run this as root!"], "stdout": "==> Running in non-interactive mode because `$NONINTERACTIVE` is set.\n==> Checking for `sudo` access (which may request your password)...", "stdout_lines": ["==> Running in non-interactive mode because `$NONINTERACTIVE` is set.", "==> Checking for `sudo` access (which may request your password)..."]} PLAY RECAP ******************************************************************************************************************************* localhost : ok=10 changed=1 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
Author
Owner

@lweighall commented on GitHub (Feb 4, 2026):

I ran into this same problem. I added the become: false to the task in this pull request but got the same error. I always ended up having to install brew (linuxbrew, I'm using Ubuntu) myself.

Once I did that though a new set of problems emerged. Here was my steps.

  1. Ensure linuxbrew is installed.

https://brew.sh/

At this point run the playbook again and you'll get this error:

TASK [Add Homebrew to PATH for current session (Linux)] ***************************************************************************************************************************************************************************************
[ERROR]: Task failed: Finalization of task args for 'ansible.builtin.set_fact' failed: Error while resolving value for 'ansible_env': object of type 'dict' has no attribute 'PATH'

Task failed.
Origin: /home/luke/openclaw-ansible/playbook.yml:83:7

81       become: false
82
83     - name: Add Homebrew to PATH for current session (Linux)
         ^ column 7

<<< caused by >>>

Finalization of task args for 'ansible.builtin.set_fact' failed.
Origin: /home/luke/openclaw-ansible/playbook.yml:84:7

82
83     - name: Add Homebrew to PATH for current session (Linux)
84       ansible.builtin.set_fact:
         ^ column 7

<<< caused by >>>

Error while resolving value for 'ansible_env': object of type 'dict' has no attribute 'PATH'
Origin: /home/luke/openclaw-ansible/playbook.yml:85:22

83     - name: Add Homebrew to PATH for current session (Linux)
84       ansible.builtin.set_fact:
85         ansible_env: "{{ ansible_env | combine({'PATH': '/home/linuxbrew/.linuxbrew/bin:' + ansible_env.PATH}) }}"
                        ^ column 22

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Task failed: Finalization of task args for 'ansible.builtin.set_fact' failed: Error while resolving value for 'ansible_env': object of type 'dict' has no attribute 'PATH'"}

The issue is with the ansible_env (facts)

  1. Add "gather_facts: true" at the top head of the playbook:
---
- name: Install Clawdbot with Docker and UFW firewall
  hosts: localhost
  connection: local
  become: true
  gather_facts: true
  1. Edit this first task on the playbook.yml -- it overwrites the PATH variable in ansible facts by default. This updated version APPENDS the ENV keys rather than overwriting.

OLD:

  pre_tasks:
    - name: Enable color terminal for current session
      ansible.builtin.set_fact:
        ansible_env:
          TERM: xterm-256color
          COLORTERM: truecolor

NEW:

  pre_tasks:
    - name: Enable color terminal for current session
      ansible.builtin.set_fact:
        ansible_env: "{{ ansible_env | combine({'TERM': 'xterm-256color', 'COLORTERM': 'truecolor'}) }}"
@lweighall commented on GitHub (Feb 4, 2026): I ran into this same problem. I added the become: false to the task in this pull request but got the same error. I always ended up having to install brew (linuxbrew, I'm using Ubuntu) myself. Once I did that though a new set of problems emerged. Here was my steps. 1. Ensure linuxbrew is installed. https://brew.sh/ At this point run the playbook again and you'll get this error: ``` TASK [Add Homebrew to PATH for current session (Linux)] *************************************************************************************************************************************************************************************** [ERROR]: Task failed: Finalization of task args for 'ansible.builtin.set_fact' failed: Error while resolving value for 'ansible_env': object of type 'dict' has no attribute 'PATH' Task failed. Origin: /home/luke/openclaw-ansible/playbook.yml:83:7 81 become: false 82 83 - name: Add Homebrew to PATH for current session (Linux) ^ column 7 <<< caused by >>> Finalization of task args for 'ansible.builtin.set_fact' failed. Origin: /home/luke/openclaw-ansible/playbook.yml:84:7 82 83 - name: Add Homebrew to PATH for current session (Linux) 84 ansible.builtin.set_fact: ^ column 7 <<< caused by >>> Error while resolving value for 'ansible_env': object of type 'dict' has no attribute 'PATH' Origin: /home/luke/openclaw-ansible/playbook.yml:85:22 83 - name: Add Homebrew to PATH for current session (Linux) 84 ansible.builtin.set_fact: 85 ansible_env: "{{ ansible_env | combine({'PATH': '/home/linuxbrew/.linuxbrew/bin:' + ansible_env.PATH}) }}" ^ column 22 fatal: [localhost]: FAILED! => {"changed": false, "msg": "Task failed: Finalization of task args for 'ansible.builtin.set_fact' failed: Error while resolving value for 'ansible_env': object of type 'dict' has no attribute 'PATH'"} ``` The issue is with the ansible_env (facts) 2. Add "gather_facts: true" at the top head of the playbook: ``` --- - name: Install Clawdbot with Docker and UFW firewall hosts: localhost connection: local become: true gather_facts: true ``` 3. Edit this first task on the playbook.yml -- it overwrites the PATH variable in ansible facts by default. This updated version APPENDS the ENV keys rather than overwriting. OLD: ``` pre_tasks: - name: Enable color terminal for current session ansible.builtin.set_fact: ansible_env: TERM: xterm-256color COLORTERM: truecolor ``` NEW: ``` pre_tasks: - name: Enable color terminal for current session ansible.builtin.set_fact: ansible_env: "{{ ansible_env | combine({'TERM': 'xterm-256color', 'COLORTERM': 'truecolor'}) }}" ```
Author
Owner

@royvnasser commented on GitHub (Feb 14, 2026):

+1 same error

@royvnasser commented on GitHub (Feb 14, 2026): +1 same error
Author
Owner

@ElijahLynn commented on GitHub (Feb 14, 2026):

Fresh user here: The playbook I ran didn't install brew at all. Would be great if it took care of installing homebrew too.

The docs here don't mention the brew prerequisite either: https://docs.openclaw.ai/install/ansible#requirements

root@openclaw:~# curl -fsSL https://raw.githubusercontent.com/openclaw/openclaw-ansible/main/install.sh | bash
╔════════════════════════════════════════╗
║   OpenClaw Ansible Installer           ║
╚════════════════════════════════════════╝

✓ Detected: Debian/Ubuntu Linux
Running as root.
[1/4] Checking prerequisites...
✓ Ansible already installed
[2/5] Downloading playbook...
Cloning repository...
Cloning into 'openclaw-ansible'...
remote: Enumerating objects: 586, done.
remote: Counting objects: 100% (255/255), done.
remote: Compressing objects: 100% (104/104), done.
remote: Total 586 (delta 195), reused 151 (delta 151), pack-reused 331 (from 2)
Receiving objects: 100% (586/586), 146.84 KiB | 440.00 KiB/s, done.
Resolving deltas: 100% (326/326), done.
✓ Playbook downloaded
[3/5] Installing Ansible collections...
Starting galaxy collection install process
Nothing to do. All requested collections are already installed. If you want to reinstall them, consider using `--force`.
[4/5] Running Ansible playbook...

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [Install OpenClaw with Docker and UFW firewall] ************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************
ok: [localhost]

TASK [Enable color terminal for current session] ****************************************************************************************************************
ok: [localhost]

TASK [Detect operating system] **********************************************************************************************************************************
ok: [localhost]

TASK [Fail on unsupported macOS] ********************************************************************************************************************************
skipping: [localhost]

TASK [Display detected OS] **************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Detected OS: Debian 13.2\nOS Family: Debian\nLinux (Debian/Ubuntu): True\n"
}

TASK [Update apt cache and upgrade all packages (Debian/Ubuntu)] ************************************************************************************************
changed: [localhost]

TASK [Display apt upgrade results] ******************************************************************************************************************************
ok: [localhost] => {
    "msg": "✅ System packages updated and upgraded"
}

TASK [Install ACL for privilege escalation] *********************************************************************************************************************
ok: [localhost]

TASK [Check if running as root] *********************************************************************************************************************************
ok: [localhost]

TASK [Set fact for root user] ***********************************************************************************************************************************
ok: [localhost]

TASK [Install Ansible collections] ******************************************************************************************************************************
ok: [localhost]

TASK [openclaw : Include system tools installation tasks] *******************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/system-tools.yml for localhost

TASK [openclaw : Include Linux system tools installation] *******************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/system-tools-linux.yml for localhost

TASK [openclaw : Install essential system tools (Linux - apt)] **************************************************************************************************
changed: [localhost]

TASK [openclaw : Deploy global vim configuration (Linux)] *******************************************************************************************************
changed: [localhost]

TASK [openclaw : Configure git globally] ************************************************************************************************************************
changed: [localhost] => (item={'name': 'init.defaultBranch', 'value': 'main'})
changed: [localhost] => (item={'name': 'pull.rebase', 'value': 'false'})
changed: [localhost] => (item={'name': 'core.editor', 'value': 'vim'})
changed: [localhost] => (item={'name': 'color.ui', 'value': 'auto'})
changed: [localhost] => (item={'name': 'alias.st', 'value': 'status'})
changed: [localhost] => (item={'name': 'alias.co', 'value': 'checkout'})
changed: [localhost] => (item={'name': 'alias.br', 'value': 'branch'})
changed: [localhost] => (item={'name': 'alias.ci', 'value': 'commit'})
changed: [localhost] => (item={'name': 'alias.unstage', 'value': 'reset HEAD --'})
changed: [localhost] => (item={'name': 'alias.last', 'value': 'log -1 HEAD'})
changed: [localhost] => (item={'name': 'alias.lg', 'value': 'log --oneline --graph --decorate --all'})

TASK [openclaw : Include Tailscale installation tasks] **********************************************************************************************************
skipping: [localhost]

TASK [openclaw : Include user creation tasks] *******************************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/user.yml for localhost

TASK [openclaw : Create openclaw system user] *******************************************************************************************************************
changed: [localhost]

TASK [openclaw : Ensure openclaw home directory has correct ownership] ******************************************************************************************
changed: [localhost]

TASK [openclaw : Configure .bashrc for openclaw user] ***********************************************************************************************************
changed: [localhost]

TASK [openclaw : Add openclaw user to sudoers with scoped NOPASSWD] *********************************************************************************************
changed: [localhost]

TASK [openclaw : Set openclaw user as primary user for installation] ********************************************************************************************
ok: [localhost]

TASK [openclaw : Create .bash_profile to source .bashrc for login shells] ***************************************************************************************
changed: [localhost]

TASK [openclaw : Get openclaw user ID] **************************************************************************************************************************
ok: [localhost]

TASK [openclaw : Display openclaw user ID] **********************************************************************************************************************
ok: [localhost] => {
    "msg": "OpenClaw user ID: 999"
}

TASK [openclaw : Enable lingering for openclaw user (allows systemd user services without login)] ***************************************************************
ok: [localhost]

TASK [openclaw : Create runtime directory for openclaw user] ****************************************************************************************************
ok: [localhost]

TASK [openclaw : Store openclaw UID as fact for later use] ******************************************************************************************************
ok: [localhost]

TASK [openclaw : Create .ssh directory for openclaw user] *******************************************************************************************************
changed: [localhost]

TASK [openclaw : Add SSH authorized keys for openclaw user] *****************************************************************************************************
skipping: [localhost]

TASK [openclaw : Display SSH key configuration status] **********************************************************************************************************
skipping: [localhost]

TASK [openclaw : Display SSH key warning if none configured] ****************************************************************************************************
ok: [localhost] => {
    "msg": "No SSH keys configured. Set 'openclaw_ssh_keys' variable to allow SSH access."
}

TASK [openclaw : Set XDG_RUNTIME_DIR in .bashrc for openclaw user] **********************************************************************************************
changed: [localhost]

TASK [openclaw : Set DBUS_SESSION_BUS_ADDRESS in .bashrc for openclaw user] *************************************************************************************
changed: [localhost]

TASK [openclaw : Include Docker installation tasks] *************************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/docker-linux.yml for localhost

TASK [openclaw : Install required system packages for Docker] ***************************************************************************************************
ok: [localhost]

TASK [openclaw : Create directory for Docker GPG key] ***********************************************************************************************************
ok: [localhost]

TASK [openclaw : Add Docker GPG key] ****************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Add Docker repository] *************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Update apt cache after adding Docker repo] *****************************************************************************************************
changed: [localhost]

TASK [openclaw : Install Docker CE] *****************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Ensure Docker service is started and enabled] **************************************************************************************************
ok: [localhost]

TASK [openclaw : Add user to docker group] **********************************************************************************************************************
changed: [localhost]

TASK [openclaw : Reset SSH connection to apply docker group] ****************************************************************************************************

TASK [openclaw : Include firewall configuration tasks] **********************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/firewall-linux.yml for localhost

TASK [openclaw : Install fail2ban] ******************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Configure fail2ban for SSH protection] *********************************************************************************************************
changed: [localhost]

TASK [openclaw : Enable and start fail2ban] *********************************************************************************************************************
ok: [localhost]

TASK [openclaw : Install unattended-upgrades] *******************************************************************************************************************
changed: [localhost]

TASK [openclaw : Configure automatic security updates] **********************************************************************************************************
changed: [localhost]

TASK [openclaw : Configure unattended-upgrades to only install security updates] ********************************************************************************
changed: [localhost]

TASK [openclaw : Install UFW] ***********************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Set UFW default policies] **********************************************************************************************************************
ok: [localhost] => (item={'direction': 'incoming', 'policy': 'deny'})
ok: [localhost] => (item={'direction': 'outgoing', 'policy': 'allow'})
ok: [localhost] => (item={'direction': 'routed', 'policy': 'deny'})

TASK [openclaw : Allow SSH on port 22] **************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Allow Tailscale UDP port 41641] ****************************************************************************************************************
skipping: [localhost]

TASK [openclaw : Get default network interface] *****************************************************************************************************************
ok: [localhost]

TASK [openclaw : Validate default network interface was detected] ***********************************************************************************************
ok: [localhost] => {
    "changed": false,
    "msg": "Default network interface detected: eth0"
}

TASK [openclaw : Create UFW after.rules for Docker isolation] ***************************************************************************************************
changed: [localhost]

TASK [openclaw : Create Docker daemon config directory] *********************************************************************************************************
ok: [localhost]

TASK [openclaw : Configure Docker daemon to work with UFW] ******************************************************************************************************
changed: [localhost]

TASK [openclaw : Enable UFW] ************************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Reload UFW] ************************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Include Node.js installation tasks] ************************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/nodejs.yml for localhost

TASK [openclaw : Install required packages for Node.js] *********************************************************************************************************
ok: [localhost]

TASK [openclaw : Create directory for NodeSource GPG key] *******************************************************************************************************
ok: [localhost]

TASK [openclaw : Add NodeSource GPG key] ************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Add NodeSource repository] *********************************************************************************************************************
changed: [localhost]

TASK [openclaw : Update apt cache after adding NodeSource repo] *************************************************************************************************
changed: [localhost]

TASK [openclaw : Install Node.js] *******************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Check if pnpm is already installed] ************************************************************************************************************
ok: [localhost]

TASK [openclaw : Install pnpm globally] *************************************************************************************************************************
changed: [localhost]

TASK [openclaw : Verify Node.js installation] *******************************************************************************************************************
ok: [localhost]

TASK [openclaw : Verify pnpm installation] **********************************************************************************************************************
ok: [localhost]

TASK [openclaw : Display Node.js and pnpm versions] *************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "Node.js version: v22.22.0",
        "pnpm version: 10.29.3"
    ]
}

TASK [openclaw : Include OpenClaw setup tasks] ******************************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/openclaw.yml for localhost

TASK [openclaw : Validate openclaw_install_mode] ****************************************************************************************************************
ok: [localhost] => {
    "changed": false,
    "msg": "Valid install mode: release"
}

TASK [openclaw : Create OpenClaw directories (structure only, no config files)] *********************************************************************************
changed: [localhost] => (item={'path': '/home/openclaw/.openclaw', 'mode': '0755'})
changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/sessions', 'mode': '0755'})
changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/credentials', 'mode': '0700'})
changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/data', 'mode': '0755'})
changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/logs', 'mode': '0755'})

TASK [openclaw : Create pnpm directories] ***********************************************************************************************************************
changed: [localhost] => (item=/home/openclaw/.local/share/pnpm)
changed: [localhost] => (item=/home/openclaw/.local/share/pnpm/store)
changed: [localhost] => (item=/home/openclaw/.local/bin)

TASK [openclaw : Ensure pnpm directories have correct ownership] ************************************************************************************************
ok: [localhost]

TASK [openclaw : Configure pnpm for openclaw user] **************************************************************************************************************
changed: [localhost]

TASK [openclaw : Display installation mode] *********************************************************************************************************************
ok: [localhost] => {
    "msg": "Installation mode: release"
}

TASK [openclaw : Include release installation (pnpm install -g)] ************************************************************************************************
included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/openclaw-release.yml for localhost

TASK [openclaw : Install OpenClaw globally as openclaw user (using pnpm)] ***************************************************************************************
changed: [localhost]

TASK [openclaw : Verify openclaw installation] ******************************************************************************************************************
ok: [localhost]

TASK [openclaw : Display installed OpenClaw version (release)] **************************************************************************************************
ok: [localhost] => {
    "msg": "OpenClaw installed from npm: 2026.2.13"
}

TASK [openclaw : Include development installation (git clone + build + link)] ***********************************************************************************
skipping: [localhost]

TASK [openclaw : Configure .bashrc for openclaw user (base config)] *********************************************************************************************
changed: [localhost]

TASK [openclaw : Display configuration note] ********************************************************************************************************************
ok: [localhost] => {
    "msg": "OpenClaw is installed but NOT configured yet.\n\nNext steps (run as openclaw user):\n1. Switch user: sudo su - openclaw\n2. Run onboarding: openclaw onboard --install-daemon\n\nThis will:\n- Create configuration files (~/.openclaw/openclaw.json)\n- Guide you through provider setup\n- Install and start the daemon service automatically\n"
}

RUNNING HANDLER [openclaw : Restart docker] *********************************************************************************************************************
changed: [localhost]

RUNNING HANDLER [openclaw : Restart fail2ban] *******************************************************************************************************************
changed: [localhost]

TASK [Copy ASCII art script] ************************************************************************************************************************************
changed: [localhost]

TASK [Display ASCII art] ****************************************************************************************************************************************
ok: [localhost]

TASK [Create one-time welcome message for openclaw user] ********************************************************************************************************
changed: [localhost]

TASK [Add welcome message to .bashrc] ***************************************************************************************************************************
changed: [localhost]

TASK [Notify that playbook is complete] *************************************************************************************************************************
ok: [localhost] => {
    "msg": "✅ OpenClaw installation complete!"
}

PLAY RECAP ******************************************************************************************************************************************************
localhost                  : ok=89   changed=43   unreachable=0    failed=0    skipped=6    rescued=0    ignored=0   


═══════════════════════════════════════════════════════════
✅ INSTALLATION COMPLETE!
═══════════════════════════════════════════════════════════

🔄 SWITCH TO OPENCLAW USER with:

    sudo su - openclaw

  OR (alternative):

    sudo -u openclaw -i

This will switch you to the openclaw user with a proper
login shell (loads .bashrc, sets environment correctly).

After switching, you'll see the next setup steps:
  • Configure OpenClaw (~/.openclaw/config.yml)
  • Login to messaging provider (WhatsApp/Telegram/Signal)
  • Test the gateway

═══════════════════════════════════════════════════════════

root@openclaw:~# sudo su - openclaw

╔════════════════════════════════════════════════════════╗
║        📋 OpenClaw Setup - Next Steps                 ║
╚════════════════════════════════════════════════════════╝

You are: openclaw@openclaw
Home: /home/openclaw
OS: Linux 6.12.57+deb13-cloud-amd64

Environment is configured:
  ✓ XDG_RUNTIME_DIR: /run/user/999
  ✓ DBUS_SESSION_BUS_ADDRESS: not set
  ✓ OpenClaw: 2026.2.13

────────────────────────────────────────────────────────
🚀 Quick Start - Run This Command:
────────────────────────────────────────────────────────

    openclaw onboard --install-daemon

This will:
  • Guide you through the setup wizard
  • Configure your messaging provider
  • Install and start the daemon service

────────────────────────────────────────────────────────
📚 Alternative Manual Setup:
────────────────────────────────────────────────────────

1️⃣  Interactive onboarding (recommended):
    openclaw onboard --install-daemon

2️⃣  Manual configuration:
    openclaw configure
    nano ~/.openclaw/openclaw.json

3️⃣  Login to messaging provider:
    openclaw providers login

4️⃣  Test the gateway:
    openclaw gateway

5️⃣  Install as daemon (if not using onboard):
    openclaw daemon install
    openclaw daemon start

────────────────────────────────────────────────────────
🔧 Useful Commands:
────────────────────────────────────────────────────────

  • View logs:        openclaw logs
  • Check status:     openclaw status
  • Stop daemon:      openclaw daemon stop
  • Restart daemon:   openclaw daemon restart
  • Troubleshoot:     openclaw doctor
  • List agents:      openclaw agents list

────────────────────────────────────────────────────────

Type 'exit' to return to your previous user

openclaw@openclaw:~$ openclaw onboard --install-daemon

🦞 OpenClaw 2026.2.13 (203b5bd) — Your messages, your servers, your control.

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
██░▄▄▄░██░▄▄░██░▄▄▄██░▀██░██░▄▄▀██░████░▄▄▀██░███░██
██░███░██░▀▀░██░▄▄▄██░█░█░██░█████░████░▀▀░██░█░█░██
██░▀▀▀░██░█████░▀▀▀██░██▄░██░▀▀▄██░▀▀░█░██░██▄▀▄▀▄██
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
                  🦞 OPENCLAW 🦞                    
 
┌  OpenClaw onboarding
│
◇  Security ──────────────────────────────────────────────────────────────────────────────╮
│                                                                                         │
│  Security warning — please read.                                                        │
│                                                                                         │
│  OpenClaw is a hobby project and still in beta. Expect sharp edges.                     │
│  This bot can read files and run actions if tools are enabled.                          │
│  A bad prompt can trick it into doing unsafe things.                                    │
│                                                                                         │
│  If you’re not comfortable with basic security and access control, don’t run OpenClaw.  │
│  Ask someone experienced to help before enabling tools or exposing it to the internet.  │
│                                                                                         │
│  Recommended baseline:                                                                  │
│  - Pairing/allowlists + mention gating.                                                 │
│  - Sandbox + least-privilege tools.                                                     │
│  - Keep secrets out of the agent’s reachable filesystem.                                │
│  - Use the strongest available model for any bot with tools or untrusted inboxes.       │
│                                                                                         │
│  Run regularly:                                                                         │
│  openclaw security audit --deep                                                         │
│  openclaw security audit --fix                                                          │
│                                                                                         │
│  Must read: https://docs.openclaw.ai/gateway/security                                   │
│                                                                                         │
├─────────────────────────────────────────────────────────────────────────────────────────╯
│
◇  I understand this is powerful and inherently risky. Continue?
│  Yes
│
◇  Onboarding mode
│  QuickStart
│
◇  QuickStart ─────────────────────────╮
│                                      │
│  Gateway port: 18789                 │
│  Gateway bind: Loopback (127.0.0.1)  │
│  Gateway auth: Token (default)       │
│  Tailscale exposure: Off             │
│  Direct to chat channels.            │
│                                      │
├──────────────────────────────────────╯
│
◇  Model check ───────────────────────────────────────────────────────────────────────────╮
│                                                                                         │
│  No auth configured for provider "anthropic". The agent may fail until credentials are  │
│  added.                                                                                 │
│                                                                                         │
├─────────────────────────────────────────────────────────────────────────────────────────╯
│
◇  Channel status ────────────────────────────╮
│                                             │
│  Telegram: not configured                   │
│  WhatsApp: not configured                   │
│  Discord: not configured                    │
│  IRC: not configured                        │
│  Google Chat: not configured                │
│  Slack: not configured                      │
│  Signal: not configured                     │
│  iMessage: not configured                   │
│  Feishu: install plugin to enable           │
│  Google Chat: install plugin to enable      │
│  Nostr: install plugin to enable            │
│  Microsoft Teams: install plugin to enable  │
│  Mattermost: install plugin to enable       │
│  Nextcloud Talk: install plugin to enable   │
│  Matrix: install plugin to enable           │
│  BlueBubbles: install plugin to enable      │
│  LINE: install plugin to enable             │
│  Zalo: install plugin to enable             │
│  Zalo Personal: install plugin to enable    │
│  Tlon: install plugin to enable             │
│                                             │
├─────────────────────────────────────────────╯
│
◇  How channels work ─────────────────────────────────────────────────────────────────────╮
│                                                                                         │
│  DM security: default is pairing; unknown DMs get a pairing code.                       │
│  Approve with: openclaw pairing approve <channel> <code>                                │
│  Public DMs require dmPolicy="open" + allowFrom=["*"].                                  │
│  Multi-user DMs: run: openclaw config set session.dmScope "per-channel-peer" (or        │
│  "per-account-channel-peer" for multi-account channels) to isolate sessions.            │
│  Docs: start/pairing                  │
│                                                                                         │
│  Telegram: simplest way to get started — register a bot with @BotFather and get going.  │
│  WhatsApp: works with your own number; recommend a separate phone + eSIM.               │
│  Discord: very well supported right now.                                                │
│  IRC: classic IRC networks with DM/channel routing and pairing controls.                │
│  Google Chat: Google Workspace Chat app with HTTP webhook.                              │
│  Slack: supported (Socket Mode).                                                        │
│  Signal: signal-cli linked device; more setup (David Reagans: "Hop on Discord.").       │
│  iMessage: this is still a work in progress.                                            │
│  Feishu: 飞书/Lark enterprise messaging with doc/wiki/drive tools.                      │
│  Nostr: Decentralized protocol; encrypted DMs via NIP-04.                               │
│  Microsoft Teams: Bot Framework; enterprise support.                                    │
│  Mattermost: self-hosted Slack-style chat; install the plugin to enable.                │
│  Nextcloud Talk: Self-hosted chat via Nextcloud Talk webhook bots.                      │
│  Matrix: open protocol; install the plugin to enable.                                   │
│  BlueBubbles: iMessage via the BlueBubbles mac app + REST API.                          │
│  LINE: LINE Messaging API bot for Japan/Taiwan/Thailand markets.                        │
│  Zalo: Vietnam-focused messaging platform with Bot API.                                 │
│  Zalo Personal: Zalo personal account via QR code login.                                │
│  Tlon: decentralized messaging on Urbit; install the plugin to enable.                  │
│                                                                                         │
...
Updated ~/.openclaw/openclaw.json
Workspace OK: ~/.openclaw/workspace
Sessions OK: ~/.openclaw/agents/main/sessions
│
◇  Skills status ─────────────╮
│                             │
│  Eligible: 4                │
│  Missing requirements: 37   │
│  Unsupported on this OS: 7  │
│  Blocked by allowlist: 0    │
│                             │
├─────────────────────────────╯
│
◇  Configure skills now? (recommended)
│  Yes
│
◇  Install missing skill dependencies
│  🔐 1password, 🐙 github, 🍌 nano-banana-pro, 🎞️ video-frames
│
◇  Homebrew recommended ──────────────────────────────────────────────────────────╮
│                                                                                 │
│  Many skill dependencies are shipped via Homebrew.                              │
│  Without brew, you'll need to build from source or download releases manually.  │
│                                                                                 │
├─────────────────────────────────────────────────────────────────────────────────╯
│
◇  Show Homebrew install command?
│  Yes
│
◇  Homebrew install ─────────────────────────────────────────────────────╮
│                                                                        │
│  Run:                                                                  │
│  /bin/bash -c "$(curl -fsSL                                            │
│  https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"  │
│                                                                        │
├────────────────────────────────────────────────────────────────────────╯
│
◇  Install failed: github — brew not installed
Tip: run `openclaw doctor` to review skills + requirements.
Docs: https://docs.openclaw.ai/skills
│
◇  Install failed: 1password — brew not installed
Tip: run `openclaw doctor` to review skills + requirements.
Docs: https://docs.openclaw.ai/skills
│
◇  Install failed: video-frames — brew not installed
Tip: run `openclaw doctor` to review skills + requirements.
Docs: https://docs.openclaw.ai/skills
│
◇  Install failed: nano-banana-pro — brew not installed
Tip: run `openclaw doctor` to review skills + requirements.
Docs: https://docs.openclaw.ai/skills
@ElijahLynn commented on GitHub (Feb 14, 2026): Fresh user here: The playbook I ran didn't install brew at all. Would be great if it took care of installing homebrew too. The docs here don't mention the brew prerequisite either: https://docs.openclaw.ai/install/ansible#requirements ``` root@openclaw:~# curl -fsSL https://raw.githubusercontent.com/openclaw/openclaw-ansible/main/install.sh | bash ╔════════════════════════════════════════╗ ║ OpenClaw Ansible Installer ║ ╚════════════════════════════════════════╝ ✓ Detected: Debian/Ubuntu Linux Running as root. [1/4] Checking prerequisites... ✓ Ansible already installed [2/5] Downloading playbook... Cloning repository... Cloning into 'openclaw-ansible'... remote: Enumerating objects: 586, done. remote: Counting objects: 100% (255/255), done. remote: Compressing objects: 100% (104/104), done. remote: Total 586 (delta 195), reused 151 (delta 151), pack-reused 331 (from 2) Receiving objects: 100% (586/586), 146.84 KiB | 440.00 KiB/s, done. Resolving deltas: 100% (326/326), done. ✓ Playbook downloaded [3/5] Installing Ansible collections... Starting galaxy collection install process Nothing to do. All requested collections are already installed. If you want to reinstall them, consider using `--force`. [4/5] Running Ansible playbook... [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [Install OpenClaw with Docker and UFW firewall] ************************************************************************************************************ TASK [Gathering Facts] ****************************************************************************************************************************************** ok: [localhost] TASK [Enable color terminal for current session] **************************************************************************************************************** ok: [localhost] TASK [Detect operating system] ********************************************************************************************************************************** ok: [localhost] TASK [Fail on unsupported macOS] ******************************************************************************************************************************** skipping: [localhost] TASK [Display detected OS] ************************************************************************************************************************************** ok: [localhost] => { "msg": "Detected OS: Debian 13.2\nOS Family: Debian\nLinux (Debian/Ubuntu): True\n" } TASK [Update apt cache and upgrade all packages (Debian/Ubuntu)] ************************************************************************************************ changed: [localhost] TASK [Display apt upgrade results] ****************************************************************************************************************************** ok: [localhost] => { "msg": "✅ System packages updated and upgraded" } TASK [Install ACL for privilege escalation] ********************************************************************************************************************* ok: [localhost] TASK [Check if running as root] ********************************************************************************************************************************* ok: [localhost] TASK [Set fact for root user] *********************************************************************************************************************************** ok: [localhost] TASK [Install Ansible collections] ****************************************************************************************************************************** ok: [localhost] TASK [openclaw : Include system tools installation tasks] ******************************************************************************************************* included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/system-tools.yml for localhost TASK [openclaw : Include Linux system tools installation] ******************************************************************************************************* included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/system-tools-linux.yml for localhost TASK [openclaw : Install essential system tools (Linux - apt)] ************************************************************************************************** changed: [localhost] TASK [openclaw : Deploy global vim configuration (Linux)] ******************************************************************************************************* changed: [localhost] TASK [openclaw : Configure git globally] ************************************************************************************************************************ changed: [localhost] => (item={'name': 'init.defaultBranch', 'value': 'main'}) changed: [localhost] => (item={'name': 'pull.rebase', 'value': 'false'}) changed: [localhost] => (item={'name': 'core.editor', 'value': 'vim'}) changed: [localhost] => (item={'name': 'color.ui', 'value': 'auto'}) changed: [localhost] => (item={'name': 'alias.st', 'value': 'status'}) changed: [localhost] => (item={'name': 'alias.co', 'value': 'checkout'}) changed: [localhost] => (item={'name': 'alias.br', 'value': 'branch'}) changed: [localhost] => (item={'name': 'alias.ci', 'value': 'commit'}) changed: [localhost] => (item={'name': 'alias.unstage', 'value': 'reset HEAD --'}) changed: [localhost] => (item={'name': 'alias.last', 'value': 'log -1 HEAD'}) changed: [localhost] => (item={'name': 'alias.lg', 'value': 'log --oneline --graph --decorate --all'}) TASK [openclaw : Include Tailscale installation tasks] ********************************************************************************************************** skipping: [localhost] TASK [openclaw : Include user creation tasks] ******************************************************************************************************************* included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/user.yml for localhost TASK [openclaw : Create openclaw system user] ******************************************************************************************************************* changed: [localhost] TASK [openclaw : Ensure openclaw home directory has correct ownership] ****************************************************************************************** changed: [localhost] TASK [openclaw : Configure .bashrc for openclaw user] *********************************************************************************************************** changed: [localhost] TASK [openclaw : Add openclaw user to sudoers with scoped NOPASSWD] ********************************************************************************************* changed: [localhost] TASK [openclaw : Set openclaw user as primary user for installation] ******************************************************************************************** ok: [localhost] TASK [openclaw : Create .bash_profile to source .bashrc for login shells] *************************************************************************************** changed: [localhost] TASK [openclaw : Get openclaw user ID] ************************************************************************************************************************** ok: [localhost] TASK [openclaw : Display openclaw user ID] ********************************************************************************************************************** ok: [localhost] => { "msg": "OpenClaw user ID: 999" } TASK [openclaw : Enable lingering for openclaw user (allows systemd user services without login)] *************************************************************** ok: [localhost] TASK [openclaw : Create runtime directory for openclaw user] **************************************************************************************************** ok: [localhost] TASK [openclaw : Store openclaw UID as fact for later use] ****************************************************************************************************** ok: [localhost] TASK [openclaw : Create .ssh directory for openclaw user] ******************************************************************************************************* changed: [localhost] TASK [openclaw : Add SSH authorized keys for openclaw user] ***************************************************************************************************** skipping: [localhost] TASK [openclaw : Display SSH key configuration status] ********************************************************************************************************** skipping: [localhost] TASK [openclaw : Display SSH key warning if none configured] **************************************************************************************************** ok: [localhost] => { "msg": "No SSH keys configured. Set 'openclaw_ssh_keys' variable to allow SSH access." } TASK [openclaw : Set XDG_RUNTIME_DIR in .bashrc for openclaw user] ********************************************************************************************** changed: [localhost] TASK [openclaw : Set DBUS_SESSION_BUS_ADDRESS in .bashrc for openclaw user] ************************************************************************************* changed: [localhost] TASK [openclaw : Include Docker installation tasks] ************************************************************************************************************* included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/docker-linux.yml for localhost TASK [openclaw : Install required system packages for Docker] *************************************************************************************************** ok: [localhost] TASK [openclaw : Create directory for Docker GPG key] *********************************************************************************************************** ok: [localhost] TASK [openclaw : Add Docker GPG key] **************************************************************************************************************************** changed: [localhost] TASK [openclaw : Add Docker repository] ************************************************************************************************************************* changed: [localhost] TASK [openclaw : Update apt cache after adding Docker repo] ***************************************************************************************************** changed: [localhost] TASK [openclaw : Install Docker CE] ***************************************************************************************************************************** changed: [localhost] TASK [openclaw : Ensure Docker service is started and enabled] ************************************************************************************************** ok: [localhost] TASK [openclaw : Add user to docker group] ********************************************************************************************************************** changed: [localhost] TASK [openclaw : Reset SSH connection to apply docker group] **************************************************************************************************** TASK [openclaw : Include firewall configuration tasks] ********************************************************************************************************** included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/firewall-linux.yml for localhost TASK [openclaw : Install fail2ban] ****************************************************************************************************************************** changed: [localhost] TASK [openclaw : Configure fail2ban for SSH protection] ********************************************************************************************************* changed: [localhost] TASK [openclaw : Enable and start fail2ban] ********************************************************************************************************************* ok: [localhost] TASK [openclaw : Install unattended-upgrades] ******************************************************************************************************************* changed: [localhost] TASK [openclaw : Configure automatic security updates] ********************************************************************************************************** changed: [localhost] TASK [openclaw : Configure unattended-upgrades to only install security updates] ******************************************************************************** changed: [localhost] TASK [openclaw : Install UFW] *********************************************************************************************************************************** changed: [localhost] TASK [openclaw : Set UFW default policies] ********************************************************************************************************************** ok: [localhost] => (item={'direction': 'incoming', 'policy': 'deny'}) ok: [localhost] => (item={'direction': 'outgoing', 'policy': 'allow'}) ok: [localhost] => (item={'direction': 'routed', 'policy': 'deny'}) TASK [openclaw : Allow SSH on port 22] ************************************************************************************************************************** changed: [localhost] TASK [openclaw : Allow Tailscale UDP port 41641] **************************************************************************************************************** skipping: [localhost] TASK [openclaw : Get default network interface] ***************************************************************************************************************** ok: [localhost] TASK [openclaw : Validate default network interface was detected] *********************************************************************************************** ok: [localhost] => { "changed": false, "msg": "Default network interface detected: eth0" } TASK [openclaw : Create UFW after.rules for Docker isolation] *************************************************************************************************** changed: [localhost] TASK [openclaw : Create Docker daemon config directory] ********************************************************************************************************* ok: [localhost] TASK [openclaw : Configure Docker daemon to work with UFW] ****************************************************************************************************** changed: [localhost] TASK [openclaw : Enable UFW] ************************************************************************************************************************************ changed: [localhost] TASK [openclaw : Reload UFW] ************************************************************************************************************************************ changed: [localhost] TASK [openclaw : Include Node.js installation tasks] ************************************************************************************************************ included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/nodejs.yml for localhost TASK [openclaw : Install required packages for Node.js] ********************************************************************************************************* ok: [localhost] TASK [openclaw : Create directory for NodeSource GPG key] ******************************************************************************************************* ok: [localhost] TASK [openclaw : Add NodeSource GPG key] ************************************************************************************************************************ changed: [localhost] TASK [openclaw : Add NodeSource repository] ********************************************************************************************************************* changed: [localhost] TASK [openclaw : Update apt cache after adding NodeSource repo] ************************************************************************************************* changed: [localhost] TASK [openclaw : Install Node.js] ******************************************************************************************************************************* changed: [localhost] TASK [openclaw : Check if pnpm is already installed] ************************************************************************************************************ ok: [localhost] TASK [openclaw : Install pnpm globally] ************************************************************************************************************************* changed: [localhost] TASK [openclaw : Verify Node.js installation] ******************************************************************************************************************* ok: [localhost] TASK [openclaw : Verify pnpm installation] ********************************************************************************************************************** ok: [localhost] TASK [openclaw : Display Node.js and pnpm versions] ************************************************************************************************************* ok: [localhost] => { "msg": [ "Node.js version: v22.22.0", "pnpm version: 10.29.3" ] } TASK [openclaw : Include OpenClaw setup tasks] ****************************************************************************************************************** included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/openclaw.yml for localhost TASK [openclaw : Validate openclaw_install_mode] **************************************************************************************************************** ok: [localhost] => { "changed": false, "msg": "Valid install mode: release" } TASK [openclaw : Create OpenClaw directories (structure only, no config files)] ********************************************************************************* changed: [localhost] => (item={'path': '/home/openclaw/.openclaw', 'mode': '0755'}) changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/sessions', 'mode': '0755'}) changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/credentials', 'mode': '0700'}) changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/data', 'mode': '0755'}) changed: [localhost] => (item={'path': '/home/openclaw/.openclaw/logs', 'mode': '0755'}) TASK [openclaw : Create pnpm directories] *********************************************************************************************************************** changed: [localhost] => (item=/home/openclaw/.local/share/pnpm) changed: [localhost] => (item=/home/openclaw/.local/share/pnpm/store) changed: [localhost] => (item=/home/openclaw/.local/bin) TASK [openclaw : Ensure pnpm directories have correct ownership] ************************************************************************************************ ok: [localhost] TASK [openclaw : Configure pnpm for openclaw user] ************************************************************************************************************** changed: [localhost] TASK [openclaw : Display installation mode] ********************************************************************************************************************* ok: [localhost] => { "msg": "Installation mode: release" } TASK [openclaw : Include release installation (pnpm install -g)] ************************************************************************************************ included: /tmp/tmp.YEjqN4XUok/openclaw-ansible/roles/openclaw/tasks/openclaw-release.yml for localhost TASK [openclaw : Install OpenClaw globally as openclaw user (using pnpm)] *************************************************************************************** changed: [localhost] TASK [openclaw : Verify openclaw installation] ****************************************************************************************************************** ok: [localhost] TASK [openclaw : Display installed OpenClaw version (release)] ************************************************************************************************** ok: [localhost] => { "msg": "OpenClaw installed from npm: 2026.2.13" } TASK [openclaw : Include development installation (git clone + build + link)] *********************************************************************************** skipping: [localhost] TASK [openclaw : Configure .bashrc for openclaw user (base config)] ********************************************************************************************* changed: [localhost] TASK [openclaw : Display configuration note] ******************************************************************************************************************** ok: [localhost] => { "msg": "OpenClaw is installed but NOT configured yet.\n\nNext steps (run as openclaw user):\n1. Switch user: sudo su - openclaw\n2. Run onboarding: openclaw onboard --install-daemon\n\nThis will:\n- Create configuration files (~/.openclaw/openclaw.json)\n- Guide you through provider setup\n- Install and start the daemon service automatically\n" } RUNNING HANDLER [openclaw : Restart docker] ********************************************************************************************************************* changed: [localhost] RUNNING HANDLER [openclaw : Restart fail2ban] ******************************************************************************************************************* changed: [localhost] TASK [Copy ASCII art script] ************************************************************************************************************************************ changed: [localhost] TASK [Display ASCII art] **************************************************************************************************************************************** ok: [localhost] TASK [Create one-time welcome message for openclaw user] ******************************************************************************************************** changed: [localhost] TASK [Add welcome message to .bashrc] *************************************************************************************************************************** changed: [localhost] TASK [Notify that playbook is complete] ************************************************************************************************************************* ok: [localhost] => { "msg": "✅ OpenClaw installation complete!" } PLAY RECAP ****************************************************************************************************************************************************** localhost : ok=89 changed=43 unreachable=0 failed=0 skipped=6 rescued=0 ignored=0 ═══════════════════════════════════════════════════════════ ✅ INSTALLATION COMPLETE! ═══════════════════════════════════════════════════════════ 🔄 SWITCH TO OPENCLAW USER with: sudo su - openclaw OR (alternative): sudo -u openclaw -i This will switch you to the openclaw user with a proper login shell (loads .bashrc, sets environment correctly). After switching, you'll see the next setup steps: • Configure OpenClaw (~/.openclaw/config.yml) • Login to messaging provider (WhatsApp/Telegram/Signal) • Test the gateway ═══════════════════════════════════════════════════════════ root@openclaw:~# sudo su - openclaw ╔════════════════════════════════════════════════════════╗ ║ 📋 OpenClaw Setup - Next Steps ║ ╚════════════════════════════════════════════════════════╝ You are: openclaw@openclaw Home: /home/openclaw OS: Linux 6.12.57+deb13-cloud-amd64 Environment is configured: ✓ XDG_RUNTIME_DIR: /run/user/999 ✓ DBUS_SESSION_BUS_ADDRESS: not set ✓ OpenClaw: 2026.2.13 ──────────────────────────────────────────────────────── 🚀 Quick Start - Run This Command: ──────────────────────────────────────────────────────── openclaw onboard --install-daemon This will: • Guide you through the setup wizard • Configure your messaging provider • Install and start the daemon service ──────────────────────────────────────────────────────── 📚 Alternative Manual Setup: ──────────────────────────────────────────────────────── 1️⃣ Interactive onboarding (recommended): openclaw onboard --install-daemon 2️⃣ Manual configuration: openclaw configure nano ~/.openclaw/openclaw.json 3️⃣ Login to messaging provider: openclaw providers login 4️⃣ Test the gateway: openclaw gateway 5️⃣ Install as daemon (if not using onboard): openclaw daemon install openclaw daemon start ──────────────────────────────────────────────────────── 🔧 Useful Commands: ──────────────────────────────────────────────────────── • View logs: openclaw logs • Check status: openclaw status • Stop daemon: openclaw daemon stop • Restart daemon: openclaw daemon restart • Troubleshoot: openclaw doctor • List agents: openclaw agents list ──────────────────────────────────────────────────────── Type 'exit' to return to your previous user openclaw@openclaw:~$ openclaw onboard --install-daemon 🦞 OpenClaw 2026.2.13 (203b5bd) — Your messages, your servers, your control. ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ██░▄▄▄░██░▄▄░██░▄▄▄██░▀██░██░▄▄▀██░████░▄▄▀██░███░██ ██░███░██░▀▀░██░▄▄▄██░█░█░██░█████░████░▀▀░██░█░█░██ ██░▀▀▀░██░█████░▀▀▀██░██▄░██░▀▀▄██░▀▀░█░██░██▄▀▄▀▄██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ 🦞 OPENCLAW 🦞 ┌ OpenClaw onboarding │ ◇ Security ──────────────────────────────────────────────────────────────────────────────╮ │ │ │ Security warning — please read. │ │ │ │ OpenClaw is a hobby project and still in beta. Expect sharp edges. │ │ This bot can read files and run actions if tools are enabled. │ │ A bad prompt can trick it into doing unsafe things. │ │ │ │ If you’re not comfortable with basic security and access control, don’t run OpenClaw. │ │ Ask someone experienced to help before enabling tools or exposing it to the internet. │ │ │ │ Recommended baseline: │ │ - Pairing/allowlists + mention gating. │ │ - Sandbox + least-privilege tools. │ │ - Keep secrets out of the agent’s reachable filesystem. │ │ - Use the strongest available model for any bot with tools or untrusted inboxes. │ │ │ │ Run regularly: │ │ openclaw security audit --deep │ │ openclaw security audit --fix │ │ │ │ Must read: https://docs.openclaw.ai/gateway/security │ │ │ ├─────────────────────────────────────────────────────────────────────────────────────────╯ │ ◇ I understand this is powerful and inherently risky. Continue? │ Yes │ ◇ Onboarding mode │ QuickStart │ ◇ QuickStart ─────────────────────────╮ │ │ │ Gateway port: 18789 │ │ Gateway bind: Loopback (127.0.0.1) │ │ Gateway auth: Token (default) │ │ Tailscale exposure: Off │ │ Direct to chat channels. │ │ │ ├──────────────────────────────────────╯ │ ◇ Model check ───────────────────────────────────────────────────────────────────────────╮ │ │ │ No auth configured for provider "anthropic". The agent may fail until credentials are │ │ added. │ │ │ ├─────────────────────────────────────────────────────────────────────────────────────────╯ │ ◇ Channel status ────────────────────────────╮ │ │ │ Telegram: not configured │ │ WhatsApp: not configured │ │ Discord: not configured │ │ IRC: not configured │ │ Google Chat: not configured │ │ Slack: not configured │ │ Signal: not configured │ │ iMessage: not configured │ │ Feishu: install plugin to enable │ │ Google Chat: install plugin to enable │ │ Nostr: install plugin to enable │ │ Microsoft Teams: install plugin to enable │ │ Mattermost: install plugin to enable │ │ Nextcloud Talk: install plugin to enable │ │ Matrix: install plugin to enable │ │ BlueBubbles: install plugin to enable │ │ LINE: install plugin to enable │ │ Zalo: install plugin to enable │ │ Zalo Personal: install plugin to enable │ │ Tlon: install plugin to enable │ │ │ ├─────────────────────────────────────────────╯ │ ◇ How channels work ─────────────────────────────────────────────────────────────────────╮ │ │ │ DM security: default is pairing; unknown DMs get a pairing code. │ │ Approve with: openclaw pairing approve <channel> <code> │ │ Public DMs require dmPolicy="open" + allowFrom=["*"]. │ │ Multi-user DMs: run: openclaw config set session.dmScope "per-channel-peer" (or │ │ "per-account-channel-peer" for multi-account channels) to isolate sessions. │ │ Docs: start/pairing │ │ │ │ Telegram: simplest way to get started — register a bot with @BotFather and get going. │ │ WhatsApp: works with your own number; recommend a separate phone + eSIM. │ │ Discord: very well supported right now. │ │ IRC: classic IRC networks with DM/channel routing and pairing controls. │ │ Google Chat: Google Workspace Chat app with HTTP webhook. │ │ Slack: supported (Socket Mode). │ │ Signal: signal-cli linked device; more setup (David Reagans: "Hop on Discord."). │ │ iMessage: this is still a work in progress. │ │ Feishu: 飞书/Lark enterprise messaging with doc/wiki/drive tools. │ │ Nostr: Decentralized protocol; encrypted DMs via NIP-04. │ │ Microsoft Teams: Bot Framework; enterprise support. │ │ Mattermost: self-hosted Slack-style chat; install the plugin to enable. │ │ Nextcloud Talk: Self-hosted chat via Nextcloud Talk webhook bots. │ │ Matrix: open protocol; install the plugin to enable. │ │ BlueBubbles: iMessage via the BlueBubbles mac app + REST API. │ │ LINE: LINE Messaging API bot for Japan/Taiwan/Thailand markets. │ │ Zalo: Vietnam-focused messaging platform with Bot API. │ │ Zalo Personal: Zalo personal account via QR code login. │ │ Tlon: decentralized messaging on Urbit; install the plugin to enable. │ │ │ ... Updated ~/.openclaw/openclaw.json Workspace OK: ~/.openclaw/workspace Sessions OK: ~/.openclaw/agents/main/sessions │ ◇ Skills status ─────────────╮ │ │ │ Eligible: 4 │ │ Missing requirements: 37 │ │ Unsupported on this OS: 7 │ │ Blocked by allowlist: 0 │ │ │ ├─────────────────────────────╯ │ ◇ Configure skills now? (recommended) │ Yes │ ◇ Install missing skill dependencies │ 🔐 1password, 🐙 github, 🍌 nano-banana-pro, 🎞️ video-frames │ ◇ Homebrew recommended ──────────────────────────────────────────────────────────╮ │ │ │ Many skill dependencies are shipped via Homebrew. │ │ Without brew, you'll need to build from source or download releases manually. │ │ │ ├─────────────────────────────────────────────────────────────────────────────────╯ │ ◇ Show Homebrew install command? │ Yes │ ◇ Homebrew install ─────────────────────────────────────────────────────╮ │ │ │ Run: │ │ /bin/bash -c "$(curl -fsSL │ │ https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" │ │ │ ├────────────────────────────────────────────────────────────────────────╯ │ ◇ Install failed: github — brew not installed Tip: run `openclaw doctor` to review skills + requirements. Docs: https://docs.openclaw.ai/skills │ ◇ Install failed: 1password — brew not installed Tip: run `openclaw doctor` to review skills + requirements. Docs: https://docs.openclaw.ai/skills │ ◇ Install failed: video-frames — brew not installed Tip: run `openclaw doctor` to review skills + requirements. Docs: https://docs.openclaw.ai/skills │ ◇ Install failed: nano-banana-pro — brew not installed Tip: run `openclaw doctor` to review skills + requirements. Docs: https://docs.openclaw.ai/skills ```
Author
Owner

@ElijahLynn commented on GitHub (Feb 14, 2026):

homebrew (brew) support was removed by @justin-russell in:

But from my understanding as a brand new openclaw user is that brew works on linux and is needed for proper linux support. Unless you don't use any skills I suppose. I'm a bit confused at this point. Still working to get my hello-world Openclaw instance up with some useful skills.

https://docs.openclaw.ai/help/faq#does-homebrew-work-on-linux

@ElijahLynn commented on GitHub (Feb 14, 2026): homebrew (`brew`) support was removed by @justin-russell in: * 6a1e762e3c04feadc445ca54be31426c30498d39 But from my understanding as a brand new openclaw user is that brew works on linux and is needed for proper linux support. Unless you don't use any skills I suppose. I'm a bit confused at this point. Still working to get my hello-world Openclaw instance up with some useful skills. https://docs.openclaw.ai/help/faq#does-homebrew-work-on-linux
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: openclaw/openclaw-ansible#3