1. 产品概述
这是什么?
一句话描述
NanoClaw 是一个跑在你自己电脑上的私人 AI 助手。它通过 WhatsApp 和你对话,背后是 Claude AI 在 Docker 容器里帮你干活。
它解决什么问题?
| 痛点 | NanoClaw 怎么解决 |
|---|---|
| 想用 AI 但不想一直开网页 | 直接在 WhatsApp 里对话,随时随地 |
| 担心 AI 看到敏感数据 | AI 跑在 Docker 容器里,只能访问你指定的文件 |
| 群聊里需要 AI 帮忙 | 在群里 @Andy 就能触发 AI |
| 需要 AI 定时做事 | 支持 cron、间隔、定时任务 |
| 想让 AI 帮忙上网查资料 | 容器里有浏览器,AI 能自己上网 |
| 不同群的 AI 需要不同的"人设" | 每个群有独立的记忆和配置 |
目标用户
技术人员——能自己部署 Docker、配环境变量、改代码的人。这不是给普通消费者用的产品,而是给技术人员自己打造私人助手的工具。
2. 核心功能
WhatsApp 消息对话
群聊 @Andy 或私聊直接对话,多轮上下文记忆
群组管理
每群独立记忆、文件和会话,main 群为管理员
AI 记忆
CLAUDE.md 文件持久化,全局 + 群组两级记忆
定时任务
cron / 间隔 / 一次性,自然语言设置
浏览器自动化
内置 Chromium,AI 自主搜索、截图、填表
文件系统访问
安全挂载指定目录,白名单控制
Agent 团队
多 Agent 并行协作处理复杂任务
2.1 WhatsApp 消息对话
场景:用户在 WhatsApp 里和 AI 对话。
- 支持群聊和私聊两种模式
- 群聊中需要
@Andy(触发词)来唤醒 AI - 私聊不需要触发词,直接说话就行
- AI 回复会带前缀标识(如 "Andy: 你好")
- 支持多轮对话,AI 记得上下文
用户在群里发: "@Andy 帮我总结一下今天的讨论"
↓
系统显示"正在输入..."(模拟打字状态)
↓
AI 阅读群聊历史,生成总结
↓
用户收到: "Andy: 今天讨论了三个要点..."
| 配置项 | 默认值 | 说明 |
|---|---|---|
ASSISTANT_NAME | Andy | AI 的名字 / 触发词 |
POLL_INTERVAL | 2 秒 | 消息轮询间隔 |
CONTAINER_TIMEOUT | 30 分钟 | AI 处理单条消息的最长时间 |
2.2 群组管理
场景:管理不同的 WhatsApp 群,每个群有独立的 AI 人设。
| 类型 | 说明 | 权限 |
|---|---|---|
| main(管理员) | 你和自己的 WhatsApp 私聊 | 最高权限:注册群、给任何群发消息、写全局记忆 |
| 普通群 | 任意 WhatsApp 群聊 | 只能操作自己:发消息给自己的群、管理自己的任务 |
你在 main 群里说: "@Andy 把'家庭群'加进来"
↓
AI 查看可用群列表,找到家庭群的 JID
↓
AI 调用 register_group 创建文件夹和数据库记录
↓
从此家庭群里 @Andy 就能用了
2.3 AI 记忆
每个群有自己的 CLAUDE.md 文件,AI 启动时自动加载。AI 可以主动修改它来"记住"事情。
全局记忆(所有群可见)
└── "我喜欢用简体中文"
└── "我的时区是 Asia/Shanghai"
群组记忆(仅本群可见)
└── main: "我是一名软件工程师"
└── 家庭群: "家庭成员:爸、妈、妹妹"
└── 工作群: "我们的项目用 React + Node.js"
2.4 定时任务
用自然语言告诉 AI 你想定时做什么,支持三种方式:
| 用户说 | AI 创建的任务 |
|---|---|
| "每天早上 9 点发天气预报" | cron: 0 9 * * * |
| "每小时提醒我喝水" | interval: 3600000 |
| "明天下午 3 点提醒我开会" | once: 2026-02-24T15:00:00+08:00 |
任务管理
"@Andy 看一下我有哪些定时任务" → 列出所有任务
"@Andy 暂停天气预报的任务" → 暂停指定任务
"@Andy 恢复天气预报" → 恢复任务
"@Andy 取消那个喝水提醒" → 删除任务
2.5 浏览器自动化
容器内预装 Chromium 浏览器和 agent-browser 工具,AI 可以自主打开网页、点击、填写表单、截图。
2.6 文件系统访问
每个群有自己的读写文件夹。可以通过挂载配置让 AI 访问额外的目录。安全限制:永远不会暴露 .ssh、.aws 等敏感目录。
{
"containerConfig": {
"additionalMounts": [
{
"hostPath": "~/projects/my-app",
"containerPath": "my-app",
"readonly": false
}
]
}
}
AI 在容器里看到的路径:/workspace/extra/my-app/
2.7 Agent Swarm(Agent 团队)
Claude Agent SDK 支持 Agent Teams 功能。主 Agent 可以派生子 Agent 并行处理子任务,所有子 Agent 共享同一个容器环境。适合需要大量并行处理的复杂任务。
3. 可扩展功能(通过 Skill 添加)
"功能不塞进核心,用 Skill 来加。"
| Skill | 功能 | 安装方式 |
|---|---|---|
/add-telegram | 添加 Telegram 作为新的消息通道 | 运行 Skill |
/add-gmail | 添加 Gmail 集成(读邮件、发邮件) | 运行 Skill |
/add-voice-transcription | 语音消息自动转文字 | 运行 Skill |
/add-telegram-swarm | Telegram 群里的多 Agent 协作 | 运行 Skill |
/convert-to-apple-container | 从 Docker 切换到 Apple Container | 运行 Skill |
/x-integration | X(Twitter)集成:发推、点赞、回复 | 运行 Skill |
每个 Skill 是一组代码变更的描述,Claude Code 读取后帮你修改代码。好处是:
- 核心代码保持精简
- 你只装你需要的功能
- Skill 之间可以组合叠加
- 卸载就是"不装这个 Skill 重新来过"
4. 安全模型
4.1 信任层级
你自己 (main 群) — 最高信任,可以做任何事
↓
普通群成员 — 低信任,AI 只能操作本群
↓
容器内的 AI — 沙箱化,只能访问挂载的目录
↓
外部输入 — 不信任,可能有提示注入
4.2 安全措施
| 措施 | 保护什么 | 怎么做 |
|---|---|---|
| 容器隔离 | 文件系统 | AI 只能看到挂载的目录 |
| 非 root 运行 | 系统权限 | 容器以 uid 1000 (node) 用户运行 |
| 挂载白名单 | 敏感文件 | 外部配置文件控制允许挂载的路径 |
| 默认黑名单 | 密钥文件 | .ssh、.aws、.env 等永远被阻止 |
| 符号链接解析 | 路径穿越 | 先解析真实路径,再校验 |
| stdin 传密钥 | 凭证泄露 | 密钥不写磁盘、不放环境变量 |
| IPC 权限验证 | 越权操作 | 普通群只能操作自己的资源 |
| 会话隔离 | 数据泄露 | 群之间看不到对方的对话历史 |
4.3 密钥管理
.env 文件(宿主机)
│
├── ANTHROPIC_API_KEY → 通过 stdin 传入容器
├── CLAUDE_CODE_OAUTH_TOKEN → 通过 stdin 传入容器
└── 其他密钥 → 不传入容器
密钥只在内存中存在,不写入容器的磁盘或环境变量。容器内的 Bash 命令执行前,会自动清除环境中的密钥。
5. 用户体验流程
5.1 首次安装
1. 克隆项目
git clone ... && cd nanoclaw
2. 运行 /setup Skill
Claude Code 引导你完成:
├── 安装 Node.js 依赖
├── 构建 Docker 镜像
├── 配置 .env(填入 API Key)
├── WhatsApp 扫码登录
├── 注册 main 群(你的私聊)
└── 注册系统服务(开机自启)
3. 完成!在 WhatsApp 里给自己发 "Hello"
5.2 日常使用
场景 1 — 随便聊聊
你: "@Andy 推荐一部科幻电影"
Andy: "推荐《沙丘》,视觉效果惊人..."
场景 2 — 让 AI 做研究
你: "@Andy 帮我调研一下 2026 年最流行的前端框架"
Andy: (上网搜索、阅读文章) "根据最新数据,React 仍然..."
场景 3 — 定时提醒
你: "@Andy 每周五下午 5 点提醒我写周报"
Andy: "好的,已创建定时任务..." (每周五 17:00) "该写周报了!"
场景 4 — 文件操作
你: "@Andy 帮我看看 ~/projects/app 里的 README"
Andy: (读取挂载的目录) "这个项目是一个..."
场景 5 — 群组管理
你 (在 main 群): "@Andy 把工作群加进来"
Andy: "找到了'工作群',已注册..."
5.3 添加新功能
你想添加 Telegram 支持:
1. 打开 Claude Code
2. 输入 /add-telegram
3. Claude Code 引导你获取 Bot Token
4. 自动修改代码、重启服务
5. Telegram 和 WhatsApp 同时可用
6. 系统要求
6.1 硬件要求
| 项目 | 最低要求 |
|---|---|
| CPU | 2 核 |
| 内存 | 4 GB |
| 磁盘 | 10 GB(主要是 Docker 镜像) |
| 网络 | 需要互联网(WhatsApp + Claude API) |
6.2 软件要求
| 软件 | 版本 | 用途 |
|---|---|---|
| Node.js | 20+ | 运行宿主进程 |
| Docker | 最新版 | 运行 AI 容器 |
| npm | 随 Node.js | 包管理 |
| Claude Code | 最新版 | 安装和自定义 |
6.3 账号要求
| 账号 | 用途 |
|---|---|
| 接收和发送消息 | |
| Anthropic API Key 或 Claude OAuth Token | 调用 Claude AI |
7. 配置参数
| 参数 | 环境变量 | 默认值 | 说明 |
|---|---|---|---|
| AI 名称 | ASSISTANT_NAME | Andy | 触发词和显示名称 |
| 是否有独立号码 | ASSISTANT_HAS_OWN_NUMBER | false | AI 是否用独立 WhatsApp 号 |
| 消息轮询间隔 | — | 2 秒 | 检查新消息的频率 |
| 任务轮询间隔 | — | 60 秒 | 检查定时任务的频率 |
| 容器超时 | CONTAINER_TIMEOUT | 30 分钟 | 单次 AI 处理的最长时间 |
| 空闲超时 | IDLE_TIMEOUT | 30 分钟 | 无新消息时等待的时间 |
| 最大并发容器 | MAX_CONCURRENT_CONTAINERS | 5 | 同时运行的最大容器数 |
| 时区 | TZ | 系统时区 | 定时任务使用的时区 |
| 日志级别 | LOG_LEVEL | info | 日志详细程度 |
8. 非功能性需求
8.1 性能
| 指标 | 目标 |
|---|---|
| 消息延迟 | 收到消息后 2-4 秒开始处理 |
| AI 响应时间 | 取决于 Claude API,通常 5-30 秒 |
| 并发能力 | 同时处理 5 个群(可配置) |
| 崩溃恢复 | 重启后自动恢复未处理的消息 |
8.2 可靠性
| 场景 | 处理方式 |
|---|---|
| 进程崩溃 | launchd/systemd 自动重启 |
| WhatsApp 断线 | 自动重连 + 消息队列缓冲 |
| 容器超时 | 优雅停止 → 强制杀死 |
| 消息重复 | 基于游标去重 |
| 数据库损坏 | SQLite WAL 模式保护 |
8.3 可维护性
| 方面 | 做法 |
|---|---|
| 代码量 | 核心 ~2000 行,一个人能完全理解 |
| 扩展方式 | Skill 机制,不改核心代码 |
| 更新方式 | /update Skill 自动合并上游改动 |
| 调试方式 | /debug Skill 引导排障 |
9. 与竞品的对比
| 特性 | NanoClaw | ChatGPT App | 普通 Bot 框架 |
|---|---|---|---|
| 部署方式 | 自己的电脑 | 云端 | 云服务器 |
| 数据隐私 | 数据在本地 | 数据在 OpenAI | 取决于部署 |
| 扩展性 | Skill 机制 | 无 | 插件/中间件 |
| 容器隔离 | 有 | 无 | 通常没有 |
| 定时任务 | 内置 | 无 | 需要额外实现 |
| 浏览器自动化 | 内置 | 无 | 需要额外实现 |
| 多群独立记忆 | 有 | 无 | 需要额外实现 |
| 价格 | API 费用 | 订阅费 | API 费用 + 服务器费 |
10. 产品路线图
已完成
- WhatsApp 消息收发
- 容器化 AI 执行
- 群组注册和管理
- 定时任务系统
- 文件系统挂载和安全
- 会话持久化
- 并发控制
- 浏览器自动化
- Agent Teams 支持
- macOS/Linux 服务管理
可扩展(通过 Skill)
- Telegram 支持
- Discord 支持
- Gmail 集成
- 语音转文字
- X/Twitter 集成
- Apple Container 支持
已知待改进
- 修复会话分支过期问题
- 修复超时时序问题
- 修复消息游标提前推进问题
- 改进 Apple Container 网络配置体验
11. 术语表
| 术语 | 解释 |
|---|---|
| Baileys | 开源的 WhatsApp Web 客户端库 |
| Claude Agent SDK | Anthropic 的 AI Agent 开发框架 |
| MCP | Model Context Protocol,让 AI 调用外部工具的协议 |
| IPC | Inter-Process Communication,进程间通信 |
| JID | Jabber ID,WhatsApp 用来标识聊天的唯一 ID |
| main 群 | 你和自己的 WhatsApp 私聊,作为管理通道 |
| Skill | NanoClaw 的扩展机制,一组代码变更的描述 |
| 容器 | Docker 容器,隔离的 Linux 运行环境 |
| Agent Runner | 容器内运行的代码,负责调用 Claude |
| cron | Unix 定时任务表达式(如 0 9 * * * 表示每天 9 点) |
| session | Claude 的对话会话,保存了上下文 |
| CLAUDE.md | AI 的记忆文件,启动时自动加载 |
| mount | 把宿主机的目录映射到容器里 |
| allowlist | 白名单,列出允许挂载的目录 |