WorkBuddy 核心设计架构
基于
/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked逆向分析 WorkBuddy Desktop v5.2.5 + CodeBuddy CLI v2.106.4 | 腾讯出品
一、整体架构概览
基于
/Applications/WorkBuddy.app/Contents/Resources/app.asar.unpacked逆向分析 WorkBuddy Desktop v5.2.5 + CodeBuddy CLI v2.106.4 | 腾讯出品
一、整体架构概览
NanoClaw 是您的专属 AI 助手,可安全运行在容器中。轻量设计,易于理解,还能根据您的需求自由定制。 与复杂的 OpenClaw 不同,NanoClaw 坚持“小巧易懂”的哲学,仅由单一 Node.js 进程和少量源文件组成,无微服务或复杂配置。其核心安全机制在于利用 Linux 容器(macOS 上支持 Apple Container 或 Docker)进行操作系统级别的隔离,确保智能体只能在挂载的沙箱环境中运行,无法访问宿主机敏感数据。系统支持按群组隔离的持久记忆、可安排的任务调度及网络访问功能。独特的“技能优于功能”架构鼓励用户通过贡献技能脚本(如添加 Telegram 支持)来定制功能,而非直接修改核心代码,从而保持代码库的纯净与个性化适配。
README

NanoClaw —— 您的专属 Claude 助手,在容器中安全运行。它轻巧易懂,并能根据您的个人需求灵活定制。
我为什么创建这个项目
OpenClaw 是一个令人印象深刻的项目,愿景宏大。但我无法安心使用一个我不了解却能访问我个人隐私的软件。OpenClaw 有 52+ 个模块、8 个配置管理文件、45+ 个依赖项,以及为 15 个渠道提供商设计的抽象层。其安全性是应用级别的(通过白名单、配对码实现),而非操作系统级别的隔离。所有东西都在一个共享内存的 Node 进程中运行。
NanoClaw 用一个您能在 8 分钟内
协议修订版本:2025-03-26
Model Context Protocol(MCP)是一个开放协议,它使 LLM 应用程序与外部数据源和工具之间能够无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面,还是创建自定义 AI 工作流,MCP 都提供了一种标准化的方式来连接 LLM 与它们所需的上下文。
本规范基于 schema.ts 中的 TypeScript 模式,定义了权威的协议要求。
有关实现指南和示例,请访问 modelcontextprotocol.io。
概述
MCP 为应用程序提供了标准化的方式来:
该协议使用 JSON-RPC 2.0 消息在以下组件之间建立通信:
MCP 部分受到 Language Server Protocol 的启发,后者标准化了如何在整个开发工具生态系统中添加对编程语言的支持。类似地,MCP 标准化了如何将额外的上下文和工具集成到 AI 应用程序的生态系统中。
关键细节
基础协议
功能
服务器向客户端提供以下任何功能:

这篇文章是使用 Google Gemini Deep Research 生成的。提示词:
研究 Model Context Protocol
1. 模型上下文协议 (MCP) 导论
大型语言模型 (LLMs) 在理解和生成人类语言方面取得了显著的进步。然而,这些模型本质上是孤立的,它们的知识仅限于训练数据,并且缺乏与外部世界交互的能力 1。为了克服这些限制,将 LLMs 与外部数据源和工具集成变得至关重要 1。传统上,这种集成是通过为每个新的数据源或工具开发定制的连接器来实现的 1。这种方法导致了集成工作的重复,难以扩展,并且维护成本高昂,阻碍了上下文感知 AI 的广泛采用 1。
为了应对这一挑战,模型上下文协议 (MCP) 应运而生 1。MCP 是一种开放标准,旨在规范应用程序如何向 LLMs 提供上下文和工具 6。可以将 MCP 视为 AI 应用程序的通用连接器,类似于 USB-C 标准化了设备和外设之间的连接 6。通过提供一种标准化的方式将 AI 模型连接到各种数据源和工具,MCP 简化了集成,增强了互操作性,并促进了可扩展性 6。
本报告旨在对模型上下文协议 (MCP) 进行全面的解析,涵盖其基本原理、核心架构、通信机制、广泛的应用场景以及客户端和服务器端的创建方法。通过深入理解 MCP,开发者和组织可以更好地利用这一新兴标准,构建更智能、更具上下文感知能力的 AI 应用。
什么是 CodeGate
CodeGate 是位于 AI 编码助手和 LLM 之间的本地提示网关,用于增强隐私和安全性。
工作原理
CodeGate 是位于 AI 编码助手和 LLM 之间的本地代理。CodeGate 会审查您的提示是否存在任何潜在的机密泄露 — 在机密离开您的桌面之前对其进行加密,并在响应中对其进行解密。CodeGate 使用 RAG 来更新任何 LLM 的知识库,并提供相关的风险洞察。

Continue 指南
启动 CodeGate 服务
docker pull ghcr.io/stacklok/codegate:latest
docker run --name codegate -d -p 8989:8989 -p 9090:9090 --restart unless-stopped ghcr.io/stacklok/codegate:latest
下载 Ollama 代码模型
ollama pull qwen2.5-coder:7b
ollama pull qwen2.5-coder:1.5b
配置 Continue 扩展
编辑配置文件:~/.continue/config.json
API_KEY
方法一
from fastapi import Security, HTTPException, status
from fastapi.security.api_key import APIKeyHeader
API_KEY="123456"
API_KEY_NAME = "X-API-KEY"
api_key_header = APIKeyHeader(name=API_KEY_NAME, auto_error=True)
async def get_api_key(api_key: str = Security(api_key_header)):
if api_key != API_KEY:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid API Key"
)
@app.get('/index', dependencies=[Security(get_api_key)])
async def index():
return {"message": "Hello World"}
APIKeyHeader 的源码
捕获 HTTP 请求的内容
nc -l port
curl http://ip:port/
GET 请求
curl http://127.0.0.1:8000/
GET /?name=wjj HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: curl/7.61.1
Accept: */*
POST JSON 请求
curl --location --request POST 'http://127.0.0.1:8000/users_by_json' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "wjj",
"age": 40
}'
POST /users_by_json HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: curl/7.61.1
Accept: */*
Content-Type: application/json
Content-Length: 36
{
"name": "wjj",
"age": 40
}
规则
添加规则
iptables -t raw -A OUTPUT -p icmp -j TRACE
iptables -t raw -A PREROUTING -p icmp -j TRACE
查看规则
# iptables -t raw -L -n --line-numbers
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 TRACE icmp -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 TRACE icmp -- 0.0.0.0/0 0.0.0.0/0
删除规则
iptables -t raw -D PREROUTING 1
iptables -t raw -D OUTPUT 1
参考资料
认证机制
API 服务器接收的请求经过认证插件列表,当遇到第一个成功返回用户名、用户ID和组信息给 API 服务器后,将停止剩余的认证调用,进入授权阶段。
ServiceAccount
镜像拉取密钥
向 ServiceAccount 中添加 imagePullSecrets,可以不必对每个 Pod 单独添加 imagePullSecrets。
创建 docker-registry Secret
kubectl create secret docker-registry mydockerhubsecret \
--docker-username=myusername \
--docker-password=mypassword \
--docker-email=myemail
编写 ServiceAccount YAML 文件(sa-image-pull-secret.yaml)
apiVersion: v1
kind: ServiceAccount
metadata:
name: image-pull-secret
imagePullSecrets:
- name: mydockerhubsecret
创建 ServiceAccount 对象
kubectl apply -f sa-image-pull-secret.yaml
编写 Pod YAML 文件(private-serviceacc
指定端口
ssh -p <port> user@hostname
密钥登录
默认
私钥文件在 macOS 的客户端位置是 /Users/wjj/.ssh/id_rsa,公钥文件存放在服务器端的位置是 /home/user/.ssh/authorized_keys。
指定
ssh -i <identity_file> user@hostname
安装了Ubuntu系统后,默认ssh不允许使用密码进行root登录,通过如何配置可以实现允许。
登录root
$ su - root
查看ssh配置文件中的PermitRootLogin项
$ nano /etc/ssh/sshd_config
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
修改ssh配置文件中的PermitRootLogin项:PermitRootLogin yes
$ sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
查看ssh配置文件中的PermitRootLogin项
nano /etc/ssh/sshd_config
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
重启sshd服务
$ systemctl restart sshd
生成身份验证密钥
ssh-keygen -t rsa,在~/.ssh/目录下生成私匙id_rsa和公匙id_rsa.pub两个文件。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa): 直接回车
Enter passphrase (empty for no passphrase): 直接回车
Enter same passphrase again: 直接回车
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:foo-YWwIv/a/HGEGt9P6vvmff/QjBGEvzlYM4hBWeR0 username@hostname
The key's randomart image is:
+---[RSA 2048]----+
| +oo.ooE.|
| . o..o+. |
| . . .. .+ |
| . o o o.o |
| o o S . +. |
| o =+ + .. ..|
| + .+ . . o..|
| o .o = . + .o|
| . o+o=o+o. o..|
+----[SHA256]-----+
Ubuntu
sudo apt-get install openssh-server
sudo apt-get remove openssh-server
sudo service ssh start
sudo service ssh stop
sudo service ssh restart
service ssh status
sudo vi /etc/ssh/sshd_config
ssh username@ip -p 22
sudo update-rc.d ssh defaults
sudo update-rc.d ssh remove
ls /etc/rc*
......
......
ls -l /etc/rc2.d/S02ssh
lrwxrwxrwx 1 root root 13 12月 25 16:33 /etc/rc2.d/S02ssh -> ../init.d/ssh
参考资料