用途
playwright-stealth-identity 用于为每个账号创建或重新调整一份 CloakBrowser 隐身身份,存放在 <project>/.stealth/<name>/ 目录下,该目录会被 gitignore 忽略。每份身份拥有一个其他身份不会共享的指纹种子。
该技能是唯一创建或编辑 profile.toml 的组件。它把生成好的身份交给 playwright-stealth,用于手动登录和任何驱动操作。
仅限授权使用:身份用于你拥有或获授权测试的资产。每个账号一个身份,绝不用于规避封禁,也不得在违反站点条款的情况下运行多账号。完整政策见 references/identity.md。
跳过规则(优先阅读)
默认值已经是最强的反识别设置,提问只会让用户偏离默认值。因此:
- 如果用户说了“默认”“直接设置”之类的话;或没有指定代理、地理位置或区域设置;或你无法询问用户(非交互式运行、/goal、CI):不要问任何问题。直接运行不带设置标志的创建命令,报告你所做的假设,然后停止。
这是常见路径,以单条命令、零提问结束。
绝不要询问种子、文件权限或 .gitignore 条目——这些不是用户决策,由脚本处理。绝不要主动提供用户未提及的代理:主机自身的住宅 IP 优于任何可购买的代理,主动问“要不要代理?”会把用户引向更差的配置。
何时使用 / 何时不使用
使用场景:创建新身份,或重新调整已有身份——绑定代理、修正时区或区域设置、更改 humanize 预设、设置存储配额。
不适用场景:安装工具链(应使用 playwright-stealth-setup);浏览、登录、恢复会话或运行 canary(应使用 playwright-stealth)。如果工具链缺失,本技能的命令会失败并提示 setup 技能名称——先运行它,再回来。
工作流程
-
命名身份。使用 kebab-case,每个账号一个,名称会成为 CLI 句柄:acme-portal、reddit-main、eu-shop。从用户所说内容推导;只有在确实无从推导时才询问。每个账号一个身份是硬性规则——相同的种子加相同的 IP 会永久关联两个账号。
-
决定是否要提问。应用上述跳过规则。如果用户确实提到了代理、国家或区域设置,只针对其请求实际涉及的设置项发一条批量消息,每项内联默认值。绝不进行第二轮;未回答的项采用默认值。
设置项与默认值:
- proxy:默认无——使用本机自身的住宅 IP;仅当用户提到代理、国家或“不同 IP”时询问。
- timezone / locale:默认跟随主机,或通过 geoip 跟随代理;仅当用户提到地理、语言或不匹配时询问。
- human_preset:默认 careful;仅当用户提到速度或觉得慢时询问。
- storage_quota_mb:默认 5000;仅当用户提到无痕检测时询问。
- 绑定代理前先做预检。绝不把未验证的代理写入 profile:
python3 -m cloakbrowser info --proxy "http://user:pass@host:port"
该命令会打印启动时实际应用的出口 IP、时区和区域设置。检查地理是否符合用户要求。如果报告的时区不对,在第 4 步显式设置 --timezone/--locale——它们会覆盖 geoip。
仅使用静态 ISP 或静态住宅代理。轮换池会破坏已登录会话,数据中心 IP 仅凭 ASN 声誉就会被封锁。层级与供应商尽职调查见 references/identity.md。
- 创建——一条命令,设置以标志传入。绝不手动编辑 profile.toml;标志会原子地把值替换进带注释的模板:
常见情况:不带任何标志
python3 "${CLAUDE_SKILL_DIR}/scripts/identity.py" --identity acme-portal --init
已配置,当访谈产生了答案时
python3 "${CLAUDE_SKILL_DIR}/scripts/identity.py" --identity eu-shop --init
--proxy "socks5://gate.example:1080" --proxy-user bob
--timezone Europe/London --locale en-GB
代理密码来自环境变量 STEALTH_PROXY_PASSWORD——绝不写入文件,也绝不出现在 ps 可读的命令行中。同一命令可重新调整已有身份:它就地应用标志,并保留种子、注释以及所有未指定的键。
- 展示解析结果,然后交接。
python3 "${CLAUDE_SKILL_DIR}/scripts/identity.py" --identity acme-portal --print-args
确认 --fingerprint=<seed> 存在。然后告诉用户下一步是使用 playwright-stealth 技能进行手动登录和任何驱动——本技能不打开浏览器。
输出规范(“完成”的样子)
- .stealth/<name>/profile.toml 存在,种子非零,且 .stealth/ 已被 gitignore。
- 你报告了:身份名称、种子、路径,以及你采取的每一项假设。
- 如果绑定了代理,你先做了预检,并说明它解析到的出口 IP。
- 你指明 playwright-stealth 是下一步。你没有启动浏览器。
注意事项
- 零提问是成功案例,不是捷径。用户说“默认就行”却收到五问访谈,说明本技能失败了。
- 每个账号一个身份。绝不在两个账号间复用名称、种子或 user-data/ 目录。共享种子的两个身份呈现同一设备。
- 重新调整,不要重建。修正时区意味着用 --timezone 重跑 --init;它会保留种子。删除目录重来会丢弃已登录会话和站点已知的指纹。
- geoip 可能出错。它从 GeoIP 数据库推导时区,而数据库会过时:曾观察到真实的伦敦出口 IP 把浏览器时钟设为 America/Chicago。绑定任何代理后,用浏览技能的 canary.py --check-egress 验证,若不一致则显式固定 timezone/locale。
- 代理通常是错误答案。层级存在是有原因的,第 0 级——不用代理——最强也最便宜。只有需要不同地理或第二个不可关联身份时才值得用代理。
- 本技能不安装任何东西,也不打开任何东西。如果 cloakbrowser 无法导入,命令会说明并指出 playwright-stealth-setup。
参考资料
references/identity.md——存储布局、每个 profile.toml 键及其推导规则、代理层级与供应商尽职调查、身份卫生,以及完整的授权使用政策。