NanoClaw:用 Docker 容器隔离 AI 智能体

一方面,指出 OpenClaw 的已知安全漏洞让我有点矛盾——毕竟连严肃的 AI 思想领袖都在给智能体起名“阿诺德”并大声发号施令。我觉得有责任认真对待他们的热情,同时也必须强调这个领域仍存在问题。
这时出现了 NanoClaw。它不只是个“非常小的爪子”。
首先,NanoClaw 能把每个智能体隔离在自己的容器里。智能体循环启动时对其他智能体一无所知,只知道你告诉它的资源。
另一个有趣之处是:这个应用不是大型配置文件连接单体架构,而是你需要的代码(以及适当的 Claude 技能)——让 Claude 在需要时自行修改。既然现在代码“便宜”,Claude 编辑又可靠,这确实合理。而且确实能控制代码体积。
不用 WhatsApp
我的第一个问题是……机器人怎么接入 WhatsApp?这是大多数 OpenClaw(和 NanoClaw)用户的首选联系方式。问题在于,除非你有企业账户,否则肯定没有足够平台权限来托管任意新用户。仔细查看发现,WhatsApp 连接依赖一个叫 Baileys 的模块,它会扫描 WhatsApp Web 基于 WebSocket 的数据——Meta 强烈反对这种做法。事实上,使用未授权方法连接 WhatsApp 的账户会被主动监控和限制。
我肯定不会鼓励使用这种方法,但幸运的是我们不必用。我确实付费使用 Slack 工作区,虽然连接 Slack 有点麻烦,但至少完全合规。
安装步骤
我当然已经安装了 Claude,连接的是“Pro”账户。按照说明,我照常操作:
git clone https://github.com/qwibitai/nanoclaw.git
然后在新建目录里运行 Claude 并输入 /setup:

我安装了 Docker Desktop,这部分需要它:

在 Mac 上,如果你没自己启动,会在菜单栏看到熟悉的 Docker 图标。
接着是连接 Claude 的方式:

通常我得记得关掉 API 密钥,因为它比订阅贵。这是我第一次看到两个选项并列出现——好迹象。
然后来到有争议的部分:

如我所言,我觉得 WhatsApp 不合适,所以会用 Slack。
接着我们迎来了伟大的 Slack 支线任务:

现在需要找两个令牌,但不是用剑和盾牌,而是通过 Slack API。我只推荐有经验的冒险者进行这个任务。继续前进。
在 Slack 生成令牌
幸运的是,Slack 技能页面有些好说明,Claude 也很有耐心。首先需要生成令牌和权限范围。
在 Slack 上找到对应对话框:

需要开启 Socket 模式:

然后订阅一组机器人事件:

并为 OAuth 添加权限范围——这些限制了 NanoClaw 应用在账户中的操作权限:

最后安装新应用并获取最终的地牢钥匙令牌:

我屠了龙/找到了宝藏/打败了火箭人。嗯,还没完全成功。
Claude 崩溃了。但我很快回到原处,Claude 似乎修复了有问题的 Slack 脚本,接受了我的两个令牌放入它的 .env 文件:

然后就是把 NanoClaw 引入我的 Slack 频道。
我原以为 Slack 部分结束了,但还需要让它访问我的服务器文件夹。记得吗?我们之前用 Claude Cowork 时也这样做,给它真正的权限:

要是有更优雅的文件夹选择方式就好了,但我添加了愿意让 NanoClaw 查看的文件夹:

获取正确的 Claude 认证令牌后,我就能在 Slack 频道里和 NanoClaw 交流了:

第一次尝试确认 NanoClaw 能看到我 Mac 上的文件夹时失败了:

这既是好事也是坏事。它证明了智能体确实运行在容器里,不是单个应用的一部分。当然,我让 Claude 自己修复问题。我一直在跟踪日志,所以能把所有问题反馈给 Claude,最终它用 NanoClaw 智能体能理解的方式映射了文件夹:

注意它如何将“智能体”称为独立实体。所以我在 NanoClaw 智能体和 Claude 之间来回沟通。我仍然扮演工程师角色——但这种控制分离没问题。错误都是我们常犯的,不理解 Linux 想要什么。没人理解 Linux 想要什么。
最终它修复了内部数据库,重启了容器所需的内容。新映射完成后,我能看到 Documents 文件夹了:

为了验证,我添加了新文件检查是否实时映射到目录。最终确实反映出文件存在。
“我喜欢 Claude 把容器里的智能体看作完全独立于自己的实体。总的来说,如果你真想成为‘高级用户’——那种只需要个能吼的秘书的人——这确实是更合理、更安全的设置。”
现在这不是运行在我橱柜下的 Mac Mini 上,而是在我的笔记本电脑上。所以我不会在凌晨两点外出跑步时要求它基于收件箱里的报告生成研究文档,但如果我真有这种需求,NanoClaw 显然能相当安全地提供这种服务。
虽然我需要扮演工程师角色让一切运行起来,但实际上我只是把问题告诉 Claude,Claude 就修复了它们。为此,我获得了从手机 Slack 应用到服务器的直接连接。我喜欢 Claude 把容器里的智能体看作完全独立于自己的实体,总的来说,如果你真想成为“高级用户”——那种真的需要个能吼的秘书的人——这确实是更合理、更安全的设置。
觉得有用?分享给更多人