下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/indiv-ayan--forge.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @indiv-ayan/forge。每天在网页上重复点的活:录制一遍,以后一条命令自动跑完,还能封装成可安装的技能。自动探网页接口,能走接口的转纯后台更稳更快。适合运营、投放、数据搬运。触发词:重复操作自动化、录制网页操作、浏览器自动化、网页脚本。
阅读全文 (展开查看完整说明)
概述
skill-forge:重复的浏览器操作 → 更短的自动化路径
⚠️ 使用范围与免责声明(先读这条)
- 许可:MIT,可自由使用、修改、分发,保留版权声明即可。
- 禁止违规用途:不得用于绕过平台审核、规避广告法、伪造数据、刷量或绕过反爬。
- 使用者自负合规责任:录制与产出的内容发布前,请按《广告法》与各平台最新规则自行复核;本工具生成的内容不构成官方承诺。
- 数据与责任切割:本包不含任何投放数据、账号数据、品牌与产品系列名、个人信息;使用者在录制、回填、发布过程中产生的任何内容,由其自行保证来源合法并已脱敏,与作者无关。
- 录制会在本机生成
recordings/、evidence/(可能含你页面上的数据),只落本地、不上传;用完请自行清理。- 合法使用边界(逐条自查见
references/合规与法律边界.md):只对你有权访问的账号与页面录制;不得绕过验证码 / 风控 / 付费墙,不得抓取不公开数据,不得把他人个人信息录进产物;目标平台的《服务协议》是否允许自动化操作,由使用者自行确认并承担后果。- 三条硬红线:不抓竞品非公开数据、不绕验证码与风控、不高频访问。
一句话:你像平时一样走一遍 → 工厂录下「点了什么 / 跳到哪 / 发了什么请求 / 回了什么数据」→ agent 据此判断有没有更短的路(直调接口、少点几步、换入口)→ 你拍板 → 生成能自己跑的子技能包。
定位(别偏):只干一件事 —— 把重复的浏览器操作,变成更短、可自动跑的路径,减少人工。不做通用爬虫,不做数据加工,不做报表美化。
0 装之前要知道什么
| 项 | 要求 | 不满足会怎样 |
|---|---|---|
| Node | ≥ 22(实测 22.22;脚本用内置 fetch / WebSocket,零 npm 包) | Node 20 及以下报 WebSocket is not defined,录制直接起不来 |
| Python | ≥ 3.8(实测 3.11;只用标准库 zipfile/xml/csv/json/argparse) | localview.py / analyze.py 报语法错 |
| Chrome | ≥ 136(实测 140) | 136+ 不开独立 user-data-dir 就打不开调试口,报「连不上 127.0.0.1:18802」 |
| 登录态 | 复用你已登录的浏览器;要无人值守才用 login.mjs 走账密独立通道 | 未登录时录到的都是登录页,接口 401(运行时归因码 LOGIN) |
| 磁盘 | 每次录制约 1–5 MB(recordings/ + evidence/) | 磁盘满则录制中途写盘失败 |
| 网络 | 无需外网;只用本机回环 127.0.0.1 | 断网也能跑;但业务站点本身要能访问 |
风险须知(四条,都是「风险 → 影响 → 怎么兜」):
- 会读你已登录后台的数据 → 页面数据可能含投放/账号信息 → 默认只读;产物只落本机,不上传;用完自行清理。
- 会开独立调试 Chrome → 不抢你正在用的窗口,但会多一个进程 → 跑完自动按端口关掉;
--keep-open才留着。 - 能生成写操作的子包(加预算/提交/发布)→ 误跑会改生产数据 → 写操作必须问「上限 + 谁批 + 先 DryRun」,没写上限只标「待确认」。
- 登录密码 → 泄露风险 → 只在内存里用一次,不落盘、不进日志、不进子包。
部署前人工审批:① 我知道它会读什么(哪个后台的登录态);② 我同意它只连 127.0.0.1 的调试口,不连外网;③ 那个浏览器/账号是我自己的。任一不确定就别装,改用只读模式(只做录制与证据包,不生成可执行子包)。
0.3 工具权限与调用位置(评审要的「用途证据」)
| 工具 | 用在哪 | 边界 |
|---|---|---|
terminal | 跑本技能 14 个脚本(node / python)+ 一条固定 powershell | 按文件名白名单匹配;不跑 -c/任意命令;powershell 只按端口关自己开的浏览器 |
read_file | 读录制产物、你给的源表、你下载的文件 | 只读技能目录与用户显式指定的路径 |
write_file | 落录制、证据、子包、日志 | 只写技能目录与用户指定产出目录;不写系统目录 |
clarify | 第 ④ 步问需求、写操作前确认 | 只问不替用户答;答不上来记「待确认」 |
network(不声明工具) | 无 | 脚本不直连外网;仅本机 CDP 回环,故 allowed-tools 里不列 network |
0.4 依赖与供应链
| 依赖 | 必需? | 版本 | 用途 | 来源 |
|---|---|---|---|---|
| Node.js | 必需 | ≥ 22(实测 22.22) | 全部 .mjs 脚本(CDP、录制、生成子包) | 官网或包管理器安装 |
| npm 第三方包 | 无 | — | scripts/ 下没有任何 require / 包导入,全用内置模块 | — |
| Python | 可选(只 UI 版映射、看下载文件) | ≥ 3.8(实测 3.11) | analyze.py / localview.py | 系统或包管理器安装 |
| pip 第三方包 | 无 | — | 只用标准库(zipfile、xml.etree、csv、json、argparse、hashlib、subprocess) | — |
| Chrome | 必需 | ≥ 136(实测 140) | 被 CDP 驱动的浏览器 | 本机安装 |
| 装完 30 秒自检 | — | — | node -v(须 ≥22)→ node scripts/manage.mjs list → python scripts/localview.py --help | — |
供应链控制:零第三方包(无 npm/pip 安装,无镜像依赖);Chrome 用本机已装的;脚本全部随包分发、可逐行审阅;没有外网下载步骤。代码来源:独立实现,未复制任何外部代码/注释/文案/界面;思路借鉴的公开来源逐条列在 references/合规与法律边界.md 附录 A(仅说明来源,不构成合作或背书)。
四步(第 ④ 步问需求不能跳:不问 = 产物只是「重复路径」,不是自动化)
| 步 | 命令 | 产出 |
|---|---|---|
| ① 录 | node scripts/record.mjs --url <起始页,可 about:blank> --name <链路名> [--port 18802]<br>页面右上角自动出现浮标:状态(录制中/已暂停)+ 实时计数 + 操作流水 + 「说一句」备注框 + 暂停 / 结束按钮 | recordings/*.rec.json:点击 6 级定位 + 元素快照(outerHTML 前 300 字 + tag/role/name) + 跳转 + XHR/Fetch 的 URL/入参/状态/耗时/响应字段/行数 + 口述备注 notes |
| ② 证 + 探 | node scripts/evidence.mjs --recording X.rec.json<br>node scripts/probe.mjs --recording X.rec.json --index N [--minimize] | 证据包.md/html(时间线 + 接口候选打分)<br>探查报告.md + 接口配置草稿.json |
| ②.5 判参 | 首选:同一操作再录一遍,node scripts/diffrec.mjs --a 第二遍.rec.json --b 第一遍.rec.json(record.mjs 发现同名上一份录制会自动跑这步;录完也会自动按端口关浏览器)<br>只有一遍时:node scripts/infer_params.mjs --rec X.rec.json [--out 参数判定.csv] 先出变量提示(日期/单号/金额/接口带出的值)——是提示,不是定论,关键链路仍要两遍 diff | evidence/diff_*/对比报告.md + 参数判定.json<br>参数判定.csv(单遍提示) |
| ④ 问 | node scripts/interview.mjs --link <名> [--rec X.rec.json] [--type api|ui]<br>人在场就一条条问;agent 已问过就用 --answers answers.json;录制时浮标里说的原话会自动带出来,不用再问一遍<br>问:什么时候跑(cron/阈值/手动/一次性)· 参数哪来 · 产出形态(本地文件/在线表格/接口回填/页面回读/只给人看,可多选) · 给谁 · 怎么算成功 · 失败找谁 · 写操作上限<br>答不上来不拦你:记成「待确认」写进子技能,回头补;要强制问全再加 --strict | 配置/触发.json + 打印「## 什么时候跑」段(欠什么也一起列出来) |
| ⑤ 固 | node scripts/build_skill.mjs --link <名> --config <探查目录> --type api --verdict-from <参数判定.json> --require-trigger<br>或 --type ui | produced/<链路>/ 自包含包(SKILL.md 已含「什么时候跑」)+ 说明书.md(人看的:干什么/何时跑/给什么/怎么算成功/改版怎么办) + zip/ + 台账一行 |
录制可
--url about:blank起步,用户自己粘地址。同 tab 整页跳转靠重注入,新开 tab 靠followNewTab()(只跟 http(s))。开工先查站点经验:在
references/里找site-<host>.md,有先读;真跑通后回写 3–5 条(入口/登录/数据从哪来/坑/校验),只写验证过的。
判据:走接口还是走 UI
| 探查结果 | 结论 | 下一步 |
|---|---|---|
| 2xx + 字段对得上 + 行数 > 0 | 能接口化 | --type api |
| 2xx 但没数据 / 字段空 | 接口在,但不是这条数据 | 换参数再探;仍不行走 UI |
| 401 / 403 | 需要额外鉴权 | 写清缺什么(token?单点登录?),别猜 |
| 录制里根本没有 XHR | 只能 UI | --type ui(见 references/UI版-表格搬运.md) |
候选打分:2xx +2|有返回字段 +3|有行数 +3|含 date/page 参数 +2|URL 像取数 +1|静态资源 −4。≥6 分才值得探。
四条防「静默少数据」的硬规矩(都已落成代码)
- 请求体模板替换:模板必须来自录制原文,只换
{{变量}};拿不到原文模板 →build_skill拒绝生成。 - 字段数校验:
校验.fieldCount= 探查到的响应字段数;api_run对不上就非 0 退出(--allow-fields才放行)。 - 独立账密通道:
login.mjs开专属user-data-dir登一次,之后api_run --profile … --bg脱人跑;密码只从SF_USER/SF_PASS读,不落盘。 - 按域名建站点经验库:
references/site-<host>.md;一站点一份,别重复踩坑。
五条「少踩坑」的机制(都已落成代码 + 有断言)
| 机制 | 解决什么 | 怎么用 | 边界 |
|---|---|---|---|
| 失败自愈 | 网站小改版(换个 class、多包一层)→ 以前直接报错要整条重录 | 回放时按 best定位 → L1_id → L2_testid → L3_role → L4_text → L5_css → L6_nth_path 逐级重试;命中打印 [自愈] 第N步:用 L4_text 点到 | 默认只报告不动库;加 --heal 才把新定位回写 定位库.csv 并记 配置/自愈记录.csv、logs/自愈.log。六级别全找不到才算真改版 |
| 元素快照 | 改版后没人记得「当时那个按钮长什么样」,靠回忆重录 | rec.json 每个动作带 locator.snapshot:html(outerHTML 前 300 字)+ tag/role/name/attrs/rect | 只存特征不存整页;不含账号数据;300 字封顶防录制文件膨胀 |
| 子包说明书 | 子包只有脚本,换人接手看不懂为什么这么点 | build_skill 自动生成 说明书.md:干什么 / 何时跑 / 逐步(和定位库同序号)/ 每次给什么 / 落哪给谁 / 怎么算成功 / 改版怎么办 / 出问题怎么办 / 你录制时说的原话 | 只写录制 + 访谈里真实存在的;缺的写「待确认」,不编 |
| 单遍判参 | 只有「录两遍比 diff」才知道哪个是变量,成本翻倍 | node scripts/infer_params.mjs --rec X.rec.json [--out 参数判定.csv]:日期 / 长单号 / 金额 / URL 带出 / 接口响应里出现 → 判变量并给理由 | 提示,不是定论;关键链路仍以两遍 diff 为硬口径 |
| 口述备注 | 「不知道什么时候加预算」这类意图,录完就想不起来了 | 录制时浮标里「说一句」→ 存 rec.json.notes(带第几步后)→ interview.mjs --rec 自动带出来并写进 触发.json | 备注不算操作、不进定位库;跟答案冲突时以访谈答案为准 |
子包两种形态
- 接口版:
配置/接口.json+scripts/api_run.mjs。api_run.mjs --config 配置 [--param k=v] [--out x.csv] [--go] [--dry] [--bg] [--profile <dir>]。走「已登录浏览器页面内 fetch」,同源带 cookie;--dry只渲染 URL/body 不碰浏览器。 - UI 版:
run.mjs回放定位库 → 组装数据 → 贴到路由表位置 → 回读复核。表格搬运走这条,详见references/UI版-表格搬运.md。
两种都不改代码改配置:换账户/换日期只加 --param 或改配置行。
什么算「问明白了」(这一步决定它是不是自动化)
用户判定标准(2026-11-06 原话):「只有加的动作,不知道什么时候加,这样子没有动作的规则,做出来最多是一个重复的路径而已。」
但别拿模板卡人 —— 只问、不固化:答不上来记「待确认」,回头补。
- 有
触发.json,且里面能回答:什么时候跑 / 参数哪来 / 跑完去哪给谁 / 怎么算成功 / 失败找谁; - 答不上来不算错:写成「待确认」列出来,子技能里也会带着这份欠账,谁接手都知道边界在哪(拿模板硬卡人反而是帮倒忙);
- 产出形态按实的写:本地文件、粘贴在线表格(映射由列头自动对,不用人手写)、接口回填、页面回读、只给人看——可多选;
- 写操作(加预算、提交、发布)要写上限 + 谁批 + 先 DryRun;没写就当「待确认」,别让它自动跑;
- 事件触发要看住检查频率 + 单次/日累计上限——没有上限就是无限自动执行;
- 只有路径没有这些 →
build_skill --require-trigger直接拒绝(不加该参数时在子技能顶部插「还没问过需求」待办)。
什么算「跑通」(别自己放宽)
- 接口版:状态 2xx、字段能对上、行数 ≥ 下限、字段数一致,四项全过;
- UI 版:预览列头与值对得上;真跑后每行唯一键都能在目标页回读见到,差一行 = 失败;
- 失败就
manage.mjs fail,不许默默跳过; - 坏在哪儿别让人猜:
manage.mjs fail --http 401 --exit 3 …会自动归因,输出「现象 / 人话 / 哪坏了 / 下一步 / 要不要重录」;单独问用scripts/diagnose.mjs。
收尾:跑完必须关浏览器(全局规则)
生成子包时 child.SKILL.md / child.api.SKILL.md 必须带 ## 收尾 段,缺了算没写完(子包模板已内置;交付前先查这一段):
- 终点:数据落盘 / 回填完成 / 提交有回执 = 做完;录制线点浮标「结束」即终点(存盘 + 关浏览器)
- 关谁:按调试端口只关本技能自己开的那台 Chrome(
cdp.mjs内置closeChromeByPort,只匹配--remote-debugging-port=<端口>的进程;禁止按进程名全杀) - 逃生:
--keep-open/KEEP_BROWSER=1,默认关 - 日志:
关闭浏览器 port=... remaining=0(证明真关了)
判据:录完/跑完还把 Chrome 挂着 = 这条链路没做完。
改完必过的三道门(交付/发布前)
- 跑全部测试:
node test/run_node_test.mjs+node test/run_forge_v2_test.mjs+node test/run_hud_test.mjs+python -I test/run_offline_test.py,全过才算改完。 - 脱敏扫描复查:公司/品牌名、内部项目名、个人账号、本机绝对路径、手机号/邮箱——0 命中才能分发;分发只发 zip,包内不得带
recordings/evidence/produced/logs/和真实台账.csv。 - 改了任何文件(哪怕只是文档)→ 全量重验:重新打包 + 重新解压复跑测试;MD5 与文件数变了就重新交付,别复用上一轮结果。
边界(别越界)
- 只要一份照着点的人工手册、不想自动化 → 证据包的时间线本身就是操作手册,不必生成子包。
- 要批量提交 / 建计划 / 发消息 → 本技能能录出来,但真提交前必须问用户,且先
-DryRun。 - 要出复盘报告 / 日报 → 用对应业务技能,工厂只管「取数路径」。
- 要看下载下来的本地文件 →
python scripts/localview.py --file <路径> [--open](读行数/列名/样例行,或调系统程序打开)。CDP 读不了别家程序的窗口,只能读文件。
细节去哪找(按需读,别通读)
| 要查什么 | 看哪个 |
|---|---|
| 录完怎么问需求、失败怎么用人话解释 | references/需求访谈与失败归因.md |
| 改版自愈、子包说明书、单遍判参、口述备注 | references/自愈_说明书_判参_备注.md |
| 合法边界、要不要担责、平台条款怎么自查 | references/合规与法律边界.md |
| 坑点、症状→根因 | references/Pitfalls.md |
| 页面浮标怎么画、怎么和驱动接线 | references/页面浮标规范.md |
| UI 版表格搬运全链路 | references/UI版-表格搬运.md |
| 失败记账 / 3 次重录 / 旧包 7 天 | references/生命周期与升级.md |
| 打包、测试、脱敏纪律 | SKILL.md「改完必过的三道门」一节 |
| 哪些真验过、哪些待联调 | references/实测状态.md |
| 浏览器外看结果(读下载的 xlsx/csv、调程序打开) | references/本地文件读取.md |
| 某站点踩过的坑 | references/site-<host>.md |
| 各能力口径与入口 | 功能台账.md |