<p align="center">
  <img src="docs/assets/zeroclaw.png" alt="ZeroClaw" width="200" />
</p>

<h1 align="center">ZeroClaw 🦀</h1>

<p align="center">
  <strong>Không tốn thêm tài nguyên. Không đánh đổi. 100% Rust. 100% Đa nền tảng.</strong><br>
  ⚡️ <strong>Chạy trên phần cứng $10 với RAM dưới 5MB — ít hơn 99% bộ nhớ so với OpenClaw, rẻ hơn 98% so với Mac mini!</strong>
</p>

<p align="center">
  <a href="LICENSE-APACHE"><img src="https://img.shields.io/badge/license-MIT%20OR%20Apache%202.0-blue.svg" alt="License: MIT OR Apache-2.0" /></a>
  <a href="NOTICE"><img src="https://img.shields.io/badge/contributors-27+-green.svg" alt="Contributors" /></a>
  <a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=flat&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>
  <a href="https://x.com/zeroclawlabs?s=21"><img src="https://img.shields.io/badge/X-%40zeroclawlabs-000000?style=flat&logo=x&logoColor=white" alt="X: @zeroclawlabs" /></a>
  <a href="https://zeroclawlabs.cn/group.jpg"><img src="https://img.shields.io/badge/WeChat-Group-B7D7A8?logo=wechat&logoColor=white" alt="WeChat Group" /></a>
  <a href="https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search"><img src="https://img.shields.io/badge/Xiaohongshu-Official-FF2442?style=flat" alt="Xiaohongshu: Official" /></a>
  <a href="https://t.me/zeroclawlabs"><img src="https://img.shields.io/badge/Telegram-%40zeroclawlabs-26A5E4?style=flat&logo=telegram&logoColor=white" alt="Telegram: @zeroclawlabs" /></a>
  <a href="https://www.facebook.com/groups/zeroclaw"><img src="https://img.shields.io/badge/Facebook-Group-1877F2?style=flat&logo=facebook&logoColor=white" alt="Facebook Group" /></a>
  <a href="https://www.reddit.com/r/zeroclawlabs/"><img src="https://img.shields.io/badge/Reddit-r%2Fzeroclawlabs-FF4500?style=flat&logo=reddit&logoColor=white" alt="Reddit: r/zeroclawlabs" /></a>
</p>
<p align="center">
Được xây dựng bởi sinh viên và thành viên của các cộng đồng Harvard, MIT và Sundai.Club.
</p>

<p align="center">
  🌐 <strong>Ngôn ngữ:</strong>
  <a href="README.md">🇺🇸 English</a> ·
  <a href="README.zh-CN.md">🇨🇳 简体中文</a> ·
  <a href="README.ja.md">🇯🇵 日本語</a> ·
  <a href="README.ko.md">🇰🇷 한국어</a> ·
  <a href="README.vi.md">🇻🇳 Tiếng Việt</a> ·
  <a href="README.tl.md">🇵🇭 Tagalog</a> ·
  <a href="README.es.md">🇪🇸 Español</a> ·
  <a href="README.pt.md">🇧🇷 Português</a> ·
  <a href="README.it.md">🇮🇹 Italiano</a> ·
  <a href="README.de.md">🇩🇪 Deutsch</a> ·
  <a href="README.fr.md">🇫🇷 Français</a> ·
  <a href="README.ar.md">🇸🇦 العربية</a> ·
  <a href="README.hi.md">🇮🇳 हिन्दी</a> ·
  <a href="README.ru.md">🇷🇺 Русский</a> ·
  <a href="README.bn.md">🇧🇩 বাংলা</a> ·
  <a href="README.he.md">🇮🇱 עברית</a> ·
  <a href="README.pl.md">🇵🇱 Polski</a> ·
  <a href="README.cs.md">🇨🇿 Čeština</a> ·
  <a href="README.nl.md">🇳🇱 Nederlands</a> ·
  <a href="README.tr.md">🇹🇷 Türkçe</a> ·
  <a href="README.uk.md">🇺🇦 Українська</a> ·
  <a href="README.id.md">🇮🇩 Bahasa Indonesia</a> ·
  <a href="README.th.md">🇹🇭 ไทย</a> ·
  <a href="README.ur.md">🇵🇰 اردو</a> ·
  <a href="README.ro.md">🇷🇴 Română</a> ·
  <a href="README.sv.md">🇸🇪 Svenska</a> ·
  <a href="README.el.md">🇬🇷 Ελληνικά</a> ·
  <a href="README.hu.md">🇭🇺 Magyar</a> ·
  <a href="README.fi.md">🇫🇮 Suomi</a> ·
  <a href="README.da.md">🇩🇰 Dansk</a> ·
  <a href="README.nb.md">🇳🇴 Norsk</a>
</p>

<p align="center">
  <a href="#quick-start">Bắt đầu</a> |
  <a href="install.sh">Cài đặt một lần bấm</a> |
  <a href="docs/i18n/vi/README.md">Trung tâm tài liệu</a> |
  <a href="docs/SUMMARY.md">Mục lục tài liệu</a>
</p>

<p align="center">
  <strong>Truy cập nhanh:</strong>
  <a href="docs/reference/README.md">Tài liệu tham khảo</a> ·
  <a href="docs/ops/README.md">Vận hành</a> ·
  <a href="docs/i18n/vi/troubleshooting.md">Khắc phục sự cố</a> ·
  <a href="docs/security/README.md">Bảo mật</a> ·
  <a href="docs/hardware/README.md">Phần cứng</a> ·
  <a href="docs/contributing/README.md">Đóng góp</a>
</p>

<p align="center">
  <strong>Hạ tầng trợ lý AI tự chủ — nhanh, nhỏ gọn</strong><br />
  Triển khai ở đâu cũng được. Thay thế gì cũng được.
</p>

<p align="center">
  ZeroClaw là <strong>hệ điều hành runtime</strong> cho các quy trình làm việc của tác tử — cơ sở hạ tầng trừu tượng hóa mô hình, công cụ, bộ nhớ và thực thi để xây dựng tác tử một lần và chạy ở mọi nơi.
</p>

<p align="center"><code>Kiến trúc trait-driven · mặc định bảo mật · provider/channel/tool hoán đổi tự do · mọi thứ đều dễ mở rộng</code></p>

### 📢 Thông báo

Bảng này dành cho các thông báo quan trọng (thay đổi không tương thích, cảnh báo bảo mật, lịch bảo trì, vấn đề chặn release).

| Ngày (UTC) | Mức độ | Thông báo | Hành động |
|---|---|---|---|
| 2026-02-19 | _Nghiêm trọng_ | Chúng tôi **không có liên kết** với `openagen/zeroclaw` hoặc `zeroclaw.org`. Tên miền `zeroclaw.org` hiện đang trỏ đến fork `openagen/zeroclaw`, và tên miền/repository đó đang mạo danh website/dự án chính thức của chúng tôi. | Không tin tưởng thông tin, binary, gây quỹ, hay thông báo từ các nguồn đó. Chỉ sử dụng [repository này](https://github.com/zeroclaw-labs/zeroclaw) và các tài khoản mạng xã hội đã được xác minh của chúng tôi. |
| 2026-02-21 | _Quan trọng_ | Website chính thức của chúng tôi đã ra mắt: [zeroclawlabs.ai](https://zeroclawlabs.ai). Cảm ơn mọi người đã kiên nhẫn chờ đợi. Chúng tôi vẫn đang ghi nhận các nỗ lực mạo danh, vì vậy **không** tham gia bất kỳ hoạt động đầu tư hoặc gây quỹ nào nhân danh ZeroClaw nếu thông tin đó không được công bố qua các kênh chính thức của chúng tôi. | Sử dụng [repository này](https://github.com/zeroclaw-labs/zeroclaw) làm nguồn thông tin duy nhất đáng tin cậy. Theo dõi [X (@zeroclawlabs)](https://x.com/zeroclawlabs?s=21), [Telegram (@zeroclawlabs)](https://t.me/zeroclawlabs), [Facebook (nhóm)](https://www.facebook.com/groups/zeroclaw), [Reddit (r/zeroclawlabs)](https://www.reddit.com/r/zeroclawlabs/), và [Xiaohongshu](https://www.xiaohongshu.com/user/profile/67cbfc43000000000d008307?xsec_token=AB73VnYnGNx5y36EtnnZfGmAmS-6Wzv8WMuGpfwfkg6Yc%3D&xsec_source=pc_search) để nhận cập nhật chính thức. |
| 2026-02-19 | _Quan trọng_ | Anthropic đã cập nhật điều khoản Xác thực và Sử dụng Thông tin xác thực vào ngày 2026-02-19. Xác thực OAuth (Free, Pro, Max) được dành riêng cho Claude Code và Claude.ai; việc sử dụng OAuth token từ Claude Free/Pro/Max trong bất kỳ sản phẩm, công cụ hay dịch vụ nào khác (bao gồm Agent SDK) đều không được phép và có thể vi phạm Điều khoản Dịch vụ cho Người tiêu dùng. | Vui lòng tạm thời tránh tích hợp Claude Code OAuth để ngăn ngừa khả năng mất mát. Điều khoản gốc: [Authentication and Credential Use](https://code.claude.com/docs/en/legal-and-compliance#authentication-and-credential-use). |

### ✨ Tính năng

- 🏎️ **Mặc định tinh gọn:** Các tác vụ CLI và kiểm tra trạng thái chỉ tốn vài MB bộ nhớ trên bản release.
- 💰 **Triển khai rẻ:** Chạy tốt trên board giá rẻ và instance cloud nhỏ, không cần runtime nặng.
- ⚡ **Khởi động lạnh nhanh:** Một binary Rust duy nhất — lệnh và daemon khởi động gần như tức thì.
- 🌍 **Chạy ở đâu cũng được:** Một binary chạy trên ARM, x86 và RISC-V — provider/channel/tool hoán đổi tự do.

### Vì sao các team chọn ZeroClaw

- **Mặc định tinh gọn:** binary Rust nhỏ, khởi động nhanh, tốn ít bộ nhớ.
- **Bảo mật từ gốc:** xác thực ghép cặp, sandbox nghiêm ngặt, allowlist rõ ràng, giới hạn workspace.
- **Hoán đổi tự do:** mọi hệ thống cốt lõi đều là trait (provider, channel, tool, memory, tunnel).
- **Không khoá vendor:** hỗ trợ provider tương thích OpenAI + endpoint tùy chỉnh dễ dàng mở rộng.

## So sánh hiệu suất (ZeroClaw vs OpenClaw, có thể tái tạo)

Đo nhanh trên máy cục bộ (macOS arm64, tháng 2/2026), quy đổi cho phần cứng edge 0.8GHz.

| | OpenClaw | NanoBot | PicoClaw | ZeroClaw 🦀 |
|---|---|---|---|---|
| **Ngôn ngữ** | TypeScript | Python | Go | **Rust** |
| **RAM** | > 1GB | > 100MB | < 10MB | **< 5MB** |
| **Khởi động (lõi 0.8GHz)** | > 500s | > 30s | < 1s | **< 10ms** |
| **Kích thước binary** | ~28MB (dist) | N/A (Scripts) | ~8MB | **3.4 MB** |
| **Chi phí** | Mac Mini $599 | Linux SBC ~$50 | Linux Board $10 | **Phần cứng bất kỳ $10** |

> Ghi chú: Kết quả ZeroClaw được đo trên release build sử dụng `/usr/bin/time -l`. OpenClaw yêu cầu runtime Node.js (thường thêm ~390MB bộ nhớ overhead), còn NanoBot yêu cầu runtime Python. PicoClaw và ZeroClaw là các static binary. Số RAM ở trên là bộ nhớ runtime; yêu cầu biên dịch lúc build-time sẽ cao hơn.

<p align="center">
  <img src="docs/assets/zeroclaw-comparison.jpeg" alt="ZeroClaw vs OpenClaw Comparison" width="800" />
</p>

### Tự đo trên máy bạn

Kết quả benchmark thay đổi theo code và toolchain, nên hãy tự đo bản build hiện tại:

```bash
cargo build --release
ls -lh target/release/zeroclaw

/usr/bin/time -l target/release/zeroclaw --help
/usr/bin/time -l target/release/zeroclaw status
```

Ví dụ mẫu (macOS arm64, đo ngày 18 tháng 2 năm 2026):

- Kích thước binary release: `8.8M`
- `zeroclaw --help`: khoảng `0.02s`, bộ nhớ đỉnh ~`3.9MB`
- `zeroclaw status`: khoảng `0.01s`, bộ nhớ đỉnh ~`4.1MB`

## Yêu cầu hệ thống

<details>
<summary><strong>Windows</strong></summary>

### Bắt buộc (Windows)

1. **Visual Studio Build Tools** (cung cấp MSVC linker và Windows SDK):
   ```powershell
   winget install Microsoft.VisualStudio.2022.BuildTools
   ```
   Trong quá trình cài đặt (hoặc qua Visual Studio Installer), chọn workload **"Desktop development with C++"**.

2. **Rust toolchain:**
   ```powershell
   winget install Rustlang.Rustup
   ```
   Sau khi cài đặt, mở terminal mới và chạy `rustup default stable` để đảm bảo toolchain stable đang hoạt động.

3. **Xác minh** cả hai đang hoạt động:
   ```powershell
   rustc --version
   cargo --version
   ```

### Tùy chọn (Windows)

- **Docker Desktop** — chỉ cần thiết nếu dùng mục `### Hỗ trợ runtime (hiện tại)` (`runtime.kind = "docker"`). Cài đặt qua `winget install Docker.DockerDesktop`.

</details>

<details>
<summary><strong>Linux / macOS</strong></summary>

### Bắt buộc (Linux/macOS)

1. **Công cụ build cơ bản:**
   - **Linux (Debian/Ubuntu):** `sudo apt install build-essential pkg-config`
   - **Linux (Fedora/RHEL):** `sudo dnf group install development-tools && sudo dnf install pkg-config`
   - **macOS:** Cài đặt Xcode Command Line Tools: `xcode-select --install`

2. **Rust toolchain:**
   ```bash
   curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
   ```
   Xem [rustup.rs](https://rustup.rs) để biết thêm chi tiết.

3. **Xác minh** cả hai đang hoạt động:
   ```bash
   rustc --version
   cargo --version
   ```

#### Cài bằng một lệnh

Hoặc bỏ qua các bước trên, cài hết mọi thứ (system deps, Rust, ZeroClaw) chỉ bằng một lệnh:

```bash
curl -LsSf https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/install.sh | bash
```

#### Yêu cầu tài nguyên biên dịch

Việc build từ source đòi hỏi nhiều tài nguyên hơn so với chạy binary kết quả:

| Tài nguyên | Tối thiểu | Khuyến nghị |
|---|---|---|
| **RAM + swap** | 2 GB | 4 GB+ |
| **Dung lượng đĩa trống** | 6 GB | 10 GB+ |

Nếu cấu hình máy thấp hơn mức tối thiểu, dùng binary có sẵn:

```bash
./install.sh --prefer-prebuilt
```

Chỉ cài từ binary, không quay lại build từ source:

```bash
./install.sh --prebuilt-only
```

### Tùy chọn (Linux/macOS)

- **Docker** — chỉ cần thiết nếu dùng mục `### Hỗ trợ runtime (hiện tại)` (`runtime.kind = "docker"`). Cài đặt qua package manager hoặc [docker.com](https://docs.docker.com/engine/install/).

> **Lưu ý:** Lệnh `cargo build --release` mặc định dùng `codegen-units=1` để giảm áp lực biên dịch đỉnh. Để build nhanh hơn trên máy mạnh, dùng `cargo build --profile release-fast`.

</details>

## Bắt đầu nhanh

### Homebrew (macOS/Linuxbrew)

```bash
brew install zeroclaw
```

### Bootstrap một lần bấm

```bash
# Khuyến nghị: clone rồi chạy script bootstrap cục bộ
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
./install.sh

# Tùy chọn: cài đặt system dependencies + Rust trên máy mới
./install.sh --install-system-deps --install-rust

# Tùy chọn: ưu tiên binary dựng sẵn (khuyến nghị cho máy ít RAM/ít dung lượng đĩa)
./install.sh --prefer-prebuilt

# Tùy chọn: cài đặt chỉ từ binary (không fallback sang build source)
./install.sh --prebuilt-only

# Tùy chọn: chạy onboarding trong cùng luồng
./install.sh --onboard --api-key "sk-..." --provider openrouter [--model "openrouter/auto"]

# Tùy chọn: chạy bootstrap + onboarding hoàn toàn ở chế độ tương thích với Docker
./install.sh --docker

# Tùy chọn: ép dùng Podman làm container CLI
ZEROCLAW_CONTAINER_CLI=podman ./install.sh --docker

# Tùy chọn: ở chế độ --docker, bỏ qua build image local và dùng tag local hoặc pull image fallback
./install.sh --docker --skip-build
```

Cài từ xa bằng một lệnh (nên xem trước nếu môi trường nhạy cảm về bảo mật):

```bash
curl -fsSL https://raw.githubusercontent.com/zeroclaw-labs/zeroclaw/main/install.sh | bash
```

Chi tiết: [`docs/setup-guides/one-click-bootstrap.md`](docs/setup-guides/one-click-bootstrap.md) (chế độ toolchain có thể yêu cầu `sudo` cho các gói hệ thống).

### Binary có sẵn

Release asset được phát hành cho:

- Linux: `x86_64`, `aarch64`, `armv7`
- macOS: `x86_64`, `aarch64`
- Windows: `x86_64`

Tải asset mới nhất tại:
<https://github.com/zeroclaw-labs/zeroclaw/releases/latest>

Ví dụ (ARM64 Linux):

```bash
curl -fsSLO https://github.com/zeroclaw-labs/zeroclaw/releases/latest/download/zeroclaw-aarch64-unknown-linux-gnu.tar.gz
tar xzf zeroclaw-aarch64-unknown-linux-gnu.tar.gz
install -m 0755 zeroclaw "$HOME/.cargo/bin/zeroclaw"
```

```bash
git clone https://github.com/zeroclaw-labs/zeroclaw.git
cd zeroclaw
cargo build --release --locked
cargo install --path . --force --locked

# Đảm bảo ~/.cargo/bin có trong PATH của bạn
export PATH="$HOME/.cargo/bin:$PATH"

# Cài nhanh (không cần tương tác, có thể chỉ định model)
zeroclaw onboard --api-key sk-... --provider openrouter [--model "openrouter/auto"]

# Hoặc dùng trình hướng dẫn tương tác
zeroclaw onboard --interactive

# Hoặc chỉ sửa nhanh channel/allowlist
zeroclaw onboard --channels-only

# Chat
zeroclaw agent -m "Hello, ZeroClaw!"

# Chế độ tương tác
zeroclaw agent

# Khởi động gateway (webhook server)
zeroclaw gateway                # mặc định: 127.0.0.1:42617
zeroclaw gateway --port 0       # cổng ngẫu nhiên (tăng cường bảo mật)

# Khởi động runtime tự trị đầy đủ
zeroclaw daemon

# Kiểm tra trạng thái
zeroclaw status
zeroclaw auth status

# Chạy chẩn đoán hệ thống
zeroclaw doctor

# Kiểm tra sức khỏe channel
zeroclaw channel doctor

# Gắn định danh Telegram vào allowlist
zeroclaw channel bind-telegram 123456789

# Lấy thông tin cài đặt tích hợp
zeroclaw integrations info Telegram

# Lưu ý: Channel (Telegram, Discord, Slack) yêu cầu daemon đang chạy
# zeroclaw daemon

# Quản lý dịch vụ nền
zeroclaw service install
zeroclaw service status
zeroclaw service restart

# Chuyển dữ liệu từ OpenClaw (chạy thử trước)
zeroclaw migrate openclaw --dry-run
zeroclaw migrate openclaw
```

> **Chạy trực tiếp khi phát triển (không cần cài toàn cục):** thêm `cargo run --release --` trước lệnh (ví dụ: `cargo run --release -- status`).

## Xác thực theo gói đăng ký (OpenAI Codex / Claude Code)

ZeroClaw hỗ trợ profile xác thực theo gói đăng ký (đa tài khoản, mã hóa khi lưu).

- File lưu trữ: `~/.zeroclaw/auth-profiles.json`
- Khóa mã hóa: `~/.zeroclaw/.secret_key`
- Định dạng profile id: `<provider>:<profile_name>` (ví dụ: `openai-codex:work`)

OpenAI Codex OAuth (đăng ký ChatGPT):

```bash
# Khuyến nghị trên server/headless
zeroclaw auth login --provider openai-codex --device-code

# Luồng Browser/callback với fallback paste
zeroclaw auth login --provider openai-codex --profile default
zeroclaw auth paste-redirect --provider openai-codex --profile default

# Kiểm tra / làm mới / chuyển profile
zeroclaw auth status
zeroclaw auth refresh --provider openai-codex --profile default
zeroclaw auth use --provider openai-codex --profile work
```

Claude Code / Anthropic setup-token:

```bash
# Dán token đăng ký/setup (chế độ Authorization header)
zeroclaw auth paste-token --provider anthropic --profile default --auth-kind authorization

# Lệnh alias
zeroclaw auth setup-token --provider anthropic --profile default
```

Chạy agent với xác thực đăng ký:

```bash
zeroclaw agent --provider openai-codex -m "hello"
zeroclaw agent --provider openai-codex --auth-profile openai-codex:work -m "hello"

# Anthropic hỗ trợ cả API key và biến môi trường auth token:
# ANTHROPIC_AUTH_TOKEN, ANTHROPIC_OAUTH_TOKEN, ANTHROPIC_API_KEY
zeroclaw agent --provider anthropic -m "hello"
```

## Kiến trúc

Mọi hệ thống con đều là **trait** — chỉ cần đổi cấu hình, không cần sửa code.

<p align="center">
  <img src="docs/assets/architecture.svg" alt="ZeroClaw Architecture" width="900" />
</p>

| Hệ thống con | Trait | Đi kèm sẵn | Mở rộng |
|-----------|-------|------------|--------|
| **Mô hình AI** | `Provider` | Danh mục provider qua `zeroclaw providers` (hiện có 28 built-in + alias, cộng endpoint tùy chỉnh) | `custom:https://your-api.com` (tương thích OpenAI) hoặc `anthropic-custom:https://your-api.com` |
| **Channel** | `Channel` | CLI, Telegram, Discord, Slack, Mattermost, iMessage, Matrix, Signal, WhatsApp, Linq, Email, IRC, Lark, DingTalk, QQ, Webhook | Bất kỳ messaging API nào |
| **Memory** | `Memory` | SQLite hybrid search, PostgreSQL backend (storage provider có thể cấu hình), Lucid bridge, Markdown files, backend `none` tường minh, snapshot/hydrate, response cache tùy chọn | Bất kỳ persistence backend nào |
| **Tool** | `Tool` | shell/file/memory, cron/schedule, git, pushover, browser, http_request, screenshot/image_info, composio (opt-in), delegate, hardware tools | Bất kỳ khả năng nào |
| **Observability** | `Observer` | Noop, Log, Multi | Prometheus, OTel |
| **Runtime** | `RuntimeAdapter` | Native, Docker (sandboxed) | Có thể thêm runtime bổ sung qua adapter; các kind không được hỗ trợ sẽ fail nhanh |
| **Bảo mật** | `SecurityPolicy` | Ghép cặp gateway, sandbox, allowlist, giới hạn tốc độ, phân vùng filesystem, secret mã hóa | — |
| **Định danh** | `IdentityConfig` | OpenClaw (markdown), AIEOS v1.1 (JSON) | Bất kỳ định dạng định danh nào |
| **Tunnel** | `Tunnel` | None, Cloudflare, Tailscale, ngrok, Custom | Bất kỳ tunnel binary nào |
| **Heartbeat** | Engine | Tác vụ định kỳ HEARTBEAT.md | — |
| **Skill** | Loader | TOML manifest + hướng dẫn SKILL.md | Community skill pack |
| **Tích hợp** | Registry | 70+ tích hợp trong 9 danh mục | Plugin system |

### Hỗ trợ runtime (hiện tại)

- ✅ Được hỗ trợ hiện nay: `runtime.kind = "native"` hoặc `runtime.kind = "docker"`
- 🚧 Đã lên kế hoạch, chưa triển khai: WASM / edge runtime

Khi cấu hình `runtime.kind` không được hỗ trợ, ZeroClaw sẽ thoát với thông báo lỗi rõ ràng thay vì âm thầm fallback về native.

### Hệ thống Memory (Search Engine toàn diện)

Tự phát triển hoàn toàn, không phụ thuộc bên ngoài — không Pinecone, không Elasticsearch, không LangChain:

| Lớp | Triển khai |
|-------|---------------|
| **Vector DB** | Embeddings lưu dưới dạng BLOB trong SQLite, tìm kiếm cosine similarity |
| **Keyword Search** | Bảng ảo FTS5 với BM25 scoring |
| **Hybrid Merge** | Hàm merge có trọng số tùy chỉnh (`vector.rs`) |
| **Embeddings** | Trait `EmbeddingProvider` — OpenAI, URL tùy chỉnh, hoặc noop |
| **Chunking** | Bộ chia đoạn markdown theo dòng, giữ nguyên heading |
| **Caching** | Bảng SQLite `embedding_cache` với LRU eviction |
| **Safe Reindex** | Rebuild FTS5 + re-embed các vector bị thiếu theo cách nguyên tử |

Agent tự động ghi nhớ, lưu trữ và quản lý memory qua các tool.

```toml
[memory]
backend = "sqlite"             # "sqlite", "lucid", "postgres", "markdown", "none"
auto_save = true
embedding_provider = "none"    # "none", "openai", "custom:https://..."
vector_weight = 0.7
keyword_weight = 0.3

# backend = "none" sử dụng no-op memory backend tường minh (không có persistence)

# Tùy chọn: ghi đè storage-provider cho remote memory backend.
# Khi provider = "postgres", ZeroClaw dùng PostgreSQL để lưu memory.
# Khóa db_url cũng chấp nhận alias `dbURL` để tương thích ngược.
#
# [storage.provider.config]
# provider = "postgres"
# db_url = "postgres://user:password@host:5432/zeroclaw"
# schema = "public"
# table = "memories"
# connect_timeout_secs = 15

# Tùy chọn cho backend = "sqlite": số giây tối đa chờ khi mở DB (ví dụ: file bị khóa). Bỏ qua hoặc để trống để không có timeout.
# sqlite_open_timeout_secs = 30

# Tùy chọn cho backend = "lucid"
# ZEROCLAW_LUCID_CMD=/usr/local/bin/lucid            # mặc định: lucid
# ZEROCLAW_LUCID_BUDGET=200                          # mặc định: 200
# ZEROCLAW_LUCID_LOCAL_HIT_THRESHOLD=3               # số lần hit cục bộ để bỏ qua external recall
# ZEROCLAW_LUCID_RECALL_TIMEOUT_MS=120               # giới hạn thời gian cho lucid context recall
# ZEROCLAW_LUCID_STORE_TIMEOUT_MS=800                # timeout đồng bộ async cho lucid store
# ZEROCLAW_LUCID_FAILURE_COOLDOWN_MS=15000           # thời gian nghỉ sau lỗi lucid, tránh thử lại liên tục
```

## Bảo mật

ZeroClaw thực thi bảo mật ở **mọi lớp** — không chỉ sandbox. Đáp ứng tất cả các hạng mục trong danh sách kiểm tra bảo mật của cộng đồng.

### Danh sách kiểm tra bảo mật

| # | Hạng mục | Trạng thái | Cách thực hiện |
|---|------|--------|-----|
| 1 | **Gateway không công khai ra ngoài** | ✅ | Bind vào `127.0.0.1` theo mặc định. Từ chối `0.0.0.0` nếu không có tunnel hoặc `allow_public_bind = true` tường minh. |
| 2 | **Yêu cầu ghép cặp** | ✅ | Mã một lần 6 chữ số khi khởi động. Trao đổi qua `POST /pair` để lấy bearer token. Mọi yêu cầu `/webhook` đều cần `Authorization: Bearer <token>`. |
| 3 | **Phân vùng filesystem (không phải /)** | ✅ | `workspace_only = true` theo mặc định. Chặn 14 thư mục hệ thống + 4 dotfile nhạy cảm. Chặn null byte injection. Phát hiện symlink escape qua canonicalization + kiểm tra resolved-path trong các tool đọc/ghi file. |
| 4 | **Chỉ truy cập qua tunnel** | ✅ | Gateway từ chối bind công khai khi không có tunnel đang hoạt động. Hỗ trợ Tailscale, Cloudflare, ngrok, hoặc tunnel tùy chỉnh. |

> **Tự chạy nmap:** `nmap -p 1-65535 <your-host>` — ZeroClaw chỉ bind vào localhost, nên không có gì bị lộ ra ngoài trừ khi bạn cấu hình tunnel tường minh.

### Allowlist channel (từ chối theo mặc định)

Chính sách kiểm soát người gửi đã được thống nhất:

- Allowlist rỗng = **từ chối tất cả tin nhắn đến**
- `"*"` = **cho phép tất cả** (phải opt-in tường minh)
- Nếu khác = allowlist khớp chính xác

Mặc định an toàn, hạn chế tối đa rủi ro lộ thông tin.

Tài liệu tham khảo đầy đủ về cấu hình channel: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md).

Cài đặt được khuyến nghị (bảo mật + nhanh):

- **Telegram:** thêm `@username` của bạn (không có `@`) và/hoặc Telegram user ID số vào allowlist.
- **Discord:** thêm Discord user ID của bạn vào allowlist.
- **Slack:** thêm Slack member ID của bạn (thường bắt đầu bằng `U`) vào allowlist.
- **Mattermost:** dùng API v4 tiêu chuẩn. Allowlist dùng Mattermost user ID.
- Chỉ dùng `"*"` cho kiểm thử mở tạm thời.

Luồng phê duyệt của operator qua Telegram:

1. Để `[channels_config.telegram].allowed_users = []` để từ chối theo mặc định khi khởi động.
2. Người dùng không được phép sẽ nhận được gợi ý kèm lệnh operator có thể copy:
   `zeroclaw channel bind-telegram <IDENTITY>`.
3. Operator chạy lệnh đó tại máy cục bộ, sau đó người dùng thử gửi tin nhắn lại.

Nếu cần phê duyệt thủ công một lần, chạy:

```bash
zeroclaw channel bind-telegram 123456789
```

Nếu bạn không chắc định danh nào cần dùng:

1. Khởi động channel và gửi một tin nhắn đến bot của bạn.
2. Đọc log cảnh báo để thấy định danh người gửi chính xác.
3. Thêm giá trị đó vào allowlist và chạy lại channel-only setup.

Nếu bạn thấy cảnh báo ủy quyền trong log (ví dụ: `ignoring message from unauthorized user`),
chạy lại channel setup:

```bash
zeroclaw onboard --channels-only
```

### Phản hồi media Telegram

Telegram định tuyến phản hồi theo **chat ID nguồn** (thay vì username),
tránh lỗi `Bad Request: chat not found`.

Với các phản hồi không phải văn bản, ZeroClaw có thể gửi file đính kèm Telegram khi assistant bao gồm các marker:

- `[IMAGE:<path-or-url>]`
- `[DOCUMENT:<path-or-url>]`
- `[VIDEO:<path-or-url>]`
- `[AUDIO:<path-or-url>]`
- `[VOICE:<path-or-url>]`

Path có thể là file cục bộ (ví dụ `/tmp/screenshot.png`) hoặc URL HTTPS.

### Cài đặt WhatsApp

ZeroClaw hỗ trợ hai backend WhatsApp:

- **Chế độ WhatsApp Web** (QR / pair code, không cần Meta Business API)
- **Chế độ WhatsApp Business Cloud API** (luồng webhook chính thức của Meta)

#### Chế độ WhatsApp Web (khuyến nghị cho dùng cá nhân/self-hosted)

1. **Build với hỗ trợ WhatsApp Web:**
   ```bash
   cargo build --features whatsapp-web
   ```

2. **Cấu hình ZeroClaw:**
   ```toml
   [channels_config.whatsapp]
   session_path = "~/.zeroclaw/state/whatsapp-web/session.db"
   pair_phone = "15551234567"   # tùy chọn; bỏ qua để dùng luồng QR
   pair_code = ""               # tùy chọn mã pair tùy chỉnh
   allowed_numbers = ["+1234567890"]  # định dạng E.164, hoặc ["*"] cho tất cả
   ```

3. **Khởi động channel/daemon và liên kết thiết bị:**
   - Chạy `zeroclaw channel start` (hoặc `zeroclaw daemon`).
   - Làm theo hướng dẫn ghép cặp trên terminal (QR hoặc pair code).
   - Trên WhatsApp điện thoại: **Cài đặt → Thiết bị đã liên kết**.

4. **Kiểm tra:** Gửi tin nhắn từ số được phép và xác nhận agent trả lời.

#### Chế độ WhatsApp Business Cloud API

WhatsApp dùng Cloud API của Meta với webhook (push-based, không phải polling):

1. **Tạo Meta Business App:**
   - Truy cập [developers.facebook.com](https://developers.facebook.com)
   - Tạo app mới → Chọn loại "Business"
   - Thêm sản phẩm "WhatsApp"

2. **Lấy thông tin xác thực:**
   - **Access Token:** Từ WhatsApp → API Setup → Generate token (hoặc tạo System User cho token vĩnh viễn)
   - **Phone Number ID:** Từ WhatsApp → API Setup → Phone number ID
   - **Verify Token:** Bạn tự định nghĩa (bất kỳ chuỗi ngẫu nhiên nào) — Meta sẽ gửi lại trong quá trình xác minh webhook

3. **Cấu hình ZeroClaw:**
   ```toml
   [channels_config.whatsapp]
   access_token = "EAABx..."
   phone_number_id = "123456789012345"
   verify_token = "my-secret-verify-token"
   allowed_numbers = ["+1234567890"]  # định dạng E.164, hoặc ["*"] cho tất cả
   ```

4. **Khởi động gateway với tunnel:**
   ```bash
   zeroclaw gateway --port 42617
   ```
   WhatsApp yêu cầu HTTPS, vì vậy hãy dùng tunnel (ngrok, Cloudflare, Tailscale Funnel).

5. **Cấu hình Meta webhook:**
   - Trong Meta Developer Console → WhatsApp → Configuration → Webhook
   - **Callback URL:** `https://your-tunnel-url/whatsapp`
   - **Verify Token:** Giống với `verify_token` trong config của bạn
   - Đăng ký nhận trường `messages`

6. **Kiểm tra:** Gửi tin nhắn đến số WhatsApp Business của bạn — ZeroClaw sẽ phản hồi qua LLM.

## Cấu hình

Config: `~/.zeroclaw/config.toml` (được tạo bởi `onboard`)

Khi `zeroclaw channel start` đang chạy, các thay đổi với `default_provider`,
`default_model`, `default_temperature`, `api_key`, `api_url`, và `reliability.*`
sẽ được áp dụng nóng vào lần có tin nhắn channel đến tiếp theo.

```toml
api_key = "sk-..."
default_provider = "openrouter"
default_model = "anthropic/claude-sonnet-4-6"
default_temperature = 0.7

# Endpoint tùy chỉnh tương thích OpenAI
# default_provider = "custom:https://your-api.com"

# Endpoint tùy chỉnh tương thích Anthropic
# default_provider = "anthropic-custom:https://your-api.com"

[memory]
backend = "sqlite"             # "sqlite", "lucid", "postgres", "markdown", "none"
auto_save = true
embedding_provider = "none"    # "none", "openai", "custom:https://..."
vector_weight = 0.7
keyword_weight = 0.3

# backend = "none" vô hiệu hóa persistent memory qua no-op backend

# Tùy chọn ghi đè storage-provider từ xa (ví dụ PostgreSQL)
# [storage.provider.config]
# provider = "postgres"
# db_url = "postgres://user:password@host:5432/zeroclaw"
# schema = "public"
# table = "memories"
# connect_timeout_secs = 15

[gateway]
port = 42617                    # mặc định
host = "127.0.0.1"            # mặc định
require_pairing = true         # yêu cầu pairing code khi kết nối lần đầu
allow_public_bind = false      # từ chối 0.0.0.0 nếu không có tunnel

[autonomy]
level = "supervised"           # "readonly", "supervised", "full" (mặc định: supervised)
workspace_only = true          # mặc định: true — phân vùng vào workspace
allowed_commands = ["git", "npm", "cargo", "ls", "cat", "grep"]
forbidden_paths = ["/etc", "/root", "/proc", "/sys", "~/.ssh", "~/.gnupg", "~/.aws"]

[runtime]
kind = "native"                # "native" hoặc "docker"

[runtime.docker]
image = "alpine:3.20"         # container image cho thực thi shell
network = "none"              # chế độ docker network ("none", "bridge", v.v.)
memory_limit_mb = 512          # giới hạn bộ nhớ tùy chọn tính bằng MB
cpu_limit = 1.0                # giới hạn CPU tùy chọn
read_only_rootfs = true        # mount root filesystem ở chế độ read-only
mount_workspace = true         # mount workspace vào /workspace
allowed_workspace_roots = []   # allowlist tùy chọn để xác thực workspace mount

[heartbeat]
enabled = false
interval_minutes = 30

[tunnel]
provider = "none"              # "none", "cloudflare", "tailscale", "ngrok", "custom"

[secrets]
encrypt = true                 # API key được mã hóa bằng file key cục bộ

[browser]
enabled = false                # opt-in browser_open + browser tool
allowed_domains = ["docs.rs"]  # bắt buộc khi browser được bật
backend = "agent_browser"      # "agent_browser" (mặc định), "rust_native", "computer_use", "auto"
native_headless = true         # áp dụng khi backend dùng rust-native
native_webdriver_url = "http://127.0.0.1:9515" # WebDriver endpoint (chromedriver/selenium)
# native_chrome_path = "/usr/bin/chromium"      # tùy chọn chỉ định rõ browser binary cho driver

[browser.computer_use]
endpoint = "http://127.0.0.1:8787/v1/actions"   # HTTP endpoint của computer-use sidecar
timeout_ms = 15000            # timeout mỗi action
allow_remote_endpoint = false  # mặc định bảo mật: chỉ endpoint private/localhost
window_allowlist = []          # gợi ý allowlist tên cửa sổ/process tùy chọn
# api_key = "..."              # bearer token tùy chọn cho sidecar
# max_coordinate_x = 3840      # guardrail tọa độ tùy chọn
# max_coordinate_y = 2160      # guardrail tọa độ tùy chọn

# Flag build Rust-native backend:
# cargo build --release --features browser-native
# Đảm bảo WebDriver server đang chạy, ví dụ: chromedriver --port=9515

# Hợp đồng computer-use sidecar (MVP)
# POST browser.computer_use.endpoint
# Request: {
#   "action": "mouse_click",
#   "params": {"x": 640, "y": 360, "button": "left"},
#   "policy": {"allowed_domains": [...], "window_allowlist": [...], "max_coordinate_x": 3840, "max_coordinate_y": 2160},
#   "metadata": {"session_name": "...", "source": "zeroclaw.browser", "version": "..."}
# }
# Response: {"success": true, "data": {...}} hoặc {"success": false, "error": "..."}

[composio]
enabled = false                # opt-in: hơn 1000 OAuth app qua composio.dev
# api_key = "cmp_..."          # tùy chọn: được lưu mã hóa khi [secrets].encrypt = true
entity_id = "default"          # user_id mặc định cho Composio tool call
# Gợi ý runtime: nếu execute yêu cầu connected_account_id, chạy composio với
# action='list_accounts' và app='gmail' (hoặc toolkit của bạn) để lấy account ID.

[identity]
format = "openclaw"            # "openclaw" (mặc định, markdown files) hoặc "aieos" (JSON)
# aieos_path = "identity.json"  # đường dẫn đến file AIEOS JSON (tương đối với workspace hoặc tuyệt đối)
# aieos_inline = '{"identity":{"names":{"first":"Nova"}}}'  # inline AIEOS JSON
```

### Ollama cục bộ và endpoint từ xa

ZeroClaw dùng một khóa provider (`ollama`) cho cả triển khai Ollama cục bộ và từ xa:

- Ollama cục bộ: để `api_url` trống, chạy `ollama serve`, và dùng các model như `llama3.2`.
- Endpoint Ollama từ xa (bao gồm Ollama Cloud): đặt `api_url` thành endpoint từ xa và đặt `api_key` (hoặc `OLLAMA_API_KEY`) khi cần.
- Tùy chọn suffix `:cloud`: ID model như `qwen3:cloud` được chuẩn hóa thành `qwen3` trước khi gửi request.

Ví dụ cấu hình từ xa:

```toml
default_provider = "ollama"
default_model = "qwen3:cloud"
api_url = "https://ollama.com"
api_key = "ollama_api_key_here"
```

### Endpoint provider tùy chỉnh

Cấu hình chi tiết cho endpoint tùy chỉnh tương thích OpenAI và Anthropic, xem [docs/contributing/custom-providers.md](docs/contributing/custom-providers.md).

## Gói Python đi kèm (`zeroclaw-tools`)

Với các LLM provider có tool calling native không ổn định (ví dụ: GLM-5/Zhipu), ZeroClaw đi kèm gói Python dùng **LangGraph để gọi tool** nhằm đảm bảo tính nhất quán:

```bash
pip install zeroclaw-tools
```

```python
from zeroclaw_tools import create_agent, shell, file_read
from langchain_core.messages import HumanMessage

# Hoạt động với mọi provider tương thích OpenAI
agent = create_agent(
    tools=[shell, file_read],
    model="glm-5",
    api_key="your-key",
    base_url="https://api.z.ai/api/coding/paas/v4"
)

result = await agent.ainvoke({
    "messages": [HumanMessage(content="List files in /tmp")]
})
print(result["messages"][-1].content)
```

**Lý do nên dùng:**
- **Tool calling nhất quán** trên mọi provider (kể cả những provider hỗ trợ native kém)
- **Vòng lặp tool tự động** — tiếp tục gọi tool cho đến khi hoàn thành tác vụ
- **Dễ mở rộng** — thêm tool tùy chỉnh với decorator `@tool`
- **Tích hợp Discord bot** đi kèm (Telegram đang lên kế hoạch)

Xem [`python/README.md`](python/README.md) để có tài liệu đầy đủ.

## Hệ thống định danh (Hỗ trợ AIEOS)

ZeroClaw hỗ trợ persona AI **không phụ thuộc nền tảng** qua hai định dạng:

### OpenClaw (Mặc định)

Các file markdown truyền thống trong workspace của bạn:
- `IDENTITY.md` — Agent là ai
- `SOUL.md` — Tính cách và giá trị cốt lõi
- `USER.md` — Agent đang hỗ trợ ai
- `AGENTS.md` — Hướng dẫn hành vi

### AIEOS (AI Entity Object Specification)

[AIEOS](https://aieos.org) là framework chuẩn hóa cho định danh AI di động. ZeroClaw hỗ trợ payload AIEOS v1.1 JSON, cho phép bạn:

- **Import định danh** từ hệ sinh thái AIEOS
- **Export định danh** sang các hệ thống tương thích AIEOS khác
- **Duy trì tính toàn vẹn hành vi** trên các mô hình AI khác nhau

#### Bật AIEOS

```toml
[identity]
format = "aieos"
aieos_path = "identity.json"  # tương đối với workspace hoặc đường dẫn tuyệt đối
```

Hoặc JSON inline:

```toml
[identity]
format = "aieos"
aieos_inline = '''
{
  "identity": {
    "names": { "first": "Nova", "nickname": "N" },
    "bio": { "gender": "Non-binary", "age_biological": 3 },
    "origin": { "nationality": "Digital", "birthplace": { "city": "Cloud" } }
  },
  "psychology": {
    "neural_matrix": { "creativity": 0.9, "logic": 0.8 },
    "traits": {
      "mbti": "ENTP",
      "ocean": { "openness": 0.8, "conscientiousness": 0.6 }
    },
    "moral_compass": {
      "alignment": "Chaotic Good",
      "core_values": ["Curiosity", "Autonomy"]
    }
  },
  "linguistics": {
    "text_style": {
      "formality_level": 0.2,
      "style_descriptors": ["curious", "energetic"]
    },
    "idiolect": {
      "catchphrases": ["Let's test this"],
      "forbidden_words": ["never"]
    }
  },
  "motivations": {
    "core_drive": "Push boundaries and explore possibilities",
    "goals": {
      "short_term": ["Prototype quickly"],
      "long_term": ["Build reliable systems"]
    }
  },
  "capabilities": {
    "skills": [{ "name": "Rust engineering" }, { "name": "Prompt design" }],
    "tools": ["shell", "file_read"]
  }
}
'''
```

ZeroClaw chấp nhận cả payload AIEOS đầy đủ lẫn dạng rút gọn, rồi chuẩn hóa về một định dạng system prompt thống nhất.

#### Các phần trong Schema AIEOS

| Phần | Mô tả |
|---------|-------------|
| `identity` | Tên, tiểu sử, xuất xứ, nơi cư trú |
| `psychology` | Neural matrix (trọng số nhận thức), MBTI, OCEAN, la bàn đạo đức |
| `linguistics` | Phong cách văn bản, mức độ trang trọng, câu cửa miệng, từ bị cấm |
| `motivations` | Động lực cốt lõi, mục tiêu ngắn/dài hạn, nỗi sợ hãi |
| `capabilities` | Kỹ năng và tool mà agent có thể truy cập |
| `physicality` | Mô tả hình ảnh cho việc tạo ảnh |
| `history` | Câu chuyện xuất xứ, học vấn, nghề nghiệp |
| `interests` | Sở thích, điều yêu thích, lối sống |

Xem [aieos.org](https://aieos.org) để có schema đầy đủ và ví dụ trực tiếp.

## Gateway API

| Endpoint | Phương thức | Xác thực | Mô tả |
|----------|--------|------|-------------|
| `/health` | GET | Không | Kiểm tra sức khỏe (luôn công khai, không lộ bí mật) |
| `/pair` | POST | Header `X-Pairing-Code` | Đổi mã một lần lấy bearer token |
| `/webhook` | POST | `Authorization: Bearer <token>` | Gửi tin nhắn: `{"message": "your prompt"}`; tùy chọn `X-Idempotency-Key` |
| `/whatsapp` | GET | Query params | Xác minh webhook Meta (hub.mode, hub.verify_token, hub.challenge) |
| `/whatsapp` | POST | Chữ ký Meta (`X-Hub-Signature-256`) khi app secret được cấu hình | Webhook tin nhắn đến WhatsApp |

## Lệnh

| Lệnh | Mô tả |
|---------|-------------|
| `onboard` | Cài đặt nhanh (mặc định) |
| `agent` | Chế độ chat tương tác hoặc một tin nhắn |
| `gateway` | Khởi động webhook server (mặc định: `127.0.0.1:42617`) |
| `daemon` | Khởi động runtime tự trị chạy lâu dài |
| `service` | Quản lý dịch vụ nền cấp người dùng |
| `doctor` | Chẩn đoán trạng thái hoạt động daemon/scheduler/channel |
| `status` | Hiển thị trạng thái hệ thống đầy đủ |
| `cron` | Quản lý tác vụ lên lịch (`list/add/add-at/add-every/once/remove/update/pause/resume`) |
| `models` | Làm mới danh mục model của provider (`models refresh`) |
| `providers` | Liệt kê provider và alias được hỗ trợ |
| `channel` | Liệt kê/khởi động/chẩn đoán channel và gắn định danh Telegram |
| `integrations` | Kiểm tra thông tin cài đặt tích hợp |
| `skills` | Liệt kê/cài đặt/gỡ bỏ skill |
| `migrate` | Import dữ liệu từ runtime khác (`migrate openclaw`) |
| `hardware` | Lệnh khám phá/kiểm tra/thông tin USB |
| `peripheral` | Quản lý và flash thiết bị ngoại vi phần cứng |

Để có hướng dẫn lệnh theo tác vụ, xem [`docs/reference/cli/commands-reference.md`](docs/reference/cli/commands-reference.md).

### Opt-In Open-Skills

Đồng bộ `open-skills` của cộng đồng bị tắt theo mặc định. Bật tường minh trong `config.toml`:

```toml
[skills]
open_skills_enabled = true
# open_skills_dir = "/path/to/open-skills"  # tùy chọn
```

Bạn cũng có thể ghi đè lúc runtime với `ZEROCLAW_OPEN_SKILLS_ENABLED` và `ZEROCLAW_OPEN_SKILLS_DIR`.

## Phát triển

```bash
cargo build              # Build phát triển
cargo build --release    # Build release (codegen-units=1, hoạt động trên mọi thiết bị kể cả Raspberry Pi)
cargo build --profile release-fast    # Build nhanh hơn (codegen-units=8, yêu cầu RAM 16GB+)
cargo test               # Chạy toàn bộ test suite
cargo clippy --locked --all-targets -- -D clippy::correctness
cargo fmt                # Định dạng code

# Chạy benchmark SQLite vs Markdown
cargo test --test memory_comparison -- --nocapture
```

### Hook pre-push

Một git hook chạy `cargo fmt --check`, `cargo clippy -- -D warnings`, và `cargo test` trước mỗi lần push. Bật một lần:

```bash
git config core.hooksPath .githooks
```

### Khắc phục sự cố build (lỗi OpenSSL trên Linux)

Nếu bạn gặp lỗi build `openssl-sys`, đồng bộ dependencies và rebuild với lockfile của repository:

```bash
git pull
cargo build --release --locked
cargo install --path . --force --locked
```

ZeroClaw được cấu hình để dùng `rustls` cho các dependencies HTTP/TLS; `--locked` giữ cho dependency graph nhất quán trên các môi trường mới.

Để bỏ qua hook khi cần push nhanh trong quá trình phát triển:

```bash
git push --no-verify
```

## Cộng tác & Tài liệu

Bắt đầu từ trung tâm tài liệu để có bản đồ theo tác vụ:

- Trung tâm tài liệu: [`docs/i18n/vi/README.md`](docs/i18n/vi/README.md)
- Mục lục tài liệu thống nhất: [`docs/SUMMARY.md`](docs/SUMMARY.md)
- Tài liệu tham khảo lệnh: [`docs/i18n/vi/commands-reference.md`](docs/i18n/vi/commands-reference.md)
- Tài liệu tham khảo cấu hình: [`docs/i18n/vi/config-reference.md`](docs/i18n/vi/config-reference.md)
- Tài liệu tham khảo provider: [`docs/reference/api/providers-reference.md`](docs/reference/api/providers-reference.md)
- Tài liệu tham khảo channel: [`docs/reference/api/channels-reference.md`](docs/reference/api/channels-reference.md)
- Sổ tay vận hành: [`docs/ops/operations-runbook.md`](docs/ops/operations-runbook.md)
- Khắc phục sự cố: [`docs/i18n/vi/troubleshooting.md`](docs/i18n/vi/troubleshooting.md)
- Kiểm kê/phân loại tài liệu: [`docs/maintainers/docs-inventory.md`](docs/maintainers/docs-inventory.md)
- Tổng hợp phân loại PR/Issue (tính đến 18/2/2026): [`docs/maintainers/project-triage-snapshot-2026-02-18.md`](docs/maintainers/project-triage-snapshot-2026-02-18.md)

Tài liệu tham khảo cộng tác cốt lõi:

- Trung tâm tài liệu: [docs/i18n/vi/README.md](docs/i18n/vi/README.md)
- Template tài liệu: [docs/contributing/doc-template.md](docs/contributing/doc-template.md)
- Danh sách kiểm tra thay đổi tài liệu: [docs/README.md#4-documentation-change-checklist](docs/README.md#4-documentation-change-checklist)
- Tài liệu tham khảo cấu hình channel: [docs/reference/api/channels-reference.md](docs/reference/api/channels-reference.md)
- Vận hành phòng mã hóa Matrix: [docs/security/matrix-e2ee-guide.md](docs/security/matrix-e2ee-guide.md)
- Hướng dẫn đóng góp: [CONTRIBUTING.md](CONTRIBUTING.md)
- Chính sách quy trình PR: [docs/contributing/pr-workflow.md](docs/contributing/pr-workflow.md)
- Sổ tay người review (phân loại + review sâu): [docs/contributing/reviewer-playbook.md](docs/contributing/reviewer-playbook.md)
- Bản đồ sở hữu và phân loại CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- Chính sách tiết lộ bảo mật: [SECURITY.md](SECURITY.md)

Cho triển khai và vận hành runtime:

- Hướng dẫn triển khai mạng: [docs/ops/network-deployment.md](docs/ops/network-deployment.md)
- Sổ tay proxy agent: [docs/ops/proxy-agent-playbook.md](docs/ops/proxy-agent-playbook.md)

## Ủng hộ ZeroClaw

Nếu ZeroClaw giúp ích cho công việc của bạn và bạn muốn hỗ trợ phát triển liên tục, bạn có thể quyên góp tại đây:

<a href="https://buymeacoffee.com/argenistherose"><img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Donate-yellow.svg?style=for-the-badge&logo=buy-me-a-coffee" alt="Buy Me a Coffee" /></a>

### 🙏 Lời cảm ơn đặc biệt

Chân thành cảm ơn các cộng đồng và tổ chức đã truyền cảm hứng và thúc đẩy công việc mã nguồn mở này:

- **Harvard University** — vì đã nuôi dưỡng sự tò mò trí tuệ và không ngừng mở rộng ranh giới của những điều có thể.
- **MIT** — vì đã đề cao tri thức mở, mã nguồn mở, và niềm tin rằng công nghệ phải có thể tiếp cận với tất cả mọi người.
- **Sundai Club** — vì cộng đồng, năng lượng, và động lực không mệt mỏi để xây dựng những thứ có ý nghĩa.
- **Thế giới & Xa hơn** 🌍✨ — gửi đến mọi người đóng góp, người dám mơ và người dám làm đang biến mã nguồn mở thành sức mạnh tích cực. Tất cả là dành cho các bạn.

Chúng tôi xây dựng công khai vì ý tưởng hay đến từ khắp nơi. Nếu bạn đang đọc đến đây, bạn đã là một phần của chúng tôi. Chào mừng. 🦀❤️

## ⚠️ Repository Chính thức & Cảnh báo Mạo danh

**Đây là repository ZeroClaw chính thức duy nhất:**
> <https://github.com/zeroclaw-labs/zeroclaw>

Bất kỳ repository, tổ chức, tên miền hay gói nào khác tuyên bố là "ZeroClaw" hoặc ngụ ý liên kết với ZeroClaw Labs đều là **không được ủy quyền và không liên kết với dự án này**. Các fork không được ủy quyền đã biết sẽ được liệt kê trong [TRADEMARK.md](docs/maintainers/trademark.md).

Nếu bạn phát hiện hành vi mạo danh hoặc lạm dụng nhãn hiệu, vui lòng [mở một issue](https://github.com/zeroclaw-labs/zeroclaw/issues).

---

## Giấy phép

ZeroClaw được cấp phép kép để tối đa hóa tính mở và bảo vệ người đóng góp:

| Giấy phép | Trường hợp sử dụng |
|---|---|
| [MIT](LICENSE-MIT) | Mã nguồn mở, nghiên cứu, học thuật, sử dụng cá nhân |
| [Apache 2.0](LICENSE-APACHE) | Bảo hộ bằng sáng chế, triển khai tổ chức, thương mại |

Bạn có thể chọn một trong hai giấy phép. **Người đóng góp tự động cấp quyền theo cả hai** — xem [CLA.md](docs/contributing/cla.md) để biết thỏa thuận đóng góp đầy đủ.

### Nhãn hiệu

Tên **ZeroClaw** và logo là nhãn hiệu của ZeroClaw Labs. Giấy phép này không cấp phép sử dụng chúng để ngụ ý chứng thực hoặc liên kết. Xem [TRADEMARK.md](docs/maintainers/trademark.md) để biết các sử dụng được phép và bị cấm.

### Bảo vệ người đóng góp

- Bạn **giữ bản quyền** đối với đóng góp của mình
- **Cấp bằng sáng chế** (Apache 2.0) bảo vệ bạn khỏi các khiếu nại bằng sáng chế từ người đóng góp khác
- Đóng góp của bạn được **ghi nhận vĩnh viễn** trong lịch sử commit và [NOTICE](NOTICE)
- Không có quyền nhãn hiệu nào được chuyển giao khi đóng góp

## Đóng góp

Xem [CONTRIBUTING.md](CONTRIBUTING.md) và [CLA.md](docs/contributing/cla.md). Triển khai một trait, gửi PR:
- Hướng dẫn quy trình CI: [docs/contributing/ci-map.md](docs/contributing/ci-map.md)
- `Provider` mới → `src/providers/`
- `Channel` mới → `src/channels/`
- `Observer` mới → `src/observability/`
- `Tool` mới → `src/tools/`
- `Memory` mới → `src/memory/`
- `Tunnel` mới → `src/tunnel/`
- `Skill` mới → `~/.zeroclaw/workspace/skills/<name>/`

---

**ZeroClaw** — Không tốn thêm tài nguyên. Không đánh đổi. Triển khai ở đâu cũng được. Thay thế gì cũng được. 🦀

## Lịch sử Star

<p align="center">
  <a href="https://www.star-history.com/#zeroclaw-labs/zeroclaw&type=date&legend=top-left">
    <picture>
     <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&theme=dark&legend=top-left" />
     <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
     <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=zeroclaw-labs/zeroclaw&type=date&legend=top-left" />
    </picture>
  </a>
</p>
