一套跑在国模上的 Agent 工作流。成本压到首月 2 美元级别,主力客户端能接 Telegram,特殊场景再挂破甲插件。
做逆向和红队方向的项目,最大的矛盾不是工具不够,而是能干活、不被拦、还便宜这三件事凑不齐。大厂模型贵且保守,本地模型笨,商业 Agent 客户端要么锁供应商要么锁功能。
下面这套是我实际在跑的:客户端用 deva,特殊场景加一套 DeepSeek Harness + dsh-purge,上游走 Cline Pass,中间用自建的 cline-pass-switcher 把订阅转成标准 OpenAI 兼容接口。三个开源项目全部在 GitHub,装完就能用。
仓库:https://github.com/sqfcyily/deva
定位是"对话式 AI 助手 · All in Chat",基于 Electron 的桌面端,Windows / macOS 双平台,MIT 协议。
它把 Agent 能力塞进聊天窗口,不用翻设置页。挂载一个文件夹就能读代码、改文件、跑命令;说一句"建个每天 9 点的任务"就建好了。
几个真正影响工作流的点:
/rewind 回滚:回到任意一轮之前,代码和对话可以分开恢复,回退了还能撤销 —— 逆向改文件改崩了这条救命/技能名 直接调预设方法论,MCP 接外部工具服务/compact支持的服务商:Anthropic、OpenAI、Google Gemini、DeepSeek、Kimi、智谱 GLM、通义千问、Ollama。其他兼容 OpenAI 接口的可以自己加 —— 这也是后面能接 cline-pass-switcher 的前提。
到 Releases 页按平台下:
Deva-x.y.z-setup.exe 双击装Deva-x.y.z-portable.zip 解压跑 Deva.exeDeva-x.y.z-arm64.dmgDeva-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。
这是决定性理由。项目干到一半人不在电脑前,手机上发条消息就能接着推。
配置全程扫码,不用手动搜索:
/newbot 按提示建机器人,把回复的 Token 粘回 Deva 保存要求电脑能连上 api.telegram.org,需要代理就设系统代理,Deva 会自动用。飞书(含国际版 Lark)也支持。
⚠️ 用了 IM 机器人,手机端的对话内容会经过对应 IM 平台的服务器。项目资料敏感的注意这条。
仓库: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。
dsh web 再开;桌面端退托盘再开对应 exe| 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 起改为商业许可,个人本机使用免费,商用需要单独授权。
价格是硬道理:首月 2.12 美元。额度大概 100 美元的量级(我没细算过),关键是 DeepSeek 那档 ds4.1f-1017 极其耐用 —— 跑长任务、连续改文件都不容易烧完。
破甲只针对国模,这条链路正好全部落在国模上,匹配。
到 https://app.cline.bot/dashboard/ 注册账号。
注册完新开一个窗口,复制下面任意一条优惠链接打开购买(哪个还活着试哪个):
新开窗口这一步别省,直接在已登录的仪表盘标签里点容易丢参数。
仓库:https://github.com/hicocos/cline-pass-switcher
两件事:
第一,定住上游。 Cline 网关可能把请求送进不同管道,直连(OpenRouter)和规划器(Vercel AI Gateway)行为不一样,同一个模型今天跑这个渠道明天跑那个,效果飘。这个控制台能枚举并实测模型背后的渠道,然后严格钉住某一个。
第二,多账号调度。 单账号跑长任务会被五小时/每周/每月用量卡住。多账号池 + 手动选择或轮询,能把额度接起来。
顺带还有:管理密码和下游 API Key 分离、用量面板、请求历史、JSON 和 SSE 流式聊天、逐次尝试记录(实际渠道、模型、耗时、故障转移路径)。
前置:原生运行要 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,两者会被当成不同 Originhttps://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 路径起不来。
这是整个项目最有价值的部分。data/config.json 里的 perModel 结构:
"perModel": {
"模型ID": {
"upstreams": ["按优先级排的有序候选"],
"exclude": ["要剔除的渠道"],
"pinMode": "strict",
"sort": "cost"
}
}
pinMode: "strict" —— 严格钉住,只用指定候选pinMode: "preferred" —— 优先用,失败才回退sort 可选 cost(成本)/ ttft(首字延迟)/ tps(吞吐)渠道名从哪里来?控制台探测出来的实测结果,不是猜的。先进控制台跑一遍枚举和实测,看每个模型背后有哪些可用渠道、各是什么表现,再把想要的写进 upstreams。
一个提醒:网关可能把请求送进不同管道,控制台靠元数据和探测学习渠道,不保证某个渠道永久支持某个模型。所以偶尔要重新探测校验一次。
accounts 池:
"accounts": [
{"name": "号1", "key": "上游 Key", "enabled": true},
{"name": "号2", "key": "上游 Key", "enabled": true}
]
accountMode 二选一:
single —— 手动指定,配合 activeAccount 下标roundrobin —— 轮询多账号不是为了作弊,是为了长任务不被单个账号的用量窗口掐断。控制台会读官方五小时、每周、每月用量;官方没给重置时间时它会明确说没有,不推算倒计时。
不管上游怎么调度,对客户端只暴露一个标准入口:
Base URL: http://127.0.0.1:3123/v1
API Key: data/config.json 里的 proxyKey
Model: 控制台里列出的模型 ID
注意三个凭据是三个独立域,别搞混:
proxyKey —— 客户端调 API 用验证一下:
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 等
几个实际配置建议:
http://127.0.0.1:3123/v1,Key 填 proxyKey,模型 ID 从控制台抄按遇到概率排序:
| 症状 | 原因 | 处理 |
|---|---|---|
| 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。少一个都不行