Budowanie asystenta osobistego z OpenClaw

OpenClaw to bramka WhatsApp + Telegram + Discord + iMessage dla agentów Pi. Wtyczki dodają Mattermost. Ten przewodnik opisuje konfigurację „asystenta osobistego”: jeden dedykowany numer WhatsApp, który zachowuje się jak twój zawsze dostępny agent.

⚠️ Bezpieczeństwo przede wszystkim

Dajesz agentowi możliwość:

  • uruchamiania komend na twojej maszynie (zależnie od konfiguracji narzędzi Pi)
  • czytania/zapisywania plików w twoim workspace
  • wysyłania wiadomości przez WhatsApp/Telegram/Discord/Mattermost (wtyczka)

Zacznij ostrożnie:

  • Zawsze ustaw channels.whatsapp.allowFrom (nigdy nie uruchamiaj otwartego na świat na swoim osobistym Macu).
  • Używaj dedykowanego numeru WhatsApp dla asystenta.
  • Heartbeaty domyślnie działają co 30 minut. Wyłącz je, dopóki nie zaufasz konfiguracji, ustawiając agents.defaults.heartbeat.every: "0m".

Wymagania wstępne

  • OpenClaw zainstalowany i onboarded — zobacz Pierwsze kroki, jeśli jeszcze tego nie zrobiłeś
  • Drugi numer telefonu (SIM/eSIM/prepaid) dla asystenta

Konfiguracja z dwoma telefonami (zalecana)

Chcesz osiągnąć to:

flowchart TB
    A["<b>Your Phone (personal)<br></b><br>Your WhatsApp<br>+1-555-YOU"] -- message --> B["<b>Second Phone (assistant)<br></b><br>Assistant WA<br>+1-555-ASSIST"]
    B -- linked via QR --> C["<b>Your Mac (openclaw)<br></b><br>Pi agent"]

Jeśli podłączysz osobisty WhatsApp do OpenClaw, każda wiadomość do ciebie staje się „inputem agenta”. Rzadko tego chcesz.

5-minutowy szybki start

  1. Sparuj WhatsApp Web (pokazuje QR; zeskanuj telefonem asystenta):
openclaw channels login
  1. Uruchom Gateway (zostaw działający):
openclaw gateway --port 18789
  1. Umieść minimalną konfigurację w ~/.openclaw/openclaw.json:
{
  channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}

Teraz wyślij wiadomość na numer asystenta z telefonu z allowlisty.

Po zakończeniu onboardingu system automatycznie otworzy dashboard i wyświetli czysty (bez tokenów) link. Jeśli pyta o auth, wklej token z gateway.auth.token w ustawieniach Control UI. Żeby otworzyć ponownie: openclaw dashboard.

Daj agentowi workspace (AGENTS)

OpenClaw czyta instrukcje operacyjne i „pamięć” z katalogu workspace.

Domyślnie OpenClaw używa ~/.openclaw/workspace jako workspace agenta i tworzy go automatycznie (plus startowe pliki AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md) przy setup/pierwszym uruchomieniu agenta. BOOTSTRAP.md jest tworzony tylko gdy workspace jest zupełnie nowy (nie wraca po usunięciu). MEMORY.md jest opcjonalny (nie tworzony automatycznie); gdy istnieje, jest ładowany dla normalnych sesji. Sesje subagentów wstrzykują tylko AGENTS.md i TOOLS.md.

Wskazówka: traktuj ten folder jako „pamięć” OpenClaw i zrób z niego repo git (najlepiej prywatne), żeby twoje AGENTS.md + pliki pamięci miały backup. Jeśli git jest zainstalowany, nowe workspace’y są automatycznie inicjalizowane.

openclaw setup

Pełny układ workspace + przewodnik backupu: Workspace agenta Workflow pamięci: Pamięć

Opcjonalnie: wybierz inny workspace przez agents.defaults.workspace (obsługuje ~).

{
  agent: {
    workspace: "~/.openclaw/workspace",
  },
}

Jeśli już dostarczasz własne pliki workspace z repozytorium, możesz całkowicie wyłączyć tworzenie plików bootstrap:

{
  agent: {
    skipBootstrap: true,
  },
}

Konfiguracja, która zamienia go w „asystenta”

OpenClaw domyślnie jest dobrze skonfigurowany jako asystent, ale zwykle będziesz chciał dostroić:

  • personę/instrukcje w SOUL.md
  • domyślne ustawienia thinking (jeśli potrzebujesz)
  • heartbeaty (gdy mu zaufasz)

Przykład:

{
  logging: { level: "info" },
  agent: {
    model: "anthropic/claude-opus-4-6",
    workspace: "~/.openclaw/workspace",
    thinkingDefault: "high",
    timeoutSeconds: 1800,
    // Zacznij od 0; włącz później.
    heartbeat: { every: "0m" },
  },
  channels: {
    whatsapp: {
      allowFrom: ["+15555550123"],
      groups: {
        "*": { requireMention: true },
      },
    },
  },
  routing: {
    groupChat: {
      mentionPatterns: ["@openclaw", "openclaw"],
    },
  },
  session: {
    scope: "per-sender",
    resetTriggers: ["/new", "/reset"],
    reset: {
      mode: "daily",
      atHour: 4,
      idleMinutes: 10080,
    },
  },
}

Sesje i pamięć

  • Pliki sesji: ~/.openclaw/agents/<agentId>/sessions/{{SessionId}}.jsonl
  • Metadane sesji (zużycie tokenów, ostatnia trasa itp.): ~/.openclaw/agents/<agentId>/sessions/sessions.json (legacy: ~/.openclaw/sessions/sessions.json)
  • /new lub /reset rozpoczyna nową sesję dla danego czatu (konfigurowalne przez resetTriggers). Wysłane samodzielnie powoduje, że agent odpowiada krótkim powitaniem potwierdzającym reset.
  • /compact [instructions] kompaktuje kontekst sesji i raportuje pozostały budżet kontekstu.

Heartbeaty (tryb proaktywny)

Domyślnie OpenClaw uruchamia heartbeat co 30 minut z promptem: Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK. Ustaw agents.defaults.heartbeat.every: "0m", żeby wyłączyć.

  • Jeśli HEARTBEAT.md istnieje, ale jest efektywnie pusty (tylko puste linie i nagłówki markdown jak # Heading), OpenClaw pomija uruchomienie heartbeatu, żeby oszczędzić wywołania API.
  • Jeśli plik nie istnieje, heartbeat i tak się uruchamia i model decyduje, co zrobić.
  • Jeśli agent odpowie HEARTBEAT_OK (opcjonalnie z krótkim paddingiem; zobacz agents.defaults.heartbeat.ackMaxChars), OpenClaw wstrzymuje dostarczanie na zewnątrz dla tego heartbeatu.
  • Domyślnie dostarczanie heartbeatu do celów DM-style user:<id> jest dozwolone. Ustaw agents.defaults.heartbeat.directPolicy: "block", żeby wstrzymać dostarczanie do celów bezpośrednich, jednocześnie utrzymując uruchomienia heartbeatu.
  • Heartbeaty uruchamiają pełne tury agenta — krótsze interwały spalają więcej tokenów.
{
  agent: {
    heartbeat: { every: "30m" },
  },
}

Media wchodzące i wychodzące

Przychodzące załączniki (obrazy/audio/dokumenty) mogą być udostępniane twojemu poleceniu przez szablony:

  • {{MediaPath}} (lokalna ścieżka pliku tymczasowego)
  • {{MediaUrl}} (pseudo-URL)
  • {{Transcript}} (jeśli transkrypcja audio jest włączona)

Załączniki wychodzące od agenta: umieść MEDIA:<path-or-url> w osobnej linii (bez spacji). Przykład:

Here's the screenshot.
MEDIA:https://example.com/screenshot.png

OpenClaw wyciąga je i wysyła jako media razem z tekstem.

Checklist operacyjny

openclaw status          # lokalny status (dane logowania, sesje, zdarzenia w kolejce)
openclaw status --all    # pełna diagnoza (tylko odczyt, można wkleić)
openclaw status --deep   # dodaje sondy health gateway (Telegram + Discord)
openclaw health --json   # snapshot health gateway (WS)

Logi znajdują się w /tmp/openclaw/ (domyślnie: openclaw-YYYY-MM-DD.log).

Następne kroki