# NanoClaw 需求 项目创建者的原始需求和设计决策。 --- ## 为什么存在这个项目 这是 OpenClaw(原名 ClawBot)的轻量、安全的替代方案。那个项目变得臃肿至极——4 到 5 个不同的进程运行不同的网关,无穷无尽的配置文件,无穷无尽的集成。它是一个安全噩梦,agent 不在隔离的进程中运行;有各种漏洞百出的变通方案试图阻止它们访问不应访问的系统部分。任何人都不可能真正理解整个代码库。运行它基本上就是在赌运气。 NanoClaw 为您提供核心功能,没有那些混乱。 --- ## 理念 ### 小到可以读懂 整个代码库应该是您可以阅读和理解的东西。一个 Node.js 进程。少量源文件。没有微服务,没有消息队列,没有抽象层。 ### 通过真正的隔离实现安全 不是通过应用级权限系统试图阻止 agent 访问东西,agent 运行在实际的 Linux 容器中。隔离在操作系统层面。Agent 只能看到显式挂载的内容。Bash 访问是安全的,因为命令在容器内运行,而不是在您的 Mac 上。 ### 为个人用户构建 这不是一个框架或平台。它是为每个用户量身定制的软件。您 fork 仓库,添加您想要的渠道(WhatsApp、Telegram、Discord、Slack、Gmail),最终得到做您所需事情的干净代码。 ### 定制 = 代码修改 没有配置膨胀。如果您想要不同的行为,修改代码。代码库足够小,这样做既安全又实用。极小部分内容如触发词在配置中。其他一切——只需修改代码做您想做的事。 ### AI 原生开发 我不需要安装向导——Claude Code 引导设置。我不需要监控仪表板——我问 Claude Code 发生了什么。我不需要精心设计的日志 UI——我让 Claude 读日志。我不需要调试工具——我描述问题,Claude 修复它。 代码库假设您有一个 AI 协作者。它不需要过度自文档化或自调试,因为 Claude 始终在那里。 ### Skills 优先于功能 当人们贡献时,他们不应该在支持 WhatsApp 的同时再添加"Telegram 支持"。他们应该贡献一个 skill,如 `/add-telegram`,来改造代码库。用户 fork 仓库,运行 skills 进行定制,最终得到做他们所需事情的干净代码——而不是一个试图同时支持每个人用例的臃肿系统。 --- ## RFS(Request for Skills) 我们希望看到贡献的 skills: ### 通信渠道 - `/add-signal` - 添加 Signal 作为渠道 - `/add-matrix` - 添加 Matrix 集成 > **注意:** Telegram、Slack、Discord、Gmail 和 Apple Container 的 skills 已经存在。完整列表请参见 [skills 文档](https://docs.nanoclaw.dev/integrations/skills-system)。 --- ## 愿景 一个可通过消息访问的个人 Claude 助手,使用最少的自定义代码。 **核心组件:** - **Claude Agent SDK** 作为核心 agent - **容器(Containers)** 用于隔离的 agent 执行(Linux VM) - **多渠道消息**(WhatsApp、Telegram、Discord、Slack、Gmail)——仅添加您需要的渠道 - **持久化记忆**——按对话和全局 - **定时任务**,运行 Claude 并能回复消息 - **Web 访问**,用于搜索和浏览 - **浏览器自动化**,通过 agent-browser **实现方法:** - 使用现有工具(渠道库、Claude Agent SDK、MCP 服务器) - 最少的胶水代码 - 尽可能使用基于文件的系统(CLAUDE.md 用于记忆,目录用于群组) --- ## 架构决策 ### 消息路由 - 路由器监听已连接的渠道,根据配置路由消息 - 仅处理来自已注册群组的消息 - 触发词:`@Andy` 前缀(不区分大小写),可通过 `ASSISTANT_NAME` 环境变量配置 - 未注册的群组完全被忽略 ### 记忆系统 - **按群组记忆**:每个群组有一个带自己 `CLAUDE.md` 的目录 - **全局记忆**:根 `CLAUDE.md` 供所有群组读取,但只能从"主群组"(自我聊天)写入 - **文件**:群组可以在其目录中创建/读取文件并引用它们 - Agent 运行在群组的目录中,自动继承两个 CLAUDE.md 文件 ### Session 管理 - 每个群组维护一个对话 session(通过 Claude Agent SDK) - Sessions 在上下文过长时自动压缩,保留关键信息 ### 容器隔离 - 所有 agent 在容器(轻量级 Linux VM)内运行 - 每次 agent 调用启动一个挂载了目录的容器 - 容器提供文件系统隔离——agent 只能看到已挂载的路径 - Bash 访问安全,因为命令在容器内运行,而非在宿主机上 - 通过 agent-browser 和容器中的 Chromium 进行浏览器自动化 ### 定时任务 - 用户可以从任何群组要求 Claude 安排定期或一次性任务 - 任务在创建它们的群组上下文中作为完整 agent 运行 - 任务可以访问包括 Bash 在内的所有工具(在容器中安全) - 任务可以选择性地通过 `send_message` 工具向群组发送消息,或静默完成 - 任务运行记录到数据库,包含持续时间和结果 - 调度类型:cron 表达式、间隔(毫秒)或一次性(ISO 时间戳) - 从主群组:可以为任何群组安排任务,查看/管理所有任务 - 从其他群组:只能管理该群组的任务 ### 群组管理 - 新群组通过主渠道显式添加 - 群组在 SQLite 中注册(通过主渠道或 IPC `register_group` 命令) - 每个群组在 `groups/` 下获得一个专用目录 - 群组可以通过 `containerConfig` 挂载额外目录 ### 主渠道权限 - 主渠道是管理员/控制群组(通常是自我聊天) - 可以向全局记忆写入(`groups/CLAUDE.md`) - 可以为任何群组安排定时任务 - 可以查看和管理所有群组的任务 - 可以为任何群组配置额外的目录挂载 --- ## 集成点 ### 渠道 - WhatsApp (baileys)、Telegram (grammy)、Discord (discord.js)、Slack (@slack/bolt)、Gmail (googleapis) - 每个渠道存于单独的 fork 仓库中,通过 skills(例如 `/add-whatsapp`、`/add-telegram`)添加 - 消息存储在 SQLite 中,由路由器轮询 - 渠道在启动时自行注册——未配置的渠道被跳过并发出警告 ### 调度器 - 内置调度器在宿主机上运行,启动容器执行任务 - 自定义 `nanoclaw` MCP 服务器(容器内)提供调度工具 - 工具:`schedule_task`、`list_tasks`、`pause_task`、`resume_task`、`cancel_task`、`send_message` - 任务存储在 SQLite 中,带运行历史 - 调度器循环每分钟检查到期任务 - 任务在容器化的群组上下文中执行 Claude Agent SDK ### Web 访问 - 内置 WebSearch 和 WebFetch 工具 - 标准 Claude Agent SDK 能力 ### 浏览器自动化 - 容器中的 agent-browser CLI 和 Chromium - 基于快照的交互,带元素引用(@e1、@e2 等) - 截图、PDF、视频录制 - 认证状态持久化 --- ## 设置与定制 ### 理念 - 最小化配置文件 - 通过 Claude Code 进行设置和定制 - 用户克隆仓库并运行 Claude Code 进行配置 - 每个用户得到精确匹配其需求的定制设置 ### Skills - `/setup` - 安装依赖,配置渠道,启动服务 - `/customize` - 通用 skill,用于添加能力 - `/update-nanoclaw` - 拉取上游更改,与定制合并 ### 部署 - 运行在 macOS (launchd)、Linux (systemd) 或 Windows (WSL2) 上 - 单个 Node.js 进程处理一切 --- ## 个人配置(参考) 以下是创建者的设置,存档于此供参考: - **触发词**:`@Andy`(不区分大小写) - **响应前缀**:`Andy:` - **角色**:默认 Claude(无自定义个性) - **主渠道**:自我聊天(在 WhatsApp 中给自己发消息) --- ## 项目名称 **NanoClaw** - 引用 Clawdbot(现为 OpenClaw)。