逆向 / 安全研究项目里的 Agent 工具链:deva + dsh-purge + Cline Pass 实战配置
一套跑在国模上的 Agent 工作流。成本压到首月 2 美元级别,主力客户端能接 Telegram,特殊场景再挂破甲插件。做逆向和红队方向的项目,最大的矛盾不是工 2026-10-20 04:3:53 Author: blog.upx8.com(查看原文) 阅读量:3 收藏

一套跑在国模上的 Agent 工作流。成本压到首月 2 美元级别,主力客户端能接 Telegram,特殊场景再挂破甲插件。

做逆向和红队方向的项目,最大的矛盾不是工具不够,而是能干活、不被拦、还便宜这三件事凑不齐。大厂模型贵且保守,本地模型笨,商业 Agent 客户端要么锁供应商要么锁功能。

下面这套是我实际在跑的:客户端用 deva,特殊场景加一套 DeepSeek Harness + dsh-purge,上游走 Cline Pass,中间用自建的 cline-pass-switcher 把订阅转成标准 OpenAI 兼容接口。三个开源项目全部在 GitHub,装完就能用。


一、Agent 客户端:两个选择

1.1 deva —— 主力干活的

仓库:https://github.com/sqfcyily/deva

定位是"对话式 AI 助手 · All in Chat",基于 Electron 的桌面端,Windows / macOS 双平台,MIT 协议。

它把 Agent 能力塞进聊天窗口,不用翻设置页。挂载一个文件夹就能读代码、改文件、跑命令;说一句"建个每天 9 点的任务"就建好了。

几个真正影响工作流的点:

  • 多角色:内置全能助手 Deva 和安全研究专家小码酱,角色可自建,每个角色能独立绑定常用模型和性格
  • 子智能体:大任务自动拆开并行跑,内置通用 / 检索 / 调研 / 方案四种,各有独立上下文,只把结论交回来
  • /rewind 回滚:回到任意一轮之前,代码和对话可以分开恢复,回退了还能撤销 —— 逆向改文件改崩了这条救命
  • 技能 + MCP:/技能名 直接调预设方法论,MCP 接外部工具服务
  • 长对话自动压缩:接近上下文上限时把早期内容压成摘要,也能手动 /compact

支持的服务商:Anthropic、OpenAI、Google Gemini、DeepSeek、Kimi、智谱 GLM、通义千问、Ollama。其他兼容 OpenAI 接口的可以自己加 —— 这也是后面能接 cline-pass-switcher 的前提。

安装

到 Releases 页按平台下:

  • Windows:Deva-x.y.z-setup.exe 双击装
  • Windows 便携版:Deva-x.y.z-portable.zip 解压跑 Deva.exe
  • macOS(M 芯片):Deva-x.y.z-arm64.dmg
  • macOS(Intel):Deva-x.y.z-x64.dmg

首次打开被系统拦,Windows 点"更多信息 → 仍要运行";macOS 可能需要:

xattr -cr /Applications/Deva.app

想从源码跑,需要 Node.js 20+ 和 pnpm:

pnpm install
pnpm dev               # 开发模式
pnpm package:win       # 打 Windows 安装包
pnpm package:mac       # 打 macOS 安装包

首次配置

打开 设置 → 模型,选一个服务商,填 API 密钥,把要用的模型加进列表。回到对话,在输入框上方选模型就能开始。

数据都放本机 ~/.deva 下,大部分是能直接打开看的明文文件;API 密钥和机器人凭据加密存。想换位置设环境变量 DEVA_HOME。

为什么主力选它:Telegram 无损对接

这是决定性理由。项目干到一半人不在电脑前,手机上发条消息就能接着推。

配置全程扫码,不用手动搜索:

  1. 点最左侧「机器人」,点 +,选 Telegram
  2. 扫第一个二维码打开 @BotFather,发 /newbot 按提示建机器人,把回复的 Token 粘回 Deva 保存
  3. 扫第二个二维码打开你刚建的机器人,点「Start」,你的账号就成了它的"主人"

要求电脑能连上 api.telegram.org,需要代理就设系统代理,Deva 会自动用。飞书(含国际版 Lark)也支持。

⚠️ 用了 IM 机器人,手机端的对话内容会经过对应 IM 平台的服务器。项目资料敏感的注意这条。


1.2 DeepSeek Harness + dsh-purge —— 特殊场景补位

仓库:https://github.com/YuJunZhiXue/dsh-purge

dsh 是什么:DeepSeek 官方 Harness 的命令行/运行环境简称,有 Web 版(dsh web)和桌面 EXE 两个形态。它不是简单把问题转给模型 —— 运行时还会改提示词、走审批门、开沙箱、改会话格式。

插件解决什么:不看"模型答不答",只看到"被拦",会把宿主拦截误判成模型拒绝。这个插件把两层拆开,用来做受控评测,也能反推默认策略该不该收紧。

能力:默认提示词面向国模「小码酱」,不同模型可以换不同提示词。README 的表述是"Jailbreak for every model — swap prompts per model"。

安装

npm 上没有这个包,不要 pnpm add dsh-purge。必须走 GitHub 归档,而且 Web 和桌面端要分开装、分开应用:

Web(官方 dsh web):

dsh plugin --profile web add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz

桌面 EXE:

dsh plugin --profile desktop add https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz

当前目录已经是仓库时,归档地址换成 add .。dsh 不在 PATH 里就走 README 的手动安装章节。

环境要求 Node.js ≥ 18,Windows 下想不闪窗要 Node ≥ 22。

装完必做的三步(跳过就是没装上)

  1. 退出并重新打开刚装的那个宿主。Web 关掉 dsh web 再开;桌面端退托盘再开对应 exe
  2. 在这个宿主里点会话标题旁的 dsh-purge,进 清洗 页点 「应用」。宿主的设置页里没有这个条目,别在那儿找
  3. 「应用」成功会自动重启一次让补丁进当前进程。没重启就是没做完

版本对照 —— 这块最容易踩

dsh 版本 该用哪个插件版本
dsh 0.2(桌面 0.2.0-rc.2 / 0.2.1-rc.2、dsh web) 1.1.40 及以上
dsh 0.1.7(含 rc.1 / rc.2) 1.1.39 及更早(去 Releases 选对应 tag)

最新版插件只支持 dsh 0.2,拿它去打 0.1.x 不会生效。版本对不上时补丁显示"待应用"或"跳过",不会乱改文件。

实战经验:最新版 harness 配最新版插件会出问题。 我自己是让 GPT 把兼容性修好了才跑通的,嫌麻烦就直接用旧版 harness —— 省下来的时间比追新版本值。

⏳ 时效提醒:最新公开版 1.1.71。作者声明 2026 年 10 月 27 日 起关闭 GitHub 更新,后续只在 Telegram 频道 t.me/LLM_PoJia/271 发布。要用趁早把归档存本地。

另外 1.1.x 起改为商业许可,个人本机使用免费,商用需要单独授权。


二、模型提供商:Cline Pass

2.1 为什么选它

价格是硬道理:首月 2.12 美元。额度大概 100 美元的量级(我没细算过),关键是 DeepSeek 那档 ds4.1f-1017 极其耐用 —— 跑长任务、连续改文件都不容易烧完。

破甲只针对国模,这条链路正好全部落在国模上,匹配。

2.2 注册

到 https://app.cline.bot/dashboard/ 注册账号。

2.3 购买

注册完新开一个窗口,复制下面任意一条优惠链接打开购买(哪个还活着试哪个):

  • https://app.cline.bot/promo?code=MEHUL2-80
  • https://app.cline.bot/promo?code=HITESH80
  • https://app.cline.bot/promo?code=UNIAI80

新开窗口这一步别省,直接在已登录的仪表盘标签里点容易丢参数。


三、cline-pass-switcher:把订阅变成标准接口

仓库:https://github.com/hicocos/cline-pass-switcher

3.1 它到底解决什么问题

两件事:

第一,定住上游。 Cline 网关可能把请求送进不同管道,直连(OpenRouter)和规划器(Vercel AI Gateway)行为不一样,同一个模型今天跑这个渠道明天跑那个,效果飘。这个控制台能枚举并实测模型背后的渠道,然后严格钉住某一个。

第二,多账号调度。 单账号跑长任务会被五小时/每周/每月用量卡住。多账号池 + 手动选择或轮询,能把额度接起来。

顺带还有:管理密码和下游 API Key 分离、用量面板、请求历史、JSON 和 SSE 流式聊天、逐次尝试记录(实际渠道、模型、耗时、故障转移路径)。

3.2 部署

前置:原生运行要 Node.js ≥ 22.19.0 和 npm。Docker 部署只需要 Docker Engine + Compose 插件。

后端必须有有效的 Cline Pass API Key,在订阅账户设置里创建。没有上游 Key 也能启动控制台,但没法聊天。

初始化配置:

git clone https://github.com/hicocos/cline-pass-switcher.git
cd cline-pass-switcher
install -d -m 700 data
cp config.example.json data/config.json
chmod 600 data/config.json

已有数据时不要再执行覆盖配置的 cp。打开 data/config.json,至少改两个字段:

{
  "proxyKey": "用密码管理器生成的长随机密钥",
  "publicBaseUrl": "http://127.0.0.1:3123"
}
  • proxyKey 建议至少 32 个随机字节,openssl rand -hex 32 生成。别拿示例文字当密码
  • 本地访问填 http://127.0.0.1:3123,不要写 localhost,两者会被当成不同 Origin
  • 公网访问填完整 HTTPS 地址,例如 https://pass.example.com,不要带 /v1

首次管理员登录密码等于初始化时的 proxyKey。登录后在「访问与安全」设独立管理密码。也可以在首次启动时设 ADMIN_PASSWORD 环境变量,但已有 adminPasswordHash 后这个变量不会重置密码。

本地跑(最省事):

node --version
npm --version
npm ci --omit=dev --ignore-scripts
DATA_DIR="$PWD/data" node server.js

打开 http://127.0.0.1:3123/,用初始管理密码登录,进「账号管理」添加上游账号并保存。默认只监听 127.0.0.1,配置好 HTTPS 之前别把管理端口暴露到公网。

Docker(有反代的情况):

docker compose up -d --build
docker compose logs --tail=100 cline-pass-console

宿主机端口限定在 127.0.0.1:3123,反代指向它。

Docker + Caddy 自动 HTTPS(没反代):

先把域名 A 记录指过来(配了 AAAA 的话 IPv6 也得通),开放 TCP 80/443,publicBaseUrl 设成同域名 HTTPS 地址,然后:

CPASS_DOMAIN=pass.example.com \
  docker compose -f deploy/docker-compose.all-in-one.yml up -d --build

docker compose -f deploy/docker-compose.all-in-one.yml logs --tail=100

Caddy 自动签发续期证书,应用端口只在 Compose 网络内暴露。别用 down -v,那会删掉证书卷。

systemd(Debian / Ubuntu):模板在 deploy/cline-pass-switcher.service,装之前必须把 ExecStart 的第一个路径改成 command -v node 输出的绝对路径 —— 服务以 clinepass 用户跑且开了 ProtectHome=true,引用 /root 或用户 home 下的 nvm 路径起不来。

3.3 钉住上游(核心配置)

这是整个项目最有价值的部分。data/config.json 里的 perModel 结构:

"perModel": {
  "模型ID": {
    "upstreams": ["按优先级排的有序候选"],
    "exclude": ["要剔除的渠道"],
    "pinMode": "strict",
    "sort": "cost"
  }
}
  • pinMode: "strict" —— 严格钉住,只用指定候选
  • pinMode: "preferred" —— 优先用,失败才回退
  • sort 可选 cost(成本)/ ttft(首字延迟)/ tps(吞吐)

渠道名从哪里来?控制台探测出来的实测结果,不是猜的。先进控制台跑一遍枚举和实测,看每个模型背后有哪些可用渠道、各是什么表现,再把想要的写进 upstreams。

一个提醒:网关可能把请求送进不同管道,控制台靠元数据和探测学习渠道,不保证某个渠道永久支持某个模型。所以偶尔要重新探测校验一次。

3.4 多账号调度

accounts 池:

"accounts": [
  {"name": "号1", "key": "上游 Key", "enabled": true},
  {"name": "号2", "key": "上游 Key", "enabled": true}
]

accountMode 二选一:

  • single —— 手动指定,配合 activeAccount 下标
  • roundrobin —— 轮询

多账号不是为了作弊,是为了长任务不被单个账号的用量窗口掐断。控制台会读官方五小时、每周、每月用量;官方没给重置时间时它会明确说没有,不推算倒计时。

3.5 客户端接入

不管上游怎么调度,对客户端只暴露一个标准入口:

Base URL: http://127.0.0.1:3123/v1
API Key:  data/config.json 里的 proxyKey
Model:    控制台里列出的模型 ID

注意三个凭据是三个独立域,别搞混:

  • 管理登录密码 —— 进控制台用
  • proxyKey —— 客户端调 API 用
  • 上游 Cline Pass Key —— 控制台连上游用

验证一下:

curl -fsS http://127.0.0.1:3123/api/meta
# 应返回 authRequired: true

read -r -s -p 'Proxy API Key: ' PROXY_KEY; printf '\n'
export PROXY_KEY

curl -fsS http://127.0.0.1:3123/v1/models \
  -H "Authorization: Bearer $PROXY_KEY"

unset PROXY_KEY

不带 Key 请求 /v1/models 应该返回 401。返回 200 说明鉴权没生效,别拿去公网用。


四、串起来

整条链路长这样:

deva(桌面 / 手机 TG Bot)
        │  OpenAI 兼容请求
        ▼
cline-pass-switcher  127.0.0.1:3123/v1
        │  钉住渠道 + 账号轮询
        ▼
Cline Pass 上游  →  DeepSeek / GLM / Kimi 等

几个实际配置建议:

  1. deva 里加自定义服务商,Base URL 填 http://127.0.0.1:3123/v1,Key 填 proxyKey,模型 ID 从控制台抄
  2. 角色分别绑模型:干体力活的角色(批量读文件、改代码)用便宜的 flash 档,做方案推演的角色再上强模型。deva 的角色独立绑模型就是为这个
  3. dsh-purge 那条线单独走,别和 deva 抢同一个上游账号。破甲评测是高频短请求,混在一起会打乱用量判断
  4. TG Bot 只对主线开,因为手机端对话会过 IM 服务器,敏感项目别接

五、踩坑清单

按遇到概率排序:

症状 原因 处理
dsh-purge 装了没反应 只装了一个 profile,或没点「应用」 Web 和桌面分开装,装完必须重启宿主再点应用
dsh-purge 补丁显示"跳过" 插件版本和 dsh 版本对不上 0.2 用 1.1.40+,0.1.7 用 1.1.39 及更早
控制台启动报 Set ADMIN_PASSWORD or proxyKey 首次没配管理员凭据 补 proxyKey 后重启,别关鉴权绕过
页面能开,登录报"来源无效" 浏览器地址和 publicBaseUrl 不一致 协议、域名、端口必须完全一致;localhost 和 127.0.0.1 不通用
小 token 测试返回 empty response content 推理模型先烧完输出上限没生成正文 给够 token 预算,探测至少给 256,别用 16 / 32
某渠道 429 或模型映射错 共享池限流或不再提供该模型 看逐次尝试记录,重新探测再调上游
挂了代理 Telegram 连不上 没走系统代理 设系统代理,Deva 会自动用
systemd 起不来 ExecStart 指向了 nvm 路径 改成 command -v node 的绝对路径

另外三条安全底线:

  • 升级控制台前先停服务,整份 data/ 做加密备份,备份放仓库外面。data/config.json 里是账号 Key 和密码哈希,data/metadata.json 含账号名和请求历史 —— 这些进 Git 就是事故
  • 公网部署必须同时满足:非空 proxyKey + HTTPS + 准确的 publicBaseUrl。少一个都不行
  • 密钥曾经进过公开历史,直接轮换,光删最新文件没用

六、边界

  • dsh-purge 只作用于你本机已装好的官方 Harness 和本机配置。 它不是公网扫描器,也不是打别人站点的套件。原项目明确禁止对未经登记的中国大陆、香港、澳门服务器和网站做任何操作。所有操作限定在自己有权管理的环境里
  • Cline Pass 和上游服务都有各自的用户协议。 多账号调度、订阅共享这类用法自己评估风险,账号被封与本方案无关
  • 优惠码可能随时失效。 三条链接轮着试,都挂了就直接原价

文章来源: https://blog.upx8.com/Agent-deva-dsh-purge-Cline-Pass
如有侵权请联系:admin#unsafe.sh