Xây dựng trợ lý cá nhân với OpenClaw (kiểu Clawd)
OpenClaw là Gateway kết nối WhatsApp + Telegram + Discord + iMessage cho các Agent Pi. Plugin hỗ trợ thêm Mattermost. Hướng dẫn này là cách setup “trợ lý cá nhân”: một số WhatsApp riêng hoạt động như agent luôn sẵn sàng của bạn.
⚠️ An toàn trước tiên
Các bạn đang đặt agent vào vị trí có thể:
- chạy lệnh trên máy của bạn (tùy thuộc vào cách setup Pi tool)
- đọc/ghi file trong workspace của bạn
- gửi tin nhắn ra ngoài qua WhatsApp/Telegram/Discord/Mattermost (plugin)
Bắt đầu thận trọng nhé:
- Luôn set
channels.whatsapp.allowFrom(đừng bao giờ chạy mở toang ra thế giới trên Mac cá nhân của bạn). - Dùng một số WhatsApp riêng cho trợ lý.
- Heartbeat mặc định là mỗi 30 phút. Tắt đi cho đến khi bạn tin tưởng setup bằng cách set
agents.defaults.heartbeat.every: "0m".
Yêu cầu trước khi bắt đầu
- Node 22+
- OpenClaw có sẵn trên PATH (khuyên dùng: cài global)
- Một số điện thoại thứ hai (SIM/eSIM/trả trước) cho trợ lý
npm install -g openclaw@latest
# hoặc: pnpm add -g openclaw@latest
Từ source (development):
git clone https://github.com/openclaw/openclaw.git
cd openclaw
pnpm install
pnpm ui:build # tự động cài UI deps lần đầu chạy
pnpm build
pnpm link --global
Setup hai điện thoại (khuyên dùng)
Các bạn muốn như này:
Điện thoại của bạn (cá nhân) Điện thoại thứ hai (trợ lý)
┌─────────────────┐ ┌─────────────────┐
│ WhatsApp của │ ──────▶ │ WhatsApp trợ │
│ bạn │ tin nhắn │ lý │
│ +1-555-YOU │ │ +1-555-CLAWD │
└─────────────────┘ └────────┬────────┘
│ liên kết qua QR
▼
┌─────────────────┐
│ Mac của bạn │
│ (openclaw) │
│ Pi agent │
└─────────────────┘
Nếu bạn liên kết WhatsApp cá nhân với OpenClaw, mọi tin nhắn gửi cho bạn sẽ trở thành “input của agent”. Đó hiếm khi là điều bạn muốn.
Bắt đầu nhanh 5 phút
- Ghép nối WhatsApp Web (hiển thị QR; quét bằng điện thoại trợ lý):
openclaw channels login
- Khởi động Gateway (để nó chạy):
openclaw gateway --port 18789
- Đặt config tối thiểu vào
~/.clawdbot/openclaw.json:
{
channels: { whatsapp: { allowFrom: ["+15555550123"] } }
}
Giờ nhắn tin đến số trợ lý từ điện thoại đã được cho phép.
Khi onboarding xong, hệ thống tự động mở dashboard với gateway token của bạn và in ra link có token. Để mở lại sau: openclaw dashboard.
Tạo workspace cho agent (AGENTS)
Clawd đọc hướng dẫn vận hành và “bộ nhớ” từ thư mục workspace của nó.
Mặc định, OpenClaw dùng ~/clawd làm workspace của agent, và sẽ tự động tạo nó (cùng với các file khởi đầu AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md) khi setup/chạy agent lần đầu. BOOTSTRAP.md chỉ được tạo khi workspace hoàn toàn mới (nó sẽ không quay lại sau khi bạn xóa).
Mẹo: coi thư mục này như “bộ nhớ” của Clawd và biến nó thành git repo (lý tưởng là private) để AGENTS.md + các file memory được backup. Nếu git đã cài, workspace mới sẽ tự động được khởi tạo.
openclaw setup
Cấu trúc workspace đầy đủ + hướng dẫn backup: Agent workspace Quy trình memory: Memory
Tùy chọn: chọn workspace khác với agents.defaults.workspace (hỗ trợ ~).
{
agent: {
workspace: "~/clawd"
}
}
Nếu bạn đã có sẵn các file workspace từ một repo, bạn có thể tắt hoàn toàn việc tạo file bootstrap:
{
agent: {
skipBootstrap: true
}
}
Config biến nó thành “một trợ lý”
OpenClaw mặc định đã có setup trợ lý tốt, nhưng thường bạn sẽ muốn điều chỉnh:
- persona/hướng dẫn trong
SOUL.md - thinking defaults (nếu muốn)
- heartbeats (khi bạn đã tin tưởng nó)
Ví dụ:
{
logging: { level: "info" },
agent: {
model: "anthropic/claude-opus-4-5",
workspace: "~/clawd",
thinkingDefault: "high",
timeoutSeconds: 1800,
// Bắt đầu với 0; bật sau.
heartbeat: { every: "0m" }
},
channels: {
whatsapp: {
allowFrom: ["+15555550123"],
groups: {
"*": { requireMention: true }
}
}
},
routing: {
groupChat: {
mentionPatterns: ["@clawd", "clawd"]
}
},
session: {
scope: "per-sender",
resetTriggers: ["/new", "/reset"],
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 10080
}
}
}
Session và memory
- File session:
~/.clawdbot/agents/<agentId>/sessions/{{SessionId}}.jsonl - Metadata session (token usage, last route, v.v.):
~/.clawdbot/agents/<agentId>/sessions/sessions.json(cũ:~/.clawdbot/sessions/sessions.json) /newhoặc/resetbắt đầu session mới cho chat đó (có thể config quaresetTriggers). Nếu gửi một mình, agent sẽ trả lời một lời chào ngắn để xác nhận reset./compact [instructions]nén context của session và báo cáo budget context còn lại.
Heartbeat (chế độ chủ động)
Mặc định, OpenClaw chạy heartbeat mỗi 30 phút với prompt:
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.
Set agents.defaults.heartbeat.every: "0m" để tắt.
- Nếu
HEARTBEAT.mdtồn tại nhưng thực tế trống (chỉ có dòng trống và markdown header như# Heading), OpenClaw bỏ qua heartbeat run để tiết kiệm API call. - Nếu file không tồn tại, heartbeat vẫn chạy và model tự quyết định làm gì.
- Nếu agent trả lời
HEARTBEAT_OK(có thể có thêm text ngắn; xemagents.defaults.heartbeat.ackMaxChars), OpenClaw chặn việc gửi ra ngoài cho heartbeat đó. - Heartbeat chạy full agent turn — khoảng thời gian ngắn hơn sẽ tốn nhiều token hơn.
{
agent: {
heartbeat: { every: "30m" }
}
}
Media vào và ra
File đính kèm vào (ảnh/audio/docs) có thể được đưa vào lệnh của bạn qua template:
{{MediaPath}}(đường dẫn file temp local){{MediaUrl}}(pseudo-URL){{Transcript}}(nếu bật audio transcription)
File đính kèm ra từ agent: thêm MEDIA:<path-or-url> trên một dòng riêng (không có khoảng trắng). Ví dụ:
Đây là screenshot.
MEDIA:/tmp/screenshot.png
OpenClaw trích xuất chúng và gửi dưới dạng media cùng với text.
Checklist vận hành
openclaw status # trạng thái local (creds, sessions, queued events)
openclaw status --all # chẩn đoán đầy đủ (read-only, có thể paste)
openclaw status --deep # thêm gateway health probe (Telegram + Discord)
openclaw health --json # snapshot gateway health (WS)
Log nằm dưới /tmp/openclaw/ (mặc định: openclaw-YYYY-MM-DD.log).
Bước tiếp theo
- WebChat: WebChat
- Gateway ops: Gateway runbook
- Cron + wakeup: Cron jobs
- macOS menu bar companion: OpenClaw macOS app
- iOS node app: iOS app
- Android node app: Android app
- Windows status: Windows (WSL2)
- Linux status: Linux app
- Security: Security