Trae不开机每天自动签到免费领积分
今天继续来填个坑,很早之前就有小伙伴想让老马出一期,Trae的每天自动签到领免费积分的教程。思路跟之前分享的WorkBuddy的教程是一样,大家也可以回看老文互相参考一下:workbuddy不开机永久自动签到领积分
Trae分为国内版本跟国际版本,国内版本叫Trae CN,国际版本直接是叫Trae。国际版本目前是没有每天签到领积分活动的,所以本文主要是以Trae国内版本为演示。
01 · CHAPTER ONE
豆包工作签到:一肚子火
顺带提一嘴,豆包工作也是有小伙伴想让老马搞一期每天自动签到领取免费额度的教程。是的,豆包工作前段时间也学WorkBuddy,推出了签到领额度的活动,测试了个把星期下来,也是一肚子火。
虽说Trae跟豆包工作都同属于字节,但豆包工作的风控却比Trae变态多了。就那每天签到领的200额度,整得跟防多大的贼似的。更何况,豆包工作签到送的属于活动额度,跟创作额度是分开的。
创作额度是你可以去用生成视频模型,比如Seedance2.5,而活动额度或者体验额度,你只能用于Seed豆包大语言模型。坦白来讲,字节除了Seedance跟Seedream两个生视频生图能打,你Seed模型算老几?
有时候真搞不懂这个团队的人在想什么,正常的风控可以理解。问题现在是跟一群办公Agent抢用户的时间阶段,有必要把领免费鸡蛋这件事情,上升到抖音同级别的超严格限制程度么。
豆包工作又不支持接入第三方模型,真不知道哪里来的自信能把自己装成这样。老马一开始是想用原来的金山文档,加上签到脚本的思路去实现的。结果两个账号都被风控了,没办法。
后来换了个思路,豆包工作本身自己也有云电脑的,那就用云电脑设定一个定时任务,定时打开云端浏览器去签到。这是官方的客户端和正规路径了,结果如图:
一个星期过去了兄弟们,老马两个豆包工作的测试账号,至今为止,哪怕直接打开豆包工作的电脑客户端去手动点击签到按钮,也是提示如下:
请问账号是彻底被风控了,算废了吧豆姐。真是服得透透的了,你会发现老马很少写豆包工作的教程文章,就是打心眼里觉得它不可能做得起来,干得过WorkBuddy。
这种心眼跟格局的团队,每天不去研究怎么抄这抄那,把用户体验做起来,多站在用户的角度去考虑需求问题。天天在这里研究怎么风控,怎么抠钱省钱,怎么把自家的Seed模型扶上墙。
字节缺钱么?张一鸣都6700亿身家全国首富了,多送点鸡蛋跟友商们拼抢用户咋了,至于这么抠抠搜搜。吐槽完了,所以豆包工作签到领额度这块,你能签到,就老老实实手动去签到,别搞什么托管自动化了。
02 · CHAPTER TWO
Trae:表扬与Agent模式
下面表扬一下同为一家人的Trae,虽然每天签到只送100个积分鸡蛋,但好在风控没那么严格。只不过Trae的电脑客户端下载后,默认的界面是IDE的,比较适合程序员小伙伴使用。
但老马发现它是可以切换到办公Agent状态的,你只需要在右上角点击那个绿色的Agent按钮,即可打开熟悉的办公Agent界面,这个界面跟WorkBuddy,豆包工作,Codex等都差不多的:
不过Trae的Agent产品体验做得一般,搞不懂它那个上下文窗口即便设置成1M了还老是不够压缩,这点暂且不表。我们先切换到Agent,然后来获取一下Trae的登录token。
03 · CHAPTER THREE
获取Trae登录token
把下面的提示词直接发送给Trae,模型的话老马是使用MiniMax-M3.1-Flash,也就是之前俗称的太空兔:
帮我从电脑上已经装好的 Trae CN 客户端里提取登录凭据,用来配置云端自动签到。整个过程只读取文件,不要修改、不要删除任何东西,也不要把解密出来的账号信息打印出来,最后只给我一段 JSON。
登录态文件的位置:Mac 电脑在 ~/Library/Application Support/Trae CN/User/globalStorage/storage.json,Windows 电脑在 %APPDATA%\Trae CN\User\globalStorage\storage.json。如果这个目录不存在,就把目录名里的 Trae CN 换成 TRAE SOLO CN 再找一次。用 Python 读取这个 json 文件,里面会用到两类键。
第一类键是 iCubeAuthInfo://icube.cloudide,对应的值是一串 base64 编码的加密文本,解密方法是固定的,照着做就行:先把 base64 解成字节数组,开头的 6 个字节是头部不要管,第 6 到第 37 个字节共 32 个字节是密钥种子;对密钥种子做一次 sha512,得到 sha;然后把下面两个常量数组 URE 和 DRE 逐字节异或,得到一个 64 字节的结果;把 sha 和这个异或结果拼在一起再做一次 sha512,得到 h,h 的前 16 个字节是 AES 密钥,第 16 到第 32 个字节是 IV;从第 38 个字节开始到末尾是密文,用 AES-CBC 模式解密并去掉 PKCS7 填充;解出来的明文前 64 个字节是校验值直接丢掉,剩下的部分按 UTF-8 解析成 JSON,里面的 refreshToken 字段和 userId 字段就是要的东西。
URE = [82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37]
DRE = [31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]
第二类键在同一个 storage.json 里找,键名以 iCubeAuthInfo://icube-dc: 开头、后面跟着一串数字,把冒号后面那串数字原样记下来,它就是 deviceID;这个键对应的值也是同样格式的 base64 加密文本,用和上面完全一样的解密方法解开,得到的 JSON 里有 privateKeyPEM 和 publicKeyPEM 两个字段,把这两个字段的原样内容记下来。
解密需要 Python 的 pycryptodome 库,如果没装就先安装。最后把五样东西拼成一段 JSON 完整打印出来给我复制,格式是 {"refreshToken":"refreshToken的值","userID":"userId的值","deviceID":"那串数字","pubPEM":"publicKeyPEM的值","privPEM":"privateKeyPEM的值"},其中两个 PEM 字段里面自带的换行符要按 JSON 规则转义成 \n,整段 JSON 必须压缩成一行,中间不能截断。提醒我一句就行:这段 JSON 相当于密码,别发到群里。
稍等片刻,我们就获取到了token,这个token相当于登录密码,大概有效期是一个月左右,具体看提示里面写什么时候到期。到时候过期了,我们重新来发多一次提示词,重新获取就行了:
04 · CHAPTER FOUR
金山文档建表格贴token
有了token之后,下一步使用电脑浏览器打开金山文档kdocs.cn,注册登录后随便点击新建按钮,选择新建一个智能表格:
在表格中找到1行B列,位置别搞错,看清楚点。可以把这个格子放大一点,然后复制上面获取到的token,粘贴到这里面。另外左上角点击一下默认的表格名称,可以把表格命名为Trae签到啥的,表格是会自动保存的:
05 · CHAPTER FIVE
AirScript签到脚本
下一步是在表格顶部的菜单点击效率,选择高级开发,打开AirScript脚本编辑器:
进入AirScript脚本编辑器后,在左侧的列表右上角点击+号,新建一个脚本,脚本也可以鼠标右键重命名为Trae签到:
然后在右侧,你就会看到一个脚本代码的输入框。这里你就把下面的签到脚本代码复制一下,粘贴过去,点击保存按钮保存一下:
/**
* Trae CN 每日积分签到 —— 金山文档 AirScript 云端版(v6 定稿 · 自动续期半年免维护)
*
* 2026-10-26 定稿。链路:金山文档 → EdgeOne Pages 中转(trae.97444.cn) → api.trae.cn
*
* 与 v5 的区别:B1 不再放会过期的 token(14 天一换太麻烦),
* 改放「续期包」——一整段 JSON(用新版「获取token提示词」在电脑上解出来粘贴):
* {"refreshToken":"...","userID":"...","deviceID":"...","pubPEM":"...","privPEM":"..."}
* 脚本每次运行:先用续期包换一个全新 token(顺带拿到轮换后的新 refreshToken,
* 写回 B1 供下次用),再用新 token 查状态、代签到。
* refreshToken 有效期约 6 个月,期间 B1 全自动滚动更新,不用再管。
*
* 兼容旧用法:如果 B1 里粘的是 eyJ 开头的旧式 token,会直接跳过续期按 v5 流程签到。
*
* 表格约定:
* B1 = 续期包 JSON(或旧式 token)
* B2 = 最近一次运行结果(每次都带时间戳)
* D 列 = 历史日志
*
* 错误码:9074=高峰限流(晚点重跑);401=token 失效;
* 续期失败一般是 refreshToken 过期(约 6 个月一次,重跑获取token提示词)。
*/
var API = "https://trae.97444.cn/trae-api";
var UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36";
function nowLine() {
var now = new Date();
return (now.getMonth() + 1) + "月" + now.getDate() + "日 " +
("0" + now.getHours()).slice(-2) + ":" + ("0" + now.getMinutes()).slice(-2) + " ";
}
// 统一的 POST:请求头不带任何认证(金山网关会拦),要传的凭据全放请求体
function postJson(path, bodyObj) {
var resp = HTTP.post(API + "/" + path, JSON.stringify(bodyObj), {
headers: { "Content-Type": "application/json", "User-Agent": UA },
timeout: 25000
});
var status = "?";
try { status = resp.status; } catch (e1) {}
var raw = "";
try { raw = resp.text; } catch (e2) {}
if (typeof raw === "function") { try { raw = resp.text(); } catch (e3) { raw = ""; } }
if (raw === undefined || raw === null) {
try { raw = resp.body; } catch (e4) {}
if (typeof raw === "function") { try { raw = resp.body(); } catch (e5) { raw = ""; } }
}
raw = String(raw === undefined || raw === null ? "" : raw);
return { status: status, raw: raw };
}
function safeParse(text) {
try { return JSON.parse(text); } catch (e) { return null; }
}
function writeB2(line) {
Application.Range("B2").Value2 = nowLine() + line;
var row = 1;
for (var j = 1; j <= 100; j++) {
if (!Application.Range("D" + j).Text) { row = j; break; }
row = j + 1;
}
if (row <= 100) { Application.Range("D" + row).Value2 = nowLine() + line; }
}
// 签到主流程:拿到可用 token 后查状态、没签就代签
function doCheckin(token) {
var st;
try { st = postJson("status", { req_source: 1, token: token }); }
catch (e) {
writeB2("status请求异常:" + e.message + "(把这条发给老马)");
return;
}
var stJson = safeParse(st.raw);
if (stJson === null) {
writeB2("status返回异常 HTTP=" + st.status + " 长度" + st.raw.length +
" 开头=" + st.raw.slice(0, 80) + "(把这条发给老马)");
return;
}
if (stJson.data && stJson.data.checked_in !== undefined) { stJson = stJson.data; }
if (stJson.checked_in) { writeB2("今日已签到✔"); return; }
var r;
try { r = postJson("claim", { req_source: 1, token: token }); }
catch (e2) {
writeB2("claim请求异常:" + e2.message + "(把这条发给老马)");
return;
}
var rJson = safeParse(r.raw);
if (rJson === null) {
writeB2("claim返回异常 HTTP=" + r.status + " 长度" + r.raw.length +
" 开头=" + r.raw.slice(0, 80) + "(把这条发给老马)");
return;
}
if (rJson.code === 0) {
writeB2("云端代签成功✔ +" + (stJson.credits || 100) + "积分");
} else if (rJson.code === 9074) {
writeB2("⚠️失败 code=9074 高峰限流,晚点重跑一次即可");
} else {
writeB2("⚠️失败 code=" + rJson.code + " " + (rJson.message || rJson.msg || ""));
}
}
function main() {
var b1 = Application.Range("B1").Text;
if (!b1) { writeB2("失败:B1 是空的,把获取token提示词解出的续期包粘进来"); return; }
// 旧式用法兼容:B1 是 token(eyJ 开头),直接签到
if (b1.slice(0, 3) === "eyJ") {
doCheckin(b1);
return;
}
// 新式用法:B1 是续期包 JSON,先续期拿新 token
var blob = safeParse(b1);
if (blob === null || !blob.refreshToken || !blob.privPEM) {
writeB2("失败:B1 不是有效的续期包(要一整段 JSON,重跑获取token提示词复制全量)");
return;
}
var rf;
try { rf = postJson("refresh", blob); }
catch (e3) {
writeB2("续期请求异常:" + e3.message + "(把这条发给老马)");
return;
}
var rfJson = safeParse(rf.raw);
if (rfJson === null) {
writeB2("续期返回异常 HTTP=" + rf.status + " 长度" + rf.raw.length +
" 开头=" + rf.raw.slice(0, 80) + "(把这条发给老马)");
return;
}
if (rfJson.code !== 0 || !rfJson.token) {
writeB2("⚠️续期失败 code=" + rfJson.code + " " + (rfJson.message || "") +
"(401/9004 表示 refreshToken 过期,重跑获取token提示词换新续期包)");
return;
}
// 续期成功:新 refreshToken 写回 B1(轮换机制),下次运行自动用最新的
blob.refreshToken = rfJson.refreshToken;
Application.Range("B1").Value2 = JSON.stringify(blob);
doCheckin(rfJson.token);
}
main();
保存完签到脚本,还是在输入框的上面一行按钮菜单里面,找一个正方形的按钮。这个要注意看,点开后会显示已添加的服务。默认是没有的,你就继续点添加服务,然后把网络API的服务添加上去:
网络API服务添加完,最后你继续在上面一行的按钮菜单里面, 找到一个三角形的播放器一样的按钮,点击运行一下脚本。下面会显示运行的日志,如果提示执行完毕,说明脚本代码没有问题:
06 · CHAPTER SIX
定时任务与使用建议
OK,到了这一步我们就可以关掉AirScript脚本编辑器的窗口了。回到表格页面,继续在顶部菜单找到效率,可以看到高级开发下面还有个定时任务,我们点击打开:
这时左侧会弹出定时任务的列表窗口,点击创建任务。然后正常来说我们是设置每天比如9点自动去执行一下脚本完成签到,执行的AirScript脚本就选择刚才我们添加的,最后确认就行了:
到这里,整个云端的设置就完成了。而金山文档在这里扮演的角色,其实就是一个云电脑的角色。它会根据你设定的定时任务,每天早上9点去执行一下签到脚本完成签到,全程不需要你电脑开机或者挂机。
当然,部分办公Agent自带云电脑的,比如WorkBuddy和豆包工作,也可以用自带的云电脑去设定定时任务,然后执行签到脚本。跟上面老马说的豆包工作电脑客户端设定的思路是一样的,只不过可能会失败。
而金山文档老马经过一个星期的测试下来,实现Trae的每天自动签到是很稳定的。除非哪天token过期了,你再重新去获取一下,更换掉原来B1格子里面的旧token就行了:
对了,这里由于Trae的风控问题,老马是使用EdgeOne Pages搭建了一个中转。中转正常来说是不会遇到失效的问题,如果哪天失效了大家在评论区里面反馈给老马。
最后补充一点,Trae的办公Agent还是可以用一用的,每天签到领100个积分鸡蛋,积少成多。关键是Trae支持的第三方模型很多,有些模型的倍率还比较低,作为备用Agent还是挺香的:
∞ · POSTSCRIPT
写在最后
好了,以上就是今天的分享。欢迎关注、点赞、转发一键三连。有任何问题和需求,请在评论区留言,回见!


