Product Requirements

NanoClaw 产品需求文档

用大白话描述这个产品是什么、解决什么问题、有哪些功能、怎么用。

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 阅读群聊历史,生成总结 用户收到: "Andy: 今天讨论了三个要点..."
配置项默认值说明
ASSISTANT_NAMEAndyAI 的名字 / 触发词
POLL_INTERVAL2 秒消息轮询间隔
CONTAINER_TIMEOUT30 分钟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-swarmTelegram 群里的多 Agent 协作运行 Skill
/convert-to-apple-container从 Docker 切换到 Apple Container运行 Skill
/x-integrationX(Twitter)集成:发推、点赞、回复运行 Skill

每个 Skill 是一组代码变更的描述,Claude Code 读取后帮你修改代码。好处是:

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 硬件要求

项目最低要求
CPU2 核
内存4 GB
磁盘10 GB(主要是 Docker 镜像)
网络需要互联网(WhatsApp + Claude API)

6.2 软件要求

软件版本用途
Node.js20+运行宿主进程
Docker最新版运行 AI 容器
npm随 Node.js包管理
Claude Code最新版安装和自定义

6.3 账号要求

账号用途
WhatsApp接收和发送消息
Anthropic API Key 或 Claude OAuth Token调用 Claude AI

7. 配置参数

参数环境变量默认值说明
AI 名称ASSISTANT_NAMEAndy触发词和显示名称
是否有独立号码ASSISTANT_HAS_OWN_NUMBERfalseAI 是否用独立 WhatsApp 号
消息轮询间隔2 秒检查新消息的频率
任务轮询间隔60 秒检查定时任务的频率
容器超时CONTAINER_TIMEOUT30 分钟单次 AI 处理的最长时间
空闲超时IDLE_TIMEOUT30 分钟无新消息时等待的时间
最大并发容器MAX_CONCURRENT_CONTAINERS5同时运行的最大容器数
时区TZ系统时区定时任务使用的时区
日志级别LOG_LEVELinfo日志详细程度

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. 与竞品的对比

特性NanoClawChatGPT App普通 Bot 框架
部署方式自己的电脑云端云服务器
数据隐私数据在本地数据在 OpenAI取决于部署
扩展性Skill 机制插件/中间件
容器隔离通常没有
定时任务内置需要额外实现
浏览器自动化内置需要额外实现
多群独立记忆需要额外实现
价格API 费用订阅费API 费用 + 服务器费

10. 产品路线图

已完成

可扩展(通过 Skill)

已知待改进

11. 术语表

术语解释
Baileys开源的 WhatsApp Web 客户端库
Claude Agent SDKAnthropic 的 AI Agent 开发框架
MCPModel Context Protocol,让 AI 调用外部工具的协议
IPCInter-Process Communication,进程间通信
JIDJabber ID,WhatsApp 用来标识聊天的唯一 ID
main 群你和自己的 WhatsApp 私聊,作为管理通道
SkillNanoClaw 的扩展机制,一组代码变更的描述
容器Docker 容器,隔离的 Linux 运行环境
Agent Runner容器内运行的代码,负责调用 Claude
cronUnix 定时任务表达式(如 0 9 * * * 表示每天 9 点)
sessionClaude 的对话会话,保存了上下文
CLAUDE.mdAI 的记忆文件,启动时自动加载
mount把宿主机的目录映射到容器里
allowlist白名单,列出允许挂载的目录